diff options
Diffstat (limited to 'src/server/game/AI/SmartScripts')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 1 |
2 files changed, 8 insertions, 11 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index b3e7c9d5e5c..2bef3d3ef7b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1032,22 +1032,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u case SMART_ACTION_FORCE_DESPAWN: { // there should be at least a world update tick before despawn, to avoid breaking linked actions - int32 const respawnDelay = std::max<int32>(e.action.forceDespawn.delay, 1); + Milliseconds despawnDelay(e.action.forceDespawn.delay); + if (despawnDelay <= 0ms) + despawnDelay = 1ms; + + Seconds forceRespawnTimer(e.action.forceDespawn.forceRespawnTimer); for (WorldObject* target : targets) { if (Creature* creature = target->ToCreature()) - { - if (SmartAI* smartAI = CAST_AI(SmartAI, creature->AI())) - { - smartAI->SetDespawnTime(respawnDelay); - smartAI->StartDespawn(); - } - else - creature->DespawnOrUnsummon(respawnDelay); - } + creature->DespawnOrUnsummon(despawnDelay, forceRespawnTimer); else if (GameObject* goTarget = target->ToGameObject()) - goTarget->DespawnOrUnsummon(Milliseconds(respawnDelay)); + goTarget->DespawnOrUnsummon(despawnDelay, forceRespawnTimer); } break; } diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 15ca8f11f7f..2eeeece124c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -776,6 +776,7 @@ struct SmartAction struct { uint32 delay; + uint32 forceRespawnTimer; } forceDespawn; struct |
