Postado Abril 9, 2020 5 anos Este é um post popular. [TESTADO EM OTX 2.1+] 8.60 Mostrar conteúdo oculto Opa, tudo bem? Resolvi fazer esse tutorial de como adicionar o Loot Channel em suas sources. <<< Exemplo de como vai ficar Primeiramente vá em configmanager.cpp e procure por: m_confNumber[START_LEVEL] = getGlobalNumber("newPlayerLevel", 1); Abaixo adicione: m_confNumber[LOOT_CHANNEL] = getGlobalNumber("lootChannelId", 11); Agora vá em configmanager.h e procure por: START_LEVEL, Abaixo adicione: LOOT_CHANNEL, Feito isso, vá em party.cpp e procure por: void Party::broadcastMessage(MessageClasses messageClass, const std::string& text, bool sendToInvitations/* = false*/) { PlayerVector::iterator it; if(!memberList.empty()) { for(it = memberList.begin(); it != memberList.end(); ++it) (*it)->sendTextMessage(messageClass, text); } leader->sendTextMessage(messageClass, text); if(!sendToInvitations || inviteList.empty()) return; for(it = inviteList.begin(); it != inviteList.end(); ++it) (*it)->sendTextMessage(messageClass, text); } Abaixo adicione: void Party::broadcastPartyLoot(MessageClasses messageClass, const std::string& loot) { std::string nick; PlayerVector::iterator it; leader->sendChannelMessage(nick, loot, messageClass, g_config.getNumber(ConfigManager::LOOT_CHANNEL)); for(it = memberList.begin(); it != memberList.end(); ++it) { (*it)->sendChannelMessage(nick, loot, messageClass, g_config.getNumber(ConfigManager::LOOT_CHANNEL)); } } Em party.h procure por: void broadcastMessage(MessageClasses messageClass, const std::string& text, bool sendToInvitations = false); Abaixo adicione: void broadcastPartyLoot(MessageClasses messageClass, const std::string& loot); Agora vá em monsters.cpp e procure por: #include "game.h" Abaixo adicione: #include "chat.h" Procure por: extern Game g_game; Abaixo adicione: extern Chat g_chat; Logo depois procure por: std::ostringstream ss; ss << "Loot of " << nameDescription << ": " << corpse->getContentDescription() << "."; if(owner->getParty() && message > LOOTMSG_PLAYER) owner->getParty()->broadcastMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); else if(message == LOOTMSG_PLAYER || message == LOOTMSG_BOTH) owner->sendTextMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); Substitua tudo isso por: std::stringstream ss; std::string nick; ss << "Loot of " << nameDescription << ": " << corpse->getContentDescription() << "."; if(owner->getParty() && message > LOOTMSG_PLAYER) owner->getParty()->broadcastPartyLoot((MessageClasses)MSG_CHANNEL, ss.str()); else if(message == LOOTMSG_PLAYER || message == LOOTMSG_BOTH) if(!g_chat.getChannel(owner, g_config.getNumber(ConfigManager::LOOT_CHANNEL))->hasUser(owner)) owner->sendTextMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); else owner->sendChannelMessage(nick, ss.str(), (MessageClasses)MSG_CHANNEL, g_config.getNumber(ConfigManager::LOOT_CHANNEL)); Por último vá na pasta data/XML de seu otserver, abra channels.xml e crie um novo canal para o loot <channel id="11" name="Loot" logged="yes" active="0" enable="0"/> Você poderá alterar o ID do channel em config.lua lootChannelId = 11 [TESTADO EM TFS 0.3.6] 8.54 ~ 8.60 Mostrar conteúdo oculto Primeiramente vá em configmanager.cpp e procure por: m_confNumber[START_LEVEL] = getGlobalNumber("newPlayerLevel", 1); Abaixo adicione: m_confNumber[LOOT_CHANNEL] = getGlobalNumber("lootChannelId", 12); Agora vá em configmanager.h e procure por: START_LEVEL, Abaixo adicione: LOOT_CHANNEL, Feito isso, vá em party.cpp e procure por: void Party::broadcastMessage(MessageClasses messageClass, const std::string& text, bool sendToInvitations/* = false*/) { PlayerVector::iterator it; if(!memberList.empty()) { for(it = memberList.begin(); it != memberList.end(); ++it) (*it)->sendTextMessage(messageClass, text); } leader->sendTextMessage(messageClass, text); if(!sendToInvitations || inviteList.empty()) return; for(it = inviteList.begin(); it != inviteList.end(); ++it) (*it)->sendTextMessage(messageClass, text); } Abaixo adicione: void Party::broadcastPartyLoot(SpeakClasses type, const std::string& loot) { std::string nick; PlayerVector::iterator it; leader->sendChannelMessage(nick, loot, type, g_config.getNumber(ConfigManager::LOOT_CHANNEL)); for(it = memberList.begin(); it != memberList.end(); ++it) { (*it)->sendChannelMessage(nick, loot, type, g_config.getNumber(ConfigManager::LOOT_CHANNEL)); } } Em party.h procure por: void broadcastMessage(MessageClasses messageClass, const std::string& text, bool sendToInvitations = false); Abaixo adicione: void broadcastPartyLoot(SpeakClasses type, const std::string& loot); Agora vá em monsters.cpp e procure por: std::ostringstream ss; ss << "Loot of " << nameDescription << ": " << corpse->getContentDescription() << "."; if(owner->getParty() && message > LOOTMSG_PLAYER) owner->getParty()->broadcastMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); else if(message == LOOTMSG_PLAYER || message == LOOTMSG_BOTH) owner->sendTextMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); Substitua tudo isso por: std::stringstream ss; std::string nick; ss << "Loot of " << nameDescription << ": " << corpse->getContentDescription() << "."; if(owner->getParty() && message > LOOTMSG_PLAYER) owner->getParty()->broadcastPartyLoot((SpeakClasses)SPEAK_CHANNEL_W, ss.str()); else if(message == LOOTMSG_PLAYER || message == LOOTMSG_BOTH) owner->sendChannelMessage(nick, ss.str(), (SpeakClasses)SPEAK_CHANNEL_W, g_config.getNumber(ConfigManager::LOOT_CHANNEL)); Por último vá na pasta data/XML de seu otserver, abra channels.xml e crie um novo canal para o loot <channel id="12" name="Loot" logged="yes" active="0"/> Créditos: ~Mathias Kenfi Editado Maio 7, 2020 5 anos por Mathias Kenfi Atualizado! (veja o histórico de edições)
Postado Abril 9, 2020 5 anos Administrador Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP. Mostrar conteúdo oculto Congratulations, your content has been approved! Thank you for your contribution, we of Tibia King we are grateful. Your content will help many other users, you received +1 REP. TibiaKing Team- KingTópicos www.tibiaking.com
Postado Abril 9, 2020 5 anos #removido Editado Abril 9, 2020 5 anos por LeoTK (veja o histórico de edições) Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas. discord.gg/phJZeHa2k4 Projeto ATS (Naruto) Informações Abaixo Facebook Youtube Discord Tutoriais / Conteúdos Clique Aqui
Postado Abril 9, 2020 5 anos @Mathias Kenfi Poderia me ajudar?, como você disse que foi testado em OTX 8.60, aqui deu erro, eu utilizo TFS 0.3.6, você poderia adaptar para 0.3.6? obrigado desde já. Aqui o erro: monsters.cpp In member function `void MonsterType::dropLoot(Container*)': monsters.cpp `MSG_CHANNEL' was not declared in this scope Makefile.win [Build Error] [obj//monsters.o] Error 1 Eu não faço a minima ideia de como adaptar esse sistema para TFS 0.3.6, pois não tenho experiencia com C++, espero que me ajude ❤️
Postado Abril 9, 2020 5 anos Autor Em 09/04/2020 em 18:10, Spooky Ghost disse: @Mathias Kenfi Poderia me ajudar?, como você disse que foi testado em OTX 8.60, aqui deu erro, eu utilizo TFS 0.3.6, você poderia adaptar para 0.3.6? obrigado desde já. Aqui o erro: monsters.cpp In member function `void MonsterType::dropLoot(Container*)': monsters.cpp `MSG_CHANNEL' was not declared in this scope Makefile.win [Build Error] [obj//monsters.o] Error 1 Eu não faço a minima ideia de como adaptar esse sistema para TFS 0.3.6, pois não tenho experiencia com C++, espero que me ajude ❤️ Tópico atualizado!
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.