diff --git a/src/Ai/Base/Actions/AcceptBattlegroundInvitationAction.cpp b/src/Ai/Base/Actions/AcceptBattlegroundInvitationAction.cpp index 96d61d4ba..91be09df9 100644 --- a/src/Ai/Base/Actions/AcceptBattlegroundInvitationAction.cpp +++ b/src/Ai/Base/Actions/AcceptBattlegroundInvitationAction.cpp @@ -6,9 +6,9 @@ #include "AcceptBattlegroundInvitationAction.h" #include "Event.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" -bool AcceptBgInvitationAction::Execute(Event event) +bool AcceptBgInvitationAction::Execute(Event /*event*/) { uint8 type = 0; // arenatype if arena uint8 unk2 = 0; // unk, can be 0x0 (may be if was invited?) and 0x1 @@ -18,9 +18,9 @@ bool AcceptBgInvitationAction::Execute(Event event) WorldPacket packet(CMSG_BATTLEFIELD_PORT, 20); packet << type << unk2 << (uint32)bgTypeId_ << unk << action; - // packet << bgTypeId_ << action; bot->GetSession()->HandleBattleFieldPortOpcode(packet); botAI->ResetStrategies(); + return true; } diff --git a/src/Ai/Base/Actions/AddLootAction.cpp b/src/Ai/Base/Actions/AddLootAction.cpp index 9e16ee2d3..40cda0e6e 100644 --- a/src/Ai/Base/Actions/AddLootAction.cpp +++ b/src/Ai/Base/Actions/AddLootAction.cpp @@ -22,7 +22,7 @@ bool AddLootAction::Execute(Event event) return AI_VALUE(LootObjectStack*, "available loot")->Add(guid); } -bool AddAllLootAction::Execute(Event event) +bool AddAllLootAction::Execute(Event /*event*/) { bool added = false; diff --git a/src/Ai/Base/Actions/AreaTriggerAction.cpp b/src/Ai/Base/Actions/AreaTriggerAction.cpp index c61008540..a3339ea5c 100644 --- a/src/Ai/Base/Actions/AreaTriggerAction.cpp +++ b/src/Ai/Base/Actions/AreaTriggerAction.cpp @@ -58,7 +58,7 @@ bool ReachAreaTriggerAction::Execute(Event event) return true; } -bool AreaTriggerAction::Execute(Event event) +bool AreaTriggerAction::Execute(Event /*event*/) { LastMovement& movement = context->GetValue("last area trigger")->Get(); diff --git a/src/Ai/Base/Actions/AutoMaintenanceOnLevelupAction.cpp b/src/Ai/Base/Actions/AutoMaintenanceOnLevelupAction.cpp index de8b5c6fd..72433c15f 100644 --- a/src/Ai/Base/Actions/AutoMaintenanceOnLevelupAction.cpp +++ b/src/Ai/Base/Actions/AutoMaintenanceOnLevelupAction.cpp @@ -1,19 +1,20 @@ #include "AutoMaintenanceOnLevelupAction.h" -#include "GuildMgr.h" +#include "SpellMgr.h" + #include "PlayerbotAIConfig.h" #include "PlayerbotFactory.h" -#include "Playerbots.h" #include "RandomPlayerbotMgr.h" #include "SharedDefines.h" #include "BroadcastHelper.h" -bool AutoMaintenanceOnLevelupAction::Execute(Event event) +bool AutoMaintenanceOnLevelupAction::Execute(Event /*event*/) { AutoPickTalents(); AutoLearnSpell(); AutoUpgradeEquip(); AutoTeleportForLevel(); + return true; } diff --git a/src/Ai/Base/Actions/BattleGroundJoinAction.cpp b/src/Ai/Base/Actions/BattleGroundJoinAction.cpp index 418b0f1fa..24b23cb9d 100644 --- a/src/Ai/Base/Actions/BattleGroundJoinAction.cpp +++ b/src/Ai/Base/Actions/BattleGroundJoinAction.cpp @@ -13,9 +13,8 @@ #include "PlayerbotAI.h" #include "Playerbots.h" #include "PositionValue.h" -#include "UpdateTime.h" -bool BGJoinAction::Execute(Event event) +bool BGJoinAction::Execute(Event /*event*/) { uint32 queueType = AI_VALUE(uint32, "bg type"); if (!queueType) // force join to fill bg @@ -653,7 +652,7 @@ bool FreeBGJoinAction::shouldJoinBg(BattlegroundQueueTypeId queueTypeId, Battleg return false; } -bool BGLeaveAction::Execute(Event event) +bool BGLeaveAction::Execute(Event /*event*/) { if (!(bot->InBattlegroundQueue() || bot->InBattleground())) return false; @@ -1064,7 +1063,7 @@ bool BGStatusAction::Execute(Event event) return true; } -bool BGStatusCheckAction::Execute(Event event) +bool BGStatusCheckAction::Execute(Event /*event*/) { if (bot->IsBeingTeleported()) return false; @@ -1080,7 +1079,7 @@ bool BGStatusCheckAction::Execute(Event event) bool BGStatusCheckAction::isUseful() { return bot->InBattlegroundQueue(); } -bool BGStrategyCheckAction::Execute(Event event) +bool BGStrategyCheckAction::Execute(Event /*event*/) { bool inside_bg = bot->InBattleground() && bot->GetBattleground(); ; diff --git a/src/Ai/Base/Actions/BattleGroundTactics.cpp b/src/Ai/Base/Actions/BattleGroundTactics.cpp index 2b198022e..78c156280 100644 --- a/src/Ai/Base/Actions/BattleGroundTactics.cpp +++ b/src/Ai/Base/Actions/BattleGroundTactics.cpp @@ -1557,7 +1557,7 @@ bool BGTactics::eyJumpDown() // // actual bg tactics below // -bool BGTactics::Execute(Event event) +bool BGTactics::Execute(Event /*event*/) { Battleground* bg = bot->GetBattleground(); if (!bg) @@ -4249,7 +4249,7 @@ bool BGTactics::IsLockedInsideKeep() return false; } -bool ArenaTactics::Execute(Event event) +bool ArenaTactics::Execute(Event /*event*/) { if (!bot->InBattleground()) { diff --git a/src/Ai/Base/Actions/BossAuraActions.cpp b/src/Ai/Base/Actions/BossAuraActions.cpp index d711559ee..90284db10 100644 --- a/src/Ai/Base/Actions/BossAuraActions.cpp +++ b/src/Ai/Base/Actions/BossAuraActions.cpp @@ -18,7 +18,7 @@ bool BossFireResistanceAction::isUseful() return bossFireResistanceTrigger.IsActive(); } -bool BossFireResistanceAction::Execute(Event event) +bool BossFireResistanceAction::Execute(Event /*event*/) { PaladinFireResistanceStrategy paladinFireResistanceStrategy(botAI); botAI->ChangeStrategy(ADD_STRATEGY_CHAR + paladinFireResistanceStrategy.getName(), BotState::BOT_STATE_COMBAT); @@ -32,7 +32,7 @@ bool BossFrostResistanceAction::isUseful() return bossFrostResistanceTrigger.IsActive(); } -bool BossFrostResistanceAction::Execute(Event event) +bool BossFrostResistanceAction::Execute(Event /*event*/) { PaladinFrostResistanceStrategy paladinFrostResistanceStrategy(botAI); botAI->ChangeStrategy(ADD_STRATEGY_CHAR + paladinFrostResistanceStrategy.getName(), BotState::BOT_STATE_COMBAT); @@ -46,7 +46,7 @@ bool BossNatureResistanceAction::isUseful() return bossNatureResistanceTrigger.IsActive(); } -bool BossNatureResistanceAction::Execute(Event event) +bool BossNatureResistanceAction::Execute(Event /*event*/) { HunterNatureResistanceStrategy hunterNatureResistanceStrategy(botAI); botAI->ChangeStrategy(ADD_STRATEGY_CHAR + hunterNatureResistanceStrategy.getName(), BotState::BOT_STATE_COMBAT); @@ -60,7 +60,7 @@ bool BossShadowResistanceAction::isUseful() return bossShadowResistanceTrigger.IsActive(); } -bool BossShadowResistanceAction::Execute(Event event) +bool BossShadowResistanceAction::Execute(Event /*event*/) { PaladinShadowResistanceStrategy paladinShadowResistanceStrategy(botAI); botAI->ChangeStrategy(ADD_STRATEGY_CHAR + paladinShadowResistanceStrategy.getName(), BotState::BOT_STATE_COMBAT); diff --git a/src/Ai/Base/Actions/BuyAction.cpp b/src/Ai/Base/Actions/BuyAction.cpp index 1e8ec7e5c..f0729f251 100644 --- a/src/Ai/Base/Actions/BuyAction.cpp +++ b/src/Ai/Base/Actions/BuyAction.cpp @@ -175,7 +175,7 @@ bool BuyAction::Execute(Event event) if (needMoneyFor == NeedMoneyFor::gear) { - botAI->DoSpecificAction("equip upgrades"); + botAI->DoSpecificAction("equip upgrades packet action"); } } } @@ -206,7 +206,7 @@ bool BuyAction::Execute(Event event) if (usage == ITEM_USAGE_REPLACE || usage == ITEM_USAGE_EQUIP || usage == ITEM_USAGE_BAD_EQUIP || usage == ITEM_USAGE_BROKEN_EQUIP) { - botAI->DoSpecificAction("equip upgrades"); + botAI->DoSpecificAction("equip upgrades packet action"); break; } } diff --git a/src/Ai/Base/Actions/CancelChannelAction.cpp b/src/Ai/Base/Actions/CancelChannelAction.cpp index 9f359f392..103aec4d8 100644 --- a/src/Ai/Base/Actions/CancelChannelAction.cpp +++ b/src/Ai/Base/Actions/CancelChannelAction.cpp @@ -7,12 +7,14 @@ #include "Player.h" #include "PlayerbotAI.h" -bool CancelChannelAction::Execute(Event event) +bool CancelChannelAction::Execute(Event /*event*/) { if (bot->GetCurrentSpell(CURRENT_CHANNELED_SPELL)) { bot->InterruptSpell(CURRENT_CHANNELED_SPELL); + return true; } + return false; } diff --git a/src/Ai/Base/Actions/CastCustomSpellAction.cpp b/src/Ai/Base/Actions/CastCustomSpellAction.cpp index 2ec7210d2..15c35ee43 100644 --- a/src/Ai/Base/Actions/CastCustomSpellAction.cpp +++ b/src/Ai/Base/Actions/CastCustomSpellAction.cpp @@ -334,7 +334,7 @@ bool CastRandomSpellAction::castSpell(uint32 spellId, WorldObject* wo) return botAI->CastSpell(spellId, wo->GetPositionX(), wo->GetPositionY(), wo->GetPositionZ()); } -bool DisEnchantRandomItemAction::Execute(Event event) +bool DisEnchantRandomItemAction::Execute(Event /*event*/) { std::vector items = AI_VALUE2(std::vector, "inventory items", "usage " + std::to_string(ITEM_USAGE_DISENCHANT)); diff --git a/src/Ai/Base/Actions/ChangeTalentsAction.cpp b/src/Ai/Base/Actions/ChangeTalentsAction.cpp index 9b57a201a..f04db2207 100644 --- a/src/Ai/Base/Actions/ChangeTalentsAction.cpp +++ b/src/Ai/Base/Actions/ChangeTalentsAction.cpp @@ -10,9 +10,9 @@ #include "Event.h" #include "PlayerbotAIConfig.h" #include "PlayerbotFactory.h" -#include "Playerbots.h" #include "AiObjectContext.h" #include "Log.h" +#include "RandomPlayerbotMgr.h" bool ChangeTalentsAction::Execute(Event event) { @@ -184,7 +184,7 @@ std::string ChangeTalentsAction::SpecApply(std::string param) // // } // // } -// return std::move(ret); +// return ret; // } // std::vector ChangeTalentsAction::getPremadePaths(TalentSpec* oldSpec) @@ -201,7 +201,7 @@ std::string ChangeTalentsAction::SpecApply(std::string param) // // } // // } -// return std::move(ret); +// return ret; // } // TalentPath* ChangeTalentsAction::getPremadePath(uint32 id) @@ -368,11 +368,11 @@ std::string ChangeTalentsAction::SpecApply(std::string param) // return nullptr; // } -bool AutoSetTalentsAction::Execute(Event event) +bool AutoSetTalentsAction::Execute(Event /*event*/) { std::ostringstream out; - if (!sPlayerbotAIConfig.autoPickTalents || !sRandomPlayerbotMgr.IsRandomBot(bot)) + if (!PlayerbotAIConfig::instance().autoPickTalents || !RandomPlayerbotMgr::instance().IsRandomBot(bot)) return false; if (bot->GetFreeTalentPoints() <= 0) diff --git a/src/Ai/Base/Actions/ChatShortcutActions.cpp b/src/Ai/Base/Actions/ChatShortcutActions.cpp index 85b141d4d..30563e8e6 100644 --- a/src/Ai/Base/Actions/ChatShortcutActions.cpp +++ b/src/Ai/Base/Actions/ChatShortcutActions.cpp @@ -42,7 +42,7 @@ void PositionsResetAction::SetStayPosition(float x, float y, float z) posMap["stay"] = pos; } -bool FollowChatShortcutAction::Execute(Event event) +bool FollowChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) @@ -116,7 +116,7 @@ bool FollowChatShortcutAction::Execute(Event event) return true; } -bool StayChatShortcutAction::Execute(Event event) +bool StayChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) @@ -133,7 +133,7 @@ bool StayChatShortcutAction::Execute(Event event) return true; } -bool MoveFromGroupChatShortcutAction::Execute(Event event) +bool MoveFromGroupChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) @@ -148,7 +148,7 @@ bool MoveFromGroupChatShortcutAction::Execute(Event event) return true; } -bool FleeChatShortcutAction::Execute(Event event) +bool FleeChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) @@ -171,7 +171,7 @@ bool FleeChatShortcutAction::Execute(Event event) return true; } -bool GoawayChatShortcutAction::Execute(Event event) +bool GoawayChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) @@ -188,7 +188,7 @@ bool GoawayChatShortcutAction::Execute(Event event) return true; } -bool GrindChatShortcutAction::Execute(Event event) +bool GrindChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) @@ -204,7 +204,7 @@ bool GrindChatShortcutAction::Execute(Event event) return true; } -bool TankAttackChatShortcutAction::Execute(Event event) +bool TankAttackChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) @@ -224,7 +224,7 @@ bool TankAttackChatShortcutAction::Execute(Event event) return true; } -bool MaxDpsChatShortcutAction::Execute(Event event) +bool MaxDpsChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) @@ -241,7 +241,7 @@ bool MaxDpsChatShortcutAction::Execute(Event event) return true; } -bool BwlChatShortcutAction::Execute(Event event) +bool BwlChatShortcutAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) diff --git a/src/Ai/Base/Actions/CheckMailAction.cpp b/src/Ai/Base/Actions/CheckMailAction.cpp index f9c70ff11..4a39909cd 100644 --- a/src/Ai/Base/Actions/CheckMailAction.cpp +++ b/src/Ai/Base/Actions/CheckMailAction.cpp @@ -7,9 +7,10 @@ #include "Event.h" #include "GuildTaskMgr.h" -#include "Playerbots.h" +#include "PlayerbotAIConfig.h" +#include "PlayerbotAI.h" -bool CheckMailAction::Execute(Event event) +bool CheckMailAction::Execute(Event /*event*/) { WorldPacket p; bot->GetSession()->HandleQueryNextMailTime(p); @@ -28,7 +29,7 @@ bool CheckMailAction::Execute(Event event) continue; uint32 account = owner->GetSession()->GetAccountId(); - if (sPlayerbotAIConfig.IsInRandomAccountList(account)) + if (PlayerbotAIConfig::instance().IsInRandomAccountList(account)) continue; ProcessMail(mail, owner, trans); diff --git a/src/Ai/Base/Actions/CheckMountStateAction.cpp b/src/Ai/Base/Actions/CheckMountStateAction.cpp index 5ab7cc0f9..0d7fe4321 100644 --- a/src/Ai/Base/Actions/CheckMountStateAction.cpp +++ b/src/Ai/Base/Actions/CheckMountStateAction.cpp @@ -55,63 +55,6 @@ MountData CollectMountData(const Player* bot) return data; } -bool CheckMountStateAction::isUseful() -{ - // Not useful when: - if (botAI->IsInVehicle() || bot->isDead() || bot->HasUnitState(UNIT_STATE_IN_FLIGHT) || - !bot->IsOutdoors() || bot->InArena()) - return false; - - master = GetMaster(); - - // Get shapeshift states, only applicable when there's a master - if (master) - { - botInShapeshiftForm = bot->GetShapeshiftForm(); - masterInShapeshiftForm = master->GetShapeshiftForm(); - } - - // Not useful when in combat and not currently mounted / travel formed - if ((bot->IsInCombat() || botAI->GetState() == BOT_STATE_COMBAT) && - !bot->IsMounted() && botInShapeshiftForm != FORM_TRAVEL && botInShapeshiftForm != FORM_FLIGHT && botInShapeshiftForm != FORM_FLIGHT_EPIC) - return false; - - // In addition to checking IsOutdoors, also check whether bot is clipping below floor slightly because that will - // cause bot to falsly indicate they are outdoors. This fixes bug where bot tries to mount indoors (which seems - // to mostly be an issue in tunnels of WSG and AV) - float posZ = bot->GetPositionZ(); - float groundLevel = bot->GetMapWaterOrGroundLevel(bot->GetPositionX(), bot->GetPositionY(), posZ); - if (!bot->IsMounted() && !bot->HasWaterWalkAura() && posZ < groundLevel) - return false; - - // Not useful when bot does not have mount strat and is not currently mounted - if (!GET_PLAYERBOT_AI(bot)->HasStrategy("mount", BOT_STATE_NON_COMBAT) && !bot->IsMounted()) - return false; - - // Not useful when level lower than minimum required - if (bot->GetLevel() < sPlayerbotAIConfig.useGroundMountAtMinLevel) - return false; - - // Allow mounting while transformed only if the form allows it - if (bot->HasAuraType(SPELL_AURA_TRANSFORM) && bot->IsInDisallowedMountForm()) - return false; - - // BG Logic - if (bot->InBattleground()) - { - // Do not use when carrying BG Flags - if (bot->HasAura(BG_WS_SPELL_WARSONG_FLAG) || bot->HasAura(BG_WS_SPELL_SILVERWING_FLAG) || bot->HasAura(BG_EY_NETHERSTORM_FLAG_SPELL)) - return false; - - // Only mount if BG starts in less than 30 sec - if (Battleground* bg = bot->GetBattleground()) - if (bg->GetStatus() == STATUS_WAIT_JOIN && bg->GetStartDelayTime() > BG_START_DELAY_30S) - return false; - } - - return true; -} - bool CheckMountStateAction::Execute(Event /*event*/) { // Determine if there are no attackers @@ -182,6 +125,63 @@ bool CheckMountStateAction::Execute(Event /*event*/) return false; } +bool CheckMountStateAction::isUseful() +{ + // Not useful when: + if (botAI->IsInVehicle() || bot->isDead() || bot->HasUnitState(UNIT_STATE_IN_FLIGHT) || + !bot->IsOutdoors() || bot->InArena()) + return false; + + master = GetMaster(); + + // Get shapeshift states, only applicable when there's a master + if (master) + { + botInShapeshiftForm = bot->GetShapeshiftForm(); + masterInShapeshiftForm = master->GetShapeshiftForm(); + } + + // Not useful when in combat and not currently mounted / travel formed + if ((bot->IsInCombat() || botAI->GetState() == BOT_STATE_COMBAT) && + !bot->IsMounted() && botInShapeshiftForm != FORM_TRAVEL && botInShapeshiftForm != FORM_FLIGHT && botInShapeshiftForm != FORM_FLIGHT_EPIC) + return false; + + // In addition to checking IsOutdoors, also check whether bot is clipping below floor slightly because that will + // cause bot to falsly indicate they are outdoors. This fixes bug where bot tries to mount indoors (which seems + // to mostly be an issue in tunnels of WSG and AV) + float posZ = bot->GetPositionZ(); + float groundLevel = bot->GetMapWaterOrGroundLevel(bot->GetPositionX(), bot->GetPositionY(), posZ); + if (!bot->IsMounted() && !bot->HasWaterWalkAura() && posZ < groundLevel) + return false; + + // Not useful when bot does not have mount strat and is not currently mounted + if (!GET_PLAYERBOT_AI(bot)->HasStrategy("mount", BOT_STATE_NON_COMBAT) && !bot->IsMounted()) + return false; + + // Not useful when level lower than minimum required + if (bot->GetLevel() < sPlayerbotAIConfig.useGroundMountAtMinLevel) + return false; + + // Allow mounting while transformed only if the form allows it + if (bot->HasAuraType(SPELL_AURA_TRANSFORM) && bot->IsInDisallowedMountForm()) + return false; + + // BG Logic + if (bot->InBattleground()) + { + // Do not use when carrying BG Flags + if (bot->HasAura(BG_WS_SPELL_WARSONG_FLAG) || bot->HasAura(BG_WS_SPELL_SILVERWING_FLAG) || bot->HasAura(BG_EY_NETHERSTORM_FLAG_SPELL)) + return false; + + // Only mount if BG starts in less than 30 sec + if (Battleground* bg = bot->GetBattleground()) + if (bg->GetStatus() == STATUS_WAIT_JOIN && bg->GetStartDelayTime() > BG_START_DELAY_30S) + return false; + } + + return true; +} + bool CheckMountStateAction::Mount() { // Remove current Shapeshift if need be diff --git a/src/Ai/Base/Actions/CheckValuesAction.cpp b/src/Ai/Base/Actions/CheckValuesAction.cpp index 7c64b7c51..dce66bd47 100644 --- a/src/Ai/Base/Actions/CheckValuesAction.cpp +++ b/src/Ai/Base/Actions/CheckValuesAction.cpp @@ -6,12 +6,15 @@ #include "CheckValuesAction.h" #include "Event.h" -#include "Playerbots.h" #include "ServerFacade.h" +#include "PlayerbotAI.h" +#include "TravelNode.h" +#include "AiObjectContext.h" + CheckValuesAction::CheckValuesAction(PlayerbotAI* botAI) : Action(botAI, "check values") {} -bool CheckValuesAction::Execute(Event event) +bool CheckValuesAction::Execute(Event /*event*/) { if (botAI->HasStrategy("debug move", BOT_STATE_NON_COMBAT)) { diff --git a/src/Ai/Base/Actions/ChooseRpgTargetAction.cpp b/src/Ai/Base/Actions/ChooseRpgTargetAction.cpp index 7d83c2b2b..e14d0cf3a 100644 --- a/src/Ai/Base/Actions/ChooseRpgTargetAction.cpp +++ b/src/Ai/Base/Actions/ChooseRpgTargetAction.cpp @@ -6,7 +6,6 @@ #include #include "ChooseRpgTargetAction.h" -#include "BattlegroundMgr.h" #include "BudgetValues.h" #include "ChatHelper.h" #include "Event.h" @@ -14,7 +13,6 @@ #include "GuildCreateActions.h" #include "Playerbots.h" #include "RpgSubActions.h" -#include "Util.h" #include "ServerFacade.h" #include "PossibleRpgTargetsValue.h" @@ -112,7 +110,7 @@ float ChooseRpgTargetAction::getMaxRelevance(GuidPosition guidP) return floor((maxRelevance - 1.0) * 1000.0f); } -bool ChooseRpgTargetAction::Execute(Event event) +bool ChooseRpgTargetAction::Execute(Event /*event*/) { //TravelTarget* travelTarget = AI_VALUE(TravelTarget*, "travel target"); //not used, line marked for removal. Player* master = botAI->GetMaster(); @@ -320,7 +318,7 @@ bool ChooseRpgTargetAction::isFollowValid(Player* bot, WorldPosition pos) inDungeon = true; if (realMaster && realMaster->IsInWorld() && realMaster->GetMap()->IsDungeon() && - (realMaster->GetMapId() != pos.getMapId())) + (realMaster->GetMapId() != pos.GetMapId())) return false; } @@ -334,7 +332,7 @@ bool ChooseRpgTargetAction::isFollowValid(Player* bot, WorldPosition pos) return false; Formation* formation = AI_VALUE(Formation*, "formation"); - float distance = groupLeader->GetDistance2d(pos.getX(), pos.getY()); + float distance = groupLeader->GetDistance2d(pos.GetPositionX(), pos.GetPositionY()); if (!botAI->HasActivePlayerMaster() && distance < 50.0f) { diff --git a/src/Ai/Base/Actions/ChooseTargetActions.cpp b/src/Ai/Base/Actions/ChooseTargetActions.cpp index 200094c90..f7538c03c 100644 --- a/src/Ai/Base/Actions/ChooseTargetActions.cpp +++ b/src/Ai/Base/Actions/ChooseTargetActions.cpp @@ -30,38 +30,7 @@ bool AttackEnemyFlagCarrierAction::isUseful() PlayerHasFlag::IsCapturingFlag(bot); } -bool AttackAnythingAction::isUseful() -{ - if (!bot || !botAI) // Prevents invalid accesses - return false; - - if (!botAI->AllowActivity(GRIND_ACTIVITY)) // Bot cannot be active - return false; - - if (botAI->HasStrategy("stay", BOT_STATE_NON_COMBAT)) - return false; - - if (bot->IsInCombat()) - return false; - - Unit* target = GetTarget(); - if (!target || !target->IsInWorld()) // Checks if the target is valid and in the world - return false; - - std::string const name = std::string(target->GetName()); - if (!name.empty() && - (name.find("Dummy") != std::string::npos || - name.find("Charge Target") != std::string::npos || - name.find("Melee Target") != std::string::npos || - name.find("Ranged Target") != std::string::npos)) - { - return false; - } - - return true; -} - -bool DropTargetAction::Execute(Event event) +bool DropTargetAction::Execute(Event /*event*/) { Unit* target = context->GetValue("current target")->Get(); if (target && target->isDead()) @@ -127,7 +96,38 @@ bool AttackAnythingAction::Execute(Event event) return result; } -bool AttackAnythingAction::isPossible() { return AttackAction::isPossible() && GetTarget(); } +bool AttackAnythingAction::isUseful() +{ + if (!bot || !botAI) // Prevents invalid accesses + return false; + + if (!botAI->AllowActivity(GRIND_ACTIVITY)) // Bot cannot be active + return false; + + if (botAI->HasStrategy("stay", BOT_STATE_NON_COMBAT)) + return false; + + if (bot->IsInCombat()) + return false; + + Unit* target = GetTarget(); + if (!target || !target->IsInWorld()) // Checks if the target is valid and in the world + return false; + + std::string const name = std::string(target->GetName()); + if (!name.empty() && + (name.find("Dummy") != std::string::npos || + name.find("Charge Target") != std::string::npos || + name.find("Melee Target") != std::string::npos || + name.find("Ranged Target") != std::string::npos)) + { + return false; + } + + return true; +} + +bool AttackAnythingAction::isPossible() { return GetTarget() && AttackAction::isPossible(); } bool DpsAssistAction::isUseful() { @@ -137,7 +137,7 @@ bool DpsAssistAction::isUseful() return true; } -bool AttackRtiTargetAction::Execute(Event event) +bool AttackRtiTargetAction::Execute(Event /*event*/) { Unit* rtiTarget = AI_VALUE(Unit*, "rti target"); diff --git a/src/Ai/Base/Actions/ChooseTravelTargetAction.cpp b/src/Ai/Base/Actions/ChooseTravelTargetAction.cpp index 0f75a3079..695f0d311 100644 --- a/src/Ai/Base/Actions/ChooseTravelTargetAction.cpp +++ b/src/Ai/Base/Actions/ChooseTravelTargetAction.cpp @@ -9,7 +9,7 @@ #include "LootObjectStack.h" #include "Playerbots.h" -bool ChooseTravelTargetAction::Execute(Event event) +bool ChooseTravelTargetAction::Execute(Event /*event*/) { // Player* requester = event.getOwner() ? event.getOwner() : GetMaster(); //not used, line marked for removal. diff --git a/src/Ai/Base/Actions/DebugAction.cpp b/src/Ai/Base/Actions/DebugAction.cpp index 578ece17c..378cdab79 100644 --- a/src/Ai/Base/Actions/DebugAction.cpp +++ b/src/Ai/Base/Actions/DebugAction.cpp @@ -7,7 +7,11 @@ #include "ChooseTravelTargetAction.h" #include "MapMgr.h" -#include "Playerbots.h" +#include "TravelMgr.h" +#include "Player.h" +#include "PlayerbotAI.h" +#include "SpellMgr.h" +#include "Spell.h" bool DebugAction::Execute(Event event) { @@ -28,8 +32,8 @@ bool DebugAction::Execute(Event event) uint32 areaId = 0; uint32 zoneId = 0; - sMapMgr->GetZoneAndAreaId(PHASEMASK_NORMAL, zoneId, areaId, pos.getMapId(), pos.getX(), pos.getY(), - pos.getZ()); + sMapMgr->GetZoneAndAreaId(PHASEMASK_NORMAL, zoneId, areaId, pos.GetMapId(), pos.GetPositionX(), pos.GetPositionY(), + pos.GetPositionZ()); std::ostringstream out; out << zoneId << "," << areaId << "," << (pos.getAreaName().empty() ? "none" : pos.getAreaName()) << ","; @@ -298,7 +302,7 @@ bool DebugAction::Execute(Event event) for (auto p : ppath) { Creature* wpCreature = - bot->SummonCreature(1, p.getX(), p.getY(), p.getZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 20000.0f); + bot->SummonCreature(1, p.GetPositionX(), p.GetPositionY(), p.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 20000.0f); // addAura(246, wpCreature); units.push_back(wpCreature->GetGUID()); @@ -325,11 +329,11 @@ bool DebugAction::Execute(Event event) WorldPosition botPos(bot); WorldPosition botPos1 = botPos; - botPos.setX(botPos.getX() + cos(ang) * dist); - botPos.setY(botPos.getY() + sin(ang) * dist); + botPos.setX(botPos.GetPositionX() + cos(ang) * dist); + botPos.setY(botPos.GetPositionY() + sin(ang) * dist); botPos.setZ(botPos.getHeight() + 2); - Creature* wpCreature = bot->SummonCreature(2334, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + Creature* wpCreature = bot->SummonCreature(2334, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); FakeSpell(spellEffect, wpCreature, wpCreature, prev->GetGUID(), {}, {}, botPos, botPos); @@ -352,11 +356,11 @@ bool DebugAction::Execute(Event event) WorldPosition botPos(bot); WorldPosition botPos1 = botPos; - botPos.setX(botPos.getX() + cos(ang) * dist); - botPos.setY(botPos.getY() + sin(ang) * dist); + botPos.setX(botPos.GetPositionX() + cos(ang) * dist); + botPos.setY(botPos.GetPositionY() + sin(ang) * dist); botPos.setZ(botPos.getHeight() + 2); - Creature* wpCreature = bot->SummonCreature(2334, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + Creature* wpCreature = bot->SummonCreature(2334, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); if (wpCreature) @@ -383,11 +387,11 @@ bool DebugAction::Execute(Event event) WorldPosition botPos(bot); WorldPosition botPos1 = botPos; - botPos.setX(botPos.getX() + cos(ang) * dist); - botPos.setY(botPos.getY() + sin(ang) * dist); + botPos.setX(botPos.GetPositionX() + cos(ang) * dist); + botPos.setY(botPos.GetPositionY() + sin(ang) * dist); botPos.setZ(botPos.getHeight() + 2); - Creature* wpCreature = bot->SummonCreature(2334, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + Creature* wpCreature = bot->SummonCreature(2334, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 5000.0f + i * 100.0f); wpCreature->SetObjectScale(0.5f); @@ -411,11 +415,11 @@ bool DebugAction::Execute(Event event) WorldPosition botPos(bot); - botPos.setX(botPos.getX() + cos(ang) * dist); - botPos.setY(botPos.getY() + sin(ang) * dist); + botPos.setX(botPos.GetPositionX() + cos(ang) * dist); + botPos.setY(botPos.GetPositionY() + sin(ang) * dist); botPos.setZ(botPos.getHeight() + 2); - Creature* wpCreature = bot->SummonCreature(2334, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + Creature* wpCreature = bot->SummonCreature(2334, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); units.push_back(wpCreature->GetGUID()); @@ -480,13 +484,13 @@ bool DebugAction::Execute(Event event) uint32 effect = dx + dy * 10 + spellEffect * 100; WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); Creature* wpCreature = - bot->SummonCreature((dy == 0 && (dx == 0 || dx == 2)) ? 6 : 2, botPos.getX(), botPos.getY(), - botPos.getZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); + bot->SummonCreature((dy == 0 && (dx == 0 || dx == 2)) ? 6 : 2, botPos.GetPositionX(), botPos.GetPositionY(), + botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); if (wpCreature) { @@ -512,11 +516,11 @@ bool DebugAction::Execute(Event event) uint32 effect = dx + dy * 10 + spellEffect * 100; WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); - Creature* wpCreature = bot->SummonCreature(effect, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + Creature* wpCreature = bot->SummonCreature(effect, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); } } @@ -532,8 +536,8 @@ bool DebugAction::Execute(Event event) uint32 effect = dx + dy * 10 + spellEffect * 100; WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); FakeSpell(effect, bot, nullptr, ObjectGuid::Empty, {}, {}, botPos, botPos, true); @@ -552,11 +556,11 @@ bool DebugAction::Execute(Event event) uint32 effect = dx + dy * 10 + spellEffect * 100; WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); - Creature* wpCreature = bot->SummonCreature(2334, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + Creature* wpCreature = bot->SummonCreature(2334, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); if (wpCreature) @@ -568,7 +572,7 @@ bool DebugAction::Execute(Event event) // wpCreature->SendMessageToSet(&data, true); datMap.push_back(data); - // wpCreature->MonsterMoveWithSpeed(botPos.getX(), botPos.getY() + 80, botPos.getZ(), 8.0f, true, + // wpCreature->MonsterMoveWithSpeed(botPos.GetPositionX(), botPos.GetPositionY() + 80, botPos.GetPositionZ(), 8.0f, true, // true); } } @@ -600,13 +604,13 @@ bool DebugAction::Execute(Event event) uint32 effect = dx + dy * 10 + spellEffect * 100; WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); Creature* wpCreature = - bot->SummonCreature((dy == 0 && (dx == 0 || dx == 2)) ? 6 : 2, botPos.getX(), botPos.getY(), - botPos.getZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); + bot->SummonCreature((dy == 0 && (dx == 0 || dx == 2)) ? 6 : 2, botPos.GetPositionX(), botPos.GetPositionY(), + botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); if (wpCreature) { @@ -646,12 +650,12 @@ bool DebugAction::Execute(Event event) uint32 effect = dx + dy * 10 + spellEffect * 100; WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); - wpCreature = bot->SummonCreature((dy == 0 && (dx == 0 || dx == 2)) ? 6 : 2, botPos.getX(), - botPos.getY(), botPos.getZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); + wpCreature = bot->SummonCreature((dy == 0 && (dx == 0 || dx == 2)) ? 6 : 2, botPos.GetPositionX(), + botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); if (wpCreature && lCreature) { @@ -675,11 +679,11 @@ bool DebugAction::Execute(Event event) uint32 effect = dx + dy * 10 + spellEffect * 100; WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); - wpCreature = bot->SummonCreature(2334, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + wpCreature = bot->SummonCreature(2334, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); if (wpCreature) @@ -708,11 +712,11 @@ bool DebugAction::Execute(Event event) { WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); - Creature* wpCreature = bot->SummonCreature(2334, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + Creature* wpCreature = bot->SummonCreature(2334, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); all_targets.push_back(wpCreature->GetGUID()); @@ -788,11 +792,11 @@ bool DebugAction::Execute(Event event) { WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); - Creature* wpCreature = bot->SummonCreature(2334, botPos.getX(), botPos.getY(), botPos.getZ(), 0, + Creature* wpCreature = bot->SummonCreature(2334, botPos.GetPositionX(), botPos.GetPositionY(), botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); all_targets.push_back(wpCreature->GetGUID()); @@ -868,13 +872,13 @@ bool DebugAction::Execute(Event event) uint32 effect = dx + dy * 10 + soundEffects * 100; WorldPosition botPos(bot); - botPos.setX(botPos.getX() + (dx - 5) * 5); - botPos.setY(botPos.getY() + (dy - 5) * 5); + botPos.setX(botPos.GetPositionX() + (dx - 5) * 5); + botPos.setY(botPos.GetPositionY() + (dy - 5) * 5); botPos.setZ(botPos.getHeight()); Creature* wpCreature = - bot->SummonCreature((dy == 0 && (dx == 0 || dx == 2)) ? 6 : 2, botPos.getX(), botPos.getY(), - botPos.getZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); + bot->SummonCreature((dy == 0 && (dx == 0 || dx == 2)) ? 6 : 2, botPos.GetPositionX(), botPos.GetPositionY(), + botPos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000.0f); wpCreature->PlayDistanceSound(effect); } @@ -964,7 +968,7 @@ void DebugAction::FakeSpell(uint32 spellId, Unit* truecaster, Unit* caster, Obje m_targets.SetDst(dest); if ((spellInfo && spellInfo->Targets & TARGET_FLAG_SOURCE_LOCATION) || forceDest) - m_targets.SetSrc(source.getX(), source.getY(), source.getZ()); + m_targets.SetSrc(source.GetPositionX(), source.GetPositionY(), source.GetPositionZ()); if (!forceDest && target) if (!spellInfo || diff --git a/src/Ai/Base/Actions/DelayAction.cpp b/src/Ai/Base/Actions/DelayAction.cpp index b47b6898d..3daf9ea25 100644 --- a/src/Ai/Base/Actions/DelayAction.cpp +++ b/src/Ai/Base/Actions/DelayAction.cpp @@ -6,15 +6,19 @@ #include "DelayAction.h" #include "Event.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" +#include "PlayerbotAIConfig.h" -bool DelayAction::Execute(Event event) +bool DelayAction::Execute(Event /*event*/) { - uint32 delay = sPlayerbotAIConfig.passiveDelay + sPlayerbotAIConfig.globalCoolDown; + const uint32 delay = PlayerbotAIConfig::instance().passiveDelay + PlayerbotAIConfig::instance().globalCoolDown; botAI->SetNextCheckDelay(delay); return true; } -bool DelayAction::isUseful() { return !botAI->AllowActivity(ALL_ACTIVITY); } +bool DelayAction::isUseful() +{ + return !botAI->AllowActivity(ALL_ACTIVITY); +} diff --git a/src/Ai/Base/Actions/DestroyItemAction.cpp b/src/Ai/Base/Actions/DestroyItemAction.cpp index 0fce4ad70..ffcf0fdcf 100644 --- a/src/Ai/Base/Actions/DestroyItemAction.cpp +++ b/src/Ai/Base/Actions/DestroyItemAction.cpp @@ -39,7 +39,7 @@ void DestroyItemAction::DestroyItem(FindItemVisitor* visitor) bool SmartDestroyItemAction::isUseful() { return !botAI->HasActivePlayerMaster(); } -bool SmartDestroyItemAction::Execute(Event event) +bool SmartDestroyItemAction::Execute(Event /*event*/) { uint8 bagSpace = AI_VALUE(uint8, "bag space"); diff --git a/src/Ai/Base/Actions/EmoteAction.cpp b/src/Ai/Base/Actions/EmoteAction.cpp index 197cc436b..dd6957cc8 100644 --- a/src/Ai/Base/Actions/EmoteAction.cpp +++ b/src/Ai/Base/Actions/EmoteAction.cpp @@ -6,7 +6,6 @@ #include "EmoteAction.h" #include "Event.h" -#include "PlayerbotTextMgr.h" #include "Playerbots.h" #include "ServerFacade.h" @@ -787,7 +786,7 @@ bool EmoteAction::isUseful() return time(nullptr) >= lastEmote; } -bool TalkAction::Execute(Event event) +bool TalkAction::Execute(Event /*event*/) { Unit* target = botAI->GetUnit(AI_VALUE(ObjectGuid, "talk target")); if (!target) diff --git a/src/Ai/Base/Actions/EquipAction.cpp b/src/Ai/Base/Actions/EquipAction.cpp index a8b262692..d6900391f 100644 --- a/src/Ai/Base/Actions/EquipAction.cpp +++ b/src/Ai/Base/Actions/EquipAction.cpp @@ -364,12 +364,12 @@ ItemIds EquipAction::SelectInventoryItemsToEquip() return items; } -bool EquipUpgradesTriggeredAction::Execute(Event event) +bool EquipUpgradesPacketAction::Execute(Event event) { if (!sPlayerbotAIConfig.autoEquipUpgradeLoot && !sRandomPlayerbotMgr.IsRandomBot(bot)) return false; - - if (event.GetSource() == "trade status") + std::string const source = event.GetSource(); + if (source == "trade status") { WorldPacket p(event.getPacket()); p.rpos(0); @@ -380,7 +380,7 @@ bool EquipUpgradesTriggeredAction::Execute(Event event) return false; } - if (event.GetSource() == "item push result") + else if (source == "item push result") { WorldPacket p(event.getPacket()); p.rpos(0); @@ -406,7 +406,7 @@ bool EquipUpgradesTriggeredAction::Execute(Event event) return true; } -bool EquipUpgradeAction::Execute(Event event) +bool EquipUpgradeAction::Execute(Event /*event*/) { ItemIds items = SelectInventoryItemsToEquip(); EquipItems(items); diff --git a/src/Ai/Base/Actions/EquipAction.h b/src/Ai/Base/Actions/EquipAction.h index 4f84f942b..bf609d861 100644 --- a/src/Ai/Base/Actions/EquipAction.h +++ b/src/Ai/Base/Actions/EquipAction.h @@ -29,10 +29,10 @@ private: void EquipItem(Item* item); }; -class EquipUpgradesTriggeredAction : public EquipAction +class EquipUpgradesPacketAction : public EquipAction { public: - explicit EquipUpgradesTriggeredAction(PlayerbotAI* botAI, std::string const name = "equip upgrades") : EquipAction(botAI, name) {} + explicit EquipUpgradesPacketAction(PlayerbotAI* botAI, std::string const name = "equip upgrades packet action") : EquipAction(botAI, name) {} bool Execute(Event event) override; }; diff --git a/src/Ai/Base/Actions/FishingAction.cpp b/src/Ai/Base/Actions/FishingAction.cpp index 0fc09c3bc..a6057cabf 100644 --- a/src/Ai/Base/Actions/FishingAction.cpp +++ b/src/Ai/Base/Actions/FishingAction.cpp @@ -246,7 +246,7 @@ WorldPosition FindFishingHole(PlayerbotAI* botAI) return WorldPosition(); } -bool MoveNearWaterAction::Execute(Event event) +bool MoveNearWaterAction::Execute(Event /*event*/) { WorldPosition landSpot = AI_VALUE(WorldPosition, "fishing spot"); if (landSpot.IsValid()) @@ -336,7 +336,7 @@ bool MoveNearWaterAction::isPossible() return false; } -bool EquipFishingPoleAction::Execute(Event event) +bool EquipFishingPoleAction::Execute(Event /*event*/) { if (!_pole) return false; @@ -463,7 +463,7 @@ bool UseBobberAction::isUseful() return AI_VALUE(bool, "can use fishing bobber"); } -bool UseBobberAction::Execute(Event event) +bool UseBobberAction::Execute(Event /*event*/) { GuidVector gos = AI_VALUE(GuidVector, "nearest game objects no los"); for (auto const& guid : gos) @@ -485,7 +485,7 @@ bool UseBobberAction::Execute(Event event) return false; } -bool EndMasterFishingAction::Execute(Event event) +bool EndMasterFishingAction::Execute(Event /*event*/) { botAI->ChangeStrategy("-master fishing", BOT_STATE_NON_COMBAT); return true; @@ -503,7 +503,7 @@ bool EndMasterFishingAction::isUseful() return !nearWater.IsValid(); } -bool RemoveBobberStrategyAction::Execute(Event event) +bool RemoveBobberStrategyAction::Execute(Event /*event*/) { botAI->ChangeStrategy("-use bobber", BOT_STATE_NON_COMBAT); return true; diff --git a/src/Ai/Base/Actions/FishingAction.h b/src/Ai/Base/Actions/FishingAction.h index 407825ed0..35a7ab6fe 100644 --- a/src/Ai/Base/Actions/FishingAction.h +++ b/src/Ai/Base/Actions/FishingAction.h @@ -7,22 +7,24 @@ #define _PLAYERBOT_FISHINGACTION_H #include "Action.h" -#include "MovementActions.h" #include "Event.h" +#include "MovementActions.h" #include "Playerbots.h" extern const uint32 FISHING_SPELL; extern const uint32 FISHING_POLE; extern const uint32 FISHING_BOBBER; -WorldPosition FindWaterRadial(Player* bot, float x, float y, float z, Map* map, uint32 phaseMask, float minDistance, float maxDistance, float increment, bool checkLOS=false, int numDirections = 16); +WorldPosition FindWaterRadial(Player* bot, float x, float y, float z, Map* map, uint32 phaseMask, float minDistance, + float maxDistance, float increment, bool checkLOS = false, int numDirections = 16); class PlayerbotAI; class FishingAction : public Action { public: - FishingAction(PlayerbotAI* botAI) : Action(botAI, "go fishing"){} + FishingAction(PlayerbotAI* botAI) : Action(botAI, "go fishing") {} + bool Execute(Event event) override; bool isUseful() override; }; @@ -31,8 +33,10 @@ class EquipFishingPoleAction : public Action { public: EquipFishingPoleAction(PlayerbotAI* botAI) : Action(botAI, "equip fishing pole") {} + bool Execute(Event event) override; bool isUseful() override; + private: Item* _pole = nullptr; }; @@ -40,7 +44,8 @@ private: class MoveNearWaterAction : public MovementAction { public: - MoveNearWaterAction(PlayerbotAI* botAI): MovementAction(botAI, "move near water") {} + MoveNearWaterAction(PlayerbotAI* botAI) : MovementAction(botAI, "move near water") {} + bool Execute(Event event) override; bool isUseful() override; bool isPossible() override; @@ -50,6 +55,7 @@ class UseBobberAction : public Action { public: UseBobberAction(PlayerbotAI* botAI) : Action(botAI, "use fishing bobber") {} + bool Execute(Event event) override; bool isUseful() override; }; @@ -58,6 +64,7 @@ class EndMasterFishingAction : public Action { public: EndMasterFishingAction(PlayerbotAI* botAI) : Action(botAI, "end master fishing") {} + bool Execute(Event event) override; bool isUseful() override; }; @@ -66,6 +73,8 @@ class RemoveBobberStrategyAction : public Action { public: RemoveBobberStrategyAction(PlayerbotAI* botAI) : Action(botAI, "remove bobber strategy") {} + bool Execute(Event event) override; }; + #endif diff --git a/src/Ai/Base/Actions/FollowActions.cpp b/src/Ai/Base/Actions/FollowActions.cpp index b9623233a..c27de01ff 100644 --- a/src/Ai/Base/Actions/FollowActions.cpp +++ b/src/Ai/Base/Actions/FollowActions.cpp @@ -5,17 +5,14 @@ #include "FollowActions.h" -#include - #include "Event.h" #include "Formations.h" #include "LastMovementValue.h" #include "PlayerbotAI.h" #include "Playerbots.h" #include "ServerFacade.h" -#include "SharedDefines.h" -bool FollowAction::Execute(Event event) +bool FollowAction::Execute(Event /*event*/) { Formation* formation = AI_VALUE(Formation*, "formation"); std::string const target = formation->GetTargetName(); @@ -116,7 +113,7 @@ bool FollowAction::CanDeadFollow(Unit* target) return true; } -bool FleeToGroupLeaderAction::Execute(Event event) +bool FleeToGroupLeaderAction::Execute(Event /*event*/) { Unit* fTarget = AI_VALUE(Unit*, "group leader"); bool canFollow = Follow(fTarget); diff --git a/src/Ai/Base/Actions/GenericActions.cpp b/src/Ai/Base/Actions/GenericActions.cpp index 453834c09..35fa51b31 100644 --- a/src/Ai/Base/Actions/GenericActions.cpp +++ b/src/Ai/Base/Actions/GenericActions.cpp @@ -11,8 +11,6 @@ #include "CreatureAI.h" #include "Playerbots.h" #include "CharmInfo.h" -#include "SharedDefines.h" -#include "ObjectGuid.h" #include "SpellMgr.h" #include "SpellInfo.h" #include @@ -54,7 +52,7 @@ bool MeleeAction::isUseful() return true; } -bool TogglePetSpellAutoCastAction::Execute(Event event) +bool TogglePetSpellAutoCastAction::Execute(Event /*event*/) { Pet* pet = bot->GetPet(); if (!pet) @@ -119,7 +117,7 @@ bool TogglePetSpellAutoCastAction::Execute(Event event) return toggled; } -bool PetAttackAction::Execute(Event event) +bool PetAttackAction::Execute(Event /*event*/) { Guardian* pet = bot->GetGuardianPet(); if (!pet) diff --git a/src/Ai/Base/Actions/GenericSpellActions.cpp b/src/Ai/Base/Actions/GenericSpellActions.cpp index 819816f94..148bc6d3c 100644 --- a/src/Ai/Base/Actions/GenericSpellActions.cpp +++ b/src/Ai/Base/Actions/GenericSpellActions.cpp @@ -17,19 +17,17 @@ #include "WorldPacket.h" #include "Group.h" #include "Chat.h" -#include "Language.h" #include "GenericBuffUtils.h" #include "PlayerbotAI.h" using ai::buff::MakeAuraQualifierForBuff; -using ai::buff::UpgradeToGroupIfAppropriate; CastSpellAction::CastSpellAction(PlayerbotAI* botAI, std::string const spell) : Action(botAI, spell), range(botAI->GetRange("spell")), spell(spell) { } -bool CastSpellAction::Execute(Event event) +bool CastSpellAction::Execute(Event /*event*/) { if (spell == "conjure food" || spell == "conjure water") { @@ -78,6 +76,35 @@ bool CastSpellAction::Execute(Event event) return botAI->CastSpell(spell, GetTarget()); } +bool CastSpellAction::isUseful() +{ + if (botAI->IsInVehicle() && !botAI->IsInVehicle(false, false, true)) + return false; + + if (spell == "mount" && !bot->IsMounted() && !bot->IsInCombat()) + return true; + + if (spell == "mount" && bot->IsInCombat()) + { + bot->Dismount(); + return false; + } + + Unit* spellTarget = GetTarget(); + if (!spellTarget) + return false; + + if (!spellTarget->IsInWorld() || spellTarget->GetMapId() != bot->GetMapId()) + return false; + + // float combatReach = bot->GetCombatReach() + target->GetCombatReach(); + // if (!botAI->IsRanged(bot)) + // combatReach += 4.0f / 3.0f; + + return AI_VALUE2(bool, "spell cast useful", spell); + // && ServerFacade::instance().GetDistance2d(bot, target) <= (range + combatReach); +} + bool CastSpellAction::isPossible() { if (botAI->IsInVehicle() && !botAI->IsInVehicle(false, false, true)) @@ -106,36 +133,6 @@ bool CastSpellAction::isPossible() return botAI->CanCastSpell(spell, GetTarget()); } -bool CastSpellAction::isUseful() -{ - if (botAI->IsInVehicle() && !botAI->IsInVehicle(false, false, true)) - return false; - - if (spell == "mount" && !bot->IsMounted() && !bot->IsInCombat()) - return true; - - if (spell == "mount" && bot->IsInCombat()) - { - bot->Dismount(); - return false; - } - - Unit* spellTarget = GetTarget(); - if (!spellTarget) - return false; - - if (!spellTarget->IsInWorld() || spellTarget->GetMapId() != bot->GetMapId()) - return false; - - // float combatReach = bot->GetCombatReach() + spellTarget->GetCombatReach(); - // if (!botAI->IsRanged(bot)) - // combatReach += 4.0f / 3.0f; - - return spellTarget && - AI_VALUE2(bool, "spell cast useful", - spell); // && ServerFacade::instance().GetDistance2d(bot, spellTarget) <= (range + combatReach); -} - CastMeleeSpellAction::CastMeleeSpellAction(PlayerbotAI* botAI, std::string const spell) : CastSpellAction(botAI, spell) { range = ATTACK_DISTANCE; @@ -233,7 +230,7 @@ Value* BuffOnPartyAction::GetTargetValue() return context->GetValue("party member without aura", MakeAuraQualifierForBuff(spell)); } -bool BuffOnPartyAction::Execute(Event event) +bool BuffOnPartyAction::Execute(Event /*event*/) { std::string castName = spell; // default = mono @@ -290,7 +287,7 @@ Value* CastSnareSpellAction::GetTargetValue() { return context->GetValue< Value* CastCrowdControlSpellAction::GetTargetValue() { return context->GetValue("cc target", getName()); } -bool CastCrowdControlSpellAction::Execute(Event event) { return botAI->CastSpell(getName(), GetTarget()); } +bool CastCrowdControlSpellAction::Execute(Event /*event*/) { return botAI->CastSpell(getName(), GetTarget()); } bool CastCrowdControlSpellAction::isPossible() { return botAI->CanCastSpell(getName(), GetTarget()); } @@ -308,13 +305,13 @@ bool CastVehicleSpellAction::isPossible() bool CastVehicleSpellAction::isUseful() { return botAI->IsInVehicle(false, true); } -bool CastVehicleSpellAction::Execute(Event event) +bool CastVehicleSpellAction::Execute(Event /*event*/) { uint32 spellId = AI_VALUE2(uint32, "vehicle spell id", spell); return botAI->CastVehicleSpell(spellId, GetTarget()); } -bool UseTrinketAction::Execute(Event event) +bool UseTrinketAction::Execute(Event /*event*/) { Item* trinket1 = bot->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_TRINKET1); diff --git a/src/Ai/Base/Actions/GenericSpellActions.h b/src/Ai/Base/Actions/GenericSpellActions.h index b148b93ff..9aa83f62d 100644 --- a/src/Ai/Base/Actions/GenericSpellActions.h +++ b/src/Ai/Base/Actions/GenericSpellActions.h @@ -23,8 +23,8 @@ public: std::string const GetTargetName() override { return "current target"; }; bool Execute(Event event) override; - bool isPossible() override; bool isUseful() override; + bool isPossible() override; ActionThreatType getThreatType() override { return ActionThreatType::Single; } std::vector getPrerequisites() override diff --git a/src/Ai/Base/Actions/GiveItemAction.cpp b/src/Ai/Base/Actions/GiveItemAction.cpp index 350b465b8..6019d1e38 100644 --- a/src/Ai/Base/Actions/GiveItemAction.cpp +++ b/src/Ai/Base/Actions/GiveItemAction.cpp @@ -11,7 +11,7 @@ std::vector split(std::string const s, char delim); -bool GiveItemAction::Execute(Event event) +bool GiveItemAction::Execute(Event /*event*/) { Unit* target = GetTarget(); if (!target) diff --git a/src/Ai/Base/Actions/GreetAction.cpp b/src/Ai/Base/Actions/GreetAction.cpp index a9fda122e..bf6d1e455 100644 --- a/src/Ai/Base/Actions/GreetAction.cpp +++ b/src/Ai/Base/Actions/GreetAction.cpp @@ -10,7 +10,7 @@ GreetAction::GreetAction(PlayerbotAI* botAI) : Action(botAI, "greet") {} -bool GreetAction::Execute(Event event) +bool GreetAction::Execute(Event /*event*/) { ObjectGuid guid = AI_VALUE(ObjectGuid, "new player nearby"); if (!guid || !guid.IsPlayer()) diff --git a/src/Ai/Base/Actions/GuildBankAction.cpp b/src/Ai/Base/Actions/GuildBankAction.cpp index 2d9c74ff6..9693556d7 100644 --- a/src/Ai/Base/Actions/GuildBankAction.cpp +++ b/src/Ai/Base/Actions/GuildBankAction.cpp @@ -6,7 +6,8 @@ #include "GuildBankAction.h" #include "GuildMgr.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" +#include "AiObjectContext.h" bool GuildBankAction::Execute(Event event) { diff --git a/src/Ai/Base/Actions/GuildCreateActions.cpp b/src/Ai/Base/Actions/GuildCreateActions.cpp index c9f9e689e..0e7098f1e 100644 --- a/src/Ai/Base/Actions/GuildCreateActions.cpp +++ b/src/Ai/Base/Actions/GuildCreateActions.cpp @@ -12,9 +12,9 @@ #include "Playerbots.h" #include "RandomPlayerbotFactory.h" #include "ServerFacade.h" -#include "SharedDefines.h" // GOLD +#include "SharedDefines.h" -bool BuyPetitionAction::Execute(Event event) +bool BuyPetitionAction::Execute(Event /*event*/) { GuidVector vendors = botAI->GetAiObjectContext()->GetValue("nearest npcs")->Get(); bool vendored = false, result = false; @@ -152,7 +152,7 @@ bool PetitionOfferAction::Execute(Event event) bool PetitionOfferAction::isUseful() { return !bot->GetGuildId(); } -bool PetitionOfferNearbyAction::Execute(Event event) +bool PetitionOfferNearbyAction::Execute(Event /*event*/) { uint32 found = 0; @@ -209,7 +209,7 @@ bool PetitionOfferNearbyAction::isUseful() AI_VALUE(uint8, "petition signs") < sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS); } -bool PetitionTurnInAction::Execute(Event event) +bool PetitionTurnInAction::Execute(Event /*event*/) { GuidVector vendors = botAI->GetAiObjectContext()->GetValue("nearest npcs")->Get(); bool vendored = false, result = false; @@ -297,7 +297,7 @@ bool PetitionTurnInAction::isUseful() !context->GetValue("travel target")->Get()->isTraveling(); } -bool BuyTabardAction::Execute(Event event) +bool BuyTabardAction::Execute(Event /*event*/) { bool canBuy = botAI->DoSpecificAction("buy", Event("buy tabard", "Hitem:5976:")); if (canBuy && AI_VALUE2(uint32, "item count", chat->FormatQItem(5976))) diff --git a/src/Ai/Base/Actions/GuildManagementActions.cpp b/src/Ai/Base/Actions/GuildManagementActions.cpp index be94b6ae6..0b5a7cf48 100644 --- a/src/Ai/Base/Actions/GuildManagementActions.cpp +++ b/src/Ai/Base/Actions/GuildManagementActions.cpp @@ -128,7 +128,7 @@ bool GuildRemoveAction::PlayerIsValid(Player* member) return member->GetGuildId() == bot->GetGuildId() && GetRankId(bot) < GetRankId(member); }; -bool GuildManageNearbyAction::Execute(Event event) +bool GuildManageNearbyAction::Execute(Event /*event*/) { uint32 found = 0; @@ -149,7 +149,6 @@ bool GuildManageNearbyAction::Execute(Event event) // Promote or demote nearby members based on chance. if (player->GetGuildId() && player->GetGuildId() == bot->GetGuildId()) { - Guild::Member* member = guild->GetMember(player->GetGUID()); uint32 dCount = AI_VALUE(uint32, "death count"); if (!urand(0, 30) && dCount < 2 && guild->GetRankRights(botMember->GetRankId()) & GR_RIGHT_PROMOTE) diff --git a/src/Ai/Base/Actions/HelpAction.cpp b/src/Ai/Base/Actions/HelpAction.cpp index 3dbe1d6e4..c3d14a0ff 100644 --- a/src/Ai/Base/Actions/HelpAction.cpp +++ b/src/Ai/Base/Actions/HelpAction.cpp @@ -7,13 +7,13 @@ #include "ChatActionContext.h" #include "Event.h" -#include "Playerbots.h" +#include "AiObjectContext.h" HelpAction::HelpAction(PlayerbotAI* botAI) : Action(botAI, "help") { chatContext = new ChatActionContext(); } HelpAction::~HelpAction() { delete chatContext; } -bool HelpAction::Execute(Event event) +bool HelpAction::Execute(Event /*event*/) { TellChatCommands(); TellStrategies(); diff --git a/src/Ai/Base/Actions/HireAction.cpp b/src/Ai/Base/Actions/HireAction.cpp index eba607d2e..374438f74 100644 --- a/src/Ai/Base/Actions/HireAction.cpp +++ b/src/Ai/Base/Actions/HireAction.cpp @@ -6,15 +6,16 @@ #include "HireAction.h" #include "Event.h" -#include "Playerbots.h" +#include "RandomPlayerbotMgr.h" +#include "PlayerbotAI.h" -bool HireAction::Execute(Event event) +bool HireAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) return false; - if (!sRandomPlayerbotMgr.IsRandomBot(bot)) + if (!RandomPlayerbotMgr::instance().IsRandomBot(bot)) return false; uint32 account = master->GetSession()->GetAccountId(); @@ -39,7 +40,7 @@ bool HireAction::Execute(Event event) return false; } - uint32 discount = sRandomPlayerbotMgr.GetTradeDiscount(bot, master); + uint32 discount = RandomPlayerbotMgr::instance().GetTradeDiscount(bot, master); uint32 m = 1 + (bot->GetLevel() / 10); uint32 moneyReq = m * 5000 * bot->GetLevel(); if (discount < moneyReq) @@ -54,7 +55,7 @@ bool HireAction::Execute(Event event) botAI->TellMaster("I will join you at your next relogin"); bot->SetMoney(moneyReq); - sRandomPlayerbotMgr.Remove(bot); + RandomPlayerbotMgr::instance().Remove(bot); CharacterDatabase.Execute("UPDATE characters SET account = {} WHERE guid = {}", account, bot->GetGUID().GetCounter()); diff --git a/src/Ai/Base/Actions/ImbueAction.cpp b/src/Ai/Base/Actions/ImbueAction.cpp index 8c151ef8a..a6d56d2e5 100644 --- a/src/Ai/Base/Actions/ImbueAction.cpp +++ b/src/Ai/Base/Actions/ImbueAction.cpp @@ -10,7 +10,7 @@ ImbueWithPoisonAction::ImbueWithPoisonAction(PlayerbotAI* botAI) : Action(botAI, "apply poison") {} -bool ImbueWithPoisonAction::Execute(Event event) +bool ImbueWithPoisonAction::Execute(Event /*event*/) { if (bot->IsInCombat()) return false; @@ -103,7 +103,7 @@ bool ImbueWithPoisonAction::Execute(Event event) // Search and apply stone to weapons ImbueWithStoneAction::ImbueWithStoneAction(PlayerbotAI* botAI) : Action(botAI, "apply stone") {} -bool ImbueWithStoneAction::Execute(Event event) +bool ImbueWithStoneAction::Execute(Event /*event*/) { if (bot->IsInCombat()) return false; @@ -148,7 +148,7 @@ bool ImbueWithStoneAction::Execute(Event event) // Search and apply oil to weapons ImbueWithOilAction::ImbueWithOilAction(PlayerbotAI* botAI) : Action(botAI, "apply oil") {} -bool ImbueWithOilAction::Execute(Event event) +bool ImbueWithOilAction::Execute(Event /*event*/) { if (bot->IsInCombat()) return false; @@ -201,7 +201,7 @@ static const uint32 uPrioritizedHealingItemIds[19] = { TryEmergencyAction::TryEmergencyAction(PlayerbotAI* botAI) : Action(botAI, "try emergency") {} -bool TryEmergencyAction::Execute(Event event) +bool TryEmergencyAction::Execute(Event /*event*/) { // Do not use consumable if bot can heal self if ((botAI->IsHeal(bot)) && (bot->GetPowerPct(POWER_MANA) > 20)) diff --git a/src/Ai/Base/Actions/InventoryAction.cpp b/src/Ai/Base/Actions/InventoryAction.cpp index f7b606a91..83fc00f12 100644 --- a/src/Ai/Base/Actions/InventoryAction.cpp +++ b/src/Ai/Base/Actions/InventoryAction.cpp @@ -351,9 +351,7 @@ uint32 InventoryAction::GetItemCount(FindItemVisitor* visitor, IterateItemsMask std::vector& items = visitor->GetResult(); for (Item* item : items) - { count += item->GetCount(); - } return count; } diff --git a/src/Ai/Base/Actions/InviteToGroupAction.cpp b/src/Ai/Base/Actions/InviteToGroupAction.cpp index 14f943f76..136f13958 100644 --- a/src/Ai/Base/Actions/InviteToGroupAction.cpp +++ b/src/Ai/Base/Actions/InviteToGroupAction.cpp @@ -8,7 +8,6 @@ #include "BroadcastHelper.h" #include "Event.h" #include "GuildMgr.h" -#include "Log.h" #include "PlayerbotOperations.h" #include "Playerbots.h" #include "PlayerbotWorldThreadProcessor.h" @@ -44,7 +43,7 @@ bool InviteToGroupAction::Invite(Player* inviter, Player* player) return true; } -bool InviteNearbyToGroupAction::Execute(Event event) +bool InviteNearbyToGroupAction::Execute(Event /*event*/) { GuidVector nearGuids = botAI->GetAiObjectContext()->GetValue("nearest friendly players")->Get(); for (auto& i : nearGuids) @@ -62,7 +61,7 @@ bool InviteNearbyToGroupAction::Execute(Event event) if (player->GetGroup()) continue; - if (!sPlayerbotAIConfig.randomBotInvitePlayer && GET_PLAYERBOT_AI(player)->IsRealPlayer()) + if (!PlayerbotAIConfig::instance().randomBotInvitePlayer && GET_PLAYERBOT_AI(player)->IsRealPlayer()) continue; Group* group = bot->GetGroup(); @@ -88,7 +87,7 @@ bool InviteNearbyToGroupAction::Execute(Event event) if (abs(int32(player->GetLevel() - bot->GetLevel())) > 2) continue; - if (ServerFacade::instance().GetDistance2d(bot, player) > sPlayerbotAIConfig.sightDistance) + if (ServerFacade::instance().GetDistance2d(bot, player) > PlayerbotAIConfig::instance().sightDistance) continue; // When inviting the 5th member of the group convert to raid for future invites. @@ -99,7 +98,7 @@ bool InviteNearbyToGroupAction::Execute(Event event) PlayerbotWorldThreadProcessor::instance().QueueOperation(std::move(convertOp)); } - if (sPlayerbotAIConfig.inviteChat && sRandomPlayerbotMgr.IsRandomBot(bot)) + if (PlayerbotAIConfig::instance().inviteChat && RandomPlayerbotMgr::instance().IsRandomBot(bot)) { std::map placeholders; placeholders["%player"] = player->GetName(); @@ -120,7 +119,7 @@ bool InviteNearbyToGroupAction::Execute(Event event) bool InviteNearbyToGroupAction::isUseful() { - if (!sPlayerbotAIConfig.randomBotGroupNearby) + if (!PlayerbotAIConfig::instance().randomBotGroupNearby) return false; if (bot->InBattleground()) @@ -166,7 +165,7 @@ std::vector InviteGuildToGroupAction::getGuildMembers() return worker.GetResult(); } -bool InviteGuildToGroupAction::Execute(Event event) +bool InviteGuildToGroupAction::Execute(Event /*event*/) { Guild* guild = sGuildMgr->GetGuildById(bot->GetGuildId()); @@ -186,7 +185,7 @@ bool InviteGuildToGroupAction::Execute(Event event) if (player->isDND()) continue; - if (!sPlayerbotAIConfig.randomBotInvitePlayer && GET_PLAYERBOT_AI(player)->IsRealPlayer()) + if (!PlayerbotAIConfig::instance().randomBotInvitePlayer && GET_PLAYERBOT_AI(player)->IsRealPlayer()) continue; if (player->IsBeingTeleported()) @@ -221,7 +220,7 @@ bool InviteGuildToGroupAction::Execute(Event event) player->GetLevel() + 5) // Do not invite members that too low level or risk dragging them to deadly places. continue; - if (!playerAi && ServerFacade::instance().GetDistance2d(bot, player) > sPlayerbotAIConfig.sightDistance) + if (!playerAi && ServerFacade::instance().GetDistance2d(bot, player) > PlayerbotAIConfig::instance().sightDistance) continue; Group* group = bot->GetGroup(); @@ -233,8 +232,8 @@ bool InviteGuildToGroupAction::Execute(Event event) PlayerbotWorldThreadProcessor::instance().QueueOperation(std::move(convertOp)); } - if (sPlayerbotAIConfig.inviteChat && - (sRandomPlayerbotMgr.IsRandomBot(bot) || !botAI->HasActivePlayerMaster())) + if (PlayerbotAIConfig::instance().inviteChat && + (RandomPlayerbotMgr::instance().IsRandomBot(bot) || !botAI->HasActivePlayerMaster())) { BroadcastHelper::BroadcastGuildGroupOrRaidInvite(botAI, bot, player, group); } diff --git a/src/Ai/Base/Actions/LeaveGroupAction.cpp b/src/Ai/Base/Actions/LeaveGroupAction.cpp index 03a24bd19..337d11544 100644 --- a/src/Ai/Base/Actions/LeaveGroupAction.cpp +++ b/src/Ai/Base/Actions/LeaveGroupAction.cpp @@ -92,7 +92,7 @@ bool LeaveGroupAction::Leave() return true; } -bool LeaveFarAwayAction::Execute(Event event) +bool LeaveFarAwayAction::Execute(Event /*event*/) { // allow bot to leave party when they want return Leave(); diff --git a/src/Ai/Base/Actions/LfgActions.cpp b/src/Ai/Base/Actions/LfgActions.cpp index a34c3efc6..93e6ff4e3 100644 --- a/src/Ai/Base/Actions/LfgActions.cpp +++ b/src/Ai/Base/Actions/LfgActions.cpp @@ -8,11 +8,11 @@ #include "AiFactory.h" #include "ItemVisitors.h" #include "LFGMgr.h" -#include "LFGPackets.h" #include "Opcodes.h" #include "Playerbots.h" #include "World.h" #include "WorldPacket.h" +#include "RandomPlayerbotMgr.h" using namespace lfg; @@ -20,7 +20,7 @@ bool LfgJoinAction::Execute(Event event) { return JoinLFG(); } uint32 LfgJoinAction::GetRoles() { - if (!sRandomPlayerbotMgr.IsRandomBot(bot)) + if (!RandomPlayerbotMgr::instance().IsRandomBot(bot)) { if (botAI->IsTank(bot)) return PLAYER_ROLE_TANK; @@ -101,7 +101,7 @@ bool LfgJoinAction::JoinLFG() LfgDungeonSet list; std::vector selected; - std::vector dungeons = sRandomPlayerbotMgr.LfgDungeons[bot->GetTeamId()]; + std::vector dungeons = RandomPlayerbotMgr::instance().LfgDungeons[bot->GetTeamId()]; if (!dungeons.size()) return false; @@ -170,7 +170,7 @@ bool LfgJoinAction::JoinLFG() return true; } -bool LfgRoleCheckAction::Execute(Event event) +bool LfgRoleCheckAction::Execute(Event /*event*/) { if (Group* group = bot->GetGroup()) { @@ -216,9 +216,9 @@ bool LfgAcceptAction::Execute(Event event) *packet << id << true; bot->GetSession()->QueuePacket(packet); - if (sRandomPlayerbotMgr.IsRandomBot(bot) && !bot->GetGroup()) + if (RandomPlayerbotMgr::instance().IsRandomBot(bot) && !bot->GetGroup()) { - sRandomPlayerbotMgr.Refresh(bot); + RandomPlayerbotMgr::instance().Refresh(bot); botAI->ResetStrategies(); } @@ -251,9 +251,9 @@ bool LfgAcceptAction::Execute(Event event) *packet << id << true; bot->GetSession()->QueuePacket(packet); - if (sRandomPlayerbotMgr.IsRandomBot(bot) && !bot->GetGroup()) + if (RandomPlayerbotMgr::instance().IsRandomBot(bot) && !bot->GetGroup()) { - sRandomPlayerbotMgr.Refresh(bot); + RandomPlayerbotMgr::instance().Refresh(bot); botAI->ResetStrategies(); } @@ -265,7 +265,7 @@ bool LfgAcceptAction::Execute(Event event) return false; } -bool LfgLeaveAction::Execute(Event event) +bool LfgLeaveAction::Execute(Event /*event*/) { // Don't leave if lfg strategy enabled // if (botAI->HasStrategy("lfg", BOT_STATE_NON_COMBAT)) @@ -337,7 +337,7 @@ bool LfgJoinAction::isUseful() if (bot->isDead()) return false; - if (!sRandomPlayerbotMgr.IsRandomBot(bot)) + if (!RandomPlayerbotMgr::instance().IsRandomBot(bot)) return false; Map* map = bot->GetMap(); diff --git a/src/Ai/Base/Actions/LootRollAction.cpp b/src/Ai/Base/Actions/LootRollAction.cpp index 9a21c8139..7bbdc95c1 100644 --- a/src/Ai/Base/Actions/LootRollAction.cpp +++ b/src/Ai/Base/Actions/LootRollAction.cpp @@ -13,7 +13,7 @@ #include "PlayerbotAIConfig.h" #include "Playerbots.h" -bool LootRollAction::Execute(Event event) +bool LootRollAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) diff --git a/src/Ai/Base/Actions/MoveToRpgTargetAction.cpp b/src/Ai/Base/Actions/MoveToRpgTargetAction.cpp index 4e898f30e..ad197e4fe 100644 --- a/src/Ai/Base/Actions/MoveToRpgTargetAction.cpp +++ b/src/Ai/Base/Actions/MoveToRpgTargetAction.cpp @@ -11,20 +11,16 @@ #include "LastMovementValue.h" #include "Playerbots.h" -bool MoveToRpgTargetAction::Execute(Event event) +bool MoveToRpgTargetAction::Execute(Event /*event*/) { GuidPosition guidP = AI_VALUE(GuidPosition, "rpg target"); Unit* unit = botAI->GetUnit(guidP); if (unit && !unit->IsInWorld()) - { return false; - } + GameObject* go = botAI->GetGameObject(guidP); if (go && !go->IsInWorld()) - { return false; - } - Player* player = guidP.GetPlayer(); WorldObject* wo = nullptr; if (unit) diff --git a/src/Ai/Base/Actions/MoveToTravelTargetAction.cpp b/src/Ai/Base/Actions/MoveToTravelTargetAction.cpp index 958dfe739..f238135d9 100644 --- a/src/Ai/Base/Actions/MoveToTravelTargetAction.cpp +++ b/src/Ai/Base/Actions/MoveToTravelTargetAction.cpp @@ -7,10 +7,9 @@ #include "ChooseRpgTargetAction.h" #include "LootObjectStack.h" -#include "PathGenerator.h" #include "Playerbots.h" -bool MoveToTravelTargetAction::Execute(Event event) +bool MoveToTravelTargetAction::Execute(Event /*event*/) { TravelTarget* target = AI_VALUE(TravelTarget*, "travel target"); diff --git a/src/Ai/Base/Actions/MovementActions.cpp b/src/Ai/Base/Actions/MovementActions.cpp index c595dff6e..2b0359254 100644 --- a/src/Ai/Base/Actions/MovementActions.cpp +++ b/src/Ai/Base/Actions/MovementActions.cpp @@ -15,7 +15,6 @@ #include "FleeManager.h" #include "G3D/Vector3.h" #include "GameObject.h" -#include "Geometry.h" #include "LastMovementValue.h" #include "LootObjectStack.h" #include "Map.h" @@ -36,9 +35,7 @@ #include "SpellAuraEffects.h" #include "SpellInfo.h" #include "Stances.h" -#include "TargetedMovementGenerator.h" #include "Timer.h" -#include "Transport.h" #include "Unit.h" #include "Vehicle.h" #include "WaypointMovementGenerator.h" @@ -67,18 +64,14 @@ bool MovementAction::JumpTo(uint32 mapId, float x, float y, float z, MovementPri { UpdateMovementState(); if (!IsMovingAllowed(mapId, x, y, z)) - { return false; - } + if (IsDuplicateMove(mapId, x, y, z)) - { return false; - } + if (IsWaitingForLastMove(priority)) - { return false; - } - float botZ = bot->GetPositionZ(); + float speed = bot->GetSpeed(MOVE_RUN); MotionMaster& mm = *bot->GetMotionMaster(); mm.Clear(); @@ -370,7 +363,7 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // { // movePosition = endPosition; - // if (startPosition.getMapId() != endPosition.getMapId() || totalDistance > maxDist) + // if (startPosition.GetMapId() != endPosition.GetMapId() || totalDistance > maxDist) // { // if (!TravelNodeMap::instance().getNodes().empty() && !bot->InBattleground()) // { @@ -421,7 +414,7 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // { // //Use standard PathGenerator to find a route. // PathGenerator path(mover); - // path.CalculatePath(movePosition.getX(), movePosition.getY(), movePosition.getZ(), false); + // path.CalculatePath(movePosition.GetPositionX(), movePosition.GetPositionY(), movePosition.GetPositionZ(), false); // PathType type = path.GetPathType(); // Movement::PointsArray const& points = path.GetPath(); // movePath.addPath(startPosition.fromPointsArray(points)); @@ -485,8 +478,8 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // else // { // LOG_DEBUG("playerbots", "!entry"); - // return bot->TeleportTo(movePosition.getMapId(), movePosition.getX(), movePosition.getY(), - // movePosition.getZ(), movePosition.getO(), 0); + // return bot->TeleportTo(movePosition.GetMapId(), movePosition.GetPositionX(), movePosition.GetPositionY(), + // movePosition.GetPositionZ(), movePosition.GetOrientation(), 0); // } // } @@ -563,14 +556,14 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // AI_VALUE(LastMovement&, "last movement").setPath(movePath); - // if (!movePosition || movePosition.getMapId() != bot->GetMapId()) + // if (!movePosition || movePosition.GetMapId() != bot->GetMapId()) // { // movePath.clear(); // AI_VALUE(LastMovement&, "last movement").setPath(movePath); // if (botAI->HasStrategy("debug move", BOT_STATE_NON_COMBAT)) // botAI->TellMasterNoFacing("No point. Rebuilding."); - // LOG_DEBUG("playerbots", "!movePosition || movePosition.getMapId() != bot->GetMapId()"); + // LOG_DEBUG("playerbots", "!movePosition || movePosition.GetMapId() != bot->GetMapId()"); // return false; // } @@ -609,15 +602,15 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // float cz = z; // for (auto i : movePath.getPath()) // { - // CreateWp(bot, i.point.getX(), i.point.getY(), i.point.getZ(), 0.f, 2334); + // CreateWp(bot, i.point.GetPositionX(), i.point.GetPositionY(), i.point.GetPositionZ(), 0.f, 2334); - // cx = i.point.getX(); - // cy = i.point.getY(); - // cz = i.point.getZ(); + // cx = i.point.GetPositionX(); + // cy = i.point.GetPositionY(); + // cz = i.point.GetPositionZ(); // } // } // else - // CreateWp(bot, movePosition.getX(), movePosition.getY(), movePosition.getZ(), 0, 2334, true); + // CreateWp(bot, movePosition.GetPositionX(), movePosition.GetPositionY(), movePosition.GetPositionZ(), 0, 2334, true); // } // //Log bot movement @@ -634,8 +627,8 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // sPlayerbotAIConfig.log("bot_movement.csv", out.str().c_str()); // } - // // LOG_DEBUG("playerbots", "({}, {}) -> ({}, {})", startPosition.getX(), startPosition.getY(), - // movePosition.getX(), movePosition.getY()); if (!react) + // // LOG_DEBUG("playerbots", "({}, {}) -> ({}, {})", startPosition.GetPositionX(), startPosition.GetPositionY(), + // movePosition.GetPositionX(), movePosition.GetPositionY()); if (!react) // if (totalDistance > maxDist) // WaitForReach(startPosition.distance(movePosition) - 10.0f); // else @@ -671,7 +664,7 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // // else // // { // // mover->GetMotionMaster()->GetDestination(x, y, z); - // // if (movePosition.distance(WorldPosition(movePosition.getMapId(), x, y, z, 0)) > minDist) + // // if (movePosition.distance(WorldPosition(movePosition.GetMapId(), x, y, z, 0)) > minDist) // // { // // mover->StopMoving(); // // mover->GetMotionMaster()->Clear(); @@ -685,8 +678,8 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // AI_VALUE(LastMovement&, "last movement").nextTeleport = now + // (time_t)MoveDelay(startPosition.distance(movePosition)); LOG_DEBUG("playerbots", "totalDistance > maxDist && - // !detailedMove && !botAI->HasPlayerNearby(&movePosition)"); return bot->TeleportTo(movePosition.getMapId(), - // movePosition.getX(), movePosition.getY(), movePosition.getZ(), startPosition.getAngleTo(movePosition)); + // !detailedMove && !botAI->HasPlayerNearby(&movePosition)"); return bot->TeleportTo(movePosition.GetMapId(), + // movePosition.GetPositionX(), movePosition.GetPositionY(), movePosition.GetPositionZ(), startPosition.getAngleTo(movePosition)); // } // // walk if master walks and is close @@ -708,9 +701,9 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // if (!bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !bot->HasAuraType(SPELL_AURA_FLY)) // { // bot->SetWalk(masterWalking); - // bot->GetMotionMaster()->MovePoint(movePosition.getMapId(), movePosition.getX(), movePosition.getY(), - // movePosition.getZ(), generatePath); WaitForReach(startPosition.distance(movePosition)); - // // LOG_DEBUG("playerbots", "Movepoint to ({}, {})", movePosition.getX(), movePosition.getY()); + // bot->GetMotionMaster()->MovePoint(movePosition.GetMapId(), movePosition.GetPositionX(), movePosition.GetPositionY(), + // movePosition.GetPositionZ(), generatePath); WaitForReach(startPosition.distance(movePosition)); + // // LOG_DEBUG("playerbots", "Movepoint to ({}, {})", movePosition.GetPositionX(), movePosition.GetPositionY()); // } // else // { @@ -756,9 +749,9 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle, // } // } - // bot->GetMotionMaster()->MovePoint(movePosition.getMapId(), Position(movePosition.getX(), movePosition.getY(), - // movePosition.getZ(), 0.f)); WaitForReach(startPosition.distance(movePosition)); LOG_DEBUG("playerbots", - // "Movepoint to ({}, {})", movePosition.getX(), movePosition.getY()); + // bot->GetMotionMaster()->MovePoint(movePosition.GetMapId(), Position(movePosition.GetPositionX(), movePosition.GetPositionY(), + // movePosition.GetPositionZ(), 0.f)); WaitForReach(startPosition.distance(movePosition)); LOG_DEBUG("playerbots", + // "Movepoint to ({}, {})", movePosition.GetPositionX(), movePosition.GetPositionY()); // } // AI_VALUE(LastMovement&, "last movement").setShort(movePosition); @@ -953,68 +946,70 @@ bool MovementAction::Follow(Unit* target, float distance) { return Follow(target void MovementAction::UpdateMovementState() { - const bool isCurrentlyRestricted = // see if the bot is currently slowed, rooted, or otherwise unable to move - bot->HasUnitState(UNIT_STATE_LOST_CONTROL) || - bot->IsRooted() || - bot->isFrozen() || - bot->IsPolymorphed(); + const bool isCurrentlyRestricted = // see if the bot is currently slowed, rooted, or otherwise unable to move + bot->HasUnitState(UNIT_STATE_LOST_CONTROL) || bot->IsRooted() || bot->isFrozen() || bot->IsPolymorphed(); // no update movement flags while movement is current restricted. if (!isCurrentlyRestricted && bot->IsAlive()) { // state flags - const auto master = botAI ? botAI->GetMaster() : nullptr; // real player or not - const bool masterIsFlying = master ? master->HasUnitMovementFlag(MOVEMENTFLAG_FLYING) : true; - const bool masterIsSwimming = master ? master->HasUnitMovementFlag(MOVEMENTFLAG_SWIMMING) : true; - const auto liquidState = bot->GetLiquidData().Status; // default LIQUID_MAP_NO_WATER + const auto master = botAI ? botAI->GetMaster() : nullptr; + const auto liquidState = bot->GetLiquidData().Status; const float gZ = bot->GetMapWaterOrGroundLevel(bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ()); - const bool wantsToFly = bot->HasIncreaseMountedFlightSpeedAura() || bot->HasFlyAura(); + const bool onGroundZ = bot->GetPositionZ() < gZ + 1.f; + const bool canSwim = liquidState == LIQUID_MAP_IN_WATER || liquidState == LIQUID_MAP_UNDER_WATER; + const bool canFly = bot->HasIncreaseMountedFlightSpeedAura() || bot->HasFlyAura(); + const bool canWaterWalk = bot->HasWaterWalkAura(); + const bool isMasterFlying = master ? master->HasUnitMovementFlag(MOVEMENTFLAG_FLYING) : true; + const bool isMasterSwimming = master ? master->HasUnitMovementFlag(MOVEMENTFLAG_SWIMMING) : true; const bool isFlying = bot->HasUnitMovementFlag(MOVEMENTFLAG_FLYING); - const bool isWaterArea = liquidState != LIQUID_MAP_NO_WATER; - const bool isUnderWater = liquidState == LIQUID_MAP_UNDER_WATER; - const bool isInWater = liquidState == LIQUID_MAP_IN_WATER; - const bool isWaterWalking = bot->HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); const bool isSwimming = bot->HasUnitMovementFlag(MOVEMENTFLAG_SWIMMING); - const bool wantsToWaterWalk = bot->HasWaterWalkAura(); - const bool wantsToSwim = isInWater || isUnderWater; - const bool onGroundZ = (bot->GetPositionZ() < gZ + 1.f) && !isWaterArea; + const bool isWaterWalking = bot->HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); bool movementFlagsUpdated = false; - // handle water state - if (isWaterArea && !isFlying) + // handle water (fragile logic do not alter without testing every detail, animation and transition) + if (liquidState != LIQUID_MAP_NO_WATER && !isFlying) { - // water walking - if (wantsToWaterWalk && !isWaterWalking && !masterIsSwimming) + if (canWaterWalk && !isMasterSwimming && !isWaterWalking) { - bot->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING); + bot->SetSwim(false); bot->AddUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); movementFlagsUpdated = true; } - // swimming - else if (wantsToSwim && !isSwimming && masterIsSwimming) + else if ((!canWaterWalk || isMasterSwimming) && isWaterWalking) { bot->RemoveUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); - bot->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING); + if (canSwim) + bot->SetSwim(true); + movementFlagsUpdated = true; + } + else if (!canSwim && isSwimming) + { + bot->SetSwim(false); movementFlagsUpdated = true; } } - else if (isSwimming || isWaterWalking) + + // reset when not around water while swimming or water walking + if (liquidState == LIQUID_MAP_NO_WATER && (isSwimming || isWaterWalking)) { - // reset water flags - bot->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING); + bot->SetSwim(false); bot->RemoveUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); movementFlagsUpdated = true; } - // handle flying state - if (wantsToFly && !isFlying && masterIsFlying) + // handle flying + if ((canFly && !isFlying) && isMasterFlying) { bot->AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY); bot->AddUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY); bot->AddUnitMovementFlag(MOVEMENTFLAG_FLYING); - movementFlagsUpdated = true; + + // required for transition and state monitoring. + if (MotionMaster* mm = bot->GetMotionMaster()) + mm->MoveTakeoff(0, {bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ() + 1.F}, 0.F, true); } - else if ((!wantsToFly || onGroundZ) && isFlying) + else if ((!canFly && !isWaterWalking && isFlying) || (!isMasterFlying && isFlying && onGroundZ)) { bot->RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_FLY); bot->RemoveUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY); @@ -1022,15 +1017,16 @@ void MovementAction::UpdateMovementState() movementFlagsUpdated = true; } - // detect if movement restrictions have been lifted, CC just ended. + // detect if movement/CC restrictions have been ended, refresh movement state for animations. if (wasMovementRestricted) - movementFlagsUpdated = true; // refresh movement state to ensure animations play correctly + movementFlagsUpdated = true; + // movement flags should only be updated between state changes, if not it will break certain effects. if (movementFlagsUpdated) bot->SendMovementFlagUpdate(); } - // Save current state for the next check + // Save current state for the next check wasMovementRestricted = isCurrentlyRestricted; // Temporary speed increase in group @@ -1190,7 +1186,7 @@ bool MovementAction::Follow(Unit* target, float distance, float angle) WorldPosition cPos(corpse); if (botPos.fDist(cPos) > sPlayerbotAIConfig.spellDistance) - return MoveTo(cPos.getMapId(), cPos.getX(), cPos.getY(), cPos.getZ()); + return MoveTo(cPos.GetMapId(), cPos.GetPositionX(), cPos.GetPositionY(), cPos.GetPositionZ()); } } @@ -1217,7 +1213,7 @@ bool MovementAction::Follow(Unit* target, float distance, float angle) if ((lDist * 1.5 < tDist && ang < static_cast(M_PI) / 2) || target->HasUnitState(UNIT_STATE_IN_FLIGHT)) { - return MoveTo(longMove.getMapId(), longMove.getX(), longMove.getY(), longMove.getZ()); + return MoveTo(longMove.GetMapId(), longMove.GetPositionX(), longMove.GetPositionY(), longMove.GetPositionZ()); } } } @@ -1813,12 +1809,11 @@ void MovementAction::DoMovePoint(Unit* unit, float x, float y, float z, bool gen if (!mm) return; - // enable water walking - if (unit->HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING)) + // bot water collision correction + if (unit->HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING) && unit->HasWaterWalkAura()) { float gZ = unit->GetMapWaterOrGroundLevel(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ()); unit->UpdatePosition(unit->GetPositionX(), unit->GetPositionY(), gZ, false); - // z = gZ; no overwrite Z axe otherwise you cant steer the bots into swimming when water walking. } mm->Clear(); @@ -1844,7 +1839,7 @@ void MovementAction::DoMovePoint(Unit* unit, float x, float y, float z, bool gen } } -bool FleeAction::Execute(Event event) +bool FleeAction::Execute(Event /*event*/) { return MoveAway(AI_VALUE(Unit*, "current target"), sPlayerbotAIConfig.fleeDistance, true); } @@ -1852,9 +1847,8 @@ bool FleeAction::Execute(Event event) bool FleeAction::isUseful() { if (bot->GetCurrentSpell(CURRENT_CHANNELED_SPELL) != nullptr) - { return false; - } + Unit* target = AI_VALUE(Unit*, "current target"); if (target && target->IsInWorld() && !bot->IsWithinMeleeRange(target)) return false; @@ -1862,12 +1856,10 @@ bool FleeAction::isUseful() return true; } -bool FleeWithPetAction::Execute(Event event) +bool FleeWithPetAction::Execute(Event /*event*/) { if (Pet* pet = bot->GetPet()) - { botAI->PetFollow(); - } return Flee(AI_VALUE(Unit*, "current target")); } @@ -1875,15 +1867,14 @@ bool FleeWithPetAction::Execute(Event event) bool AvoidAoeAction::isUseful() { if (getMSTime() - moveInterval < lastMoveTimer) - { return false; - } + GuidVector traps = AI_VALUE(GuidVector, "nearest trap with damage"); GuidVector triggers = AI_VALUE(GuidVector, "possible triggers"); return AI_VALUE(Aura*, "area debuff") || !traps.empty() || !triggers.empty(); } -bool AvoidAoeAction::Execute(Event event) +bool AvoidAoeAction::Execute(Event /*event*/) { // Case #1: Aura with dynamic object (e.g. rain of fire) if (AvoidAuraWithDynamicObj()) @@ -2307,17 +2298,15 @@ bool MovementAction::CheckLastFlee(float curAngle, std::list& infoList bool CombatFormationMoveAction::isUseful() { if (getMSTime() - moveInterval < lastMoveTimer) - { return false; - } + if (bot->GetCurrentSpell(CURRENT_CHANNELED_SPELL) != nullptr) - { return false; - } + return true; } -bool CombatFormationMoveAction::Execute(Event event) +bool CombatFormationMoveAction::Execute(Event /*event*/) { float dis = AI_VALUE(float, "disperse distance"); if (dis <= 0.0f || (!bot->IsInCombat() && botAI->HasStrategy("stay", BotState::BOT_STATE_NON_COMBAT)) || @@ -2448,7 +2437,7 @@ Player* CombatFormationMoveAction::NearestGroupMember(float dis) return result; } -bool TankFaceAction::Execute(Event event) +bool TankFaceAction::Execute(Event /*event*/) { Unit* target = AI_VALUE(Unit*, "current target"); if (!target) @@ -2532,7 +2521,7 @@ bool RearFlankAction::isUseful() return inFront || inRear; } -bool RearFlankAction::Execute(Event event) +bool RearFlankAction::Execute(Event /*event*/) { Unit* target = AI_VALUE(Unit*, "current target"); if (!target) @@ -2643,9 +2632,9 @@ bool DisperseSetAction::Execute(Event event) return true; } -bool RunAwayAction::Execute(Event event) { return Flee(AI_VALUE(Unit*, "group leader")); } +bool RunAwayAction::Execute(Event /*event*/) { return Flee(AI_VALUE(Unit*, "group leader")); } -bool MoveToLootAction::Execute(Event event) +bool MoveToLootAction::Execute(Event /*event*/) { LootObject loot = AI_VALUE(LootObject, "loot target"); if (!loot.IsLootPossible(bot)) @@ -2654,7 +2643,7 @@ bool MoveToLootAction::Execute(Event event) return MoveNear(loot.GetWorldObject(bot), sPlayerbotAIConfig.contactDistance); } -bool MoveOutOfEnemyContactAction::Execute(Event event) +bool MoveOutOfEnemyContactAction::Execute(Event /*event*/) { Unit* target = AI_VALUE(Unit*, "current target"); if (!target) @@ -2665,7 +2654,7 @@ bool MoveOutOfEnemyContactAction::Execute(Event event) bool MoveOutOfEnemyContactAction::isUseful() { return AI_VALUE2(bool, "inside target", "current target"); } -bool SetFacingTargetAction::Execute(Event event) +bool SetFacingTargetAction::Execute(Event /*event*/) { Unit* target = AI_VALUE(Unit*, "current target"); if (!target) @@ -2691,7 +2680,7 @@ bool SetFacingTargetAction::isPossible() return true; } -bool SetBehindTargetAction::Execute(Event event) +bool SetBehindTargetAction::Execute(Event /*event*/) { Unit* target = AI_VALUE(Unit*, "current target"); if (!target) @@ -2751,7 +2740,7 @@ bool SetBehindTargetAction::Execute(Event event) false, true, MovementPriority::MOVEMENT_COMBAT); } -bool MoveOutOfCollisionAction::Execute(Event event) +bool MoveOutOfCollisionAction::Execute(Event /*event*/) { float angle = M_PI * 2000 / frand(1.f, 1000.f); float distance = sPlayerbotAIConfig.followDistance; @@ -2769,7 +2758,7 @@ bool MoveOutOfCollisionAction::isUseful() botAI->GetAiObjectContext()->GetValue("nearest friendly players")->Get().size() < 15; } -bool MoveRandomAction::Execute(Event event) +bool MoveRandomAction::Execute(Event /*event*/) { float distance = sPlayerbotAIConfig.tooCloseDistance + urand(10, 30); @@ -2801,9 +2790,9 @@ bool MoveRandomAction::Execute(Event event) bool MoveRandomAction::isUseful() { return !AI_VALUE(GuidPosition, "rpg target"); } -bool MoveInsideAction::Execute(Event event) { return MoveInside(bot->GetMapId(), x, y, bot->GetPositionZ(), distance); } +bool MoveInsideAction::Execute(Event /*event*/) { return MoveInside(bot->GetMapId(), x, y, bot->GetPositionZ(), distance); } -bool RotateAroundTheCenterPointAction::Execute(Event event) +bool RotateAroundTheCenterPointAction::Execute(Event /*event*/) { uint32 next_point = GetCurrWaypoint(); if (MoveTo(bot->GetMapId(), waypoints[next_point].first, waypoints[next_point].second, bot->GetPositionZ(), false, @@ -2823,10 +2812,9 @@ bool MoveFromGroupAction::Execute(Event event) return MoveFromGroup(distance); } -bool MoveAwayFromCreatureAction::Execute(Event event) +bool MoveAwayFromCreatureAction::Execute(Event /*event*/) { GuidVector targets = AI_VALUE(GuidVector, "nearest npcs"); - Creature* nearestCreature = bot->FindNearestCreature(creatureId, range, alive); // Find all creatures with the specified Id std::vector creatures; @@ -2904,16 +2892,14 @@ bool MoveAwayFromCreatureAction::Execute(Event event) bool MoveAwayFromCreatureAction::isPossible() { return bot->CanFreeMove(); } -bool MoveAwayFromPlayerWithDebuffAction::Execute(Event event) +bool MoveAwayFromPlayerWithDebuffAction::Execute(Event /*event*/) { Player* closestPlayer = nullptr; float minDistance = 0.0f; Group* group = bot->GetGroup(); if (!group) - { return false; - } std::vector debuffedPlayers; diff --git a/src/Ai/Base/Actions/NonCombatActions.cpp b/src/Ai/Base/Actions/NonCombatActions.cpp index 492da8ae6..9de1e0bae 100644 --- a/src/Ai/Base/Actions/NonCombatActions.cpp +++ b/src/Ai/Base/Actions/NonCombatActions.cpp @@ -49,18 +49,16 @@ bool DrinkAction::Execute(Event event) bool DrinkAction::isUseful() { - return UseItemAction::isUseful() && - AI_VALUE2(bool, "has mana", "self target") && - AI_VALUE2(uint8, "mana", "self target") < 100; + return UseItemAction::isUseful() && AI_VALUE2(bool, "has mana", "self target") && + AI_VALUE2(uint8, "mana", "self target") < 100; } bool DrinkAction::isPossible() { - return !bot->IsInCombat() && - !bot->IsMounted() && - !botAI->HasAnyAuraOf(GetTarget(), "dire bear form", "bear form", "cat form", "travel form", - "aquatic form","flight form", "swift flight form", nullptr) && - (botAI->HasCheat(BotCheatMask::food) || UseItemAction::isPossible()); + return !bot->IsInCombat() && !bot->IsMounted() && + !botAI->HasAnyAuraOf(GetTarget(), "dire bear form", "bear form", "cat form", "travel form", "aquatic form", + "flight form", "swift flight form", nullptr) && + (botAI->HasCheat(BotCheatMask::food) || UseItemAction::isPossible()); } bool EatAction::Execute(Event event) @@ -102,17 +100,12 @@ bool EatAction::Execute(Event event) return UseItemAction::Execute(event); } -bool EatAction::isUseful() -{ - return UseItemAction::isUseful() && - AI_VALUE2(uint8, "health", "self target") < 100; -} +bool EatAction::isUseful() { return UseItemAction::isUseful() && AI_VALUE2(uint8, "health", "self target") < 100; } bool EatAction::isPossible() { - return !bot->IsInCombat() && - !bot->IsMounted() && - !botAI->HasAnyAuraOf(GetTarget(), "dire bear form", "bear form", "cat form", "travel form", - "aquatic form","flight form", "swift flight form", nullptr) && - (botAI->HasCheat(BotCheatMask::food) || UseItemAction::isPossible()); + return !bot->IsInCombat() && !bot->IsMounted() && + !botAI->HasAnyAuraOf(GetTarget(), "dire bear form", "bear form", "cat form", "travel form", "aquatic form", + "flight form", "swift flight form", nullptr) && + (botAI->HasCheat(BotCheatMask::food) || UseItemAction::isPossible()); } diff --git a/src/Ai/Base/Actions/OpenItemAction.cpp b/src/Ai/Base/Actions/OpenItemAction.cpp index d1ebcbaaa..0ea7560ed 100644 --- a/src/Ai/Base/Actions/OpenItemAction.cpp +++ b/src/Ai/Base/Actions/OpenItemAction.cpp @@ -7,7 +7,7 @@ #include "LootObjectStack.h" #include "AiObjectContext.h" -bool OpenItemAction::Execute(Event event) +bool OpenItemAction::Execute(Event /*event*/) { bool foundOpenable = false; diff --git a/src/Ai/Base/Actions/PassLeadershipToMasterAction.cpp b/src/Ai/Base/Actions/PassLeadershipToMasterAction.cpp index 4ecfdc3bc..e2e9f0fe6 100644 --- a/src/Ai/Base/Actions/PassLeadershipToMasterAction.cpp +++ b/src/Ai/Base/Actions/PassLeadershipToMasterAction.cpp @@ -7,10 +7,9 @@ #include "Event.h" #include "PlayerbotOperations.h" -#include "Playerbots.h" #include "PlayerbotWorldThreadProcessor.h" -bool PassLeadershipToMasterAction::Execute(Event event) +bool PassLeadershipToMasterAction::Execute(Event /*event*/) { if (Player* master = GetMaster()) if (master && master != bot && bot->GetGroup() && bot->GetGroup()->IsMember(master->GetGUID())) diff --git a/src/Ai/Base/Actions/PetsAction.h b/src/Ai/Base/Actions/PetsAction.h index f9334e319..78f9c0b50 100644 --- a/src/Ai/Base/Actions/PetsAction.h +++ b/src/Ai/Base/Actions/PetsAction.h @@ -9,8 +9,6 @@ #include #include "Action.h" -#include "PlayerbotFactory.h" -#include "Unit.h" class PlayerbotAI; diff --git a/src/Ai/Base/Actions/PositionAction.cpp b/src/Ai/Base/Actions/PositionAction.cpp index 7d8f4264c..34d339f2c 100644 --- a/src/Ai/Base/Actions/PositionAction.cpp +++ b/src/Ai/Base/Actions/PositionAction.cpp @@ -102,7 +102,7 @@ bool PositionAction::Execute(Event event) return false; } -bool MoveToPositionAction::Execute(Event event) +bool MoveToPositionAction::Execute(Event /*event*/) { PositionInfo pos = context->GetValue("position")->Get()[qualifier]; if (!pos.isSet()) @@ -123,7 +123,7 @@ bool MoveToPositionAction::isUseful() return pos.isSet() && distance > sPlayerbotAIConfig.followDistance && distance < sPlayerbotAIConfig.reactDistance; } -bool SetReturnPositionAction::Execute(Event event) +bool SetReturnPositionAction::Execute(Event /*event*/) { PositionMap& posMap = context->GetValue("position")->Get(); PositionInfo returnPos = posMap["return"]; diff --git a/src/Ai/Base/Actions/QueryQuestAction.cpp b/src/Ai/Base/Actions/QueryQuestAction.cpp index 5f5d63e08..9540a9bf8 100644 --- a/src/Ai/Base/Actions/QueryQuestAction.cpp +++ b/src/Ai/Base/Actions/QueryQuestAction.cpp @@ -7,7 +7,7 @@ #include "ChatHelper.h" #include "Event.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" void QueryQuestAction::TellObjective(std::string const name, uint32 available, uint32 required) { diff --git a/src/Ai/Base/Actions/QuestAction.cpp b/src/Ai/Base/Actions/QuestAction.cpp index dfe7bb9f1..f442f91a7 100644 --- a/src/Ai/Base/Actions/QuestAction.cpp +++ b/src/Ai/Base/Actions/QuestAction.cpp @@ -5,6 +5,7 @@ #include "QuestAction.h" #include +#include #include "Chat.h" #include "ChatHelper.h" @@ -116,7 +117,8 @@ bool QuestAction::CompleteQuest(Player* player, uint32 entry) player->CastedCreatureOrGO(creature, ObjectGuid(), spell_id); } }*/ - /*else*/ if (creature > 0) + /*else*/ + if (creature > 0) { if (CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(creature)) for (uint16 z = 0; z < creaturecount; ++z) @@ -432,7 +434,7 @@ bool QuestItemPushResultAction::Execute(Event event) return false; } -bool QuestUpdateFailedAction::Execute(Event event) +bool QuestUpdateFailedAction::Execute(Event /*event*/) { //opcode SMSG_QUESTUPDATE_FAILED is never sent...(yet?) return false; diff --git a/src/Ai/Base/Actions/RandomBotUpdateAction.cpp b/src/Ai/Base/Actions/RandomBotUpdateAction.cpp index 76ed46c90..7d7cba605 100644 --- a/src/Ai/Base/Actions/RandomBotUpdateAction.cpp +++ b/src/Ai/Base/Actions/RandomBotUpdateAction.cpp @@ -8,7 +8,7 @@ #include "Event.h" #include "Playerbots.h" -bool RandomBotUpdateAction::Execute(Event event) +bool RandomBotUpdateAction::Execute(Event /*event*/) { if (!sRandomPlayerbotMgr.IsRandomBot(bot)) return false; diff --git a/src/Ai/Base/Actions/ReachTargetActions.cpp b/src/Ai/Base/Actions/ReachTargetActions.cpp index a58e9b96e..03eecda65 100644 --- a/src/Ai/Base/Actions/ReachTargetActions.cpp +++ b/src/Ai/Base/Actions/ReachTargetActions.cpp @@ -10,7 +10,7 @@ #include "Playerbots.h" #include "ServerFacade.h" -bool ReachTargetAction::Execute(Event event) { return ReachCombatTo(AI_VALUE(Unit*, GetTargetName()), distance); } +bool ReachTargetAction::Execute(Event /*event*/) { return ReachCombatTo(AI_VALUE(Unit*, GetTargetName()), distance); } bool ReachTargetAction::isUseful() { diff --git a/src/Ai/Base/Actions/ReleaseSpiritAction.cpp b/src/Ai/Base/Actions/ReleaseSpiritAction.cpp index 9e3ec445d..9a923d4fd 100644 --- a/src/Ai/Base/Actions/ReleaseSpiritAction.cpp +++ b/src/Ai/Base/Actions/ReleaseSpiritAction.cpp @@ -78,7 +78,7 @@ void ReleaseSpiritAction::LogRelease(const std::string& releaseMsg, bool isAutoR } // AutoReleaseSpiritAction implementation -bool AutoReleaseSpiritAction::Execute(Event event) +bool AutoReleaseSpiritAction::Execute(Event /*event*/) { IncrementDeathCount(); bot->DurabilityRepairAll(false, 1.0f, false); @@ -214,7 +214,7 @@ bool AutoReleaseSpiritAction::ShouldDelayBattlegroundRelease() const return true; } -bool RepopAction::Execute(Event event) +bool RepopAction::Execute(Event /*event*/) { const GraveyardStruct* graveyard = GetGrave( AI_VALUE(uint32, "death count") > 10 || @@ -250,7 +250,7 @@ void RepopAction::PerformGraveyardTeleport(const GraveyardStruct* graveyard) con } // SelfResurrectAction implementation for Warlock's Soulstone Resurrection/Shaman's Reincarnation -bool SelfResurrectAction::Execute(Event event) +bool SelfResurrectAction::Execute(Event /*event*/) { if (!bot->IsAlive() && bot->GetUInt32Value(PLAYER_SELF_RES_SPELL)) { diff --git a/src/Ai/Base/Actions/RememberTaxiAction.cpp b/src/Ai/Base/Actions/RememberTaxiAction.cpp index af5a54037..16132d7cb 100644 --- a/src/Ai/Base/Actions/RememberTaxiAction.cpp +++ b/src/Ai/Base/Actions/RememberTaxiAction.cpp @@ -7,7 +7,7 @@ #include "Event.h" #include "LastMovementValue.h" -#include "Playerbots.h" +#include "AiObjectContext.h" bool RememberTaxiAction::Execute(Event event) { diff --git a/src/Ai/Base/Actions/RepairAllAction.cpp b/src/Ai/Base/Actions/RepairAllAction.cpp index a66ba3a1b..efb20d88d 100644 --- a/src/Ai/Base/Actions/RepairAllAction.cpp +++ b/src/Ai/Base/Actions/RepairAllAction.cpp @@ -9,7 +9,7 @@ #include "Event.h" #include "Playerbots.h" -bool RepairAllAction::Execute(Event event) +bool RepairAllAction::Execute(Event /*event*/) { GuidVector npcs = AI_VALUE(GuidVector, "nearest npcs"); for (ObjectGuid const guid : npcs) diff --git a/src/Ai/Base/Actions/ResetInstancesAction.cpp b/src/Ai/Base/Actions/ResetInstancesAction.cpp index cce5eef1e..eef29fc94 100644 --- a/src/Ai/Base/Actions/ResetInstancesAction.cpp +++ b/src/Ai/Base/Actions/ResetInstancesAction.cpp @@ -5,14 +5,13 @@ #include "ResetInstancesAction.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" -bool ResetInstancesAction::Execute(Event event) +bool ResetInstancesAction::Execute(Event /*event*/) { WorldPacket packet(CMSG_RESET_INSTANCES, 0); bot->GetSession()->HandleResetInstancesOpcode(packet); - botAI->TellMaster("Resetting all instances"); return true; } diff --git a/src/Ai/Base/Actions/RevealGatheringItemAction.cpp b/src/Ai/Base/Actions/RevealGatheringItemAction.cpp index 35cd7f8f0..72b0ef2ec 100644 --- a/src/Ai/Base/Actions/RevealGatheringItemAction.cpp +++ b/src/Ai/Base/Actions/RevealGatheringItemAction.cpp @@ -10,11 +10,11 @@ #include "Event.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" #include "ServerFacade.h" #include "NearestGameObjects.h" -bool RevealGatheringItemAction::Execute(Event event) +bool RevealGatheringItemAction::Execute(Event /*event*/) { if (!bot->GetGroup()) return false; diff --git a/src/Ai/Base/Actions/ReviveFromCorpseAction.cpp b/src/Ai/Base/Actions/ReviveFromCorpseAction.cpp index 4af96fc69..0051a5a49 100644 --- a/src/Ai/Base/Actions/ReviveFromCorpseAction.cpp +++ b/src/Ai/Base/Actions/ReviveFromCorpseAction.cpp @@ -9,7 +9,6 @@ #include "FleeManager.h" #include "GameGraveyard.h" #include "MapMgr.h" -#include "PlayerbotFactory.h" #include "Playerbots.h" #include "RandomPlayerbotMgr.h" #include "ServerFacade.h" @@ -74,7 +73,7 @@ bool ReviveFromCorpseAction::Execute(Event event) return true; } -bool FindCorpseAction::Execute(Event event) +bool FindCorpseAction::Execute(Event /*event*/) { if (bot->InBattleground()) return false; @@ -150,7 +149,7 @@ bool FindCorpseAction::Execute(Event event) { float rx, ry, rz; if (manager.CalculateDestination(&rx, &ry, &rz)) - moveToPos = WorldPosition(moveToPos.getMapId(), rx, ry, rz, 0.0); + moveToPos = WorldPosition(moveToPos.GetMapId(), rx, ry, rz, 0.0); else if (!moveToPos.GetReachableRandomPointOnGround(bot, reclaimDist, urand(0, 1))) moveToPos = corpsePos; } @@ -170,7 +169,7 @@ bool FindCorpseAction::Execute(Event event) { bot->GetMotionMaster()->Clear(); bot->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TELEPORTED | AURA_INTERRUPT_FLAG_CHANGE_MAP); - bot->TeleportTo(moveToPos.getMapId(), moveToPos.getX(), moveToPos.getY(), moveToPos.getZ(), 0); + bot->TeleportTo(moveToPos.GetMapId(), moveToPos.GetPositionX(), moveToPos.GetPositionY(), moveToPos.GetPositionZ(), 0); } moved = true; @@ -184,7 +183,7 @@ bool FindCorpseAction::Execute(Event event) if (deadTime < 10 * MINUTE && dCount < 5) // Look for corpse up to 30 minutes. { moved = - MoveTo(moveToPos.getMapId(), moveToPos.getX(), moveToPos.getY(), moveToPos.getZ(), false, false); + MoveTo(moveToPos.GetMapId(), moveToPos.GetPositionX(), moveToPos.GetPositionY(), moveToPos.GetPositionZ(), false, false); } if (!moved) @@ -237,10 +236,10 @@ GraveyardStruct const* SpiritHealerAction::GetGrave(bool startZone) { uint32 areaId = 0; uint32 zoneId = 0; - sMapMgr->GetZoneAndAreaId(bot->GetPhaseMask(), zoneId, areaId, travelPos.getMapId(), travelPos.getX(), - travelPos.getY(), travelPos.getZ()); - ClosestGrave = sGraveyard->GetClosestGraveyard(travelPos.getMapId(), travelPos.getX(), travelPos.getY(), - travelPos.getZ(), bot->GetTeamId(), areaId, zoneId, + sMapMgr->GetZoneAndAreaId(bot->GetPhaseMask(), zoneId, areaId, travelPos.GetMapId(), travelPos.GetPositionX(), + travelPos.GetPositionY(), travelPos.GetPositionZ()); + ClosestGrave = sGraveyard->GetClosestGraveyard(travelPos.GetMapId(), travelPos.GetPositionX(), travelPos.GetPositionY(), + travelPos.GetPositionZ(), bot->GetTeamId(), areaId, zoneId, bot->getClass() == CLASS_DEATH_KNIGHT); if (ClosestGrave) @@ -293,7 +292,7 @@ GraveyardStruct const* SpiritHealerAction::GetGrave(bool startZone) return ClosestGrave; } -bool SpiritHealerAction::Execute(Event event) +bool SpiritHealerAction::Execute(Event /*event*/) { Corpse* corpse = bot->GetCorpse(); if (!corpse) diff --git a/src/Ai/Base/Actions/RpgAction.cpp b/src/Ai/Base/Actions/RpgAction.cpp index 919e25c58..73068a0b1 100644 --- a/src/Ai/Base/Actions/RpgAction.cpp +++ b/src/Ai/Base/Actions/RpgAction.cpp @@ -7,7 +7,6 @@ #include -#include "BattlegroundMgr.h" #include "ChatHelper.h" #include "EmoteAction.h" #include "Event.h" @@ -16,7 +15,7 @@ #include "ServerFacade.h" #include "RpgSubActions.h" -bool RpgAction::Execute(Event event) +bool RpgAction::Execute(Event /*event*/) { GuidPosition guidP = AI_VALUE(GuidPosition, "rpg target"); if (!guidP && botAI->GetMaster()) @@ -85,7 +84,7 @@ bool RpgAction::SetNextRpgAction() isChecked = true; Action* action = botAI->GetAiObjectContext()->GetAction(nextAction.getName()); - if (!dynamic_cast(action) || !action->isPossible() || !action->isUseful()) + if (!dynamic_cast(action) || !action->isUseful() || !action->isPossible()) continue; actions.push_back(action); diff --git a/src/Ai/Base/Actions/RpgSubActions.cpp b/src/Ai/Base/Actions/RpgSubActions.cpp index 43bff6ab8..de16ed17d 100644 --- a/src/Ai/Base/Actions/RpgSubActions.cpp +++ b/src/Ai/Base/Actions/RpgSubActions.cpp @@ -99,7 +99,7 @@ Event RpgSubAction::ActionEvent(Event event) { return event; } bool RpgStayAction::isUseful() { return rpg->InRange() && !botAI->HasRealPlayerMaster(); } -bool RpgStayAction::Execute(Event event) +bool RpgStayAction::Execute(Event /*event*/) { bot->PlayerTalkClass->SendCloseGossip(); @@ -109,7 +109,7 @@ bool RpgStayAction::Execute(Event event) bool RpgWorkAction::isUseful() { return rpg->InRange() && !botAI->HasRealPlayerMaster(); } -bool RpgWorkAction::Execute(Event event) +bool RpgWorkAction::Execute(Event /*event*/) { bot->HandleEmoteCommand(EMOTE_STATE_USE_STANDING); rpg->AfterExecute(); @@ -118,7 +118,7 @@ bool RpgWorkAction::Execute(Event event) bool RpgEmoteAction::isUseful() { return rpg->InRange() && !botAI->HasRealPlayerMaster(); } -bool RpgEmoteAction::Execute(Event event) +bool RpgEmoteAction::Execute(Event /*event*/) { uint32 type = TalkAction::GetRandomEmote(rpg->guidP().GetUnit()); @@ -133,7 +133,7 @@ bool RpgEmoteAction::Execute(Event event) return true; } -bool RpgCancelAction::Execute(Event event) +bool RpgCancelAction::Execute(Event /*event*/) { RESET_AI_VALUE(GuidPosition, "rpg target"); rpg->OnExecute(""); @@ -142,7 +142,7 @@ bool RpgCancelAction::Execute(Event event) bool RpgTaxiAction::isUseful() { return rpg->InRange() && !botAI->HasRealPlayerMaster(); } -bool RpgTaxiAction::Execute(Event event) +bool RpgTaxiAction::Execute(Event /*event*/) { GuidPosition guidP = rpg->guidP(); @@ -150,7 +150,7 @@ bool RpgTaxiAction::Execute(Event event) bot->GetSession()->HandleCancelMountAuraOpcode(emptyPacket); uint32 node = - sObjectMgr->GetNearestTaxiNode(guidP.getX(), guidP.getY(), guidP.getZ(), guidP.getMapId(), bot->GetTeamId()); + sObjectMgr->GetNearestTaxiNode(guidP.GetPositionX(), guidP.GetPositionY(), guidP.GetPositionZ(), guidP.GetMapId(), bot->GetTeamId()); std::vector nodes; for (uint32 i = 0; i < sTaxiPathStore.GetNumRows(); ++i) @@ -203,12 +203,12 @@ bool RpgTaxiAction::Execute(Event event) return true; } -bool RpgDiscoverAction::Execute(Event event) +bool RpgDiscoverAction::Execute(Event /*event*/) { GuidPosition guidP = rpg->guidP(); uint32 node = - sObjectMgr->GetNearestTaxiNode(guidP.getX(), guidP.getY(), guidP.getZ(), guidP.getMapId(), bot->GetTeamId()); + sObjectMgr->GetNearestTaxiNode(guidP.GetPositionX(), guidP.GetPositionY(), guidP.GetPositionZ(), guidP.GetMapId(), bot->GetTeamId()); if (!node) return false; @@ -222,7 +222,7 @@ bool RpgDiscoverAction::Execute(Event event) std::string const RpgStartQuestAction::ActionName() { return "accept all quests"; } -Event RpgStartQuestAction::ActionEvent(Event event) +Event RpgStartQuestAction::ActionEvent(Event /*event*/) { WorldPacket p(CMSG_QUESTGIVER_ACCEPT_QUEST); p << rpg->guid(); @@ -232,7 +232,7 @@ Event RpgStartQuestAction::ActionEvent(Event event) std::string const RpgEndQuestAction::ActionName() { return "talk to quest giver"; } -Event RpgEndQuestAction::ActionEvent(Event event) +Event RpgEndQuestAction::ActionEvent(Event /*event*/) { WorldPacket p(CMSG_QUESTGIVER_COMPLETE_QUEST); p << rpg->guid(); @@ -242,17 +242,17 @@ Event RpgEndQuestAction::ActionEvent(Event event) std::string const RpgBuyAction::ActionName() { return "buy"; } -Event RpgBuyAction::ActionEvent(Event event) { return Event("rpg action", "vendor"); } +Event RpgBuyAction::ActionEvent(Event /*event*/) { return Event("rpg action", "vendor"); } std::string const RpgSellAction::ActionName() { return "sell"; } -Event RpgSellAction::ActionEvent(Event event) { return Event("rpg action", "vendor"); } +Event RpgSellAction::ActionEvent(Event /*event*/) { return Event("rpg action", "vendor"); } std::string const RpgRepairAction::ActionName() { return "repair"; } std::string const RpgTrainAction::ActionName() { return "trainer"; } -bool RpgHealAction::Execute(Event event) +bool RpgHealAction::Execute(Event /*event*/) { bool retVal = false; @@ -287,21 +287,21 @@ std::string const RpgBuyPetitionAction::ActionName() { return "buy petition"; } std::string const RpgUseAction::ActionName() { return "use"; } -Event RpgUseAction::ActionEvent(Event event) +Event RpgUseAction::ActionEvent(Event /*event*/) { return Event("rpg action", chat->FormatWorldobject(rpg->guidP().GetWorldObject())); } std::string const RpgSpellAction::ActionName() { return "cast random spell"; } -Event RpgSpellAction::ActionEvent(Event event) +Event RpgSpellAction::ActionEvent(Event /*event*/) { return Event("rpg action", chat->FormatWorldobject(rpg->guidP().GetWorldObject())); } std::string const RpgCraftAction::ActionName() { return "craft random item"; } -Event RpgCraftAction::ActionEvent(Event event) +Event RpgCraftAction::ActionEvent(Event /*event*/) { return Event("rpg action", chat->FormatWorldobject(rpg->guidP().GetWorldObject())); } @@ -341,7 +341,7 @@ std::vector RpgTradeUsefulAction::CanGiveItems(GuidPosition guidPosition) return giveItems; } -bool RpgTradeUsefulAction::Execute(Event event) +bool RpgTradeUsefulAction::Execute(Event /*event*/) { GuidPosition guidP = AI_VALUE(GuidPosition, "rpg target"); @@ -416,7 +416,7 @@ bool RpgDuelAction::isUseful() return true; } -bool RpgDuelAction::Execute(Event event) +bool RpgDuelAction::Execute(Event /*event*/) { GuidPosition guidP = AI_VALUE(GuidPosition, "rpg target"); @@ -434,7 +434,7 @@ bool RpgMountAnimAction::isUseful() return AI_VALUE2(bool, "mounted", "self target") && !AI_VALUE2(bool, "moving", "self target"); } -bool RpgMountAnimAction::Execute(Event event) +bool RpgMountAnimAction::Execute(Event /*event*/) { WorldPacket p; bot->GetSession()->HandleMountSpecialAnimOpcode(p); diff --git a/src/Ai/Base/Actions/RtiAction.cpp b/src/Ai/Base/Actions/RtiAction.cpp index b34b3eec3..807a59724 100644 --- a/src/Ai/Base/Actions/RtiAction.cpp +++ b/src/Ai/Base/Actions/RtiAction.cpp @@ -55,7 +55,7 @@ void RtiAction::AppendRti(std::ostringstream& out, std::string const type) out << " (" << target->GetName() << ")"; } -bool MarkRtiAction::Execute(Event event) +bool MarkRtiAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) diff --git a/src/Ai/Base/Actions/RtscAction.cpp b/src/Ai/Base/Actions/RtscAction.cpp index 4ed91d29c..8309a4f09 100644 --- a/src/Ai/Base/Actions/RtscAction.cpp +++ b/src/Ai/Base/Actions/RtscAction.cpp @@ -80,8 +80,9 @@ bool RTSCAction::Execute(Event event) SET_AI_VALUE2(WorldPosition, "RTSC saved location", locationName, spellPosition); Creature* wpCreature = - bot->SummonCreature(15631, spellPosition.getX(), spellPosition.getY(), spellPosition.getZ(), - spellPosition.getO(), TEMPSUMMON_TIMED_DESPAWN, 2000.0f); + bot->SummonCreature(15631, spellPosition.GetPositionX(), spellPosition.GetPositionY(), + spellPosition.GetPositionZ(), spellPosition.GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, + 2000.0f); wpCreature->SetObjectScale(0.5f); return true; @@ -110,8 +111,9 @@ bool RTSCAction::Execute(Event event) if (spellPosition) { Creature* wpCreature = - bot->SummonCreature(15631, spellPosition.getX(), spellPosition.getY(), spellPosition.getZ(), - spellPosition.getO(), TEMPSUMMON_TIMED_DESPAWN, 2000.0f); + bot->SummonCreature(15631, spellPosition.GetPositionX(), spellPosition.GetPositionY(), + spellPosition.GetPositionZ(), spellPosition.GetOrientation(), + TEMPSUMMON_TIMED_DESPAWN, 2000.0f); wpCreature->SetObjectScale(0.5f); } diff --git a/src/Ai/Base/Actions/SayAction.cpp b/src/Ai/Base/Actions/SayAction.cpp index 050d7ddbb..4505a76ef 100644 --- a/src/Ai/Base/Actions/SayAction.cpp +++ b/src/Ai/Base/Actions/SayAction.cpp @@ -9,9 +9,7 @@ #include #include -#include "ChannelMgr.h" #include "Event.h" -#include "GuildMgr.h" #include "PlayerbotTextMgr.h" #include "Playerbots.h" @@ -56,7 +54,7 @@ static const std::unordered_set noReplyMsgStarts = {"e ", "accept " SayAction::SayAction(PlayerbotAI* botAI) : Action(botAI, "say"), Qualified() {} -bool SayAction::Execute(Event event) +bool SayAction::Execute(Event /*event*/) { std::string text = ""; std::map placeholders; @@ -92,7 +90,6 @@ bool SayAction::Execute(Event event) } // set delay before next say - time_t lastSaid = AI_VALUE2(time_t, "last said", qualifier); uint32 nextTime = time(nullptr) + urand(1, 30); botAI->GetAiObjectContext()->GetValue("last said", qualifier)->Set(nextTime); diff --git a/src/Ai/Base/Actions/SecurityCheckAction.cpp b/src/Ai/Base/Actions/SecurityCheckAction.cpp index ede59440e..512d7357f 100644 --- a/src/Ai/Base/Actions/SecurityCheckAction.cpp +++ b/src/Ai/Base/Actions/SecurityCheckAction.cpp @@ -14,7 +14,7 @@ bool SecurityCheckAction::isUseful() botAI->GetMaster()->GetSession()->GetSecurity() < SEC_GAMEMASTER && !GET_PLAYERBOT_AI(botAI->GetMaster()); } -bool SecurityCheckAction::Execute(Event event) +bool SecurityCheckAction::Execute(Event /*event*/) { if (Group* group = bot->GetGroup()) { diff --git a/src/Ai/Base/Actions/SeeSpellAction.cpp b/src/Ai/Base/Actions/SeeSpellAction.cpp index bec9577cf..f7d7eab23 100644 --- a/src/Ai/Base/Actions/SeeSpellAction.cpp +++ b/src/Ai/Base/Actions/SeeSpellAction.cpp @@ -7,7 +7,6 @@ #include "Event.h" #include "Formations.h" -#include "PathGenerator.h" #include "Playerbots.h" #include "RTSCValues.h" #include "RtscAction.h" @@ -134,8 +133,8 @@ bool SeeSpellAction::Execute(Event event) SET_AI_VALUE2(WorldPosition, "RTSC saved location", locationName, spellPosition); Creature* wpCreature = - bot->SummonCreature(15631, spellPosition.getX(), spellPosition.getY(), spellPosition.getZ(), - spellPosition.getO(), TEMPSUMMON_TIMED_DESPAWN, 2000.0f); + bot->SummonCreature(15631, spellPosition.GetPositionX(), spellPosition.GetPositionY(), spellPosition.GetPositionZ(), + spellPosition.GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 2000.0f); wpCreature->SetObjectScale(0.5f); RESET_AI_VALUE(std::string, "RTSC next spell action"); @@ -167,14 +166,14 @@ bool SeeSpellAction::MoveToSpell(WorldPosition& spellPosition, bool inFormation) PositionMap& posMap = AI_VALUE(PositionMap&, "position"); PositionInfo stayPosition = posMap["stay"]; - stayPosition.Set(spellPosition.getX(), spellPosition.getY(), spellPosition.getZ(), spellPosition.getMapId()); + stayPosition.Set(spellPosition.GetPositionX(), spellPosition.GetPositionY(), spellPosition.GetPositionZ(), spellPosition.GetMapId()); posMap["stay"] = stayPosition; } - if (bot->IsWithinLOS(spellPosition.getX(), spellPosition.getY(), spellPosition.getZ())) - return MoveNear(spellPosition.getMapId(), spellPosition.getX(), spellPosition.getY(), spellPosition.getZ(), 0); + if (bot->IsWithinLOS(spellPosition.GetPositionX(), spellPosition.GetPositionY(), spellPosition.GetPositionZ())) + return MoveNear(spellPosition.GetMapId(), spellPosition.GetPositionX(), spellPosition.GetPositionY(), spellPosition.GetPositionZ(), 0); - return MoveTo(spellPosition.getMapId(), spellPosition.getX(), spellPosition.getY(), spellPosition.getZ(), false, + return MoveTo(spellPosition.GetMapId(), spellPosition.GetPositionX(), spellPosition.GetPositionY(), spellPosition.GetPositionZ(), false, false); } diff --git a/src/Ai/Base/Actions/SetCraftAction.cpp b/src/Ai/Base/Actions/SetCraftAction.cpp index f062ce5c2..f8682c45e 100644 --- a/src/Ai/Base/Actions/SetCraftAction.cpp +++ b/src/Ai/Base/Actions/SetCraftAction.cpp @@ -49,9 +49,7 @@ bool SetCraftAction::Execute(Event event) if (skillSpells.empty()) { for (SkillLineAbilityEntry const* skillLine : sSkillLineAbilityStore) - { skillSpells[skillLine->Spell] = skillLine; - } } data.required.clear(); @@ -78,9 +76,7 @@ bool SetCraftAction::Execute(Event event) for (uint32 x = 0; x < MAX_SPELL_REAGENTS; ++x) { if (spellInfo->Reagent[x] <= 0) - { continue; - } uint32 itemid = spellInfo->Reagent[x]; uint32 reagentsRequired = spellInfo->ReagentCount[x]; @@ -132,9 +128,8 @@ void SetCraftAction::TellCraft() if (ItemTemplate const* reagent = sObjectMgr->GetItemTemplate(item)) { if (first) - { first = false; - } + else out << ", "; @@ -142,9 +137,7 @@ void SetCraftAction::TellCraft() uint32 given = data.obtained[item]; if (given) - { out << "|cffffff00(x" << given << " given)|r "; - } } } diff --git a/src/Ai/Base/Actions/SetHomeAction.cpp b/src/Ai/Base/Actions/SetHomeAction.cpp index 44f3c7b49..0fa2ef50b 100644 --- a/src/Ai/Base/Actions/SetHomeAction.cpp +++ b/src/Ai/Base/Actions/SetHomeAction.cpp @@ -8,7 +8,7 @@ #include "Event.h" #include "Playerbots.h" -bool SetHomeAction::Execute(Event event) +bool SetHomeAction::Execute(Event /*event*/) { Player* master = GetMaster(); diff --git a/src/Ai/Base/Actions/StatsAction.cpp b/src/Ai/Base/Actions/StatsAction.cpp index f6872c846..aaf8d1bd1 100644 --- a/src/Ai/Base/Actions/StatsAction.cpp +++ b/src/Ai/Base/Actions/StatsAction.cpp @@ -7,9 +7,9 @@ #include "ChatHelper.h" #include "Event.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" -bool StatsAction::Execute(Event event) +bool StatsAction::Execute(Event /*event*/) { std::ostringstream out; diff --git a/src/Ai/Base/Actions/StayActions.cpp b/src/Ai/Base/Actions/StayActions.cpp index dbc7abd09..ad10e8990 100644 --- a/src/Ai/Base/Actions/StayActions.cpp +++ b/src/Ai/Base/Actions/StayActions.cpp @@ -39,7 +39,7 @@ bool StayActionBase::Stay() return true; } -bool StayAction::Execute(Event event) { return Stay(); } +bool StayAction::Execute(Event /*event*/) { return Stay(); } bool StayAction::isUseful() { @@ -49,9 +49,7 @@ bool StayAction::isUseful() { const float distance = bot->GetDistance(stayPosition.x, stayPosition.y, stayPosition.z); if (sPlayerbotAIConfig.followDistance) - { return false; - } } // move from group takes priority over stay as it's added and removed automatically @@ -64,7 +62,7 @@ bool StayAction::isUseful() return AI_VALUE2(bool, "moving", "self target"); } -bool SitAction::Execute(Event event) +bool SitAction::Execute(Event /*event*/) { if (bot->isMoving()) return false; diff --git a/src/Ai/Base/Actions/SuggestWhatToDoAction.cpp b/src/Ai/Base/Actions/SuggestWhatToDoAction.cpp index 9012443be..5bd191140 100644 --- a/src/Ai/Base/Actions/SuggestWhatToDoAction.cpp +++ b/src/Ai/Base/Actions/SuggestWhatToDoAction.cpp @@ -7,25 +7,19 @@ #include "SuggestWhatToDoAction.h" #include "ServerFacade.h" -#include "ChannelMgr.h" #include "Event.h" #include "ItemVisitors.h" #include "AiFactory.h" #include "ChatHelper.h" #include "Playerbots.h" -#include "PlayerbotTextMgr.h" -#include "Config.h" #include "BroadcastHelper.h" #include "AiFactory.h" -#include "ChannelMgr.h" #include "ChatHelper.h" -#include "Config.h" #include "Event.h" -#include "GuildMgr.h" #include "ItemVisitors.h" -#include "PlayerbotTextMgr.h" #include "Playerbots.h" #include "ServerFacade.h" +#include "Channel.h" enum eTalkType { @@ -62,7 +56,7 @@ bool SuggestWhatToDoAction::isUseful() return (time(0) - lastSaid) > 30; } -bool SuggestWhatToDoAction::Execute(Event event) +bool SuggestWhatToDoAction::Execute(Event /*event*/) { uint32 index = rand() % suggestions.size(); auto fnct_ptr = suggestions[index]; @@ -258,7 +252,7 @@ private: SuggestDungeonAction::SuggestDungeonAction(PlayerbotAI* botAI) : SuggestWhatToDoAction(botAI, "suggest dungeon") {} -bool SuggestDungeonAction::Execute(Event event) +bool SuggestDungeonAction::Execute(Event /*event*/) { // TODO: use PlayerbotDungeonRepository::instance() @@ -325,7 +319,7 @@ bool SuggestDungeonAction::Execute(Event event) SuggestTradeAction::SuggestTradeAction(PlayerbotAI* botAI) : SuggestWhatToDoAction(botAI, "suggest trade") {} -bool SuggestTradeAction::Execute(Event event) +bool SuggestTradeAction::Execute(Event /*event*/) { uint32 quality = urand(0, 100); if (quality > 95) diff --git a/src/Ai/Base/Actions/TameAction.cpp b/src/Ai/Base/Actions/TameAction.cpp index 5b3eda103..e968a0b01 100644 --- a/src/Ai/Base/Actions/TameAction.cpp +++ b/src/Ai/Base/Actions/TameAction.cpp @@ -6,12 +6,10 @@ #include "TameAction.h" #include #include -#include #include #include #include #include "DBCStructure.h" -#include "Log.h" #include "ObjectMgr.h" #include "Pet.h" #include "Player.h" diff --git a/src/Ai/Base/Actions/TeleportAction.cpp b/src/Ai/Base/Actions/TeleportAction.cpp index 65aa24e09..b981decbf 100644 --- a/src/Ai/Base/Actions/TeleportAction.cpp +++ b/src/Ai/Base/Actions/TeleportAction.cpp @@ -7,9 +7,12 @@ #include "Event.h" #include "LastMovementValue.h" -#include "Playerbots.h" +#include "AiObjectContext.h" +#include "PlayerbotAI.h" +#include "SpellMgr.h" +#include "Spell.h" -bool TeleportAction::Execute(Event event) +bool TeleportAction::Execute(Event /*event*/) { /* // List of allowed portal entries (you can populate this dynamically) @@ -74,7 +77,7 @@ bool TeleportAction::Execute(Event event) continue; uint32 spellId = goInfo->spellcaster.spellId; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); + SpellInfo const* spellInfo = SpellMgr::instance()->GetSpellInfo(spellId); if (!spellInfo || !spellInfo->HasEffect(SPELL_EFFECT_TELEPORT_UNITS)) continue; diff --git a/src/Ai/Base/Actions/TellLosAction.cpp b/src/Ai/Base/Actions/TellLosAction.cpp index 13852bdc0..3d18c5826 100644 --- a/src/Ai/Base/Actions/TellLosAction.cpp +++ b/src/Ai/Base/Actions/TellLosAction.cpp @@ -4,11 +4,9 @@ */ #include "TellLosAction.h" -#include #include #include "ChatHelper.h" -#include "DBCStores.h" #include "Event.h" #include "ItemTemplate.h" #include "ObjectMgr.h" @@ -77,7 +75,7 @@ void TellLosAction::ListGameObjects(std::string const title, GuidVector gos) } } -bool TellAuraAction::Execute(Event event) +bool TellAuraAction::Execute(Event /*event*/) { botAI->TellMaster("--- Auras ---"); sLog->outMessage("playerbot", LOG_LEVEL_DEBUG, "--- Auras ---"); @@ -130,7 +128,7 @@ bool TellAuraAction::Execute(Event event) return true; } -bool TellEstimatedDpsAction::Execute(Event event) +bool TellEstimatedDpsAction::Execute(Event /*event*/) { float dps = AI_VALUE(float, "estimated group dps"); botAI->TellMaster("Estimated Group DPS: " + std::to_string(dps)); diff --git a/src/Ai/Base/Actions/TellMasterAction.cpp b/src/Ai/Base/Actions/TellMasterAction.cpp index 4b8d96d56..6156ce081 100644 --- a/src/Ai/Base/Actions/TellMasterAction.cpp +++ b/src/Ai/Base/Actions/TellMasterAction.cpp @@ -8,13 +8,13 @@ #include "Event.h" #include "Playerbots.h" -bool TellMasterAction::Execute(Event event) +bool TellMasterAction::Execute(Event /*event*/) { botAI->TellMaster(text); return true; } -bool OutOfReactRangeAction::Execute(Event event) +bool OutOfReactRangeAction::Execute(Event /*event*/) { botAI->TellMaster("Wait for me!"); return true; diff --git a/src/Ai/Base/Actions/TellReputationAction.cpp b/src/Ai/Base/Actions/TellReputationAction.cpp index e08a38d84..0ccff606a 100644 --- a/src/Ai/Base/Actions/TellReputationAction.cpp +++ b/src/Ai/Base/Actions/TellReputationAction.cpp @@ -6,10 +6,10 @@ #include "TellReputationAction.h" #include "Event.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" #include "ReputationMgr.h" -bool TellReputationAction::Execute(Event event) +bool TellReputationAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) diff --git a/src/Ai/Base/Actions/TellTargetAction.cpp b/src/Ai/Base/Actions/TellTargetAction.cpp index 7ecd8efb5..422d5e542 100644 --- a/src/Ai/Base/Actions/TellTargetAction.cpp +++ b/src/Ai/Base/Actions/TellTargetAction.cpp @@ -6,10 +6,11 @@ #include "TellTargetAction.h" #include "Event.h" -#include "Playerbots.h" #include "ThreatMgr.h" +#include "AiObjectContext.h" +#include "PlayerbotAI.h" -bool TellTargetAction::Execute(Event event) +bool TellTargetAction::Execute(Event /*event*/) { Unit* target = context->GetValue("current target")->Get(); if (target) @@ -24,7 +25,7 @@ bool TellTargetAction::Execute(Event event) return true; } -bool TellAttackersAction::Execute(Event event) +bool TellAttackersAction::Execute(Event /*event*/) { botAI->TellMaster("--- Attackers ---"); diff --git a/src/Ai/Base/Actions/TradeAction.cpp b/src/Ai/Base/Actions/TradeAction.cpp index b6f6912be..810710abb 100644 --- a/src/Ai/Base/Actions/TradeAction.cpp +++ b/src/Ai/Base/Actions/TradeAction.cpp @@ -8,7 +8,7 @@ #include "Event.h" #include "ItemCountValue.h" #include "ItemVisitors.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" bool TradeAction::Execute(Event event) { @@ -106,9 +106,7 @@ bool TradeAction::TradeItem(Item const* item, int8 slot) for (uint8 i = 0; i < TRADE_SLOT_TRADED_COUNT && tradeSlot == -1; i++) { if (pTrade->GetItem(TradeSlots(i)) == nullptr) - { tradeSlot = i; - } } } diff --git a/src/Ai/Base/Actions/TradeStatusAction.cpp b/src/Ai/Base/Actions/TradeStatusAction.cpp index 3057fff09..1c6ffc8ee 100644 --- a/src/Ai/Base/Actions/TradeStatusAction.cpp +++ b/src/Ai/Base/Actions/TradeStatusAction.cpp @@ -276,14 +276,11 @@ bool TradeStatusAction::CheckTrade() botAI->PlaySound(TEXT_EMOTE_NO); return false; } - success = true; } } else - { success = true; - } if (success) { @@ -340,9 +337,7 @@ int32 TradeStatusAction::CalculateCost(Player* player, bool sell) if (!craftData.IsEmpty()) { if (player == trader && !sell && craftData.IsRequired(proto->ItemId)) - { continue; - } if (player == bot && sell && craftData.itemId == proto->ItemId && craftData.IsFulfilled()) { @@ -352,13 +347,11 @@ int32 TradeStatusAction::CalculateCost(Player* player, bool sell) } if (sell) - { sum += item->GetCount() * proto->SellPrice * sRandomPlayerbotMgr.GetSellMultiplier(bot); - } + else - { sum += item->GetCount() * proto->BuyPrice * sRandomPlayerbotMgr.GetBuyMultiplier(bot); - } + } return sum; diff --git a/src/Ai/Base/Actions/TrainerAction.cpp b/src/Ai/Base/Actions/TrainerAction.cpp index e377fa3eb..0f3256099 100644 --- a/src/Ai/Base/Actions/TrainerAction.cpp +++ b/src/Ai/Base/Actions/TrainerAction.cpp @@ -155,7 +155,7 @@ void TrainerAction::TellFooter(uint32 totalCost) } } -bool MaintenanceAction::Execute(Event event) +bool MaintenanceAction::Execute(Event /*event*/) { if (!sPlayerbotAIConfig.maintenanceCommand) { @@ -255,7 +255,7 @@ bool MaintenanceAction::Execute(Event event) return true; } -bool RemoveGlyphAction::Execute(Event event) +bool RemoveGlyphAction::Execute(Event /*event*/) { for (uint32 slotIndex = 0; slotIndex < MAX_GLYPH_SLOT_INDEX; ++slotIndex) { @@ -265,7 +265,7 @@ bool RemoveGlyphAction::Execute(Event event) return true; } -bool AutoGearAction::Execute(Event event) +bool AutoGearAction::Execute(Event /*event*/) { if (!sPlayerbotAIConfig.autoGearCommand) { diff --git a/src/Ai/Base/Actions/TravelAction.cpp b/src/Ai/Base/Actions/TravelAction.cpp index f0afef01b..3516426ce 100644 --- a/src/Ai/Base/Actions/TravelAction.cpp +++ b/src/Ai/Base/Actions/TravelAction.cpp @@ -10,7 +10,7 @@ #include "GridNotifiersImpl.h" #include "Playerbots.h" -bool TravelAction::Execute(Event event) +bool TravelAction::Execute(Event /*event*/) { TravelTarget* target = AI_VALUE(TravelTarget*, "travel target"); @@ -60,12 +60,14 @@ bool TravelAction::isUseful() (!AI_VALUE(GuidPosition, "rpg target") || !AI_VALUE(ObjectGuid, "pull target")); } -bool MoveToDarkPortalAction::Execute(Event event) +bool MoveToDarkPortalAction::Execute(Event /*event*/) { if (bot->GetGroup()) + { if (bot->GetGroup()->GetLeaderGUID() != bot->GetGUID() && !GET_PLAYERBOT_AI(GET_PLAYERBOT_AI(bot)->GetGroupLeader())) return false; + } if (bot->GetLevel() > 57) { @@ -111,7 +113,7 @@ bool MoveToDarkPortalAction::Execute(Event event) bool MoveToDarkPortalAction::isUseful() { return bot->GetLevel() > 54; } -bool DarkPortalAzerothAction::Execute(Event event) +bool DarkPortalAzerothAction::Execute(Event /*event*/) { if (bot->GetLevel() > 57) { @@ -126,7 +128,7 @@ bool DarkPortalAzerothAction::Execute(Event event) bool DarkPortalAzerothAction::isUseful() { return bot->GetLevel() > 57; } -bool MoveFromDarkPortalAction::Execute(Event event) +bool MoveFromDarkPortalAction::Execute(Event /*event*/) { RESET_AI_VALUE(GuidPosition, "rpg target"); diff --git a/src/Ai/Base/Actions/UnlockItemAction.cpp b/src/Ai/Base/Actions/UnlockItemAction.cpp index 367a4fcbf..7a4b3bd17 100644 --- a/src/Ai/Base/Actions/UnlockItemAction.cpp +++ b/src/Ai/Base/Actions/UnlockItemAction.cpp @@ -1,14 +1,13 @@ #include "UnlockItemAction.h" #include "PlayerbotAI.h" #include "ItemTemplate.h" -#include "WorldPacket.h" #include "Player.h" #include "ObjectMgr.h" #include "SpellInfo.h" -#define PICK_LOCK_SPELL_ID 1804 +inline constexpr uint32_t PICK_LOCK_SPELL_ID = 1804; -bool UnlockItemAction::Execute(Event event) +bool UnlockItemAction::Execute(Event /*event*/) { bool foundLockedItem = false; @@ -32,7 +31,5 @@ void UnlockItemAction::UnlockItem(Item* item) botAI->TellMaster(out.str()); } else - { botAI->TellError("Failed to cast Pick Lock."); - } } diff --git a/src/Ai/Base/Actions/UnlockTradedItemAction.cpp b/src/Ai/Base/Actions/UnlockTradedItemAction.cpp index 047cd2e20..90cdbfb02 100644 --- a/src/Ai/Base/Actions/UnlockTradedItemAction.cpp +++ b/src/Ai/Base/Actions/UnlockTradedItemAction.cpp @@ -1,11 +1,11 @@ #include "UnlockTradedItemAction.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" #include "TradeData.h" #include "SpellInfo.h" -#define PICK_LOCK_SPELL_ID 1804 +inline constexpr uint32_t PICK_LOCK_SPELL_ID = 1804; -bool UnlockTradedItemAction::Execute(Event event) +bool UnlockTradedItemAction::Execute(Event /*event*/) { Player* trader = bot->GetTrader(); if (!trader) diff --git a/src/Ai/Base/Actions/UseItemAction.cpp b/src/Ai/Base/Actions/UseItemAction.cpp index 473816e3e..3483986f9 100644 --- a/src/Ai/Base/Actions/UseItemAction.cpp +++ b/src/Ai/Base/Actions/UseItemAction.cpp @@ -7,9 +7,9 @@ #include "ChatHelper.h" #include "Event.h" +#include "ItemPackets.h" #include "ItemUsageValue.h" #include "Playerbots.h" -#include "ItemPackets.h" bool UseItemAction::Execute(Event event) { @@ -416,14 +416,7 @@ bool UseHearthStone::Execute(Event event) bool UseHearthStone::isUseful() { return !bot->InBattleground(); } -bool UseRandomRecipe::isUseful() -{ - return !bot->IsInCombat() && !botAI->HasActivePlayerMaster() && !bot->InBattleground(); -} - -bool UseRandomRecipe::isPossible() { return AI_VALUE2(uint32, "item count", "recipe") > 0; } - -bool UseRandomRecipe::Execute(Event event) +bool UseRandomRecipe::Execute(Event /*event*/) { std::vector recipes = AI_VALUE2(std::vector, "inventory items", "recipe"); @@ -445,14 +438,14 @@ bool UseRandomRecipe::Execute(Event event) return used; } -bool UseRandomQuestItem::isUseful() +bool UseRandomRecipe::isUseful() { - return !botAI->HasActivePlayerMaster() && !bot->InBattleground() && !bot->HasUnitState(UNIT_STATE_IN_FLIGHT); + return !bot->IsInCombat() && !botAI->HasActivePlayerMaster() && !bot->InBattleground(); } -bool UseRandomQuestItem::isPossible() { return AI_VALUE2(uint32, "item count", "quest") > 0; } +bool UseRandomRecipe::isPossible() { return AI_VALUE2(uint32, "item count", "recipe") > 0; } -bool UseRandomQuestItem::Execute(Event event) +bool UseRandomQuestItem::Execute(Event /*event*/) { Unit* unitTarget = nullptr; ObjectGuid goTarget; @@ -478,7 +471,6 @@ bool UseRandomQuestItem::Execute(Event event) break; } } - } if (!item) @@ -490,3 +482,10 @@ bool UseRandomQuestItem::Execute(Event event) return used; } + +bool UseRandomQuestItem::isUseful() +{ + return !botAI->HasActivePlayerMaster() && !bot->InBattleground() && !bot->HasUnitState(UNIT_STATE_IN_FLIGHT); +} + +bool UseRandomQuestItem::isPossible() { return AI_VALUE2(uint32, "item count", "quest") > 0; } diff --git a/src/Ai/Base/Actions/UseItemAction.h b/src/Ai/Base/Actions/UseItemAction.h index 2b0c7e191..263bc29dc 100644 --- a/src/Ai/Base/Actions/UseItemAction.h +++ b/src/Ai/Base/Actions/UseItemAction.h @@ -69,8 +69,8 @@ class UseHearthStone : public UseItemAction public: UseHearthStone(PlayerbotAI* botAI) : UseItemAction(botAI, "hearthstone", true) {} - bool isUseful() override; bool Execute(Event event) override; + bool isUseful() override; }; class UseRandomRecipe : public UseItemAction @@ -78,9 +78,9 @@ class UseRandomRecipe : public UseItemAction public: UseRandomRecipe(PlayerbotAI* botAI) : UseItemAction(botAI, "random recipe", true) {} + bool Execute(Event event) override; bool isUseful() override; bool isPossible() override; - bool Execute(Event event) override; }; class UseRandomQuestItem : public UseItemAction @@ -88,9 +88,9 @@ class UseRandomQuestItem : public UseItemAction public: UseRandomQuestItem(PlayerbotAI* botAI) : UseItemAction(botAI, "random quest item", true) {} + bool Execute(Event event) override; bool isUseful() override; bool isPossible() override; - bool Execute(Event event) override; }; #endif diff --git a/src/Ai/Base/Actions/UseMeetingStoneAction.cpp b/src/Ai/Base/Actions/UseMeetingStoneAction.cpp index b33442918..0862be68f 100644 --- a/src/Ai/Base/Actions/UseMeetingStoneAction.cpp +++ b/src/Ai/Base/Actions/UseMeetingStoneAction.cpp @@ -55,16 +55,14 @@ bool UseMeetingStoneAction::Execute(Event event) return Teleport(master, bot, false); } -bool SummonAction::Execute(Event event) +bool SummonAction::Execute(Event /*event*/) { Player* master = GetMaster(); if (!master) return false; if (Pet* pet = bot->GetPet()) - { botAI->PetFollow(); - } if (master->GetSession()->GetSecurity() >= SEC_PLAYER) { diff --git a/src/Ai/Base/Actions/VehicleActions.cpp b/src/Ai/Base/Actions/VehicleActions.cpp index ac925fbcb..71963690d 100644 --- a/src/Ai/Base/Actions/VehicleActions.cpp +++ b/src/Ai/Base/Actions/VehicleActions.cpp @@ -95,7 +95,7 @@ bool EnterVehicleAction::EnterVehicle(Unit* vehicleBase, bool moveIfFar) return true; } -bool LeaveVehicleAction::Execute(Event event) +bool LeaveVehicleAction::Execute(Event /*event*/) { Vehicle* myVehicle = bot->GetVehicle(); if (!myVehicle) diff --git a/src/Ai/Base/ChatActionContext.h b/src/Ai/Base/ChatActionContext.h index 8e4ed9ccf..4bfdcb043 100644 --- a/src/Ai/Base/ChatActionContext.h +++ b/src/Ai/Base/ChatActionContext.h @@ -120,7 +120,6 @@ public: creators["use"] = &ChatActionContext::use; creators["item count"] = &ChatActionContext::item_count; creators["equip"] = &ChatActionContext::equip; - creators["equip upgrades"] = &ChatActionContext::equip_upgrade; creators["unequip"] = &ChatActionContext::unequip; creators["sell"] = &ChatActionContext::sell; creators["buy"] = &ChatActionContext::buy; diff --git a/src/Ai/Base/Strategy/ChatCommandHandlerStrategy.cpp b/src/Ai/Base/Strategy/ChatCommandHandlerStrategy.cpp index 04f797901..f67ae49ca 100644 --- a/src/Ai/Base/Strategy/ChatCommandHandlerStrategy.cpp +++ b/src/Ai/Base/Strategy/ChatCommandHandlerStrategy.cpp @@ -5,8 +5,6 @@ #include "ChatCommandHandlerStrategy.h" -#include "Playerbots.h" - class ChatCommandActionNodeFactoryInternal : public NamedObjectFactory { public: diff --git a/src/Ai/Base/Strategy/CombatStrategy.cpp b/src/Ai/Base/Strategy/CombatStrategy.cpp index 75700e9a6..62972d4b1 100644 --- a/src/Ai/Base/Strategy/CombatStrategy.cpp +++ b/src/Ai/Base/Strategy/CombatStrategy.cpp @@ -5,7 +5,6 @@ #include "CombatStrategy.h" -#include "Playerbots.h" #include "Strategy.h" void CombatStrategy::InitTriggers(std::vector& triggers) diff --git a/src/Ai/Base/Strategy/DuelStrategy.cpp b/src/Ai/Base/Strategy/DuelStrategy.cpp index 4c08397e6..c7f7e9d23 100644 --- a/src/Ai/Base/Strategy/DuelStrategy.cpp +++ b/src/Ai/Base/Strategy/DuelStrategy.cpp @@ -5,8 +5,6 @@ #include "DuelStrategy.h" -#include "Playerbots.h" - void DuelStrategy::InitTriggers(std::vector& triggers) { PassTroughStrategy::InitTriggers(triggers); diff --git a/src/Ai/Base/Strategy/FollowMasterStrategy.cpp b/src/Ai/Base/Strategy/FollowMasterStrategy.cpp index 0308b113f..6701fdcac 100644 --- a/src/Ai/Base/Strategy/FollowMasterStrategy.cpp +++ b/src/Ai/Base/Strategy/FollowMasterStrategy.cpp @@ -5,8 +5,6 @@ #include "FollowMasterStrategy.h" -#include "Playerbots.h" - std::vector FollowMasterStrategy::getDefaultActions() { return { diff --git a/src/Ai/Base/Strategy/GuardStrategy.cpp b/src/Ai/Base/Strategy/GuardStrategy.cpp index 9a396ac57..96017365f 100644 --- a/src/Ai/Base/Strategy/GuardStrategy.cpp +++ b/src/Ai/Base/Strategy/GuardStrategy.cpp @@ -5,8 +5,6 @@ #include "GuardStrategy.h" -#include "Playerbots.h" - std::vector GuardStrategy::getDefaultActions() { return { diff --git a/src/Ai/Base/Strategy/NonCombatStrategy.cpp b/src/Ai/Base/Strategy/NonCombatStrategy.cpp index 6b8f76ac9..cb32233f4 100644 --- a/src/Ai/Base/Strategy/NonCombatStrategy.cpp +++ b/src/Ai/Base/Strategy/NonCombatStrategy.cpp @@ -5,8 +5,6 @@ #include "NonCombatStrategy.h" -#include "Playerbots.h" - void NonCombatStrategy::InitTriggers(std::vector& triggers) { triggers.push_back(new TriggerNode("random", { NextAction("clean quest log", 1.0f) })); @@ -58,7 +56,7 @@ void MasterFishingStrategy::InitTriggers(std::vector& triggers) "random", { NextAction("end master fishing", 12.0f), - NextAction("equip upgrades", 6.0f) + NextAction("equip upgrades packet action", 6.0f) } ) ); diff --git a/src/Ai/Base/Strategy/RTSCStrategy.cpp b/src/Ai/Base/Strategy/RTSCStrategy.cpp index 2c64092e3..525338c15 100644 --- a/src/Ai/Base/Strategy/RTSCStrategy.cpp +++ b/src/Ai/Base/Strategy/RTSCStrategy.cpp @@ -5,8 +5,6 @@ #include "RTSCStrategy.h" -#include "Playerbots.h" - RTSCStrategy::RTSCStrategy(PlayerbotAI* botAI) : Strategy(botAI) {} void RTSCStrategy::InitTriggers(std::vector& triggers) {} diff --git a/src/Ai/Base/Strategy/RacialsStrategy.cpp b/src/Ai/Base/Strategy/RacialsStrategy.cpp index f4f270b1b..dc6d5bc48 100644 --- a/src/Ai/Base/Strategy/RacialsStrategy.cpp +++ b/src/Ai/Base/Strategy/RacialsStrategy.cpp @@ -5,8 +5,6 @@ #include "RacialsStrategy.h" -#include "Playerbots.h" - class RacialsStrategyActionNodeFactory : public NamedObjectFactory { public: diff --git a/src/Ai/Base/Strategy/UsePotionsStrategy.cpp b/src/Ai/Base/Strategy/UsePotionsStrategy.cpp index b0e004926..55827fbd2 100644 --- a/src/Ai/Base/Strategy/UsePotionsStrategy.cpp +++ b/src/Ai/Base/Strategy/UsePotionsStrategy.cpp @@ -5,8 +5,6 @@ #include "UsePotionsStrategy.h" -#include "Playerbots.h" - class UsePotionsStrategyActionNodeFactory : public NamedObjectFactory { public: diff --git a/src/Ai/Base/Strategy/WorldPacketHandlerStrategy.cpp b/src/Ai/Base/Strategy/WorldPacketHandlerStrategy.cpp index 2debc44cb..ad31c2c39 100644 --- a/src/Ai/Base/Strategy/WorldPacketHandlerStrategy.cpp +++ b/src/Ai/Base/Strategy/WorldPacketHandlerStrategy.cpp @@ -32,7 +32,7 @@ void WorldPacketHandlerStrategy::InitTriggers(std::vector& trigger triggers.push_back(new TriggerNode("activate taxi", { NextAction("remember taxi", relevance), NextAction("taxi", relevance) })); triggers.push_back(new TriggerNode("taxi done", { NextAction("taxi", relevance) })); - triggers.push_back(new TriggerNode("trade status", { NextAction("accept trade", relevance), NextAction("equip upgrades", relevance) })); + triggers.push_back(new TriggerNode("trade status", { NextAction("accept trade", relevance), NextAction("equip upgrades packet action", relevance) })); triggers.push_back(new TriggerNode("trade status extended", { NextAction("trade status extended", relevance) })); triggers.push_back(new TriggerNode("area trigger", { NextAction("reach area trigger", relevance) })); triggers.push_back(new TriggerNode("within area trigger", { NextAction("area trigger", relevance) })); @@ -40,9 +40,9 @@ void WorldPacketHandlerStrategy::InitTriggers(std::vector& trigger triggers.push_back(new TriggerNode("item push result", { NextAction("unlock items", relevance), NextAction("open items", relevance), NextAction("query item usage", relevance), - NextAction("equip upgrades", relevance) })); + NextAction("equip upgrades packet action", relevance) })); triggers.push_back(new TriggerNode("item push result", { NextAction("quest item push result", relevance) })); - triggers.push_back(new TriggerNode("loot roll won", { NextAction("equip upgrades", relevance) })); + triggers.push_back(new TriggerNode("loot roll won", { NextAction("equip upgrades packet action", relevance) })); triggers.push_back(new TriggerNode("ready check finished", { NextAction("finish ready check", relevance) })); // triggers.push_back(new TriggerNode("often", { NextAction("security check", relevance), NextAction("check mail", relevance) })); triggers.push_back(new TriggerNode("guild invite", { NextAction("guild accept", relevance) })); diff --git a/src/Ai/Base/Trigger/GenericTriggers.cpp b/src/Ai/Base/Trigger/GenericTriggers.cpp index a933bc232..209766be7 100644 --- a/src/Ai/Base/Trigger/GenericTriggers.cpp +++ b/src/Ai/Base/Trigger/GenericTriggers.cpp @@ -7,9 +7,7 @@ #include -#include "BattlegroundWS.h" #include "CreatureAI.h" -#include "GameTime.h" #include "ItemVisitors.h" #include "LastSpellCastValue.h" #include "ObjectGuid.h" diff --git a/src/Ai/Base/Trigger/RangeTriggers.cpp b/src/Ai/Base/Trigger/RangeTriggers.cpp index 2acc2aec8..01a4d0f61 100644 --- a/src/Ai/Base/Trigger/RangeTriggers.cpp +++ b/src/Ai/Base/Trigger/RangeTriggers.cpp @@ -201,7 +201,6 @@ bool PartyMemberToHealOutOfSpellRangeTrigger::IsActive() if (!target) return false; - float combatReach = bot->GetCombatReach() + target->GetCombatReach(); return target && (ServerFacade::instance().GetDistance2d(bot, target) > (distance + sPlayerbotAIConfig.contactDistance) || !bot->IsWithinLOSInMap(target)); } diff --git a/src/Ai/Base/Trigger/RpgTriggers.cpp b/src/Ai/Base/Trigger/RpgTriggers.cpp index f390359be..0151c6c5e 100644 --- a/src/Ai/Base/Trigger/RpgTriggers.cpp +++ b/src/Ai/Base/Trigger/RpgTriggers.cpp @@ -46,7 +46,8 @@ bool RpgTaxiTrigger::IsActive() return false; uint32 node = - sObjectMgr->GetNearestTaxiNode(guidP.getX(), guidP.getY(), guidP.getZ(), guidP.getMapId(), bot->GetTeamId()); + sObjectMgr->GetNearestTaxiNode(guidP.GetPositionX(), guidP.GetPositionY(), guidP.GetPositionZ(), + guidP.GetMapId(), bot->GetTeamId()); if (!node) return false; @@ -68,7 +69,8 @@ bool RpgDiscoverTrigger::IsActive() return false; uint32 node = - sObjectMgr->GetNearestTaxiNode(guidP.getX(), guidP.getY(), guidP.getZ(), guidP.getMapId(), bot->GetTeamId()); + sObjectMgr->GetNearestTaxiNode(guidP.GetPositionX(), guidP.GetPositionY(), guidP.GetPositionZ(), + guidP.GetMapId(), bot->GetTeamId()); if (bot->m_taxi.IsTaximaskNodeKnown(node)) return false; diff --git a/src/Ai/Base/Trigger/StuckTriggers.cpp b/src/Ai/Base/Trigger/StuckTriggers.cpp index f0a54345a..b6ade75d8 100644 --- a/src/Ai/Base/Trigger/StuckTriggers.cpp +++ b/src/Ai/Base/Trigger/StuckTriggers.cpp @@ -90,7 +90,7 @@ bool MoveLongStuckTrigger::IsActive() } if (cell.GridX() > 0 && cell.GridY() > 0 && - !MMAP::MMapFactory::createOrGetMMapMgr()->loadMap(botPos.getMapId(), cell.GridX(), cell.GridY())) + !MMAP::MMapFactory::createOrGetMMapMgr()->loadMap(botPos.GetMapId(), cell.GridX(), cell.GridY())) { // LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in unloaded grid {},{} on map {}", // bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->GetLevel(), diff --git a/src/Ai/Base/Value/Arrow.cpp b/src/Ai/Base/Value/Arrow.cpp index 5fd710220..114b2c058 100644 --- a/src/Ai/Base/Value/Arrow.cpp +++ b/src/Ai/Base/Value/Arrow.cpp @@ -6,7 +6,8 @@ #include "Arrow.h" #include "Map.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" +#include "Group.h" WorldLocation ArrowFormation::GetLocationInternal() { diff --git a/src/Ai/Base/Value/CcTargetValue.cpp b/src/Ai/Base/Value/CcTargetValue.cpp index 1c305aec3..0559656f7 100644 --- a/src/Ai/Base/Value/CcTargetValue.cpp +++ b/src/Ai/Base/Value/CcTargetValue.cpp @@ -6,7 +6,9 @@ #include "CcTargetValue.h" #include "Action.h" -#include "Playerbots.h" +#include "AiObjectContext.h" +#include "Group.h" +#include "PlayerbotAI.h" #include "ServerFacade.h" class FindTargetForCcStrategy : public FindTargetStrategy diff --git a/src/Ai/Base/Value/CurrentCcTargetValue.cpp b/src/Ai/Base/Value/CurrentCcTargetValue.cpp index 27b810026..97f35c1b5 100644 --- a/src/Ai/Base/Value/CurrentCcTargetValue.cpp +++ b/src/Ai/Base/Value/CurrentCcTargetValue.cpp @@ -4,8 +4,7 @@ */ #include "CurrentCcTargetValue.h" - -#include "Playerbots.h" +#include "PlayerbotAI.h" class FindCurrentCcTargetStrategy : public FindTargetStrategy { diff --git a/src/Ai/Base/Value/DpsTargetValue.cpp b/src/Ai/Base/Value/DpsTargetValue.cpp index 1a813c994..28f308471 100644 --- a/src/Ai/Base/Value/DpsTargetValue.cpp +++ b/src/Ai/Base/Value/DpsTargetValue.cpp @@ -29,7 +29,6 @@ public: foundHighPriority = true; return; } - Unit* victim = attacker->GetVictim(); if (!result || CalcThreatGap(attacker, threatMgr) > CalcThreatGap(result, &result->GetThreatMgr())) result = attacker; } @@ -144,7 +143,7 @@ public: { } - void CheckAttacker(Unit* attacker, ThreatMgr* threatMgr) override + void CheckAttacker(Unit* attacker, ThreatMgr*) override { if (Group* group = botAI->GetBot()->GetGroup()) { @@ -195,7 +194,6 @@ public: } int32_t GetIntervalLevel(Unit* unit) { - float time = unit->GetHealth() / dps_; float dis = unit->GetDistance(botAI->GetBot()); float attackRange = botAI->IsRanged(botAI->GetBot()) ? sPlayerbotAIConfig.spellDistance : sPlayerbotAIConfig.meleeDistance; @@ -218,7 +216,7 @@ public: { } - void CheckAttacker(Unit* attacker, ThreatMgr* threatMgr) override + void CheckAttacker(Unit* attacker, ThreatMgr*) override { if (Group* group = botAI->GetBot()->GetGroup()) { @@ -276,7 +274,6 @@ public: } int32_t GetIntervalLevel(Unit* unit) { - float time = unit->GetHealth() / dps_; float dis = unit->GetDistance(botAI->GetBot()); float attackRange = botAI->IsRanged(botAI->GetBot()) ? sPlayerbotAIConfig.spellDistance : sPlayerbotAIConfig.meleeDistance; @@ -322,7 +319,7 @@ class FindMaxHpTargetStrategy : public FindTargetStrategy public: FindMaxHpTargetStrategy(PlayerbotAI* botAI) : FindTargetStrategy(botAI), maxHealth(0) {} - void CheckAttacker(Unit* attacker, ThreatMgr* threatMgr) override + void CheckAttacker(Unit* attacker, ThreatMgr*) override { if (Group* group = botAI->GetBot()->GetGroup()) { diff --git a/src/Ai/Base/Value/EnemyPlayerValue.cpp b/src/Ai/Base/Value/EnemyPlayerValue.cpp index 7de0cd670..c2f6e056a 100644 --- a/src/Ai/Base/Value/EnemyPlayerValue.cpp +++ b/src/Ai/Base/Value/EnemyPlayerValue.cpp @@ -11,6 +11,10 @@ bool NearestEnemyPlayersValue::AcceptUnit(Unit* unit) { + // Apply parent's filtering first (includes level difference checks) + if (!PossibleTargetsValue::AcceptUnit(unit)) + return false; + bool inCannon = botAI->IsInVehicle(false, true); Player* enemy = dynamic_cast(unit); if (enemy && botAI->IsOpposing(enemy) && enemy->IsPvP() && @@ -19,7 +23,14 @@ bool NearestEnemyPlayersValue::AcceptUnit(Unit* unit) ((inCannon || !enemy->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))) && /*!enemy->HasStealthAura() && !enemy->HasInvisibilityAura()*/ enemy->CanSeeOrDetect(bot) && !(enemy->HasSpiritOfRedemptionAura())) + { + // If with master, only attack if master is PvP flagged + Player* master = botAI->GetMaster(); + if (master && !master->IsPvP() && !master->IsFFAPvP()) + return false; + return true; + } return false; } diff --git a/src/Ai/Base/Value/GrindTargetValue.cpp b/src/Ai/Base/Value/GrindTargetValue.cpp index ce021a2d9..573de8fb0 100644 --- a/src/Ai/Base/Value/GrindTargetValue.cpp +++ b/src/Ai/Base/Value/GrindTargetValue.cpp @@ -107,7 +107,7 @@ Unit* GrindTargetValue::FindTargetForGrinding(uint32 assistCount) continue; } - bool inactiveGrindStatus = botAI->rpgInfo.status != RPG_WANDER_RANDOM && botAI->rpgInfo.status != RPG_IDLE; + bool inactiveGrindStatus = botAI->rpgInfo.GetStatus() != RPG_WANDER_RANDOM && botAI->rpgInfo.GetStatus() != RPG_IDLE; float aggroRange = 30.0f; if (unit->ToCreature()) diff --git a/src/Ai/Base/Value/ItemCountValue.cpp b/src/Ai/Base/Value/ItemCountValue.cpp index 2c719d8f4..9ea7da2e0 100644 --- a/src/Ai/Base/Value/ItemCountValue.cpp +++ b/src/Ai/Base/Value/ItemCountValue.cpp @@ -5,7 +5,7 @@ #include "ItemCountValue.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" std::vector InventoryItemValueBase::Find(std::string const qualifier) { @@ -25,9 +25,7 @@ uint32 ItemCountValue::Calculate() uint32 count = 0; std::vector items = Find(qualifier); for (Item* item : items) - { count += item->GetCount(); - } return count; } diff --git a/src/Ai/Base/Value/LastMovementValue.cpp b/src/Ai/Base/Value/LastMovementValue.cpp index ba54020e3..22c35450d 100644 --- a/src/Ai/Base/Value/LastMovementValue.cpp +++ b/src/Ai/Base/Value/LastMovementValue.cpp @@ -5,7 +5,6 @@ #include "LastMovementValue.h" -#include "Playerbots.h" #include "Timer.h" LastMovement::LastMovement() { clear(); } diff --git a/src/Ai/Base/Value/LeastHpTargetValue.cpp b/src/Ai/Base/Value/LeastHpTargetValue.cpp index 8b9f1a55f..423db1de9 100644 --- a/src/Ai/Base/Value/LeastHpTargetValue.cpp +++ b/src/Ai/Base/Value/LeastHpTargetValue.cpp @@ -6,7 +6,7 @@ #include "LeastHpTargetValue.h" #include "AttackersValue.h" -#include "Playerbots.h" +#include "PlayerbotAI.h" class FindLeastHpTargetStrategy : public FindNonCcTargetStrategy { diff --git a/src/Ai/Base/Value/LogLevelValue.h b/src/Ai/Base/Value/LogLevelValue.h index 18fdbddce..f8515b13b 100644 --- a/src/Ai/Base/Value/LogLevelValue.h +++ b/src/Ai/Base/Value/LogLevelValue.h @@ -6,6 +6,7 @@ #ifndef _PLAYERBOT_LOGLEVELVALUE_H #define _PLAYERBOT_LOGLEVELVALUE_H +#include "LogCommon.h" #include "Value.h" class PlayerbotAI; diff --git a/src/Ai/Base/Value/NearestCorpsesValue.cpp b/src/Ai/Base/Value/NearestCorpsesValue.cpp index fec1aed21..6091c3241 100644 --- a/src/Ai/Base/Value/NearestCorpsesValue.cpp +++ b/src/Ai/Base/Value/NearestCorpsesValue.cpp @@ -8,7 +8,6 @@ #include "CellImpl.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" -#include "Playerbots.h" class AnyDeadUnitInObjectRangeCheck { diff --git a/src/Ai/Base/Value/PartyMemberToDispel.cpp b/src/Ai/Base/Value/PartyMemberToDispel.cpp index 91b1955b2..d3bf4e9ab 100644 --- a/src/Ai/Base/Value/PartyMemberToDispel.cpp +++ b/src/Ai/Base/Value/PartyMemberToDispel.cpp @@ -4,8 +4,7 @@ */ #include "PartyMemberToDispel.h" - -#include "Playerbots.h" +#include "PlayerbotAI.h" class PartyMemberToDispelPredicate : public FindPlayerPredicate, public PlayerbotAIAware { diff --git a/src/Ai/Base/Value/PartyMemberValue.cpp b/src/Ai/Base/Value/PartyMemberValue.cpp index 747742909..53a93b2b4 100644 --- a/src/Ai/Base/Value/PartyMemberValue.cpp +++ b/src/Ai/Base/Value/PartyMemberValue.cpp @@ -6,8 +6,11 @@ #include "PartyMemberValue.h" #include "Corpse.h" -#include "Playerbots.h" +#include "Group.h" +#include "PlayerbotAI.h" #include "ServerFacade.h" +#include "Pet.h" +#include "Spell.h" Unit* PartyMemberValue::FindPartyMember(std::vector* party, FindPlayerPredicate& predicate) { diff --git a/src/Ai/Base/Value/PartyMemberWithoutItemValue.h b/src/Ai/Base/Value/PartyMemberWithoutItemValue.h index 2918ea4c5..379835543 100644 --- a/src/Ai/Base/Value/PartyMemberWithoutItemValue.h +++ b/src/Ai/Base/Value/PartyMemberWithoutItemValue.h @@ -8,7 +8,6 @@ #include "NamedObjectContext.h" #include "PartyMemberValue.h" -#include "PlayerbotAIConfig.h" class PlayerbotAI; class Unit; @@ -16,8 +15,7 @@ class Unit; class PartyMemberWithoutItemValue : public PartyMemberValue, public Qualified { public: - PartyMemberWithoutItemValue(PlayerbotAI* botAI, std::string const name = "party member without item", - float range = sPlayerbotAIConfig.farDistance) + PartyMemberWithoutItemValue(PlayerbotAI* botAI, std::string const name = "party member without item") : PartyMemberValue(botAI, name) { } diff --git a/src/Ai/Base/Value/PossibleRpgTargetsValue.cpp b/src/Ai/Base/Value/PossibleRpgTargetsValue.cpp index f2b6aef10..fbcb8fb2d 100644 --- a/src/Ai/Base/Value/PossibleRpgTargetsValue.cpp +++ b/src/Ai/Base/Value/PossibleRpgTargetsValue.cpp @@ -5,14 +5,15 @@ #include "PossibleRpgTargetsValue.h" -#include "CellImpl.h" -#include "GridNotifiers.h" -#include "GridNotifiersImpl.h" +#include "AiObjectContext.h" #include "ObjectGuid.h" -#include "Playerbots.h" #include "ServerFacade.h" #include "SharedDefines.h" #include "NearestGameObjects.h" +#include "GridNotifiers.h" +#include "GridNotifiersImpl.h" +#include "CellImpl.h" +#include "TravelMgr.h" std::vector PossibleRpgTargetsValue::allowedNpcFlags; @@ -73,9 +74,15 @@ bool PossibleRpgTargetsValue::AcceptUnit(Unit* unit) } TravelTarget* travelTarget = context->GetValue("travel target")->Get(); - if (travelTarget && travelTarget->getDestination() && - travelTarget->getDestination()->getEntry() == unit->GetEntry()) + + if ( + travelTarget != nullptr + && travelTarget->getDestination() + && (uint32_t)travelTarget->getDestination()->getEntry() == unit->GetEntry() + ) + { return true; + } if (urand(1, 100) < 25 && unit->IsFriendlyTo(bot)) return true; diff --git a/src/Ai/Base/Value/PossibleTargetsValue.cpp b/src/Ai/Base/Value/PossibleTargetsValue.cpp index 654abd44c..7db1dd39b 100644 --- a/src/Ai/Base/Value/PossibleTargetsValue.cpp +++ b/src/Ai/Base/Value/PossibleTargetsValue.cpp @@ -16,6 +16,20 @@ #include "SpellAuraEffects.h" #include "SpellMgr.h" #include "Unit.h" +#include "AreaDefines.h" + +// Level difference thresholds for attack probability +constexpr int32 EXTREME_LEVEL_DIFF = 5; // Don't attack if enemy is this much higher +constexpr int32 HIGH_LEVEL_DIFF = 4; // 25% chance at +/- this difference +constexpr int32 MID_LEVEL_DIFF = 3; // 50% chance at +/- this difference +constexpr int32 LOW_LEVEL_DIFF = 2; // 75% chance at +/- this difference + +// Time window for deterministic attack decisions +constexpr uint32 ATTACK_DECISION_TIME_WINDOW = 2 * MINUTE; + +// 64 bit FNV-1a hash constants +constexpr uint64_t FNV_OFFSET_BASIS = 14695981039346656037ULL; +constexpr uint64_t FNV_PRIME = 1099511628211ULL; void PossibleTargetsValue::FindUnits(std::list& targets) { @@ -24,7 +38,103 @@ void PossibleTargetsValue::FindUnits(std::list& targets) Cell::VisitObjects(bot, searcher, range); } -bool PossibleTargetsValue::AcceptUnit(Unit* unit) { return AttackersValue::IsPossibleTarget(unit, bot, range); } +bool PossibleTargetsValue::AcceptUnit(Unit* unit) +{ + if (!AttackersValue::IsPossibleTarget(unit, bot, range)) + return false; + + // Level-based PvP restrictions + if (unit->IsPlayer()) + { + // Self-defense - always allow fighting back + if (bot->IsInCombat() && bot->GetVictim() == unit) + return true; // Already fighting + + Unit* botAttacker = bot->getAttackerForHelper(); + if (botAttacker) + { + if (botAttacker == unit) + return true; // Enemy attacking + + if (botAttacker->IsPet()) + { + Unit* petOwner = botAttacker->GetOwner(); + if (petOwner && petOwner == unit) + return true; // Enemy's pet attacking + } + } + + // Skip restrictions in BG/Arena + if (bot->InBattleground() || bot->InArena()) + return true; + + // Skip restrictions if in duel with this player + if (bot->duel && bot->duel->Opponent == unit) + return true; + + // Capital cities - no restrictions + uint32 zoneId = bot->GetZoneId(); + bool inCapitalCity = (zoneId == AREA_STORMWIND_CITY || + zoneId == AREA_IRONFORGE || + zoneId == AREA_DARNASSUS || + zoneId == AREA_THE_EXODAR || + zoneId == AREA_ORGRIMMAR || + zoneId == AREA_THUNDER_BLUFF || + zoneId == AREA_UNDERCITY || + zoneId == AREA_SILVERMOON_CITY); + + if (inCapitalCity) + return true; + + // Level difference check + int32 levelDifference = unit->GetLevel() - bot->GetLevel(); + int32 absLevelDifference = std::abs(levelDifference); + + // Extreme difference - do not attack + if (levelDifference >= EXTREME_LEVEL_DIFF) + return false; + + // Calculate attack chance based on level difference + uint32 attackChance = 100; // Default 100%: Bot and target's levels are very close + + // There's a chance a bot might gank on an extremly low target + if ((absLevelDifference < EXTREME_LEVEL_DIFF && absLevelDifference >= HIGH_LEVEL_DIFF) || + levelDifference <= -EXTREME_LEVEL_DIFF) + attackChance = 25; + + else if (absLevelDifference < HIGH_LEVEL_DIFF && absLevelDifference >= MID_LEVEL_DIFF) + attackChance = 50; + + else if (absLevelDifference < MID_LEVEL_DIFF && absLevelDifference >= LOW_LEVEL_DIFF) + attackChance = 75; + + // If probability check needed, use deterministic hash-based decision + if (attackChance < 100) + { + // Decisions remain stable for ATTACK_DECISION_TIME_WINDOW. + time_t timeWindow = time(nullptr) / ATTACK_DECISION_TIME_WINDOW; + + // FNV-1a hash used to deterministically convert botGUID, targetGUID, and timeWindow + // into a consistent percentage chance without needing to cache previous decisions. + // See: http://www.isthe.com/chongo/tech/comp/fnv/ + uint64_t hash = FNV_OFFSET_BASIS; + + // Diffuse bot GUID, target GUID, and time window into the hash + hash ^= bot->GetGUID().GetRawValue(); + hash *= FNV_PRIME; + hash ^= unit->GetGUID().GetRawValue(); + hash *= FNV_PRIME; + hash ^= static_cast(timeWindow); + hash *= FNV_PRIME; + + // Convert hash to 0-99 range and compare against attack chance percentage. + // Ex: attackChance=75: hash 0-74 = attack (75%), hash 75-99 = don't attack (25%) + return (hash % 100) < attackChance; + } + } + + return true; +} void PossibleTriggersValue::FindUnits(std::list& targets) { @@ -36,9 +146,8 @@ void PossibleTriggersValue::FindUnits(std::list& targets) bool PossibleTriggersValue::AcceptUnit(Unit* unit) { if (!unit->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) - { return false; - } + Unit::AuraEffectList const& aurasPeriodicTriggerSpell = unit->GetAuraEffectsByType(SPELL_AURA_PERIODIC_TRIGGER_SPELL); Unit::AuraEffectList const& aurasPeriodicTriggerWithValueSpell = @@ -58,9 +167,7 @@ bool PossibleTriggersValue::AcceptUnit(Unit* unit) for (int j = 0; j < MAX_SPELL_EFFECTS; j++) { if (triggerSpellInfo->Effects[j].Effect == SPELL_EFFECT_SCHOOL_DAMAGE) - { return true; - } } } } diff --git a/src/Ai/Base/Value/SnareTargetValue.cpp b/src/Ai/Base/Value/SnareTargetValue.cpp index 7965198aa..f2440fcec 100644 --- a/src/Ai/Base/Value/SnareTargetValue.cpp +++ b/src/Ai/Base/Value/SnareTargetValue.cpp @@ -5,7 +5,8 @@ #include "SnareTargetValue.h" -#include "Playerbots.h" +#include "AiObjectContext.h" +#include "PlayerbotAI.h" #include "ServerFacade.h" Unit* SnareTargetValue::Calculate() diff --git a/src/Ai/Base/Value/SpellIdValue.cpp b/src/Ai/Base/Value/SpellIdValue.cpp index 682c0b3ff..244634bcd 100644 --- a/src/Ai/Base/Value/SpellIdValue.cpp +++ b/src/Ai/Base/Value/SpellIdValue.cpp @@ -8,7 +8,6 @@ #include "ChatHelper.h" #include "Playerbots.h" #include "Vehicle.h" -#include "World.h" SpellIdValue::SpellIdValue(PlayerbotAI* botAI) : CalculatedValue(botAI, "spell id", 20 * 1000) {} diff --git a/src/Ai/Base/Value/StatsValues.cpp b/src/Ai/Base/Value/StatsValues.cpp index 615f39f01..5205ec05b 100644 --- a/src/Ai/Base/Value/StatsValues.cpp +++ b/src/Ai/Base/Value/StatsValues.cpp @@ -4,8 +4,12 @@ */ #include "StatsValues.h" -#include "Playerbots.h" +#include "AiObjectContext.h" +#include "Group.h" +#include "Pet.h" +#include "PlayerbotAIConfig.h" #include "ServerFacade.h" +#include "Player.h" Unit* HealthValue::GetTarget() { @@ -184,7 +188,7 @@ bool IsInCombatValue::Calculate() if (member->IsInCombat() && ServerFacade::instance().IsDistanceLessOrEqualThan(ServerFacade::instance().GetDistance2d(member, bot), - sPlayerbotAIConfig.reactDistance)) + PlayerbotAIConfig::instance().reactDistance)) return true; } } diff --git a/src/Ai/Base/Value/TankTargetValue.cpp b/src/Ai/Base/Value/TankTargetValue.cpp index ef2d1e959..90c759a7d 100644 --- a/src/Ai/Base/Value/TankTargetValue.cpp +++ b/src/Ai/Base/Value/TankTargetValue.cpp @@ -5,9 +5,10 @@ #include "TankTargetValue.h" +#include "AiObjectContext.h" #include "AttackersValue.h" -#include "PlayerbotAIConfig.h" -#include "Playerbots.h" +#include "Group.h" +#include "PlayerbotAI.h" class FindTargetForTankStrategy : public FindNonCcTargetStrategy { diff --git a/src/Ai/Base/WorldPacketActionContext.h b/src/Ai/Base/WorldPacketActionContext.h index 59c055036..839a88655 100644 --- a/src/Ai/Base/WorldPacketActionContext.h +++ b/src/Ai/Base/WorldPacketActionContext.h @@ -72,6 +72,7 @@ public: creators["store loot"] = &WorldPacketActionContext::store_loot; creators["self resurrect"] = &WorldPacketActionContext::self_resurrect; creators["pet"] = &WorldPacketActionContext::pet; + creators["equip upgrades packet action"] = &WorldPacketActionContext::equip_upgrades_packet_action; // quest creators["talk to quest giver"] = &WorldPacketActionContext::turn_in_quest; @@ -142,6 +143,7 @@ private: static Action* tell_cannot_equip(PlayerbotAI* botAI) { return new InventoryChangeFailureAction(botAI); } static Action* self_resurrect(PlayerbotAI* botAI) { return new SelfResurrectAction(botAI); } static Action* pet(PlayerbotAI* botAI) { return new PetsAction(botAI); } + static Action* equip_upgrades_packet_action(PlayerbotAI* botAI) { return new EquipUpgradesPacketAction(botAI); } // quest static Action* quest_update_add_kill(PlayerbotAI* ai) { return new QuestUpdateAddKillAction(ai); } diff --git a/src/Ai/Class/Dk/Strategy/GenericDKNonCombatStrategy.cpp b/src/Ai/Class/Dk/Strategy/GenericDKNonCombatStrategy.cpp index edead0675..d358d4370 100644 --- a/src/Ai/Class/Dk/Strategy/GenericDKNonCombatStrategy.cpp +++ b/src/Ai/Class/Dk/Strategy/GenericDKNonCombatStrategy.cpp @@ -5,8 +5,6 @@ #include "GenericDKNonCombatStrategy.h" -#include "Playerbots.h" - class GenericDKNonCombatStrategyActionNodeFactory : public NamedObjectFactory { public: diff --git a/src/Ai/Class/Druid/Action/DruidActions.cpp b/src/Ai/Class/Druid/Action/DruidActions.cpp index 33b7826bf..d6a950b17 100644 --- a/src/Ai/Class/Druid/Action/DruidActions.cpp +++ b/src/Ai/Class/Druid/Action/DruidActions.cpp @@ -28,11 +28,11 @@ Value* CastEntanglingRootsCcAction::GetTargetValue() return context->GetValue("cc target", "entangling roots"); } -bool CastEntanglingRootsCcAction::Execute(Event event) { return botAI->CastSpell("entangling roots", GetTarget()); } +bool CastEntanglingRootsCcAction::Execute(Event /*event*/) { return botAI->CastSpell("entangling roots", GetTarget()); } Value* CastHibernateCcAction::GetTargetValue() { return context->GetValue("cc target", "hibernate"); } -bool CastHibernateCcAction::Execute(Event event) { return botAI->CastSpell("hibernate", GetTarget()); } +bool CastHibernateCcAction::Execute(Event /*event*/) { return botAI->CastSpell("hibernate", GetTarget()); } bool CastStarfallAction::isUseful() { if (!CastSpellAction::isUseful()) diff --git a/src/Ai/Class/Druid/Action/DruidShapeshiftActions.cpp b/src/Ai/Class/Druid/Action/DruidShapeshiftActions.cpp index 1f066dc34..a87f22a3b 100644 --- a/src/Ai/Class/Druid/Action/DruidShapeshiftActions.cpp +++ b/src/Ai/Class/Druid/Action/DruidShapeshiftActions.cpp @@ -7,20 +7,19 @@ #include "Playerbots.h" -bool CastBearFormAction::isPossible() -{ - return CastBuffSpellAction::isPossible() && !botAI->HasAura("dire bear form", GetTarget()); -} - bool CastBearFormAction::isUseful() { return CastBuffSpellAction::isUseful() && !botAI->HasAura("dire bear form", GetTarget()); } +bool CastBearFormAction::isPossible() +{ + return CastBuffSpellAction::isPossible() && !botAI->HasAura("dire bear form", GetTarget()); +} + std::vector CastDireBearFormAction::getAlternatives() { - return NextAction::merge({ NextAction("bear form") }, - CastSpellAction::getAlternatives()); + return NextAction::merge({NextAction("bear form")}, CastSpellAction::getAlternatives()); } bool CastTravelFormAction::isUseful() @@ -32,6 +31,12 @@ bool CastTravelFormAction::isUseful() !botAI->HasAura("dash", bot); } +bool CastCasterFormAction::Execute(Event /*event*/) +{ + botAI->RemoveShapeshift(); + return true; +} + bool CastCasterFormAction::isUseful() { return botAI->HasAnyAuraOf(GetTarget(), "dire bear form", "bear form", "cat form", "travel form", "aquatic form", @@ -39,23 +44,14 @@ bool CastCasterFormAction::isUseful() AI_VALUE2(uint8, "mana", "self target") > sPlayerbotAIConfig.mediumHealth; } -bool CastCasterFormAction::Execute(Event event) -{ - botAI->RemoveShapeshift(); - return true; -} - -bool CastCancelTreeFormAction::isUseful() -{ - return botAI->HasAura(33891, bot); -} - -bool CastCancelTreeFormAction::Execute(Event event) +bool CastCancelTreeFormAction::Execute(Event /*event*/) { botAI->RemoveAura("tree of life"); return true; } +bool CastCancelTreeFormAction::isUseful() { return botAI->HasAura(33891, bot); } + bool CastTreeFormAction::isUseful() { return GetTarget() && CastSpellAction::isUseful() && !botAI->HasAura(33891, bot); diff --git a/src/Ai/Class/Druid/Action/DruidShapeshiftActions.h b/src/Ai/Class/Druid/Action/DruidShapeshiftActions.h index 26e14c42c..9d75f2682 100644 --- a/src/Ai/Class/Druid/Action/DruidShapeshiftActions.h +++ b/src/Ai/Class/Druid/Action/DruidShapeshiftActions.h @@ -15,8 +15,8 @@ class CastBearFormAction : public CastBuffSpellAction public: CastBearFormAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "bear form") {} - bool isPossible() override; bool isUseful() override; + bool isPossible() override; }; class CastDireBearFormAction : public CastBuffSpellAction @@ -37,6 +37,7 @@ class CastTreeFormAction : public CastBuffSpellAction { public: CastTreeFormAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "tree of life") {} + bool isUseful() override; }; @@ -65,9 +66,9 @@ class CastCasterFormAction : public CastBuffSpellAction public: CastCasterFormAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "caster form") {} + bool Execute(Event event) override; bool isUseful() override; bool isPossible() override { return true; } - bool Execute(Event event) override; }; class CastCancelTreeFormAction : public CastBuffSpellAction @@ -75,9 +76,9 @@ class CastCancelTreeFormAction : public CastBuffSpellAction public: CastCancelTreeFormAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "cancel tree form") {} + bool Execute(Event event) override; bool isUseful() override; bool isPossible() override { return true; } - bool Execute(Event event) override; }; #endif diff --git a/src/Ai/Class/Hunter/Action/HunterActions.cpp b/src/Ai/Class/Hunter/Action/HunterActions.cpp index a1588f853..18e5d5905 100644 --- a/src/Ai/Class/Hunter/Action/HunterActions.cpp +++ b/src/Ai/Class/Hunter/Action/HunterActions.cpp @@ -59,7 +59,7 @@ bool CastImmolationTrapAction::isUseful() Value* CastFreezingTrap::GetTargetValue() { return context->GetValue("cc target", "freezing trap"); } -bool FeedPetAction::Execute(Event event) +bool FeedPetAction::Execute(Event /*event*/) { if (Pet* pet = bot->GetPet()) if (pet->getPetType() == HUNTER_PET && pet->GetHappinessState() != HAPPY) @@ -99,7 +99,7 @@ bool CastDisengageAction::isUseful() Value* CastScareBeastCcAction::GetTargetValue() { return context->GetValue("cc target", "scare beast"); } -bool CastScareBeastCcAction::Execute(Event event) { return botAI->CastSpell("scare beast", GetTarget()); } +bool CastScareBeastCcAction::Execute(Event /*event*/) { return botAI->CastSpell("scare beast", GetTarget()); } bool CastWingClipAction::isUseful() { return CastSpellAction::isUseful() && !botAI->HasAura(spell, GetTarget()); } diff --git a/src/Ai/Class/Hunter/Strategy/GenericHunterNonCombatStrategy.cpp b/src/Ai/Class/Hunter/Strategy/GenericHunterNonCombatStrategy.cpp index 151feadf1..00c35dc2a 100644 --- a/src/Ai/Class/Hunter/Strategy/GenericHunterNonCombatStrategy.cpp +++ b/src/Ai/Class/Hunter/Strategy/GenericHunterNonCombatStrategy.cpp @@ -51,7 +51,7 @@ void GenericHunterNonCombatStrategy::InitTriggers(std::vector& tri })); triggers.push_back(new TriggerNode("low ammo", { NextAction("say::low ammo", ACTION_NORMAL)})); triggers.push_back(new TriggerNode("no track", { NextAction("track humanoids", ACTION_NORMAL)})); - triggers.push_back(new TriggerNode("no ammo", { NextAction("equip upgrades", ACTION_HIGH + 1)})); + triggers.push_back(new TriggerNode("no ammo", { NextAction("equip upgrades packet action", ACTION_HIGH + 1)})); } void HunterPetStrategy::InitTriggers(std::vector& triggers) diff --git a/src/Ai/Class/Hunter/Strategy/GenericHunterStrategy.cpp b/src/Ai/Class/Hunter/Strategy/GenericHunterStrategy.cpp index 04afc6f76..0a9e88a54 100644 --- a/src/Ai/Class/Hunter/Strategy/GenericHunterStrategy.cpp +++ b/src/Ai/Class/Hunter/Strategy/GenericHunterStrategy.cpp @@ -5,9 +5,6 @@ #include "GenericHunterStrategy.h" -#include "Playerbots.h" -#include "Strategy.h" - class GenericHunterStrategyActionNodeFactory : public NamedObjectFactory { public: @@ -101,7 +98,7 @@ void GenericHunterStrategy::InitTriggers(std::vector& triggers) CombatStrategy::InitTriggers(triggers); // Mark/Ammo/Mana Triggers - triggers.push_back(new TriggerNode("no ammo", { NextAction("equip upgrades", 30.0f) })); + triggers.push_back(new TriggerNode("no ammo", { NextAction("equip upgrades packet action", 30.0f) })); triggers.push_back(new TriggerNode("hunter's mark", { NextAction("hunter's mark", 29.5f) })); triggers.push_back(new TriggerNode("rapid fire", { NextAction("rapid fire", 29.0f) })); triggers.push_back(new TriggerNode("aspect of the viper", { NextAction("aspect of the viper", 28.0f) })); diff --git a/src/Ai/Class/Paladin/Action/PaladinActions.cpp b/src/Ai/Class/Paladin/Action/PaladinActions.cpp index 190ecb264..726f83546 100644 --- a/src/Ai/Class/Paladin/Action/PaladinActions.cpp +++ b/src/Ai/Class/Paladin/Action/PaladinActions.cpp @@ -8,13 +8,10 @@ #include "AiFactory.h" #include "Event.h" #include "PlayerbotAI.h" -#include "PlayerbotAIConfig.h" -#include "PlayerbotFactory.h" #include "Playerbots.h" #include "SharedDefines.h" #include "../../../../../src/server/scripts/Spells/spell_generic.cpp" #include "GenericBuffUtils.h" -#include "Config.h" #include "Group.h" #include "ObjectAccessor.h" @@ -167,7 +164,7 @@ Value* CastBlessingOnPartyAction::GetTargetValue() return context->GetValue("party member without aura", MakeAuraQualifierForBuff(spell)); } -bool CastBlessingOfMightAction::Execute(Event event) +bool CastBlessingOfMightAction::Execute(Event /*event*/) { Unit* target = GetTarget(); if (!target) @@ -188,7 +185,7 @@ Value* CastBlessingOfMightOnPartyAction::GetTargetValue() ); } -bool CastBlessingOfMightOnPartyAction::Execute(Event event) +bool CastBlessingOfMightOnPartyAction::Execute(Event /*event*/) { Unit* target = GetTarget(); if (!target) @@ -201,7 +198,7 @@ bool CastBlessingOfMightOnPartyAction::Execute(Event event) return botAI->CastSpell(castName, target); } -bool CastBlessingOfWisdomAction::Execute(Event event) +bool CastBlessingOfWisdomAction::Execute(Event /*event*/) { Unit* target = GetTarget(); if (!target) @@ -222,7 +219,7 @@ Value* CastBlessingOfWisdomOnPartyAction::GetTargetValue() ); } -bool CastBlessingOfWisdomOnPartyAction::Execute(Event event) +bool CastBlessingOfWisdomOnPartyAction::Execute(Event /*event*/) { Unit* target = GetTarget(); if (!target) @@ -258,7 +255,7 @@ Value* CastBlessingOfSanctuaryOnPartyAction::GetTargetValue() ); } -bool CastBlessingOfSanctuaryOnPartyAction::Execute(Event event) +bool CastBlessingOfSanctuaryOnPartyAction::Execute(Event /*event*/) { if (!bot->HasSpell(SPELL_BLESSING_OF_SANCTUARY)) return false; @@ -382,7 +379,7 @@ Value* CastBlessingOfKingsOnPartyAction::GetTargetValue() ); } -bool CastBlessingOfKingsOnPartyAction::Execute(Event event) +bool CastBlessingOfKingsOnPartyAction::Execute(Event /*event*/) { Unit* target = GetTarget(); if (!target) @@ -493,7 +490,7 @@ bool CastDivineSacrificeAction::isUseful() !botAI->HasAura("divine guardian", GetTarget(), false, false, -1, true); } -bool CastCancelDivineSacrificeAction::Execute(Event event) +bool CastCancelDivineSacrificeAction::Execute(Event /*event*/) { botAI->RemoveAura("divine sacrifice"); return true; diff --git a/src/Ai/Class/Paladin/Strategy/GenericPaladinStrategy.cpp b/src/Ai/Class/Paladin/Strategy/GenericPaladinStrategy.cpp index 62d7dfb10..49143f9ae 100644 --- a/src/Ai/Class/Paladin/Strategy/GenericPaladinStrategy.cpp +++ b/src/Ai/Class/Paladin/Strategy/GenericPaladinStrategy.cpp @@ -6,7 +6,6 @@ #include "GenericPaladinStrategy.h" #include "GenericPaladinStrategyActionNodeFactory.h" -#include "Playerbots.h" GenericPaladinStrategy::GenericPaladinStrategy(PlayerbotAI* botAI) : CombatStrategy(botAI) { diff --git a/src/Ai/Class/Priest/Action/PriestActions.cpp b/src/Ai/Class/Priest/Action/PriestActions.cpp index ae55b104d..1bfd7d2a8 100644 --- a/src/Ai/Class/Priest/Action/PriestActions.cpp +++ b/src/Ai/Class/Priest/Action/PriestActions.cpp @@ -8,16 +8,14 @@ #include "Event.h" #include "Playerbots.h" -bool CastRemoveShadowformAction::isUseful() { return botAI->HasAura("shadowform", AI_VALUE(Unit*, "self target")); } - -bool CastRemoveShadowformAction::isPossible() { return true; } - -bool CastRemoveShadowformAction::Execute(Event event) +bool CastRemoveShadowformAction::Execute(Event /*event*/) { botAI->RemoveAura("shadowform"); return true; } +bool CastRemoveShadowformAction::isUseful() { return botAI->HasAura("shadowform", AI_VALUE(Unit*, "self target")); } + Unit* CastPowerWordShieldOnAlmostFullHealthBelowAction::GetTarget() { Group* group = bot->GetGroup(); diff --git a/src/Ai/Class/Priest/Action/PriestActions.h b/src/Ai/Class/Priest/Action/PriestActions.h index 1b09414d4..4e94f27cc 100644 --- a/src/Ai/Class/Priest/Action/PriestActions.h +++ b/src/Ai/Class/Priest/Action/PriestActions.h @@ -56,7 +56,10 @@ HEAL_PARTY_ACTION(CastRenewOnPartyAction, "renew", 15.0f, HealingManaEfficiency: class CastPrayerOfMendingAction : public HealPartyMemberAction { public: - CastPrayerOfMendingAction(PlayerbotAI* botAI) : HealPartyMemberAction(botAI, "prayer of mending", 10.0f, HealingManaEfficiency::HIGH, false) {} + CastPrayerOfMendingAction(PlayerbotAI* botAI) + : HealPartyMemberAction(botAI, "prayer of mending", 10.0f, HealingManaEfficiency::HIGH, false) + { + } }; HEAL_PARTY_ACTION(CastBindingHealAction, "binding heal", 15.0f, HealingManaEfficiency::MEDIUM); @@ -65,7 +68,8 @@ HEAL_PARTY_ACTION(CastPrayerOfHealingAction, "prayer of healing", 15.0f, Healing class CastCircleOfHealingAction : public HealPartyMemberAction { public: - CastCircleOfHealingAction(PlayerbotAI* ai) : HealPartyMemberAction(ai, "circle of healing", 15.0f, HealingManaEfficiency::HIGH) + CastCircleOfHealingAction(PlayerbotAI* ai) + : HealPartyMemberAction(ai, "circle of healing", 15.0f, HealingManaEfficiency::HIGH) { } }; @@ -134,15 +138,15 @@ class CastRemoveShadowformAction : public Action public: CastRemoveShadowformAction(PlayerbotAI* botAI) : Action(botAI, "remove shadowform") {} - bool isUseful() override; - bool isPossible() override; bool Execute(Event event) override; + bool isUseful() override; }; class CastDispersionAction : public CastSpellAction { public: CastDispersionAction(PlayerbotAI* ai) : CastSpellAction(ai, "dispersion") {} + virtual std::string const GetTargetName() { return "self target"; } }; @@ -158,6 +162,7 @@ class CastHymnOfHopeAction : public CastSpellAction { public: CastHymnOfHopeAction(PlayerbotAI* ai) : CastSpellAction(ai, "hymn of hope") {} + virtual std::string const GetTargetName() { return "self target"; } }; @@ -165,6 +170,7 @@ class CastDivineHymnAction : public CastSpellAction { public: CastDivineHymnAction(PlayerbotAI* ai) : CastSpellAction(ai, "divine hymn") {} + virtual std::string const GetTargetName() { return "self target"; } }; @@ -172,6 +178,7 @@ class CastShadowfiendAction : public CastSpellAction { public: CastShadowfiendAction(PlayerbotAI* ai) : CastSpellAction(ai, "shadowfiend") {} + virtual std::string const GetTargetName() { return "current target"; } }; @@ -182,6 +189,7 @@ public: : HealPartyMemberAction(ai, "power word: shield", 15.0f, HealingManaEfficiency::HIGH) { } + bool isUseful() override; Unit* GetTarget() override; }; @@ -193,6 +201,7 @@ public: : HealPartyMemberAction(ai, "power word: shield", 5.0f, HealingManaEfficiency::HIGH) { } + bool isUseful() override; Unit* GetTarget() override; }; @@ -201,13 +210,17 @@ class CastMindSearAction : public CastSpellAction { public: CastMindSearAction(PlayerbotAI* ai) : CastSpellAction(ai, "mind sear") {} + ActionThreatType getThreatType() override { return ActionThreatType::Aoe; } }; class CastGuardianSpiritOnPartyAction : public HealPartyMemberAction { public: - CastGuardianSpiritOnPartyAction(PlayerbotAI* ai) : HealPartyMemberAction(ai, "guardian spirit", 40.0f, HealingManaEfficiency::MEDIUM) {} + CastGuardianSpiritOnPartyAction(PlayerbotAI* ai) + : HealPartyMemberAction(ai, "guardian spirit", 40.0f, HealingManaEfficiency::MEDIUM) + { + } }; #endif diff --git a/src/Ai/Class/Rogue/Action/RogueActions.cpp b/src/Ai/Class/Rogue/Action/RogueActions.cpp index fb4975ab3..b554a8253 100644 --- a/src/Ai/Class/Rogue/Action/RogueActions.cpp +++ b/src/Ai/Class/Rogue/Action/RogueActions.cpp @@ -25,7 +25,7 @@ bool CastStealthAction::isPossible() return !botAI->HasAura(23333, bot) && !botAI->HasAura(23335, bot) && !botAI->HasAura(34976, bot); } -bool UnstealthAction::Execute(Event event) +bool UnstealthAction::Execute(Event /*event*/) { botAI->RemoveAura("stealth"); // botAI->ChangeStrategy("+dps,-stealthed", BOT_STATE_COMBAT); @@ -33,7 +33,7 @@ bool UnstealthAction::Execute(Event event) return true; } -bool CheckStealthAction::Execute(Event event) +bool CheckStealthAction::Execute(Event /*event*/) { if (botAI->HasAura("stealth", bot)) { @@ -69,7 +69,7 @@ bool CastTricksOfTheTradeOnMainTankAction::isUseful() return CastSpellAction::isUseful() && AI_VALUE2(float, "distance", GetTargetName()) < 20.0f; } -bool UseDeadlyPoisonAction::Execute(Event event) +bool UseDeadlyPoisonAction::Execute(Event /*event*/) { std::vector poison_suffixs = {" IX", " VIII", " VII", " VI", " V", " IV", " III", " II", ""}; std::vector items; @@ -109,7 +109,7 @@ bool UseDeadlyPoisonAction::isPossible() return !items.empty(); } -bool UseInstantPoisonAction::Execute(Event event) +bool UseInstantPoisonAction::Execute(Event /*event*/) { std::vector poison_suffixs = {" IX", " VIII", " VII", " VI", " V", " IV", " III", " II", ""}; std::vector items; @@ -148,7 +148,7 @@ bool UseInstantPoisonAction::isPossible() return !items.empty(); } -bool UseInstantPoisonOffHandAction::Execute(Event event) +bool UseInstantPoisonOffHandAction::Execute(Event /*event*/) { std::vector poison_suffixs = {" IX", " VIII", " VII", " VI", " V", " IV", " III", " II", ""}; std::vector items; diff --git a/src/Ai/Class/Rogue/Action/RogueActions.h b/src/Ai/Class/Rogue/Action/RogueActions.h index c31dfbd7e..dd0ad4735 100644 --- a/src/Ai/Class/Rogue/Action/RogueActions.h +++ b/src/Ai/Class/Rogue/Action/RogueActions.h @@ -27,6 +27,7 @@ class CastHungerForBloodAction : public CastBuffSpellAction { public: CastHungerForBloodAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "hunger for blood") {} + std::string const GetTargetName() override { return "current target"; } }; @@ -43,9 +44,9 @@ class CastStealthAction : public CastBuffSpellAction public: CastStealthAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "stealth") {} - std::string const GetTargetName() override { return "self target"; } bool isUseful() override; bool isPossible() override; + std::string const GetTargetName() override { return "self target"; } }; class UnstealthAction : public Action @@ -61,8 +62,8 @@ class CheckStealthAction : public Action public: CheckStealthAction(PlayerbotAI* botAI) : Action(botAI, "check stealth") {} - bool isPossible() override { return true; } bool Execute(Event event) override; + bool isPossible() override { return true; } }; class CastKickAction : public CastSpellAction @@ -131,6 +132,7 @@ class CastEnvenomAction : public CastMeleeSpellAction { public: CastEnvenomAction(PlayerbotAI* ai) : CastMeleeSpellAction(ai, "envenom") {} + bool isUseful() override; bool isPossible() override; }; @@ -139,37 +141,42 @@ class CastTricksOfTheTradeOnMainTankAction : public BuffOnMainTankAction { public: CastTricksOfTheTradeOnMainTankAction(PlayerbotAI* ai) : BuffOnMainTankAction(ai, "tricks of the trade", true) {} - virtual bool isUseful() override; + + bool isUseful() override; }; class UseDeadlyPoisonAction : public UseItemAction { public: UseDeadlyPoisonAction(PlayerbotAI* ai) : UseItemAction(ai, "Deadly Poison") {} - virtual bool Execute(Event event) override; - virtual bool isPossible() override; + + bool Execute(Event event) override; + bool isPossible() override; }; class UseInstantPoisonAction : public UseItemAction { public: UseInstantPoisonAction(PlayerbotAI* ai) : UseItemAction(ai, "Instant Poison") {} - virtual bool Execute(Event event) override; - virtual bool isPossible() override; + + bool Execute(Event event) override; + bool isPossible() override; }; class UseInstantPoisonOffHandAction : public UseItemAction { public: UseInstantPoisonOffHandAction(PlayerbotAI* ai) : UseItemAction(ai, "Instant Poison Off Hand") {} - virtual bool Execute(Event event) override; - virtual bool isPossible() override; + + bool Execute(Event event) override; + bool isPossible() override; }; class FanOfKnivesAction : public CastMeleeSpellAction { public: FanOfKnivesAction(PlayerbotAI* ai) : CastMeleeSpellAction(ai, "fan of knives") {} + ActionThreatType getThreatType() override { return ActionThreatType::Aoe; } }; diff --git a/src/Ai/Class/Shaman/Action/ShamanActions.cpp b/src/Ai/Class/Shaman/Action/ShamanActions.cpp index e8ed1234b..3bb0ae86f 100644 --- a/src/Ai/Class/Shaman/Action/ShamanActions.cpp +++ b/src/Ai/Class/Shaman/Action/ShamanActions.cpp @@ -6,7 +6,6 @@ #include "ShamanActions.h" #include "TotemsShamanStrategy.h" #include "Playerbots.h" -#include "Totem.h" #include "PlayerbotAI.h" #include "Action.h" @@ -71,7 +70,7 @@ bool CastLavaBurstAction::isUseful() // Logic for making a guardian (spirit wolf) use a spell (spirit walk) // There is no existing code for guardians casting spells in the AC/Playerbots repo. -bool CastSpiritWalkAction::Execute(Event event) +bool CastSpiritWalkAction::Execute(Event /*event*/) { constexpr uint32 SPIRIT_WOLF = 29264; constexpr uint32 SPIRIT_WALK_SPELL = 58875; @@ -93,7 +92,7 @@ bool CastSpiritWalkAction::Execute(Event event) // Set Strategy Assigned Totems (Actions) - First, it checks // the highest-rank spell the bot knows for each totem type, // then adds it to the Call of the Elements bar. -bool SetTotemAction::Execute(Event event) +bool SetTotemAction::Execute(Event /*event*/) { uint32 totemSpell = 0; for (size_t i = 0; i < totemSpellIdsCount; ++i) diff --git a/src/Ai/Class/Shaman/Strategy/TotemsShamanStrategy.h b/src/Ai/Class/Shaman/Strategy/TotemsShamanStrategy.h index 6d36f4a27..60488740c 100644 --- a/src/Ai/Class/Shaman/Strategy/TotemsShamanStrategy.h +++ b/src/Ai/Class/Shaman/Strategy/TotemsShamanStrategy.h @@ -7,7 +7,6 @@ #define _PLAYERBOT_TOTEMSSHAMANSTRATEGY_H #include "GenericShamanStrategy.h" -#include #include #include diff --git a/src/Ai/Class/Shaman/Trigger/ShamanTriggers.h b/src/Ai/Class/Shaman/Trigger/ShamanTriggers.h index abf4ed566..65d5081c8 100644 --- a/src/Ai/Class/Shaman/Trigger/ShamanTriggers.h +++ b/src/Ai/Class/Shaman/Trigger/ShamanTriggers.h @@ -10,9 +10,7 @@ #include "GenericTriggers.h" #include "SharedDefines.h" #include "Trigger.h" -#include #include "TotemsShamanStrategy.h" -#include "Player.h" #include "PlayerbotAI.h" #include diff --git a/src/Ai/Class/Warlock/Action/WarlockActions.cpp b/src/Ai/Class/Warlock/Action/WarlockActions.cpp index 4e09eb652..93798b702 100644 --- a/src/Ai/Class/Warlock/Action/WarlockActions.cpp +++ b/src/Ai/Class/Warlock/Action/WarlockActions.cpp @@ -116,7 +116,7 @@ bool CastSoulshatterAction::isUseful() } // Checks if the bot has enough bag space to create a soul shard, then does so -bool CreateSoulShardAction::Execute(Event event) +bool CreateSoulShardAction::Execute(Event /*event*/) { Player* bot = botAI->GetBot(); if (!bot) @@ -188,7 +188,7 @@ bool CastCreateSoulstoneAction::isUseful() return hasSpace; } -bool DestroySoulShardAction::Execute(Event event) +bool DestroySoulShardAction::Execute(Event /*event*/) { // Look for the first soul shard in any bag and destroy it for (int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; ++i) @@ -234,7 +234,7 @@ static bool HasSoulstoneAura(Unit* unit) } // Use the soulstone item on the bot itself with nc strategy "ss self" -bool UseSoulstoneSelfAction::Execute(Event event) +bool UseSoulstoneSelfAction::Execute(Event /*event*/) { std::vector items = AI_VALUE2(std::vector, "inventory items", "soulstone"); if (items.empty()) @@ -266,7 +266,7 @@ void CleanupSoulstoneReservations() } // Use the soulstone item on the bot's master with nc strategy "ss master" -bool UseSoulstoneMasterAction::Execute(Event event) +bool UseSoulstoneMasterAction::Execute(Event /*event*/) { CleanupSoulstoneReservations(); @@ -300,7 +300,7 @@ bool UseSoulstoneMasterAction::Execute(Event event) } // Use the soulstone item on a tank in the group with nc strategy "ss tank" -bool UseSoulstoneTankAction::Execute(Event event) +bool UseSoulstoneTankAction::Execute(Event /*event*/) { CleanupSoulstoneReservations(); @@ -368,7 +368,7 @@ bool UseSoulstoneTankAction::Execute(Event event) } // Use the soulstone item on a healer in the group with nc strategy "ss healer" -bool UseSoulstoneHealerAction::Execute(Event event) +bool UseSoulstoneHealerAction::Execute(Event /*event*/) { CleanupSoulstoneReservations(); @@ -425,7 +425,7 @@ CastCreateFirestoneAction::CastCreateFirestoneAction(PlayerbotAI* botAI) { } -bool CastCreateFirestoneAction::Execute(Event event) +bool CastCreateFirestoneAction::Execute(Event /*event*/) { for (uint32 spellId : firestoneSpellIds) { diff --git a/src/Ai/Class/Warlock/Strategy/GenericWarlockStrategy.cpp b/src/Ai/Class/Warlock/Strategy/GenericWarlockStrategy.cpp index 175977658..9c85f7861 100644 --- a/src/Ai/Class/Warlock/Strategy/GenericWarlockStrategy.cpp +++ b/src/Ai/Class/Warlock/Strategy/GenericWarlockStrategy.cpp @@ -4,8 +4,6 @@ */ #include "GenericWarlockStrategy.h" -#include "Strategy.h" -#include "Playerbots.h" class GenericWarlockStrategyActionNodeFactory : public NamedObjectFactory { diff --git a/src/Ai/Class/Warlock/Strategy/TankWarlockStrategy.cpp b/src/Ai/Class/Warlock/Strategy/TankWarlockStrategy.cpp index c54fd5968..5c922af90 100644 --- a/src/Ai/Class/Warlock/Strategy/TankWarlockStrategy.cpp +++ b/src/Ai/Class/Warlock/Strategy/TankWarlockStrategy.cpp @@ -4,7 +4,6 @@ */ #include "TankWarlockStrategy.h" -#include "Playerbots.h" // Combat strategy for a Warlock Tank, for certain bosses like Twin Emperors // Priority is set to spam Searing Pain and use Shadow Ward on CD diff --git a/src/Ai/Class/Warrior/Action/WarriorActions.cpp b/src/Ai/Class/Warrior/Action/WarriorActions.cpp index 9733226a9..9f15cf767 100644 --- a/src/Ai/Class/Warrior/Action/WarriorActions.cpp +++ b/src/Ai/Class/Warrior/Action/WarriorActions.cpp @@ -93,7 +93,7 @@ Unit* CastVigilanceAction::GetTarget() return nullptr; } -bool CastVigilanceAction::Execute(Event event) +bool CastVigilanceAction::Execute(Event /*event*/) { Unit* target = GetTarget(); if (!target || target == bot) @@ -176,20 +176,19 @@ Unit* CastShatteringThrowAction::GetTarget() return nullptr; // No valid target } +bool CastShatteringThrowAction::Execute(Event /*event*/) +{ + Unit* target = GetTarget(); + if (!target) + return false; + + return botAI->CastSpell("shattering throw", target); +} + bool CastShatteringThrowAction::isUseful() { - - // Spell cooldown check - if (!bot->HasSpell(64382)) - { + if (!bot->HasSpell(64382) || bot->HasSpellCooldown(64382)) return false; - } - - // Spell cooldown check - if (bot->HasSpellCooldown(64382)) - { - return false; - } GuidVector enemies = AI_VALUE(GuidVector, "possible targets"); @@ -220,25 +219,12 @@ bool CastShatteringThrowAction::isPossible() // Range check: Shattering Throw is 30 yards if (!bot->IsWithinDistInMap(target, 30.0f)) - { return false; - } // Check line of sight if (!bot->IsWithinLOSInMap(target)) - { return false; - } // If the minimal checks above pass, simply return true. return true; } - -bool CastShatteringThrowAction::Execute(Event event) -{ - Unit* target = GetTarget(); - if (!target) - return false; - - return botAI->CastSpell("shattering throw", target); -} diff --git a/src/Ai/Class/Warrior/Action/WarriorActions.h b/src/Ai/Class/Warrior/Action/WarriorActions.h index ea72fb269..7910fc0d8 100644 --- a/src/Ai/Class/Warrior/Action/WarriorActions.h +++ b/src/Ai/Class/Warrior/Action/WarriorActions.h @@ -25,8 +25,7 @@ MELEE_ACTION_U(CastBattleShoutTauntAction, "battle shout", CastSpellAction::isUs class CastDemoralizingShoutAction : public CastMeleeDebuffSpellAction { public: - CastDemoralizingShoutAction(PlayerbotAI* botAI) - : CastMeleeDebuffSpellAction(botAI, "demoralizing shout") {} + CastDemoralizingShoutAction(PlayerbotAI* botAI) : CastMeleeDebuffSpellAction(botAI, "demoralizing shout") {} }; class CastDemoralizingShoutWithoutLifeTimeCheckAction : public CastMeleeDebuffSpellAction @@ -140,8 +139,8 @@ class CastVigilanceAction : public BuffOnPartyAction public: CastVigilanceAction(PlayerbotAI* botAI) : BuffOnPartyAction(botAI, "vigilance") {} - Unit* GetTarget() override; bool Execute(Event event) override; + Unit* GetTarget() override; }; class CastRetaliationAction : public CastBuffSpellAction @@ -157,10 +156,10 @@ class CastShatteringThrowAction : public CastSpellAction public: CastShatteringThrowAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "shattering throw") {} - Unit* GetTarget() override; + bool Execute(Event event) override; bool isUseful() override; bool isPossible() override; - bool Execute(Event event) override; + Unit* GetTarget() override; }; #endif diff --git a/src/Ai/Class/Warrior/Strategy/ArmsWarriorStrategy.cpp b/src/Ai/Class/Warrior/Strategy/ArmsWarriorStrategy.cpp index eba5677e7..6d6e0b655 100644 --- a/src/Ai/Class/Warrior/Strategy/ArmsWarriorStrategy.cpp +++ b/src/Ai/Class/Warrior/Strategy/ArmsWarriorStrategy.cpp @@ -5,8 +5,6 @@ #include "ArmsWarriorStrategy.h" -#include "Playerbots.h" - class ArmsWarriorStrategyActionNodeFactory : public NamedObjectFactory { public: diff --git a/src/Ai/Class/Warrior/Strategy/FuryWarriorStrategy.cpp b/src/Ai/Class/Warrior/Strategy/FuryWarriorStrategy.cpp index 6400ee4a8..67e5cb461 100644 --- a/src/Ai/Class/Warrior/Strategy/FuryWarriorStrategy.cpp +++ b/src/Ai/Class/Warrior/Strategy/FuryWarriorStrategy.cpp @@ -5,8 +5,6 @@ #include "FuryWarriorStrategy.h" -#include "Playerbots.h" - class FuryWarriorStrategyActionNodeFactory : public NamedObjectFactory { public: diff --git a/src/Ai/Class/Warrior/Strategy/TankWarriorStrategy.cpp b/src/Ai/Class/Warrior/Strategy/TankWarriorStrategy.cpp index 05f732c30..e6daa2646 100644 --- a/src/Ai/Class/Warrior/Strategy/TankWarriorStrategy.cpp +++ b/src/Ai/Class/Warrior/Strategy/TankWarriorStrategy.cpp @@ -5,8 +5,6 @@ #include "TankWarriorStrategy.h" -#include "Playerbots.h" - class TankWarriorStrategyActionNodeFactory : public NamedObjectFactory { public: diff --git a/src/Ai/Dungeon/AzjolNerub/Action/AzjolNerubActions.cpp b/src/Ai/Dungeon/AzjolNerub/Action/AzjolNerubActions.cpp index e31ffd00f..42026cecf 100644 --- a/src/Ai/Dungeon/AzjolNerub/Action/AzjolNerubActions.cpp +++ b/src/Ai/Dungeon/AzjolNerub/Action/AzjolNerubActions.cpp @@ -1,9 +1,8 @@ #include "Playerbots.h" #include "AzjolNerubActions.h" -#include "AzjolNerubStrategy.h" bool AttackWebWrapAction::isUseful() { return !botAI->IsHeal(bot); } -bool AttackWebWrapAction::Execute(Event event) +bool AttackWebWrapAction::Execute(Event /*event*/) { Unit* webWrap = nullptr; @@ -29,7 +28,7 @@ bool AttackWebWrapAction::Execute(Event event) } bool WatchersTargetAction::isUseful() { return !botAI->IsHeal(bot); } -bool WatchersTargetAction::Execute(Event event) +bool WatchersTargetAction::Execute(Event /*event*/) { // Always prioritise web wraps Unit* currTarget = AI_VALUE(Unit*, "current target"); @@ -95,7 +94,7 @@ bool WatchersTargetAction::Execute(Event event) } bool AnubarakDodgePoundAction::isUseful() { return !AI_VALUE2(bool, "behind", "current target"); } -bool AnubarakDodgePoundAction::Execute(Event event) +bool AnubarakDodgePoundAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "anub'arak"); if (!boss) { return false; } diff --git a/src/Ai/Dungeon/CullingOfStratholme/Action/CullingOfStratholmeActions.cpp b/src/Ai/Dungeon/CullingOfStratholme/Action/CullingOfStratholmeActions.cpp index 15121f4a2..b2732c3cf 100644 --- a/src/Ai/Dungeon/CullingOfStratholme/Action/CullingOfStratholmeActions.cpp +++ b/src/Ai/Dungeon/CullingOfStratholme/Action/CullingOfStratholmeActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "CullingOfStratholmeActions.h" -#include "CullingOfStratholmeStrategy.h" -bool ExplodeGhoulSpreadAction::Execute(Event event) +bool ExplodeGhoulSpreadAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "salramm the fleshcrafter"); if (!boss) { return false; } @@ -38,7 +37,7 @@ bool EpochStackAction::isUseful() // else return !(bot->getClass() == CLASS_HUNTER) && AI_VALUE2(float, "distance", "current target") > 5.0f; } -bool EpochStackAction::Execute(Event event) +bool EpochStackAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "chrono-lord epoch"); if (!boss) { return false; } diff --git a/src/Ai/Dungeon/DraktharonKeep/Action/DrakTharonKeepActions.cpp b/src/Ai/Dungeon/DraktharonKeep/Action/DrakTharonKeepActions.cpp index 8cbbe49c2..07e23699e 100644 --- a/src/Ai/Dungeon/DraktharonKeep/Action/DrakTharonKeepActions.cpp +++ b/src/Ai/Dungeon/DraktharonKeep/Action/DrakTharonKeepActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "DrakTharonKeepActions.h" -#include "DrakTharonKeepStrategy.h" -bool CorpseExplodeSpreadAction::Execute(Event event) +bool CorpseExplodeSpreadAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "trollgore"); if (!boss) { return false; } @@ -17,15 +16,13 @@ bool CorpseExplodeSpreadAction::Execute(Event event) { float currentDistance = bot->GetExactDist2d(unit); if (currentDistance < distance + distanceExtra) - { return MoveAway(unit, distance + distanceExtra - currentDistance); - } } } return false; } -bool AvoidArcaneFieldAction::Execute(Event event) +bool AvoidArcaneFieldAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "novos the summoner"); if (!boss) { return false; } @@ -44,7 +41,7 @@ bool NovosDefaultPositionAction::isUseful() float threshold = 15.0f; return bot->GetDistance(NOVOS_PARTY_POSITION) > threshold; } -bool NovosDefaultPositionAction::Execute(Event event) +bool NovosDefaultPositionAction::Execute(Event /*event*/) { float clusterDistance = 4.0f; // Only reposition if we're not killing anything @@ -59,7 +56,7 @@ bool NovosDefaultPositionAction::Execute(Event event) return false; } -bool NovosTargetPriorityAction::Execute(Event event) +bool NovosTargetPriorityAction::Execute(Event /*event*/) { // TODO: This can be improved, some parts are still buggy. // But it works for now and this fight is very easy @@ -89,9 +86,7 @@ bool NovosTargetPriorityAction::Execute(Event event) // Ranged dps, only set if none already assigned. // Don't break, we want to keep searching for a melee instead. if (!stairsDps) - { stairsDps = groupMember; - } } } } @@ -112,13 +107,11 @@ bool NovosTargetPriorityAction::Execute(Event event) if (botAI->IsTank(bot)) { if (creatureId == NPC_HULKING_CORPSE) - { selectedTargets[0] = unit; - } + else if (creatureId == NPC_CRYSTAL_HANDLER) - { selectedTargets[1] = unit; - } + } // Dedicated stairs dps is assigned. // Priority: Risen Shadowcaster -> Fetid Troll Corpse @@ -127,17 +120,13 @@ bool NovosTargetPriorityAction::Execute(Event event) if (creatureId == NPC_RISEN_SHADOWCASTER) { if (!selectedTargets[0] || bot->GetDistance(unit) < bot->GetDistance(selectedTargets[0]) - 5.0f) - { selectedTargets[0] = unit; - } } else if (creatureId == NPC_FETID_TROLL_CORPSE) { if (!selectedTargets[1] || bot->GetDistance(unit) < bot->GetDistance(selectedTargets[1]) - 5.0f) - { selectedTargets[1] = unit; - } } } // All other dps priority: @@ -145,13 +134,10 @@ bool NovosTargetPriorityAction::Execute(Event event) else if (botAI->IsDps(bot)) { if (creatureId == NPC_CRYSTAL_HANDLER) - { selectedTargets[0] = unit; - } + else if (creatureId == NPC_HULKING_CORPSE) - { selectedTargets[1] = unit; - } } } diff --git a/src/Ai/Dungeon/ForgeOfSouls/Action/ForgeOfSoulsActions.cpp b/src/Ai/Dungeon/ForgeOfSouls/Action/ForgeOfSoulsActions.cpp index e72fe98d5..d83b69bb4 100644 --- a/src/Ai/Dungeon/ForgeOfSouls/Action/ForgeOfSoulsActions.cpp +++ b/src/Ai/Dungeon/ForgeOfSouls/Action/ForgeOfSoulsActions.cpp @@ -1,9 +1,7 @@ #include "Playerbots.h" #include "ForgeOfSoulsActions.h" -#include "ForgeOfSoulsStrategy.h" -#include "SharedDefines.h" -bool MoveFromBronjahmAction::Execute(Event event) +bool MoveFromBronjahmAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "bronjahm"); if (!boss) @@ -17,7 +15,7 @@ bool MoveFromBronjahmAction::Execute(Event event) return false; } -bool AttackCorruptedSoulFragmentAction::Execute(Event event) +bool AttackCorruptedSoulFragmentAction::Execute(Event /*event*/) { Unit* currentTarget = AI_VALUE(Unit*, "current target"); GuidVector targets = AI_VALUE(GuidVector, "possible targets"); @@ -51,7 +49,7 @@ bool AttackCorruptedSoulFragmentAction::Execute(Event event) return false; } -bool BronjahmGroupPositionAction::Execute(Event event) +bool BronjahmGroupPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "bronjahm"); if (!boss) @@ -141,7 +139,7 @@ bool BronjahmGroupPositionAction::Execute(Event event) bool BronjahmGroupPositionAction::isUseful() { return true; } -bool DevourerOfSoulsAction::Execute(Event event) +bool DevourerOfSoulsAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "devourer of souls"); if (!boss) diff --git a/src/Ai/Dungeon/Gundrak/Action/GundrakActions.cpp b/src/Ai/Dungeon/Gundrak/Action/GundrakActions.cpp index 4e9910993..775e8ef29 100644 --- a/src/Ai/Dungeon/Gundrak/Action/GundrakActions.cpp +++ b/src/Ai/Dungeon/Gundrak/Action/GundrakActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "GundrakActions.h" -#include "GundrakStrategy.h" -bool AvoidPoisonNovaAction::Execute(Event event) +bool AvoidPoisonNovaAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "slad'ran"); if (!boss) { return false; } @@ -19,7 +18,7 @@ bool AvoidPoisonNovaAction::Execute(Event event) return false; } -bool AttackSnakeWrapAction::Execute(Event event) +bool AttackSnakeWrapAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "slad'ran"); if (!boss) { return false; } @@ -45,7 +44,7 @@ bool AttackSnakeWrapAction::Execute(Event event) return false; } -bool AvoidWhirlingSlashAction::Execute(Event event) +bool AvoidWhirlingSlashAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "gal'darah"); if (!boss) { return false; } diff --git a/src/Ai/Dungeon/HallsOfLightning/Action/HallsOfLightningActions.cpp b/src/Ai/Dungeon/HallsOfLightning/Action/HallsOfLightningActions.cpp index 047e0aee1..7dcf64333 100644 --- a/src/Ai/Dungeon/HallsOfLightning/Action/HallsOfLightningActions.cpp +++ b/src/Ai/Dungeon/HallsOfLightning/Action/HallsOfLightningActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "HallsOfLightningActions.h" -#include "HallsOfLightningStrategy.h" -bool BjarngrimTargetAction::Execute(Event event) +bool BjarngrimTargetAction::Execute(Event /*event*/) { Unit* target = nullptr; @@ -35,7 +34,7 @@ bool BjarngrimTargetAction::Execute(Event event) return Attack(target); } -bool AvoidWhirlwindAction::Execute(Event event) +bool AvoidWhirlwindAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "general bjarngrim"); if (!boss) { return false; } @@ -52,7 +51,7 @@ bool AvoidWhirlwindAction::Execute(Event event) return false; } -bool VolkhanTargetAction::Execute(Event event) +bool VolkhanTargetAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "volkhan"); if (!boss || AI_VALUE(Unit*, "current target") == boss) @@ -63,7 +62,7 @@ bool VolkhanTargetAction::Execute(Event event) return Attack(boss); } -bool StaticOverloadSpreadAction::Execute(Event event) +bool StaticOverloadSpreadAction::Execute(Event /*event*/) { float radius = 8.0f; float distanceExtra = 2.0f; @@ -86,7 +85,7 @@ bool StaticOverloadSpreadAction::Execute(Event event) return false; } -bool BallLightningSpreadAction::Execute(Event event) +bool BallLightningSpreadAction::Execute(Event /*event*/) { float radius = 6.0f; float distanceExtra = 1.0f; @@ -108,14 +107,14 @@ bool BallLightningSpreadAction::Execute(Event event) } bool IonarTankPositionAction::isUseful() { return bot->GetExactDist2d(IONAR_TANK_POSITION) > 10.0f; } -bool IonarTankPositionAction::Execute(Event event) +bool IonarTankPositionAction::Execute(Event /*event*/) { return MoveTo(bot->GetMapId(), IONAR_TANK_POSITION.GetPositionX(), IONAR_TANK_POSITION.GetPositionY(), IONAR_TANK_POSITION.GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_COMBAT); } bool DispersePositionAction::isUseful() { return bot->GetExactDist2d(DISPERSE_POSITION) > 8.0f; } -bool DispersePositionAction::Execute(Event event) +bool DispersePositionAction::Execute(Event /*event*/) { return MoveTo(bot->GetMapId(), DISPERSE_POSITION.GetPositionX(), DISPERSE_POSITION.GetPositionY(), DISPERSE_POSITION.GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_COMBAT); @@ -133,7 +132,7 @@ bool LokenStackAction::isUseful() // else return AI_VALUE2(float, "distance", "current target") > 2.0f; } -bool LokenStackAction::Execute(Event event) +bool LokenStackAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "loken"); if (!boss) { return false; } @@ -152,7 +151,7 @@ bool LokenStackAction::Execute(Event event) return false; } -bool AvoidLightningNovaAction::Execute(Event event) +bool AvoidLightningNovaAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "loken"); if (!boss) { return false; } diff --git a/src/Ai/Dungeon/HallsOfStone/Action/HallsOfStoneActions.cpp b/src/Ai/Dungeon/HallsOfStone/Action/HallsOfStoneActions.cpp index 30562f090..51f1072b5 100644 --- a/src/Ai/Dungeon/HallsOfStone/Action/HallsOfStoneActions.cpp +++ b/src/Ai/Dungeon/HallsOfStone/Action/HallsOfStoneActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "HallsOfStoneActions.h" -#include "HallsOfStoneStrategy.h" -bool ShatterSpreadAction::Execute(Event event) +bool ShatterSpreadAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "krystallus"); if (!boss) { return false; } @@ -35,7 +34,7 @@ bool ShatterSpreadAction::Execute(Event event) return false; } -bool AvoidLightningRingAction::Execute(Event event) +bool AvoidLightningRingAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sjonnir the ironshaper"); if (!boss) { return false; } diff --git a/src/Ai/Dungeon/Nexus/Action/NexusActions.cpp b/src/Ai/Dungeon/Nexus/Action/NexusActions.cpp index f61a95aef..12b546b5e 100644 --- a/src/Ai/Dungeon/Nexus/Action/NexusActions.cpp +++ b/src/Ai/Dungeon/Nexus/Action/NexusActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "NexusActions.h" -#include "NexusStrategy.h" -bool MoveFromWhirlwindAction::Execute(Event event) +bool MoveFromWhirlwindAction::Execute(Event /*event*/) { Unit* boss = nullptr; uint8 faction = bot->GetTeamId(); @@ -12,23 +11,19 @@ bool MoveFromWhirlwindAction::Execute(Event event) { case DUNGEON_DIFFICULTY_NORMAL: if (faction == TEAM_ALLIANCE) - { boss = AI_VALUE2(Unit*, "find target", "horde commander"); - } + else // TEAM_HORDE - { boss = AI_VALUE2(Unit*, "find target", "alliance commander"); - } + break; case DUNGEON_DIFFICULTY_HEROIC: if (faction == TEAM_ALLIANCE) - { boss = AI_VALUE2(Unit*, "find target", "commander kolurg"); - } + else // TEAM_HORDE - { boss = AI_VALUE2(Unit*, "find target", "commander stoutbeard"); - } + break; default: break; @@ -36,23 +31,19 @@ bool MoveFromWhirlwindAction::Execute(Event event) // Ensure boss is valid before accessing its methods if (!boss) - { return false; - } float bossDistance = bot->GetExactDist2d(boss->GetPosition()); // Check if the bot is already at a safe distance if (bossDistance > targetDist) - { return false; - } // Move away from the boss to avoid Whirlwind return MoveAway(boss, targetDist - bossDistance); } -bool FirebombSpreadAction::Execute(Event event) +bool FirebombSpreadAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "grand magus telestra"); float radius = 5.0f; @@ -66,15 +57,14 @@ bool FirebombSpreadAction::Execute(Event event) if (!unit || bot->GetGUID() == member) { continue; } if (bot->GetExactDist2d(unit) < targetDist) - { return MoveAway(unit, targetDist); - } + } return false; } bool TelestraSplitTargetAction::isUseful() { return !botAI->IsHeal(bot); } -bool TelestraSplitTargetAction::Execute(Event event) +bool TelestraSplitTargetAction::Execute(Event /*event*/) { GuidVector attackers = AI_VALUE(GuidVector, "attackers"); Unit* splitTargets[3] = {nullptr, nullptr, nullptr}; @@ -107,9 +97,8 @@ bool TelestraSplitTargetAction::Execute(Event event) if (target) { if (AI_VALUE(Unit*, "current target") != target) - { return Attack(target); - } + // Don't continue loop here, the target exists so we don't // want to move down the prio list. We just don't need to send attack // command again, just return false and exit the loop that way @@ -121,7 +110,7 @@ bool TelestraSplitTargetAction::Execute(Event event) } bool ChaoticRiftTargetAction::isUseful() { return !botAI->IsHeal(bot); } -bool ChaoticRiftTargetAction::Execute(Event event) +bool ChaoticRiftTargetAction::Execute(Event /*event*/) { Unit* chaoticRift = nullptr; @@ -139,9 +128,8 @@ bool ChaoticRiftTargetAction::Execute(Event event) } } if (!chaoticRift || AI_VALUE(Unit*, "current target") == chaoticRift) - { return false; - } + return Attack(chaoticRift); } @@ -152,7 +140,7 @@ bool DodgeSpikesAction::isUseful() return bot->GetExactDist2d(boss) > 0.5f; } -bool DodgeSpikesAction::Execute(Event event) +bool DodgeSpikesAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "ormorok the tree-shaper"); if (!boss) { return false; } @@ -160,7 +148,7 @@ bool DodgeSpikesAction::Execute(Event event) return Move(bot->GetAngle(boss), bot->GetExactDist2d(boss) - 0.3f); } -bool IntenseColdJumpAction::Execute(Event event) +bool IntenseColdJumpAction::Execute(Event /*event*/) { // This needs improving but maybe it should be done in the playerbot core. // Jump doesn't seem to support zero offset (eg. jump on the spot) so need to add a tiny delta. diff --git a/src/Ai/Dungeon/Oculus/Action/OculusActions.cpp b/src/Ai/Dungeon/Oculus/Action/OculusActions.cpp index bbb94d110..385451003 100644 --- a/src/Ai/Dungeon/Oculus/Action/OculusActions.cpp +++ b/src/Ai/Dungeon/Oculus/Action/OculusActions.cpp @@ -1,9 +1,9 @@ +#include "OculusTriggers.h" #include "Playerbots.h" #include "OculusActions.h" -#include "OculusStrategy.h" #include "LastSpellCastValue.h" -bool AvoidUnstableSphereAction::Execute(Event event) +bool AvoidUnstableSphereAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "drakos the interrogator"); if (!boss) { return false; } @@ -34,7 +34,7 @@ bool AvoidUnstableSphereAction::Execute(Event event) } bool MountDrakeAction::isPossible() { return bot->GetMapId() == OCULUS_MAP_ID; } -bool MountDrakeAction::Execute(Event event) +bool MountDrakeAction::Execute(Event /*event*/) { std::map drakeAssignments; // Composition can be adjusted - both 3/1/1 and 2/2/1 are good default comps @@ -88,7 +88,7 @@ bool MountDrakeAction::Execute(Event event) } // Correct/update the drake items in inventories incase assignments have changed - for (uint32 itemId : DRAKE_ITEMS) + for (int64_t itemId : DRAKE_ITEMS) { Item* item = bot->GetItemByEntry(itemId); if (!item) { continue; } @@ -109,7 +109,7 @@ bool MountDrakeAction::Execute(Event event) return false; } -bool DismountDrakeAction::Execute(Event event) +bool DismountDrakeAction::Execute(Event /*event*/) { if (bot->GetVehicle()) { @@ -119,7 +119,7 @@ bool DismountDrakeAction::Execute(Event event) return false; } -bool OccFlyDrakeAction::Execute(Event event) +bool OccFlyDrakeAction::Execute(Event /*event*/) { Player* master = botAI->GetMaster(); if (!master) { return false; } @@ -160,7 +160,7 @@ bool OccFlyDrakeAction::Execute(Event event) return false; } -bool OccDrakeAttackAction::Execute(Event event) +bool OccDrakeAttackAction::Execute(Event /*event*/) { vehicleBase = bot->GetVehicleBase(); if (!vehicleBase) { return false; } @@ -319,7 +319,7 @@ bool OccDrakeAttackAction::RubyDrakeAction(Unit* target) return CastDrakeSpellAction(target, SPELL_SEARING_WRATH, 0); } -bool AvoidArcaneExplosionAction::Execute(Event event) +bool AvoidArcaneExplosionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "mage-lord urom"); if (!boss) { return false; } @@ -339,7 +339,7 @@ bool AvoidArcaneExplosionAction::Execute(Event event) return MoveNear(bot->GetMapId(), closestPos->GetPositionX(), closestPos->GetPositionY(), closestPos->GetPositionZ(), 2.0f, MovementPriority::MOVEMENT_COMBAT); } -bool TimeBombSpreadAction::Execute(Event event) +bool TimeBombSpreadAction::Execute(Event /*event*/) { float radius = 10.0f; float distanceExtra = 2.0f; diff --git a/src/Ai/Dungeon/Oculus/Action/OculusActions.h b/src/Ai/Dungeon/Oculus/Action/OculusActions.h index 6b26b9ddb..6616ce884 100644 --- a/src/Ai/Dungeon/Oculus/Action/OculusActions.h +++ b/src/Ai/Dungeon/Oculus/Action/OculusActions.h @@ -4,8 +4,6 @@ #include "Action.h" #include "AttackAction.h" #include "PlayerbotAI.h" -#include "Playerbots.h" -#include "OculusTriggers.h" #include "UseItemAction.h" #include "GenericSpellActions.h" diff --git a/src/Ai/Dungeon/Oculus/Multiplier/OculusMultipliers.cpp b/src/Ai/Dungeon/Oculus/Multiplier/OculusMultipliers.cpp index 7be543ee7..f8fcdd3f1 100644 --- a/src/Ai/Dungeon/Oculus/Multiplier/OculusMultipliers.cpp +++ b/src/Ai/Dungeon/Oculus/Multiplier/OculusMultipliers.cpp @@ -6,6 +6,7 @@ #include "OculusTriggers.h" #include "FollowActions.h" #include "ReachTargetActions.h" +#include "Playerbots.h" float MountingDrakeMultiplier::GetValue(Action* action) { @@ -15,14 +16,14 @@ float MountingDrakeMultiplier::GetValue(Action* action) // It seems like this is due to moving/other actions being processed during the 0.5 secs. // If we suppress everything, they seem to mount properly. A bit of a ham-fisted solution but it works Player* master = botAI->GetMaster(); - if (!master) { return 1.0f; } + if (!master) + return 1.0f; if (bot->GetMapId() != OCULUS_MAP_ID || !master->GetVehicleBase() || bot->GetVehicleBase()) { return 1.0f; } if (!dynamic_cast(action)) - { return 0.0f; - } + return 1.0f; } @@ -32,9 +33,8 @@ float OccFlyingMultiplier::GetValue(Action* action) // Suppresses FollowAction as well as some attack-based movements if (dynamic_cast(action) && !dynamic_cast(action)) - { return 0.0f; - } + return 1.0f; } @@ -44,9 +44,7 @@ float UromMultiplier::GetValue(Action* action) { Unit* target = action->GetTarget(); if (target && target->GetEntry() == NPC_MAGE_LORD_UROM) - { return 0.0f; - } } Unit* boss = AI_VALUE2(Unit*, "find target", "mage-lord urom"); @@ -57,26 +55,20 @@ float UromMultiplier::GetValue(Action* action) boss->FindCurrentSpellBySpellId(SPELL_EMPOWERED_ARCANE_EXPLOSION)) { if (dynamic_cast(action) && !dynamic_cast(action)) - { return 0.0f; - } } // Don't bother avoiding Frostbomb for melee if (botAI->IsMelee(bot)) { if (dynamic_cast(action)) - { return 0.0f; - } } if (bot->HasAura(SPELL_TIME_BOMB)) { if (dynamic_cast(action) && !dynamic_cast(action)) - { return 0.0f; - } } return 1.0f; @@ -91,9 +83,7 @@ uint8 UromMultiplier::GetPhaseByCurrentPosition(Unit* unit) for (uint8 i = 0; i < 3; ++i) { if (unit->GetDistance(uromCoords[i][0], uromCoords[i][1], uromCoords[i][2]) < distance) - { return i; - } } return 3; } @@ -104,8 +94,7 @@ float EregosMultiplier::GetValue(Action* action) if (!boss) { return 1.0f; } if (boss->HasAura(SPELL_PLANAR_SHIFT && dynamic_cast(action))) - { return 0.0f; - } + return 1.0f; } diff --git a/src/Ai/Dungeon/OldKingdom/Action/OldKingdomActions.cpp b/src/Ai/Dungeon/OldKingdom/Action/OldKingdomActions.cpp index 916bf2920..8a5250a8d 100644 --- a/src/Ai/Dungeon/OldKingdom/Action/OldKingdomActions.cpp +++ b/src/Ai/Dungeon/OldKingdom/Action/OldKingdomActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "OldKingdomActions.h" -#include "OldKingdomStrategy.h" -bool AttackNadoxGuardianAction::Execute(Event event) +bool AttackNadoxGuardianAction::Execute(Event /*event*/) { Unit* target = AI_VALUE2(Unit*, "find target", "ahn'kahar guardian"); if (!target || AI_VALUE(Unit*, "current target") == target) @@ -12,7 +11,7 @@ bool AttackNadoxGuardianAction::Execute(Event event) return Attack(target); } -bool AttackJedogaVolunteerAction::Execute(Event event) +bool AttackJedogaVolunteerAction::Execute(Event /*event*/) { Unit* target = nullptr; // Target is not findable from threat table using AI_VALUE2(), @@ -40,7 +39,7 @@ bool AttackJedogaVolunteerAction::Execute(Event event) return Attack(target); } -bool AvoidShadowCrashAction::Execute(Event event) +bool AvoidShadowCrashAction::Execute(Event /*event*/) { // Could check all enemy units in range as it's possible to pull multiple of these mobs. // They should really be killed 1 by 1, multipulls are messy so we just handle singles for now diff --git a/src/Ai/Dungeon/PitOfSaron/Action/PitOfSaronActions.cpp b/src/Ai/Dungeon/PitOfSaron/Action/PitOfSaronActions.cpp index f34b98462..577575d42 100644 --- a/src/Ai/Dungeon/PitOfSaron/Action/PitOfSaronActions.cpp +++ b/src/Ai/Dungeon/PitOfSaron/Action/PitOfSaronActions.cpp @@ -1,9 +1,7 @@ #include "Playerbots.h" #include "PitOfSaronActions.h" -#include "PitOfSaronStrategy.h" -#include "SharedDefines.h" -bool IckAndKrickAction::Execute(Event event) +bool IckAndKrickAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "Ick"); if (!boss) @@ -193,17 +191,18 @@ bool IckAndKrickAction::ExplosiveBarrage(bool explosiveBarrage, Unit* boss) { float angle = i * ANGLE_INCREMENT; Position potentialPos; - potentialPos.m_positionX = bot->GetPositionX() + SAFE_DISTANCE * cos(angle); - potentialPos.m_positionY = bot->GetPositionY() + SAFE_DISTANCE * sin(angle); - potentialPos.m_positionZ = bot->GetPositionZ(); + potentialPos.Relocate(bot->GetPositionX() + SAFE_DISTANCE * cos(angle), + bot->GetPositionY() + SAFE_DISTANCE * sin(angle), + bot->GetPositionZ()); // Check if position is valid (not in a wall) - if (!bot->IsWithinLOS(potentialPos.m_positionX, potentialPos.m_positionY, potentialPos.m_positionZ)) + if (!bot->IsWithinLOS(potentialPos.GetPositionX(), potentialPos.GetPositionY(), + potentialPos.GetPositionZ())) continue; // Check if position is within maximum allowed distance from boss - if (boss && sqrt(pow(potentialPos.m_positionX - boss->GetPositionX(), 2) + - pow(potentialPos.m_positionY - boss->GetPositionY(), 2)) > MAX_BOSS_DISTANCE) + if (boss && sqrt(pow(potentialPos.GetPositionX() - boss->GetPositionX(), 2) + + pow(potentialPos.GetPositionY() - boss->GetPositionY(), 2)) > MAX_BOSS_DISTANCE) continue; // Score this position based on: @@ -216,8 +215,8 @@ bool IckAndKrickAction::ExplosiveBarrage(bool explosiveBarrage, Unit* boss) float minOrbDist = std::numeric_limits::max(); for (Unit* orb : orbs) { - float orbDist = sqrt(pow(potentialPos.m_positionX - orb->GetPositionX(), 2) + - pow(potentialPos.m_positionY - orb->GetPositionY(), 2)); + float orbDist = sqrt(pow(potentialPos.GetPositionX() - orb->GetPositionX(), 2) + + pow(potentialPos.GetPositionY() - orb->GetPositionY(), 2)); minOrbDist = std::min(minOrbDist, orbDist); } score += minOrbDist * 2.0f; // Weight orb distance more heavily @@ -225,16 +224,16 @@ bool IckAndKrickAction::ExplosiveBarrage(bool explosiveBarrage, Unit* boss) // Check distance from other players for (const Position& playerPos : playerPositions) { - float playerDist = sqrt(pow(potentialPos.m_positionX - playerPos.m_positionX, 2) + - pow(potentialPos.m_positionY - playerPos.m_positionY, 2)); + float playerDist = sqrt(pow(potentialPos.GetPositionX() - playerPos.GetPositionX(), 2) + + pow(potentialPos.GetPositionY() - playerPos.GetPositionY(), 2)); score += std::min(playerDist, 10.0f); // Cap player distance contribution } // Factor in proximity to boss (closer is better, as long as we're safe from orbs) if (boss) { - float bossDist = sqrt(pow(potentialPos.m_positionX - boss->GetPositionX(), 2) + - pow(potentialPos.m_positionY - boss->GetPositionY(), 2)); + float bossDist = sqrt(pow(potentialPos.GetPositionX() - boss->GetPositionX(), 2) + + pow(potentialPos.GetPositionY() - boss->GetPositionY(), 2)); // Add points for being closer to boss (inverse relationship) // but only if we're safely away from orbs if (minOrbDist > SAFE_DISTANCE) @@ -257,7 +256,8 @@ bool IckAndKrickAction::ExplosiveBarrage(bool explosiveBarrage, Unit* boss) { botAI->Reset(); // Use MoveTo instead of FleePosition since we already calculated the exact position - return MoveTo(bot->GetMapId(), bestPos.m_positionX, bestPos.m_positionY, bot->GetPositionZ(), false, false, + return MoveTo(bot->GetMapId(), bestPos.GetPositionX(), bestPos.GetPositionY(), bot->GetPositionZ(), false, + false, false, true, MovementPriority::MOVEMENT_COMBAT); } else @@ -269,7 +269,7 @@ bool IckAndKrickAction::ExplosiveBarrage(bool explosiveBarrage, Unit* boss) return false; } -bool TyrannusAction::Execute(Event event) +bool TyrannusAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "scourgelord tyrannus"); if (!boss) diff --git a/src/Ai/Dungeon/TrialOfTheChampion/Action/TrialOfTheChampionActions.cpp b/src/Ai/Dungeon/TrialOfTheChampion/Action/TrialOfTheChampionActions.cpp index 92b687b29..da865a2d1 100644 --- a/src/Ai/Dungeon/TrialOfTheChampion/Action/TrialOfTheChampionActions.cpp +++ b/src/Ai/Dungeon/TrialOfTheChampion/Action/TrialOfTheChampionActions.cpp @@ -1,15 +1,12 @@ #include "Playerbots.h" #include "TrialOfTheChampionActions.h" -#include "TrialOfTheChampionStrategy.h" #include "NearestNpcsValue.h" #include "ObjectAccessor.h" -#include "Timer.h" #include "Vehicle.h" #include "GenericSpellActions.h" #include "GenericActions.h" -#include -bool ToCLanceAction::Execute(Event event) +bool ToCLanceAction::Execute(Event /*event*/) { // If already has lance equipped, do nothing if (bot->HasItemOrGemWithIdEquipped(ITEM_LANCE, 1)) @@ -64,13 +61,11 @@ bool ToCLanceAction::Execute(Event event) // First unequip current weapon if it exists if (oldWeapon) - { bot->SwapItem(oldWeapon->GetPos(), lanceItem->GetPos()); - } + else - { bot->EquipItem(EQUIPMENT_SLOT_MAINHAND, lanceItem, true); - } + return true; } @@ -105,7 +100,7 @@ bool ToCUELanceAction::Execute(Event event) return false; } -bool ToCMountedAction::Execute(Event event) +bool ToCMountedAction::Execute(Event /*event*/) { Unit* vehicleBase = bot->GetVehicleBase(); Vehicle* vehicle = bot->GetVehicle(); @@ -179,7 +174,7 @@ bool ToCMountedAction::Execute(Event event) return false; } -bool ToCMountAction::Execute(Event event) +bool ToCMountAction::Execute(Event /*event*/) { // do not switch vehicles yet if (bot->GetVehicle()) @@ -244,7 +239,7 @@ bool ToCMountAction::EnterVehicle(Unit* vehicleBase, bool moveIfFar) return true; } -bool ToCEadricAction::Execute(Event event) +bool ToCEadricAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "eadric the pure"); if (!boss) diff --git a/src/Ai/Dungeon/TrialOfTheChampion/Strategy/TrialOfTheChampionStrategy.cpp b/src/Ai/Dungeon/TrialOfTheChampion/Strategy/TrialOfTheChampionStrategy.cpp index bbccca71f..323970d52 100644 --- a/src/Ai/Dungeon/TrialOfTheChampion/Strategy/TrialOfTheChampionStrategy.cpp +++ b/src/Ai/Dungeon/TrialOfTheChampion/Strategy/TrialOfTheChampionStrategy.cpp @@ -1,5 +1,4 @@ #include "TrialOfTheChampionStrategy.h" -#include "TrialOfTheChampionMultipliers.h" void WotlkDungeonToCStrategy::InitTriggers(std::vector &triggers) { diff --git a/src/Ai/Dungeon/UtgardeKeep/Action/UtgardeKeepActions.cpp b/src/Ai/Dungeon/UtgardeKeep/Action/UtgardeKeepActions.cpp index 20a5f27b4..85d8590ee 100644 --- a/src/Ai/Dungeon/UtgardeKeep/Action/UtgardeKeepActions.cpp +++ b/src/Ai/Dungeon/UtgardeKeep/Action/UtgardeKeepActions.cpp @@ -1,9 +1,8 @@ #include "Playerbots.h" #include "UtgardeKeepActions.h" -#include "UtgardeKeepStrategy.h" bool AttackFrostTombAction::isUseful() { return !botAI->IsHeal(bot); } -bool AttackFrostTombAction::Execute(Event event) +bool AttackFrostTombAction::Execute(Event /*event*/) { Unit* frostTomb = nullptr; @@ -28,7 +27,7 @@ bool AttackFrostTombAction::Execute(Event event) } // TODO: Possibly add player stacking behaviour close to tank, to prevent Skarvald charging ranged -bool AttackDalronnAction::Execute(Event event) +bool AttackDalronnAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "dalronn the controller"); if (!boss) { return false; } @@ -40,7 +39,7 @@ bool AttackDalronnAction::Execute(Event event) return Attack(boss); } -bool IngvarStopCastingAction::Execute(Event event) +bool IngvarStopCastingAction::Execute(Event /*event*/) { // Doesn't work, this action gets queued behind the current spell instead of interrupting it Unit* boss = AI_VALUE2(Unit*, "find target", "ingvar the plunderer"); @@ -64,7 +63,7 @@ bool IngvarStopCastingAction::Execute(Event event) } bool IngvarDodgeSmashAction::isUseful() { return !AI_VALUE2(bool, "behind", "current target"); } -bool IngvarDodgeSmashAction::Execute(Event event) +bool IngvarDodgeSmashAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "ingvar the plunderer"); if (!boss) { return false; } @@ -78,7 +77,7 @@ bool IngvarDodgeSmashAction::Execute(Event event) } bool IngvarSmashReturnAction::isUseful() { return AI_VALUE2(bool, "behind", "current target"); } -bool IngvarSmashReturnAction::Execute(Event event) +bool IngvarSmashReturnAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "ingvar the plunderer"); if (!boss) { return false; } diff --git a/src/Ai/Dungeon/UtgardePinnacle/Action/UtgardePinnacleActions.cpp b/src/Ai/Dungeon/UtgardePinnacle/Action/UtgardePinnacleActions.cpp index f084ca15b..8025f1aac 100644 --- a/src/Ai/Dungeon/UtgardePinnacle/Action/UtgardePinnacleActions.cpp +++ b/src/Ai/Dungeon/UtgardePinnacle/Action/UtgardePinnacleActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "UtgardePinnacleActions.h" -#include "UtgardePinnacleStrategy.h" -bool AvoidFreezingCloudAction::Execute(Event event) +bool AvoidFreezingCloudAction::Execute(Event /*event*/) { Unit* closestTrigger = nullptr; GuidVector objects = AI_VALUE(GuidVector, "nearest hostile npcs"); @@ -36,7 +35,7 @@ bool AvoidFreezingCloudAction::Execute(Event event) return false; } -bool AvoidSkadiWhirlwindAction::Execute(Event event) +bool AvoidSkadiWhirlwindAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "skadi the ruthless"); if (!boss) { return false; } diff --git a/src/Ai/Dungeon/VioletHold/Action/VioletHoldActions.cpp b/src/Ai/Dungeon/VioletHold/Action/VioletHoldActions.cpp index b590642d8..b61f84bdf 100644 --- a/src/Ai/Dungeon/VioletHold/Action/VioletHoldActions.cpp +++ b/src/Ai/Dungeon/VioletHold/Action/VioletHoldActions.cpp @@ -1,8 +1,7 @@ #include "Playerbots.h" #include "VioletHoldActions.h" -#include "VioletHoldStrategy.h" -bool AttackErekemAction::Execute(Event event) +bool AttackErekemAction::Execute(Event /*event*/) { // Focus boss first, adds after Unit* boss = AI_VALUE2(Unit*, "find target", "erekem"); @@ -15,7 +14,7 @@ bool AttackErekemAction::Execute(Event event) return false; } -bool AttackIchorGlobuleAction::Execute(Event event) +bool AttackIchorGlobuleAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "ichoron"); if (!boss) { return false; } @@ -60,7 +59,7 @@ bool AttackIchorGlobuleAction::Execute(Event event) return false; } -bool AttackVoidSentryAction::Execute(Event event) +bool AttackVoidSentryAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "zuramat the obliterator"); if (!boss) { return false; } @@ -96,7 +95,7 @@ bool AttackVoidSentryAction::Execute(Event event) return false; } -bool StopAttackAction::Execute(Event event) +bool StopAttackAction::Execute(Event /*event*/) { return bot->AttackStop(); } diff --git a/src/Ai/Raid/Aq20/Action/RaidAq20Actions.cpp b/src/Ai/Raid/Aq20/Action/RaidAq20Actions.cpp index 1bf33147f..5d9b4aaa3 100644 --- a/src/Ai/Raid/Aq20/Action/RaidAq20Actions.cpp +++ b/src/Ai/Raid/Aq20/Action/RaidAq20Actions.cpp @@ -1,9 +1,8 @@ #include "RaidAq20Actions.h" -#include "Playerbots.h" #include "RaidAq20Utils.h" -bool Aq20UseCrystalAction::Execute(Event event) +bool Aq20UseCrystalAction::Execute(Event /*event*/) { if (Unit* boss = AI_VALUE2(Unit*, "find target", "ossirian the unscarred")) { diff --git a/src/Ai/Raid/Aq20/Trigger/RaidAq20Triggers.cpp b/src/Ai/Raid/Aq20/Trigger/RaidAq20Triggers.cpp index 1a580d6bd..913cb2690 100644 --- a/src/Ai/Raid/Aq20/Trigger/RaidAq20Triggers.cpp +++ b/src/Ai/Raid/Aq20/Trigger/RaidAq20Triggers.cpp @@ -1,6 +1,5 @@ #include "RaidAq20Triggers.h" -#include "SharedDefines.h" #include "RaidAq20Utils.h" bool Aq20MoveToCrystalTrigger::IsActive() diff --git a/src/Ai/Raid/BlackwingLair/Action/RaidBwlActions.cpp b/src/Ai/Raid/BlackwingLair/Action/RaidBwlActions.cpp index 54b21791e..9014345cc 100644 --- a/src/Ai/Raid/BlackwingLair/Action/RaidBwlActions.cpp +++ b/src/Ai/Raid/BlackwingLair/Action/RaidBwlActions.cpp @@ -2,7 +2,7 @@ #include "Playerbots.h" -bool BwlOnyxiaScaleCloakAuraCheckAction::Execute(Event event) +bool BwlOnyxiaScaleCloakAuraCheckAction::Execute(Event /*event*/) { bot->AddAura(22683, bot); return true; @@ -10,7 +10,7 @@ bool BwlOnyxiaScaleCloakAuraCheckAction::Execute(Event event) bool BwlOnyxiaScaleCloakAuraCheckAction::isUseful() { return !bot->HasAura(22683); } -bool BwlTurnOffSuppressionDeviceAction::Execute(Event event) +bool BwlTurnOffSuppressionDeviceAction::Execute(Event /*event*/) { GuidVector gos = AI_VALUE(GuidVector, "nearest game objects"); for (GuidVector::iterator i = gos.begin(); i != gos.end(); i++) @@ -29,4 +29,7 @@ bool BwlTurnOffSuppressionDeviceAction::Execute(Event event) return true; } -bool BwlUseHourglassSandAction::Execute(Event event) { return botAI->CastSpell(23645, bot); } +bool BwlUseHourglassSandAction::Execute(Event /*event*/) +{ + return botAI->CastSpell(23645, bot); +} diff --git a/src/Ai/Raid/EyeOfEternity/Action/RaidEoEActions.cpp b/src/Ai/Raid/EyeOfEternity/Action/RaidEoEActions.cpp index 354738842..b08db3f33 100644 --- a/src/Ai/Raid/EyeOfEternity/Action/RaidEoEActions.cpp +++ b/src/Ai/Raid/EyeOfEternity/Action/RaidEoEActions.cpp @@ -2,7 +2,7 @@ #include "RaidEoEActions.h" #include "RaidEoETriggers.h" -bool MalygosPositionAction::Execute(Event event) +bool MalygosPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "malygos"); if (!boss) { return false; } @@ -65,7 +65,7 @@ bool MalygosPositionAction::Execute(Event event) return false; } -bool MalygosTargetAction::Execute(Event event) +bool MalygosTargetAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "malygos"); if (!boss) { return false; } @@ -229,7 +229,7 @@ bool EoEFlyDrakeAction::isPossible() Unit* vehicleBase = bot->GetVehicleBase(); return (vehicleBase && vehicleBase->GetEntry() == NPC_WYRMREST_SKYTALON); } -bool EoEFlyDrakeAction::Execute(Event event) +bool EoEFlyDrakeAction::Execute(Event /*event*/) { Player* master = botAI->GetMaster(); if (!master) { return false; } @@ -279,7 +279,7 @@ bool EoEDrakeAttackAction::isPossible() return (vehicleBase && vehicleBase->GetEntry() == NPC_WYRMREST_SKYTALON); } -bool EoEDrakeAttackAction::Execute(Event event) +bool EoEDrakeAttackAction::Execute(Event /*event*/) { vehicleBase = bot->GetVehicleBase(); if (!vehicleBase) @@ -367,8 +367,6 @@ bool EoEDrakeAttackAction::DrakeDpsAction(Unit* target) Unit* vehicleBase = bot->GetVehicleBase(); if (!vehicleBase) { return false; } - Vehicle* veh = bot->GetVehicle(); - uint8 comboPoints = vehicleBase->GetComboPoints(target); if (comboPoints >= 2) { diff --git a/src/Ai/Raid/EyeOfEternity/Action/RaidEoEActions.h b/src/Ai/Raid/EyeOfEternity/Action/RaidEoEActions.h index c6fe064c0..0d5b6fcc3 100644 --- a/src/Ai/Raid/EyeOfEternity/Action/RaidEoEActions.h +++ b/src/Ai/Raid/EyeOfEternity/Action/RaidEoEActions.h @@ -1,9 +1,9 @@ #ifndef _PLAYERBOT_RAIDEOEACTIONS_H #define _PLAYERBOT_RAIDEOEACTIONS_H -#include "MovementActions.h" #include "AttackAction.h" #include "GenericSpellActions.h" +#include "MovementActions.h" #include "PlayerbotAI.h" #include "Playerbots.h" @@ -13,34 +13,38 @@ const std::pair MALYGOS_STACK_POSITION = {755.0f, 1301.0f}; class MalygosPositionAction : public MovementAction { public: - MalygosPositionAction(PlayerbotAI* botAI, std::string const name = "malygos position") - : MovementAction(botAI, name) {} + MalygosPositionAction(PlayerbotAI* botAI, std::string const name = "malygos position") : MovementAction(botAI, name) + { + } + bool Execute(Event event) override; }; class MalygosTargetAction : public AttackAction { public: - MalygosTargetAction(PlayerbotAI* botAI, std::string const name = "malygos target") - : AttackAction(botAI, name) {} + MalygosTargetAction(PlayerbotAI* botAI, std::string const name = "malygos target") : AttackAction(botAI, name) {} + bool Execute(Event event) override; }; -class PullPowerSparkAction : public CastSpellAction -{ -public: - PullPowerSparkAction(PlayerbotAI* botAI, std::string const name = "pull power spark") - : CastSpellAction(botAI, name) {} - bool Execute(Event event) override; - bool isPossible() override; - bool isUseful() override; -}; +//class PullPowerSparkAction : public CastSpellAction +//{ +//public: +// PullPowerSparkAction(PlayerbotAI* botAI, std::string const name = "pull power spark") : CastSpellAction(botAI, name) +// { +// } + +// bool Execute(Event event) override; +// bool isUseful() override; +// bool isPossible() override; +//}; class KillPowerSparkAction : public AttackAction { public: - KillPowerSparkAction(PlayerbotAI* botAI, std::string const name = "kill power spark") - : AttackAction(botAI, name) {} + KillPowerSparkAction(PlayerbotAI* botAI, std::string const name = "kill power spark") : AttackAction(botAI, name) {} + bool Execute(Event event) override; }; @@ -48,6 +52,7 @@ class EoEFlyDrakeAction : public MovementAction { public: EoEFlyDrakeAction(PlayerbotAI* ai) : MovementAction(ai, "eoe fly drake") {} + bool Execute(Event event) override; bool isPossible() override; }; @@ -56,6 +61,7 @@ class EoEDrakeAttackAction : public Action { public: EoEDrakeAttackAction(PlayerbotAI* botAI) : Action(botAI, "eoe drake attack") {} + bool Execute(Event event) override; bool isPossible() override; diff --git a/src/Ai/Raid/GruulsLair/Action/RaidGruulsLairActions.cpp b/src/Ai/Raid/GruulsLair/Action/RaidGruulsLairActions.cpp index 2af82ebe9..1a45b0c15 100644 --- a/src/Ai/Raid/GruulsLair/Action/RaidGruulsLairActions.cpp +++ b/src/Ai/Raid/GruulsLair/Action/RaidGruulsLairActions.cpp @@ -10,7 +10,7 @@ using namespace GruulsLairHelpers; // High King Maulgar Actions // Main tank on Maulgar -bool HighKingMaulgarMainTankAttackMaulgarAction::Execute(Event event) +bool HighKingMaulgarMainTankAttackMaulgarAction::Execute(Event /*event*/) { Unit* maulgar = AI_VALUE2(Unit*, "find target", "high king maulgar"); if (!maulgar) @@ -44,7 +44,7 @@ bool HighKingMaulgarMainTankAttackMaulgarAction::Execute(Event event) } // First offtank on Olm -bool HighKingMaulgarFirstAssistTankAttackOlmAction::Execute(Event event) +bool HighKingMaulgarFirstAssistTankAttackOlmAction::Execute(Event /*event*/) { Unit* olm = AI_VALUE2(Unit*, "find target", "olm the summoner"); if (!olm) @@ -79,7 +79,7 @@ bool HighKingMaulgarFirstAssistTankAttackOlmAction::Execute(Event event) } // Second offtank on Blindeye -bool HighKingMaulgarSecondAssistTankAttackBlindeyeAction::Execute(Event event) +bool HighKingMaulgarSecondAssistTankAttackBlindeyeAction::Execute(Event /*event*/) { Unit* blindeye = AI_VALUE2(Unit*, "find target", "blindeye the seer"); if (!blindeye) @@ -113,7 +113,7 @@ bool HighKingMaulgarSecondAssistTankAttackBlindeyeAction::Execute(Event event) } // Mage with highest max HP on Krosh -bool HighKingMaulgarMageTankAttackKroshAction::Execute(Event event) +bool HighKingMaulgarMageTankAttackKroshAction::Execute(Event /*event*/) { Unit* krosh = AI_VALUE2(Unit*, "find target", "krosh firehand"); if (!krosh) @@ -166,7 +166,7 @@ bool HighKingMaulgarMageTankAttackKroshAction::Execute(Event event) } // Moonkin with highest max HP on Kiggler -bool HighKingMaulgarMoonkinTankAttackKigglerAction::Execute(Event event) +bool HighKingMaulgarMoonkinTankAttackKigglerAction::Execute(Event /*event*/) { Unit* kiggler = AI_VALUE2(Unit*, "find target", "kiggler the crazed"); if (!kiggler) @@ -188,7 +188,7 @@ bool HighKingMaulgarMoonkinTankAttackKigglerAction::Execute(Event event) return false; } -bool HighKingMaulgarAssignDPSPriorityAction::Execute(Event event) +bool HighKingMaulgarAssignDPSPriorityAction::Execute(Event /*event*/) { // Target priority 1: Blindeye Unit* blindeye = AI_VALUE2(Unit*, "find target", "blindeye the seer"); @@ -297,7 +297,7 @@ bool HighKingMaulgarAssignDPSPriorityAction::Execute(Event event) } // Avoid Whirlwind and Blast Wave and generally try to stay near the center of the room -bool HighKingMaulgarHealerFindSafePositionAction::Execute(Event event) +bool HighKingMaulgarHealerFindSafePositionAction::Execute(Event /*event*/) { const Position& center = MAULGAR_ROOM_CENTER; const float maxDistanceFromCenter = 50.0f; @@ -331,7 +331,7 @@ bool HighKingMaulgarHealerFindSafePositionAction::Execute(Event event) } // Run away from Maulgar during Whirlwind (logic for after all other ogres are dead) -bool HighKingMaulgarRunAwayFromWhirlwindAction::Execute(Event event) +bool HighKingMaulgarRunAwayFromWhirlwindAction::Execute(Event /*event*/) { Unit* maulgar = AI_VALUE2(Unit*, "find target", "high king maulgar"); if (!maulgar) @@ -366,7 +366,7 @@ bool HighKingMaulgarRunAwayFromWhirlwindAction::Execute(Event event) return false; } -bool HighKingMaulgarBanishFelstalkerAction::Execute(Event event) +bool HighKingMaulgarBanishFelstalkerAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -411,7 +411,7 @@ bool HighKingMaulgarBanishFelstalkerAction::Execute(Event event) // Hunter 1: Misdirect Olm to first offtank and have pet attack Blindeye // Hunter 2: Misdirect Blindeye to second offtank -bool HighKingMaulgarMisdirectOlmAndBlindeyeAction::Execute(Event event) +bool HighKingMaulgarMisdirectOlmAndBlindeyeAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -491,7 +491,7 @@ bool HighKingMaulgarMisdirectOlmAndBlindeyeAction::Execute(Event event) // Gruul the Dragonkiller Actions // Position in center of the room -bool GruulTheDragonkillerTanksPositionBossAction::Execute(Event event) +bool GruulTheDragonkillerTanksPositionBossAction::Execute(Event /*event*/) { Unit* gruul = AI_VALUE2(Unit*, "find target", "gruul the dragonkiller"); if (!gruul) @@ -525,7 +525,7 @@ bool GruulTheDragonkillerTanksPositionBossAction::Execute(Event event) // Ranged will take initial positions around the middle of the room, 25-40 yards from center // Ranged should spread out 10 yards from each other -bool GruulTheDragonkillerSpreadRangedAction::Execute(Event event) +bool GruulTheDragonkillerSpreadRangedAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -618,7 +618,7 @@ bool GruulTheDragonkillerSpreadRangedAction::Execute(Event event) } // Try to get away from other group members when Ground Slam is cast -bool GruulTheDragonkillerShatterSpreadAction::Execute(Event event) +bool GruulTheDragonkillerShatterSpreadAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) diff --git a/src/Ai/Raid/GruulsLair/Util/RaidGruulsLairHelpers.cpp b/src/Ai/Raid/GruulsLair/Util/RaidGruulsLairHelpers.cpp index 27c703aec..7ed82f19e 100644 --- a/src/Ai/Raid/GruulsLair/Util/RaidGruulsLairHelpers.cpp +++ b/src/Ai/Raid/GruulsLair/Util/RaidGruulsLairHelpers.cpp @@ -164,21 +164,21 @@ namespace GruulsLairHelpers { float angle = 2 * M_PI * i / NUM_POSITIONS; Position candidatePos; - candidatePos.m_positionX = bot->GetPositionX() + SEARCH_RADIUS * cos(angle); - candidatePos.m_positionY = bot->GetPositionY() + SEARCH_RADIUS * sin(angle); - candidatePos.m_positionZ = bot->GetPositionZ(); + candidatePos.Relocate(bot->GetPositionX() + SEARCH_RADIUS * cos(angle), + bot->GetPositionY() + SEARCH_RADIUS * sin(angle), + bot->GetPositionZ()); - float destX = candidatePos.m_positionX, destY = candidatePos.m_positionY, destZ = candidatePos.m_positionZ; + float destX = candidatePos.GetPositionX(); + float destY = candidatePos.GetPositionY(); + float destZ = candidatePos.GetPositionZ(); if (!bot->GetMap()->CheckCollisionAndGetValidCoords(bot, bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ(), destX, destY, destZ, true)) continue; - if (destX != candidatePos.m_positionX || destY != candidatePos.m_positionY) + if (destX != candidatePos.GetPositionX() || destY != candidatePos.GetPositionY()) continue; - candidatePos.m_positionX = destX; - candidatePos.m_positionY = destY; - candidatePos.m_positionZ = destZ; + candidatePos.Relocate(destX, destY, destZ); if (IsPositionSafe(botAI, bot, candidatePos)) { diff --git a/src/Ai/Raid/Icecrown/Action/RaidIccActions.cpp b/src/Ai/Raid/Icecrown/Action/RaidIccActions.cpp index d6a91d047..95f5bc3bf 100644 --- a/src/Ai/Raid/Icecrown/Action/RaidIccActions.cpp +++ b/src/Ai/Raid/Icecrown/Action/RaidIccActions.cpp @@ -1,19 +1,16 @@ #include "RaidIccActions.h" #include "NearestNpcsValue.h" #include "ObjectAccessor.h" -#include "RaidIccStrategy.h" #include "Playerbots.h" -#include "Timer.h" #include "Vehicle.h" #include "RtiValue.h" #include "GenericSpellActions.h" #include "GenericActions.h" -#include #include "RaidIccTriggers.h" #include "Multiplier.h" // Lord Marrowgwar -bool IccLmTankPositionAction::Execute(Event event) +bool IccLmTankPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "lord marrowgar"); if (!boss) @@ -73,7 +70,7 @@ bool IccLmTankPositionAction::MoveTowardPosition(const Position& position, float MovementPriority::MOVEMENT_COMBAT); } -bool IccSpikeAction::Execute(Event event) +bool IccSpikeAction::Execute(Event /*event*/) { // If we're impaled, we can't do anything if (botAI->GetAura("Impaled", bot)) @@ -183,7 +180,7 @@ void IccSpikeAction::UpdateRaidTargetIcon(Unit* target) } // Lady Deathwhisper -bool IccDarkReckoningAction::Execute(Event event) +bool IccDarkReckoningAction::Execute(Event /*event*/) { constexpr float SAFE_DISTANCE_THRESHOLD = 2.0f; @@ -201,7 +198,7 @@ bool IccDarkReckoningAction::Execute(Event event) return false; } -bool IccRangedPositionLadyDeathwhisperAction::Execute(Event event) +bool IccRangedPositionLadyDeathwhisperAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "lady deathwhisper"); if (!boss) @@ -301,7 +298,7 @@ bool IccRangedPositionLadyDeathwhisperAction::MaintainRangedSpacing() return false; // Everyone is properly spaced } -bool IccAddsLadyDeathwhisperAction::Execute(Event event) +bool IccAddsLadyDeathwhisperAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "lady deathwhisper"); if (!boss) @@ -419,7 +416,7 @@ void IccAddsLadyDeathwhisperAction::UpdateRaidTargetIcon(Unit* target) } } -bool IccShadeLadyDeathwhisperAction::Execute(Event event) +bool IccShadeLadyDeathwhisperAction::Execute(Event /*event*/) { static constexpr uint32 VENGEFUL_SHADE_ID = NPC_SHADE; static constexpr float SAFE_DISTANCE = 12.0f; @@ -473,7 +470,7 @@ bool IccShadeLadyDeathwhisperAction::Execute(Event event) return false; } -bool IccRottingFrostGiantTankPositionAction::Execute(Event event) +bool IccRottingFrostGiantTankPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "rotting frost giant"); if (!boss) @@ -696,7 +693,7 @@ bool IccRottingFrostGiantTankPositionAction::Execute(Event event) } //Gunship -bool IccCannonFireAction::Execute(Event event) +bool IccCannonFireAction::Execute(Event /*event*/) { Unit* vehicleBase = bot->GetVehicleBase(); Vehicle* vehicle = bot->GetVehicle(); @@ -755,7 +752,7 @@ bool IccCannonFireAction::TryCastCannonSpell(uint32 spellId, Unit* target, Unit* return false; } -bool IccGunshipEnterCannonAction::Execute(Event event) +bool IccGunshipEnterCannonAction::Execute(Event /*event*/) { // Do not switch vehicles if already in one if (bot->GetVehicle()) @@ -855,7 +852,7 @@ bool IccGunshipEnterCannonAction::EnterVehicle(Unit* vehicleBase, bool moveIfFar return true; } -bool IccGunshipTeleportAllyAction::Execute(Event event) +bool IccGunshipTeleportAllyAction::Execute(Event /*event*/) { static constexpr float MAX_WAITING_DISTANCE = 45.0f; static constexpr float MAX_ATTACK_DISTANCE = 15.0f; @@ -922,7 +919,7 @@ void IccGunshipTeleportAllyAction::UpdateBossSkullIcon(Unit* boss, uint8_t SKULL } } -bool IccGunshipTeleportHordeAction::Execute(Event event) +bool IccGunshipTeleportHordeAction::Execute(Event /*event*/) { static constexpr float MAX_WAITING_DISTANCE = 45.0f; static constexpr float MAX_ATTACK_DISTANCE = 15.0f; @@ -990,7 +987,7 @@ void IccGunshipTeleportHordeAction::UpdateBossSkullIcon(Unit* boss, uint8_t SKUL } //DBS -bool IccDbsTankPositionAction::Execute(Event event) +bool IccDbsTankPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "deathbringer saurfang"); if (!boss) @@ -1231,7 +1228,7 @@ bool IccDbsTankPositionAction::PositionInRangedFormation() return false; } -bool IccAddsDbsAction::Execute(Event event) +bool IccAddsDbsAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "deathbringer saurfang"); if (!boss) @@ -1295,7 +1292,7 @@ void IccAddsDbsAction::UpdateSkullMarker(Unit* priorityTarget) } // Festergut -bool IccFestergutGroupPositionAction::Execute(Event event) +bool IccFestergutGroupPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "festergut"); if (!boss) @@ -1511,7 +1508,7 @@ int IccFestergutGroupPositionAction::CalculatePositionIndex(Group* group) return -1; } -bool IccFestergutSporeAction::Execute(Event event) +bool IccFestergutSporeAction::Execute(Event /*event*/) { constexpr float POSITION_TOLERANCE = 4.0f; constexpr float SPREAD_RADIUS = 2.0f; @@ -1551,8 +1548,10 @@ Position IccFestergutSporeAction::CalculateSpreadPosition() float angle = (bot->GetGUID().GetCounter() % 16) * (M_PI / 8); Position spreadRangedPos = ICC_FESTERGUT_RANGED_SPORE; - spreadRangedPos.m_positionX += cos(angle) * SPREAD_RADIUS; - spreadRangedPos.m_positionY += sin(angle) * SPREAD_RADIUS; + spreadRangedPos.Relocate(spreadRangedPos.GetPositionX() + cos(angle) * SPREAD_RADIUS, + spreadRangedPos.GetPositionY() + sin(angle) * SPREAD_RADIUS, + spreadRangedPos.GetPositionZ(), + spreadRangedPos.GetOrientation()); return spreadRangedPos; } @@ -1624,7 +1623,7 @@ bool IccFestergutSporeAction::CheckMainTankSpore() } // Rotface -bool IccRotfaceTankPositionAction::Execute(Event event) +bool IccRotfaceTankPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "rotface"); if (!boss) @@ -1700,7 +1699,7 @@ bool IccRotfaceTankPositionAction::HandleAssistTankPositioning(Unit* boss) return HandleBigOozePositioning(boss); } -bool IccRotfaceTankPositionAction::HandleBigOozePositioning(Unit* boss) +bool IccRotfaceTankPositionAction::HandleBigOozePositioning(Unit*) { // Find all big oozes GuidVector bigOozes = AI_VALUE(GuidVector, "nearest hostile npcs"); @@ -1824,7 +1823,7 @@ bool IccRotfaceTankPositionAction::HandleBigOozePositioning(Unit* boss) return false; } -bool IccRotfaceGroupPositionAction::Execute(Event event) +bool IccRotfaceGroupPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "rotface"); if (!boss) @@ -1891,7 +1890,7 @@ bool IccRotfaceGroupPositionAction::HandlePuddleAvoidance(Unit* boss) return false; } -bool IccRotfaceGroupPositionAction::MoveAwayFromPuddle(Unit* boss, Unit* puddle, float puddleDistance) +bool IccRotfaceGroupPositionAction::MoveAwayFromPuddle(Unit* boss, Unit* puddle, float) { if (!boss || !puddle) return false; @@ -2175,7 +2174,7 @@ bool IccRotfaceGroupPositionAction::FindAndMoveFromClosestMember(Unit* boss, Uni return false; // Everyone is properly spaced } -bool IccRotfaceMoveAwayFromExplosionAction::Execute(Event event) +bool IccRotfaceMoveAwayFromExplosionAction::Execute(Event /*event*/) { // Skip if main tank or ooze flood if (botAI->IsMainTank(bot)) @@ -2258,7 +2257,7 @@ bool IccRotfaceMoveAwayFromExplosionAction::MoveToRandomSafeLocation() } // Proffesor Putricide -bool IccPutricideGrowingOozePuddleAction::Execute(Event event) +bool IccPutricideGrowingOozePuddleAction::Execute(Event /*event*/) { Unit* closestPuddle = FindClosestThreateningPuddle(); if (!closestPuddle) @@ -2416,7 +2415,7 @@ bool IccPutricideGrowingOozePuddleAction::IsPositionTooCloseToOtherPuddles(float return false; } -bool IccPutricideVolatileOozeAction::Execute(Event event) +bool IccPutricideVolatileOozeAction::Execute(Event /*event*/) { static const float STACK_DISTANCE = 7.0f; @@ -2529,7 +2528,7 @@ Unit* IccPutricideVolatileOozeAction::FindAuraTarget() return nullptr; } -bool IccPutricideGasCloudAction::Execute(Event event) +bool IccPutricideGasCloudAction::Execute(Event /*event*/) { Unit* gasCloud = AI_VALUE2(Unit*, "find target", "gas cloud"); if (!gasCloud) @@ -2806,7 +2805,6 @@ Position IccPutricideGasCloudAction::CalculateEmergencyPosition(const Position& Position bestPos = Position(botPos.GetPositionX() + dx * 15.0f, botPos.GetPositionY() + dy * 15.0f, botPos.GetPositionZ()); float bestFreedom = 0.0f; - static const float MOVEMENT_INCREMENT = 5.0f; // Fixed movement increment // Try fewer directions for emergency but still avoid corners for (int i = 0; i < 8; i++) @@ -2922,9 +2920,7 @@ bool IccPutricideGasCloudAction::HandleGroupAuraSituation(Unit* gasCloud) gasCloud->GetPositionZ(), false, false, false, false, MovementPriority::MOVEMENT_COMBAT); } else - { return Attack(gasCloud); - } } } @@ -2942,7 +2938,7 @@ bool IccPutricideGasCloudAction::GroupHasGaseousBloat(Group* group) return false; } -bool IccPutricideAvoidMalleableGooAction::Execute(Event event) +bool IccPutricideAvoidMalleableGooAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "professor putricide"); if (!boss) @@ -2964,7 +2960,7 @@ bool IccPutricideAvoidMalleableGooAction::Execute(Event event) return HandleBossPositioning(boss); } -bool IccPutricideAvoidMalleableGooAction::HandleTankPositioning(Unit* boss) +bool IccPutricideAvoidMalleableGooAction::HandleTankPositioning(Unit*) { if (!botAI->IsTank(bot)) return false; @@ -3229,7 +3225,7 @@ Position IccPutricideAvoidMalleableGooAction::CalculateIncrementalMove(const Pos } // BPC -bool IccBpcKelesethTankAction::Execute(Event event) +bool IccBpcKelesethTankAction::Execute(Event /*event*/) { if (!botAI->IsAssistTank(bot)) return false; @@ -3310,7 +3306,7 @@ bool IccBpcKelesethTankAction::Execute(Event event) return false; } -bool IccBpcMainTankAction::Execute(Event event) +bool IccBpcMainTankAction::Execute(Event /*event*/) { // Main tank specific behavior (higher priority) if (botAI->IsMainTank(bot)) @@ -3427,7 +3423,7 @@ void IccBpcMainTankAction::MarkEmpoweredPrince() } } -bool IccBpcEmpoweredVortexAction::Execute(Event event) +bool IccBpcEmpoweredVortexAction::Execute(Event /*event*/) { Unit* valanar = AI_VALUE2(Unit*, "find target", "prince valanar"); if (!valanar) @@ -3612,7 +3608,7 @@ bool IccBpcEmpoweredVortexAction::HandleEmpoweredVortexSpread() return false; // Everyone is properly spaced } -bool IccBpcKineticBombAction::Execute(Event event) +bool IccBpcKineticBombAction::Execute(Event /*event*/) { // Early exit if not ranged DPS if (!botAI->IsRangedDps(bot)) @@ -3758,7 +3754,7 @@ bool IccBpcKineticBombAction::IsBombAlreadyHandled(Unit* bomb, Group* group) return false; } -bool IccBpcBallOfFlameAction::Execute(Event event) +bool IccBpcBallOfFlameAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "prince taldaram"); if (!boss) @@ -3839,7 +3835,7 @@ bool IccBpcBallOfFlameAction::Execute(Event event) } // Blood Queen Lana'thel -bool IccBqlGroupPositionAction::Execute(Event event) +bool IccBqlGroupPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "blood-queen lana'thel"); if (!boss) @@ -4601,7 +4597,7 @@ bool IccBqlGroupPositionAction::HandleGroupPosition(Unit* boss, Aura* frenzyAura return false; } -bool IccBqlPactOfDarkfallenAction::Execute(Event event) +bool IccBqlPactOfDarkfallenAction::Execute(Event /*event*/) { // Check if bot has Pact of the Darkfallen if (!botAI->GetAura("Pact of the Darkfallen", bot)) @@ -4720,7 +4716,7 @@ bool IccBqlPactOfDarkfallenAction::MoveToTargetPosition(const Position& targetPo return false; } -bool IccBqlVampiricBiteAction::Execute(Event event) +bool IccBqlVampiricBiteAction::Execute(Event /*event*/) { // Only act when bot has Frenzied Bloodthirst if (!botAI->GetAura("Frenzied Bloodthirst", bot)) @@ -4857,7 +4853,7 @@ bool IccBqlVampiricBiteAction::CastVampiricBite(Player* target) } // Sister Svalna -bool IccValkyreSpearAction::Execute(Event event) +bool IccValkyreSpearAction::Execute(Event /*event*/) { // Find the nearest spear Creature* spear = bot->FindNearestCreature(NPC_SPEAR, 100.0f); @@ -4883,7 +4879,7 @@ bool IccValkyreSpearAction::Execute(Event event) return false; } -bool IccSisterSvalnaAction::Execute(Event event) +bool IccSisterSvalnaAction::Execute(Event /*event*/) { Unit* svalna = AI_VALUE2(Unit*, "find target", "sister svalna"); if (!svalna || !svalna->HasAura(SPELL_AETHER_SHIELD)) // Check for Aether Shield aura @@ -4908,7 +4904,7 @@ bool IccSisterSvalnaAction::Execute(Event event) } // VDW -bool IccValithriaGroupAction::Execute(Event event) +bool IccValithriaGroupAction::Execute(Event /*event*/) { // Helper lambda to find nearest creature of given entries auto findNearestCreature = [this](std::initializer_list entries, float range) -> Creature* @@ -5318,7 +5314,7 @@ bool IccValithriaGroupAction::Handle10ManGroupLogic() return false; } -bool IccValithriaPortalAction::Execute(Event event) +bool IccValithriaPortalAction::Execute(Event /*event*/) { // Only healers should take portals, and not if already inside if (!botAI->IsHeal(bot) || bot->HasAura(SPELL_DREAM_STATE)) @@ -5451,7 +5447,7 @@ bool IccValithriaPortalAction::Execute(Event event) return false; } -bool IccValithriaHealAction::Execute(Event event) +bool IccValithriaHealAction::Execute(Event /*event*/) { // Early validation checks if (!botAI->IsHeal(bot) || bot->GetHealthPct() < 50.0f) @@ -5541,7 +5537,7 @@ bool IccValithriaHealAction::Execute(Event event) return false; } -bool IccValithriaDreamCloudAction::Execute(Event event) +bool IccValithriaDreamCloudAction::Execute(Event /*event*/) { // Only execute if we're in dream state if (!bot->HasAura(SPELL_DREAM_STATE)) @@ -5824,7 +5820,7 @@ bool IccValithriaDreamCloudAction::Execute(Event event) } // Sindragosa -bool IccSindragosaGroupPositionAction::Execute(Event event) +bool IccSindragosaGroupPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sindragosa"); if (!boss || boss->HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY)) @@ -6083,7 +6079,7 @@ bool IccSindragosaGroupPositionAction::MoveIncrementallyToPosition(const Positio MovementPriority::MOVEMENT_COMBAT); } -bool IccSindragosaTankSwapPositionAction::Execute(Event event) +bool IccSindragosaTankSwapPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sindragosa"); if (!boss) @@ -6107,7 +6103,7 @@ bool IccSindragosaTankSwapPositionAction::Execute(Event event) return false; } -bool IccSindragosaFrostBeaconAction::Execute(Event event) +bool IccSindragosaFrostBeaconAction::Execute(Event /*event*/) { const Unit* boss = AI_VALUE2(Unit*, "find target", "sindragosa"); if (!boss) @@ -6341,7 +6337,7 @@ bool IccSindragosaFrostBeaconAction::IsBossFlying(const Unit* boss) ICC_SINDRAGOSA_FLYING_POSITION.GetPositionY()) < 30.0f; } -bool IccSindragosaBlisteringColdAction::Execute(Event event) +bool IccSindragosaBlisteringColdAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sindragosa"); if (!boss) @@ -6389,7 +6385,7 @@ bool IccSindragosaBlisteringColdAction::Execute(Event event) return false; } -bool IccSindragosaUnchainedMagicAction::Execute(Event event) +bool IccSindragosaUnchainedMagicAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sindragosa"); if (!boss) @@ -6411,7 +6407,7 @@ bool IccSindragosaUnchainedMagicAction::Execute(Event event) return false; } -bool IccSindragosaChilledToTheBoneAction::Execute(Event event) +bool IccSindragosaChilledToTheBoneAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sindragosa"); if (!boss) @@ -6434,7 +6430,7 @@ bool IccSindragosaChilledToTheBoneAction::Execute(Event event) return false; } -bool IccSindragosaMysticBuffetAction::Execute(Event event) +bool IccSindragosaMysticBuffetAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sindragosa"); if (!boss || !bot || !bot->IsAlive()) @@ -6517,7 +6513,7 @@ bool IccSindragosaMysticBuffetAction::Execute(Event event) return false; } -bool IccSindragosaFrostBombAction::Execute(Event event) +bool IccSindragosaFrostBombAction::Execute(Event /*event*/) { if (!bot || !bot->IsAlive() || bot->HasAura(SPELL_ICE_TOMB)) // Skip if dead or in Ice Tomb return false; @@ -6802,7 +6798,7 @@ bool IccSindragosaFrostBombAction::Execute(Event event) } // The Lich King -bool IccLichKingShadowTrapAction::Execute(Event event) +bool IccLichKingShadowTrapAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "the lich king"); if (!boss || !botAI->IsTank(bot)) @@ -6929,7 +6925,7 @@ bool IccLichKingShadowTrapAction::Execute(Event event) return false; } -bool IccLichKingNecroticPlagueAction::Execute(Event event) +bool IccLichKingNecroticPlagueAction::Execute(Event /*event*/) { bool hasPlague = botAI->HasAura("Necrotic Plague", bot); // Only execute if we have the plague @@ -6981,7 +6977,7 @@ bool IccLichKingNecroticPlagueAction::Execute(Event event) return false; } -bool IccLichKingWinterAction::Execute(Event event) +bool IccLichKingWinterAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "the lich king"); if (!boss) @@ -7783,7 +7779,7 @@ void IccLichKingWinterAction::HandleAssistTankAddManagement(Unit* boss, const Po } } -bool IccLichKingAddsAction::Execute(Event event) +bool IccLichKingAddsAction::Execute(Event /*event*/) { if (bot->HasAura(SPELL_HARVEST_SOUL_VALKYR)) // Don't process actions if bot is picked up by Val'kyr return false; diff --git a/src/Ai/Raid/Icecrown/Multiplier/RaidIccMultipliers.cpp b/src/Ai/Raid/Icecrown/Multiplier/RaidIccMultipliers.cpp index fc02d56be..c6a6fdee5 100644 --- a/src/Ai/Raid/Icecrown/Multiplier/RaidIccMultipliers.cpp +++ b/src/Ai/Raid/Icecrown/Multiplier/RaidIccMultipliers.cpp @@ -15,7 +15,6 @@ #include "RaidIccActions.h" #include "ReachTargetActions.h" #include "RogueActions.h" -#include "ScriptedCreature.h" #include "ShamanActions.h" #include "UseMeetingStoneAction.h" #include "WarriorActions.h" diff --git a/src/Ai/Raid/Icecrown/Trigger/RaidIccTriggers.cpp b/src/Ai/Raid/Icecrown/Trigger/RaidIccTriggers.cpp index b34fe003f..75989ba1c 100644 --- a/src/Ai/Raid/Icecrown/Trigger/RaidIccTriggers.cpp +++ b/src/Ai/Raid/Icecrown/Trigger/RaidIccTriggers.cpp @@ -4,14 +4,9 @@ #include "PlayerbotAIConfig.h" #include "ObjectAccessor.h" #include "GenericTriggers.h" -#include "DungeonStrategyUtils.h" -#include "EventMap.h" #include "Playerbots.h" -#include "ScriptedCreature.h" #include "Trigger.h" -#include "CellImpl.h" #include "GridNotifiers.h" -#include "GridNotifiersImpl.h" #include "Vehicle.h" //Lord Marrogwar diff --git a/src/Ai/Raid/Karazhan/Action/RaidKarazhanActions.cpp b/src/Ai/Raid/Karazhan/Action/RaidKarazhanActions.cpp index 4d40a9eed..b04e09d0d 100644 --- a/src/Ai/Raid/Karazhan/Action/RaidKarazhanActions.cpp +++ b/src/Ai/Raid/Karazhan/Action/RaidKarazhanActions.cpp @@ -10,7 +10,7 @@ using namespace KarazhanHelpers; // Mana Warps blow up when they die for massive raid damage // But they cannot cast the ability if they are stunned -bool ManaWarpStunCreatureBeforeWarpBreachAction::Execute(Event event) +bool ManaWarpStunCreatureBeforeWarpBreachAction::Execute(Event /*event*/) { Unit* manaWarp = GetFirstAliveUnitByEntry(botAI, NPC_MANA_WARP); if (!manaWarp) @@ -40,7 +40,7 @@ bool ManaWarpStunCreatureBeforeWarpBreachAction::Execute(Event event) // Attumen the Huntsman // Prioritize Midnight until Attumen is mounted -bool AttumenTheHuntsmanMarkTargetAction::Execute(Event event) +bool AttumenTheHuntsmanMarkTargetAction::Execute(Event /*event*/) { Unit* attumenMounted = GetFirstAliveUnitByEntry(botAI, NPC_ATTUMEN_THE_HUNTSMAN_MOUNTED); if (attumenMounted) @@ -77,7 +77,7 @@ bool AttumenTheHuntsmanMarkTargetAction::Execute(Event event) } // Off tank should move Attumen out of the way so he doesn't cleave bots -bool AttumenTheHuntsmanSplitBossesAction::Execute(Event event) +bool AttumenTheHuntsmanSplitBossesAction::Execute(Event /*event*/) { Unit* midnight = AI_VALUE2(Unit*, "find target", "midnight"); if (!midnight) @@ -105,7 +105,7 @@ bool AttumenTheHuntsmanSplitBossesAction::Execute(Event event) } // Stack behind mounted Attumen (inside minimum range of Berserker Charge) -bool AttumenTheHuntsmanStackBehindAction::Execute(Event event) +bool AttumenTheHuntsmanStackBehindAction::Execute(Event /*event*/) { Unit* attumenMounted = GetFirstAliveUnitByEntry(botAI, NPC_ATTUMEN_THE_HUNTSMAN_MOUNTED); if (!attumenMounted) @@ -126,7 +126,7 @@ bool AttumenTheHuntsmanStackBehindAction::Execute(Event event) } // Reset timer for bots to pause DPS when Attumen mounts Midnight -bool AttumenTheHuntsmanManageDpsTimerAction::Execute(Event event) +bool AttumenTheHuntsmanManageDpsTimerAction::Execute(Event /*event*/) { Unit* midnight = AI_VALUE2(Unit*, "find target", "midnight"); if (!midnight) @@ -153,7 +153,7 @@ bool AttumenTheHuntsmanManageDpsTimerAction::Execute(Event event) // Moroes -bool MoroesMainTankAttackBossAction::Execute(Event event) +bool MoroesMainTankAttackBossAction::Execute(Event /*event*/) { Unit* moroes = AI_VALUE2(Unit*, "find target", "moroes"); if (!moroes) @@ -169,7 +169,7 @@ bool MoroesMainTankAttackBossAction::Execute(Event event) } // Mark targets with skull in the recommended kill order -bool MoroesMarkTargetAction::Execute(Event event) +bool MoroesMarkTargetAction::Execute(Event /*event*/) { Unit* dorothea = AI_VALUE2(Unit*, "find target", "baroness dorothea millstipe"); Unit* catriona = AI_VALUE2(Unit*, "find target", "lady catriona von'indi"); @@ -194,7 +194,7 @@ bool MoroesMarkTargetAction::Execute(Event event) // Tank the boss in the center of the room // Move to healers after Repentenace to break the stun -bool MaidenOfVirtueMoveBossToHealerAction::Execute(Event event) +bool MaidenOfVirtueMoveBossToHealerAction::Execute(Event /*event*/) { Unit* maiden = AI_VALUE2(Unit*, "find target", "maiden of virtue"); if (!maiden) @@ -248,7 +248,7 @@ bool MaidenOfVirtueMoveBossToHealerAction::Execute(Event event) } // Spread out ranged DPS between the pillars -bool MaidenOfVirtuePositionRangedAction::Execute(Event event) +bool MaidenOfVirtuePositionRangedAction::Execute(Event /*event*/) { const uint8 maxIndex = 7; uint8 index = 0; @@ -288,7 +288,7 @@ bool MaidenOfVirtuePositionRangedAction::Execute(Event event) // The Big Bad Wolf // Tank the boss at the front left corner of the stage -bool BigBadWolfPositionBossAction::Execute(Event event) +bool BigBadWolfPositionBossAction::Execute(Event /*event*/) { Unit* wolf = AI_VALUE2(Unit*, "find target", "the big bad wolf"); if (!wolf) @@ -319,7 +319,7 @@ bool BigBadWolfPositionBossAction::Execute(Event event) } // Run away, little girl, run away -bool BigBadWolfRunAwayFromBossAction::Execute(Event event) +bool BigBadWolfRunAwayFromBossAction::Execute(Event /*event*/) { const ObjectGuid botGuid = bot->GetGUID(); uint8 index = bigBadWolfRunIndex.count(botGuid) ? bigBadWolfRunIndex[botGuid] : 0; @@ -342,7 +342,7 @@ bool BigBadWolfRunAwayFromBossAction::Execute(Event event) // Romulo and Julianne // Keep the couple within 10% HP of each other -bool RomuloAndJulianneMarkTargetAction::Execute(Event event) +bool RomuloAndJulianneMarkTargetAction::Execute(Event /*event*/) { Unit* romulo = AI_VALUE2(Unit*, "find target", "romulo"); if (!romulo) @@ -371,7 +371,7 @@ bool RomuloAndJulianneMarkTargetAction::Execute(Event event) // The Wizard of Oz // Mark targets with skull in the recommended kill order -bool WizardOfOzMarkTargetAction::Execute(Event event) +bool WizardOfOzMarkTargetAction::Execute(Event /*event*/) { Unit* dorothee = AI_VALUE2(Unit*, "find target", "dorothee"); Unit* tito = AI_VALUE2(Unit*, "find target", "tito"); @@ -388,7 +388,7 @@ bool WizardOfOzMarkTargetAction::Execute(Event event) } // Mages spam Scorch on Strawman to disorient him -bool WizardOfOzScorchStrawmanAction::Execute(Event event) +bool WizardOfOzScorchStrawmanAction::Execute(Event /*event*/) { Unit* strawman = AI_VALUE2(Unit*, "find target", "strawman"); if (strawman && botAI->CanCastSpell("scorch", strawman)) @@ -400,7 +400,7 @@ bool WizardOfOzScorchStrawmanAction::Execute(Event event) // The Curator // Prioritize destroying Astral Flares -bool TheCuratorMarkAstralFlareAction::Execute(Event event) +bool TheCuratorMarkAstralFlareAction::Execute(Event /*event*/) { Unit* flare = AI_VALUE2(Unit*, "find target", "astral flare"); if (!flare) @@ -416,7 +416,7 @@ bool TheCuratorMarkAstralFlareAction::Execute(Event event) // Tank the boss in the center of the hallway near the Guardian's Library // Main tank and off tank will attack the boss; others will focus on Astral Flares -bool TheCuratorPositionBossAction::Execute(Event event) +bool TheCuratorPositionBossAction::Execute(Event /*event*/) { Unit* curator = AI_VALUE2(Unit*, "find target", "the curator"); if (!curator) @@ -450,7 +450,7 @@ bool TheCuratorPositionBossAction::Execute(Event event) } // Spread out ranged DPS to avoid Arcing Sear damage -bool TheCuratorSpreadRangedAction::Execute(Event event) +bool TheCuratorSpreadRangedAction::Execute(Event /*event*/) { const float minDistance = 5.0f; Unit* nearestPlayer = GetNearestPlayerInRadius(bot, minDistance); @@ -468,7 +468,7 @@ bool TheCuratorSpreadRangedAction::Execute(Event event) // Terestian Illhoof // Prioritize (1) Demon Chains, (2) Kil'rek, (3) Illhoof -bool TerestianIllhoofMarkTargetAction::Execute(Event event) +bool TerestianIllhoofMarkTargetAction::Execute(Event /*event*/) { Unit* demonChains = GetFirstAliveUnitByEntry(botAI, NPC_DEMON_CHAINS); Unit* kilrek = GetFirstAliveUnitByEntry(botAI, NPC_KILREK); @@ -484,7 +484,7 @@ bool TerestianIllhoofMarkTargetAction::Execute(Event event) // Shade of Aran // Run to the edge of the room to avoid Arcane Explosion -bool ShadeOfAranRunAwayFromArcaneExplosionAction::Execute(Event event) +bool ShadeOfAranRunAwayFromArcaneExplosionAction::Execute(Event /*event*/) { Unit* aran = AI_VALUE2(Unit*, "find target", "shade of aran"); if (!aran) @@ -503,7 +503,7 @@ bool ShadeOfAranRunAwayFromArcaneExplosionAction::Execute(Event event) } // I will not move when Flame Wreath is cast or the raid blows up -bool ShadeOfAranStopMovingDuringFlameWreathAction::Execute(Event event) +bool ShadeOfAranStopMovingDuringFlameWreathAction::Execute(Event /*event*/) { AI_VALUE(LastMovement&, "last movement").Set(nullptr); @@ -518,7 +518,7 @@ bool ShadeOfAranStopMovingDuringFlameWreathAction::Execute(Event event) } // Mark Conjured Elementals with skull so DPS can burn them down -bool ShadeOfAranMarkConjuredElementalAction::Execute(Event event) +bool ShadeOfAranMarkConjuredElementalAction::Execute(Event /*event*/) { Unit* elemental = GetFirstAliveUnitByEntry(botAI, NPC_CONJURED_ELEMENTAL); @@ -530,7 +530,7 @@ bool ShadeOfAranMarkConjuredElementalAction::Execute(Event event) // Don't get closer than 11 yards to Aran to avoid counterspell // Don't get farther than 15 yards from Aran to avoid getting stuck in alcoves -bool ShadeOfAranRangedMaintainDistanceAction::Execute(Event event) +bool ShadeOfAranRangedMaintainDistanceAction::Execute(Event /*event*/) { Unit* aran = AI_VALUE2(Unit*, "find target", "shade of aran"); if (!aran) @@ -594,7 +594,7 @@ bool ShadeOfAranRangedMaintainDistanceAction::Execute(Event event) // One tank bot per phase will dance in and out of the red beam (5 seconds in, 5 seconds out) // Tank bots will ignore void zones--their positioning is too important to risk losing beam control -bool NetherspiteBlockRedBeamAction::Execute(Event event) +bool NetherspiteBlockRedBeamAction::Execute(Event /*event*/) { Unit* netherspite = AI_VALUE2(Unit*, "find target", "netherspite"); if (!netherspite) @@ -681,7 +681,7 @@ Position NetherspiteBlockRedBeamAction::GetPositionOnBeam(Unit* netherspite, Uni // Two non-Rogue/Warrior DPS bots will block the blue beam for each phase (swap at 25 debuff stacks) // When avoiding void zones, blocking bots will move along the beam to continue blocking -bool NetherspiteBlockBlueBeamAction::Execute(Event event) +bool NetherspiteBlockBlueBeamAction::Execute(Event /*event*/) { Unit* netherspite = AI_VALUE2(Unit*, "find target", "netherspite"); if (!netherspite) @@ -774,7 +774,7 @@ bool NetherspiteBlockBlueBeamAction::Execute(Event event) // Two healer bots will block the green beam for each phase (swap at 25 debuff stacks) // OR one rogue or DPS warrior bot will block the green beam for an entire phase (if they begin the phase as the blocker) // When avoiding void zones, blocking bots will move along the beam to continue blocking -bool NetherspiteBlockGreenBeamAction::Execute(Event event) +bool NetherspiteBlockGreenBeamAction::Execute(Event /*event*/) { Unit* netherspite = AI_VALUE2(Unit*, "find target", "netherspite"); if (!netherspite) @@ -864,7 +864,7 @@ bool NetherspiteBlockGreenBeamAction::Execute(Event event) } // All bots not currently blocking a beam will avoid beams and void zones -bool NetherspiteAvoidBeamAndVoidZoneAction::Execute(Event event) +bool NetherspiteAvoidBeamAndVoidZoneAction::Execute(Event /*event*/) { Unit* netherspite = AI_VALUE2(Unit*, "find target", "netherspite"); if (!netherspite) @@ -980,7 +980,7 @@ bool NetherspiteAvoidBeamAndVoidZoneAction::IsAwayFromBeams( return true; } -bool NetherspiteBanishPhaseAvoidVoidZoneAction::Execute(Event event) +bool NetherspiteBanishPhaseAvoidVoidZoneAction::Execute(Event /*event*/) { std::vector voidZones = GetAllVoidZones(botAI, bot); @@ -993,7 +993,7 @@ bool NetherspiteBanishPhaseAvoidVoidZoneAction::Execute(Event event) return false; } -bool NetherspiteManageTimersAndTrackersAction::Execute(Event event) +bool NetherspiteManageTimersAndTrackersAction::Execute(Event /*event*/) { Unit* netherspite = AI_VALUE2(Unit*, "find target", "netherspite"); if (!netherspite) @@ -1045,7 +1045,7 @@ bool NetherspiteManageTimersAndTrackersAction::Execute(Event event) // Move away from the boss to avoid Shadow Nova when Enfeebled // Do not cross within Infernal Hellfire radius while doing so -bool PrinceMalchezaarEnfeebledAvoidHazardAction::Execute(Event event) +bool PrinceMalchezaarEnfeebledAvoidHazardAction::Execute(Event /*event*/) { Unit* malchezaar = AI_VALUE2(Unit*, "find target", "prince malchezaar"); if (!malchezaar) @@ -1057,7 +1057,6 @@ bool PrinceMalchezaarEnfeebledAvoidHazardAction::Execute(Event event) const float minSafeBossDistanceSq = minSafeBossDistance * minSafeBossDistance; const float maxSafeBossDistance = 60.0f; const float safeInfernalDistance = 23.0f; - const float safeInfernalDistanceSq = safeInfernalDistance * safeInfernalDistance; const float distIncrement = 0.5f; const uint8 numAngles = 64; @@ -1122,7 +1121,7 @@ bool PrinceMalchezaarEnfeebledAvoidHazardAction::Execute(Event event) // Move away from infernals while staying within range of the boss // Prioritize finding a safe path to the new location, but will fallback to just finding a safe location if needed -bool PrinceMalchezaarNonTankAvoidInfernalAction::Execute(Event event) +bool PrinceMalchezaarNonTankAvoidInfernalAction::Execute(Event /*event*/) { Unit* malchezaar = AI_VALUE2(Unit*, "find target", "prince malchezaar"); if (!malchezaar) @@ -1189,7 +1188,7 @@ bool PrinceMalchezaarNonTankAvoidInfernalAction::Execute(Event event) // This is similar to the non-tank avoid infernal action, but the movement is based on the bot's location // And the safe distance from infernals is larger to give melee more room to maneuver -bool PrinceMalchezaarMainTankMovementAction::Execute(Event event) +bool PrinceMalchezaarMainTankMovementAction::Execute(Event /*event*/) { Unit* malchezaar = AI_VALUE2(Unit*, "find target", "prince malchezaar"); if (!malchezaar) @@ -1255,7 +1254,7 @@ bool PrinceMalchezaarMainTankMovementAction::Execute(Event event) // The tank position is near the Southeastern area of the Master's Terrace // The tank moves Nightbane into position in two steps to try to get Nightbane to face sideways to the raid -bool NightbaneGroundPhasePositionBossAction::Execute(Event event) +bool NightbaneGroundPhasePositionBossAction::Execute(Event /*event*/) { Unit* nightbane = AI_VALUE2(Unit*, "find target", "nightbane"); if (!nightbane) @@ -1301,7 +1300,7 @@ bool NightbaneGroundPhasePositionBossAction::Execute(Event event) // Ranged bots rotate between 3 positions to avoid standing in Charred Earth, which lasts for // 30s and has a minimum cooldown of 18s (so there can be 2 active at once) // Ranged positions are near the Northeastern door to the tower -bool NightbaneGroundPhaseRotateRangedPositionsAction::Execute(Event event) +bool NightbaneGroundPhaseRotateRangedPositionsAction::Execute(Event /*event*/) { const ObjectGuid botGuid = bot->GetGUID(); uint8 index = nightbaneRangedStep.count(botGuid) ? nightbaneRangedStep[botGuid] : 0; @@ -1345,7 +1344,7 @@ bool NightbaneGroundPhaseRotateRangedPositionsAction::Execute(Event event) } // For countering Bellowing Roars during the ground phase -bool NightbaneCastFearWardOnMainTankAction::Execute(Event event) +bool NightbaneCastFearWardOnMainTankAction::Execute(Event /*event*/) { Player* mainTank = nullptr; if (Group* group = bot->GetGroup()) @@ -1368,7 +1367,7 @@ bool NightbaneCastFearWardOnMainTankAction::Execute(Event event) } // Put pets on passive during the flight phase so they don't try to chase Nightbane off the map -bool NightbaneControlPetAggressionAction::Execute(Event event) +bool NightbaneControlPetAggressionAction::Execute(Event /*event*/) { Unit* nightbane = AI_VALUE2(Unit*, "find target", "nightbane"); if (!nightbane) @@ -1394,7 +1393,7 @@ bool NightbaneControlPetAggressionAction::Execute(Event event) // 2. Once Rain of Bones hits, the whole party moves to a new stack position // This action lasts for the first 35 seconds of the flight phase, after which Nightbane gets // ready to land, and the player will need to lead the bots over near the ground phase position -bool NightbaneFlightPhaseMovementAction::Execute(Event event) +bool NightbaneFlightPhaseMovementAction::Execute(Event /*event*/) { Unit* nightbane = AI_VALUE2(Unit*, "find target", "nightbane"); if (!nightbane || nightbane->GetPositionZ() <= NIGHTBANE_FLIGHT_Z) @@ -1440,7 +1439,7 @@ bool NightbaneFlightPhaseMovementAction::Execute(Event event) return false; } -bool NightbaneManageTimersAndTrackersAction::Execute(Event event) +bool NightbaneManageTimersAndTrackersAction::Execute(Event /*event*/) { Unit* nightbane = AI_VALUE2(Unit*, "find target", "nightbane"); if (!nightbane) diff --git a/src/Ai/Raid/Karazhan/Util/RaidKarazhanHelpers.cpp b/src/Ai/Raid/Karazhan/Util/RaidKarazhanHelpers.cpp index ea989dcf3..513920e11 100644 --- a/src/Ai/Raid/Karazhan/Util/RaidKarazhanHelpers.cpp +++ b/src/Ai/Raid/Karazhan/Util/RaidKarazhanHelpers.cpp @@ -1,5 +1,4 @@ #include "RaidKarazhanHelpers.h" -#include "RaidKarazhanActions.h" #include "Playerbots.h" namespace KarazhanHelpers @@ -304,10 +303,8 @@ namespace KarazhanHelpers { float sx = start.GetPositionX(); float sy = start.GetPositionY(); - float sz = start.GetPositionZ(); float tx = target.GetPositionX(); float ty = target.GetPositionY(); - float tz = target.GetPositionZ(); const float totalDist = start.GetExactDist2d(target.GetPositionX(), target.GetPositionY()); if (totalDist == 0.0f) @@ -318,7 +315,6 @@ namespace KarazhanHelpers float t = checkDist / totalDist; float checkX = sx + (tx - sx) * t; float checkY = sy + (ty - sy) * t; - float checkZ = sz + (tz - sz) * t; for (Unit* hazard : hazards) { const float hx = checkX - hazard->GetPositionX(); diff --git a/src/Ai/Raid/Magtheridon/Action/RaidMagtheridonActions.cpp b/src/Ai/Raid/Magtheridon/Action/RaidMagtheridonActions.cpp index dab7efab9..ffe446965 100644 --- a/src/Ai/Raid/Magtheridon/Action/RaidMagtheridonActions.cpp +++ b/src/Ai/Raid/Magtheridon/Action/RaidMagtheridonActions.cpp @@ -8,7 +8,7 @@ using namespace MagtheridonHelpers; -bool MagtheridonMainTankAttackFirstThreeChannelersAction::Execute(Event event) +bool MagtheridonMainTankAttackFirstThreeChannelersAction::Execute(Event /*event*/) { Unit* magtheridon = AI_VALUE2(Unit*, "find target", "magtheridon"); if (!magtheridon) @@ -67,7 +67,7 @@ bool MagtheridonMainTankAttackFirstThreeChannelersAction::Execute(Event event) return false; } -bool MagtheridonFirstAssistTankAttackNWChannelerAction::Execute(Event event) +bool MagtheridonFirstAssistTankAttackNWChannelerAction::Execute(Event /*event*/) { Creature* channelerDiamond = GetChanneler(bot, NORTHWEST_CHANNELER); if (!channelerDiamond) @@ -100,7 +100,7 @@ bool MagtheridonFirstAssistTankAttackNWChannelerAction::Execute(Event event) return false; } -bool MagtheridonSecondAssistTankAttackNEChannelerAction::Execute(Event event) +bool MagtheridonSecondAssistTankAttackNEChannelerAction::Execute(Event /*event*/) { Creature* channelerTriangle = GetChanneler(bot, NORTHEAST_CHANNELER); if (!channelerTriangle) @@ -134,7 +134,7 @@ bool MagtheridonSecondAssistTankAttackNEChannelerAction::Execute(Event event) } // Misdirect West & East Channelers to Main Tank -bool MagtheridonMisdirectHellfireChannelers::Execute(Event event) +bool MagtheridonMisdirectHellfireChannelers::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -211,7 +211,7 @@ bool MagtheridonMisdirectHellfireChannelers::Execute(Event event) return false; } -bool MagtheridonAssignDPSPriorityAction::Execute(Event event) +bool MagtheridonAssignDPSPriorityAction::Execute(Event /*event*/) { // Listed in order of priority Creature* channelerSquare = GetChanneler(bot, SOUTH_CHANNELER); @@ -285,7 +285,7 @@ bool MagtheridonAssignDPSPriorityAction::Execute(Event event) // Assign Burning Abyssals to Warlocks to Banish // Burning Abyssals in excess of Warlocks in party will be Feared -bool MagtheridonWarlockCCBurningAbyssalAction::Execute(Event event) +bool MagtheridonWarlockCCBurningAbyssalAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -338,7 +338,7 @@ bool MagtheridonWarlockCCBurningAbyssalAction::Execute(Event event) } // Main tank will back up to the Northern point of the room -bool MagtheridonMainTankPositionBossAction::Execute(Event event) +bool MagtheridonMainTankPositionBossAction::Execute(Event /*event*/) { Unit* magtheridon = AI_VALUE2(Unit*, "find target", "magtheridon"); if (!magtheridon) @@ -376,7 +376,7 @@ bool MagtheridonMainTankPositionBossAction::Execute(Event event) std::unordered_map MagtheridonSpreadRangedAction::initialPositions; std::unordered_map MagtheridonSpreadRangedAction::hasReachedInitialPosition; -bool MagtheridonSpreadRangedAction::Execute(Event event) +bool MagtheridonSpreadRangedAction::Execute(Event /*event*/) { Unit* magtheridon = AI_VALUE2(Unit*, "find target", "magtheridon"); if (!magtheridon) @@ -486,7 +486,7 @@ bool MagtheridonSpreadRangedAction::Execute(Event event) // For bots that are assigned to click cubes // Magtheridon casts Blast Nova every 54.35 to 55.40s, with a 2s cast time -bool MagtheridonUseManticronCubeAction::Execute(Event event) +bool MagtheridonUseManticronCubeAction::Execute(Event /*event*/) { Unit* magtheridon = AI_VALUE2(Unit*, "find target", "magtheridon"); if (!magtheridon) @@ -627,7 +627,7 @@ bool MagtheridonUseManticronCubeAction::HandleCubeInteraction(const CubeInfo& cu // is not interrupted or takes too long to interrupt, the timer will be thrown off for the rest of the encounter. // Correcting this issue is complicated and probably would need some rewriting--I have not done so and // and view the current solution as sufficient since in TBC a missed Blast Nova would be a guaranteed wipe anyway. -bool MagtheridonManageTimersAndAssignmentsAction::Execute(Event event) +bool MagtheridonManageTimersAndAssignmentsAction::Execute(Event /*event*/) { Unit* magtheridon = AI_VALUE2(Unit*, "find target", "magtheridon"); if (!magtheridon) @@ -640,7 +640,7 @@ bool MagtheridonManageTimersAndAssignmentsAction::Execute(Event event) magtheridon->FindCurrentSpellBySpellId(SPELL_BLAST_NOVA); bool lastBlastNova = lastBlastNovaState[instanceId]; - if (lastBlastNova && !blastNovaActive && IsMechanicTrackerBot(botAI, bot, MAGTHERIDON_MAP_ID, nullptr)) + if (lastBlastNova && !blastNovaActive) blastNovaTimer[instanceId] = now; lastBlastNovaState[instanceId] = blastNovaActive; diff --git a/src/Ai/Raid/MoltenCore/Action/RaidMcActions.cpp b/src/Ai/Raid/MoltenCore/Action/RaidMcActions.cpp index b18c8b853..d2bc2edc1 100644 --- a/src/Ai/Raid/MoltenCore/Action/RaidMcActions.cpp +++ b/src/Ai/Raid/MoltenCore/Action/RaidMcActions.cpp @@ -2,7 +2,6 @@ #include "Playerbots.h" #include "RtiTargetValue.h" -#include "RaidMcTriggers.h" #include "RaidMcHelpers.h" static constexpr float LIVING_BOMB_DISTANCE = 20.0f; @@ -20,12 +19,12 @@ static constexpr float CORE_RAGER_STEP_DISTANCE = 5.0f; using namespace MoltenCoreHelpers; -bool McMoveFromGroupAction::Execute(Event event) +bool McMoveFromGroupAction::Execute(Event /*event*/) { return MoveFromGroup(LIVING_BOMB_DISTANCE); } -bool McMoveFromBaronGeddonAction::Execute(Event event) +bool McMoveFromBaronGeddonAction::Execute(Event /*event*/) { if (Unit* boss = AI_VALUE2(Unit*, "find target", "baron geddon")) { @@ -42,7 +41,7 @@ bool McMoveFromBaronGeddonAction::Execute(Event event) return false; } -bool McShazzrahMoveAwayAction::Execute(Event event) +bool McShazzrahMoveAwayAction::Execute(Event /*event*/) { if (Unit* boss = AI_VALUE2(Unit*, "find target", "shazzrah")) { @@ -53,7 +52,7 @@ bool McShazzrahMoveAwayAction::Execute(Event event) return false; } -bool McGolemaggMarkBossAction::Execute(Event event) +bool McGolemaggMarkBossAction::Execute(Event /*event*/) { if (Unit* boss = AI_VALUE2(Unit*, "find target", "golemagg the incinerator")) { @@ -115,7 +114,7 @@ bool McGolemaggTankAction::FindCoreRagers(Unit*& coreRager1, Unit*& coreRager2) return coreRager1 != nullptr && coreRager2 != nullptr; } -bool McGolemaggMainTankAttackGolemaggAction::Execute(Event event) +bool McGolemaggMainTankAttackGolemaggAction::Execute(Event /*event*/) { // At this point, we know we are not the last living tank in the group. if (Unit* boss = AI_VALUE2(Unit*, "find target", "golemagg the incinerator")) diff --git a/src/Ai/Raid/ObsidianSanctum/Action/RaidOsActions.cpp b/src/Ai/Raid/ObsidianSanctum/Action/RaidOsActions.cpp index 2ee68bca4..ee9dfb0f7 100644 --- a/src/Ai/Raid/ObsidianSanctum/Action/RaidOsActions.cpp +++ b/src/Ai/Raid/ObsidianSanctum/Action/RaidOsActions.cpp @@ -3,7 +3,7 @@ #include "Playerbots.h" -bool SartharionTankPositionAction::Execute(Event event) +bool SartharionTankPositionAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sartharion"); if (!boss) { return false; } @@ -84,7 +84,7 @@ bool SartharionTankPositionAction::Execute(Event event) return false; } -bool AvoidTwilightFissureAction::Execute(Event event) +bool AvoidTwilightFissureAction::Execute(Event /*event*/) { const float radius = 5.0f; @@ -104,7 +104,7 @@ bool AvoidTwilightFissureAction::Execute(Event event) return false; } -bool AvoidFlameTsunamiAction::Execute(Event event) +bool AvoidFlameTsunamiAction::Execute(Event /*event*/) { // Adjustable, this is the acceptable distance to stack point that will be accepted as "safe" float looseDistance = 4.0f; @@ -167,7 +167,7 @@ bool AvoidFlameTsunamiAction::Execute(Event event) return false; } -bool SartharionAttackPriorityAction::Execute(Event event) +bool SartharionAttackPriorityAction::Execute(Event /*event*/) { Unit* sartharion = AI_VALUE2(Unit*, "find target", "sartharion"); Unit* shadron = AI_VALUE2(Unit*, "find target", "shadron"); @@ -206,7 +206,7 @@ bool SartharionAttackPriorityAction::Execute(Event event) return false; } -bool EnterTwilightPortalAction::Execute(Event event) +bool EnterTwilightPortalAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "sartharion"); if (!boss || !boss->HasAura(SPELL_GIFT_OF_TWILIGHT_FIRE)) { return false; } @@ -227,7 +227,7 @@ bool EnterTwilightPortalAction::Execute(Event event) return true; } -bool ExitTwilightPortalAction::Execute(Event event) +bool ExitTwilightPortalAction::Execute(Event /*event*/) { GameObject* portal = bot->FindNearestGameObject(GO_NORMAL_PORTAL, 100.0f); if (!portal) { return false; } diff --git a/src/Ai/Raid/Onyxia/Action/RaidOnyxiaActions.cpp b/src/Ai/Raid/Onyxia/Action/RaidOnyxiaActions.cpp index 9fa4612bf..e2fe3cbe6 100644 --- a/src/Ai/Raid/Onyxia/Action/RaidOnyxiaActions.cpp +++ b/src/Ai/Raid/Onyxia/Action/RaidOnyxiaActions.cpp @@ -1,4 +1,3 @@ -// RaidOnyxiaActions.cpp #include "RaidOnyxiaActions.h" #include "GenericSpellActions.h" @@ -7,7 +6,7 @@ #include "Playerbots.h" #include "PositionAction.h" -bool RaidOnyxiaMoveToSideAction::Execute(Event event) +bool RaidOnyxiaMoveToSideAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "onyxia"); if (!boss) @@ -38,7 +37,7 @@ bool RaidOnyxiaMoveToSideAction::Execute(Event event) return false; } -bool RaidOnyxiaSpreadOutAction::Execute(Event event) +bool RaidOnyxiaSpreadOutAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "onyxia"); @@ -64,7 +63,7 @@ bool RaidOnyxiaSpreadOutAction::Execute(Event event) return MoveFromGroup(9.0f); // move 9 yards } -bool RaidOnyxiaMoveToSafeZoneAction::Execute(Event event) +bool RaidOnyxiaMoveToSafeZoneAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "onyxia"); if (!boss) @@ -105,7 +104,7 @@ bool RaidOnyxiaMoveToSafeZoneAction::Execute(Event event) false, false, false, false, MovementPriority::MOVEMENT_COMBAT); } -bool RaidOnyxiaKillWhelpsAction::Execute(Event event) +bool RaidOnyxiaKillWhelpsAction::Execute(Event /*event*/) { Unit* currentTarget = AI_VALUE(Unit*, "current target"); // If already attacking a whelp, don't swap targets @@ -129,7 +128,7 @@ bool RaidOnyxiaKillWhelpsAction::Execute(Event event) return false; } -bool OnyxiaAvoidEggsAction::Execute(Event event) +bool OnyxiaAvoidEggsAction::Execute(Event /*event*/) { Position botPos = Position(bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ()); diff --git a/src/Ai/Raid/Ulduar/Action/RaidUlduarActions.cpp b/src/Ai/Raid/Ulduar/Action/RaidUlduarActions.cpp index f7eca38db..15db518a7 100644 --- a/src/Ai/Raid/Ulduar/Action/RaidUlduarActions.cpp +++ b/src/Ai/Raid/Ulduar/Action/RaidUlduarActions.cpp @@ -47,7 +47,7 @@ const Position yoggPortalLoc[] = { {1960.62f, -32.00f, 325.5f}, {1981.98f, -5.69f, 325.5f}, {1982.78f, -45.73f, 325.5f}, {2000.66f, -29.68f, 325.5f}, {1999.88f, -19.61f, 325.5f}, {1961.37f, -19.54f, 325.5f}}; -bool FlameLeviathanVehicleAction::Execute(Event event) +bool FlameLeviathanVehicleAction::Execute(Event /*event*/) { vehicleBase_ = bot->GetVehicleBase(); vehicle_ = bot->GetVehicle(); @@ -269,7 +269,7 @@ bool FlameLeviathanVehicleAction::ChopperAction(Unit* target) return false; } -bool FlameLeviathanEnterVehicleAction::Execute(Event event) +bool FlameLeviathanEnterVehicleAction::Execute(Event /*event*/) { // do not switch vehicles yet if (bot->GetVehicle()) @@ -414,7 +414,7 @@ bool FlameLeviathanEnterVehicleAction::AllMainVehiclesOnUse() return demolisher >= maxC && siege >= maxC; } -bool RazorscaleAvoidDevouringFlameAction::Execute(Event event) +bool RazorscaleAvoidDevouringFlameAction::Execute(Event /*event*/) { RazorscaleBossHelper razorscaleHelper(botAI); @@ -495,7 +495,7 @@ bool RazorscaleAvoidDevouringFlameAction::isUseful() return false; // No nearby flames or bot is at a safe distance } -bool RazorscaleAvoidSentinelAction::Execute(Event event) +bool RazorscaleAvoidSentinelAction::Execute(Event /*event*/) { bool isMainTank = botAI->IsMainTank(bot); bool isRanged = botAI->IsRanged(bot); @@ -617,7 +617,7 @@ bool RazorscaleAvoidSentinelAction::isUseful() return false; } -bool RazorscaleAvoidWhirlwindAction::Execute(Event event) +bool RazorscaleAvoidWhirlwindAction::Execute(Event /*event*/) { if (botAI->IsTank(bot)) { @@ -734,24 +734,18 @@ bool RazorscaleIgnoreBossAction::isUseful() return false; } -bool RazorscaleIgnoreBossAction::Execute(Event event) +bool RazorscaleIgnoreBossAction::Execute(Event /*event*/) { if (!bot) - { return false; - } Unit* boss = AI_VALUE2(Unit*, "find target", "razorscale"); if (!boss) - { return false; - } Group* group = bot->GetGroup(); if (!group) - { return false; - } // Check if the bot is outside the designated area and move inside first if (bot->GetDistance2d(RazorscaleBossHelper::RAZORSCALE_ARENA_CENTER_X, @@ -764,17 +758,13 @@ bool RazorscaleIgnoreBossAction::Execute(Event event) } if (!botAI->IsTank(bot)) - { return false; - } // Check if the boss is already set as the moon marker int8 moonIndex = 4; ObjectGuid currentMoonTarget = group->GetTargetIcon(moonIndex); if (currentMoonTarget == boss->GetGUID()) - { return false; // Moon marker is already correctly set - } // Get the main tank and determine role Unit* mainTankUnit = AI_VALUE(Unit*, "main tank"); @@ -809,9 +799,7 @@ bool RazorscaleGroundedAction::isUseful() { Unit* boss = AI_VALUE2(Unit*, "find target", "razorscale"); if (!boss || !boss->IsAlive() || boss->GetPositionZ() > RazorscaleBossHelper::RAZORSCALE_FLYING_Z_THRESHOLD) - { return false; - } if (botAI->IsMainTank(bot)) { @@ -854,9 +842,7 @@ bool RazorscaleGroundedAction::isUseful() } if (botAI->IsMelee(bot)) - { return false; - } if (botAI->IsRanged(bot)) { @@ -891,7 +877,7 @@ bool RazorscaleGroundedAction::isUseful() return false; } -bool RazorscaleGroundedAction::Execute(Event event) +bool RazorscaleGroundedAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "razorscale"); if (!boss || !boss->IsAlive() || boss->GetPositionZ() > RazorscaleBossHelper::RAZORSCALE_FLYING_Z_THRESHOLD) @@ -974,12 +960,10 @@ bool RazorscaleGroundedAction::Execute(Event event) return false; } -bool RazorscaleHarpoonAction::Execute(Event event) +bool RazorscaleHarpoonAction::Execute(Event /*event*/) { if (!bot) - { return false; - } RazorscaleBossHelper razorscaleHelper(botAI); @@ -1142,7 +1126,7 @@ bool RazorscaleFuseArmorAction::isUseful() return false; } -bool RazorscaleFuseArmorAction::Execute(Event event) +bool RazorscaleFuseArmorAction::Execute(Event /*event*/) { // We already know from isUseful() that: // 1) This bot can tank, AND @@ -1161,7 +1145,7 @@ bool IronAssemblyLightningTendrilsAction::isUseful() return ironAssemblyLightningTendrilsTrigger.IsActive(); } -bool IronAssemblyLightningTendrilsAction::Execute(Event event) +bool IronAssemblyLightningTendrilsAction::Execute(Event /*event*/) { const float radius = 18.0f + 10.0f; // 18 yards + 10 yards for safety @@ -1185,7 +1169,7 @@ bool IronAssemblyOverloadAction::isUseful() return ironAssemblyOverloadTrigger.IsActive(); } -bool IronAssemblyOverloadAction::Execute(Event event) +bool IronAssemblyOverloadAction::Execute(Event /*event*/) { const float radius = 20.0f + 5.0f; // 20 yards + 5 yards for safety @@ -1209,7 +1193,7 @@ bool IronAssemblyRuneOfPowerAction::isUseful() return ironAssemblyRuneOfPowerTrigger.IsActive(); } -bool IronAssemblyRuneOfPowerAction::Execute(Event event) +bool IronAssemblyRuneOfPowerAction::Execute(Event /*event*/) { Unit* target = botAI->GetUnit(bot->GetTarget()); if (!target || !target->IsAlive()) @@ -1224,7 +1208,7 @@ bool KologarnMarkDpsTargetAction::isUseful() return kologarnMarkDpsTargetTrigger.IsActive(); } -bool KologarnMarkDpsTargetAction::Execute(Event event) +bool KologarnMarkDpsTargetAction::Execute(Event /*event*/) { Unit* targetToMark = nullptr; Unit* additionalTargetToMark = nullptr; @@ -1359,7 +1343,7 @@ bool KologarnMarkDpsTargetAction::Execute(Event event) return false; } -bool KologarnFallFromFloorAction::Execute(Event event) +bool KologarnFallFromFloorAction::Execute(Event /*event*/) { return bot->TeleportTo(bot->GetMapId(), ULDUAR_KOLOGARN_RESTORE_POSITION.GetPositionX(), ULDUAR_KOLOGARN_RESTORE_POSITION.GetPositionY(), @@ -1373,7 +1357,7 @@ bool KologarnFallFromFloorAction::isUseful() return kologarnFallFromFloorTrigger.IsActive(); } -bool KologarnRubbleSlowdownAction::Execute(Event event) +bool KologarnRubbleSlowdownAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -1388,7 +1372,7 @@ bool KologarnRubbleSlowdownAction::Execute(Event event) return botAI->CastSpell("frost trap", currentSkullUnit); } -bool KologarnEyebeamAction::Execute(Event event) +bool KologarnEyebeamAction::Execute(Event /*event*/) { float distanceToLeftPoint = bot->GetExactDist(ULDUAR_KOLOGARN_EYEBEAM_LEFT_POSITION); float distanceToRightPoint = bot->GetExactDist(ULDUAR_KOLOGARN_EYEBEAM_RIGHT_POSITION); @@ -1447,7 +1431,7 @@ bool KologarnRtiTargetAction::isUseful() return kologarnRtiTargetTrigger.IsActive(); } -bool KologarnRtiTargetAction::Execute(Event event) +bool KologarnRtiTargetAction::Execute(Event /*event*/) { if (botAI->IsMainTank(bot) || botAI->IsAssistTankOfIndex(bot, 0)) { @@ -1470,13 +1454,13 @@ bool KologarnCrunchArmorAction::isUseful() return botAI->HasCheat(BotCheatMask::raid); } -bool KologarnCrunchArmorAction::Execute(Event event) +bool KologarnCrunchArmorAction::Execute(Event /*event*/) { bot->RemoveAura(SPELL_CRUNCH_ARMOR); return true; } -bool AuriayaFallFromFloorAction::Execute(Event event) +bool AuriayaFallFromFloorAction::Execute(Event /*event*/) { Player* master = botAI->GetMaster(); @@ -1522,7 +1506,7 @@ bool HodirMoveSnowpackedIcicleAction::isUseful() return true; } -bool HodirMoveSnowpackedIcicleAction::Execute(Event event) +bool HodirMoveSnowpackedIcicleAction::Execute(Event /*event*/) { Creature* target = bot->FindNearestCreature(NPC_SNOWPACKED_ICICLE, 100.0f); if (!target) @@ -1532,7 +1516,7 @@ bool HodirMoveSnowpackedIcicleAction::Execute(Event event) false, false, true, MovementPriority::MOVEMENT_NORMAL, true); } -bool HodirBitingColdJumpAction::Execute(Event event) +bool HodirBitingColdJumpAction::Execute(Event /*event*/) { bot->RemoveAurasDueToSpell(SPELL_BITING_COLD_PLAYER_AURA); @@ -1588,7 +1572,7 @@ bool FreyaMoveAwayNatureBombAction::isUseful() return true; } -bool FreyaMoveAwayNatureBombAction::Execute(Event event) +bool FreyaMoveAwayNatureBombAction::Execute(Event /*event*/) { GameObject* target = bot->FindNearestGameObject(GOBJECT_NATURE_BOMB, 12.0f); if (!target) @@ -1603,7 +1587,7 @@ bool FreyaMarkDpsTargetAction::isUseful() return freyaMarkDpsTargetTrigger.IsActive(); } -bool FreyaMarkDpsTargetAction::Execute(Event event) +bool FreyaMarkDpsTargetAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "freya"); if (!boss || !boss->IsAlive()) @@ -1759,7 +1743,7 @@ bool FreyaMoveToHealingSporeAction::isUseful() return freyaMoveToHealingSporeTrigger.IsActive(); } -bool FreyaMoveToHealingSporeAction::Execute(Event event) +bool FreyaMoveToHealingSporeAction::Execute(Event /*event*/) { GuidVector targets = AI_VALUE(GuidVector, "nearest npcs"); Creature* nearestSpore = nullptr; @@ -1801,7 +1785,7 @@ bool ThorimUnbalancingStrikeAction::isUseful() return botAI->HasCheat(BotCheatMask::raid); } -bool ThorimUnbalancingStrikeAction::Execute(Event event) +bool ThorimUnbalancingStrikeAction::Execute(Event /*event*/) { bot->RemoveAura(SPELL_UNBALANCING_STRIKE); return true; @@ -1813,7 +1797,7 @@ bool ThorimMarkDpsTargetAction::isUseful() return thorimMarkDpsTargetTrigger.IsActive(); } -bool ThorimMarkDpsTargetAction::Execute(Event event) +bool ThorimMarkDpsTargetAction::Execute(Event /*event*/) { Unit* targetToMark = nullptr; @@ -1914,7 +1898,7 @@ bool ThorimArenaPositioningAction::isUseful() return thorimArenaPositioningTrigger.IsActive(); } -bool ThorimArenaPositioningAction::Execute(Event event) +bool ThorimArenaPositioningAction::Execute(Event /*event*/) { FollowMasterStrategy followMasterStrategy(botAI); @@ -1936,7 +1920,7 @@ bool ThorimGauntletPositioningAction::isUseful() return thorimGauntletPositioningTrigger.IsActive(); } -bool ThorimGauntletPositioningAction::Execute(Event event) +bool ThorimGauntletPositioningAction::Execute(Event /*event*/) { FollowMasterStrategy followMasterStrategy(botAI); @@ -2110,7 +2094,7 @@ bool ThorimGauntletPositioningAction::Execute(Event event) return false; } -bool ThorimFallFromFloorAction::Execute(Event event) +bool ThorimFallFromFloorAction::Execute(Event /*event*/) { Player* master = botAI->GetMaster(); @@ -2127,7 +2111,7 @@ bool ThorimFallFromFloorAction::isUseful() return thorimFallFromFloorTrigger.IsActive(); } -bool ThorimPhase2PositioningAction::Execute(Event event) +bool ThorimPhase2PositioningAction::Execute(Event /*event*/) { Position targetPosition; bool backward = false; @@ -2187,7 +2171,7 @@ bool ThorimPhase2PositioningAction::isUseful() return thorimPhase2PositioningTrigger.IsActive(); } -bool MimironShockBlastAction::Execute(Event event) +bool MimironShockBlastAction::Execute(Event /*event*/) { Unit* leviathanMkII = nullptr; Unit* vx001 = nullptr; @@ -2261,7 +2245,7 @@ bool MimironShockBlastAction::isUseful() return mimironShockBlastTrigger.IsActive(); } -bool MimironPhase1PositioningAction::Execute(Event event) +bool MimironPhase1PositioningAction::Execute(Event /*event*/) { SET_AI_VALUE(float, "disperse distance", 6.0f); return true; @@ -2273,7 +2257,7 @@ bool MimironPhase1PositioningAction::isUseful() return mimironPhase1PositioningTrigger.IsActive(); } -bool MimironP3Wx2LaserBarrageAction::Execute(Event event) +bool MimironP3Wx2LaserBarrageAction::Execute(Event /*event*/) { auto master = botAI->GetMaster(); if (!master || !master->IsAlive()) @@ -2297,7 +2281,7 @@ bool MimironRapidBurstAction::isUseful() return mimironRapidBurstTrigger.IsActive(); } -bool MimironRapidBurstAction::Execute(Event event) +bool MimironRapidBurstAction::Execute(Event /*event*/) { Unit* leviathanMkII = nullptr; @@ -2404,7 +2388,7 @@ bool MimironRapidBurstAction::Execute(Event event) return true; } -bool MimironAerialCommandUnitAction::Execute(Event event) +bool MimironAerialCommandUnitAction::Execute(Event /*event*/) { Unit* boss = nullptr; Unit* bombBot = nullptr; @@ -2476,7 +2460,7 @@ bool MimironRocketStrikeAction::isUseful() return mimironRocketStrikeTrigger.IsActive(); } -bool MimironRocketStrikeAction::Execute(Event event) +bool MimironRocketStrikeAction::Execute(Event /*event*/) { Unit* leviathanMkII = nullptr; Unit* vx001 = nullptr; @@ -2491,25 +2475,19 @@ bool MimironRocketStrikeAction::Execute(Event event) continue; if (target->GetEntry() == NPC_LEVIATHAN_MKII) - { leviathanMkII = target; - } + else if (target->GetEntry() == NPC_VX001) - { vx001 = target; - } + else if (target->GetEntry() == NPC_AERIAL_COMMAND_UNIT) - { aerialCommandUnit = target; - } } Creature* rocketStrikeN = bot->FindNearestCreature(NPC_ROCKET_STRIKE_N, 100.0f); if (!rocketStrikeN) - { return false; - } if (!vx001 && !aerialCommandUnit) { @@ -2537,7 +2515,7 @@ bool MimironRocketStrikeAction::Execute(Event event) } } -bool MimironPhase4MarkDpsAction::Execute(Event event) +bool MimironPhase4MarkDpsAction::Execute(Event /*event*/) { Unit* leviathanMkII = nullptr; Unit* vx001 = nullptr; @@ -2626,7 +2604,7 @@ bool MimironPhase4MarkDpsAction::Execute(Event event) } } -bool MimironCheatAction::Execute(Event event) +bool MimironCheatAction::Execute(Event /*event*/) { GuidVector targets = AI_VALUE(GuidVector, "nearest npcs"); for (const ObjectGuid& guid : targets) @@ -2648,7 +2626,7 @@ bool MimironCheatAction::Execute(Event event) return true; } -bool VezaxCheatAction::Execute(Event event) +bool VezaxCheatAction::Execute(Event /*event*/) { // Restore bot's mana to full uint32 maxMana = bot->GetMaxPower(POWER_MANA); @@ -2660,7 +2638,7 @@ bool VezaxCheatAction::Execute(Event event) return true; } -bool VezaxShadowCrashAction::Execute(Event event) +bool VezaxShadowCrashAction::Execute(Event /*event*/) { // Find General Vezax boss Unit* boss = AI_VALUE2(Unit*, "find target", "general vezax"); @@ -2704,7 +2682,7 @@ bool VezaxShadowCrashAction::Execute(Event event) true); } -bool VezaxMarkOfTheFacelessAction::Execute(Event event) +bool VezaxMarkOfTheFacelessAction::Execute(Event /*event*/) { return MoveTo(bot->GetMapId(), ULDUAR_VEZAX_MARK_OF_THE_FACELESS_SPOT.GetPositionX(), ULDUAR_VEZAX_MARK_OF_THE_FACELESS_SPOT.GetPositionY(), @@ -2712,7 +2690,7 @@ bool VezaxMarkOfTheFacelessAction::Execute(Event event) MovementPriority::MOVEMENT_FORCED, true, false); } -bool YoggSaronOminousCloudCheatAction::Execute(Event event) +bool YoggSaronOminousCloudCheatAction::Execute(Event /*event*/) { YoggSaronTrigger yoggSaronTrigger(botAI); @@ -2732,14 +2710,14 @@ bool YoggSaronOminousCloudCheatAction::Execute(Event event) return true; } -bool YoggSaronGuardianPositioningAction::Execute(Event event) +bool YoggSaronGuardianPositioningAction::Execute(Event /*event*/) { return MoveTo(bot->GetMapId(), ULDUAR_YOGG_SARON_MIDDLE.GetPositionX(), ULDUAR_YOGG_SARON_MIDDLE.GetPositionY(), ULDUAR_YOGG_SARON_MIDDLE.GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_FORCED, true, false); } -bool YoggSaronSanityAction::Execute(Event event) +bool YoggSaronSanityAction::Execute(Event /*event*/) { Creature* sanityWell = bot->FindNearestCreature(NPC_SANITY_WELL, 200.0f); @@ -2748,7 +2726,7 @@ bool YoggSaronSanityAction::Execute(Event event) true, false); } -bool YoggSaronMarkTargetAction::Execute(Event event) +bool YoggSaronMarkTargetAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -2877,7 +2855,7 @@ bool YoggSaronMarkTargetAction::Execute(Event event) return false; } -bool YoggSaronBrainLinkAction::Execute(Event event) +bool YoggSaronBrainLinkAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -2897,7 +2875,7 @@ bool YoggSaronBrainLinkAction::Execute(Event event) return false; } -bool YoggSaronMoveToEnterPortalAction::Execute(Event event) +bool YoggSaronMoveToEnterPortalAction::Execute(Event /*event*/) { Group* group = bot->GetGroup(); if (!group) @@ -2966,7 +2944,7 @@ bool YoggSaronMoveToEnterPortalAction::Execute(Event event) } } -bool YoggSaronFallFromFloorAction::Execute(Event event) +bool YoggSaronFallFromFloorAction::Execute(Event /*event*/) { std::string rtiMark = AI_VALUE(std::string, "rti"); if (rtiMark == "skull") @@ -2998,7 +2976,7 @@ bool YoggSaronFallFromFloorAction::Execute(Event event) return false; } -bool YoggSaronBossRoomMovementCheatAction::Execute(Event event) +bool YoggSaronBossRoomMovementCheatAction::Execute(Event /*event*/) { FollowMasterStrategy followMasterStrategy(botAI); if (botAI->HasStrategy(followMasterStrategy.getName(), BotState::BOT_STATE_NON_COMBAT)) @@ -3034,7 +3012,7 @@ bool YoggSaronBossRoomMovementCheatAction::Execute(Event event) currentSkullUnit->GetPositionZ(), bot->GetOrientation()); } -bool YoggSaronUsePortalAction::Execute(Event event) +bool YoggSaronUsePortalAction::Execute(Event /*event*/) { Creature* assignedPortal = bot->FindNearestCreature(NPC_DESCEND_INTO_MADNESS, 2.0f, true); if (!assignedPortal) @@ -3051,7 +3029,7 @@ bool YoggSaronUsePortalAction::Execute(Event event) return assignedPortal->HandleSpellClick(bot); } -bool YoggSaronIllusionRoomAction::Execute(Event event) +bool YoggSaronIllusionRoomAction::Execute(Event /*event*/) { YoggSaronTrigger yoggSaronTrigger(botAI); @@ -3173,30 +3151,23 @@ bool YoggSaronIllusionRoomAction::SetBrainRtiTarget(YoggSaronTrigger yoggSaronTr return true; } -bool YoggSaronMoveToExitPortalAction::Execute(Event event) +bool YoggSaronMoveToExitPortalAction::Execute(Event /*event*/) { GameObject* portal = bot->FindNearestGameObject(GO_FLEE_TO_THE_SURFACE_PORTAL, 100.0f); if (!portal) - { return false; - } if (botAI->HasCheat(BotCheatMask::raid)) - { bot->TeleportTo(bot->GetMapId(), portal->GetPositionX(), portal->GetPositionY(), portal->GetPositionZ(), bot->GetOrientation()); - } + else - { MoveTo(bot->GetMapId(), portal->GetPositionX(), portal->GetPositionY(), portal->GetPositionZ(), false, false, false, true, MovementPriority::MOVEMENT_FORCED, true, false); - } if (bot->GetDistance2d(portal) > 2.0f) - { return false; - } portal->Use(bot); @@ -3204,13 +3175,12 @@ bool YoggSaronMoveToExitPortalAction::Execute(Event event) return true; } -bool YoggSaronLunaticGazeAction::Execute(Event event) +bool YoggSaronLunaticGazeAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "yogg-saron"); if (!boss || !boss->IsAlive()) - { return false; - } + float angle = bot->GetAngle(boss); float newAngle = Position::NormalizeOrientation(angle + M_PI); // Add 180 degrees (PI radians) bot->SetFacingTo(newAngle); @@ -3218,15 +3188,14 @@ bool YoggSaronLunaticGazeAction::Execute(Event event) if (botAI->IsRangedDps(bot)) { if (AI_VALUE(std::string, "rti") != "cross") - { botAI->GetAiObjectContext()->GetValue("rti")->Set("cross"); - } + } return true; } -bool YoggSaronPhase3PositioningAction::Execute(Event event) +bool YoggSaronPhase3PositioningAction::Execute(Event /*event*/) { if (botAI->IsRanged(bot)) { diff --git a/src/Ai/Raid/Ulduar/Trigger/RaidUlduarTriggers.cpp b/src/Ai/Raid/Ulduar/Trigger/RaidUlduarTriggers.cpp index f14a51311..a99ea8dbc 100644 --- a/src/Ai/Raid/Ulduar/Trigger/RaidUlduarTriggers.cpp +++ b/src/Ai/Raid/Ulduar/Trigger/RaidUlduarTriggers.cpp @@ -1,6 +1,5 @@ #include "RaidUlduarTriggers.h" -#include "EventMap.h" #include "GameObject.h" #include "Object.h" #include "PlayerbotAI.h" @@ -350,7 +349,6 @@ bool KologarnMarkDpsTargetTrigger::IsActive() if (!target) continue; - uint32 creatureId = target->GetEntry(); if (target->GetEntry() == NPC_RUBBLE && target->IsAlive()) { return true; // Found a rubble to mark @@ -1094,7 +1092,7 @@ bool ThorimPhase2PositioningTrigger::IsActive() Unit* boss = AI_VALUE2(Unit*, "find target", "thorim"); if (!boss || !boss->IsInWorld() || boss->IsDuringRemoveFromWorld()) - return false; + return false; if (!boss->IsAlive()) return false; @@ -1193,17 +1191,14 @@ bool MimironPhase1PositioningTrigger::IsActive() continue; if (target->GetEntry() == NPC_LEVIATHAN_MKII) - { leviathanMkII = target; - } + else if (target->GetEntry() == NPC_VX001) - { return false; - } + else if (target->GetEntry() == NPC_AERIAL_COMMAND_UNIT) - { return false; - } + } if (!leviathanMkII || !leviathanMkII->IsAlive()) @@ -1796,7 +1791,7 @@ Unit* YoggSaronTrigger::GetIllusionRoomRtiTarget() return nullptr; } - uint8 rtiIndex = RtiTargetValue::GetRtiIndex(AI_VALUE(std::string, "rti")); + int32_t rtiIndex = RtiTargetValue::GetRtiIndex(AI_VALUE(std::string, "rti")); if (rtiIndex == -1) { return nullptr; // Invalid RTI mark @@ -1816,21 +1811,16 @@ Unit* YoggSaronTrigger::GetNextIllusionRoomRtiTarget() { float detectionRadius = 0.0f; if (IsInStormwindKeeperIllusion()) - { detectionRadius = ULDUAR_YOGG_SARON_STORMWIND_KEEPER_RADIUS; - } + else if (IsInIcecrownKeeperIllusion()) - { detectionRadius = ULDUAR_YOGG_SARON_ICECROWN_CITADEL_RADIUS; - } + else if (IsInChamberOfTheAspectsIllusion()) - { detectionRadius = ULDUAR_YOGG_SARON_CHAMBER_OF_ASPECTS_RADIUS; - } + else - { return nullptr; - } GuidVector targets = AI_VALUE(GuidVector, "nearest npcs"); @@ -1840,9 +1830,7 @@ Unit* YoggSaronTrigger::GetNextIllusionRoomRtiTarget() { Unit* unit = botAI->GetUnit(guid); if (unit && unit->IsAlive() && unit->GetEntry() == NPC_LAUGHING_SKULL) - { return unit; - } } } @@ -1875,9 +1863,7 @@ Unit* YoggSaronTrigger::GetNextIllusionRoomRtiTarget() { Creature* target = bot->FindNearestCreature(NPC_SUIT_OF_ARMOR, detectionRadius, true); if (target) - { return target; - } } return nullptr; @@ -1886,25 +1872,17 @@ Unit* YoggSaronTrigger::GetNextIllusionRoomRtiTarget() bool YoggSaronOminousCloudCheatTrigger::IsActive() { if (!botAI->HasCheat(BotCheatMask::raid)) - { return false; - } Unit* boss = GetSaraIfAlive(); if (!boss) - { return false; - } if (!botAI->IsBotMainTank(bot)) - { return false; - } if (bot->GetDistance2d(boss->GetPositionX(), boss->GetPositionY()) > 50.0f) - { return false; - } Creature* target = boss->FindNearestCreature(NPC_OMINOUS_CLOUD, 25.0f, true); @@ -1914,14 +1892,10 @@ bool YoggSaronOminousCloudCheatTrigger::IsActive() bool YoggSaronGuardianPositioningTrigger::IsActive() { if (!GetSaraIfAlive()) - { return false; - } if (!botAI->IsTank(bot)) - { return false; - } GuidVector targets = AI_VALUE(GuidVector, "nearest npcs"); bool thereIsAnyGuardian = false; @@ -1930,9 +1904,7 @@ bool YoggSaronGuardianPositioningTrigger::IsActive() { Unit* unit = botAI->GetUnit(guid); if (!unit || !unit->IsAlive()) - { continue; - } if (unit->GetEntry() == NPC_GUARDIAN_OF_YS) { @@ -1940,9 +1912,7 @@ bool YoggSaronGuardianPositioningTrigger::IsActive() ObjectGuid unitTargetGuid = unit->GetTarget(); Player* targetedPlayer = botAI->GetPlayer(unitTargetGuid); if (!targetedPlayer || !botAI->IsTank(targetedPlayer)) - { return false; - } } } @@ -1955,18 +1925,14 @@ bool YoggSaronSanityTrigger::IsActive() Aura* sanityAura = bot->GetAura(SPELL_SANITY); if (!sanityAura) - { return false; - } int sanityAuraStacks = sanityAura->GetStackAmount(); Creature* sanityWell = bot->FindNearestCreature(NPC_SANITY_WELL, 200.0f); if (!sanityWell) - { return false; - } float distanceToSanityWell = bot->GetDistance(sanityWell); @@ -1989,20 +1955,14 @@ bool YoggSaronMaladyOfTheMindTrigger::IsActive() bool YoggSaronMarkTargetTrigger::IsActive() { if (!IsYoggSaronFight()) - { return false; - } if (!botAI->IsBotMainTank(bot)) - { return false; - } Group* group = bot->GetGroup(); if (!group) - { return false; - } if (IsPhase2()) { @@ -2020,9 +1980,7 @@ bool YoggSaronMarkTargetTrigger::IsActive() { nextPossibleTarget = bot->FindNearestCreature(NPC_CORRUPTOR_TENTACLE, 200.0f, true); if (!nextPossibleTarget) - { return false; - } } if (currentSkullTarget) @@ -2030,14 +1988,10 @@ bool YoggSaronMarkTargetTrigger::IsActive() Unit* currentSkullUnit = botAI->GetUnit(currentSkullTarget); if (!currentSkullUnit) - { return true; - } if (currentSkullUnit->IsAlive() && currentSkullUnit->GetGUID() == nextPossibleTarget->GetGUID()) - { return false; - } } return true; @@ -2047,9 +2001,7 @@ bool YoggSaronMarkTargetTrigger::IsActive() ObjectGuid currentSkullTarget = group->GetTargetIcon(RtiTargetValue::skullIndex); Unit* currentSkullUnit = nullptr; if (currentSkullTarget) - { currentSkullUnit = botAI->GetUnit(currentSkullTarget); - } if (currentSkullUnit && (currentSkullUnit->GetEntry() == NPC_IMMORTAL_GUARDIAN || @@ -2064,21 +2016,15 @@ bool YoggSaronMarkTargetTrigger::IsActive() { Unit* unit = botAI->GetUnit(guid); if (!unit || !unit->IsAlive()) - { continue; - } if ((unit->GetEntry() == NPC_IMMORTAL_GUARDIAN || unit->GetEntry() == NPC_MARKED_IMMORTAL_GUARDIAN) && unit->GetHealthPct() > 10) - { return true; - } } if (!currentSkullUnit || currentSkullUnit->GetEntry() != NPC_YOGG_SARON) - { return true; - } return false; } @@ -2096,61 +2042,41 @@ bool YoggSaronBrainLinkTrigger::IsActive() bool YoggSaronMoveToEnterPortalTrigger::IsActive() { if (!IsPhase2()) - { return false; - } Creature* portal = bot->FindNearestCreature(NPC_DESCEND_INTO_MADNESS, 100.0f, true); if (!portal) - { return false; - } if (bot->GetDistance2d(portal->GetPositionX(), portal->GetPositionY()) < 2.0f) - { return false; - } if (AI_VALUE(std::string, "rti") != "skull") - { return false; - } Group* group = bot->GetGroup(); if (!group) - { return false; - } int brainRoomTeamCount = 10; if (bot->GetRaidDifficulty() == Difficulty::RAID_DIFFICULTY_10MAN_NORMAL) - { brainRoomTeamCount = 4; - } if (IsMasterIsInIllusionGroup()) - { brainRoomTeamCount--; - } for (GroupReference* gref = group->GetFirstMember(); gref; gref = gref->next()) { Player* member = gref->GetSource(); if (!member || !member->IsAlive() || botAI->IsTank(member)) - { continue; - } if (member->GetGUID() == bot->GetGUID()) - { return true; - } brainRoomTeamCount--; if (brainRoomTeamCount == 0) - { break; - } } return false; @@ -2159,20 +2085,15 @@ bool YoggSaronMoveToEnterPortalTrigger::IsActive() bool YoggSaronFallFromFloorTrigger::IsActive() { if (!IsYoggSaronFight()) - { return false; - } std::string rtiMark = AI_VALUE(std::string, "rti"); if (rtiMark == "skull" && bot->GetPositionZ() < ULDUAR_YOGG_SARON_BOSS_ROOM_AXIS_Z_PATHING_ISSUE_DETECT) - { return true; - } + if ((rtiMark == "cross" || rtiMark == "circle" || rtiMark == "star") && bot->GetPositionZ() < ULDUAR_YOGG_SARON_BRAIN_ROOM_AXIS_Z_PATHING_ISSUE_DETECT) - { return true; - } return false; } @@ -2180,44 +2101,31 @@ bool YoggSaronFallFromFloorTrigger::IsActive() bool YoggSaronBossRoomMovementCheatTrigger::IsActive() { if (!IsYoggSaronFight() || !IsPhase2()) - { return false; - } FollowMasterStrategy followMasterStrategy(botAI); if (botAI->HasStrategy(followMasterStrategy.getName(), BotState::BOT_STATE_NON_COMBAT)) - { return true; - } if (!botAI->HasCheat(BotCheatMask::raid)) - { return false; - } if (AI_VALUE(std::string, "rti") != "skull") - { return false; - } Group* group = bot->GetGroup(); if (!group) - { return false; - } + ObjectGuid currentSkullTarget = group->GetTargetIcon(RtiTargetValue::skullIndex); if (!currentSkullTarget) - { return false; - } Unit* currentSkullUnit = botAI->GetUnit(currentSkullTarget); if (!currentSkullUnit || !currentSkullUnit->IsAlive() || bot->GetDistance2d(currentSkullUnit->GetPositionX(), currentSkullUnit->GetPositionY()) < 40.0f) - { return false; - } return true; } @@ -2225,14 +2133,10 @@ bool YoggSaronBossRoomMovementCheatTrigger::IsActive() bool YoggSaronUsePortalTrigger::IsActive() { if (!IsPhase2()) - { return false; - } if (AI_VALUE(std::string, "rti") != "diamond") - { return false; - } return bot->FindNearestCreature(NPC_DESCEND_INTO_MADNESS, 2.0f, true) != nullptr; } @@ -2240,24 +2144,16 @@ bool YoggSaronUsePortalTrigger::IsActive() bool YoggSaronIllusionRoomTrigger::IsActive() { if (!IsYoggSaronFight() || !IsInIllusionRoom() || AI_VALUE(std::string, "rti") == "square") - { return false; - } if (SetRtiMarkRequired()) - { return true; - } if (SetRtiTargetRequired()) - { return true; - } if (GoToBrainRoomRequired()) - { return true; - } return false; } @@ -2265,9 +2161,7 @@ bool YoggSaronIllusionRoomTrigger::IsActive() bool YoggSaronIllusionRoomTrigger::GoToBrainRoomRequired() { if (AI_VALUE(std::string, "rti") == "square") - { return false; - } return IsMasterIsInBrainRoom(); } @@ -2281,9 +2175,7 @@ bool YoggSaronIllusionRoomTrigger::SetRtiTargetRequired() { Unit const* currentRtiTarget = GetIllusionRoomRtiTarget(); if (currentRtiTarget != nullptr) - { return false; - } return GetNextIllusionRoomRtiTarget() != nullptr; } @@ -2291,15 +2183,11 @@ bool YoggSaronIllusionRoomTrigger::SetRtiTargetRequired() bool YoggSaronMoveToExitPortalTrigger::IsActive() { if (!IsYoggSaronFight() || !IsInBrainLevel()) - { return false; - } Creature const* brain = bot->FindNearestCreature(NPC_BRAIN, 60.0f, true); if (!brain || !brain->IsAlive()) - { return false; - } if (brain->HasUnitState(UNIT_STATE_CASTING)) { @@ -2316,9 +2204,7 @@ bool YoggSaronMoveToExitPortalTrigger::IsActive() } } else if (brain->GetHealth() < brain->GetMaxHealth() * 0.3f) - { return true; - } return false; } @@ -2331,9 +2217,7 @@ bool YoggSaronLunaticGazeTrigger::IsActive() { Spell* currentSpell = yoggsaron->GetCurrentSpell(CURRENT_CHANNELED_SPELL); if (currentSpell && currentSpell->m_spellInfo->Id == SPELL_LUNATIC_GAZE_YS) - { return true; - } } return false; @@ -2342,15 +2226,11 @@ bool YoggSaronLunaticGazeTrigger::IsActive() bool YoggSaronPhase3PositioningTrigger::IsActive() { if (!IsYoggSaronFight() || !IsPhase3()) - { return false; - } YoggSaronSanityTrigger sanityTrigger(botAI); if (sanityTrigger.IsActive()) - { return false; - } if (botAI->IsRanged(bot) && bot->GetDistance2d(ULDUAR_YOGG_SARON_PHASE_3_RANGED_SPOT.GetPositionX(), ULDUAR_YOGG_SARON_PHASE_3_RANGED_SPOT.GetPositionY()) > 15.0f) @@ -2368,9 +2248,7 @@ bool YoggSaronPhase3PositioningTrigger::IsActive() if (botAI->IsTank(bot)) { if (bot->GetDistance(ULDUAR_YOGG_SARON_PHASE_3_MELEE_SPOT) > 30.0f) - { return true; - } GuidVector targets = AI_VALUE(GuidVector, "nearest npcs"); bool thereIsAnyGuardian = false; @@ -2379,9 +2257,7 @@ bool YoggSaronPhase3PositioningTrigger::IsActive() { Unit* unit = botAI->GetUnit(guid); if (!unit || !unit->IsAlive()) - { continue; - } if (unit->GetEntry() == NPC_IMMORTAL_GUARDIAN || unit->GetEntry() == NPC_MARKED_IMMORTAL_GUARDIAN) { @@ -2389,9 +2265,7 @@ bool YoggSaronPhase3PositioningTrigger::IsActive() ObjectGuid unitTargetGuid = unit->GetTarget(); Player* targetedPlayer = botAI->GetPlayer(unitTargetGuid); if (!targetedPlayer || !botAI->IsTank(targetedPlayer)) - { return false; - } } } diff --git a/src/Ai/Raid/VaultOfArchavon/Action/RaidVoAActions.cpp b/src/Ai/Raid/VaultOfArchavon/Action/RaidVoAActions.cpp index 05d6328e5..892ddf3eb 100644 --- a/src/Ai/Raid/VaultOfArchavon/Action/RaidVoAActions.cpp +++ b/src/Ai/Raid/VaultOfArchavon/Action/RaidVoAActions.cpp @@ -10,7 +10,7 @@ const Position VOA_EMALON_RESTORE_POSITION = Position(-221.8f, -243.8f, 96.8f, 4.7f); -bool EmalonMarkBossAction::Execute(Event event) +bool EmalonMarkBossAction::Execute(Event /*event*/) { Unit* boss = AI_VALUE2(Unit*, "find target", "emalon the storm watcher"); if (!boss || !boss->IsAlive()) @@ -72,7 +72,7 @@ bool EmalonMarkBossAction::isUseful() return emalonMarkBossTrigger.IsActive(); } -bool EmalonLightingNovaAction::Execute(Event event) +bool EmalonLightingNovaAction::Execute(Event /*event*/) { const float radius = 25.0f; // 20 yards + 5 yard for safety for 10 man. For 25man there is no maximum range but 25 yards should be ok @@ -96,7 +96,7 @@ bool EmalonLightingNovaAction::isUseful() return emalonLightingNovaTrigger.IsActive(); } -bool EmalonOverchargeAction::Execute(Event event) +bool EmalonOverchargeAction::Execute(Event /*event*/) { // Check if there is any overcharged minion Unit* minion = nullptr; @@ -173,7 +173,7 @@ bool EmalonOverchargeAction::isUseful() return emalonOverchargeTrigger.IsActive(); } -bool EmalonFallFromFloorAction::Execute(Event event) +bool EmalonFallFromFloorAction::Execute(Event /*event*/) { return bot->TeleportTo(bot->GetMapId(), VOA_EMALON_RESTORE_POSITION.GetPositionX(), VOA_EMALON_RESTORE_POSITION.GetPositionY(), VOA_EMALON_RESTORE_POSITION.GetPositionZ(), diff --git a/src/Ai/World/Rpg/Action/NewRpgAction.cpp b/src/Ai/World/Rpg/Action/NewRpgAction.cpp index 41fec2291..6ccb84548 100644 --- a/src/Ai/World/Rpg/Action/NewRpgAction.cpp +++ b/src/Ai/World/Rpg/Action/NewRpgAction.cpp @@ -1,12 +1,10 @@ #include "NewRpgAction.h" #include -#include #include #include "BroadcastHelper.h" #include "ChatHelper.h" -#include "DBCStores.h" #include "G3D/Vector2.h" #include "GossipDef.h" #include "IVMapMgr.h" @@ -20,16 +18,11 @@ #include "PathGenerator.h" #include "Player.h" #include "PlayerbotAI.h" -#include "Playerbots.h" -#include "Position.h" #include "QuestDef.h" #include "Random.h" -#include "RandomPlayerbotMgr.h" #include "SharedDefines.h" -#include "StatsWeightCalculator.h" #include "Timer.h" #include "TravelMgr.h" -#include "World.h" bool TellRpgStatusAction::Execute(Event event) { @@ -61,20 +54,21 @@ bool StartRpgDoQuestAction::Execute(Event event) return false; } -bool NewRpgStatusUpdateAction::Execute(Event event) +bool NewRpgStatusUpdateAction::Execute(Event /*event*/) { NewRpgInfo& info = botAI->rpgInfo; - switch (info.status) + NewRpgStatus status = info.GetStatus(); + switch (status) { case RPG_IDLE: - { return RandomChangeStatus({RPG_GO_CAMP, RPG_GO_GRIND, RPG_WANDER_RANDOM, RPG_WANDER_NPC, RPG_DO_QUEST, RPG_TRAVEL_FLIGHT, RPG_REST}); - } + case RPG_GO_GRIND: { - WorldPosition& originalPos = info.go_grind.pos; - assert(info.go_grind.pos != WorldPosition()); + auto& data = std::get(info.data); + WorldPosition& originalPos = data.pos; + assert(data.pos != WorldPosition()); // GO_GRIND -> WANDER_RANDOM if (bot->GetExactDist(originalPos) < 10.0f) { @@ -85,8 +79,9 @@ bool NewRpgStatusUpdateAction::Execute(Event event) } case RPG_GO_CAMP: { - WorldPosition& originalPos = info.go_camp.pos; - assert(info.go_camp.pos != WorldPosition()); + auto& data = std::get(info.data); + WorldPosition& originalPos = data.pos; + assert(data.pos != WorldPosition()); // GO_CAMP -> WANDER_NPC if (bot->GetExactDist(originalPos) < 10.0f) { @@ -126,7 +121,8 @@ bool NewRpgStatusUpdateAction::Execute(Event event) } case RPG_TRAVEL_FLIGHT: { - if (info.flight.inFlight && !bot->IsInFlight()) + auto& data = std::get(info.data); + if (data.inFlight && !bot->IsInFlight()) { // flight arrival info.ChangeToIdle(); @@ -150,23 +146,28 @@ bool NewRpgStatusUpdateAction::Execute(Event event) return false; } -bool NewRpgGoGrindAction::Execute(Event event) +bool NewRpgGoGrindAction::Execute(Event /*event*/) +{ + if (SearchQuestGiverAndAcceptOrReward()) + return true; + if (auto* data = std::get_if(&botAI->rpgInfo.data)) + return MoveFarTo(data->pos); + + return false; +} + +bool NewRpgGoCampAction::Execute(Event /*event*/) { if (SearchQuestGiverAndAcceptOrReward()) return true; - return MoveFarTo(botAI->rpgInfo.go_grind.pos); + if (auto* data = std::get_if(&botAI->rpgInfo.data)) + return MoveFarTo(data->pos); + + return false; } -bool NewRpgGoCampAction::Execute(Event event) -{ - if (SearchQuestGiverAndAcceptOrReward()) - return true; - - return MoveFarTo(botAI->rpgInfo.go_camp.pos); -} - -bool NewRpgWanderRandomAction::Execute(Event event) +bool NewRpgWanderRandomAction::Execute(Event /*event*/) { if (SearchQuestGiverAndAcceptOrReward()) return true; @@ -174,10 +175,14 @@ bool NewRpgWanderRandomAction::Execute(Event event) return MoveRandomNear(); } -bool NewRpgWanderNpcAction::Execute(Event event) +bool NewRpgWanderNpcAction::Execute(Event /*event*/) { NewRpgInfo& info = botAI->rpgInfo; - if (!info.wander_npc.npcOrGo) + auto* dataPtr = std::get_if(&info.data); + if (!dataPtr) + return false; + auto& data = *dataPtr; + if (!data.npcOrGo) { // No npc can be found, switch to IDLE ObjectGuid npcOrGo = ChooseNpcOrGameObjectToInteract(); @@ -186,65 +191,68 @@ bool NewRpgWanderNpcAction::Execute(Event event) info.ChangeToIdle(); return true; } - info.wander_npc.npcOrGo = npcOrGo; - info.wander_npc.lastReach = 0; + data.npcOrGo = npcOrGo; + data.lastReach = 0; return true; } - WorldObject* object = ObjectAccessor::GetWorldObject(*bot, info.wander_npc.npcOrGo); + WorldObject* object = ObjectAccessor::GetWorldObject(*bot, data.npcOrGo); if (object && IsWithinInteractionDist(object)) { - if (!info.wander_npc.lastReach) + if (!data.lastReach) { - info.wander_npc.lastReach = getMSTime(); + data.lastReach = getMSTime(); if (bot->CanInteractWithQuestGiver(object)) - InteractWithNpcOrGameObjectForQuest(info.wander_npc.npcOrGo); + InteractWithNpcOrGameObjectForQuest(data.npcOrGo); return true; } - if (info.wander_npc.lastReach && GetMSTimeDiffToNow(info.wander_npc.lastReach) < npcStayTime) + if (data.lastReach && GetMSTimeDiffToNow(data.lastReach) < npcStayTime) return false; // has reached the npc for more than `npcStayTime`, select the next target - info.wander_npc.npcOrGo = ObjectGuid(); - info.wander_npc.lastReach = 0; + data.npcOrGo = ObjectGuid(); + data.lastReach = 0; } else - { - return MoveWorldObjectTo(info.wander_npc.npcOrGo); - } + return MoveWorldObjectTo(data.npcOrGo); + return true; } -bool NewRpgDoQuestAction::Execute(Event event) +bool NewRpgDoQuestAction::Execute(Event /*event*/) { if (SearchQuestGiverAndAcceptOrReward()) return true; NewRpgInfo& info = botAI->rpgInfo; - uint32 questId = RPG_INFO(quest, questId); - const Quest* quest = RPG_INFO(quest, quest); + auto* dataPtr = std::get_if(&info.data); + if (!dataPtr) + return false; + auto& data = *dataPtr; + uint32 questId = data.questId; + const Quest* quest = data.quest; uint8 questStatus = bot->GetQuestStatus(questId); switch (questStatus) { case QUEST_STATUS_INCOMPLETE: - return DoIncompleteQuest(); + return DoIncompleteQuest(data); case QUEST_STATUS_COMPLETE: - return DoCompletedQuest(); + return DoCompletedQuest(data); default: break; } - botAI->rpgInfo.ChangeToIdle(); + info.ChangeToIdle(); return true; } -bool NewRpgDoQuestAction::DoIncompleteQuest() +bool NewRpgDoQuestAction::DoIncompleteQuest(NewRpgInfo::DoQuest& data) { - uint32 questId = RPG_INFO(do_quest, questId); - if (botAI->rpgInfo.do_quest.pos != WorldPosition()) + uint32 questId = data.questId; + if (data.pos != WorldPosition()) { /// @TODO: extract to a new function - int32 currentObjective = botAI->rpgInfo.do_quest.objectiveIdx; + int32 currentObjective = data.objectiveIdx; // check if the objective has completed Quest const* quest = sObjectMgr->GetQuestTemplate(questId); const QuestStatusData& q_status = bot->getQuestStatusMap().at(questId); @@ -263,12 +271,12 @@ bool NewRpgDoQuestAction::DoIncompleteQuest() // the current objective is completed, clear and find a new objective later if (completed) { - botAI->rpgInfo.do_quest.lastReachPOI = 0; - botAI->rpgInfo.do_quest.pos = WorldPosition(); - botAI->rpgInfo.do_quest.objectiveIdx = 0; + data.lastReachPOI = 0; + data.pos = WorldPosition(); + data.objectiveIdx = 0; } } - if (botAI->rpgInfo.do_quest.pos == WorldPosition()) + if (data.pos == WorldPosition()) { std::vector poiInfo; if (!GetQuestPOIPosAndObjectiveIdx(questId, poiInfo)) @@ -291,28 +299,28 @@ bool NewRpgDoQuestAction::DoIncompleteQuest() return false; WorldPosition pos(bot->GetMapId(), dx, dy, dz); - botAI->rpgInfo.do_quest.lastReachPOI = 0; - botAI->rpgInfo.do_quest.pos = pos; - botAI->rpgInfo.do_quest.objectiveIdx = objectiveIdx; + data.lastReachPOI = 0; + data.pos = pos; + data.objectiveIdx = objectiveIdx; } - if (bot->GetDistance(botAI->rpgInfo.do_quest.pos) > 10.0f && !botAI->rpgInfo.do_quest.lastReachPOI) + if (bot->GetDistance(data.pos) > 10.0f && !data.lastReachPOI) { - return MoveFarTo(botAI->rpgInfo.do_quest.pos); + return MoveFarTo(data.pos); } // Now we are near the quest objective // kill mobs and looting quest should be done automatically by grind strategy - if (!botAI->rpgInfo.do_quest.lastReachPOI) + if (!data.lastReachPOI) { - botAI->rpgInfo.do_quest.lastReachPOI = getMSTime(); + data.lastReachPOI = getMSTime(); return true; } // stayed at this POI for more than 5 minutes - if (GetMSTimeDiffToNow(botAI->rpgInfo.do_quest.lastReachPOI) >= poiStayTime) + if (GetMSTimeDiffToNow(data.lastReachPOI) >= poiStayTime) { bool hasProgression = false; - int32 currentObjective = botAI->rpgInfo.do_quest.objectiveIdx; + int32 currentObjective = data.objectiveIdx; // check if the objective has progression Quest const* quest = sObjectMgr->GetQuestTemplate(questId); const QuestStatusData& q_status = bot->getQuestStatusMap().at(questId); @@ -339,21 +347,21 @@ bool NewRpgDoQuestAction::DoIncompleteQuest() return true; } // clear and select another poi later - botAI->rpgInfo.do_quest.lastReachPOI = 0; - botAI->rpgInfo.do_quest.pos = WorldPosition(); - botAI->rpgInfo.do_quest.objectiveIdx = 0; + data.lastReachPOI = 0; + data.pos = WorldPosition(); + data.objectiveIdx = 0; return true; } return MoveRandomNear(20.0f); } -bool NewRpgDoQuestAction::DoCompletedQuest() +bool NewRpgDoQuestAction::DoCompletedQuest(NewRpgInfo::DoQuest& data) { - uint32 questId = RPG_INFO(quest, questId); - const Quest* quest = RPG_INFO(quest, quest); + uint32 questId = data.questId; + const Quest* quest = data.quest; - if (RPG_INFO(quest, objectiveIdx) != -1) + if (data.objectiveIdx != -1) { // if quest is completed, back to poi with -1 idx to reward BroadcastHelper::BroadcastQuestUpdateComplete(botAI, bot, quest); @@ -376,26 +384,26 @@ bool NewRpgDoQuestAction::DoCompletedQuest() return false; WorldPosition pos(bot->GetMapId(), dx, dy, dz); - botAI->rpgInfo.do_quest.lastReachPOI = 0; - botAI->rpgInfo.do_quest.pos = pos; - botAI->rpgInfo.do_quest.objectiveIdx = -1; + data.lastReachPOI = 0; + data.pos = pos; + data.objectiveIdx = -1; } - if (botAI->rpgInfo.do_quest.pos == WorldPosition()) + if (data.pos == WorldPosition()) return false; - if (bot->GetDistance(botAI->rpgInfo.do_quest.pos) > 10.0f && !botAI->rpgInfo.do_quest.lastReachPOI) - return MoveFarTo(botAI->rpgInfo.do_quest.pos); + if (bot->GetDistance(data.pos) > 10.0f && !data.lastReachPOI) + return MoveFarTo(data.pos); // Now we are near the qoi of reward // the quest should be rewarded by SearchQuestGiverAndAcceptOrReward - if (!botAI->rpgInfo.do_quest.lastReachPOI) + if (!data.lastReachPOI) { - botAI->rpgInfo.do_quest.lastReachPOI = getMSTime(); + data.lastReachPOI = getMSTime(); return true; } // stayed at this POI for more than 5 minutes - if (GetMSTimeDiffToNow(botAI->rpgInfo.do_quest.lastReachPOI) >= poiStayTime) + if (GetMSTimeDiffToNow(data.lastReachPOI) >= poiStayTime) { // e.g. Can not reward quest to gameobjects /// @TODO: It may be better to make lowPriorityQuest a global set shared by all bots (or saved in db) @@ -408,31 +416,35 @@ bool NewRpgDoQuestAction::DoCompletedQuest() return false; } -bool NewRpgTravelFlightAction::Execute(Event event) +bool NewRpgTravelFlightAction::Execute(Event /*event*/) { + NewRpgInfo& info = botAI->rpgInfo; + auto* dataPtr = std::get_if(&info.data); + if (!dataPtr) + return false; + + auto& data = *dataPtr; if (bot->IsInFlight()) { - botAI->rpgInfo.flight.inFlight = true; + data.inFlight = true; return false; } - Creature* flightMaster = ObjectAccessor::GetCreature(*bot, botAI->rpgInfo.flight.fromFlightMaster); + Creature* flightMaster = ObjectAccessor::GetCreature(*bot, data.fromFlightMaster); if (!flightMaster || !flightMaster->IsAlive()) { botAI->rpgInfo.ChangeToIdle(); return true; } - const TaxiNodesEntry* entry = sTaxiNodesStore.LookupEntry(botAI->rpgInfo.flight.toNode); + const TaxiNodesEntry* entry = sTaxiNodesStore.LookupEntry(data.toNode); if (bot->GetDistance(flightMaster) > INTERACTION_DISTANCE) - { return MoveFarTo(flightMaster); - } - std::vector nodes = {botAI->rpgInfo.flight.fromNode, botAI->rpgInfo.flight.toNode}; + + std::vector nodes = {data.fromNode, data.toNode}; botAI->RemoveShapeshift(); if (bot->IsMounted()) - { bot->Dismount(); - } + if (!bot->ActivateTaxiPathTo(nodes, flightMaster, 0)) { LOG_DEBUG("playerbots", "[New RPG] {} active taxi path {} (from {} to {}) failed", bot->GetName(), diff --git a/src/Ai/World/Rpg/Action/NewRpgAction.h b/src/Ai/World/Rpg/Action/NewRpgAction.h index 0e621fc40..a8cb7a2bc 100644 --- a/src/Ai/World/Rpg/Action/NewRpgAction.h +++ b/src/Ai/World/Rpg/Action/NewRpgAction.h @@ -90,8 +90,8 @@ public: bool Execute(Event event) override; protected: - bool DoIncompleteQuest(); - bool DoCompletedQuest(); + bool DoIncompleteQuest(NewRpgInfo::DoQuest& data); + bool DoCompletedQuest(NewRpgInfo::DoQuest& data); const uint32 poiStayTime = 5 * 60 * 1000; }; diff --git a/src/Ai/World/Rpg/Action/NewRpgBaseAction.cpp b/src/Ai/World/Rpg/Action/NewRpgBaseAction.cpp index 0204a2133..bd27bece5 100644 --- a/src/Ai/World/Rpg/Action/NewRpgBaseAction.cpp +++ b/src/Ai/World/Rpg/Action/NewRpgBaseAction.cpp @@ -66,7 +66,7 @@ bool NewRpgBaseAction::MoveFarTo(WorldPosition dest) "playerbots", "[New RPG] Teleport {} from ({},{},{},{}) to ({},{},{},{}) as it stuck when moving far - Zone: {} ({})", bot->GetName(), bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ(), bot->GetMapId(), - dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), dest.getMapId(), bot->GetZoneId(), + dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), dest.GetMapId(), bot->GetZoneId(), zone_name); bot->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TELEPORTED | AURA_INTERRUPT_FLAG_CHANGE_MAP); return bot->TeleportTo(dest); @@ -75,7 +75,7 @@ bool NewRpgBaseAction::MoveFarTo(WorldPosition dest) float dis = bot->GetExactDist(dest); if (dis < pathFinderDis) { - return MoveTo(dest.getMapId(), dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), false, false, + return MoveTo(dest.GetMapId(), dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), false, false, false, true); } diff --git a/src/Ai/World/Rpg/NewRpgInfo.cpp b/src/Ai/World/Rpg/NewRpgInfo.cpp index 889fb1ff9..def0d472d 100644 --- a/src/Ai/World/Rpg/NewRpgInfo.cpp +++ b/src/Ai/World/Rpg/NewRpgInfo.cpp @@ -6,71 +6,65 @@ void NewRpgInfo::ChangeToGoGrind(WorldPosition pos) { - Reset(); - status = RPG_GO_GRIND; - go_grind = GoGrind(); - go_grind.pos = pos; + startT = getMSTime(); + data = GoGrind{pos}; } void NewRpgInfo::ChangeToGoCamp(WorldPosition pos) { - Reset(); - status = RPG_GO_CAMP; - go_camp = GoCamp(); - go_camp.pos = pos; + startT = getMSTime(); + data = GoCamp{pos}; } void NewRpgInfo::ChangeToWanderNpc() { - Reset(); - status = RPG_WANDER_NPC; - wander_npc = WanderNpc(); + startT = getMSTime(); + data = WanderNpc{}; } void NewRpgInfo::ChangeToWanderRandom() { - Reset(); - status = RPG_WANDER_RANDOM; - WANDER_RANDOM = WanderRandom(); + startT = getMSTime(); + data = WanderRandom{}; } void NewRpgInfo::ChangeToDoQuest(uint32 questId, const Quest* quest) { - Reset(); - status = RPG_DO_QUEST; - do_quest = DoQuest(); + startT = getMSTime(); + DoQuest do_quest; do_quest.questId = questId; do_quest.quest = quest; + data = do_quest; } void NewRpgInfo::ChangeToTravelFlight(ObjectGuid fromFlightMaster, uint32 fromNode, uint32 toNode) { - Reset(); - status = RPG_TRAVEL_FLIGHT; - flight = TravelFlight(); + startT = getMSTime(); + TravelFlight flight; flight.fromFlightMaster = fromFlightMaster; flight.fromNode = fromNode; flight.toNode = toNode; + flight.inFlight = false; + data = flight; } void NewRpgInfo::ChangeToRest() { - Reset(); - status = RPG_REST; - rest = Rest(); + startT = getMSTime(); + data = Rest{}; } void NewRpgInfo::ChangeToIdle() { - Reset(); - status = RPG_IDLE; + startT = getMSTime(); + data = Idle{}; } bool NewRpgInfo::CanChangeTo(NewRpgStatus status) { return true; } void NewRpgInfo::Reset() { - *this = NewRpgInfo(); + data = Idle{}; startT = getMSTime(); } @@ -82,58 +76,83 @@ void NewRpgInfo::SetMoveFarTo(WorldPosition pos) moveFarPos = pos; } +NewRpgStatus NewRpgInfo::GetStatus() +{ + return std::visit([](auto&& arg) -> NewRpgStatus { + using T = std::decay_t; + if constexpr (std::is_same_v) return RPG_IDLE; + if constexpr (std::is_same_v) return RPG_GO_GRIND; + if constexpr (std::is_same_v) return RPG_GO_CAMP; + if constexpr (std::is_same_v) return RPG_WANDER_NPC; + if constexpr (std::is_same_v) return RPG_WANDER_RANDOM; + if constexpr (std::is_same_v) return RPG_REST; + if constexpr (std::is_same_v) return RPG_DO_QUEST; + if constexpr (std::is_same_v) return RPG_TRAVEL_FLIGHT; + return RPG_IDLE; + }, data); +} + std::string NewRpgInfo::ToString() { std::stringstream out; out << "Status: "; - switch (status) + std::visit([&out, this](auto&& arg) { - case RPG_GO_GRIND: + using T = std::decay_t; + if constexpr (std::is_same_v) + { out << "GO_GRIND"; - out << "\nGrindPos: " << go_grind.pos.GetMapId() << " " << go_grind.pos.GetPositionX() << " " - << go_grind.pos.GetPositionY() << " " << go_grind.pos.GetPositionZ(); + out << "\nGrindPos: " << arg.pos.GetMapId() << " " << arg.pos.GetPositionX() << " " + << arg.pos.GetPositionY() << " " << arg.pos.GetPositionZ(); out << "\nlastGoGrind: " << startT; - break; - case RPG_GO_CAMP: + } + else if constexpr (std::is_same_v) + { out << "GO_CAMP"; - out << "\nCampPos: " << go_camp.pos.GetMapId() << " " << go_camp.pos.GetPositionX() << " " - << go_camp.pos.GetPositionY() << " " << go_camp.pos.GetPositionZ(); + out << "\nCampPos: " << arg.pos.GetMapId() << " " << arg.pos.GetPositionX() << " " + << arg.pos.GetPositionY() << " " << arg.pos.GetPositionZ(); out << "\nlastGoCamp: " << startT; - break; - case RPG_WANDER_NPC: + } + else if constexpr (std::is_same_v) + { out << "WANDER_NPC"; - out << "\nnpcOrGoEntry: " << wander_npc.npcOrGo.GetCounter(); + out << "\nnpcOrGoEntry: " << arg.npcOrGo.GetCounter(); out << "\nlastWanderNpc: " << startT; - out << "\nlastReachNpcOrGo: " << wander_npc.lastReach; - break; - case RPG_WANDER_RANDOM: + out << "\nlastReachNpcOrGo: " << arg.lastReach; + } + else if constexpr (std::is_same_v) + { out << "WANDER_RANDOM"; out << "\nlastWanderRandom: " << startT; - break; - case RPG_IDLE: + } + else if constexpr (std::is_same_v) + { out << "IDLE"; - break; - case RPG_REST: + } + else if constexpr (std::is_same_v) + { out << "REST"; out << "\nlastRest: " << startT; - break; - case RPG_DO_QUEST: + } + else if constexpr (std::is_same_v) + { out << "DO_QUEST"; - out << "\nquestId: " << do_quest.questId; - out << "\nobjectiveIdx: " << do_quest.objectiveIdx; - out << "\npoiPos: " << do_quest.pos.GetMapId() << " " << do_quest.pos.GetPositionX() << " " - << do_quest.pos.GetPositionY() << " " << do_quest.pos.GetPositionZ(); - out << "\nlastReachPOI: " << do_quest.lastReachPOI ? GetMSTimeDiffToNow(do_quest.lastReachPOI) : 0; - break; - case RPG_TRAVEL_FLIGHT: + out << "\nquestId: " << arg.questId; + out << "\nobjectiveIdx: " << arg.objectiveIdx; + out << "\npoiPos: " << arg.pos.GetMapId() << " " << arg.pos.GetPositionX() << " " + << arg.pos.GetPositionY() << " " << arg.pos.GetPositionZ(); + out << "\nlastReachPOI: " << (arg.lastReachPOI ? GetMSTimeDiffToNow(arg.lastReachPOI) : 0); + } + else if constexpr (std::is_same_v) + { out << "TRAVEL_FLIGHT"; - out << "\nfromFlightMaster: " << flight.fromFlightMaster.GetEntry(); - out << "\nfromNode: " << flight.fromNode; - out << "\ntoNode: " << flight.toNode; - out << "\ninFlight: " << flight.inFlight; - break; - default: + out << "\nfromFlightMaster: " << arg.fromFlightMaster.GetEntry(); + out << "\nfromNode: " << arg.fromNode; + out << "\ntoNode: " << arg.toNode; + out << "\ninFlight: " << arg.inFlight; + } + else out << "UNKNOWN"; - } + }, data); return out.str(); } diff --git a/src/Ai/World/Rpg/NewRpgInfo.h b/src/Ai/World/Rpg/NewRpgInfo.h index 20f801bf7..5b6ae3cb9 100644 --- a/src/Ai/World/Rpg/NewRpgInfo.h +++ b/src/Ai/World/Rpg/NewRpgInfo.h @@ -13,7 +13,8 @@ using NewRpgStatusTransitionProb = std::vector>; struct NewRpgInfo { - NewRpgInfo() {} + NewRpgInfo() : data(Idle{}) {} + ~NewRpgInfo() = default; // RPG_GO_GRIND struct GoGrind @@ -61,7 +62,6 @@ struct NewRpgInfo struct Idle { }; - NewRpgStatus status{RPG_IDLE}; uint32 startT{0}; // start timestamp of the current status @@ -72,18 +72,19 @@ struct NewRpgInfo WorldPosition moveFarPos; // END MOVE_FAR - union - { - GoGrind go_grind; - GoCamp go_camp; - WanderNpc wander_npc; - WanderRandom WANDER_RANDOM; - DoQuest do_quest; - Rest rest; - DoQuest quest; - TravelFlight flight; - }; + using RpgData = std::variant< + Idle, + GoGrind, + GoCamp, + WanderNpc, + WanderRandom, + DoQuest, + Rest, + TravelFlight + >; + RpgData data; + NewRpgStatus GetStatus(); bool HasStatusPersisted(uint32 maxDuration) { return GetMSTimeDiffToNow(startT) > maxDuration; } void ChangeToGoGrind(WorldPosition pos); void ChangeToGoCamp(WorldPosition pos); @@ -127,7 +128,4 @@ struct NewRpgStatistic } }; -// not sure is it necessary but keep it for now -#define RPG_INFO(x, y) botAI->rpgInfo.x.y - #endif diff --git a/src/Ai/World/Rpg/Strategy/NewRpgStrategy.cpp b/src/Ai/World/Rpg/Strategy/NewRpgStrategy.cpp index 030ad6b4f..f0d0ce5a9 100644 --- a/src/Ai/World/Rpg/Strategy/NewRpgStrategy.cpp +++ b/src/Ai/World/Rpg/Strategy/NewRpgStrategy.cpp @@ -5,8 +5,6 @@ #include "NewRpgStrategy.h" -#include "Playerbots.h" - NewRpgStrategy::NewRpgStrategy(PlayerbotAI* botAI) : Strategy(botAI) {} std::vector NewRpgStrategy::getDefaultActions() @@ -69,7 +67,6 @@ void NewRpgStrategy::InitTriggers(std::vector& triggers) ); } -void NewRpgStrategy::InitMultipliers(std::vector& multipliers) +void NewRpgStrategy::InitMultipliers(std::vector&) { - } diff --git a/src/Ai/World/Rpg/Trigger/NewRpgTrigger.cpp b/src/Ai/World/Rpg/Trigger/NewRpgTrigger.cpp index 0804320ad..65e78eb4c 100644 --- a/src/Ai/World/Rpg/Trigger/NewRpgTrigger.cpp +++ b/src/Ai/World/Rpg/Trigger/NewRpgTrigger.cpp @@ -1,4 +1,4 @@ #include "NewRpgTriggers.h" #include "PlayerbotAI.h" -bool NewRpgStatusTrigger::IsActive() { return status == botAI->rpgInfo.status; } +bool NewRpgStatusTrigger::IsActive() { return status == botAI->rpgInfo.GetStatus(); } diff --git a/src/Bot/Cmd/PlayerbotCommandServer.cpp b/src/Bot/Cmd/PlayerbotCommandServer.cpp index 1532cc054..7f3de21a2 100644 --- a/src/Bot/Cmd/PlayerbotCommandServer.cpp +++ b/src/Bot/Cmd/PlayerbotCommandServer.cpp @@ -10,10 +10,9 @@ #include #include #include -#include +#include "RandomPlayerbotMgr.h" #include "IoContext.h" -#include "Playerbots.h" using boost::asio::ip::tcp; typedef boost::shared_ptr socket_ptr; @@ -48,7 +47,7 @@ void session(socket_ptr sock) std::string buffer, request; while (ReadLine(sock, &buffer, &request)) { - std::string const response = sRandomPlayerbotMgr.HandleRemoteCommand(request) + "\n"; + std::string const response = RandomPlayerbotMgr::instance().HandleRemoteCommand(request) + "\n"; boost::asio::write(*sock, boost::asio::buffer(response.c_str(), response.size())); request = ""; } diff --git a/src/Bot/Engine/Action/Action.h b/src/Bot/Engine/Action/Action.h index 2395c5ea8..084a40a55 100644 --- a/src/Bot/Engine/Action/Action.h +++ b/src/Bot/Engine/Action/Action.h @@ -6,7 +6,6 @@ #pragma once #include "AiObject.h" -#include "Common.h" #include "Event.h" #include "Value.h" @@ -60,8 +59,27 @@ public: virtual ~Action(void) {} virtual bool Execute([[maybe_unused]] Event event) { return true; } - virtual bool isPossible() { return true; } + + /** + * @brief First validation check - determines if this action is contextually useful + * + * Performs lightweight checks to evaluate whether the action makes sense + * in the current situation. Called before isPossible() during action selection. + * + * @return true if the action is useful, false otherwise + */ virtual bool isUseful() { return true; } + + /** + * @brief Second validation check - determines if this action can be executed + * + * Performs hard pre-execution validation against the event and game state. + * Called after isUseful() passes, before Execute(). + * + * @return true if the action is possible, false otherwise + */ + virtual bool isPossible() { return true; } + virtual std::vector getPrerequisites() { return {}; } virtual std::vector getAlternatives() { return {}; } virtual std::vector getContinuers() { return {}; } diff --git a/src/Bot/Engine/Engine.cpp b/src/Bot/Engine/Engine.cpp index bc24baf56..bb4f2eb35 100644 --- a/src/Bot/Engine/Engine.cpp +++ b/src/Bot/Engine/Engine.cpp @@ -323,18 +323,18 @@ ActionResult Engine::ExecuteAction(std::string const name, Event event, std::str q->Qualify(qualifier); } - if (!action->isPossible()) - { - delete actionNode; - return ACTION_RESULT_IMPOSSIBLE; - } - if (!action->isUseful()) { delete actionNode; return ACTION_RESULT_USELESS; } + if (!action->isPossible()) + { + delete actionNode; + return ACTION_RESULT_IMPOSSIBLE; + } + action->MakeVerbose(); result = ListenAndExecute(action, event); diff --git a/src/Bot/Engine/Strategy/CustomStrategy.cpp b/src/Bot/Engine/Strategy/CustomStrategy.cpp index d4dd3e514..65bf411d9 100644 --- a/src/Bot/Engine/Strategy/CustomStrategy.cpp +++ b/src/Bot/Engine/Strategy/CustomStrategy.cpp @@ -36,9 +36,7 @@ std::vector toNextActionArray(const std::string actions) std::vector res = {}; for (const std::string token : tokens) - { res.push_back(toNextAction(token)); - } return res; } diff --git a/src/Bot/Engine/Trigger/Trigger.cpp b/src/Bot/Engine/Trigger/Trigger.cpp index 07105be29..bfd8eeaed 100644 --- a/src/Bot/Engine/Trigger/Trigger.cpp +++ b/src/Bot/Engine/Trigger/Trigger.cpp @@ -5,9 +5,8 @@ #include "Trigger.h" +#include "AiObjectContext.h" #include "Event.h" -#include "Playerbots.h" -#include "Timer.h" Trigger::Trigger(PlayerbotAI* botAI, std::string const name, int32 checkInterval) : AiNamedObject(botAI, name), diff --git a/src/Bot/Engine/Trigger/Trigger.h b/src/Bot/Engine/Trigger/Trigger.h index d32845dc5..8878530f8 100644 --- a/src/Bot/Engine/Trigger/Trigger.h +++ b/src/Bot/Engine/Trigger/Trigger.h @@ -6,7 +6,6 @@ #pragma once #include "Action.h" -#include "Common.h" class PlayerbotAI; class Unit; diff --git a/src/Bot/Factory/AiFactory.h b/src/Bot/Factory/AiFactory.h index 3d11d80ae..b853bf670 100644 --- a/src/Bot/Factory/AiFactory.h +++ b/src/Bot/Factory/AiFactory.h @@ -7,7 +7,6 @@ #define _PLAYERBOT_AIFACTORY_H #include - #include "Common.h" class AiObjectContext; diff --git a/src/Bot/Factory/PlayerbotFactory.cpp b/src/Bot/Factory/PlayerbotFactory.cpp index ca1f4d180..f50260577 100644 --- a/src/Bot/Factory/PlayerbotFactory.cpp +++ b/src/Bot/Factory/PlayerbotFactory.cpp @@ -5,7 +5,6 @@ #include "PlayerbotFactory.h" -#include #include #include "AccountMgr.h" @@ -20,9 +19,7 @@ #include "ItemTemplate.h" #include "ItemVisitors.h" #include "Log.h" -#include "LogCommon.h" #include "LootMgr.h" -#include "MapMgr.h" #include "ObjectMgr.h" #include "PerfMonitor.h" #include "PetDefines.h" @@ -37,7 +34,6 @@ #include "RandomPlayerbotFactory.h" #include "ReputationMgr.h" #include "SharedDefines.h" -#include "SpellAuraDefines.h" #include "StatsWeightCalculator.h" #include "World.h" #include "AiObjectContext.h" @@ -241,19 +237,17 @@ void PlayerbotFactory::Randomize(bool incremental) Prepare(); LOG_DEBUG("playerbots", "Resetting player..."); PerfMonitorOperation* pmo = sPerfMonitor.start(PERF_MON_RNDBOT, "PlayerbotFactory_Reset"); - if (!sPlayerbotAIConfig.equipmentPersistence || level < sPlayerbotAIConfig.equipmentPersistenceLevel) - { + + if (!PlayerbotAIConfig::instance().equipmentPersistence || level < PlayerbotAIConfig::instance().equipmentPersistenceLevel) bot->resetTalents(true); - } + if (!incremental) { ClearSkills(); ClearSpells(); ResetQuests(); - if (!sPlayerbotAIConfig.equipmentPersistence || level < sPlayerbotAIConfig.equipmentPersistenceLevel) - { + if (!PlayerbotAIConfig::instance().equipmentPersistence || level < PlayerbotAIConfig::instance().equipmentPersistenceLevel) ClearAllItems(); - } } ClearInventory(); bot->RemoveAllSpellCooldown(); @@ -1787,9 +1781,8 @@ void PlayerbotFactory::InitEquipment(bool incremental, bool second_chance) int32 desiredQuality = itemQuality; if (urand(0, 100) < 100 * sPlayerbotAIConfig.randomGearLoweringChance && desiredQuality > ITEM_QUALITY_NORMAL) - { desiredQuality--; - } + do { for (uint32 requiredLevel = bot->GetLevel(); requiredLevel > std::max((int32)bot->GetLevel() - delta, 0); @@ -1973,14 +1966,12 @@ void PlayerbotFactory::InitEquipment(bool incremental, bool second_chance) } if (bestItemForSlot == 0) - { continue; - } + uint16 dest; if (!CanEquipUnseenItem(slot, dest, bestItemForSlot)) - { continue; - } + Item* newItem = bot->EquipNewItem(dest, bestItemForSlot, true); bot->AutoUnequipOffhandIfNeed(); // if (newItem) @@ -2143,21 +2134,18 @@ void PlayerbotFactory::InitBags(bool destroyOld) uint32 newItemId = 51809; Item* old_bag = bot->GetItemByPos(INVENTORY_SLOT_BAG_0, slot); if (old_bag && old_bag->GetTemplate()->ItemId == newItemId) - { continue; - } + uint16 dest; if (!CanEquipUnseenItem(slot, dest, newItemId)) continue; if (old_bag && destroyOld) - { bot->DestroyItem(INVENTORY_SLOT_BAG_0, slot, true); - } + if (old_bag) - { continue; - } + Item* newItem = bot->EquipNewItem(dest, newItemId, true); // if (newItem) // { diff --git a/src/Bot/Factory/RandomPlayerbotFactory.cpp b/src/Bot/Factory/RandomPlayerbotFactory.cpp index 0fd7e90e2..908bd3899 100644 --- a/src/Bot/Factory/RandomPlayerbotFactory.cpp +++ b/src/Bot/Factory/RandomPlayerbotFactory.cpp @@ -8,17 +8,12 @@ #include "AccountMgr.h" #include "ArenaTeamMgr.h" #include "DatabaseEnv.h" -#include "GuildMgr.h" -#include "PlayerbotFactory.h" -#include "Playerbots.h" -#include "PlayerbotGuildMgr.h" +#include "PlayerbotAI.h" #include "ScriptMgr.h" #include "SharedDefines.h" #include "SocialMgr.h" #include "Timer.h" -#include "Guild.h" // EmblemInfo::SaveToDB #include "Log.h" -#include "GuildMgr.h" constexpr RandomPlayerbotFactory::NameRaceAndGender RandomPlayerbotFactory::CombineRaceAndGender(uint8 race, uint8 gender) @@ -277,7 +272,7 @@ std::string const RandomPlayerbotFactory::CreateRandomBotName(NameRaceAndGender botName.clear(); continue; } - return std::move(botName); + return botName; } // TRUE RANDOM NAME GENERATION @@ -302,11 +297,11 @@ std::string const RandomPlayerbotFactory::CreateRandomBotName(NameRaceAndGender botName.clear(); continue; } - return std::move(botName); + return botName; } LOG_ERROR("playerbots", "Random name generation failed."); botName.clear(); - return std::move(botName); + return botName; } // Calculates the total number of required accounts, either using the specified randomBotAccountCount @@ -763,7 +758,7 @@ std::string const RandomPlayerbotFactory::CreateRandomGuildName() if (!result) { LOG_ERROR("playerbots", "No more names left for random guilds"); - return std::move(guildName); + return guildName; } Field* fields = result->Fetch(); @@ -777,13 +772,13 @@ std::string const RandomPlayerbotFactory::CreateRandomGuildName() if (!result) { LOG_ERROR("playerbots", "No more names left for random guilds"); - return std::move(guildName); + return guildName; } fields = result->Fetch(); guildName = fields[0].Get(); - return std::move(guildName); + return guildName; } void RandomPlayerbotFactory::CreateRandomArenaTeams(ArenaType type, uint32 count) @@ -905,7 +900,7 @@ std::string const RandomPlayerbotFactory::CreateRandomArenaTeamName() if (!result) { LOG_ERROR("playerbots", "No more names left for random arena teams"); - return std::move(arenaTeamName); + return arenaTeamName; } Field* fields = result->Fetch(); @@ -920,11 +915,11 @@ std::string const RandomPlayerbotFactory::CreateRandomArenaTeamName() if (!result) { LOG_ERROR("playerbots", "No more names left for random arena teams"); - return std::move(arenaTeamName); + return arenaTeamName; } fields = result->Fetch(); arenaTeamName = fields[0].Get(); - return std::move(arenaTeamName); + return arenaTeamName; } diff --git a/src/Bot/PlayerbotAI.cpp b/src/Bot/PlayerbotAI.cpp index 96019402d..b6afb1c0a 100644 --- a/src/Bot/PlayerbotAI.cpp +++ b/src/Bot/PlayerbotAI.cpp @@ -24,7 +24,6 @@ #include "GameObjectData.h" #include "GameTime.h" #include "GuildMgr.h" -#include "GuildTaskMgr.h" #include "LFGMgr.h" #include "LastMovementValue.h" #include "LastSpellCastValue.h" @@ -39,7 +38,6 @@ #include "PerfMonitor.h" #include "Player.h" #include "PlayerbotAIConfig.h" -#include "PlayerbotRepository.h" #include "PlayerbotMgr.h" #include "PlayerbotGuildMgr.h" #include "Playerbots.h" @@ -5192,8 +5190,9 @@ std::string const PlayerbotAI::HandleRemoteCommand(std::string const command) { LastMovement& data = *GetAiObjectContext()->GetValue("last movement"); std::ostringstream out; - out << data.lastMoveShort.getX() << " " << data.lastMoveShort.getY() << " " << data.lastMoveShort.getZ() << " " - << data.lastMoveShort.getMapId() << " " << data.lastMoveShort.getO(); + out << data.lastMoveShort.GetPositionX() << " " << data.lastMoveShort.GetPositionY() << " " + << data.lastMoveShort.GetPositionZ() << " " << data.lastMoveShort.GetMapId() << " " + << data.lastMoveShort.GetOrientation(); return out.str(); } else if (command == "target") diff --git a/src/Bot/PlayerbotAI.h b/src/Bot/PlayerbotAI.h index 3364b31ac..05710548d 100644 --- a/src/Bot/PlayerbotAI.h +++ b/src/Bot/PlayerbotAI.h @@ -6,13 +6,11 @@ #ifndef _PLAYERBOT_PLAYERbotAI_H #define _PLAYERBOT_PLAYERbotAI_H -#include #include #include "Chat.h" #include "ChatFilter.h" #include "ChatHelper.h" -#include "Common.h" #include "CreatureData.h" #include "Event.h" #include "Item.h" diff --git a/src/Bot/PlayerbotMgr.cpp b/src/Bot/PlayerbotMgr.cpp index 79850ab24..03ee1a8fc 100644 --- a/src/Bot/PlayerbotMgr.cpp +++ b/src/Bot/PlayerbotMgr.cpp @@ -7,7 +7,6 @@ #include #include -#include #include #include #include @@ -20,11 +19,9 @@ #include "Common.h" #include "Define.h" #include "Group.h" -#include "GroupMgr.h" #include "GuildMgr.h" #include "ObjectAccessor.h" #include "ObjectGuid.h" -#include "ObjectMgr.h" #include "PlayerbotAIConfig.h" #include "PlayerbotRepository.h" #include "PlayerbotFactory.h" @@ -126,7 +123,7 @@ void PlayerbotHolder::AddPlayerBot(ObjectGuid playerGuid, uint32 masterAccountId return; } uint32 count = mgr->GetPlayerbotsCount() + botLoading.size(); - if (count >= sPlayerbotAIConfig.maxAddedBots) + if (count >= PlayerbotAIConfig::instance().maxAddedBots) { allowed = false; out << "Failure: You have added too many bots (more than " << sPlayerbotAIConfig.maxAddedBots << ")"; @@ -710,12 +707,11 @@ void PlayerbotHolder::OnBotLogin(Player* const bot) } std::string const PlayerbotHolder::ProcessBotCommand(std::string const cmd, ObjectGuid guid, ObjectGuid masterguid, - bool admin, uint32 masterAccountId, uint32 masterGuildId) + bool admin, uint32 masterAccountId, uint32) { if (!sPlayerbotAIConfig.enabled || guid.IsEmpty()) return "bot system is disabled"; - uint32 botAccount = sCharacterCache->GetCharacterAccountIdByGuid(guid); //bool isRandomBot = sRandomPlayerbotMgr.IsRandomBot(guid.GetCounter()); //not used, line marked for removal. //bool isRandomAccount = sPlayerbotAIConfig.IsInRandomAccountList(botAccount); //not used, shadowed, line marked for removal. //bool isMasterAccount = (masterAccountId == botAccount); //not used, line marked for removal. @@ -730,13 +726,15 @@ std::string const PlayerbotHolder::ProcessBotCommand(std::string const cmd, Obje { uint32 accountId = sCharacterCache->GetCharacterAccountIdByGuid(guid); if (!accountId) + { return "character not found"; + } - if (!sPlayerbotAIConfig.allowAccountBots && accountId != masterAccountId && - !(sPlayerbotAIConfig.allowTrustedAccountBots && IsAccountLinked(accountId, masterAccountId))) - { - return "you can only add bots from your own account or linked accounts"; - } + if (!sPlayerbotAIConfig.allowAccountBots && accountId != masterAccountId && + !(sPlayerbotAIConfig.allowTrustedAccountBots && IsAccountLinked(accountId, masterAccountId))) + { + return "you can only add bots from your own account or linked accounts"; + } } AddPlayerBot(guid, masterAccountId); @@ -1462,7 +1460,7 @@ std::string const PlayerbotHolder::ListBots(Player* master) return out.str(); } -std::string const PlayerbotHolder::LookupBots(Player* master) +std::string const PlayerbotHolder::LookupBots(Player*) { std::list messages; messages.push_back("Classes Available:"); diff --git a/src/Bot/RandomPlayerbotMgr.cpp b/src/Bot/RandomPlayerbotMgr.cpp index 892368c66..412c27a96 100644 --- a/src/Bot/RandomPlayerbotMgr.cpp +++ b/src/Bot/RandomPlayerbotMgr.cpp @@ -25,7 +25,6 @@ #include "FleeManager.h" #include "FlightMasterCache.h" #include "GridNotifiers.h" -#include "GuildTaskMgr.h" #include "LFGMgr.h" #include "MapMgr.h" #include "NewRpgInfo.h" @@ -1667,7 +1666,7 @@ void RandomPlayerbotMgr::RandomTeleport(Player* bot, std::vector& { std::vector::iterator i = find(sPlayerbotAIConfig.randomBotMaps.begin(), - sPlayerbotAIConfig.randomBotMaps.end(), l.getMapId()); + sPlayerbotAIConfig.randomBotMaps.end(), l.GetMapId()); return i == sPlayerbotAIConfig.randomBotMaps.end(); }), tlocs.end()); @@ -2680,7 +2679,7 @@ std::vector RandomPlayerbotMgr::GetBgBots(uint32 bracket) } while (result->NextRow()); } - return std::move(BgBots); + return BgBots; } CachedEvent* RandomPlayerbotMgr::FindEvent(uint32 bot, std::string const& event) @@ -3073,7 +3072,7 @@ void RandomPlayerbotMgr::OnPlayerLogin(Player* player) FactionTemplateEntry const* factionEntry = sFactionTemplateStore.LookupEntry(cInfo->faction); ReputationRank reaction = Unit::GetFactionReactionTo(player->GetFactionTemplateEntry(), factionEntry); - if (reaction > REP_NEUTRAL && dest->nearestPoint(&botPos)->m_mapId == player->GetMapId()) + if (reaction > REP_NEUTRAL && dest->nearestPoint(&botPos)->GetMapId() == player->GetMapId()) { botPos = *dest->nearestPoint(&botPos); break; @@ -3211,40 +3210,38 @@ void RandomPlayerbotMgr::PrintStats() //++revive; } if (bot->IsInCombat()) - { ++combat; - } + if (bot->isMoving()) - { ++moving; - } + if (bot->IsInFlight()) - { ++inFlight; - } + if (bot->IsMounted()) - { ++mounted; - } + if (bot->InBattleground() || bot->InArena()) - { ++inBg; - } + if (bot->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING)) - { ++rest; - } + if (botAI->GetState() == BOT_STATE_NON_COMBAT) ++engine_noncombat; + else if (botAI->GetState() == BOT_STATE_COMBAT) ++engine_combat; + else ++engine_dead; if (botAI->IsHeal(bot, true)) ++heal; + else if (botAI->IsTank(bot, true)) ++tank; + else ++dps; @@ -3252,7 +3249,7 @@ void RandomPlayerbotMgr::PrintStats() if (sPlayerbotAIConfig.enableNewRpgStrategy) { - rpgStatusCount[botAI->rpgInfo.status]++; + rpgStatusCount[botAI->rpgInfo.GetStatus()]++; rpgStasticTotal += botAI->rpgStatistic; botAI->rpgStatistic = NewRpgStatistic(); } diff --git a/src/Db/PlayerbotRepository.cpp b/src/Db/PlayerbotRepository.cpp index 886cebb83..731534edd 100644 --- a/src/Db/PlayerbotRepository.cpp +++ b/src/Db/PlayerbotRepository.cpp @@ -4,10 +4,7 @@ */ #include "PlayerbotRepository.h" - -#include - -#include "Playerbots.h" +#include "AiObjectContext.h" void PlayerbotRepository::Load(PlayerbotAI* botAI) { diff --git a/src/Mgr/Item/RandomItemMgr.cpp b/src/Mgr/Item/RandomItemMgr.cpp index 1053e542e..71fbb9f79 100644 --- a/src/Mgr/Item/RandomItemMgr.cpp +++ b/src/Mgr/Item/RandomItemMgr.cpp @@ -1700,7 +1700,7 @@ std::vector RandomItemMgr::GetQuestIdsForItem(uint32 itemId) } } - return std::move(questIds); + return questIds; } uint32 RandomItemMgr::GetUpgrade(Player* player, std::string spec, uint8 slot, uint32 quality, uint32 itemId) @@ -1827,7 +1827,7 @@ std::vector RandomItemMgr::GetUpgradeList(Player* player, std::string sp { std::vector listItems; if (!player) - return std::move(listItems); + return listItems; // get old item statWeight uint32 oldStatWeight = 0; @@ -1848,7 +1848,7 @@ std::vector RandomItemMgr::GetUpgradeList(Player* player, std::string sp } if (!specId) - return std::move(listItems); + return listItems; if (itemId && itemInfoCache.find(itemId) != itemInfoCache.end()) { @@ -1942,7 +1942,7 @@ std::vector RandomItemMgr::GetUpgradeList(Player* player, std::string sp LOG_INFO("playerbots", "New Items: {}, Old item:%d, New items max: {}", listItems.size(), oldStatWeight, closestUpgradeWeight); - return std::move(listItems); + return listItems; } bool RandomItemMgr::HasStatWeight(uint32 itemId) @@ -2771,9 +2771,8 @@ inline bool IsCraftedBySpellInfo(ItemTemplate const* proto, SpellInfo const* spe } if (proto->ItemId == spellInfo->Reagent[x]) - { return true; - } + } for (uint8 i = 0; i < 3; ++i) @@ -2781,9 +2780,7 @@ inline bool IsCraftedBySpellInfo(ItemTemplate const* proto, SpellInfo const* spe if (spellInfo->Effects[i].Effect == SPELL_EFFECT_CREATE_ITEM) { if (spellInfo->Effects[i].ItemType == proto->ItemId) - { return true; - } } } diff --git a/src/Mgr/Item/StatsCollector.cpp b/src/Mgr/Item/StatsCollector.cpp index 4f719fea4..7818dc738 100644 --- a/src/Mgr/Item/StatsCollector.cpp +++ b/src/Mgr/Item/StatsCollector.cpp @@ -1,18 +1,13 @@ #include "StatsCollector.h" -#include - #include "DBCStores.h" -#include "ItemEnchantmentMgr.h" #include "ItemTemplate.h" -#include "ObjectMgr.h" #include "PlayerbotAI.h" #include "PlayerbotAIAware.h" #include "SharedDefines.h" #include "SpellAuraDefines.h" #include "SpellInfo.h" #include "SpellMgr.h" -#include "UpdateFields.h" #include "Util.h" StatsCollector::StatsCollector(CollectorType type, int32 cls) : type_(type), cls_(cls) { Reset(); } diff --git a/src/Mgr/Move/FleeManager.cpp b/src/Mgr/Move/FleeManager.cpp index d3d1a8bb0..e82f01daf 100644 --- a/src/Mgr/Move/FleeManager.cpp +++ b/src/Mgr/Move/FleeManager.cpp @@ -62,9 +62,9 @@ void FleeManager::calculatePossibleDestinations(std::vector& points) } Unit* target = *botAI->GetAiObjectContext()->GetValue("current target"); - float botPosX = startPosition.getX(); - float botPosY = startPosition.getY(); - float botPosZ = startPosition.getZ(); + float botPosX = startPosition.GetPositionX(); + float botPosY = startPosition.GetPositionY(); + float botPosZ = startPosition.GetPositionZ(); FleePoint start(botAI, botPosX, botPosY, botPosZ); calculateDistanceToCreatures(&start); diff --git a/src/Mgr/Talent/Talentspec.cpp b/src/Mgr/Talent/Talentspec.cpp index 06e70b841..7ee760ed4 100644 --- a/src/Mgr/Talent/Talentspec.cpp +++ b/src/Mgr/Talent/Talentspec.cpp @@ -6,7 +6,9 @@ #include "Talentspec.h" #include "Event.h" -#include "Playerbots.h" +#include "Player.h" +#include "SpellMgr.h" +#include "World.h" uint32 TalentSpec::TalentListEntry::tabPage() const { @@ -317,7 +319,7 @@ std::vector TalentSpec::GetTalentTree(uint32 tabpag if (entry.tabPage() == tabpage) retList.push_back(entry); - return std::move(retList); + return retList; } uint32 TalentSpec::GetTalentPoints(int32 tabpage) { return GetTalentPoints(talents, tabpage); }; @@ -368,7 +370,7 @@ std::string const TalentSpec::GetTalentLink() if (treeLink[2] != "0") link = link + "-" + treeLink[2]; - return std::move(link); + return link; } uint32 TalentSpec::highestTree() diff --git a/src/Mgr/Talent/Talentspec.h b/src/Mgr/Talent/Talentspec.h index 8cb63e44d..83243be03 100644 --- a/src/Mgr/Talent/Talentspec.h +++ b/src/Mgr/Talent/Talentspec.h @@ -6,7 +6,9 @@ #ifndef _PLAYERBOT_TALENTSPEC_H #define _PLAYERBOT_TALENTSPEC_H -#include "Action.h" +#include +#include +#include "Player.h" struct TalentEntry; struct TalentTabEntry; diff --git a/src/Mgr/Travel/TravelMgr.cpp b/src/Mgr/Travel/TravelMgr.cpp index 748f929aa..2909df5e5 100644 --- a/src/Mgr/Travel/TravelMgr.cpp +++ b/src/Mgr/Travel/TravelMgr.cpp @@ -71,13 +71,13 @@ WorldPosition::WorldPosition(std::vector list, WorldPositionCons set(*list[urand(0, size - 1)]); else if (conType == WP_CENTROID) { - set(std::accumulate(list.begin(), list.end(), WorldLocation(list[0]->getMapId(), 0, 0, 0, 0), + set(std::accumulate(list.begin(), list.end(), WorldLocation(list[0]->GetMapId(), 0, 0, 0, 0), [size](WorldLocation i, WorldPosition* j) { - i.m_positionX += j->getX() / size; - i.m_positionY += j->getY() / size; - i.m_positionZ += j->getZ() / size; - i.NormalizeOrientation(i.m_orientation += j->getO() / size); + i.m_positionX += j->GetPositionX() / size; + i.m_positionY += j->GetPositionY() / size; + i.m_positionZ += j->GetPositionZ() / size; + i.NormalizeOrientation(i.m_orientation += j->GetOrientation() / size); return i; })); } @@ -100,13 +100,13 @@ WorldPosition::WorldPosition(std::vector list, WorldPositionConst set(list[urand(0, size - 1)]); else if (conType == WP_CENTROID) { - set(std::accumulate(list.begin(), list.end(), WorldLocation(list[0].getMapId(), 0, 0, 0, 0), + set(std::accumulate(list.begin(), list.end(), WorldLocation(list[0].GetMapId(), 0, 0, 0, 0), [size](WorldLocation i, WorldPosition& j) { - i.m_positionX += j.getX() / size; - i.m_positionY += j.getY() / size; - i.m_positionZ += j.getZ() / size; - i.NormalizeOrientation(i.m_orientation += j.getO() / size); + i.m_positionX += j.GetPositionX() / size; + i.m_positionY += j.GetPositionY() / size; + i.m_positionZ += j.GetPositionZ() / size; + i.NormalizeOrientation(i.m_orientation += j.GetOrientation() / size); return i; })); } @@ -190,16 +190,6 @@ WorldPosition& WorldPosition::operator-=(WorldPosition const& p1) return *this; } -uint32 WorldPosition::getMapId() { return GetMapId(); } - -float WorldPosition::getX() { return GetPositionX(); } - -float WorldPosition::getY() { return GetPositionY(); } - -float WorldPosition::getZ() { return GetPositionZ(); } - -float WorldPosition::getO() { return GetOrientation(); } - bool WorldPosition::isOverworld() { return GetMapId() == 0 || GetMapId() == 1 || GetMapId() == 530 || GetMapId() == 571; @@ -243,7 +233,7 @@ float WorldPosition::size() float WorldPosition::distance(WorldPosition* center) { - if (GetMapId() == center->getMapId()) + if (GetMapId() == center->GetMapId()) return relPoint(center).size(); // this -> mapTransfer | mapTransfer -> center @@ -252,7 +242,7 @@ float WorldPosition::distance(WorldPosition* center) float WorldPosition::fDist(WorldPosition* center) { - if (GetMapId() == center->getMapId()) + if (GetMapId() == center->GetMapId()) return sqrt(sqDistance2d(center)); // this -> mapTransfer | mapTransfer -> center @@ -328,7 +318,7 @@ WorldPosition WorldPosition::firstOutRange(std::vector list, floa // Returns true if (on the x-y plane) the position is inside the three points. bool WorldPosition::isInside(WorldPosition* p1, WorldPosition* p2, WorldPosition* p3) { - if (getMapId() != p1->getMapId() != p2->getMapId() != p3->getMapId()) + if (GetMapId() != p1->GetMapId() != p2->GetMapId() != p3->GetMapId()) return false; float d1, d2, d3; @@ -348,7 +338,7 @@ MapEntry const* WorldPosition::getMapEntry() { return sMapStore.LookupEntry(GetM uint32 WorldPosition::getInstanceId() { - if (Map* map = sMapMgr->FindBaseMap(getMapId())) + if (Map* map = sMapMgr->FindBaseMap(GetMapId())) return map->GetInstanceId(); return 0; @@ -361,7 +351,7 @@ Map* WorldPosition::getMap() float WorldPosition::getHeight() // remove const - whipowill { - return getMap()->GetHeight(getX(), getY(), getZ()); + return getMap()->GetHeight(GetPositionX(), GetPositionY(), GetPositionZ()); } G3D::Vector3 WorldPosition::getVector3() { return G3D::Vector3(GetPositionX(), GetPositionY(), GetPositionZ()); } @@ -381,11 +371,11 @@ std::string const WorldPosition::print() std::string const WorldPosition::to_string() { std::stringstream out; - out << m_mapId << '|'; - out << m_positionX << '|'; - out << m_positionY << '|'; - out << m_positionZ << '|'; - out << m_orientation; + out << GetMapId() << '|'; + out << GetPositionX() << '|'; + out << GetPositionY() << '|'; + out << GetPositionZ() << '|'; + out << GetOrientation(); return out.str(); } @@ -429,11 +419,14 @@ void WorldPosition::printWKT(std::vector points, std::ostringstre WorldPosition WorldPosition::getDisplayLocation() { - WorldPosition pos = TravelNodeMap::instance().getMapOffset(getMapId()); + WorldPosition pos = TravelNodeMap::instance().getMapOffset(GetMapId()); return offset(const_cast(&pos)); } -uint16 WorldPosition::getAreaId() { return sMapMgr->GetAreaId(PHASEMASK_NORMAL, getMapId(), getX(), getY(), getZ()); } +uint16 WorldPosition::getAreaId() +{ + return sMapMgr->GetAreaId(PHASEMASK_NORMAL, GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ()); +} AreaTableEntry const* WorldPosition::getArea() { @@ -448,7 +441,7 @@ std::string const WorldPosition::getAreaName(bool fullName, bool zoneName) { if (!isOverworld()) { - MapEntry const* map = sMapStore.LookupEntry(getMapId()); + MapEntry const* map = sMapStore.LookupEntry(GetMapId()); if (map) return map->name[0]; } @@ -480,7 +473,7 @@ std::string const WorldPosition::getAreaName(bool fullName, bool zoneName) } } - return std::move(areaName); + return areaName; } std::set WorldPosition::getTransports(uint32 entry) @@ -545,7 +538,7 @@ std::vector WorldPosition::fromGridCoord(GridCoord gridCoord) if (d == 2 || d == 3) g.inc_y(1); - retVec.push_back(WorldPosition(getMapId(), g)); + retVec.push_back(WorldPosition(GetMapId(), g)); } return retVec; @@ -566,7 +559,7 @@ std::vector WorldPosition::fromCellCoord(CellCoord cellcoord) if (d == 2 || d == 3) p.inc_y(1); - retVec.push_back(WorldPosition(getMapId(), p)); + retVec.push_back(WorldPosition(GetMapId(), p)); } return retVec; } @@ -618,7 +611,7 @@ std::vector WorldPosition::frommGridCoord(mGridCoord GridCoord) if (d == 2 || d == 3) g.first++; - retVec.push_back(WorldPosition(getMapId(), g)); + retVec.push_back(WorldPosition(GetMapId(), g)); } return retVec; @@ -706,7 +699,7 @@ void WorldPosition::loadMapAndVMaps(WorldPosition secondPos) { for (auto& grid : getmGridCoords(secondPos)) { - loadMapAndVMap(getMapId(), grid.first, grid.second); + loadMapAndVMap(GetMapId(), grid.first, grid.second); } } @@ -714,7 +707,7 @@ std::vector WorldPosition::fromPointsArray(std::vector retVec; for (auto p : path) - retVec.push_back(WorldPosition(getMapId(), p.x, p.y, p.z, getO())); + retVec.push_back(WorldPosition(GetMapId(), p.x, p.y, p.z, GetOrientation())); return retVec; } @@ -729,7 +722,7 @@ std::vector WorldPosition::getPathStepFrom(WorldPosition startPos loadMapAndVMaps(startPos); PathGenerator path(bot); - path.CalculatePath(startPos.getX(), startPos.getY(), startPos.getZ()); + path.CalculatePath(startPos.GetPositionX(), startPos.GetPositionY(), startPos.GetPositionZ()); Movement::PointsArray points = path.GetPath(); PathType type = path.GetPathType(); @@ -785,7 +778,7 @@ std::vector WorldPosition::getPathFromPath(std::vector subPath, fullPath = startPath; @@ -818,10 +811,18 @@ bool WorldPosition::GetReachableRandomPointOnGround(Player* bot, float radius, b { radius *= randomRange ? rand_norm() : 1.f; float angle = rand_norm() * static_cast(2 * M_PI); - m_positionX += radius * cosf(angle); - m_positionY += radius * sinf(angle); + setX(GetPositionX() + radius * cosf(angle)); + setY(GetPositionY() + radius * sinf(angle)); - return getMap()->CanReachPositionAndGetValidCoords(bot, m_positionX, m_positionY, m_positionZ); + float x = GetPositionX(); + float y = GetPositionY(); + float z = GetPositionZ(); + bool canReach = getMap()->CanReachPositionAndGetValidCoords(bot, x, y, z); + setX(x); + setY(y); + setZ(z); + + return canReach; } uint32 WorldPosition::getUnitsAggro(GuidVector& units, Player* bot) @@ -844,7 +845,7 @@ uint32 WorldPosition::getUnitsAggro(GuidVector& units, Player* bot) void FindPointCreatureData::operator()(CreatureData const& creatureData) { if (!entry || creatureData.id1 == entry) - if ((!point || creatureData.mapid == point.getMapId()) && + if ((!point || creatureData.mapid == point.GetMapId()) && (!radius || point.sqDistance(WorldPosition(creatureData.mapid, creatureData.posX, creatureData.posY, creatureData.posZ)) < radius * radius)) { @@ -855,7 +856,7 @@ void FindPointCreatureData::operator()(CreatureData const& creatureData) void FindPointGameObjectData::operator()(GameObjectData const& gameobjectData) { if (!entry || gameobjectData.id == entry) - if ((!point || gameobjectData.mapid == point.getMapId()) && + if ((!point || gameobjectData.mapid == point.GetMapId()) && (!radius || point.sqDistance(WorldPosition(gameobjectData.mapid, gameobjectData.posX, gameobjectData.posY, gameobjectData.posZ)) < radius * radius)) { @@ -1245,9 +1246,8 @@ bool RpgTravelDestination::isActive(Player* bot) for (ObjectGuid const guid : ignoreList) { if (guid.GetEntry() == getEntry()) - { return false; - } + } FactionTemplateEntry const* factionEntry = sFactionTemplateStore.LookupEntry(cInfo->faction); @@ -3223,7 +3223,8 @@ void TravelMgr::LoadQuestTravelTable() if (loc.second.empty()) continue; - if (!TravelNodeMap::instance().getMapOffset(loc.second.front().getMapId()) && loc.second.front().getMapId() != 0) + if (!TravelNodeMap::instance().getMapOffset(loc.second.front().GetMapId()) && + loc.second.front().GetMapId() != 0) continue; std::vector points = loc.second; @@ -3235,7 +3236,7 @@ void TravelMgr::LoadQuestTravelTable() out << "\"center\"" << ","; - out << points.begin()->getMapId() << ","; + out << points.begin()->GetMapId() << ","; out << points.begin()->getAreaName() << ","; out << points.begin()->getAreaName(true, true) << ","; @@ -3245,7 +3246,7 @@ void TravelMgr::LoadQuestTravelTable() out << "\"area\"" << ","; - out << points.begin()->getMapId() << ","; + out << points.begin()->GetMapId() << ","; out << points.begin()->getAreaName() << ","; out << points.begin()->getAreaName(true, true) << ","; @@ -3613,17 +3614,18 @@ void TravelMgr::LoadQuestTravelTable() if (!pos->getMap()) continue; - float nx = pos->getX() + (x*5)-5000.0f; - float ny = pos->getY() + (y*5)-5000.0f; - float nz = pos->getZ() + 100.0f; + float nx = pos->GetPositionX() + (x * 5) - 5000.0f; + float ny = pos->GetPositionY() + (y * 5) - 5000.0f; + float nz = pos->GetPositionZ() + 100.0f; //pos->getMap()->GetHitPosition(nx, ny, nz + 200.0f, nx, ny, nz, -0.5f); if (!pos->getMap()->GetHeightInRange(nx, ny, nz, 5000.0f)) // GetHeight can fail continue; - WorldPosition npos = WorldPosition(pos->getMapId(), nx, ny, nz, 0.0); - uint32 area = path.getArea(npos.getMapId(), npos.getX(), npos.getY(), npos.getZ()); + WorldPosition npos = WorldPosition(pos->GetMapId(), nx, ny, nz, 0.0); + uint32 area = path.getArea(npos.GetMapId(), npos.GetPositionX(), npos.GetPositionY(), + npos.GetPositionZ()); std::ostringstream out; out << std::fixed << area << "," << npos.getDisplayX() << "," << npos.getDisplayY(); @@ -3647,7 +3649,8 @@ void TravelMgr::LoadQuestTravelTable() std::string const name = i.second->getTitle(); name.erase(remove(name.begin(), name.end(), '\"'), name.end()); out << std::fixed << std::setprecision(2) << name.c_str() << "," << i.first << "," << j->getDisplayX() << - "," << j->getDisplayY() << "," << j->getX() << "," << j->getY() << "," << j->getZ(); sPlayerbotAIConfig.log(5, + "," << j->getDisplayY() << "," << j->GetPositionX() << "," << j->GetPositionY() << "," << j->GetPositionZ(); + sPlayerbotAIConfig.log(5, out.str().c_str()); } } @@ -4022,7 +4025,7 @@ std::vector TravelMgr::getRpgTravelDestinations(Player* bot, retTravelLocations.push_back(dest); } - return std::move(retTravelLocations); + return retTravelLocations; } std::vector TravelMgr::getExploreTravelDestinations(Player* bot, bool ignoreFull, @@ -4087,8 +4090,8 @@ void TravelMgr::setNullTravelTarget(Player* player) void TravelMgr::addMapTransfer(WorldPosition start, WorldPosition end, float portalDistance, bool makeShortcuts) { - uint32 sMap = start.getMapId(); - uint32 eMap = end.getMapId(); + uint32 sMap = start.GetMapId(); + uint32 eMap = end.GetMapId(); if (sMap == eMap) return; @@ -4121,7 +4124,7 @@ void TravelMgr::addMapTransfer(WorldPosition start, WorldPosition end, float por } // Add actual transfer. - auto mapTransfers = mapTransfersMap.find(std::make_pair(start.getMapId(), end.getMapId())); + auto mapTransfers = mapTransfersMap.find(std::make_pair(start.GetMapId(), end.GetMapId())); if (mapTransfers == mapTransfersMap.end()) mapTransfersMap.insert({{sMap, eMap}, {mapTransfer(start, end, portalDistance)}}); @@ -4142,8 +4145,8 @@ void TravelMgr::loadMapTransfers() float TravelMgr::mapTransDistance(WorldPosition start, WorldPosition end) { - uint32 sMap = start.getMapId(); - uint32 eMap = end.getMapId(); + uint32 sMap = start.GetMapId(); + uint32 eMap = end.GetMapId(); if (sMap == eMap) return start.distance(end); @@ -4167,8 +4170,8 @@ float TravelMgr::mapTransDistance(WorldPosition start, WorldPosition end) float TravelMgr::fastMapTransDistance(WorldPosition start, WorldPosition end) { - uint32 sMap = start.getMapId(); - uint32 eMap = end.getMapId(); + uint32 sMap = start.GetMapId(); + uint32 eMap = end.GetMapId(); if (sMap == eMap) return start.fDist(end); diff --git a/src/Mgr/Travel/TravelMgr.h b/src/Mgr/Travel/TravelMgr.h index 251313736..7e2a40b16 100644 --- a/src/Mgr/Travel/TravelMgr.h +++ b/src/Mgr/Travel/TravelMgr.h @@ -120,12 +120,6 @@ public: WorldPosition& operator+=(WorldPosition const& p1); WorldPosition& operator-=(WorldPosition const& p1); - uint32 getMapId(); - float getX(); - float getY(); - float getZ(); - float getO(); - G3D::Vector3 getVector3(); std::string const print(); @@ -185,29 +179,29 @@ public: // Quick square distance in 2d plane. float sqDistance2d(WorldPosition center) { - return (getX() - center.getX()) * (getX() - center.getX()) + - (getY() - center.getY()) * (getY() - center.getY()); + return (GetPositionX() - center.GetPositionX()) * (GetPositionX() - center.GetPositionX()) + + (GetPositionY() - center.GetPositionY()) * (GetPositionY() - center.GetPositionY()); } // Quick square distance calculation without map check. Used for getting the minimum distant points. float sqDistance(WorldPosition center) { - return (getX() - center.getX()) * (getX() - center.getX()) + - (getY() - center.getY()) * (getY() - center.getY()) + - (getZ() - center.getZ()) * (getZ() - center.getZ()); + return (GetPositionX() - center.GetPositionX()) * (GetPositionX() - center.GetPositionX()) + + (GetPositionY() - center.GetPositionY()) * (GetPositionY() - center.GetPositionY()) + + (GetPositionZ() - center.GetPositionZ()) * (GetPositionZ() - center.GetPositionZ()); } float sqDistance2d(WorldPosition* center) { - return (getX() - center->getX()) * (getX() - center->getX()) + - (getY() - center->getY()) * (getY() - center->getY()); + return (GetPositionX() - center->GetPositionX()) * (GetPositionX() - center->GetPositionX()) + + (GetPositionY() - center->GetPositionY()) * (GetPositionY() - center->GetPositionY()); } float sqDistance(WorldPosition* center) { - return (getX() - center->getX()) * (getX() - center->getX()) + - (getY() - center->getY()) * (getY() - center->getY()) + - (getZ() - center->getZ()) * (getZ() - center->getZ()); + return (GetPositionX() - center->GetPositionX()) * (GetPositionX() - center->GetPositionX()) + + (GetPositionY() - center->GetPositionY()) * (GetPositionY() - center->GetPositionY()) + + (GetPositionZ() - center->GetPositionZ()) * (GetPositionZ() - center->GetPositionZ()); } // Returns the closest point of the list. Fast but only works for the same map. @@ -227,7 +221,7 @@ public: float getAngleTo(WorldPosition endPos) { - float ang = atan2(endPos.getY() - getY(), endPos.getX() - getX()); + float ang = atan2(endPos.GetPositionY() - GetPositionY(), endPos.GetPositionX() - GetPositionX()); return (ang >= 0) ? ang : 2 * static_cast(M_PI) + ang; } @@ -238,7 +232,8 @@ public: float mSign(WorldPosition* p1, WorldPosition* p2) { - return (getX() - p2->getX()) * (p1->getY() - p2->getY()) - (p1->getX() - p2->getX()) * (getY() - p2->getY()); + return (GetPositionX() - p2->GetPositionX()) * (p1->GetPositionY() - p2->GetPositionY()) - + (p1->GetPositionX() - p2->GetPositionX()) * (GetPositionY() - p2->GetPositionY()); } bool isInside(WorldPosition* p1, WorldPosition* p2, WorldPosition* p3); @@ -251,18 +246,23 @@ public: std::set getTransports(uint32 entry = 0); - GridCoord getGridCoord() { return Acore::ComputeGridCoord(getX(), getY()); }; + CellCoord getCellCoord() { return Acore::ComputeCellCoord(GetPositionX(), GetPositionY()); } + GridCoord getGridCoord() + { + CellCoord cellCoord = getCellCoord(); + Cell cell(cellCoord); + return GridCoord(cell.GridX(), cell.GridY()); + } std::vector getGridCoord(WorldPosition secondPos); std::vector fromGridCoord(GridCoord GridCoord); - CellCoord getCellCoord() { return Acore::ComputeCellCoord(getX(), getY()); } std::vector fromCellCoord(CellCoord cellCoord); std::vector gridFromCellCoord(CellCoord cellCoord); mGridCoord getmGridCoord() { - return std::make_pair((int32)(CENTER_GRID_ID - getX() / SIZE_OF_GRIDS), - (int32)(CENTER_GRID_ID - getY() / SIZE_OF_GRIDS)); + return std::make_pair((int32)(CENTER_GRID_ID - GetPositionX() / SIZE_OF_GRIDS), + (int32)(CENTER_GRID_ID - GetPositionY() / SIZE_OF_GRIDS)); } std::vector getmGridCoords(WorldPosition secondPos); @@ -270,15 +270,15 @@ public: void loadMapAndVMap(uint32 mapId, uint8 x, uint8 y); - void loadMapAndVMap() { loadMapAndVMap(getMapId(), getmGridCoord().first, getmGridCoord().second); } + void loadMapAndVMap() { loadMapAndVMap(GetMapId(), getmGridCoord().first, getmGridCoord().second); } void loadMapAndVMaps(WorldPosition secondPos); // Display functions WorldPosition getDisplayLocation(); - float getDisplayX() { return getDisplayLocation().getY() * -1.0; } + float getDisplayX() { return getDisplayLocation().GetPositionY() * -1.0; } - float getDisplayY() { return getDisplayLocation().getX(); } + float getDisplayY() { return getDisplayLocation().GetPositionX(); } uint16 getAreaId(); AreaTableEntry const* getArea(); @@ -334,11 +334,11 @@ private: inline ByteBuffer& operator<<(ByteBuffer& b, WorldPosition& guidP) { - b << guidP.getMapId(); - b << guidP.getX(); - b << guidP.getY(); - b << guidP.getZ(); - b << guidP.getO(); + b << guidP.GetMapId(); + b << guidP.GetPositionX(); + b << guidP.GetPositionY(); + b << guidP.GetPositionZ(); + b << guidP.GetOrientation(); b << guidP.getVisitors(); return b; } @@ -440,7 +440,7 @@ std::vector> GetPosList(std::vector oList) for (auto& obj : oList) retList.push_back(std::make_pair(obj, WorldPosition(obj))); - return std::move(retList); + return retList; }; template @@ -450,7 +450,7 @@ std::vector> GetPosVector(std::vector oList) for (auto& obj : oList) retList.push_back(make_pair(obj, WorldPosition(obj))); - return std::move(retList); + return retList; }; class mapTransfer @@ -461,9 +461,9 @@ public: { } - bool isFrom(WorldPosition point) { return point.getMapId() == pointFrom.getMapId(); } + bool isFrom(WorldPosition point) { return point.GetMapId() == pointFrom.GetMapId(); } - bool isTo(WorldPosition point) { return point.getMapId() == pointTo.getMapId(); } + bool isTo(WorldPosition point) { return point.GetMapId() == pointTo.GetMapId(); } WorldPosition* getPointFrom() { return &pointFrom; } @@ -543,7 +543,7 @@ public: WorldPosition* nearestPoint(WorldPosition* pos); float distanceTo(WorldPosition* pos) { return nearestPoint(pos)->distance(pos); } - bool onMap(WorldPosition* pos) { return nearestPoint(pos)->getMapId() == pos->getMapId(); } + bool onMap(WorldPosition* pos) { return nearestPoint(pos)->GetMapId() == pos->GetMapId(); } virtual bool isIn(WorldPosition* pos, float radius = 0.f) { return onMap(pos) && distanceTo(pos) <= (radius ? radius : radiusMin); diff --git a/src/Mgr/Travel/TravelNode.cpp b/src/Mgr/Travel/TravelNode.cpp index 5d740075d..bdf9cc952 100644 --- a/src/Mgr/Travel/TravelNode.cpp +++ b/src/Mgr/Travel/TravelNode.cpp @@ -81,7 +81,7 @@ void TravelNodePath::calculateCost(bool distanceOnly) } } - if (lastPoint && point.getMapId() == lastPoint.getMapId()) + if (lastPoint && point.GetMapId() == lastPoint.GetMapId()) { if (!distanceOnly && (point.isInWater() || lastPoint.isInWater())) swimDistance += point.distance(lastPoint); @@ -364,7 +364,7 @@ std::vector TravelNode::getNodeMap(bool importantOnly, std::vector< } } - return std::move(closeList); + return closeList; } bool TravelNode::isUselessLink(TravelNode* farNode) @@ -687,7 +687,7 @@ bool TravelPath::makeShortCut(WorldPosition startPos, float maxDist) // if (p.point.getMapId() != startPos.getMapId()) // continue; - if (p.point.getMapId() == startPos.getMapId()) + if (p.point.GetMapId() == startPos.GetMapId()) { float curDist = p.point.sqDistance(startPos); @@ -722,7 +722,7 @@ bool TravelPath::makeShortCut(WorldPosition startPos, float maxDist) newPath.push_back(p); } - if (newPath.empty() || minDist > maxDistSq || newPath.front().point.getMapId() != startPos.getMapId()) + if (newPath.empty() || minDist > maxDistSq || newPath.front().point.GetMapId() != startPos.GetMapId()) { clear(); return false; @@ -800,7 +800,7 @@ bool TravelPath::shouldMoveToNextPoint(WorldPosition startPos, std::vectorpoint.distance(nextP->point); - if (p->point.getMapId() != startPos.getMapId() || + if (p->point.GetMapId() != startPos.GetMapId() || ((moveDist + nextMove > maxDist || startPos.distance(nextP->point) > maxDist) && moveDist > 0)) { return false; @@ -827,7 +827,7 @@ WorldPosition TravelPath::getNextPoint(WorldPosition startPos, float maxDist, Tr // Get the closest point on the path to start from. for (auto p = startP; p != ed; p++) { - if (p->point.getMapId() != startPos.getMapId()) + if (p->point.GetMapId() != startPos.GetMapId()) continue; float curDist = p->point.distance(startPos); @@ -1126,7 +1126,7 @@ std::vector TravelNodeMap::getNodes(WorldPosition pos, float range) for (auto& node : m_nodes) { - if (node->getMapId() == pos.getMapId()) + if (node->getMapId() == pos.GetMapId()) if (range == -1 || node->getDistance(pos) <= range) retVec.push_back(node); } @@ -1135,7 +1135,7 @@ std::vector TravelNodeMap::getNodes(WorldPosition pos, float range) [pos](TravelNode* i, TravelNode* j) { return i->getPosition()->distance(pos) < j->getPosition()->distance(pos); }); - return std::move(retVec); + return retVec; } TravelNode* TravelNodeMap::getNode(WorldPosition pos, [[maybe_unused]] std::vector& ppath, Unit* bot, @@ -1787,8 +1787,9 @@ void TravelNodeMap::generateTransportNodes() float dy = -1 * p.second->Y; WorldPosition pos = - WorldPosition(basePos.getMapId(), basePos.getX() + dx, basePos.getY() + dy, - basePos.getZ() + p.second->Z, basePos.getO()); + WorldPosition(basePos.GetMapId(), basePos.GetPositionX() + dx, + basePos.GetPositionY() + dy, basePos.GetPositionZ() + p.second->Z, + basePos.GetOrientation()); if (prevNode) { @@ -1830,8 +1831,9 @@ void TravelNodeMap::generateTransportNodes() float dx = -1 * p.second->X; float dy = -1 * p.second->Y; WorldPosition pos = - WorldPosition(basePos.getMapId(), basePos.getX() + dx, basePos.getY() + dy, - basePos.getZ() + p.second->Z, basePos.getO()); + WorldPosition(basePos.GetMapId(), basePos.GetPositionX() + dx, + basePos.GetPositionY() + dy, basePos.GetPositionZ() + p.second->Z, + basePos.GetOrientation()); ppath.push_back(pos); @@ -2356,10 +2358,10 @@ void TravelNodeMap::saveNodeStore() stmt->SetData(0, i); stmt->SetData(1, saveNodes.find(link.first)->second); stmt->SetData(2, j); - stmt->SetData(3, point.getMapId()); - stmt->SetData(4, point.getX()); - stmt->SetData(5, point.getY()); - stmt->SetData(6, point.getZ()); + stmt->SetData(3, point.GetMapId()); + stmt->SetData(4, point.GetPositionX()); + stmt->SetData(5, point.GetPositionY()); + stmt->SetData(6, point.GetPositionZ()); trans->Append(stmt); points++; @@ -2516,10 +2518,10 @@ void TravelNodeMap::calcMapOffset() } else { - min.back().setX(std::min(min.back().getX(), node->getX())); - min.back().setY(std::min(min.back().getY(), node->getY())); - max.back().setX(std::max(max.back().getX(), node->getX())); - max.back().setY(std::max(max.back().getY(), node->getY())); + min.back().setX(std::min(min.back().GetPositionX(), node->getX())); + min.back().setY(std::min(min.back().GetPositionY(), node->getY())); + max.back().setX(std::max(max.back().GetPositionX(), node->getX())); + max.back().setY(std::max(max.back().GetPositionY(), node->getY())); } } } @@ -2533,14 +2535,15 @@ void TravelNodeMap::calcMapOffset() for (auto& mapId : mapIds) { mapOffsets.push_back(std::make_pair( - mapId, WorldPosition(mapId, curPos.getX() - min[i].getX(), curPos.getY() - max[i].getY(), 0, 0))); + mapId, WorldPosition(mapId, curPos.GetPositionX() - min[i].GetPositionX(), + curPos.GetPositionY() - max[i].GetPositionY(), 0, 0))); - maxY = std::max(maxY, (max[i].getY() - min[i].getY() + 500)); - curPos.setX(curPos.getX() + (max[i].getX() - min[i].getX() + 500)); + maxY = std::max(maxY, (max[i].GetPositionY() - min[i].GetPositionY() + 500)); + curPos.setX(curPos.GetPositionX() + (max[i].GetPositionX() - min[i].GetPositionX() + 500)); - if (curPos.getX() > endPos.getX()) + if (curPos.GetPositionX() > endPos.GetPositionX()) { - curPos.setY(curPos.getY() - maxY); + curPos.setY(curPos.GetPositionY() - maxY); curPos.setX(-13000); } diff --git a/src/Mgr/Travel/TravelNode.h b/src/Mgr/Travel/TravelNode.h index 41419f8a9..4dc235721 100644 --- a/src/Mgr/Travel/TravelNode.h +++ b/src/Mgr/Travel/TravelNode.h @@ -251,11 +251,11 @@ public: } // WorldLocation shortcuts - uint32 getMapId() { return point.getMapId(); } - float getX() { return point.getX(); } - float getY() { return point.getY(); } - float getZ() { return point.getZ(); } - float getO() { return point.getO(); } + uint32 getMapId() { return point.GetMapId(); } + float getX() { return point.GetPositionX(); } + float getY() { return point.GetPositionY(); } + float getZ() { return point.GetPositionZ(); } + float getO() { return point.GetOrientation(); } float getDistance(WorldPosition pos) { return point.distance(pos); } float getDistance(TravelNode* node) { return point.distance(node->getPosition()); } float fDist(TravelNode* node) { return point.fDist(node->getPosition()); } diff --git a/src/PlayerbotAIConfig.h b/src/PlayerbotAIConfig.h index 729fc5be1..27177565c 100644 --- a/src/PlayerbotAIConfig.h +++ b/src/PlayerbotAIConfig.h @@ -42,21 +42,20 @@ enum class HealingManaEfficiency : uint8 enum NewRpgStatus : int { - RPG_STATUS_START = 0, - // Going to far away place - RPG_GO_GRIND = 0, - RPG_GO_CAMP = 1, + //Initial Status + RPG_IDLE = 0, + RPG_GO_GRIND = 1, + RPG_GO_CAMP = 2, // Exploring nearby - RPG_WANDER_RANDOM = 2, - RPG_WANDER_NPC = 3, + RPG_WANDER_RANDOM = 3, + RPG_WANDER_NPC = 4, // Do Quest (based on quest status) - RPG_DO_QUEST = 4, + RPG_DO_QUEST = 5, // Travel - RPG_TRAVEL_FLIGHT = 5, + + RPG_TRAVEL_FLIGHT = 6, // Taking a break - RPG_REST = 6, - // Initial status - RPG_IDLE = 7, + RPG_REST = 7, RPG_STATUS_END = 8 }; diff --git a/src/Script/Playerbots.cpp b/src/Script/Playerbots.cpp index c4487f898..94b8eb1b0 100644 --- a/src/Script/Playerbots.cpp +++ b/src/Script/Playerbots.cpp @@ -71,9 +71,7 @@ public: } if (revision.empty()) - { revision = "Unknown Playerbots Database Revision"; - } } }; @@ -217,16 +215,12 @@ public: Player* const member = itr->GetSource(); if (member == nullptr) - { continue; - } PlayerbotAI* const botAI = PlayerbotsMgr::instance().GetPlayerbotAI(member); if (botAI == nullptr) - { continue; - } botAI->HandleCommand(type, msg, player); } @@ -237,30 +231,22 @@ public: bool OnPlayerCanUseChat(Player* player, uint32 type, uint32 /*lang*/, std::string& msg, Guild* guild) override { if (type != CHAT_MSG_GUILD) - { return true; - } PlayerbotMgr* playerbotMgr = PlayerbotsMgr::instance().GetPlayerbotMgr(player); if (playerbotMgr == nullptr) - { return true; - } for (PlayerBotMap::const_iterator it = playerbotMgr->GetPlayerBotsBegin(); it != playerbotMgr->GetPlayerBotsEnd(); ++it) { Player* const bot = it->second; if (bot == nullptr) - { continue; - } if (bot->GetGuildId() != player->GetGuildId()) - { continue; - } PlayerbotsMgr::instance().GetPlayerbotAI(bot)->HandleCommand(type, msg, player); } @@ -273,9 +259,7 @@ public: PlayerbotMgr* const playerbotMgr = PlayerbotsMgr::instance().GetPlayerbotMgr(player); if (playerbotMgr != nullptr && channel->GetFlags() & 0x18) - { playerbotMgr->HandleCommand(type, msg); - } sRandomPlayerbotMgr.HandleCommand(type, msg, player); @@ -310,14 +294,10 @@ public: { Player* member = gref->GetSource(); if (!member) - { continue; - } if (!member->GetSession()->IsBot()) - { return; - } } } @@ -336,14 +316,10 @@ public: PlayerbotAI* botAI = PlayerbotsMgr::instance().GetPlayerbotAI(player); if (botAI != nullptr) - { delete botAI; - } if (PlayerbotMgr* playerbotMgr = GET_PLAYERBOT_MGR(player)) - { delete playerbotMgr; - } } }; @@ -441,14 +417,10 @@ public: void OnPlayerbotCheckPetitionAccount(Player* player, bool& found) override { if (!found) - { return; - } if (PlayerbotsMgr::instance().GetPlayerbotAI(player) != nullptr) - { found = false; - } } bool OnPlayerbotCheckUpdatesToSend(Player* player) override @@ -456,9 +428,7 @@ public: PlayerbotAI* botAI = PlayerbotsMgr::instance().GetPlayerbotAI(player); if (botAI == nullptr) - { return true; - } return botAI->IsRealPlayer(); } @@ -466,21 +436,15 @@ public: void OnPlayerbotPacketSent(Player* player, WorldPacket const* packet) override { if (player == nullptr) - { return; - } PlayerbotAI* botAI = PlayerbotsMgr::instance().GetPlayerbotAI(player); if (botAI != nullptr) - { botAI->HandleBotOutgoingPacket(*packet); - } if (PlayerbotMgr* playerbotMgr = GET_PLAYERBOT_MGR(player)) - { playerbotMgr->HandleMasterOutgoingPacket(*packet); - } } void OnPlayerbotUpdate(uint32 diff) override diff --git a/src/Script/WorldThr/PlayerbotWorldThreadProcessor.h b/src/Script/WorldThr/PlayerbotWorldThreadProcessor.h index e975b8fbd..bd489829e 100644 --- a/src/Script/WorldThr/PlayerbotWorldThreadProcessor.h +++ b/src/Script/WorldThr/PlayerbotWorldThreadProcessor.h @@ -11,7 +11,6 @@ #include #include "Log.h" - #include "PlayerbotOperation.h" /**