Enable mount for random bots

This commit is contained in:
Yunfan Li
2024-08-03 00:02:34 +08:00
parent b0ab63238c
commit 54c06887d5
2 changed files with 26 additions and 19 deletions

View File

@@ -95,11 +95,11 @@ bool AttackAction::Attack(Unit* target, bool with_pet /*true*/)
return false; return false;
} }
if (bot->IsMounted() && bot->IsWithinLOSInMap(target)) // if (bot->IsMounted() && bot->IsWithinLOSInMap(target))
{ // {
WorldPacket emptyPacket; // WorldPacket emptyPacket;
bot->GetSession()->HandleCancelMountAuraOpcode(emptyPacket); // bot->GetSession()->HandleCancelMountAuraOpcode(emptyPacket);
} // }
ObjectGuid guid = target->GetGUID(); ObjectGuid guid = target->GetGUID();
bot->SetSelection(target->GetGUID()); bot->SetSelection(target->GetGUID());

View File

@@ -5,6 +5,7 @@
#include "CheckMountStateAction.h" #include "CheckMountStateAction.h"
#include "BattlegroundWS.h" #include "BattlegroundWS.h"
#include "Event.h" #include "Event.h"
#include "PlayerbotAI.h"
#include "Playerbots.h" #include "Playerbots.h"
#include "ServerFacade.h" #include "ServerFacade.h"
#include "SpellAuraEffects.h" #include "SpellAuraEffects.h"
@@ -20,18 +21,11 @@ bool CheckMountStateAction::Execute(Event event)
bool attackdistance = false; bool attackdistance = false;
bool chasedistance = false; bool chasedistance = false;
float attack_distance = 35.0f; float attack_distance = 35.0f;
if (PlayerbotAI::IsMelee(bot)) {
switch (bot->getClass()) attack_distance = 10.0f;
{ } else {
case CLASS_WARRIOR: attack_distance = 40.0f;
case CLASS_PALADIN:
attack_distance = 10.0f;
break;
case CLASS_ROGUE:
attack_distance = 40.0f;
break;
} }
if (enemy) if (enemy)
attack_distance /= 2; attack_distance /= 2;
@@ -41,6 +35,12 @@ bool CheckMountStateAction::Execute(Event event)
chasedistance = enemy && sServerFacade->IsDistanceGreaterThan(AI_VALUE2(float, "distance", "enemy player target"), 45.0f) && AI_VALUE2(bool, "moving", "enemy player target"); chasedistance = enemy && sServerFacade->IsDistanceGreaterThan(AI_VALUE2(float, "distance", "enemy player target"), 45.0f) && AI_VALUE2(bool, "moving", "enemy player target");
} }
if (bot->IsMounted() && attackdistance) {
WorldPacket emptyPacket;
bot->GetSession()->HandleCancelMountAuraOpcode(emptyPacket);
return true;
}
Player* master = GetMaster(); Player* master = GetMaster();
if (master != nullptr && !bot->InBattleground()) if (master != nullptr && !bot->InBattleground())
{ {
@@ -48,7 +48,7 @@ bool CheckMountStateAction::Execute(Event event)
return false; return false;
// bool farFromMaster = sServerFacade->GetDistance2d(bot, master) > sPlayerbotAIConfig->sightDistance; // bool farFromMaster = sServerFacade->GetDistance2d(bot, master) > sPlayerbotAIConfig->sightDistance;
if (master->IsMounted() && !bot->IsMounted() && noattackers) if (master->IsMounted() && !bot->IsMounted() && noattackers && !attackdistance && !bot->IsInCombat() && botAI->GetState() != BOT_STATE_COMBAT)
{ {
return Mount(); return Mount();
} }
@@ -72,6 +72,13 @@ bool CheckMountStateAction::Execute(Event event)
return false; return false;
} }
// For random bots
if (!bot->InBattleground() && !master) {
if (!bot->IsMounted() && noattackers && !attackdistance && !bot->IsInCombat()) {
return Mount();
}
}
if (bot->InBattleground() && !attackdistance && (noattackers || fartarget) && !bot->IsInCombat() && !bot->IsMounted()) if (bot->InBattleground() && !attackdistance && (noattackers || fartarget) && !bot->IsInCombat() && !bot->IsMounted())
{ {
if (bot->GetBattlegroundTypeId() == BATTLEGROUND_WS) if (bot->GetBattlegroundTypeId() == BATTLEGROUND_WS)
@@ -269,8 +276,8 @@ bool CheckMountStateAction::Mount()
if (index >= ids.size()) if (index >= ids.size())
continue; continue;
botAI->CastSpell(ids[index], bot);
return true; return botAI->CastSpell(ids[index], bot);;
} }
std::vector<Item*> items = AI_VALUE2(std::vector<Item*>, "inventory items", "mount"); std::vector<Item*> items = AI_VALUE2(std::vector<Item*>, "inventory items", "mount");