diff --git a/src/AiFactory.cpp b/src/AiFactory.cpp index 2eb4453e..e932a111 100644 --- a/src/AiFactory.cpp +++ b/src/AiFactory.cpp @@ -264,7 +264,7 @@ void AiFactory::AddDefaultCombatStrategies(Player* player, PlayerbotAI* const fa if (!player->InBattleground()) { - engine->addStrategies("racials", "chat", "default", "cast time", "duel", "boost", nullptr); + engine->addStrategies("racials", "chat", "default", "cast time", "duel", "boost", "emote", nullptr); } if (sPlayerbotAIConfig->autoSaveMana) { @@ -548,7 +548,7 @@ void AiFactory::AddDefaultNonCombatStrategies(Player* player, PlayerbotAI* const if (!player->InBattleground()) { nonCombatEngine->addStrategies("nc", "food", "chat", "follow", - "default", "quest", "loot", "gather", "duel", "buff", "mount", nullptr); + "default", "quest", "loot", "gather", "duel", "buff", "mount", "emote", nullptr); } if (sPlayerbotAIConfig->autoSaveMana) { nonCombatEngine->addStrategy("auto save mana"); diff --git a/src/PlayerbotTextMgr.cpp b/src/PlayerbotTextMgr.cpp index fd3a95a6..7041185c 100644 --- a/src/PlayerbotTextMgr.cpp +++ b/src/PlayerbotTextMgr.cpp @@ -28,12 +28,13 @@ void PlayerbotTextMgr::LoadBotTexts() Field* fields = result->Fetch(); std::string name = fields[0].Get(); text[0] = fields[1].Get(); - uint32 sayType = fields[2].Get(); - uint32 replyType = fields[3].Get(); + uint8 sayType = fields[2].Get(); + uint8 replyType = fields[3].Get(); for (uint8 i = 1; i < MAX_LOCALES; ++i) { text[i] = fields[i + 3].Get(); } + botTexts[name].push_back(BotTextEntry(name, text, sayType, replyType)); ++count; } diff --git a/src/strategy/actions/EmoteAction.cpp b/src/strategy/actions/EmoteAction.cpp index 2ef6e90a..8fe57374 100644 --- a/src/strategy/actions/EmoteAction.cpp +++ b/src/strategy/actions/EmoteAction.cpp @@ -671,9 +671,9 @@ bool EmoteAction::Execute(Event event) if (pSource && (pSource->GetGUID() != bot->GetGUID()) && ((urand(0, 1) && bot->HasInArc(static_cast(M_PI), pSource, 10.0f)) || (namlen > 1 && strstri(bot->GetName().c_str(), nam.c_str())))) { - LOG_INFO("playerbots", "Bot {} {}:{} <{}> received SMSG_TEXT_EMOTE {} from player {} <{}>", + /*LOG_INFO("playerbots", "Bot {} {}:{} <{}> received SMSG_TEXT_EMOTE {} from player {} <{}>", bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->GetLevel(), - bot->GetName(), text_emote, pSource->GetGUID().ToString().c_str(), pSource->GetName()); + bot->GetName(), text_emote, pSource->GetGUID().ToString().c_str(), pSource->GetName());*/ emote = text_emote; } @@ -693,9 +693,9 @@ bool EmoteAction::Execute(Event event) if ((pSource->GetGUID() != bot->GetGUID()) && (pSource->GetTarget() == bot->GetGUID() || (urand(0, 1) && bot->HasInArc(static_cast(M_PI), pSource, 10.0f)))) { - LOG_INFO("playerbots", "Bot {} {}:{} <{}> received SMSG_EMOTE {} from player {} <{}>", + /*LOG_INFO("playerbots", "Bot {} {}:{} <{}> received SMSG_EMOTE {} from player {} <{}>", bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->GetLevel(), bot->GetName(), - emoteId, pSource->GetGUID().ToString().c_str(), pSource->GetName()); + emoteId, pSource->GetGUID().ToString().c_str(), pSource->GetName());*/ std::vector types; for (int32 i = sEmotesTextStore.GetNumRows(); i >= 0; --i) diff --git a/src/strategy/actions/SayAction.cpp b/src/strategy/actions/SayAction.cpp index 46bcf089..67395b2e 100644 --- a/src/strategy/actions/SayAction.cpp +++ b/src/strategy/actions/SayAction.cpp @@ -124,8 +124,6 @@ bool SayAction::isUseful() void ChatReplyAction::ChatReplyDo(Player* bot, uint32 type, uint32 guid1, uint32 guid2, std::string msg, std::string chanName, std::string name) { - LOG_INFO("playerbots", "{} Handle chat reply", bot->GetName()); - ChatReplyType replyType = REPLY_NOT_UNDERSTAND; // default not understand std::string respondsText = ""; @@ -143,7 +141,6 @@ void ChatReplyAction::ChatReplyDo(Player* bot, uint32 type, uint32 guid1, uint32 std::ostringstream out; out << "DEBUG ChatReplyDo decided to ignore partial blocklist match" << msg; bot->Say(out.str(), LANG_UNIVERSAL); - return; } @@ -657,13 +654,10 @@ void ChatReplyAction::ChatReplyDo(Player* bot, uint32 type, uint32 guid1, uint32 bot->Whisper(c, LANG_ORCISH, plr); } } - else - LOG_ERROR("playerbots", "plr pointer is nullptr chat whisper"); } else if (type == CHAT_MSG_SAY) { - LOG_INFO("playerbots", "say respond: {}", respondsText); if (bot->GetTeamId() == TEAM_ALLIANCE) bot->Say(respondsText, LANG_COMMON); else @@ -689,11 +683,6 @@ void ChatReplyAction::ChatReplyDo(Player* bot, uint32 type, uint32 guid1, uint32 guild->BroadcastToGuild(bot->GetSession(), false, respondsText, LANG_UNIVERSAL); } - - else - { - LOG_ERROR("playerbots", "Unknown chat type {}", type); - } } GET_PLAYERBOT_AI(bot)->GetAiObjectContext()->GetValue("last said", "chat")->Set(time(nullptr) + urand(5, 25)); } diff --git a/src/strategy/actions/SuggestWhatToDoAction.cpp b/src/strategy/actions/SuggestWhatToDoAction.cpp index 0fd543c5..81c5f540 100644 --- a/src/strategy/actions/SuggestWhatToDoAction.cpp +++ b/src/strategy/actions/SuggestWhatToDoAction.cpp @@ -13,6 +13,8 @@ #include "GuildMgr.h" #include "Config.h" +#include + enum eTalkType { General = ChannelFlags::CHANNEL_FLAG_GENERAL | ChannelFlags::CHANNEL_FLAG_NOT_LFG, @@ -29,11 +31,11 @@ SuggestWhatToDoAction::SuggestWhatToDoAction(PlayerbotAI* botAI, std::string con : InventoryAction{ botAI, name } , _dbc_locale{ sWorld->GetDefaultDbcLocale() } { - suggestions.push_back(&SuggestWhatToDoAction::specificQuest); - suggestions.push_back(&SuggestWhatToDoAction::grindReputation); - suggestions.push_back(&SuggestWhatToDoAction::something); - suggestions.push_back(&SuggestWhatToDoAction::instance); - suggestions.push_back(&SuggestWhatToDoAction::grindMaterials); + suggestions.push_back(std::bind(&SuggestWhatToDoAction::specificQuest, this)); + suggestions.push_back(std::bind(&SuggestWhatToDoAction::grindReputation, this)); + suggestions.push_back(std::bind(&SuggestWhatToDoAction::something, this)); + suggestions.push_back(std::bind(&SuggestWhatToDoAction::instance, this)); + suggestions.push_back(std::bind(&SuggestWhatToDoAction::grindMaterials, this)); } bool SuggestWhatToDoAction::isUseful() @@ -48,11 +50,9 @@ bool SuggestWhatToDoAction::isUseful() bool SuggestWhatToDoAction::Execute(Event event) { - if (!sRandomPlayerbotMgr->IsRandomBot(bot) || bot->GetGroup() || bot->GetInstanceId()) - return false; - uint32 index = rand() % suggestions.size(); - (this->*suggestions[index])(); + auto fnct_ptr = suggestions[index]; + fnct_ptr(); std::string const qualifier = "suggest what to do"; time_t lastSaid = AI_VALUE2(time_t, "last said", qualifier); @@ -310,11 +310,6 @@ void SuggestWhatToDoAction::spam(std::string msg, uint8 flags, bool worldChat, b ChatChannelsEntry const* channel = sChatChannelsStore.LookupEntry(i); if (!channel) continue; - if (channel->pattern[_dbc_locale]) - LOG_INFO("playerbots", "Loop on channel: {}", channel->pattern[_dbc_locale]); - else - LOG_ERROR("playerbots", "channel->pattern[_dbc_locale] is null"); - for (AreaTableEntry const* current_zone : sAreaTableStore) { if (!current_zone) @@ -327,14 +322,12 @@ void SuggestWhatToDoAction::spam(std::string msg, uint8 flags, bool worldChat, b if ((channel->flags & CHANNEL_DBC_FLAG_LFG) != 0) { std::string chanName = channel->pattern[_dbc_locale]; - LOG_INFO("playerbots", "Trying to chat on channel: {}", chanName); chn = cMgr->GetChannel(chanName, bot); } else { snprintf(channelName, 100, channel->pattern[_dbc_locale], current_zone->area_name[_dbc_locale]); chn = cMgr->GetChannel(channelName, bot); - LOG_INFO("playerbots", "Trying to chat on channel: {}", channelName); } if (!chn) continue; @@ -355,16 +348,19 @@ void SuggestWhatToDoAction::spam(std::string msg, uint8 flags, bool worldChat, b channelNames.push_back(chn->GetName()); } else + { chn->Say(bot->GetGUID(), msg.c_str(), LANG_UNIVERSAL); + LOG_DEBUG("playerbots", "send grind {} - {}", bot->GetName().c_str(), msg.c_str()); + } } if (!channelNames.empty()) { std::string randomName = channelNames[urand(0, channelNames.size() - 1)]; - LOG_INFO("playerbots", "Chatting on channel: {}", randomName); if (Channel* chn = cMgr->GetChannel(randomName, bot)) { chn->Say(bot->GetGUID(), msg.c_str(), LANG_UNIVERSAL); + LOG_DEBUG("playerbots", "send grind {} - {}", bot->GetName().c_str(), msg.c_str()); } } diff --git a/src/strategy/actions/SuggestWhatToDoAction.h b/src/strategy/actions/SuggestWhatToDoAction.h index 58fafd59..2a942e34 100644 --- a/src/strategy/actions/SuggestWhatToDoAction.h +++ b/src/strategy/actions/SuggestWhatToDoAction.h @@ -18,7 +18,7 @@ class SuggestWhatToDoAction : public InventoryAction bool isUseful() override; protected: - typedef void (SuggestWhatToDoAction::*Suggestion)(); + using Suggestion = std::function; std::vector suggestions; void instance(); void specificQuest(); @@ -32,7 +32,7 @@ class SuggestWhatToDoAction : public InventoryAction private: static std::map instances; static std::map factions; - const int32_t& _dbc_locale; + const int32_t _dbc_locale; }; class SuggestTradeAction : public SuggestWhatToDoAction