Tudo que EddyHavoc postou
-
Aumentando o campo de visão do jogador - Adding more tiles to game window
Acredito que é interessante que este tutorial esteja também no TibiaKing. Créditos ao Flatlander e Animera pelo tutorial inicial. Realizei algumas atualizações. Descrição: Com estas alterações nas sources do servidor e do OTC você conseguirá aumentar a visão do jogador (terá mais SQMs disponíveis na tela.) Server sources. No arquivo const.h altere isso: #define NETWORKMESSAGE_MAXSIZE 24590 Para isso: #define NETWORKMESSAGE_MAXSIZE 49180 No arquivo protocolgame.cpp Em bool ProtocolGame :: canSee (int32_t x, int32_t y, int32_t z) const Altere isso: if ((x >= myPos.getX() - 8 + offsetz) && (x <= myPos.getX() + 9 + offsetz) && (y >= myPos.getY() - 6 + offsetz) && (y <= myPos.getY() + 7 + offsetz)) { Para isso: if ((x >= myPos.getX() - Map::maxClientViewportX + offsetz) && (x <= myPos.getX() + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.getY() - Map::maxClientViewportY + offsetz) && (y <= myPos.getY() + (Map::maxClientViewportY+1) + offsetz)) { Em void ProtocolGame :: sendMapDescription (const Position & pos) Altere isso: GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); Para isso: GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); Em void ProtocolGame :: sendMoveCreature (const Creature * criatura, const Position & newPos, int32_t newStackPos, const Position & oldPos, int32_t oldStackPos, bool teleport) Altere isso: if (oldPos.y > newPos.y) { // north, for old x msg.AddByte(0x65); GetMapDescription(oldPos.x - 8, newPos.y - 6, newPos.z, 18, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg.AddByte(0x67); GetMapDescription(oldPos.x - 8, newPos.y + 7, newPos.z, 18, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg.AddByte(0x66); GetMapDescription(newPos.x + 9, newPos.y - 6, newPos.z, 1, 14, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg.AddByte(0x68); GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } Para isso: if (oldPos.y > newPos.y) { // north, for old x msg.AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg.AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg.AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg.AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } Em void ProtocolGame :: MoveUpCreature (NetworkMessage & msg, const Creature * criatura, const Position & newPos, const Position & oldPos) Altere isso: if (newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); Para isso: if (newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); Logo abaixo, altere isso: else if (newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip); Para isso: else if (newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.getZ() - 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); Logo abaixo, altere isso: //moving up a floor up makes us out of sync //west msg.AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y - 5, newPos.z, 1, 14, msg); //north msg.AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); Para isso: //moving up a floor up makes us out of sync //west msg.AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg.AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); Em void ProtocolGame :: MoveDownCreature (NetworkMessage & msg, const Creature * criatura, const Position & newPos, const Position & oldPos) Altere isso: //going from surface to underground if (newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Para isso: //going from surface to underground if (newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Logo abaixo, altere: //going further down else if (newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Para isso: //going further down else if (newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); E logo abaixo disso, altere: //moving down a floor makes us out of sync //east msg.addByte(0x66); GetMapDescription(oldPos.x + 9, oldPos.y - 7, newPos.z, 1, 14, msg); //south msg.addByte(0x67); GetMapDescription(oldPos.x - 8, oldPos.y + 7, newPos.z, 18, 1, msg); Para isso: //moving down a floor makes us out of sync //east msg.addByte(0x66); GetMapDescription(oldPos.x + Map::maxClientViewportX+1, oldPos.y - (Map::maxClientViewportY+1), newPos.z, 1, ((Map::maxClientViewportY+1)*2), msg); //south msg.addByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y + (Map::maxClientViewportY+1), newPos.z, ((Map::maxClientViewportX+1)*2), 1, msg); Estas alterações são aplicadas para o TFS 1.x, se você estiver utilizando o TFS 1.3 ou superior, você deve substituir AddByte para addByte e se você estiver alterando as sources do TFS abaixo do TFS 1.x você ainda deve realizar as seguintes alterações em protocolgame.cpp Alterar isso: void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos) { msg->put<char>(0x64); msg->putPosition(player->getPosition()); GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); } Para isso: void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos) { msg->put<char>(0x64); msg->putPosition(player->getPosition()); GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); } Estas são todas as alterações em protocolgame.cpp Client sources Agora no arquivo map.cpp Altere isso: void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Para isso: { AwareRange range; range.left = 8; //Altere este 8 para o mesmo valor que você clocou do maxClientViewportX em map.h range.top = 6; //Altere este 6 para o mesmo valor que você clocou do maxClientViewportY em map.h range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } E no arquivo creature.cpp Altere isso bool Creature::canSee(const Position& myPos, const Position& pos, int32_t viewRangeX, int32_t viewRangeY) { if (myPos.z <= 7) { //we are on ground level or above (7 -> 0) //view is from 7 -> 0 if (pos.z > 7) { return false; } } else if (myPos.z >= 8) { //we are underground (8 -> 15) //view is +/- 2 from the floor we stand on if (Position::getDistanceZ(myPos, pos) > 2) { return false; } } const int_fast32_t offsetz = myPos.getZ() - pos.getZ(); return (pos.getX() >= myPos.getX() - viewRangeX + offsetz) && (pos.getX() <= myPos.getX() + viewRangeX + offsetz) && (pos.getY() >= myPos.getY() - viewRangeY + offsetz) && (pos.getY() <= myPos.getY() + viewRangeY + offsetz); } Para isso: bool Creature::canSee(const Position& myPos, const Position& pos, int32_t viewRangeX, int32_t viewRangeY) { if (myPos.z <= 7) { //we are on ground level or above (7 -> 0) //view is from 7 -> 0 if (pos.z > 7) { return false; } } else if (myPos.z >= 8) { //we are underground (8 -> 15) //view is +/- 2 from the floor we stand on if (Position::getDistanceZ(myPos, pos) > 2) { return false; } } const int_fast32_t offsetz = myPos.getZ() - pos.getZ(); return (pos.getX() >= myPos.getX() - Map::maxViewportX + offsetz) && (pos.getX() <= myPos.getX() + Map::maxViewportX + offsetz) && (pos.getY() >= myPos.getY() - Map::maxViewportY + offsetz) && (pos.getY() <= myPos.getY() + Map::maxViewportY + offsetz); } Fim! Estas são todas as alterações, eu adicionei algumas novas atualizações e melhorias além das descritas no tópico original, obrigado novamente ao Flatlander e Animera.
-
Resolvendo o erro "Unknown column 'lastday' in 'field list'"
Este erro atualmente ocorre quando vamos instalar o MyAAC utilizando o banco de dados disponibilizado no forgottenserver atualizado. Mensagem do erro: "Unknown column 'lastday' in 'field list'" Para resolver este erro, reinstale a Database e o MyAAC. Antes de iniciar a nova instalação do MyAAC, após importar o banco de dados (schema.sql) do forgottenserver, execute no phpMyAdmin o código abaixo. ALTER TABLE `accounts` ADD `lastday` int unsigned NOT NULL DEFAULT '0'; Após seguir estes passos, você irá conseguir efetuar a sua instalação com sucesso!
-
[TFS 1.3] Goldchange - Converter 100 gold coin em 1 platinum coin e 100 platinum coin em 1 crystal coin
[TFS 1.3] Goldchange - Converter 100 gold coin em 1 platinum coin e 100 platinum coin em 1 crystal coin Muitos dos novos servers não tem mais esta função facilitadora que os jogadores tanto adoram! Por este motivo venho compartilhar aqui com vocês. gold_change.lua Em Data/Scripts/Actions/Other/ crie um arquivo .lua chamado gold_change.lua e insira o código abaixo: CRÉDITOS: @EddyHavoc
-
[OTG][NPC][Storages][Dawnport] Liberando os acessos das Quests e Missões pelo NPC Captain Dreadnought
Open Source MMORPG emulador de Tibia escrito em C++. Servidor Oficial do Tibiaking! [OTG][NPC][Storages][Dawnport] Liberando os acessos das Quests e Missões pelo NPC Captain Dreadnought Tutorial explicado de como liberar os acessos, missões e quests para todos os jogadores! NPC Captain Dreadnought Abra o script do npc captain_dreadnought.lua localizado na pasta data/npc/scripts/ e substitua todo o código pelo código abaixo: CRÉDITOS: @EddyHavoc @Marco Oliveira
- [OTG][NPC][Storages][Rookgaard] Liberando os acessos das Quests e Missões pelo NPC Oracle
-
[OTG][NPC][Storages][Rookgaard] Liberando os acessos das Quests e Missões pelo NPC Oracle
Open Source MMORPG emulador de Tibia escrito em C++. Servidor Oficial do Tibiaking! [OTG][NPC][Storages][Rookgaard] Liberando os acessos das Quests e Missões pelo NPC Oracle Tutorial explicado de como liberar as acessos, missões e quests para todos os jogadores! NPC Oracle Abra o script do npc the_oracle.lua localizado na pasta data/npc/scripts/ e substitua todo o código pelo código abaixo: CRÉDITOS: @EddyHavoc @Marco Oliveira
-
Linguagem dos Orcs
A Linguagem Orc A Linguagem Orc é muito antiga no Tibia, acredita-se que surgiu em Rookgaard em 17 de Março de 2000. Um fato curioso é que com o passar dos tempos aparentemente até mesmo os próprios Orcs foram deixando de falar esta linguagem, ao menos conosco. Podemos encontrar bastante informações sobre esta língua em Rookgaard, existem livros escritos e NPCs que podemos conversar usando esta linguagem. Ela pode ser útil para conseguir até mesmo alguns benefícios na ilha. Abaixo irei citar algumas traduções da linguagem orc para o inglês. Traduções Palavra aprendidas no Livro chamado "My Travels" encontrado na Academia de Rookgaard, acredita-se que este livro foi escrito pela Amber: charach -> hi Palavras aprendidas diretamente com a Amber: burp -> no mok -> yes pixo -> arrow Palavras aprendidas com o Blind Orc Ikem -> I goshak -> Buy Porak -> Weapons Bata -> Armors and Helmets Dora -> Shield Porak (Weapons): Charcha -> Sabre Burka -> Short Sword Burka Bata -> Sword Batuk -> Bow Bata (Armos and Helmets): Aka Bora -> Leather Armor Tulak Bora-> Studded Armor Hakhak -> Hatchet Grofa -> Studded Helmet Dora (Shields): Donga -> Brass Shield Outras palavras: aka -> leather ba -> what burp -> no buta -> stupid futchi -> bye humak -> human ikem -> I klamuk -> unknown insult (noun) maruk -> you nixda -> not enough gold (em alemão é algo como "nichts da" = "nothing there") pashak -> sell rambo -> thank? or friend? ta -> this tefar -> bunch or 10 (but orcs can only count to 5, so it's unlikely) tulak -> studded (this word is not used in studded helmet) ul -> for zambo -> thank? or friend? Palavras encontradas em livros escrito na linguagem dos Orcs próximo a Bear Room Quest: 5 5 5 5 2 -> 22 (na linguagem orc os números vão até 5) arash -> ? bana -> destroy? kill? batash -> ? Booz -> ? bota -> ? ferut -> ? gort -> ? karak -> ? karakim -> ? karek -> ? kiskesh -> ? mora -> ? Omark -> ? ouk -> ? taka -> ? utash -> ? Palavras encontradas em notas penduradas nas paredes: daem -> ? desmet -> ? irkm -> ? Exemplo de Negociação com o Blind Orc Iniciando a conversa com o Blind Orc sem ser na linguagem Orc: (Ele não irá negociar com você se você não falar na linguagem Orc) - Hi. - Buta humak! -> Stupid human! Iniciando a conversa na linguagem Orc: Charach. -> Hi. Ikem Charach maruk. -> I greet you. Negociando: Ikem goshak. -> I buy. Ikem pashak porak, bata, dora. Ba goshak maruk? -> I sell weapons, armors/helmets, shields. What buying you? Negociando Armas: Goshak porak. -> Buy weapon. Ikem pashak charcha, burka, burka bata, hakhak. Ba goshak maruk? -> I sell sabre, short sword, sword, hatchet. What buying you? Negociando Armaduras e Capacetes: Goshak bata. -> Buy armor/helmet. Ikem pashak aka bora, tulak bora, grofa. Ba goshak maruk? -> I sell leather armor, studded armor, studded helmet. What buying you? Negociando escudos: Goshak dora. -> Buy shield. Ikem pashak donga. Ba goshak maruk? -> I sell brass shield. What buying you? Comprando um item: Goshak batuk. -> Buy bow. Ahhhh, maruk goshak batuk? -> Ahhhh, you buying bow? Mok. -> Yes. Maruk rambo zambo! -> You thank friend(?)! Comprando flechas (Só é possível comprar de 10 em 10): Goshak pixo. -> Buy arrows. Maruk goshak tefar pixo ul batuk? -> You buy ten(or bunch) arrows for bow? Mok. -> Yes. Considerações Finais Vocês gostaram desse tipo de conteúdo? Eu particularmente sou apaixonado pela Lore do Tibia! Deixe um comentário falando sobre o que você achou deste tópico, deste tipo de conteúdo, e o que você gostaria de saber sobre a história desse jogo maravilhoso em tópicos futuros! Até a próxima! Maruk rambo zambo!
-
[Ubuntu] Compilando Sources OTG-KING GLOBAL MAP FULL (SERVIDOR OFICIAL DO TIBIAKING COMPLETO)
Open Source MMORPG emulador de Tibia escrito em C++. Servidor Oficial do Tibiaking! [Ubuntu] Compilando as Sources OTG KING GLOBAL Tutorial explicado de como compilar as sources no Ubuntu 16-20. Instalação dos Softwares Necessários Execute os comandos abaixo para instalar o Git, Cmake e as Bibliotecas utilizadas pelas sources do OTG KING sudo apt install git cmake build-essential libluajit-5.1-dev libmysqlclient-dev libboost-system-dev libboost-iostreams-dev libboost-filesystem-dev libpugixml-dev libcrypto++-dev Pacote Adicional para o Ubuntu 20.04: sudo apt install libboost-date-time-dev Instalando as Sources do OTG KING git clone --recursive https://github.com/Johncorex/otg-king.git Compilando cd otg-king-master mkdir build && cd build cmake .. make CRÉDITOS: The Forgotten Server OTG contribuidores OTX contribuidores Otbr contribuidores Tibiaking Johncore (@Johncore) Erick Nunes Cjaker (@Cjaker) Marson Schneider Erimyth Nolis (@Nolis) Toninho Renan Ulian jzdj (Se você contribuiu com o projeto de alguma forma e gostaria de ser citado, por favor me envie no privado descrevendo a sua contribuição, que irei editar a postagem e inserir o seu nome.)
-
Resolvendo o erro "Error: Cannot open include file: 'lua.hpp': No such file or directory"
Este é um erro muito comum para as pessoas vão compilar pela primeira vez, e por este motivo resolvi criar este tópico para lhe ajudar. (Windows - Microsoft Visual Studio) Mensagem do erro: Cannot open include file: 'lua.hpp': No such file or directory Para resolver este erro, é muito simples! Faça as seguintes alterações nos arquivos configmanager.cpp e luascript.h Altere #include "lua/lua.hpp" Por: #include "luajit/lua.hpp" Agora é só felicidade!
-
Me ajudem por favor, não sei como proceder
Entre na pasta HTDOCS (C:\xampp\htdocs\) do XAMPP e abra o config.php Procure por: $config['site']['serverPath'] E coloque corretamente o seu diretório, exemplo: $config['site']['serverPath'] = "C:\Users\malla\Desktop\colossus\config.lua"
-
[Windows][VC2019][VCPKG] Compilando Sources OTG-KING GLOBAL MAP FULL (SERVIDOR OFICIAL DO TIBIAKING COMPLETO)
É um prazer estar de volta amigos! Irei tentar voltar a contribuir com a comunidade como antes. Um grande abraço! @Nolis @Johncore É aquela história: "Você sai do Tibia mas o Tibia não sai de você."
-
[Windows][VC2019][VCPKG] Compilando Sources OTG-KING GLOBAL MAP FULL (SERVIDOR OFICIAL DO TIBIAKING COMPLETO)
Open Source MMORPG emulador de Tibia escrito em C++. Servidor Oficial do Tibiaking! [Windows][VC2019] Compilando as Sources OTG KING GLOBAL Tutorial explicado de como compilar as sources utilizando o Microsoft Visual 2019. Downloads necessários: Git: https://git-scm.com/download/win Visual Studio 2019 Community: https://www.visualstudio.com/vs/ VCPKG: https://github.com/Microsoft/vcpkg Instalando o Microsoft Visual Studio 2019. https://www.visualstudio.com/vs/ Após instalar, na tela inicial selecione o produto Visual Studio Community 2019 e clique no botão instalar. Na próxima tela, selecione Desenvolvimento para Desktop com C++. Na mesma tela em Detalhes da Instalação, selecione: Na página, pacotes de idioma, selecione: (Há pessoas que selecionam Inglês e Português (Brasil), porém apenas o idioma Inglês é essencial para a compilação) Instalando o Git. https://git-scm.com/download/win Instalando o VCPKG. Abra o GIT Bash e execute os comandos abaixo: cd C:/ git clone https://github.com/Microsoft/vcpkg cd vcpkg .\bootstrap-vcpkg.bat .\vcpkg integrate install Instalando as Sources do OTG KING Abra o GIT Bash e execute os comandos abaixo: cd C:/ git clone --recursive https://github.com/Johncorex/otg-king.git Instalando as bibliotecas Abra o GIT Bash e execute os comandos abaixo de acordo com o seu sistema operacional: Para 64-bit (64x) ./vcpkg install --triplet x64-windows boost-iostreams boost-asio boost-system boost-filesystem boost-variant boost-lockfree luajit libmariadb pugixml cryptopp Para 32-bit (32x) ./vcpkg install boost-iostreams boost-asio boost-system boost-filesystem boost-variant boost-lockfree luajit libmariadb pugixml cryptopp Após completar a instalação de todas as bibliotecas de acordo como sistema operacional, execute o comando abaixo: .\vcpkg integrate install Compilando as Sources do OTG KING Entre no diretório vc14 das sources do OTG KING (C:/otg-king-master/vc14) e abra o arquivo otg-king.sln O Visual Studio será aberto, selecione Release e x64 ou win32 e inicie a compilação utilizando o atalho CTRL + SHIFT + B ou vá em Build > Build Solution As sources serão compiladas com sucesso! DLL's 64-bit (64x): - Copie as DLLs da pasta (C:/otg-king-master/vc14/x64/release). - Copie o executável da pasta (C:/otg-king-master/vc14/x64/release). - E cole na pasta raiz do servidor. Para compilação em 32-bit: - Copie as DLLs da pasta (C:/otg-king-master/vc14/x64/release). - Copie o executável da pasta (C:/otg-king-master/vc14/x64/release). - E cole na pasta raiz do servidor. CRÉDITOS: The Forgotten Server OTG contribuidores OTX contribuidores Otbr contribuidores Tibiaking Johncore (@Johncore) Erick Nunes Cjaker (@Cjaker) Marson Schneider Erimyth Nolis (@Nolis) Toninho Renan Ulian jzdj (Se você contribuiu com o projeto de alguma forma e gostaria de ser citado, por favor me envie no privado descrevendo a sua contribuição, que irei editar a postagem e inserir o seu nome.)
- [TFS 1.3] Block Wall Spell
-
Pedido
Por gentileza poste o seu 'Data/Actions/Other/Taming.lua'
- Nolis Show Off
-
COMPILAR SOURCE 1.X
Olá para compilar você pode seguir um dos tutoriais abaixo, qualquer dúvida, volte a entrar em contato.
-
Erro ao compilar source
Você não definiu o caminho das bibliotecas corretamente. (Include/ Libs) Indico seguir os passos de um dos tutoriais abaixo, qualquer dúvida volte a entrar em contato.
-
[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!
-
Configurar nova Door Mágica usando qualquer ID (level + effect + mensagem)
Boa Dani! Ótimo script! +REP
- [TFS 1.2] Modal Window Helper Lib
- [TFS 1.2] Modal Window Helper Lib
- [TFS 1.2] Modal Window Helper Lib
-
[TFS 1.2] Modal Window Helper Lib
Resumo A maneira atual para implementar Modal Window é um pouco complicada. Atualmente precisamos cria-la em algum lugar, registrar o evento, adicionar os botões em uma ordem específica, definir o ID da janela, dos botões e da escolha. Isso não é o ideal, então esta biblioteca foi criada pelo Non Sequitur para ajudar nisso. E eu estou trazendo para a OtServBrasil. Exemplo/ Tutorial Usando Modal Window Instalando Adicionar em data/lib/lib.lua dofile('data/lib/modalwindow.lua') Crie o arquivo modalwindow.lua com o seguinte conteúdo em data/lib if not modalWindows then modalWindows = { modalWindowConstructor = ModalWindow, nextFreeId = 500, windows = {} } end local MT = {} MT.__index = MT function ModalWindow(...) local args = {...} if type(args[1]) == 'table' then local self = setmetatable(args[1], MT) local id = modalWindows.nextFreeId self.id = id self.buttons = {} self.choices = {} self.players = {} self.created = false modalWindows.nextFreeId = id + 1 table.insert(modalWindows.windows, self) return self end return modalWindows.modalWindowConstructor(...) end function MT:setDefaultCallback(callback) self.defaultCallback = callback end function MT:addButton(text, callback) local button = {text = tostring(text), callback = callback} table.insert(self.buttons, button) return button end function MT:addButtons(...) for _, text in ipairs({...}) do table.insert(self.buttons, {text = tostring(text)}) end end function MT:addChoice(text) local choice = {text = tostring(text)} table.insert(self.choices, choice) return choice end function MT:addChoices(...) for _, text in ipairs({...}) do table.insert(self.choices, {text = tostring(text)}) end end function MT:setDefaultEnterButton(text) self.defaultEnterButton = text end function MT:setDefaultEscapeButton(text) self.defaultEscapeButton = text end function MT:setTitle(title) self.title = tostring(title) end function MT:setMessage(message) self.message = tostring(message) end local buttonOrder = { [4] = {3, 4, 2, 1}, [3] = {2, 3, 1}, [2] = {1, 2}, [1] = {1} } function MT:create() local modalWindow = modalWindows.modalWindowConstructor(self.id, self.title, self.message) local order = buttonOrder[math.min(#self.buttons, 4)] if order then for _, i in ipairs(order) do local button = self.buttons[i] modalWindow:addButton(i, button.text) button.id = i if button.text == self.defaultEnterButton then modalWindow:setDefaultEnterButton(i) elseif button.text == self.defaultEscapeButton then modalWindow:setDefaultEscapeButton(i) end end end for _, choice in ipairs(self.choices) do modalWindow:addChoice(_, choice.text) choice.id = _ end self.modalWindow = modalWindow end function MT:sendToPlayer(player) if not self.modalWindow then self:create() end player:registerEvent('ModalWindowHelper') self.players[player:getId()] = true return self.modalWindow:sendToPlayer(player) end Adicionar em data/creaturescripts/craturescripts.xml <event type="modalwindow" name="ModalWindowHelper" script="modalwindowhelper.lua" /> Crie o arquivo modalwindowhelper.lua com o seguinte conteúdo em data/creaturescripts/scripts/ function onModalWindow(player, modalWindowId, buttonId, choiceId) local modalWindow for _, window in ipairs(modalWindows.windows) do if window.id == modalWindowId then modalWindow = window break end end if not modalWindow then return true end local playerId = player:getId() if not modalWindow.players[playerId] then return true end modalWindow.players[playerId] = nil local choice = modalWindow.choices[choiceId] for _, button in ipairs(modalWindow.buttons) do if button.id == buttonId then local callback = button.callback or modalWindow.defaultCallback if callback then callback(button, choice) break end end end return true end Pronto! Espero que gostem. Posteriormente irei postar um tutorial de como usar/ aplicar e alguns scripts utilizando a Biblioteca.
- [TFS 1.3] Block Wall Spell
- [Perfect Server] Global Compacto