aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/AI/SmartScripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/AI/SmartScripts')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp18
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h1
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