diff options
author | Killyana <morphone1@gmail.com> | 2015-11-08 16:54:58 +0100 |
---|---|---|
committer | Carbenium <carbenium@outlook.com> | 2015-11-09 18:10:46 +0100 |
commit | 7e0a61c70b1178d4c952aa19b832d412169daf65 (patch) | |
tree | a4153e67735e59dd919ef1de1f5acfd6bd0bc891 /src | |
parent | dfc8ea0ad5439cbe395cc4b1df3689f3f3928d2e (diff) |
Merge pull request #15022 from robinsch/GOdespawn
SmartAI: Possibility to despawn object with SMART_ACTION_FORCE_DESPAWN
(cherry picked from commit 90c4304f1eef4994f5a0e67a2dfa16210e37450b)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index e61bb0d229b..56dcbfd38fb 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1048,16 +1048,21 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { - if (!IsCreature(*itr)) - continue; - - if ((*itr)->ToUnit()->IsAlive() && IsSmart((*itr)->ToCreature())) + if (Creature* target = (*itr)->ToCreature()) { - ENSURE_AI(SmartAI, (*itr)->ToCreature()->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick - ENSURE_AI(SmartAI, (*itr)->ToCreature()->AI())->StartDespawn(); + if (target->IsAlive() && IsSmart(target)) + { + ENSURE_AI(SmartAI, target->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick + ENSURE_AI(SmartAI, target->AI())->StartDespawn(); + } + else + target->DespawnOrUnsummon(e.action.forceDespawn.delay); + } + else if (GameObject* goTarget = (*itr)->ToGameObject()) + { + if (IsSmartGO(goTarget)) + goTarget->SetRespawnTime(e.action.forceDespawn.delay + 1); } - else - (*itr)->ToCreature()->DespawnOrUnsummon(e.action.forceDespawn.delay); } delete targets; |