BG BotFill : correctif racine de l IA d objectifs - GUID 128 bits tronques en bool

Le registre des commandants (PlayerStatus/PlayerGUIDs) etait indexe uint64 ;
ObjectGuid (128 bits) s y convertissait via operator bool() -> tous les
joueurs partageaient la cle 1. Premier bot enrole, tous les autres rejetes
comme doublons, et les recherches inverses (GetBotBGAI) ne trouvaient
personne : les commandants ne pilotaient aucun bot. Conteneurs et signatures
retypes en ObjectGuid dans CommandBG et les 5 commandants (WS/AB/EY/AV/IC).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
SylvaniaCore deploy
2026-08-12 00:31:09 +02:00
parent f3b5667c5f
commit b40f842134
12 changed files with 67 additions and 58 deletions
+18 -9
View File
@@ -53,8 +53,9 @@ void CommandBG::Initialize()
void CommandBG::ReadyGame() void CommandBG::ReadyGame()
{ {
TC_LOG_ERROR("server.worldserver", "BGF-DBG: CommandBG::ReadyGame team=%u etat=%u", uint32(m_TeamID), uint32(m_BGGC));
m_BGGC = BGGameCommand::BGGS_Ready; m_BGGC = BGGameCommand::BGGS_Ready;
//for (uint64 guid : m_PlayerGUIDs) //for (ObjectGuid guid : m_PlayerGUIDs)
//{ //{
// if (UnitAI* pAI = GetPlayerAI(guid)) // if (UnitAI* pAI = GetPlayerAI(guid))
// { // {
@@ -66,8 +67,9 @@ void CommandBG::ReadyGame()
void CommandBG::StartGame() void CommandBG::StartGame()
{ {
TC_LOG_ERROR("server.worldserver", "BGF-DBG: CommandBG::StartGame team=%u etat=%u", uint32(m_TeamID), uint32(m_BGGC));
m_BGGC = BGGameCommand::BGGS_Start; m_BGGC = BGGameCommand::BGGS_Start;
//for (uint64 guid : m_PlayerGUIDs) //for (ObjectGuid guid : m_PlayerGUIDs)
//{ //{
// if (UnitAI* pAI = GetPlayerAI(guid)) // if (UnitAI* pAI = GetPlayerAI(guid))
// { // {
@@ -77,7 +79,7 @@ void CommandBG::StartGame()
//} //}
} }
void CommandBG::OnPlayerDead(uint64 guid) void CommandBG::OnPlayerDead(ObjectGuid guid)
{ {
PlayerStatus::iterator itGUID = m_PlayerGUIDs.find(guid); PlayerStatus::iterator itGUID = m_PlayerGUIDs.find(guid);
if (itGUID == m_PlayerGUIDs.end()) if (itGUID == m_PlayerGUIDs.end())
@@ -87,6 +89,7 @@ void CommandBG::OnPlayerDead(uint64 guid)
bool CommandBG::AddPlayerBot(Player* player, Battleground* pBG) bool CommandBG::AddPlayerBot(Player* player, Battleground* pBG)
{ {
TC_LOG_ERROR("server.worldserver", "BGF-DBG: CommandBG::AddPlayerBot %s team=%u etat=%u", player ? player->GetName().c_str() : "null", uint32(m_TeamID), uint32(m_BGGC));
if (!player || !pBG) if (!player || !pBG)
return false; return false;
if (m_PlayerGUIDs.find(player->GetGUID()) != m_PlayerGUIDs.end()) if (m_PlayerGUIDs.find(player->GetGUID()) != m_PlayerGUIDs.end())
@@ -142,6 +145,12 @@ void CommandBG::RemovePlayerBot(Player* player)
void CommandBG::Update(uint32 diff) void CommandBG::Update(uint32 diff)
{ {
static uint32 s_dbgCount = 0;
if (++s_dbgCount % 97 == 0)
TC_LOG_ERROR("server.worldserver", "BGF-DBG: CmdUpdate this=%p inst=%u team=%u etat=%u model=%u statut=%u bots=%u",
(void*)this, m_pBattleground ? m_pBattleground->GetInstanceID() : 0u,
uint32(m_TeamID), uint32(m_BGGC), uint32(g_CommandModelType),
m_pBattleground ? uint32(m_pBattleground->GetStatus()) : 999u, uint32(m_PlayerGUIDs.size()));
if (m_BGGC != BGGS_None) if (m_BGGC != BGGS_None)
{ {
if (m_BGGC == BGGS_Init) if (m_BGGC == BGGS_Init)
@@ -185,18 +194,18 @@ void CommandBG::Update(uint32 diff)
} }
} }
UnitAI* CommandBG::GetPlayerAI(uint64 guid) UnitAI* CommandBG::GetPlayerAI(ObjectGuid guid)
{ {
PlayerStatus::iterator itGUID = m_PlayerGUIDs.find(guid); PlayerStatus::iterator itGUID = m_PlayerGUIDs.find(guid);
if (itGUID == m_PlayerGUIDs.end()) if (itGUID == m_PlayerGUIDs.end())
return NULL; return NULL;
Player* player = ObjectAccessor::FindPlayer(ObjectGuid::Create<HighGuid::Player>(guid)); Player* player = ObjectAccessor::FindPlayer(guid);
if (!player) if (!player)
return NULL; return NULL;
return player->GetAI(); return player->GetAI();
} }
BotBGAI* CommandBG::GetBotBGAI(uint64 guid) BotBGAI* CommandBG::GetBotBGAI(ObjectGuid guid)
{ {
UnitAI* pAI = GetPlayerAI(guid); UnitAI* pAI = GetPlayerAI(guid);
if (!pAI) if (!pAI)
@@ -204,12 +213,12 @@ BotBGAI* CommandBG::GetBotBGAI(uint64 guid)
return (dynamic_cast<BotBGAI*>(pAI)); return (dynamic_cast<BotBGAI*>(pAI));
} }
Player* CommandBG::GetBGPlayer(uint64 guid) Player* CommandBG::GetBGPlayer(ObjectGuid guid)
{ {
PlayerStatus::iterator itGUID = m_PlayerGUIDs.find(guid); PlayerStatus::iterator itGUID = m_PlayerGUIDs.find(guid);
if (itGUID == m_PlayerGUIDs.end()) if (itGUID == m_PlayerGUIDs.end())
return NULL; return NULL;
return ObjectAccessor::FindPlayer(ObjectGuid::Create<HighGuid::Player>(guid)); return ObjectAccessor::FindPlayer(guid);
} }
Position CommandBG::GetNearTeleportPoint(Position& currentPos) Position CommandBG::GetNearTeleportPoint(Position& currentPos)
@@ -290,7 +299,7 @@ void CommandBG::ProcessGroupFocus(AIWaypoint* selfFocus, AIWaypoint* enemyFocus)
} }
} }
Position CommandBG::GetPositionByGuid(uint64 guid) Position CommandBG::GetPositionByGuid(ObjectGuid guid)
{ {
ObjectGuid oGuid = ObjectGuid::Create<HighGuid::Player>(guid); ObjectGuid oGuid = ObjectGuid::Create<HighGuid::Player>(guid);
if (oGuid.IsPlayer()) if (oGuid.IsPlayer())
+7 -7
View File
@@ -32,8 +32,8 @@ class BotBGAI;
typedef std::vector<uint32> AIWPEntrys; typedef std::vector<uint32> AIWPEntrys;
typedef std::vector<AIWaypoint*> BGKeyPoints; typedef std::vector<AIWaypoint*> BGKeyPoints;
typedef std::set<uint64> PlayerGUIDs; typedef std::set<ObjectGuid> PlayerGUIDs;
typedef std::map<uint64, bool> PlayerStatus; typedef std::map<ObjectGuid, bool> PlayerStatus;
enum CommandModel enum CommandModel
{ {
@@ -101,7 +101,7 @@ public:
virtual void Initialize(); virtual void Initialize();
virtual void ReadyGame(); virtual void ReadyGame();
virtual void StartGame(); virtual void StartGame();
virtual void OnPlayerDead(uint64 guid); virtual void OnPlayerDead(ObjectGuid guid);
virtual bool AddPlayerBot(Player* player, Battleground* pBG); virtual bool AddPlayerBot(Player* player, Battleground* pBG);
void RemovePlayerBot(Player* player); void RemovePlayerBot(Player* player);
virtual AIWaypoint* GetReadyPosition() { return NULL; } virtual AIWaypoint* GetReadyPosition() { return NULL; }
@@ -111,9 +111,9 @@ public:
virtual bool CanUpMount(Player* player) { return true; } virtual bool CanUpMount(Player* player) { return true; }
virtual bool CanDireFlee() { return true; } virtual bool CanDireFlee() { return true; }
UnitAI* GetPlayerAI(uint64 guid); UnitAI* GetPlayerAI(ObjectGuid guid);
BotBGAI* GetBotBGAI(uint64 guid); BotBGAI* GetBotBGAI(ObjectGuid guid);
Player* GetBGPlayer(uint64 guid); Player* GetBGPlayer(ObjectGuid guid);
Position GetNearTeleportPoint(Position& currentPos); Position GetNearTeleportPoint(Position& currentPos);
void UpdateBelongBattleground(Battleground* pBG) { m_pBattleground = pBG; } void UpdateBelongBattleground(Battleground* pBG) { m_pBattleground = pBG; }
void ClearPlayerGUIDs() { m_PlayerGUIDs.clear(); } void ClearPlayerGUIDs() { m_PlayerGUIDs.clear(); }
@@ -122,7 +122,7 @@ protected:
bool GroupAllPlayerReadyToWayPoint(AIWaypoint* pKeyPoint); bool GroupAllPlayerReadyToWayPoint(AIWaypoint* pKeyPoint);
void ProcessGroupFocus(AIWaypoint* selfFocus, AIWaypoint* enemyFocus); void ProcessGroupFocus(AIWaypoint* selfFocus, AIWaypoint* enemyFocus);
Position GetPositionByGuid(uint64 guid); Position GetPositionByGuid(ObjectGuid guid);
protected: protected:
BGGameCommand m_BGGC; BGGameCommand m_BGGC;
@@ -191,7 +191,7 @@ void CommandAB::ProcessABNodeRequirement(uint32 abNode, AIWaypoint* waypoint, Pl
int32 needCount = int32(enemyCount) + (flagIsOvvupied ? 2 : 4); int32 needCount = int32(enemyCount) + (flagIsOvvupied ? 2 : 4);
for (PlayerGUIDs::iterator itGuid = nodeNearPlayers.begin(); itGuid != nodeNearPlayers.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = nodeNearPlayers.begin(); itGuid != nodeNearPlayers.end(); itGuid++)
{ {
uint64 guid = *itGuid; ObjectGuid guid = *itGuid;
if (canStealFlag) if (canStealFlag)
{ {
if (!AcceptCommandByPlayerGUID(guid, pBGNode->GetGUID())) if (!AcceptCommandByPlayerGUID(guid, pBGNode->GetGUID()))
@@ -208,7 +208,7 @@ void CommandAB::ProcessABNodeRequirement(uint32 abNode, AIWaypoint* waypoint, Pl
while (needCount > 0 && !players.empty()) while (needCount > 0 && !players.empty())
{ {
float minDistance = 99999; float minDistance = 99999;
uint64 minGUID = 0; ObjectGuid minGUID;
for (PlayerGUIDs::iterator itGuid = players.begin(); itGuid != players.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = players.begin(); itGuid != players.end(); itGuid++)
{ {
Position pos = GetPositionByGuid(*itGuid); Position pos = GetPositionByGuid(*itGuid);
@@ -278,7 +278,7 @@ PlayerGUIDs CommandAB::GetABFlagRangePlayerByTeam(uint32 abNode, TeamId team)
return existPlayers; return existPlayers;
} }
bool CommandAB::AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, bool isFlag /* = false */) bool CommandAB::AcceptCommandByPlayerGUID(ObjectGuid guid, AIWaypoint* targetAIWP, bool isFlag /* = false */)
{ {
if (!targetAIWP) if (!targetAIWP)
return false; return false;
@@ -289,7 +289,7 @@ bool CommandAB::AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, b
return true; return true;
} }
bool CommandAB::AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool isFlag /* = false */) bool CommandAB::AcceptCommandByPlayerGUID(ObjectGuid guid, ObjectGuid flagGuid, bool isFlag /* = false */)
{ {
if (flagGuid.IsEmpty()) if (flagGuid.IsEmpty())
return false; return false;
@@ -300,7 +300,7 @@ bool CommandAB::AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool
return true; return true;
} }
void CommandAB::TryOccupiedABNode(uint64 guid) void CommandAB::TryOccupiedABNode(ObjectGuid guid)
{ {
Player* player = GetBGPlayer(guid); Player* player = GetBGPlayer(guid);
if (!player || player->HasUnitState(UNIT_STATE_CASTING) || player->IsInCombat()) if (!player || player->HasUnitState(UNIT_STATE_CASTING) || player->IsInCombat())
@@ -55,9 +55,9 @@ private:
void ProcessABNodeRequirement(uint32 abNode, AIWaypoint* waypoint, PlayerGUIDs& players); void ProcessABNodeRequirement(uint32 abNode, AIWaypoint* waypoint, PlayerGUIDs& players);
bool ABFlagIsOccupied(uint32 abNode, TeamId team); bool ABFlagIsOccupied(uint32 abNode, TeamId team);
PlayerGUIDs GetABFlagRangePlayerByTeam(uint32 abNode, TeamId team); PlayerGUIDs GetABFlagRangePlayerByTeam(uint32 abNode, TeamId team);
bool AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, bool isFlag = false); bool AcceptCommandByPlayerGUID(ObjectGuid guid, AIWaypoint* targetAIWP, bool isFlag = false);
bool AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool isFlag = false); bool AcceptCommandByPlayerGUID(ObjectGuid guid, ObjectGuid flagGuid, bool isFlag = false);
void TryOccupiedABNode(uint64 guid); void TryOccupiedABNode(ObjectGuid guid);
uint32 GetABNodeIndexByTeam(uint32 index, TeamId team); uint32 GetABNodeIndexByTeam(uint32 index, TeamId team);
private: private:
@@ -365,7 +365,7 @@ void CommandAV::ProcessRequirementByNodeType(BattlegroundAV* pBattlegroundAV, BG
uint32 canSteal = (enemyCount == 0) ? 3 : 0; uint32 canSteal = (enemyCount == 0) ? 3 : 0;
for (PlayerGUIDs::iterator itGuid = selfPlayers.begin(); itGuid != selfPlayers.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = selfPlayers.begin(); itGuid != selfPlayers.end(); itGuid++)
{ {
uint64 guid = *itGuid; ObjectGuid guid = *itGuid;
if (canSteal > 0) if (canSteal > 0)
{ {
if (!AcceptCommandByPlayerGUID(guid, waypoint, true)) if (!AcceptCommandByPlayerGUID(guid, waypoint, true))
@@ -386,7 +386,7 @@ void CommandAV::ProcessRequirementByNodeType(BattlegroundAV* pBattlegroundAV, BG
while (needCount > 0 && !allPlayers.empty() && pBGNode) while (needCount > 0 && !allPlayers.empty() && pBGNode)
{ {
float minDistance = 99999; float minDistance = 99999;
uint64 minGUID = 0; ObjectGuid minGUID;
for (PlayerGUIDs::iterator itGuid = allPlayers.begin(); itGuid != allPlayers.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = allPlayers.begin(); itGuid != allPlayers.end(); itGuid++)
{ {
Position pos = GetPositionByGuid(*itGuid); Position pos = GetPositionByGuid(*itGuid);
@@ -421,7 +421,7 @@ void CommandAV::ProcessRequirementByCaptain(BattlegroundAV* pBattlegroundAV, Tea
uint32 needCount = enemyCount + 10; uint32 needCount = enemyCount + 10;
for (PlayerGUIDs::iterator itGuid = selfPlayers.begin(); itGuid != selfPlayers.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = selfPlayers.begin(); itGuid != selfPlayers.end(); itGuid++)
{ {
uint64 guid = *itGuid; ObjectGuid guid = *itGuid;
if (!AcceptCommandByPlayerGUID(guid, waypoint)) if (!AcceptCommandByPlayerGUID(guid, waypoint))
continue; continue;
allPlayers.erase(guid); allPlayers.erase(guid);
@@ -432,7 +432,7 @@ void CommandAV::ProcessRequirementByCaptain(BattlegroundAV* pBattlegroundAV, Tea
while (needCount > 0 && !allPlayers.empty()) while (needCount > 0 && !allPlayers.empty())
{ {
float minDistance = 99999; float minDistance = 99999;
uint64 minGUID = 0; ObjectGuid minGUID;
for (PlayerGUIDs::iterator itGuid = allPlayers.begin(); itGuid != allPlayers.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = allPlayers.begin(); itGuid != allPlayers.end(); itGuid++)
{ {
Position pos = GetPositionByGuid(*itGuid); Position pos = GetPositionByGuid(*itGuid);
@@ -485,7 +485,7 @@ PlayerGUIDs CommandAV::GetAVCaptainRangePlayerByTeam(BattlegroundAV* pBattlegrou
return existPlayers; return existPlayers;
} }
bool CommandAV::AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, bool isFlag /* = false */) bool CommandAV::AcceptCommandByPlayerGUID(ObjectGuid guid, AIWaypoint* targetAIWP, bool isFlag /* = false */)
{ {
if (!targetAIWP) if (!targetAIWP)
return false; return false;
@@ -496,7 +496,7 @@ bool CommandAV::AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, b
return true; return true;
} }
bool CommandAV::AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool isFlag /* = false */) bool CommandAV::AcceptCommandByPlayerGUID(ObjectGuid guid, ObjectGuid flagGuid, bool isFlag /* = false */)
{ {
if (flagGuid.IsEmpty()) if (flagGuid.IsEmpty())
return false; return false;
@@ -507,7 +507,7 @@ bool CommandAV::AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool
return true; return true;
} }
void CommandAV::TryOccupiedAVNode(BattlegroundAV* pBattlegroundAV, uint64 guid) void CommandAV::TryOccupiedAVNode(BattlegroundAV* pBattlegroundAV, ObjectGuid guid)
{ {
Player* player = GetBGPlayer(guid); Player* player = GetBGPlayer(guid);
if (!player || player->HasUnitState(UNIT_STATE_CASTING) || player->IsInCombat()) if (!player || player->HasUnitState(UNIT_STATE_CASTING) || player->IsInCombat())
@@ -70,9 +70,9 @@ private:
void ProcessRequirementByCaptain(BattlegroundAV* pBattlegroundAV, TeamId team, AIWaypoint* waypoint, PlayerGUIDs& allPlayers, bool attOrDef); void ProcessRequirementByCaptain(BattlegroundAV* pBattlegroundAV, TeamId team, AIWaypoint* waypoint, PlayerGUIDs& allPlayers, bool attOrDef);
PlayerGUIDs GetAVFlagRangePlayerByTeam(BattlegroundAV* pBattlegroundAV, BG_AV_Nodes nodeType, TeamId team); PlayerGUIDs GetAVFlagRangePlayerByTeam(BattlegroundAV* pBattlegroundAV, BG_AV_Nodes nodeType, TeamId team);
PlayerGUIDs GetAVCaptainRangePlayerByTeam(BattlegroundAV* pBattlegroundAV, Creature const* pCaptain, TeamId team); PlayerGUIDs GetAVCaptainRangePlayerByTeam(BattlegroundAV* pBattlegroundAV, Creature const* pCaptain, TeamId team);
bool AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, bool isFlag = false); bool AcceptCommandByPlayerGUID(ObjectGuid guid, AIWaypoint* targetAIWP, bool isFlag = false);
bool AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool isFlag = false); bool AcceptCommandByPlayerGUID(ObjectGuid guid, ObjectGuid flagGuid, bool isFlag = false);
void TryOccupiedAVNode(BattlegroundAV* pBattlegroundAV, uint64 guid); void TryOccupiedAVNode(BattlegroundAV* pBattlegroundAV, ObjectGuid guid);
private: private:
int32 lastUpdateTick; int32 lastUpdateTick;
@@ -261,7 +261,7 @@ void CommandEY::ProcessEYPointRequirement(uint32 point, AIWaypoint* waypoint, Pl
int32 needCount = int32(enemyCount) + (flagIsOvvupied ? 1 : 3); int32 needCount = int32(enemyCount) + (flagIsOvvupied ? 1 : 3);
for (PlayerGUIDs::iterator itGuid = nodeNearPlayers.begin(); itGuid != nodeNearPlayers.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = nodeNearPlayers.begin(); itGuid != nodeNearPlayers.end(); itGuid++)
{ {
uint64 guid = *itGuid; ObjectGuid guid = *itGuid;
if (!AcceptCommandByPlayerGUID(guid, waypoint)) if (!AcceptCommandByPlayerGUID(guid, waypoint))
continue; continue;
players.erase(guid); players.erase(guid);
@@ -272,7 +272,7 @@ void CommandEY::ProcessEYPointRequirement(uint32 point, AIWaypoint* waypoint, Pl
while (needCount > 0 && !players.empty()) while (needCount > 0 && !players.empty())
{ {
float minDistance = 99999; float minDistance = 99999;
uint64 minGUID = 0; ObjectGuid minGUID;
for (PlayerGUIDs::iterator itGuid = players.begin(); itGuid != players.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = players.begin(); itGuid != players.end(); itGuid++)
{ {
Position pos = GetPositionByGuid(*itGuid); Position pos = GetPositionByGuid(*itGuid);
@@ -323,7 +323,7 @@ PlayerGUIDs CommandEY::GetEYPointRangePlayerByTeam(uint32 point, TeamId team)
return existPlayers; return existPlayers;
} }
bool CommandEY::AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, bool isFlag /* = false */) bool CommandEY::AcceptCommandByPlayerGUID(ObjectGuid guid, AIWaypoint* targetAIWP, bool isFlag /* = false */)
{ {
if (!targetAIWP) if (!targetAIWP)
return false; return false;
@@ -334,7 +334,7 @@ bool CommandEY::AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, b
return true; return true;
} }
bool CommandEY::AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool isFlag /* = false */) bool CommandEY::AcceptCommandByPlayerGUID(ObjectGuid guid, ObjectGuid flagGuid, bool isFlag /* = false */)
{ {
if (flagGuid.IsEmpty()) if (flagGuid.IsEmpty())
return false; return false;
@@ -361,7 +361,7 @@ uint32 CommandEY::GetEYPointIndexByTeam(uint32 index, TeamId team)
return (team == TEAM_ALLIANCE) ? EYBattlegroundPoints::MAGE_TOWER : EYBattlegroundPoints::BLOOD_ELF; return (team == TEAM_ALLIANCE) ? EYBattlegroundPoints::MAGE_TOWER : EYBattlegroundPoints::BLOOD_ELF;
} }
void CommandEY::TryPickStormFlag(uint64 guid) void CommandEY::TryPickStormFlag(ObjectGuid guid)
{ {
if (!m_pBattleground) if (!m_pBattleground)
return; return;
@@ -52,10 +52,10 @@ private:
void ProcessEYPointRequirement(uint32 point, AIWaypoint* waypoint, PlayerGUIDs& players); void ProcessEYPointRequirement(uint32 point, AIWaypoint* waypoint, PlayerGUIDs& players);
bool EYPointIsOccupied(uint32 point, TeamId team); bool EYPointIsOccupied(uint32 point, TeamId team);
PlayerGUIDs GetEYPointRangePlayerByTeam(uint32 point, TeamId team); PlayerGUIDs GetEYPointRangePlayerByTeam(uint32 point, TeamId team);
bool AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, bool isFlag = false); bool AcceptCommandByPlayerGUID(ObjectGuid guid, AIWaypoint* targetAIWP, bool isFlag = false);
bool AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool isFlag = false); bool AcceptCommandByPlayerGUID(ObjectGuid guid, ObjectGuid flagGuid, bool isFlag = false);
uint32 GetEYPointIndexByTeam(uint32 index, TeamId team); uint32 GetEYPointIndexByTeam(uint32 index, TeamId team);
void TryPickStormFlag(uint64 guid); void TryPickStormFlag(ObjectGuid guid);
void TryCaptureFlag(Player* player, AIWaypoint* pAIWP, uint32 point); void TryCaptureFlag(Player* player, AIWaypoint* pAIWP, uint32 point);
void ProcessFlagPicker(Player* player); void ProcessFlagPicker(Player* player);
uint32 GetCaptureFlagPoint(uint32 index, TeamId team); uint32 GetCaptureFlagPoint(uint32 index, TeamId team);
@@ -194,7 +194,7 @@ void CommandIC::ProcessICNodeRequirement(uint32 nodeType, AIWaypoint* waypoint,
int32 canStealFlag = (nearEnemyCount == 0 && !flagIsOcupied) ? 1 : 0; int32 canStealFlag = (nearEnemyCount == 0 && !flagIsOcupied) ? 1 : 0;
for (PlayerGUIDs::iterator itGuid = nodeNearPlayers.begin(); itGuid != nodeNearPlayers.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = nodeNearPlayers.begin(); itGuid != nodeNearPlayers.end(); itGuid++)
{ {
uint64 guid = *itGuid; ObjectGuid guid = *itGuid;
if (canStealFlag > 0) if (canStealFlag > 0)
{ {
if (!AcceptCommandByPlayerGUID(guid, pBGNode->GetGUID())) if (!AcceptCommandByPlayerGUID(guid, pBGNode->GetGUID()))
@@ -211,7 +211,7 @@ void CommandIC::ProcessICNodeRequirement(uint32 nodeType, AIWaypoint* waypoint,
while (needCount > 0 && !players.empty()) while (needCount > 0 && !players.empty())
{ {
float minDistance = 99999; float minDistance = 99999;
uint64 minGUID = 0; ObjectGuid minGUID;
for (PlayerGUIDs::iterator itGuid = players.begin(); itGuid != players.end(); itGuid++) for (PlayerGUIDs::iterator itGuid = players.begin(); itGuid != players.end(); itGuid++)
{ {
Position pos = GetPositionByGuid(*itGuid); Position pos = GetPositionByGuid(*itGuid);
@@ -258,7 +258,7 @@ PlayerGUIDs CommandIC::GetICFlagRangePlayerByTeam(uint32 nodeType, TeamId team,
return existPlayers; return existPlayers;
} }
bool CommandIC::AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, bool isFlag /* = false */) bool CommandIC::AcceptCommandByPlayerGUID(ObjectGuid guid, AIWaypoint* targetAIWP, bool isFlag /* = false */)
{ {
if (!targetAIWP) if (!targetAIWP)
return false; return false;
@@ -269,7 +269,7 @@ bool CommandIC::AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, b
return true; return true;
} }
bool CommandIC::AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool isFlag /* = false */) bool CommandIC::AcceptCommandByPlayerGUID(ObjectGuid guid, ObjectGuid flagGuid, bool isFlag /* = false */)
{ {
if (flagGuid.IsEmpty()) if (flagGuid.IsEmpty())
return false; return false;
@@ -280,7 +280,7 @@ bool CommandIC::AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool
return true; return true;
} }
void CommandIC::TryOccupiedICNode(uint64 guid) void CommandIC::TryOccupiedICNode(ObjectGuid guid)
{ {
Player* player = GetBGPlayer(guid); Player* player = GetBGPlayer(guid);
if (!player || player->HasUnitState(UNIT_STATE_CASTING))// || player->IsInCombat()) if (!player || player->HasUnitState(UNIT_STATE_CASTING))// || player->IsInCombat())
@@ -54,9 +54,9 @@ private:
private: private:
void ProcessICNodeRequirement(uint32 nodeType, AIWaypoint* waypoint, uint32 baseCount, PlayerGUIDs& players); void ProcessICNodeRequirement(uint32 nodeType, AIWaypoint* waypoint, uint32 baseCount, PlayerGUIDs& players);
PlayerGUIDs GetICFlagRangePlayerByTeam(uint32 nodeType, TeamId team, float range = 40); PlayerGUIDs GetICFlagRangePlayerByTeam(uint32 nodeType, TeamId team, float range = 40);
bool AcceptCommandByPlayerGUID(uint64 guid, AIWaypoint* targetAIWP, bool isFlag = false); bool AcceptCommandByPlayerGUID(ObjectGuid guid, AIWaypoint* targetAIWP, bool isFlag = false);
bool AcceptCommandByPlayerGUID(uint64 guid, ObjectGuid flagGuid, bool isFlag = false); bool AcceptCommandByPlayerGUID(ObjectGuid guid, ObjectGuid flagGuid, bool isFlag = false);
void TryOccupiedICNode(uint64 guid); void TryOccupiedICNode(ObjectGuid guid);
uint32 GetICNodeObjectType(uint32 index, TeamId team); uint32 GetICNodeObjectType(uint32 index, TeamId team);
private: private:
@@ -185,7 +185,7 @@ void CommandWS::ProcessRegulation()
} }
} }
void CommandWS::TryPickEnemyFlag(uint64 guid) void CommandWS::TryPickEnemyFlag(ObjectGuid guid)
{ {
if (!m_pBattleground) if (!m_pBattleground)
return; return;
@@ -225,7 +225,7 @@ void CommandWS::TryPickEnemyFlag(uint64 guid)
pObject->Use(player); pObject->Use(player);
} }
void CommandWS::TryPickSelfFlag(uint64 guid) void CommandWS::TryPickSelfFlag(ObjectGuid guid)
{ {
if (!m_pBattleground) if (!m_pBattleground)
return; return;
@@ -254,7 +254,7 @@ void CommandWS::TryPickSelfFlag(uint64 guid)
pObject->Use(player); pObject->Use(player);
} }
void CommandWS::TryCaptureFlag(uint64 guid) void CommandWS::TryCaptureFlag(ObjectGuid guid)
{ {
if (!m_pBattleground) if (!m_pBattleground)
return; return;
@@ -593,7 +593,7 @@ ObjectGuid CommandWS::GetBGFlagFromEnemy()
return ObjectGuid::Empty; return ObjectGuid::Empty;
} }
GameObject* CommandWS::SearchDropedFlag(uint64 guid, TeamId team) GameObject* CommandWS::SearchDropedFlag(ObjectGuid guid, TeamId team)
{ {
BotBGAI* pBotAI = GetBotBGAI(guid); BotBGAI* pBotAI = GetBotBGAI(guid);
if (!pBotAI) if (!pBotAI)
@@ -54,15 +54,15 @@ private:
void ProcessAllAttack(ObjectGuid& attackGuid); void ProcessAllAttack(ObjectGuid& attackGuid);
void ProcessAttackAndGuard(ObjectGuid attackGuid, ObjectGuid guaredGuid); void ProcessAttackAndGuard(ObjectGuid attackGuid, ObjectGuid guaredGuid);
void TryPickEnemyFlag(uint64 guid); void TryPickEnemyFlag(ObjectGuid guid);
void TryPickSelfFlag(uint64 guid); void TryPickSelfFlag(ObjectGuid guid);
void TryCaptureFlag(uint64 guid); void TryCaptureFlag(ObjectGuid guid);
ObjectGuid SelfBGFlagPicker(); ObjectGuid SelfBGFlagPicker();
ObjectGuid EnemyBGFlagPicker(); ObjectGuid EnemyBGFlagPicker();
ObjectGuid GetBGFlagFromSelf(); ObjectGuid GetBGFlagFromSelf();
ObjectGuid GetBGFlagFromEnemy(); ObjectGuid GetBGFlagFromEnemy();
GameObject* SearchDropedFlag(uint64 guid, TeamId team); GameObject* SearchDropedFlag(ObjectGuid guid, TeamId team);
private: private:
int32 lastUpdateTick; int32 lastUpdateTick;