Jump to content

Leaderboard

  1. Majesty

    Majesty

    Imperadores


    • Points

      23

    • Content count

      4,323


  2. Marco Oliveira

    Marco Oliveira

    Cidadãos


    • Points

      3

    • Content count

      11


  3. Aralom

    Aralom

    Cidadãos


    • Points

      1

    • Content count

      6


  4. Gengo

    Gengo

    Cidadãos


    • Points

      1

    • Content count

      9



Popular Content

Showing content with the highest reputation since 03/21/2019 in all areas

  1. 3 points
    Marco Oliveira

    OTXServer 10.00 - 12.0x Global Full

    Tibia Updates 12.00 Features: NEW DEPOT NEW SPAWN NEW CAST SYSTEM NEW NPC SYSTEM VIA BANK BALANCE NEW CRITICAL BOOST SYSTEM NEW POTIONS REWARD SYSTEM PREY SYSTEM IMBUIMENT SYSTEM DAILY REWARD SYSTEM EXERCISE WEAPONS Mapas: FULL GLOBAL MAP WITH SECRET LIBRARY MOTA EXTENSION NEW ASURAS FALCONS BASTION WARZONES 4,5, 6, CULTS OF TIBIA FIRST DRAGON DARASHIA ELITE DUNGEON CURSED SPREADS NEW DEATHLINGS Créditos: Tfs 1.3 Developers -Zbizu - Pitis91 - MatheusMkalo - Gesior - Lundrial - M4G0 - Fish04k - Printer - Djarek - Ninjalulz - Slavidodo - Thexamx - Socket2810 - Ciroc -Absolute - Gordonbay - Mitsuig - Alissonfgp - Gunz - Bruno Minervino - Comedinha -Hirako - Maya - Mattyx14 – Darkjav - Viking Tibia - Cjaker (Eternal-Scripts) Links Uteis: Download Server Download Utilitários and Clients Download WebSite recomendado
  2. 2 points
    Majesty

    Anel de Sauron (true ghost player)

    Solução: - src/game.cpp, substituir o que está nas linhas 3738 até 3747 por: Movement script (onEquip e deEquip): Créditos: @Eduardo Dant.
  3. 2 points
    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.
  4. 1 point
    [10.x/12.x] GlobalFull Tibia 12 (11.44.5516) / Tibia 10 - New Asuras, Falcons, Warzones 4,5,6 Download de servidor GlobalFull na versão 10.x/12.x. 1- Características: 2 - Imagem: 3 - Downloads: Servidor: [Hidden Content] Database: [Hidden Content] Cliente Tibia 10: [Hidden Content] Cliente Tibia 11.44.5516: [Hidden Content] RME Tibia 12: [Hidden Content] 4 - Créditos:
  5. 1 point
    Majesty

    Cliente Tibia 11 com Notepad++

    Cliente Tibia 11 com Notepad++ Tutorial explicando como editar o Cliente Tibia 11 e configurar para localhost. Tibia 11 Login Webservice funciona com GesiorAAC. Tibia 11 Login Webservice funciona com MyAAC. Tibia 11 Login Webservice funciona com ZnoteAAC 1.5. 1 - Downloads Notepad++: [Hidden Content] Cliente Tibia 11: [Hidden Content] 2 - Como trocar chave RSA - Abra a pasta de instalação do Tibia 11 (C:\Users\SeuUsuário\AppData\Local\Tibia), vá para a pasta packages/Tibia/bin e abra o client.exe com o Notepad++. - Procure por: BC27F992A96B8E2A43F4DFBE1CEF8FD51CF43D2803EE34FBBD8634D8B4FA32F7D9D9E159978DD29156D62F4153E9C5914263FC4986797E12245C1A6C4531EFE48A6F7C2EFFFFF18F2C9E1C504031F3E4A2C788EE96618FFFCEC2C3E5BFAFAF743B3FC7A872EE60A52C29AA688BDAF8692305312882F1F66EE9D8AEB7F84B1949 - Substitua por: 9B646903B45B07AC956568D87353BD7165139DD7940703B03E6DD079399661B4A837AA60561D7CCB9452FA0080594909882AB5BCA58A1A1B35F8B1059B72B1212611C6152AD3DBB3CFBEE7ADC142A75D3D75971509C321C5C24A5BD51FD460F01B4E15BEB0DE1930528A5D3F15C1E3CBF5C401D6777E10ACAAB33DBE8D5B7FF5 3 - Como trocar o IP - Procure por: loginWebService=[Hidden Content] - Substitua por: loginWebService=[Hidden Content] Lembre-se de adicionar "NUL" (Notepad++ > Plugins > Converter >Conversion Panel > ASCll > Insert) no texto do .ini se a URL do seu webservice tiver um comprimento de texto diferente do original. ("loginWebService=[Hidden Content]") (col: 69). Neste caso, para "loginWebService=[Hidden Content]" (col:43) deve-se adicionar 26 "NUL". Procure pela linha: maxChatInputHistoryLength=1000 Abaixo desta linha, no início da próxima (col:1) é onde você deve adicionar os "NUL". 4 - Créditos Yamaken: [Hidden Content]
  6. 1 point
    Majesty

    SELL/BUY char gesior 1.2

    [Hidden Content] [Hidden Content] [Hidden Content]
  7. 1 point
    Majesty

    Remere's Map Editor 3.4 - Abrindo Mapa 11.x

    Remere's Map Editor 3.4 - Abrindo Mapa 11.x Tutorial explicando como abrir mapa 11.x do OTBR-Global com o Remere's Map Editor 3.4. 1 - Downloads Necessários: - Remere's Map Editor 3.4: [Hidden Content] - Cliente 10 Outdated: [Hidden Content] 10 (sprites 12) Pasta 1100 + clients.xml: 1100 + clients.xml.zip - Items (.otb e .xml) do OTBR-Global: [Hidden Content] 2 - Remere's Map Editor 3.4 e Cliente 10 Outdated - Instale o Remere's Map Editor 3.4. - Baixe e extraia o Cliente 10 Outdated em uma pasta. 3 - Abrindo o RME - Antes de abrir o RME, coloque a pasta 1100 e o clients.xml dentro da pasta data do RME (C:\Program Files\RME\data). Confirme a substituição do arquivo clients.xml. - Copie o items.xml e o items.otb do servidor OTBR-Global para a pasta 1100 (C:\Program Files\RME\data\1100). Confirme as substituições do items.xml e items.otb. - Ao abrir o RME, ele irá pedir o diretório da versão 11.00, basta indicar a pasta onde foi extraído o Tibia 10 Outdated. - Desmarque a opção "Check File Signatures" em Files > Preferences > Client Version: - Imagem retirada do tópico: [Hidden Content] - Feito isso, para abrir o mapa, vá em File > Import > Import Map. - O RME abrirá o mapa com as casas e respawns. - O mapa começa nas coordenadas x: 31912, y: 31021, z: 7. 4 - Créditos Elver Maguh (Funções do Map Editor) gpedro (Download RME 3.4) Majesty (Download pasta 1100 + clients.xml + Tutorial RME 3.4)
  8. 1 point
    Majesty

    [10.x Old/ 11.49] Ombra Global Pack - Base OTX

    [10.x Old/ 11.49] Ombra Global Pack - Base OTX Download de servidor Global na versão 10.x old e 11.49 - Base OTX. 1- Características: 2 - Imagens: 3 - Download: Gitlab Ombra Pack de Correção 1.3: MEGA Scan - Ombra Pack de Correção 1.3: VirusTotal 4 - Créditos: Desenvolvedores TFS Desenvolvedores OTX ADM Logan (Johncore) ADM Argel Erick Nunes
  9. 1 point
    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)
  10. 1 point
    Majesty

    GesiorAAC - OTX 3.1 - TFS 1.x

    GesiorAAC - OTX 3.1 - TFS 1.x Download do website GesiorAAC baseado no layout oficial do Tibia criado pela Cipsoft, editado por lmiguelm26. 1 - Imagens: 2 - Download: [Hidden Content] Scan: [Hidden Content] 3 - Créditos: Cipsoft lmiguelm26
  11. 1 point
    Começa dia 5 de abril - Crie sua conta em [Hidden Content] História YurOTS marcou minha vida! Exatamente! Esse projeto foi o primeiro que tive o prazer de jogar. Um certo dia em 2007 um amigo me enviou uma screenshot de um jogador equipado com o então "full-set" e eu disse: "Cara, que isso?! Você hackeou alguém?" Foi nesse momento que meu amigo me enviou o IPChanger(Asprate) e me explicou como trocar o IP do meu cliente. - BOOM! *mind-blowing* Uma semana depois todos meus amigos estava conectados e conquistando seu espaço e descobrindo novas coisas fora dos servidores originais da Cipsoft. Divertido, fácil, sem "premium", novos conteúdos eram criados todos os dias por desenvolvedores sem experiência. Pequena escala, fácil. Essas pequenas comunidades no YurOTS me fazia feliz e orgulhoso de fazer parte de uma guild de noobs(haha). YurOTS foi a primeira prova que você não precisa ser como o Tibia "global" para ser incrível e desenvolver novos conteúdos a partir das suas ideias sem nenhum comprometimento de ser igual o jogo da Cipsoft. Quando você desenvolve um servidor, essa é a maneira. Ser único, exclusivo para que os jogadores possam ter um momento de lazer jogando algo original. Versão Clássica! Baseada na última versão oficial(0.94d) do YurOTS. [MEDIA=youtube]SSJ1Cg5V1u0[/MEDIA] Informações do Servidor Servers Canada (Start 5th) Port: 7272 Game Port: 7273 Poland (Start 15th) Port: 7272 Game Port: 7274 Rates Experience stage start in: 50x Magic: 8 Skill: 16 Loot: 3x Novas Quests Demonblood Slime Manhole Pits of Inferno Suicide Crew Join the Club Fight Black Knights House Drunk and High but fighter Dwarf Hostage Dragons?! Sistemas e Diversos Monster Tasks Monster diário com Bônus Items Craft Mineração Forja Broadcasters (Discord Integration) Reputation bonuses Shared party experience New Outfits New Items(sets from new creatures) Eventos Clube da Luta (PvP Arena) Catch the chicken HARDCORE day (Enforced PvP rules) Nova Conta Acesse [Hidden Content] Discord Server Entre no nosso discord: [Hidden Content] Obrigado, te espero no YurOTS!
  12. 1 point
    Majesty

    Gesior - subtopico bugado

    No Windows / Linux, utilize PHP 5.6 para abrir o site. Quando atualizar algum elemento (imagens, etc), utilize o atalho Ctrl + F5 (limpa o cache e recarrega os elementos do site). Instale o XAMPP 5.6.40: Windows: Linux:
  13. 1 point
    Pepeco

    Compilar OTClient - Debian

    Eu consegui resolver depois de muito esforço HASUHUSAHUSUHSAH', até o docker estava dando erro, então eu tive que fazer diferentes tipos de pesquisa e acabei encontrando a solução. Segue o link
  14. 1 point
    Majesty

    Tasks [7.6]

    Faltou uma } para fechar a tag antes de monster_race. ["orshabaal"] = {monster_race={"orshabaal"}, storage_start = 200218, storage = 91019,count = 500, reward = {{2520,1},{2173,1}}},
  15. 1 point
    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}},
  16. 1 point
    Majesty

    Tasks [7.6]

    ["giant spider"] = {monster_race={"giant spider"}, storage_start = 200215, storage = 91016,count = 500, exp = 500000, money = 15000}, ["demon"] = {monster_race={"demon"}, storage_start = 200215, storage = 91016,count = 6666, exp = 10000000, money = 200000}, A storage_start e storage da giant spider e demon estão iguais. Altere a storage_start e storage para a task de demon.
  17. 1 point
    orochielf

    [BETA-TEST] oldPokemon (SvkE based) - Online Now!

    Fala galera, tranquilão? Bom, hoje eu to aqui pra apresentar pra vocês o meu xodó. O projeto no qual já trabalho tem 4 anos, e de muita luta e sofrimento kkkkkkk, afinal, passamos por trancos e barrancos. Foi um servidor que eu pensei em fazer diferente, a forma que ele funcionava. Trabalhei em cima de uma source até eu criar a minha própria, voltada completamente para pokémon, para ter um melhor desempenho, tirando todas as funções do tibia e deixando o servidor bem mais leve. Bom, vamos falar exatamente o que é o oldPokemon. Eu criei esse servidor, junto com meu primo João, na ideia de trazer o oldschool do poketibia de volta a vida. Eu vejo muita gente comentando em vários forums / canais de poketibia / grupos do fb, que sentem saudades do antigo SvkE, e olha, eu também sentia, então foi de onde partimos nessa dura jornada de trazer um servidor que fosse fielmente o SvkE, porém com vários sistemas novos e funções inovadoras em nosso client e servidor. É com grande alegria que compartilho com vocês o Beta Test deste servidor, após uma longa caminhada. Algumas imagens do servidor: O servidor está contando com os seguintes sistemas: E MUITO MAIS! Para criar a conta, basta entrar no 1/1 e criar pelo Account Manager. Facebook Page: [Hidden Content] Discord Link: [Hidden Content] Download Link: [Hidden Content] Player.rar?dl=0 [Hidden Content]
  18. 1 point
    Majesty

    Shopsystem em gesior 1.3

    MyAAC: MyAAC - Gesior Shop System:
  19. 1 point
    Luan MF

    Duvida sobre a Spell Exevo gran mas pox [7.6]

    @Majesty Perfeito , obrigado pela força eu vou usar a primeira opção pois acho mais adequado pela fórmula, porem as 2 são funcionais, +REP
  20. 1 point
    Majesty

    Bug training offline

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

    Anel de Sauron (true ghost player)

    Sua pergunta foi respondida no suporte da OTLand: [Hidden Content]
  22. 1 point
    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:
  23. 1 point
    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
  24. 1 point
    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: [Hidden Content] - MingW: [Hidden Content] - OTClient Sources: [Hidden Content] 1.1 - Download Não Necessário: - Libs OTClient para MingW32: [Hidden Content] 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)
  25. 1 point
    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
  26. 1 point
    OTBR-Global 10.00 / 12.0x (11.44.5516) Download de servidor Global na versão 10.00 old e 12.0x (11.44.5516). Obs: servidor não oficial do OTServ Brasil (OTBR) e apoiado pelo OTServ Brasil (OTBR). 1- Características: 2 - Imagens: 3 - Downloads: Servidor: Gitlab Clientes: 4 - Créditos: Desenvolvedores TFS Desenvolvedores OTX ADM Logan (Johncore) ADM Argel Erick Nunes
  27. 1 point
    Majesty

    [Windows][VC2017] Compilando Sources TFS 1.3 + VCPKG

    [Windows][VC2017] Compilando Sources TFS 1.3 + VCPKG Tutorial explicando como compilar as sources do The Forgotten Server 1.3 + VCPKG com o Visual Studio 2017. 1 - Downloads Necessários - Visual Studio 2017 Community: [Hidden Content] - Microsoft Visual C++ 2017 Redistributable: (32-bit download, 64-bit download) - Git: [Hidden Content] 2 - Visual Studio 2017 - Na tela inicial do Visual Studio, no produto Visual Studio Community 2017 clique no botão Instalar. - Na próxima tela, selecione Desenvolvimento para Desktop com C++. - Na mesma tela em Resumo, selecione: - Depurador Just-In-Time; - Conjunto de ferramentas VC++ 2017 versão 15.9 v14.16 ferramentas v141 [x86 e x64]; - Ferramentas de criação do perfil do C++; - SDK do Windows 10 (10.0.17763.0); - Ferramentas do Visual C++ para CMake; - Visual C++ ATL para x86 e x64; - SDK do Windows 10 (10.0.17134.0) para Desktop [x86 e x64]; - SDK do Windows 10 (10.0.16299.0) para Desktop [x86 e x64]; - Conjunto de Ferramentas do VC++ 2015.3 v140 (x86, x64). - Componentes Individuais: - SDK do CRT Universal do Windows; - SDK do Windows 8.1; - Pacotes de Idiomas (Inglês). 3 - Instale os softwares necessários - Instale o Git: - Utilize o Git Bash ou Windows Powershell no diretório C:\ Git Bash: cd C:\ Windows Powershell: cd C:\ - Para fazer a instalação completa do VCPKG, execute os comandos abaixo no Git Bash ou Windows Powershell: 4 - Sources The Forgotten Server 1.3: - Faça o download das sources do The Forgotten Server 1.3 com o comando abaixo no Git Bash ou Windows Powershell. 5 - Instalação das bibliotecas VCPKG - Escolha um dos conjuntos de bibliotecas abaixo de acordo com o seu sistema operacional. - Execute o comando com o Git Bash ou Windows Powershell. - Para compilação em 32-bit: ./vcpkg install boost-iostreams:x86-windows boost-asio:x86-windows boost-system:x86-windows boost-variant:x86-windows boost-lockfree:x86-windows luajit:x86-windows libmariadb:x86-windows pugixml:x86-windows mpir:x86-windows cryptopp:x86-windows - Para compilação em 64-bit: ./vcpkg install boost-iostreams:x64-windows boost-asio:x64-windows boost-system:x64-windows boost-variant:x64-windows boost-lockfree:x64-windows luajit:x64-windows libmariadb:x64-windows pugixml:x64-windows mpir:x64-windows cryptopp:x64-windows 6 - Compilando as Sources do The Forgotten Server 1.3 - Encontre o diretório vc14 do TFS (C:\vcpkg\forgottenserver\vc14) e abra o arquivo theforgottenserver.sln. Isso irá abrir o Visual Studio e você estará apto a compilar as sources. - No Visual Studio, escolha a opção Release e a solução "Win32" ou "x64". - Para compilar as sources, clica em Build no menu e depois em Build Solution. - As sources serão compiladas com sucesso. 7 - DLL's Necessárias Para compilação em 32-bit: - Copie as DLLs da pasta (C:\vcpkg\forgottenserver\vc14\Release) ou da pasta (C:\vcpkg\installed\x86-windows\bin): Para compilação em 64-bit: - Copie as DLLs da pasta (C:\vcpkg\forgottenserver\vc14\x64\Release) ou da pasta (C:\vcpkg\installed\x64-windows\bin): 8 - Créditos Desenvolvedores TFS: [Hidden Content] Majesty (Tradução + Tutorial de Instalação do Git + Tutorial de compilação do TFS 1.3 no VS2017 )) Microsoft - VCPKG: [Hidden Content]
  28. 1 point
    Majesty

    Remere's Map Editor 3.5

    Remere's Map Editor 3.5 Este é um editor de mapas para OTServ, que é uma implementação de código aberto do MMORPG Tibia. Imagem: Changelog: [Hidden Content] Wiki: [Hidden Content] Source: [Hidden Content] Download: [Hidden Content] Créditos: [Hidden Content]/graphs/contributors
  29. 1 point
    Aralom

    [OTClient] Remove Local Player Default Light

    Resumo Recentemente estava observando que quando estou usando o OTClient ao descer para andares escuros do mapa o jogador fica com uma luz ao redor e quando usamos o Tibia Client esta mesma luz não aparece, ou seja, no OTClient a necessidade do jogador usar uma tocha ou uma magia para iluminar é muito menor que no Tibia Client pois utilizando o OTC o nível de luz não fica como deveria. Após estudar alguns arquivos da source do OTC consegui encontrar a solução, e é bem simples! Instalando Dentro do arquivo creatures.cpp nas sources do OTClient modificar: light.intensity = std::max<uint8>(light.intensity, 3); por light.intensity = std::max<uint8>(light.intensity, 0); Pronto! Espero que gostem!
  30. 1 point
    Vítor Amaral

    Como criar novos distance/magic effects

    Antes de tudo gostaria de esclarecer que não sou programador, nem nada perto disso. Apenas tive essa dúvida quando quis adicionar novos efeitos para o meu servidor. Testado em: tfs 0.3.5 (imagino que funcione em mais avançados) É necessário um server não compilado para isso. Fonte: tópicos alheios do otfans Adicionando Effects no Dateditor [spoiler=Adicionando Effects no Dateditor]- Abra o seu dateditor e clique em File>Open (ou aperte ctrl + o, ou clique na pastinha amarela em baixo de file) - Localize o seu tibia.dat e o seu tibia.spr e clique em open. (DICA: É interessante ter um backup do seus arquivos. Eu sempre coloco novos nomes toda vez que altero o dat e o spr. Sempre salvando de 30 em 30 minutos ou menos, pois o dateditor é meio instável.) - Depois de carregar 100%, importe as suas sprites (Import>Sprites) e clique em File>New>Distance (ou Effect). Isso vai depender do que você pretende adicionar. - Logo em seguida você vai se deparar com um espaço em branco. Abaixo ou acima dos distance effects (vai variar de acordo com o que você adicionou). - Ao adicionar distance effects, clique em display e altere o X Div e o Y Div para 3. Após isso você vai arrastar das sprites (lado direito) até o espaço onde temos a figura do bolo (como a figura mostra). - Em seguida, clique na seta circular, para ir adicionado os efeitos para os outros lados. Repare na seta vermelha. Essa é uma opção interessante para seus efeitos. Ao ticar light, você deverá escolher o Lightlevel e o Lightcolor. Tome base outros efeitos e teste. Vá alterando e testando até chegar no que deseja. - Ao adicionar magic effects, clique em display e altere o número do animation para o número de animações de seus magic effects. Width e Height devem ser alterados se no caso o seu efeito for 64x64. Ou deixe 1 de Width e 2 de Height para 32x64, e assim sucessivamente. - Verifique a seta vermelha, onde indica ItemType. O número 67 indica que esse é o efeito 67 (mais para baixo ele é citado no tutorial). Onde está escrito Next Animation é aonde você deve clicar para ir adicionando as animações. Começa em 0 e vai até o número que você selecionou. Elas vão seguir essa ordem de 0 a "X". [spoiler=É bom verificar] - Verifique se isso existe no seu protrocolgame.cpp. Caso exista, substitua por 68 caso adicione apenas um efeito mágico, ou 69 para adicionar dois efeitos, ou 70 para três, e assim sucessivamente. Se não existir, desconsidere esse spoiler. void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if(canSee(pos) && type <= 67) { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } } Magic Effects [spoiler=Magic Effects]- Entre em const.h e procure por (use a ctrl + f para procurar - tecla de atalho) Adicione seguindo o modelo: NM_ME_YALAHARIGHOST = 0x41, //65 NM_ME_BATS = 0x42, //66 NM_ME_SMOKE = 0x43, //67 NM_ME_NAME = 0x44, //68 (números seguintes) NM_ME_LAST = NM_ME_NAME, Obs.: Depois do número terminado em 9 é necessário adicionar A, B, C, D, E e F. Ex.: "NM_ME_EXAMPLE1 = 0x5A, //74" seguinte "NM_ME_EXAMPLE2 = 0x5B, //75" ... "NM_ME_EXAMPLE6 = 0x5F, //81 seguinte "NM_ME_EXAMPLE7 = 0x60, //82 - Depois entre em tools.cpp e procure por Adicione seguindo o modelo: {"bloodysteps", NM_ME_BLOODYSTEPS}, {"stepsvertical", NM_ME_STEPSVERTICAL}, {"yalaharighost", NM_ME_YALAHARIGHOST}, {"smoke", NM_ME_SMOKE}, {"name", NM_ME_NAME} }; - Então em global.lua ou constant.lua (data/lib) adicione: CONST_ME_SMOKE = 67 CONST_ME_NAME = 68 CONST_ME_NONE = 255 CONST_ME_LAST = CONST_ME_NAME Obs.: Não esqueça do novo número. Distance Effects [spoiler=Distance Effects]- Entre em const.h e procure por NM_SHOOT_EXPLOSION = 0x28, //40 NM_SHOOT_CAKE = 0x29, //41 NM_SHOOT_NAME = 0x30, //42 NM_SHOOT_LAST = NM_SHOOT_NAME, - Entre em tools.cpp e procure por {"eartharrow", NM_SHOOT_EARTHARROW}, {"explosion", NM_SHOOT_EXPLOSION}, {"cake", NM_SHOOT_CAKE}, {"name", NM_SHOOT_NAME} }; - Agora, se for uma munição como por exemplo uma flecha, no mesmo arquivo, procure por {"flamingarrow", AMMO_ARROW}, {"shiverarrow", AMMO_ARROW}, {"eartharrow", AMMO_ARROW}, {"etherealspear", AMMO_SPEAR} {"name", AMMO_TIPO }; - Então em global.lua ou constant.lua (data/lib) adicione: CONST_ANI_EXPLOSION = 40 CONST_ANI_CAKE = 41 CONST_ANI_NAME = 42 CONST_ANI_WEAPONTYPE = 254 CONST_ANI_NONE = 255 CONST_ANI_LAST = CONST_ANI_NAME Compile seu server e use o comando /z "número" e /y "número" para testar seus efeitos. [spoiler=SS] Apenas a imagem do distance effect, já que foi o que alterei. Obs.: É um server baseado em Harry Potter e esse foi um teste de um dos efeitos do 'Patronus' (para quem conhece). Qualquer coisa mandem p.m. ou postem aqui, prometo me esforçar para responder. Agredecimentos especiais ao gpedro EDITED: Coloquei os spoilers na tentativa de organizar melhor o tópico. Caso não gostem opinem para voltar como era antes. [spoiler=Dat Editor - Tutorial + Downloads][Hidden Content] Para baixar as sources basta entrar aqui: [Hidden Content]
This leaderboard is set to Sao Paulo/GMT-03:00
×