diff options
author | jackpoz <giacomopoz@gmail.com> | 2020-10-04 19:43:49 +0200 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2020-10-04 19:43:49 +0200 |
commit | 5be7c2ad4f7cd561951e1285227211e03886703f (patch) | |
tree | 28237ee05a9019afcad59acf960a9af3108ce096 /src/server/game/AI | |
parent | 59bb822f78291c3b0d7b5811478637729569e07d (diff) |
Core/SAI: Fix SMART_ACTION_WP_RESUME actually pausing next waypoint if the current path was not paused
Fixes #25519
Diffstat (limited to 'src/server/game/AI')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 11 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 1 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 3 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 27e63f0e30e..682fb7e6638 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -135,6 +135,17 @@ void SmartAI::PausePath(uint32 delay, bool forced) GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_PAUSED, nullptr, _currentWaypointNode, GetScript()->GetPathId()); } +bool SmartAI::CanResumePath() +{ + if (!HasEscortState(SMART_ESCORT_ESCORTING)) + { + // The whole resume logic doesn't support this case + return false; + } + + return HasEscortState(SMART_ESCORT_PAUSED); +} + void SmartAI::StopPath(uint32 DespawnTime, uint32 quest, bool fail) { if (!HasEscortState(SMART_ESCORT_ESCORTING)) diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 06b394a0123..2ff8d1de579 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -52,6 +52,7 @@ class TC_GAME_API SmartAI : public CreatureAI void StartPath(bool run = false, uint32 pathId = 0, bool repeat = false, Unit* invoker = nullptr, uint32 nodeId = 1); bool LoadPath(uint32 entry); void PausePath(uint32 delay, bool forced = false); + bool CanResumePath(); void StopPath(uint32 DespawnTime = 0, uint32 quest = 0, bool fail = false); void EndPath(bool fail = false); void ResumePath(); diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 523a644dec3..f55215096f8 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1459,7 +1459,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; // Set the timer to 1 ms so the path will be resumed on next update loop - ENSURE_AI(SmartAI, me->AI())->SetWPPauseTimer(1); + if (ENSURE_AI(SmartAI, me->AI())->CanResumePath()) + ENSURE_AI(SmartAI, me->AI())->SetWPPauseTimer(1); break; } case SMART_ACTION_SET_ORIENTATION: |