diff --git a/src/Ai/Base/Actions/ResetAiAction.cpp b/src/Ai/Base/Actions/ResetAiAction.cpp index 19017c916..290d0ae11 100644 --- a/src/Ai/Base/Actions/ResetAiAction.cpp +++ b/src/Ai/Base/Actions/ResetAiAction.cpp @@ -44,6 +44,21 @@ bool ResetAiAction::Execute(Event event) } } } + if (Player* master = botAI->GetMaster()) + { + Group* botGroup = bot->GetGroup(); + Group* masterGroup = master->GetGroup(); + if (botGroup && (!masterGroup || masterGroup != botGroup)) + botAI->SetMaster(nullptr); + } + if (sRandomPlayerbotMgr.IsRandomBot(bot) && !bot->InBattleground()) + { + if (bot->GetGroup() && (!botAI->GetMaster() || GET_PLAYERBOT_AI(botAI->GetMaster()))) + { + if (Player* newMaster = botAI->FindNewMaster()) + botAI->SetMaster(newMaster); + } + } PlayerbotRepository::instance().Reset(botAI); botAI->ResetStrategies(false); botAI->TellMaster("AI was reset to defaults"); diff --git a/src/Ai/Base/Strategy/WorldPacketHandlerStrategy.cpp b/src/Ai/Base/Strategy/WorldPacketHandlerStrategy.cpp index ad31c2c39..5f2d2532d 100644 --- a/src/Ai/Base/Strategy/WorldPacketHandlerStrategy.cpp +++ b/src/Ai/Base/Strategy/WorldPacketHandlerStrategy.cpp @@ -16,7 +16,7 @@ void WorldPacketHandlerStrategy::InitTriggers(std::vector& trigger triggers.push_back( new TriggerNode("uninvite guid", { NextAction("uninvite", relevance) })); triggers.push_back( - new TriggerNode("group set leader", { /*NextAction("leader", relevance),*/ })); + new TriggerNode("group set leader", { NextAction("reset botAI", relevance) })); triggers.push_back(new TriggerNode( "not enough money", { NextAction("tell not enough money", relevance) })); triggers.push_back( diff --git a/src/Bot/PlayerbotMgr.cpp b/src/Bot/PlayerbotMgr.cpp index 0634bbf78..a6d4a3b79 100644 --- a/src/Bot/PlayerbotMgr.cpp +++ b/src/Bot/PlayerbotMgr.cpp @@ -481,12 +481,6 @@ void PlayerbotHolder::OnBotLogin(Player* const bot) } Player* master = botAI->GetMaster(); - if (master) - { - ObjectGuid masterGuid = master->GetGUID(); - if (master->GetGroup() && !master->GetGroup()->IsLeader(masterGuid)) - master->GetGroup()->ChangeLeader(masterGuid); - } Group* group = bot->GetGroup(); if (group) diff --git a/src/Script/WorldThr/PlayerbotOperations.h b/src/Script/WorldThr/PlayerbotOperations.h index ee6443cd8..cc62e7127 100644 --- a/src/Script/WorldThr/PlayerbotOperations.h +++ b/src/Script/WorldThr/PlayerbotOperations.h @@ -242,6 +242,7 @@ public: } group->ChangeLeader(newLeader->GetGUID()); + group->SendUpdate(); LOG_DEBUG("playerbots", "GroupSetLeaderOperation: Changed leader to {}", newLeader->GetName()); return true; }