diff --git a/src/Ai/Base/Actions/TaxiAction.cpp b/src/Ai/Base/Actions/TaxiAction.cpp index 1f9e89cc..0bbbb8a1 100644 --- a/src/Ai/Base/Actions/TaxiAction.cpp +++ b/src/Ai/Base/Actions/TaxiAction.cpp @@ -31,8 +31,14 @@ bool TaxiAction::Execute(Event event) GuidVector units = *context->GetValue("nearest npcs"); for (ObjectGuid const guid : units) { - Creature* npc = bot->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_FLIGHTMASTER); - if (!npc) + Creature* npc = ObjectAccessor::GetCreature(*bot, guid); + if (!npc || !npc->IsAlive()) + continue; + + if (!(npc->GetNpcFlags() & UNIT_NPC_FLAG_FLIGHTMASTER)) + continue; + + if (bot->GetDistance(npc) > sPlayerbotAIConfig.farDistance) continue; uint32 curloc = sObjectMgr->GetNearestTaxiNode(npc->GetPositionX(), npc->GetPositionY(), npc->GetPositionZ(), @@ -50,21 +56,17 @@ bool TaxiAction::Execute(Event event) } } - // stagger bot takeoff - uint32 delayMin = sConfigMgr->GetOption("AiPlayerbot.BotTaxiDelayMinMs", 350u, false); - uint32 delayMax = sConfigMgr->GetOption("AiPlayerbot.BotTaxiDelayMaxMs", 5000u, false); - uint32 gapMs = sConfigMgr->GetOption("AiPlayerbot.BotTaxiGapMs", 200u, false); - uint32 gapJitterMs = sConfigMgr->GetOption("AiPlayerbot.BotTaxiGapJitterMs", 100u, false); - // Only for follower bots if (botAI->HasRealPlayerMaster()) { uint32 index = botAI->GetGroupSlotIndex(bot); - uint32 delay = delayMin + index * gapMs + urand(0, gapJitterMs); + uint32 delay = sPlayerbotAIConfig.botTaxiDelayMin + + index * sPlayerbotAIConfig.botTaxiGapMs + + urand(0, sPlayerbotAIConfig.botTaxiGapJitterMs); - delay = std::min(delay, delayMax); + delay = std::min(delay, sPlayerbotAIConfig.botTaxiDelayMax); - // Store the npc’s GUID so we can re-acquire the pointer later + // Store the NPC's GUID so we can re-acquire the pointer later ObjectGuid npcGuid = npc->GetGUID(); // schedule the take-off diff --git a/src/PlayerbotAIConfig.cpp b/src/PlayerbotAIConfig.cpp index c3aee910..211db9a0 100644 --- a/src/PlayerbotAIConfig.cpp +++ b/src/PlayerbotAIConfig.cpp @@ -415,10 +415,10 @@ bool PlayerbotAIConfig::Initialize() useFastFlyMountAtMinLevel = sConfigMgr->GetOption("AiPlayerbot.UseFastFlyMountAtMinLevel", 70); // stagger bot flightpath takeoff - delayMin = sConfigMgr->GetOption("AiPlayerbot.BotTaxiDelayMinMs", 350u); - delayMax = sConfigMgr->GetOption("AiPlayerbot.BotTaxiDelayMaxMs", 5000u); - gapMs = sConfigMgr->GetOption("AiPlayerbot.BotTaxiGapMs", 200u); - gapJitterMs = sConfigMgr->GetOption("AiPlayerbot.BotTaxiGapJitterMs", 100u); + botTaxiDelayMin = sConfigMgr->GetOption("AiPlayerbot.BotTaxiDelayMinMs", 350); + botTaxiDelayMax = sConfigMgr->GetOption("AiPlayerbot.BotTaxiDelayMaxMs", 5000); + botTaxiGapMs = sConfigMgr->GetOption("AiPlayerbot.BotTaxiGapMs", 200); + botTaxiGapJitterMs = sConfigMgr->GetOption("AiPlayerbot.BotTaxiGapJitterMs", 100); LOG_INFO("server.loading", "Loading TalentSpecs..."); diff --git a/src/PlayerbotAIConfig.h b/src/PlayerbotAIConfig.h index 970bbd50..a5c6e461 100644 --- a/src/PlayerbotAIConfig.h +++ b/src/PlayerbotAIConfig.h @@ -424,10 +424,10 @@ public: uint32 useFastFlyMountAtMinLevel; // stagger flightpath takeoff - uint32 delayMin; - uint32 delayMax; - uint32 gapMs; - uint32 gapJitterMs; + uint32 botTaxiDelayMin; + uint32 botTaxiDelayMax; + uint32 botTaxiGapMs; + uint32 botTaxiGapJitterMs; std::string const GetTimestampStr(); bool hasLog(std::string const fileName)