Ir para conteúdo

Tabela de Classificação

  1. Majesty

    Majesty

    Imperadores


    • Pontos

      45

    • Total de itens

      4.287


  2. underewar

    underewar

    Cidadãos


    • Pontos

      25

    • Total de itens

      49


  3. Luan MF

    Luan MF

    Cidadãos


    • Pontos

      7

    • Total de itens

      39


  4. Gengo

    Gengo

    Cidadãos


    • Pontos

      5

    • Total de itens

      5



Conteúdo Mais Visto

Exibindo conteúdo com a maior reputação desde 24em Posts

  1. 3 pontos
    Gengo

    [OTClient] Entendendo as funções Opcodes

    Eai, galera, blz! Hoje vim trazer um tutorial sobre Opcodes, sei que hoje em dia tem muitos tutorias falando sobre isso, porém é sempre bom dar uma atualizada, afinal um tutorial nunca será "igual" a o outro e quanto mais tutorias sobre o assunto, melhor o entendimento. Primeiro vamos conhecer o que é esse tal de Opcodes, uma breve explicação que vemos por ai. O que são Opcodes? R: Opcodes é a comunicação entre o cliente e o servidor. Na source do servidor muitos poderiam utilizar sockets, que são pacotes de informação, diretamente sem usar funcionalidades do jogo como meio de comunicação, já o Opcode utiliza-se recursos in-game para fazer essa comunicação. Vamos analisar o código do módulo acima? Vamos ver qual é a funcionalidade dessas funções e o que ela espera nos seus respectivos parâmetros. Vamos por etapa: 1 - ProtocolGame.registerExtendedOpcode(Opcode, function(protocol, opcode, buffer) end) Essa função tem a funcionalidade de registrar um Opcode, como vemos o nome já é autoexplicativo. Parâmetros: Opcodes É um numero(Identificador) qualquer que vai do 0 ao 255, no caso desse módulo foi utilizado o numero 110. Function: Esse segundo parâmetro é uma função que fica esperando uma resposta do servidor, vemos que o eperado é que servidor nos envie um buffer qualquer, neste caso esperamos que seja enviado o nome do player. 2 - ProtocolGame.unregisterExtendedOpcode(Opcode) Essa função tem a funcionalidade de desregistrar um Opcode, como vemos o nome já é autoexplicativo. Parâmetro: Opcode: É o mesmo numero(Identificador) que utilizamos para registrar, assim a propria função saberá qual Opcode deve ser desfeita, digamos assim. 3- g_game.getProtocolGame():sendExtendedOpcode(Opcode, '') Essa função tem o intuito de solicitar/executar uma ação no servidor, nesse caso do módulo de exemplo, essa ação fará com que o otClient solicite ao servidor uma responsta no qual foi designada a ser feito, me retornar o nome do player. Parâmetros: Opcode: É o mesmo numero(Identificador) que utilizamos para registrar. buffer: Dados que poderam ser enviados ao servidor. Exemplo: Enviar uma pos, e verificar se contem uma creatura, nesse exemplo não foi enviado nada. Também temos na parte do servidor e é algo simples que dê para entender. Essa função espera que o client solicite/execute uma ação para o servidor possa processar e se preciso retornar algo que é esperado. Parâmetros: cid: Cid identificar do player, não vem ao caso explicar com o maior detalhe. opcode: É o mesmo numero(Identificador) que utilizamos para registrar na parte do client, assim o servidor sabe qual ação deve ser executada. buffer: Dados que o client enviou para o servidor. Podemos analisar com calma essa função, obersevem cada detalhe que é utilizado podemos ver que se a opcode for a mesma opcode registrada no client que nesse caso é o 110, solicitamos ao servidor que nos envie o nome da creatura que executou a ação, atraves da função: doSendPlayerExtendedOpcode doSendPlayerExtendedOpcode(cid, Opcode, buffer) Essa função tem o intuito de enviar informações para o client, e ao executar essa função, podemos perceber que lá quando registramos o Opcode ProtocolGame.registerExtendedOpcode na parte do módulo, o segundo parâmetro é executado. Parâmetros: cid: Cid identificar do player, não vem ao caso explicar com o maior detalhe. opcode: É o mesmo numero(Identificador) que utilizamos para registrar na parte do client, assim o servidor sabe qual ação deve ser executada. buffer: Dados que o servidor envia para client, nesse caso foi enviado o nome da creatura. Então vamos reforçar o tutorial e vermos o que aprendemos, vamos-lá. 1º Vemos que para registrar um Opcode, utilizamos a função: ProtocolGame.registerExtendedOpcode(Opcodes, function(protocol, opcode, buffer) end) na maioria das vezes utilizamos dentro da função init. 2º Vemos que precisamos também desregistrar a Opcode, e utilizamos a função: ProtocolGame.unregisterExtendedOpcode(Opcodes), mais utilizado na função do módulo em terminate. 3º Vemos que podemos fazer com que o client solicite uma ação ao servidor utilizando a função: g_game.getProtocolGame():sendExtendedOpcode(Opcodes, Buffer). 4º Vemos também que na parte do servidor, a função: onExtendedOpcode(cid, opcode, buffer) espera que o client solicite/execute algo que possa ser processado e se preciso enviar alguma responsta esperada com a função: doSendPlayerExtendedOpcode(cid, Opcodes, Buffer) Bom, espero que dê para entender com o exemplo e uma breve explicação de cada função. Desculpem-me de qualquer erro, se falei algo errado ou se precisava dizer algo a mais; podem me chamar no privado que estarei lendo e aceitando qualquer tipo de sugestão ou alteração, afinal estamos todos aqui para aprender e o importante é que todos entendam como tudo funciona, aprendam e pratiquem. Download do módulo:
  2. 3 pontos
    Majesty

    [Windows][Codeblocks] Compilando Sources OTClient

    [Windows][Codeblocks] Compilando Sources OTClient Tutorial explicando como compilar as Sources do OTClient com o Codeblocks. 1 - Downloads Necessários: - CMake: (32-bit download, 64-bit download) - Codeblocks: Conteúdo Oculto - MingW: Conteúdo Oculto - OTClient Sources: Conteúdo Oculto 1.1 - Download Não Necessário: - Libs OTClient para MingW32: Conteúdo Oculto Obs: Libs OTClient já estão incluídas com o MingW! - Link de download no tópico apenas para conhecimento sobre as libs utilizadas. 2 - Instalação: - Faça a instalação do CMake (C:\Program Files\CMake). - Faça a instalação do Codeblocks (C:\Program Files (x86)\CodeBlocks). - Descompacte o MingW na unidade C:\. - Após descompactar o MingW, deverá ficar assim C:\MingW. Exemplo: - Descompacte as sources do OTClient na unidade C:\. Exemplo: C:\otclient-master. - Dentro da pasta C:\otclient-master, crie uma pasta chamada otclient-cmake. - A pasta otclient-cmake será utilizada para a criação do projeto do OTClient no CMake. 2.1 - Diretório Path: - Utilize a Tecla do logotipo do Windows + Pause para acessar as Propriedades do Sistema. - Acesse Configurações avançadas do sistema. - Na aba Avançado, clique em Variáveis de Ambiente. - Em variáveis de usuário, edite a váriavel Path e adicione o caminho abaixo: ;C:\Program Files\CMake\bin;C:\MinGW\bin;C:\MinGW\lib;C:\MinGW\include; Obs: Copie o caminho como está acima com ; na frente. 3 - CMake: - Encontre e abra o cmake-gui.exe em C:\Program Files\CMake\bin. Para facilitar a utilização, envie um atalho para a Área de Trabalho. - Antes de utilizar o CMake, acesse no menu Options > Warning Messages... > Supress Warnings > Marque as opções Developer Warnings e Deprecated Warnings. - Como configurar o projeto do OTClient no CMake: - Escolha o diretório das sources do OTClient. - Escolha o diretório que vai ser salvo o projeto do OTClient no CMake. - Clique no botão Configure escolha a opção Codeblocks - MingW Makefiles para ser o gerador do projeto. Ficando assim: - Espere ele gerar o projeto. - Feito isso, você deve configurar o CMake para compilar o OTClient (modo Release | OpenGL ou Directx9) - Isso deve ser feito uma vez para OpenGL e depois para Directx9. - OTClient CMake com modo Release e OpenGL: - CMAKE_BUILD_TYPE - Release + OPENGLES - OFF - OTClient CMake com modo Release e Directx9: - CMAKE_BUILD_TYPE - Release + OPENGLES - 2.0 - Feito isso, com a opção escolhida (Release + OpenGL ou Release + Directx9), clique no botão Generate. - O projeto otclient.cbp será salvo dentro da pasta C:\otclient-master\otclient-cmake. - OTClient pronto para ser compilado. 4 - Codeblocks: - Abra o Codeblocks. - Antes de abrir o projeto do OTClient, no menu selecione Settings > Compiler > Toolchain executables, verifique as configurações e deixe assim: - Diretório do Compilador: C:\MingW - Compilador C: gcc.exe - Compilador C++: g++.exe - Bibliotecas Dinâmicas: g++.exe - Bibliotecas Estáticas: ar.exe - Debugger: GDB/CDB debugger : Default - Compilador de Recursos: windres.exe - Programa make: mingw32-make.exe Imagem: - Depois, abra o projeto do OTClient com o comando Ctrl + O e abra o arquivo otclient.cbp: - Feito isso, para compilar o OTClient clique na opção Build: - O resultado final deverá ser esse: - OTClient compilado no Codeblocks com sucesso! - Como utilizar o OTClient: - Copie o otclient.exe da pasta otclient-cmake e cole na pasta otclient-master. - Copie as DLLs libwinpthread-1.dll, libEGL.dll e libGLESv2.dll da pasta C:\MingW\bin e cole na pasta otclient-master. - Copie o Tibia.spr e Tibia.dat da versão desejada em data/things/versão (no lugar de versão crie a pasta com o número, exemplos: 760, 860, 1098, etc). - Abra o otclient.exe. 5 - Créditos: Edubart (Sources OTClient) Majesty (Downloads Mediafire + Tutorial CMake e Codeblocks)
  3. 3 pontos
    Majesty

    [Windows][Dev-C++] Compilando Sources Yurots Server 0.9.4f (7.6)

    [Windows][Dev-C++] Compilando Sources Yurots Server 0.9.4f (7.6) Tutorial explicando como compilar as sources do Yurots Server 0.9.4f (7.6) com o Dev-C++. 1 - Downloads Necessários: Dev-Cpp: Conteúdo Oculto Sources Yurots Server 0.9.4f (7.6): Conteúdo Oculto 2 - Dev-C++: - Extraia o Dev-Cpp dentro do Disco Local (C:) com a opção Extrair aqui. - O Dev-Cpp já está com as seguintes bibliotecas instaladas: - Dev-Cpp está pronto para compilar as sources. 3 - Sources Yurots Server 0.9.4f (7.6): - Extraia as sources do Yurots Server 0.9.4f (7.6) em uma pasta. - Com o dev-cpp aberto, use o comando Ctrl+o para procurar e abrir o projeto .dev do Yurots Server 0.9.4f (7.6). - O .dev está dentro da pasta devcpp das sources: - Abra o otserv.dev. - Para compilar as sources basta clicar em Executar > Compilar ou utilizar o comando Ctrl+F9. E pronto, sources compiladas com sucesso! 4 - DLL's Necessárias - Para rodar o servidor você precisa copiar as DLL's da pasta C:\Dev-Cpp\bin: lua5.dll lualib5.dll - Salve o executável e as DLL's na pasta raíz do servidor, onde se encontra o config.lua, pasta data, etc. 5 - Conectando ao Servidor - Para conectar ao servidor Yurots Server 0.9.4f (7.6) você pode baixar o Cliente Tibia 7.6 + IP Changer. Eles são encontrados para download nos seguintes tópicos: Clientes Tibia: IP Changer: - Você também pode utilizar o OTClient: (OTClient pronto e configurado para conectar em servidor 7.6). 6 - Créditos Majesty (Tutorial + Dev-Cpp) Yurez (Yurots Server 0.9.4f (7.6))
  4. 2 pontos
    Majesty

    Duvida sobre a Spell Exevo gran mas pox [7.6]

    Isso é da mecânica do TFS, o dano em players é a metade do valor do dano em monstros. Dá para fazer assim: 1ª opção: 2ª opção: Defina o valor mínimo e máximo de dano para players e para monstros.
  5. 2 pontos
    Majesty

    [Servidor] Corrigindo erro dos itens ao relogar

    [Servidor] Corrigindo erro dos itens ao relogar Tutorial explicando como corrigir o erro dos itens ao relogar no servidor. 1 - Database: - Acesse sua database; - Clique em player_items. - Depois clique em Estrutura: - Na linha itemtype, clique para mudar: - Depois, em Tipo: - Altere para INT e valor 11: - O resultado final deverá ser esse: - O mesmo procedimento deverá ser feito para count na tabela player_depotitems, player_inboxitems e player_rewards. - Ou apenas executar essas queries na database > SQL: ALTER TABLE `player_items` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_depotitems` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_inboxitems` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_rewards` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; 2 - Créditos: mattyx14 (queries SQL) sirarcken (tutorial)
  6. 2 pontos
    underewar

    TFS [0.4] Fix. War System + Cast (8.60)

    Bom vou disponibilizar as dlls, os executáveis e a source, não darei suporte para a compilação de tal source pois exige conhecimento, e não tem como explicar aqui em um topico, da para usar o code blocks para compilar ou mvs qualquer um que não seja o 2017,em linux tem as instruções, leiam com atenção e terão exito na compilação. A source já possui NEW war system(com os escudos) para sqlite e mysql FIX bug do elf bot FIX stack item FIX house system FIX npcs systems, FIX slot system(Shield só pode ser colocado no shield etc....) NEW Party System avaliable. New Exp Share System Dou suporte para aqueles que compilarem e estiverem usando a source criando 0 qual quer duvida ou erro postem aqui e melhoraremos ela. LEMBRANDO DENTRO DA PASTA DE DOWNLOAD DOCS TEMOS O CHANGE LOG DO QUE FOI ALTERADO TFS 0.4 Linux instruções(A versão que esta no arquivo é a versão do linux que devera ser usada.) Abram todos os arquivos e leia. qual quer duvida relacionada a compilação em linux não darei suporte no tópico mandem msg. Aqrquivos de blocos de comando os nomes são autogen (salvo como shell) build (salvo como shell) compile (salvo como shell) tfs-dep_Nix (salvo como shell) Abra os e modifique para a compilação linux. DOWNLOADS SCANS VIRUS TOTAL: DATAFILES VIRUS TOTAL : SOURCE VIRUS TOTAL : DLLS VIRUS TOTAL : GUI.exe VIRUS TOTAL : Consosle.exe CREDITOS : Tfs team from github, underewar,gesior,posk.
  7. 2 pontos
    Luan MF

    Problema para cria acc no site gesior

    @Majesty Deu certo mano, cara to muito feliz HAHA, MUITO obrigado a vc e ao @underewar vcs 2 me ajudaram muito nesse projeto, muito grato de vdd
  8. 2 pontos
    Majesty

    Problema para cria acc no site gesior

    Consegui conectar no jogo. 1ª opção: - Com o Gesior2012 para OldServer 7.x, o Account Name deve ser com caracteres numéricos (máx 8 digitos). 2ª opção: - Baixe e instale o XAMPP: Conteúdo Oculto - Crie a database e importe o arquivo DB_FULL.sql do Gesior2012 para OldServer 7.x no PHPMyadmin. - No config.lua do servidor, configure assim (no caso está para 127.0.0.1 (localhost) e sem senha do root no XAMPP): - Baixe e instale o MyAAC: Conteúdo Oculto - No MyAAC, na tela de configuração coloque o diretório do servidor, email, versão 7.6, etc. - Quando criar a conta, o Account Name deve ser com caracteres numéricos (máx 8 digitos). Solução alternativa: modificar o MyAAC para aceitar somente caracteres numéricos no Account Name. 3ª opção: - Esperar o autor do servidor global 7.6 postar site compatível.
  9. 2 pontos
    Raulcdj

    Addons remove

    Ola pessoal hoje venho trazer para comunidade Otserv Brasil o sistema de remove addon do pokemon não esta 100% na hora que você remove addon da esse erro "OnUse" Bom vamos la. Lembrando que não fui eu o criador foi o " TheRatazana do otserv brasil" eu tentei e não deu certo então ele me ajudo espero que ajude vocês. vai em Servidor / data / actions / addon.lua Pra que funcione legal, você precisa adicionar isso aqui na linha 30 do seu sistema doSetItemAttribute(pb, "addonItem", item.itemid) ele tem que fica assim no Actions. vai em Servidor\data\talkactions\scripts cria um arquivo addon.lua Agora vai em talkaction.xml e coloca essa tag la <talkaction words="/addonsRemove" access="1" event="script" value="addons.lua"/>
  10. 2 pontos
    Melara

    Seu último trabalho!

    @Henrique Lacerda, haha ironia entrar aqui essa altura da vida e me ver sendo citado no último comentário. Saudades mesmo. <3
  11. 1 ponto
    Majesty

    Tasks [7.6]

    Storage é uma tabela usada para guardar certos tipos de informações do jogador enviando para o banco uma key numérica (serve como identificador ID) e seu value (valor). storage_start - se o jogador começou a task. storage - valor da task. Para colocar itens como recompensa, coloca assim: reward = {{itemid,quantidade},{itemid,quantidade}}, Exemplo: reward = {{2520,1},{2173,1}},
  12. 1 ponto
    Majesty

    Shopsystem em gesior 1.3

    MyAAC: MyAAC - Gesior Shop System:
  13. 1 ponto
    Majesty

    Bug training offline

    Você tem que usar a database correta (schema.sql) que está na pasta otxserver-otxv3_8/path_8_6.
  14. 1 ponto
    Majesty

    Problema com Atributo de % de dano Magico 7.6

    data/movements/movements.xml, adicione as tags: <movevent type="Equip" itemid="2656" slot="armor" event="function" value="onEquipItem"/> <movevent type="DeEquip" itemid="2656" slot="armor" event="function" value="onDeEquipItem"/> 2656 - id da blue robe.
  15. 1 ponto
    Majesty

    Extended Opcodes

    Adaptação para sources de servidores 8.54+ Códigos: 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 Exemplo de aplicação, getPlayerVocation em extended opcode: No cliente: 1- Vá em otclient/modules/gamelib/game.lua e adicione: function getPlayerVocation() local protocol = g_game.getProtocolGame() protocol:sendExtendedOpcode(25,5) end 2- No seu script adicione isto: ProtocolGame.registerExtendedOpcode(26, function(protocol, opcode, buffer) vocation = buffer print(vocation) end ) No servidor: 1- Em creaturescripts/script/extendedopcode.lua adicione isto: function onExtendedOpcode(cid, opcode, buffer) if opcode == 25 then doSendPlayerExtendedOpcode(cid, 26, getPlayerVocation(cid)) end return true end Créditos : MaXwEllDeN 100% por adaptar o código
  16. 1 ponto
    Majesty

    Sistema de Arena PVP em OT 7.6

    - Copie o arquivo arena.xml da pasta mods/disable e cole dentro da pasta mods. Ative o mod em enabled="yes" e configure a arena. - Substitua: doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true) - Por: arenaExit = {x=124, y=31, z=9} doTeleportThing(cid, arenaExit)
  17. 1 ponto
    Majesty

    Problema com alavanca na Annihilator OT 7.6

    Altere: getPlayerAccess(cid) == 3 Para: getPlayerAccess(cid) == 1 O jogador ao usar a alavanca, ela volta a posição original para ser utilizada novamente. Para o jogador voltar a Annihilator, nessa parte do código: Remova as linhas queststatus, 3º if, 1º else: Ficando assim:
  18. 1 ponto
    Majesty

    [10.x/12.x] GlobalFull Tibia 12 (11.44.5516) / Tibia 10 - New Asuras, Falcons, Warzones 4,5,6

    @sn4tch0vsk O servidor eu apenas trouxe de outro fórum (tibiaface), o que eu fiz foi o pack de correções para os erros que apareciam ao iniciar. Sobre o problema do xp gain rate, sugiro que crie um tópico no Suporte: Conteúdo Oculto Descobrindo a solução, dá para fazer pull request com a correção para o OTXServer Global no Github.
  19. 1 ponto
    Majesty

    [8.6] The Forgotten Server 1.3

    [8.6] The Forgotten Server 1.3 Um servidor MMORPG livre e de código aberto escrito em C++. The Forgotten Server 1.3 para a versão 8.6. Download: Conteúdo Oculto Créditos: Desenvolvedores TFS Nekiro (The Forgotten Server 1.3 - 8.6)
  20. 1 ponto
    Majesty

    [7.6] Yurots Server 0.9.4f

    [7.6] Yurots Server 0.9.4f Download do Yurots Server 0.9.4f para versão 7.6. 1 - Imagem: 2 - Características: Conteúdo Oculto 3 - Download: Conteúdo Oculto 4 - Tutorial: 5 - Créditos: divinity76 (Github) Yurez (Open Tibia Server para Tibia 7.6 baseado no CVS de 14/01/2006)
  21. 1 ponto
    MichelEckhardt

    Porta de dwacatradoor nao abre

    The OTX Server Global - Version: (3.10) Pessoal essa porta que da acesso ao bau para pegar o family brooch esta me trollando. ele tem que abrir somente se o QuestLine = 2, porem ela nao abre e da a mensagem do ELSE e a QuestLine esta justamente no 2 OBS: EU PASSEI POR ELA COM O COMMANDO DO GOD
  22. 1 ponto
    Majesty

    OpenTibia DLL Pack (v2.0)

    OpenTibia DLL Pack (v2.0) Créditos: Talaturen - OTLand Imagem e link: OpenTibia DLLs OTServ DLLs necessárias para rodar servidores de OTServ Windows Esses arquivos DLLs foram compilados com o Microsoft Visual Studio, isso significa que você precisa ter o Microsoft Visual C++ 2010 Redistributable Package instalado. 32bit - C++ Redistributable Package Download: Conteúdo Oculto 64bit - C++ Redistributable Package Download: Conteúdo Oculto Arquivos: → Scan: OpenTibiaDLLPack32bit - VirusTotal OpenTibiaDLLPack64bit - VirusTotal → Download: OpenTibia DLL Pack v2.0 32bits: Conteúdo Oculto OpenTibia DLL Pack v2.0 64bits: Conteúdo Oculto
  23. 1 ponto
    underewar

    IP Fixo e Alfabético para website e Cliente

    @TiagoMGamer ta então é o seguinte na sua UniServer Zero XIII 13.3.2 você vai ter que liberar os acessos dela, no seu modem também, depois disso tem que liberar o acesso das portas no linux libere as portas 7171,7172, para o cast 7173, website 80,443. verifique tambem se o o ip esta retornando alguma conexao abra o CMD do windows escreve ping -t IP
  24. 1 ponto
    Luan MF

    Problema com Script de bau Annihilator

    @underewar kkkk eu imaginei que tava errado msm, sou pessimo com esses scripts e actions kkkkkk mas sou bem esforçado e logo acho que vai dar certo esse meu projeto @Majesty testei seu script aki e ficou 100% muito obrigado por disponibilizar ai tamo junto
  25. 1 ponto
    Majesty

    Problema com Script de bau Annihilator

    data/actions/scripts/annihilator.lua: data/actions/actions.xml:
  26. 1 ponto
    underewar

    Underewar acc [SHOW OFF]

    Estou criando um novo website para a comunidade focado em servidores derivados de pokemon. ainda não sei se farei com suporte para outros servidores, em breve a primeira versão será liberada aqui no inferno quem quiser pode ir la pegar, pode falar para o satanas me chamar. Mas informações em breve. Só desenvolvi as paginas abaixo assim que finalizar outras venho atualizar todos. IMAGEMS Index.php Create Account.php Login.php @update 1.1 Check Login criado , para evitar bugs nas compras"duplicar etc, bug que ainda existe em alguns websites. Pagina after login criada com painéis para melhorar a interação do usuário com o site. @Rank list 1.0 Criado um exemplo do rank list. Deixem sugestões e dicas. Ainda não adicionei o body do nav em todas as paginas mas faço isso depois. Loginacess.php @Supporte.php Atualizações dia 21/12/2018. Criado Layout e Nova adaptação para servidores DBO. Novo Layout DBO para Underewar ACC. Atualizações PKM,Adicionado Shop System(cart),metodos de pagamento em desenvolvimento. Imagem. Index.php Gif --> MenuDropDown Css,Js Index.php Atualizações Em em 2019. OPA ja chegamos próximo update em 01/06/2019
  27. 1 ponto
    Adrianokb

    Novo projeto Pokemon 8.54 "SOURCE's Open"+

    Bom dia a todos. Estou aqui para falar e fazer um pedido para todos vocês ! Sei que muitas pessoas assim como eu querem criar um Servidor de Poketibia, tanto para diversão quanto para tentar manter o projeto. Então gostaria de pedir carecidamente a todos vocês que tem esse desejo, que por favor, antes mesmo de ler este tópico coloquem de lado suas ganancias e parem de pensar apenas em si mesmo e no dinheiro. Pois um grupo unido que tenta resolver e criar novas soluções juntos, desenvolvem ideias e soluções melhores, alem de terem um desemprenho melhor quando precisam de ajuda com algo! A alguns dia eu vi um projeto chamado Ruby Server "Pokemon" de versão 10.99 Porem como é uma versão de Server com e TFS que raramente alguém do pokemon está acostumado a usar. percebi que o projeto anda um pouco parado. E resolvi fazer para você um projeto parecido porem para ( Versão 8.54 // TFS : 0.3.3 ou 0.4 ) que todos estão mais acostumados e possui um suporte melhor para "Edição" em geral. Uma base bastante utilizada para bons Servidores é DxP, porem é muito raro vocês verem publicações com suas Source's (Cliente + Server) ainda mais "Funcionais". Pois sempre colocam com arquivos danificados ou faltando, alem de bugs dentro do servidor. ======================================================================================================================== Estou montando um projeto que se iniciou com a base DxP e foi realizado varias alterações ate chegar aqui. The Forgotten Server TFS 0.3.3 Versão : 8.54 E quem tiver interesse em ter esse projeto em mãos, peço sua ajuda! Logo mais irei publicar um Tópico no fórum com todos os arquivos e tutoriais para vocês. ==== Atualmente ==== 1º - Source funcionando e compatível com o servidor; 2º - Praticamente todos os bugs e traps retirados; 3º - Cliente com um novo Tibia.Otb / outf / Sprit/ (Muitas novas Sprits de pokemons, itens // novas Outfits, animações de Skill.); 4º - Interface do cliente um pouco alterada, é pouca coisa; 5º - Autoloot funcional; (não existe mais bug de clonagem no itens) 6º - Bugs que faziam o servidor dar Crash retirados (Todos que eu conhecia e pesquisei) Entre muitas outras coisas... (O tópico já esta grande então vão vou enrolar escrevendo tudo !) ==== Falta === 1º - Uma Source compartível para compilar o Cliente. (Praticamente a unica coisa que realmente falta neste projeto ); 2º - Novas Outfits de interação com o jogo (Ja existem as principais como : Colheira, Minerar, Cortar) porem gostaria de add a este projeto algumas a mais, como ex: (Sentar no chão, sentar em cadeiras) e muitas outras, depende da criatividade de vocês; 3º - Site compatível já existente (mais falta correções de bugs nele) 4º - A criação e correção dos Itens em "Itens.xml" (ao qual já estou fazendo) Oque preciso de vocês !? 1° - Que encontrem uma Source compatível e funcionando para compilar o "OtCliente" utilizado no Dxp v.3 2º - Designer para criação de Outfit e novas janelas como (Pokedex, Shop, AutoLoot e Sistema de Crack.) Sim o server está um com sistema de Craft! um pouco simples mais tem. 3º - O server tem mapa. Mas é bom a criação de um novo mapa, então precisamos de pessoas para criar o mapa. 4º - Scripter para desenvolver, melhorar e também criar novas ideias. Com o 1º item ja consigo fazer as ultimas alterações e publico um tópico bem organizado, com RME e ObBuilder atualizados e com vários tutorias bons e importantes. ======================================================================================================================== Discord para o projeto: --Irei atualizar aqui-- Imagens: -- Irei publicar de noite, tenho que sair correndo para a empresa, kkkkk -- Qualquer duvida perguntem... Criticas ? (Cara to fazendo um projeto legal para todas as pessoas que gostam do jogo. Para terem mais facilidade e algo realmente bom ou melhor) Se quer falar mal ou reclamar de algo, porque também não traz uma solução !?
  28. 1 ponto
    underewar

    Comando attr nao funciona

    @MichelEckhardt Okay, A baixo esta a lista de todos os comandos da OTX feita com base na tfs 1.2 Esses são todos os parâmetros usados para os comandos.
  29. 1 ponto
    underewar

    Erro ao Criar Houses no RME 7.6

    @Luan MF Por nada. Precisar só me marcar
  30. 1 ponto
    underewar

    Erro ao Criar Houses no RME 7.6

    @Luan MF Tenta colocar a normal door, sim o problema é a porta aquele Count : 1 significa que o sistema esta identificando as portas das houses e essa pora e a porta 1 dessa house especifica. troque as portas se não resolver me marca aqui.
  31. 1 ponto
    underewar

    Criando Magias novas no 7.6

    @Luan MF Tenta assim local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_SOUND_GREEN) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0) local arr = { {1, 1, 1}, {1, 2, 1}, {1, 1, 1} } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end
  32. 1 ponto
    underewar

    Mana e Vida por porcentagens C++ all TFS version

    Efeito: caractestica da vida, agora indicada como %(percent) Como Usar: Substiruiremos a função inteira de do playerstats dentro do protocolgame.cpp caso seja nas versões e tfs 0.3.6.1. Para tibia 7.6 editaremos o protocol76game.cpp TFS MASTER c++ code TFS 1.0 - 1.2 c++ code TFS 0.3.6.1 Você precisa remover o espaço de PLAYERINFO_MAXMANA se aparecer algum erro, ou algo fora do comun - não é minha culpa c++code para versões 7.6-7.9 Códigos criados em 02/12/2017 Acredito que todas as versões estejam ai. Imagens: Antes : Depois :
  33. 1 ponto
    underewar

    DoPlayerSetMasterTown [Lua]

    Functions.lua Poderá ser usado em scripts simples para alterar o townid
  34. 1 ponto
    underewar

    Sistema Bancário Tfs 1.2

    .data / talkactions / talkaction.xml' e cole este texto lá Código XML: <talkaction words="!bank" separator=" " script="bank.lua"/> Crie o arquivo "bank.lua" em "data / talkactions / scripts" e cole este código neste arquivo --************ UNDEREWAR-- function Player.deposit(self, amount) if not self:removeMoney(amount) then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You dont have money with you.") return false end self:setBankBalance(self:getBankBalance() + amount) return true end function Player.withdraw(self, amount) local balance = self:getBankBalance() if amount > balance or not self:addMoney(amount) then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You dont have money in your bank account.") return false end self:setBankBalance(balance - amount) return true end function Player.depositMoney(self, amount) if not self:removeMoney(amount) then return false end self:setBankBalance(self:getBankBalance() + amount) return true end function onSay(player, words, param) local split = param:split(",") local balance = player:getBankBalance() if split[1] == nil then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: the commands are:\n !bank balance.\n !bank deposit, XXXX.\n!bank depositall.\n!bank transfer, amount, toPlayer.") return end --------------------------- Balance --------------------------- if split[1] == 'balance' then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: Your account balance is " .. balance .. ".") --------------------------- Deposit --------------------------- elseif split[1] == 'deposit' then local amount = tonumber(split[2]) if not amount then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You need to put the amount of money to add.") return false end local amount = math.abs(amount) if amount > 0 and amount <= player:getMoney() then player:deposit(amount) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You added " .. amount .. " to your account, You can withdraw your money anytime you want to.\nYour account balance is " .. player:getBankBalance() .. ".") else player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You do not have enough money to deposit.") end --------------------------- Depositall --------------------------- elseif split[1] == 'depositall' then local amount = player:getMoney() local amount = math.abs(amount) if amount > 0 and amount == player:getMoney() then player:deposit(amount) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You added " .. amount .. " to your account, You can withdraw your money anytime you want to.\nYour account balance is " .. player:getBankBalance() .. ".") else player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You do not have enough money to deposit.") end --------------------------- Withdraw --------------------------- elseif split[1] == 'withdraw' then local amount = tonumber(split[2]) if not amount then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You need to put the amount of money to withdraw.") return false end local amount = math.abs(amount) if amount > 0 and amount <= player:getBankBalance() then player:withdraw(amount) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: Here you are " .. amount .. " of your account, You can deposit your money anytime you want.\nYour account balance is " .. player:getBankBalance() .. ".") else player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You do not have enough money on your bank account.") end --------------------------- Withdrawall --------------------------- elseif split[1] == 'withdrawall' then local amount = player:getBankBalance() local amount = math.abs(amount) if amount > 0 and amount <= player:getBankBalance() then player:withdraw(amount) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: Here you are all your money on your account, You can deposit your money anytime you want.\nYour account balance is " .. player:getBankBalance() .. ".") else player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You do not have enough money on your bank account.") end --------------------------- Transfer --------------------------- elseif split[1] == 'transfer' then local data = param local s = data:split(", ") if s[2] == nil then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You need to put the amount of money") return false else if not tonumber(s[2]) then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You need to put the amount in numbers only.") return end end if s[3] == nil then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You need to put the player name") return false end local a = tonumber(s[2]) local amount = math.abs(a) local getPlayer = Player(s[3]) if getPlayer then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You seccesfully transferred " .. s[2] .. "\n to " .. s[3] .. " bank account.") player:transferMoneyTo(s[3], amount) else if not playerExists(s[3]) then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: A player with name: " .. s[3] .. " does not exists.") return false end if playerExists(s[3]) and player:transferMoneyTo(s[3], amount) then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: You seccesfully transferred " .. s[2] .. "\n to " .. s[3] .. " bank account.") end end else player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "[BankSystem]: Invalid param.") end return false end Se usar otclient precisara de arrumar seu NPC CHAT.
  35. 1 ponto
    underewar

    GetPlayerSecureMode (cid) / getPlayerFightMode (cid)

    Em luascript.cpp Em luascript.cpp getPlayerSecureMode (CID) Vamos criar esse comando Código C++: getPlayerFightMode (CID) Vamos criar esse comando Código C++: Simples e fácil vou deixar um exemplo para os leigos. Exemplo em lua: qual quer duvida poste aqui ,script é bem simples.
  36. 1 ponto
    underewar

    [7.6] Alterando a Prioridade da Executável(Source).

    No otserv.cpp: No config.lua Adicione a tag da propriedade adicionada. Qual é a prioridade para definir o OTS durante o início (normal, alta, mais alta).
  37. 1 ponto
    underewar

    Global save + Restarter

    Um código simples para fazer o global server save, e logo após reiniciar o servidor. Windows Adicione no Config.Lua Esta feito agora basta compilar um programa chamado autorun.exe com o código a baixo. Após a compilação coloque o exe na pasta do servidor e inicie. Linux: Creditos: Underewar
  38. 1 ponto
    hectorsb

    Seu último trabalho!

    Saudades desse grande fórum... muitas pessoas importantes conheci no tibia e aqui no mapping. Vida longa aos mappers deste fórum!
  39. 1 ponto
    Majesty

    Problema com ExtremeOT 7.6

    @Luan MF Vou postar em breve um tutorial para compilar as sources do Yurots 7.6: Conteúdo Oculto
  40. 1 ponto
    Rookie

    [OTClient] Shiny Name

    Salve galera, tudo certo? Estou trazendo uma modificação muito bacana para o seu OTClient, o que consiste essa modificação? Ela adiciona um nome encima do nome, explicação meio bosta né? Então tomem uma imagem da mesma: Como adicionar essa delicia de modificação? Simples, basta seguir as instruções que irei deixar abaixo! OBS: É necessário ter as sources do seu cliente! Procure essa parte em creature.cpp: if(drawFlags & Otc::DrawNames) { if(g_painter->getColor() != fillColor) g_painter->setColor(fillColor); m_nameCache.draw(textRect); } E troque por: if (drawFlags & Otc::DrawNames) { if (g_painter->getColor() != fillColor) g_painter->setColor(fillColor); CachedText shiny; shiny.setText("Shiny"); shiny.setFont(g_fonts.getFont("verdana-11px-rounded")); Rect shinyrect = Rect(point.x - shiny.getTextSize().width() / 2.0, point.y - 26, shiny.getTextSize()); if (m_name.find("Shiny") != std::string::npos) { char* shinys = "Shiny"; std::string nname = m_name; nname.erase(0, 5); m_nameCache.setText(nname); m_nameCache.draw(textRect); g_painter->setOpacity(0.5); g_painter->setColor(Color(255, 255, 0)); shiny.draw(shinyrect); g_painter->resetColor(); g_painter->resetOpacity(); m_nameCache.setText(m_name); } else { m_nameCache.draw(textRect); } } E pronto, apenas compile com essa modificações! Créditos: Refe, pela criação do código;
  41. 1 ponto
    Majesty

    Item se transforma em estatua após relogar - OTX Server Global v3.10

  42. 1 ponto
    Luan MF

    Problema com site XML ExtremeOT

    Eu vou testar aqui, ainda não fiz isso, e logo edito o resultado, obrigado pela ajuda EDIT: @Majesty muito obrigado pela ajuda foi um sucesso, rep+
  43. 1 ponto
    Marco Oliveira

    Widget castle dono

    <?php $guild = mysql_select_single('SELECT `name` FROM `guilds` WHERE `real_castle` = 1 ORDER BY id DESC LIMIT 1;'); ?> <style type="text/css" media="all"> .name { position: relative; top: 40px; text-align: center; font-family: Tahoma, Geneva, sans-serif; font-size: 9.2pt; color: #FFF; font-weight: bold; } .logo { position: relative; top: 50px; text-align: center; } .CastleWarbox { position: relative; margin-top: 10px; margin-bottom: 5px; width: 200px; height: 200px; } </style> <div class="right_box"> <div class="corner_lt"></div> <div class="corner_rt"></div> <div class="corner_lb"></div> <div class="corner_rb"></div> <div class="title"><img src="layout/img/library.gif"><span style="background-image: url(layout/widget_texts/castlewars.png);"></span></div> <div class="content"> <?php if ($guild) { ?> <div class="logo"> <img style="max-height:100px;" src="<?php logo_exists($guild['name']); ?>"> </div> <div class="name"> <?php echo '<br><a href="guilds.php?name='.$guild['name'].'">'.$guild["name"].'</a><br><br><br><br><br><br>';?> </div> <?php }else { ?> <div class="name"> <?php echo '<br><p>Castelo Sem Dono.</p><br><br><br><br><br><br>';?> </div> <?php } ?> </div> <div class="border_bottom"></div> </div> Versão compatível com php5: <?php $guild = $SQL->query('SELECT `name`, `id` FROM `guilds` WHERE `real_castle` = 1 ORDER BY id DESC LIMIT 1;'); ?> <div id="warcastle" class="Themebox" style="background-image:url(<?PHP echo $layout_name; ?>/images/themeboxes/warcastle.png);"> <div id="warcastle" style="height:190px; width:180px; background-image:url(./layouts/tibiarl/images/themeboxes/warcastle.png);"> <center> <?php foreach($guild as $value) { echo '<div style="float:center;margin:right"><br><br><br><br> <a href="?subtopic=guilds&action=show&guild='.$value['id'].'" style="background: transparent url(layouts/tibiarl/images/menu/fire.gif);font-size:14px;text-shadow: 0.1em 0.1em #333" class="topfont"> <img class="img" src="guild_image.php?id='.$value['id'].'" width=64 height=64><br> '.$value['name'].' </a> </div>'; $b++; } ?> </center> </div> </div> Por: Mattos123
  44. 1 ponto
    Majesty

    OTU - OpenTibiaUnity - Novo ClienteTibia baseado na engine Unity3D

    OTU - OpenTibiaUnity - Novo ClienteTibia baseado na engine Unity3D Em desenvolvimento por Slavi Dodo (OTLand): Conteúdo Oculto Tópico original traduzido. Por que um novo cliente? O que isso resolve? Informações: Imagens disponíveis no imgur: Conteúdo Oculto Imagens: O cliente é baseado em um projeto sprite-atlas: Conteúdo Oculto Ajude o desenvolvedor no Patreon: Conteúdo Oculto Não é necessário que você apoie o projeto, o projeto será no final open-source mas por enquanto, será apenas para os patreons ajudarem a continuarem desenvolvendo o projeto.
  45. 1 ponto
    Olá pessoal hoje venho trazer para o Fórum um passo a passo de como montar um servidor completo na VPN da Google Cloud. 1- Criação de Maquina Virtual (Instância) 2 - Configuração de Rede e Domínio (Endereço de IP Externo, DNS e Firewall) Acesse o serviço de REDE VPC e vá até o item Endereços IP Externos. Passo 2.1 - Localize a instancia que esta com o Tipo de Endereço como Temporário. Passo 2.2 - Siga o Passo a Passo Para Liberação de Portas no Item Firewall 3 - Apontamento de Domínio e Configuração de DNS 4 - Configuração Interna do Servidor Volte para sua instância (Compute Engine -> Instâncias de VMs) 4.2 - Liberando acesso SSHD 4.3 Instalação de pacote Web ( MySQL-SERVER, Apache, PHP, PHPMyadmin) 4.4 Configurando o PHPMyadmin 4.5 Compilando uma distro em Debian9 4.6 Instalando um Website 5 - Instalação de protocolo HTTPS / Certificado Digital SSL Para ligar o servidor utilize o comando: Funciona em versões 11+ e 10- Se te ajudei deixa um comentário e um +REP
  46. 1 ponto
    Majesty

    Erro ao instalar qualquer tipo de GesiorAAC

    $config['site']['serverPath'] = "/"; Configure somente o diretório do servidor. Exemplo: $config['site']['serverPath'] = "C:\OTServ/";
  47. 1 ponto
    Majesty

    [10.x/11.8x+] ObjectBuilder + Item Editor + Cliente 10.97 + items.otb + Remere’s Map Editor

    [10.x/11.8x+] ObjectBuilder + Item Editor + Cliente 10.97 + items.otb + Remere’s Map Editor Download do ObjectBuilder utilizado para integrar as sprites do Cliente Tibia 11 para o Cliente Tibia 10. Download do Cliente 10.97 com os respectivos SPR e DAT funcionando. Download do items.otb baseado no TFS 1.3 com a adição de sprites relacionadas a Otherworld, Forgotten Knowledge, Halls of Hope, First Dragon Quest, Feyrist, Asuras, Falcons, Warzones, Deathlings e muitos outros lugares, também foram adicionados alguns itens. Download do item editor para verificar e adicionar novos items. Download do Remere’s Map Editor para abrir e/ou criar mapas. Imagem: Downloads: Object Builder: Conteúdo Oculto Cliente 10.97: Conteúdo Oculto Items.otb: Conteúdo Oculto Item Editor: Conteúdo Oculto Remere’s Map Editor: Conteúdo Oculto Scan: Object Builder: Conteúdo Oculto Cliente 10.97: Conteúdo Oculto Items.otb: Conteúdo Oculto Item Editor: Conteúdo Oculto Remere’s Map Editor: Conteúdo Oculto Créditos: Cipsoft (Cliente Tibia 10.97) EdMignari (Object Builder + Item Editor) Hjnilsson (Remere’s Map Editor) undead mage (Compartilhamento – OTLand) Majesty (Link de download – Mediafire)
  48. 1 ponto
    vankk

    [TFS 1.2] Prision Boss Script

    Prision Bosses TFS 1.2 by vankk Eu estava com um código bem ruim dos bosses da Prision Key no Aura, e resolvi atualizar, e decidi compartilhar aqui com vocês. Caso vocês queiram ver o script em funcionamento entre já em Aura. Clique aqui para ir para o site. O sistema está bem fácil de ser configurado, está tudo em tabelas, esse script é para os bosses: Zavarash, Horadron, Terofar. data/actions/actions.xml <action itemid="22606" script="prision_bosses.lua"/> <action itemid="22605" script="prision_bosses.lua"/> <action itemid="22604" script="prision_bosses.lua"/> data/actions/prision_bosses.lua local config = { [22606] = { targetId = 22636, -- Target ID. bossName = 'Zavarash', -- boss name keyPlayerPosition = Position(296, 1650, 12), -- Where the player should be. newPosition = Position(220, 1591, 13), -- Position to teleport bossPosition = Position(216, 1587, 13), -- Boss Position centerPosition = Position(215, 1591, 13), -- Center Room exitPosition = Position(293, 1634, 12), -- Exit Position rangeX = 20, -- Range in X rangeY = 20, -- Range in Y time = 15, -- time in minutes to remove the player }, [22605] = { targetId = 22634, -- Target ID. bossName = 'Horadron', -- boss name keyPlayerPosition = Position(291, 1650, 12), -- Where the player should be. newPosition = Position(293, 1676, 13), -- Position to teleport bossPosition = Position(300, 1677, 13), -- Boss Position centerPosition = Position(296, 1678, 13), -- Center Room exitPosition = Position(293, 1634, 12), -- Exit Position rangeX = 20, rangeY = 20, time = 15, -- time in minutes to remove the player }, [22604] = { targetId = 22638, -- Target ID. bossName = 'Terofar', -- boss name keyPlayerPosition = Position(302, 1650, 12), -- Where the player should be. newPosition = Position(257, 1675, 13), -- Position to teleport bossPosition = Position(260, 1676, 13), -- Boss Position centerPosition = Position(255, 1678, 13), -- Center Room exitPosition = Position(293, 1634, 12), -- Exit Position rangeX = 20, rangeY = 20, time = 15, -- time in minutes to remove the player } } local function roomIsOccupied(centerPosition, rangeX, rangeY) local spectators = Game.getSpectators(centerPosition, false, false, rangeX, rangeX, rangeY, rangeY) if #spectators ~= 0 then return true end return false end function clearBossRoom(playerId, centerPosition, rangeX, rangeY, exitPosition) local spectators, spectator = Game.getSpectators(centerPosition, false, false, rangeX, rangeX, rangeY, rangeY) for i = 1, #spectators do spectator = spectators[i] if spectator:isPlayer() and spectator.uid == playerId then spectator:teleportTo(exitPosition) exitPosition:sendMagicEffect(CONST_ME_TELEPORT) end if spectator:isMonster() then spectator:remove() end end end function onUse(player, item, fromPosition, target, toPosition, isHotkey) local tmpConfig = config[item.itemid] if not tmpConfig then return true end if target.itemid ~= tmpConfig.targetId then return true end local creature = Tile(tmpConfig.keyPlayerPosition):getTopCreature() if not creature or not creature:isPlayer() then return true end if roomIsOccupied(tmpConfig.centerPosition, tmpConfig.rangeX, tmpConfig.rangeY) then player:sendCancelMessage("There is someone in the room.") return true end local monster = Game.createMonster(tmpConfig.bossName, tmpConfig.bossPosition) if not monster then return true end -- Send message player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have entered an ancient demon prison cell!') player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have fifteen minutes to kill and loot this boss, else you will lose that chance.') -- Let's roll addEvent(clearBossRoom, 60 * tmpConfig.time * 1000, player:getId(), tmpConfig.centerPosition, tmpConfig.rangeX, tmpConfig.rangeY, tmpConfig.exitPosition) item:remove() player:teleportTo(tmpConfig.newPosition) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) return true end Não ensinarei a configurar a tabela, isso é uma tarefa bem fácil, e para não ter nada de mão beijada também né,
  49. 1 ponto
    Majesty

    [MySQL]OTXServer Global Full + Uniform Server + MyAAC

    [MySQL]OTXServer Global Full + Uniform Server + MyAAC Tutorial para colocar Servidor OTXServer Global Full online com Uniform Server e Site. 1 - Download OTXServer Global Full 1.1 - Download Uniform Server Conteúdo Oculto 1.2 - Download MyAAC MyAAC: 2 - Instalação do Uniform Server - Instale o Uniform Server (13_3_2_ZeroXIII) na unidade C:\. - Exemplo: - Na unidade C:\ após a instalação, o nome da pasta é UniServerZ. - Ao abrir o Uniform Server, uma janela será aberta perguntando a senha MySQL root: - A senha padrão neste caso é root. - Depois de definida a senha root, o Uniform Server está pronto para uso: 3 - Database - Acesse o PHPMyadmin pelo Uniform Server. - Na lateral esquerda clique em +New e crie uma database (ex: otxserverglobal) - Importe o arquivo DATABASE.sql que está na pasta do OTXServer Global Full. 4 - Config.lua - Entre na pasta do OTXServer Global Full; - Configure o IP de conexão (no caso foi configurado para 127.0.0.1 (localhost); - Coloque a senha do PHPMyAdmin (se configurada); - Se a senha do PHPMyAdmin não foi alterada no Uniform Server, a senha padrão é root. - Coloque o nome da database criada . Exemplo: -- Connection Config ip = "127.0.0.1" - MySQL mysqlHost = "127.0.0.1" mysqlUser = "root" mysqlPass = "root" mysqlDatabase = "otxserverglobal" mysqlPort = 3306 mysqlSock = "" passwordType = "sha1" 5 - Site - Descompacte o MyAAC dentro da pasta www do Uniform Server. - Deixe todos os arquivos e pastas do MyAAC conforme o exemplo abaixo: - Acesse Conteúdo Oculto para carregar o MyAAC. - Siga as etapas de instalação para instalar o MyAAC. 6 - Conectando ao Servidor - Para conectar ao servidor de acordo com a versão indicada, você precisa do Cliente Tibia 10 / Cliente Tibia 11: - Para conectar com o cliente 10, você pode utilizar o IP Changer ou fazer um cliente próprio. - Para conectar com o cliente 11, instale o plugin abaixo no MyAAC: 7 - Créditos Downloads: Desenvolvedores OTX e outros: Conteúdo Oculto slawkens: Conteúdo Oculto Tutorial: Majesty
  50. 1 ponto
    vyctor17

    Biblioteca FileManager Alpha0.1

    File Manager Lib Alpha0.1: Biblioteca para fazer download de arquivos de maneira simples e fácil em lua, podendo ser usada em conjunto com o "OtClient" para fazer um atualizador automático. Funções Alpha0.1: Function List Alpha0.1: doDownloadFile(output, imput) doExecuteSystem(...) doRemoveFile(file) doCheckFile(file) Próxima atualização Alpha0.2: Funções que ainda vão ser adicionadas no Alpha0.2: getDownloadInfo() doExtractFile() Exemplo de uso em lua: require('fileManager') local uPd_Config = { [1] = {"teste.png", "Conteúdo Oculto"}, [2] = {"teste2.png", "Conteúdo Oculto"}, } for i = 1, #uPd_Config do if fileManager.doRemoveFile(uPd_Config[i][1]) then print("File exist Deleting...") print("Download Start") fileManager.doDownloadFile(uPd_Config[i][1], uPd_Config[i][2]) print("Download Done") else print("Download Start") fileManager.doDownloadFile(uPd_Config[i][1], uPd_Config[i][2]) print("Download Done") end end Download Gostou?, então se puder me ajude! não autorizo o re-post em qualquer outro fórum sem minha autorização. vyctor17 - Waki-V LTDA ©
Esta tabela de classificação está definida como São Paulo/GMT-03:00
×