aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/AI/SmartScripts
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-02-14 02:23:55 +0100
committerShauren <shauren.trinity@gmail.com>2021-06-20 22:10:08 +0200
commit168be492f5924d306a90e7f8dfd86a6c547da3d7 (patch)
treea7b44f58a5debcc2ff3cea489db836af7dcd72dd /src/server/game/AI/SmartScripts
parent19ed9c971f3a016ac4760149610a86724e04f1f6 (diff)
Entities/GO: Add forceRespawnTimer support to DespawnOrUnsummon. Use it in SAI.
(cherry picked from commit 264d4e1d30debcf6feacee3d29982875672a7bbe)
Diffstat (limited to 'src/server/game/AI/SmartScripts')
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp3
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h5
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp18
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h2
4 files changed, 10 insertions, 18 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 364013eaea3..c617fc6b315 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -518,7 +518,6 @@ void SmartAI::InitializeAI()
GetScript()->OnInitialize(me);
mDespawnTime = 0;
- mRespawnTime = 0;
mDespawnState = 0;
_escortState = SMART_ESCORT_NONE;
@@ -962,7 +961,7 @@ void SmartAI::UpdateDespawn(uint32 diff)
mDespawnState++;
}
else
- me->DespawnOrUnsummon(0, Seconds(mRespawnTime));
+ me->DespawnOrUnsummon();
}
else
mDespawnTime -= diff;
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 54266d065cd..4871c0ff0ce 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -178,13 +178,11 @@ class TC_GAME_API SmartAI : public CreatureAI
void QuestReward(Player* player, Quest const* quest, LootItemType type, uint32 opt) override;
void OnGameEvent(bool start, uint16 eventId) override;
- void SetDespawnTime (uint32 t, uint32 r = 0)
+ void SetDespawnTime (uint32 t)
{
mDespawnTime = t;
- mRespawnTime = r;
mDespawnState = t ? 1 : 0;
}
-
void StartDespawn() { mDespawnState = 2; }
void OnSpellClick(Unit* clicker, bool& result) override;
@@ -233,7 +231,6 @@ class TC_GAME_API SmartAI : public CreatureAI
uint32 mInvincibilityHpLevel;
uint32 mDespawnTime;
- uint32 mRespawnTime;
uint32 mDespawnState;
// Vehicle conditions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 976491c65be..87de7423f74 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -1043,22 +1043,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 a5166ea0463..424e1c92f2f 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -810,7 +810,7 @@ struct SmartAction
struct
{
uint32 delay;
- uint32 respawn;
+ uint32 forceRespawnTimer;
} forceDespawn;
struct