-
Posts
702 -
Joined
-
Last visited
-
Days Won
5
Reputation Activity
-
BananaFight reacted to Felipe Moraes in Saindo da "tela preta" e indo para a sua Janela em 5 minutos
Olá pessoal, boa tarde.
Sei que é muito chato programar e ver os resultados apenas naquele console preto e sem graça.
Por isso, vou ensinar pra vocês como criar uma janela em menos de 5 minutos, utilizando Java.
Primeiramente, vamos precisar de 2 classes.
Uma, será nossa Testadora, onde teremos o método main. A outra, que chamaremos de JanelaController teremos os componentes para exibir nossa janela.
Primeiramente, nossa classe Testadora ficará assim:
public class Testadora { public static void main(String args[]){ JanelaController janela = new JanelaController(); janela.abrirJanela(); } } Nada demais. Ela vai criar um objeto do tipo JanelaController, vai referencia-la como janela, e vai executar seu método chamado abrirJanela(), que veremos a seguir.
Em Java, possuimos bibliotecas nativas para a utilização de janelas. Em nosso tutorial, usaremos a biblioteca Swing. Seu caminho é "javax.swing;".
Primeira coisa, devemos importar essa biblioteca para nossa classe. Para isso, basta usar o comando import, antes da declaração da classe.
import javax.swing.*; public class JanelaController { private JFrame frame; // É o componente responsável por exibir a janea private JLabel texto; // Responsável por exibir um texto public void abrirJanela(){ // Devemos instanciar o objeto do tipo JFrame, para que possamos utiliza-lo em nossa classe. frame = new JFrame(); // Aqui, chamamos os métodos da classe do JFrame. Por exemplo: frame.setSize(400, 400); // Define o tamanho que terá nossa janela frame.setVisible(true); // Colocamos a janela como visível frame.setTitle("Minha Janela Funciona !"); // Inserimos um título para nossa janela // Você pode conferir mais métodos, dentro da própia classe JFrame. É só abri-la! // Aqui, instanciamos um objeto do tipo JLabel, e chamamos sua variável de texto. texto = new JLabel(); // Definimos também um texto para ele, através do método setText() da classe do JLabel. texto.setText("Hail Xtibia!"); // Essa parte é muito importante, pois é onde adicionamos nosso JLabel na janela. frame.add(texto); } } Perceberam o quanto é fácil ?
Se tiverem a curiosidade, podem pesquisar por mais componentes, para incrementar a janela de vocês.
Segue algumas:
JButton JCheckBox JMenu JProgressBar JTextField Entre muitos outros
Espero que tenham gostado desse rápido tutorial.
Abraços e até a próxima !
-
BananaFight got a reaction from Gabriel Netto in Diferença entre 2D e 3D nos Jogos
Achei esse video interessante e queria compartilhar com vcs
-
BananaFight reacted to Felipe Moraes in [Linux] Comandos
Segue alguns dos comandos mais utilizados no linux.
Achei na internet e resolvi compartilhar.
-
BananaFight got a reaction from DarkWore in Suggestname - monster system - programando c++ opentibia
Fala galera, eu resolvi criar esse sistema aonde os montros tem seu dano / defesa / vida definidos pelo level / atributo que são configurados no XML, e eu fiz esse sistema em stream para mostrar um pouco de como trabalhar nas source do TFS 1.2, no sistema trabalhamos editando o MonsterType, Monster, Combat e a estrutura do xml dos monsters, é bastante conteúdo e vale apena conferir, uma boa fonte de aprendizado.
LINK DO REPOSITÓRIO COM A VERSÃO APRIMORADA DOS SISTEMAS:
https://bitbucket.org/eduardovicente/pokemo-new-era
Video
Essa é uma versão resumida e com uma melhor qualidade no audio -
Playlist passo a passo Criando na hora. [ 13 vídeos ] -
Imagens
-
BananaFight got a reaction from Eskylo in [C++] Opcode versão 8.54+
Adaptação pra source 8.54+
LEMBRE-SE, ISSO É NA SOURCE DO SERVIDOR
Vamos ao código.
protocolgame.h
Embaixo de
void AddShopItem(NetworkMessage_ptr msg, const ShopInfo item);
Adicione
void parseExtendedOpcode(NetworkMessage& msg);void sendExtendedOpcode(uint8_t opcode, const std::string& buffer);
protocolgame.cpp
Embaixo de
uint32_t key[4] = {msg.GetU32(), msg.GetU32(), msg.GetU32(), msg.GetU32()};enableXTEAEncryption();setXTEAKey(key);
Adicione
// notifies to otclient that this server can receive extended game protocol opcodesif(operatingSystem >= CLIENTOS_OTCLIENT_LINUX)sendExtendedOpcode(0x00, std::string());
Embaixo de
void ProtocolGame::AddShopItem(NetworkMessage_ptr msg, const ShopInfo item){const ItemType& it = Item::items[item.itemId];msg->AddU16(it.clientId);if(it.isSplash() || it.isFluidContainer())msg->AddByte(fluidMap[item.subType % 8]);else if(it.stackable || it.charges)msg->AddByte(item.subType);elsemsg->AddByte(0x01);msg->AddString(item.itemName);msg->AddU32(uint32_t(it.weight * 100));msg->AddU32(item.buyPrice);msg->AddU32(item.sellPrice);}
Adicione
void ProtocolGame::parseExtendedOpcode(NetworkMessage& msg){uint8_t opcode = msg.GetByte();std::string buffer = msg.GetString();// process additional opcodes via lua script eventaddGameTask(&Game::parsePlayerExtendedOpcode, player->getID(), opcode, buffer);}void ProtocolGame::sendExtendedOpcode(uint8_t opcode, const std::string& buffer){// extended opcodes can only be send to players using otclient, cipsoft's tibia can't understand themNetworkMessage_ptr msg = getOutputBuffer();if(msg){TRACK_MESSAGE(msg);msg->AddByte(0x32);msg->AddByte(opcode);msg->AddString(buffer);}}
Embaixo de
case 0x1E: // keep alive / ping responseparseReceivePing(msg);break;
Adicione
case 0x32: // otclient extended opcodeparseExtendedOpcode(msg);break;
enums.h
Embaixo de
enum GuildLevel_t{GUILDLEVEL_NONE = 0,GUILDLEVEL_MEMBER,GUILDLEVEL_VICE,GUILDLEVEL_LEADER};
Substitua o OperatingSystem por este
enum OperatingSystem_t{CLIENTOS_LINUX = 0x01,CLIENTOS_WINDOWS = 0x02,CLIENTOS_OTCLIENT_LINUX = 0x0A,CLIENTOS_OTCLIENT_WINDOWS = 0x0B,CLIENTOS_OTCLIENT_MAC = 0x0C,};/
player.h
Embaixo de
void sendCreatureShield(const Creature* creature)
Adicione
void sendExtendedOpcode(uint8_t opcode, const std::string& buffer){if(client) client->sendExtendedOpcode(opcode, buffer);}
luascript.cpp
Embaixo de
void LuaScriptInterface::registerFunctions(){
Adicione
//doSendPlayerExtendedOpcode(cid, opcode, buffer)lua_register(m_luaState, "doSendPlayerExtendedOpcode", LuaScriptInterface::luaDoSendPlayerExtendedOpcode);
Embaixo de
SHIFT_OPERATOR(int32_t, LeftShift, <<)SHIFT_OPERATOR(int32_t, RightShift, >>)SHIFT_OPERATOR(uint32_t, ULeftShift, <<)SHIFT_OPERATOR(uint32_t, URightShift, >>)#undef SHIFT_OPERATOR
Adicione
int32_t LuaScriptInterface::luaDoSendPlayerExtendedOpcode(lua_State* L){//doSendPlayerExtendedOpcode(cid, opcode, buffer)std::string buffer = popString(L);int opcode = popNumber(L);ScriptEnviroment* env = getEnv();if(Player* player = env->getPlayerByUID(popNumber(L))) {player->sendExtendedOpcode(opcode, buffer);lua_pushboolean(L, true);}lua_pushboolean(L, false);return 1;}
luascript.h
Embaixo de
virtual void registerFunctions();
Adicione
static int32_t luaDoSendPlayerExtendedOpcode(lua_State* L);
creatureevent.h
.
Substitua
CREATURE_EVENT_PREPAREDEATH
Por isso
CREATURE_EVENT_PREPAREDEATH,CREATURE_EVENT_EXTENDED_OPCODE // otclient additional network opcodes
Embaixo de
uint32_t executePrepareDeath(Creature* creature, DeathList deathList);
Adicione
uint32_t executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer);
creatureevent.cpp
Embaixo de
else if(tmpStr == "death")m_type = CREATURE_EVENT_DEATH;
Adicione
else if(tmpStr == "extendedopcode")m_type = CREATURE_EVENT_EXTENDED_OPCODE;
Embaixo de
case CREATURE_EVENT_DEATH:return "onDeath";
Adicione
case CREATURE_EVENT_EXTENDED_OPCODE:return "onExtendedOpcode";
Embaixo de
case CREATURE_EVENT_DEATH:return "cid, corpse, deathList";
Adicione
case CREATURE_EVENT_EXTENDED_OPCODE:return "cid, opcode, buffer";
Embaixo de
std::cout << "[Error - CreatureEvent::executeFollow] Call stack overflow." << std::endl;return 0;}}
Adicione
uint32_t CreatureEvent::executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer){//onExtendedOpcode(cid, opcode, buffer)if(m_interface->reserveEnv()){ScriptEnviroment* env = m_interface->getEnv();if(m_scripted == EVENT_SCRIPT_BUFFER){env->setRealPos(creature->getPosition());std::stringstream scriptstream;scriptstream << "local cid = " << env->addThing(creature) << std::endl;scriptstream << "local opcode = " << (int)opcode << std::endl;scriptstream << "local buffer = " << buffer.c_str() << std::endl;scriptstream << m_scriptData;bool result = true;if(m_interface->loadBuffer(scriptstream.str())){lua_State* L = m_interface->getState();result = m_interface->getGlobalBool(L, "_result", true);}m_interface->releaseEnv();return result;}else{#ifdef __DEBUG_LUASCRIPTS__char desc[35];sprintf(desc, "%s", player->getName().c_str());env->setEvent(desc);#endifenv->setScriptId(m_scriptId, m_interface);env->setRealPos(creature->getPosition());lua_State* L = m_interface->getState();m_interface->pushFunction(m_scriptId);lua_pushnumber(L, env->addThing(creature));lua_pushnumber(L, opcode);lua_pushlstring(L, buffer.c_str(), buffer.length());bool result = m_interface->callFunction(3);m_interface->releaseEnv();return result;}}else{std::cout << "[Error - CreatureEvent::executeRemoved] Call stack overflow." << std::endl;return 0;}}
game.h
Embaixo de
int32_t getLightHour() {return lightHour;}void startDecay(Item* item);
Adicione
void parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer);
game.cpp
Embaixo de
player->sendTextMessage(MSG_INFO_DESCR, buffer);}
Adicione
void Game::parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer){Player* player = getPlayerByID(playerId);if(!player || player->isRemoved())return;CreatureEventList extendedOpcodeEvents = player->getCreatureEvents(CREATURE_EVENT_EXTENDED_OPCODE);for(CreatureEventList::iterator it = extendedOpcodeEvents.begin(); it != extendedOpcodeEvents.end(); ++it)(*it)->executeExtendedOpcode(player, opcode, buffer);}
/creaturescripts/creaturescrips.xml
<event type="extendedopcode" name="ExtendedOpcode" event="script" value="extendedopcode.lua"/>
/creaturescripts/extendedopcode.lua
OPCODE_LANGUAGE = 1function onExtendedOpcode(cid, opcode, buffer)if opcode == OPCODE_LANGUAGE then-- otclient languageif buffer == 'en' or buffer == 'pt' then-- example, setting player language, because otclient is multi-language...--doCreatureSetStorage(cid, CREATURE_STORAGE_LANGUAGE, buffer)endelse-- other opcodes can be ignored, and the server will just work fine...endend
Créditos : MaXwEllDeN 100% por adaptar o código
-
BananaFight got a reaction from dolver in [Encerrado]Naruto OT Recrutamento!
Seu projeto tem tudo para dar errado, não tem um objetivo, metas e muito menos uma ideia do que precisa ser feito.
Para montar um projeto você precisa ser um líder, ter em mente o que você busca e os resultado que você quer.
Você não pode se tornar um líder de um projeto sem conhecimentos básicos do assunto ( A menos que seja um investidor que vai comprar os resultados ), recomendo que junte informações sobre oque quer que tenha no seu servidor, decida os caminhos que pretende tomar ( esses caminhos podem mudar com o decorrer do projeto, mas tenha em mente coisas fundamentais no projeto, para ele não perder o foco ) e por fim, busque pessoas capacitadas para lhe ajudar.
Ao buscar pessoas você deve oferecer uma perspectiva convincente da sua proposta, ou seja, você deve mostrar as vantagens que as pessoas que vierem a se juntar ao seu projeto terão, e o porque de elas deverem se juntar a você.
Enfim, essa é uma critica construtiva para que consiga dar continuidade ao seu projeto, em momento nem um eu quis te diminuir ou desmotivas, muito pelo contrário, estou dando dicas para que você consiga terminar o seu projeto.
-
BananaFight got a reaction from Damgrath in [Encerrado]Naruto OT Recrutamento!
Seu projeto tem tudo para dar errado, não tem um objetivo, metas e muito menos uma ideia do que precisa ser feito.
Para montar um projeto você precisa ser um líder, ter em mente o que você busca e os resultado que você quer.
Você não pode se tornar um líder de um projeto sem conhecimentos básicos do assunto ( A menos que seja um investidor que vai comprar os resultados ), recomendo que junte informações sobre oque quer que tenha no seu servidor, decida os caminhos que pretende tomar ( esses caminhos podem mudar com o decorrer do projeto, mas tenha em mente coisas fundamentais no projeto, para ele não perder o foco ) e por fim, busque pessoas capacitadas para lhe ajudar.
Ao buscar pessoas você deve oferecer uma perspectiva convincente da sua proposta, ou seja, você deve mostrar as vantagens que as pessoas que vierem a se juntar ao seu projeto terão, e o porque de elas deverem se juntar a você.
Enfim, essa é uma critica construtiva para que consiga dar continuidade ao seu projeto, em momento nem um eu quis te diminuir ou desmotivas, muito pelo contrário, estou dando dicas para que você consiga terminar o seu projeto.
-
BananaFight got a reaction from otavio101 in Suggestname - monster system - programando c++ opentibia
Fala galera, eu resolvi criar esse sistema aonde os montros tem seu dano / defesa / vida definidos pelo level / atributo que são configurados no XML, e eu fiz esse sistema em stream para mostrar um pouco de como trabalhar nas source do TFS 1.2, no sistema trabalhamos editando o MonsterType, Monster, Combat e a estrutura do xml dos monsters, é bastante conteúdo e vale apena conferir, uma boa fonte de aprendizado.
LINK DO REPOSITÓRIO COM A VERSÃO APRIMORADA DOS SISTEMAS:
https://bitbucket.org/eduardovicente/pokemo-new-era
Video
Essa é uma versão resumida e com uma melhor qualidade no audio -
Playlist passo a passo Criando na hora. [ 13 vídeos ] -
Imagens
-
BananaFight reacted to rohfagundes in Suggestname - monster system - programando c++ opentibia
muito bom parabens
desse seu jeito de explicar da para fazer em qualquer versão
aqui msm eu fiz no otx q é baseado na tfs 0.3.7
-
BananaFight got a reaction from Administrador in Flying system tfs 1.2
Fly System é um sistema que permite ao player voar pelo mapa em locais aonde antes não era possível.
Arrumando algumas coisas na source, comando /fly on, off, up, down funcionando, nova variável no player isFlying, canFly ( salvo no MySql )
Bugs
- Descer em itens bloqueáveis.
Changelog
To do
To Do- Done
-
BananaFight got a reaction from gabriel28 in Suggestname - monster system - programando c++ opentibia
Fala galera, eu resolvi criar esse sistema aonde os montros tem seu dano / defesa / vida definidos pelo level / atributo que são configurados no XML, e eu fiz esse sistema em stream para mostrar um pouco de como trabalhar nas source do TFS 1.2, no sistema trabalhamos editando o MonsterType, Monster, Combat e a estrutura do xml dos monsters, é bastante conteúdo e vale apena conferir, uma boa fonte de aprendizado.
LINK DO REPOSITÓRIO COM A VERSÃO APRIMORADA DOS SISTEMAS:
https://bitbucket.org/eduardovicente/pokemo-new-era
Video
Essa é uma versão resumida e com uma melhor qualidade no audio -
Playlist passo a passo Criando na hora. [ 13 vídeos ] -
Imagens
-
BananaFight got a reaction from Sirarcken in Flying system tfs 1.2
Fly System é um sistema que permite ao player voar pelo mapa em locais aonde antes não era possível.
Arrumando algumas coisas na source, comando /fly on, off, up, down funcionando, nova variável no player isFlying, canFly ( salvo no MySql )
Bugs
- Descer em itens bloqueáveis.
Changelog
To do
To Do- Done
-
BananaFight got a reaction from nociam in Stream programando c++ opentibia
Pessoal, eu estou para fazer um sistema em C++ de Controle de Summon e pensei em fazer uma stream / vídeo de eu criando o sistema e gostaria de saber se alguém tem interesse de ver isso.
Bom, o sistema de controle de summon seria algo como os monstros terem leveis randômicos pré determinados pelo xml, e os summons usariam o level do player como seu próprio level, esse level influenciaria no dano de magias / attacks básicos do monstro, e o summon só usaria spells caso o player ordenasse.
Fico no aguardo do feedback de vocês
-
BananaFight got a reaction from Sirarcken in Stream programando c++ opentibia
Essa é uma vesão de 30 min resumida e com melhor qualidade no audio.
-
BananaFight got a reaction from Sirarcken in Stream programando c++ opentibia
Pessoal, eu estou para fazer um sistema em C++ de Controle de Summon e pensei em fazer uma stream / vídeo de eu criando o sistema e gostaria de saber se alguém tem interesse de ver isso.
Bom, o sistema de controle de summon seria algo como os monstros terem leveis randômicos pré determinados pelo xml, e os summons usariam o level do player como seu próprio level, esse level influenciaria no dano de magias / attacks básicos do monstro, e o summon só usaria spells caso o player ordenasse.
Fico no aguardo do feedback de vocês
-
BananaFight got a reaction from Sirarcken in Stream programando c++ opentibia
Os Videos estão na Playlist aqui :
Desculpe o microfone baixo, mas ninguém me aviso.
-
BananaFight got a reaction from samlecter in Suggestname - monster system - programando c++ opentibia
Fala galera, eu resolvi criar esse sistema aonde os montros tem seu dano / defesa / vida definidos pelo level / atributo que são configurados no XML, e eu fiz esse sistema em stream para mostrar um pouco de como trabalhar nas source do TFS 1.2, no sistema trabalhamos editando o MonsterType, Monster, Combat e a estrutura do xml dos monsters, é bastante conteúdo e vale apena conferir, uma boa fonte de aprendizado.
LINK DO REPOSITÓRIO COM A VERSÃO APRIMORADA DOS SISTEMAS:
https://bitbucket.org/eduardovicente/pokemo-new-era
Video
Essa é uma versão resumida e com uma melhor qualidade no audio -
Playlist passo a passo Criando na hora. [ 13 vídeos ] -
Imagens
-
BananaFight got a reaction from efraimjk in Stream programando c++ opentibia
O link para a stream https://www.twitch.tv/suggestname
-
BananaFight got a reaction from Felipe Moraes in Suggestname - monster system - programando c++ opentibia
Fala galera, eu resolvi criar esse sistema aonde os montros tem seu dano / defesa / vida definidos pelo level / atributo que são configurados no XML, e eu fiz esse sistema em stream para mostrar um pouco de como trabalhar nas source do TFS 1.2, no sistema trabalhamos editando o MonsterType, Monster, Combat e a estrutura do xml dos monsters, é bastante conteúdo e vale apena conferir, uma boa fonte de aprendizado.
LINK DO REPOSITÓRIO COM A VERSÃO APRIMORADA DOS SISTEMAS:
https://bitbucket.org/eduardovicente/pokemo-new-era
Video
Essa é uma versão resumida e com uma melhor qualidade no audio -
Playlist passo a passo Criando na hora. [ 13 vídeos ] -
Imagens
-
BananaFight got a reaction from Sirarcken in Stream programando c++ opentibia
O link para a stream https://www.twitch.tv/suggestname
-
BananaFight got a reaction from Sirarcken in Stream programando c++ opentibia
Eu não vou postar os código em forma de arquivo, o sistema foi desenvolvido em vídeo, e vai ficar assim, ou seja, se quiser os códigos é só assistir o vídeo que estou upando no youtube.
-
BananaFight got a reaction from Survivor98130 in Abrindo novos Horizontes
Depois de incomodar um pouco o baxnie, ele me ajudou a criar o sistema de abrir miniwindow para o lado.
Nome: Resize Right Border Descrição: Abrir janelas para a direita Autor: Eduardo Vicente (Banana Fight) Website: www.xtibia.com
Versão 1.0
Features: cria uma barra lateral para regular o tamanho de janelas criadas em miniwindow
Instalação
otclient-master\data\styles\30-miniwindow.otui
embaixo de:
ResizeBorder
id: bottomResizeBorder
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
height: 3
minimum: 48
margin-left: 3
margin-right: 3
background: #ffffff88
você adiciona:
ResizeBorder id: rightResizeBorder anchors.top: parent.top anchors.bottom: parent.bottom anchors.right: parent.right width: 3 minimum: 48 margin-top: 3 magin-bottom: 3 background: #ffffff88
Agora em otclient-master\modules\corelib\ui\uiminiwindow.lua:
você procura por:
function UIMiniWindow:isResizeable()
deleta a função inteira, e muda por essa:
function UIMiniWindow:isResizeable() local resizeBorder = self:getChildById('bottomResizeBorder') local resizeBorderRight = self:getChildById('rightResizeBorder') return resizeBorder:isExplicitlyVisible() and resizeBorder:isEnabled() and resizeBorderRight:isExplicitlyVisible() and resizeBorderRight:isEnabled() end
Agora em
otclient-master\modules\corelib\ui\uiminiwindow.lua
Procure por:
function UIMiniWindow:disableResize()
e adicione essa linha :
self:getChildById('rightResizeBorder'):disable()
Agora procure por:
function UIMiniWindow:enableResize()
e adicione essa linha :
self:getChildById('rightResizeBorder'):enable()
Pronto, agora seus mods criados em miniwindow poderão ser abertos para os lados.
OBS: o sistema não esta 100%, e assim que possível vou adicionar as funções que faltam, como as de regular o tamanho maximo da tela e o minimo que ele pode abrir.
OBS 2: Caso a barra lateral para editar o tamanho da tela não pareça é porque dentro do arquivo .lua do seu mod tem a função
disableResize(), essa função impede a mudança no tamanho da janela.
-
BananaFight reacted to Tony Araujo in Digimon World Online
Bom, eu fui jogar e na minha humilde e sincera opinião, achei um tanto enjoativo e meio chatinho (sem ofensas, críticas construtivas), acho que teria como fazer algumas melhorias no mapa e em scripts também. (principalmente na parte dos módulos do otc.)
abraços.
-
BananaFight reacted to dalvorsn in Porque ser ladrão não vale apena!
Fato, essa falta de maturidade e um problema sério no ramo, nego acha que 100 conto é dinheiro, tu faz um favor de cobrar uma miséria e nego ainda acha um horror kk
-
BananaFight reacted to dalvorsn in Porque ser ladrão não vale apena!
Eu também não postaria, concordo com a postura do @BananaFight. É meio imaturo "revidar", sem ofensas, eu simplesmente não trabalharia mais com o cara. E claro, divulgaria para saberem do ocorrido e não serem enganados com ele, só nisso ele ja perde uma galera que poderia desenvolver pra ele, os que desenvolverem seria com pagamento antecipado provavelmente.
Além do mais, nossa comunidade de desenvolvedores é bem reduzida, a maioria migra pra outras áreas rapido, se ele tem o hábito de fazer isso, em pouco tempo não terá mais quem contratar.
-
Recently Browsing 0 members
- No registered users viewing this page.
