mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 15:58:04 +00:00
feat(Core/SAI): implement new removeObjectFromWorld param for SMART_A… (#19275)
feat(Core/SAI): implement new removeObjectFromWorld param for SMART_ACTION_FORCE_DESPAWN
This commit is contained in:
@@ -1272,22 +1272,29 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
|||||||
{
|
{
|
||||||
for (WorldObject* target : targets)
|
for (WorldObject* target : targets)
|
||||||
{
|
{
|
||||||
Milliseconds despawnDelay(e.action.forceDespawn.delay);
|
if (e.action.forceDespawn.removeObjectFromWorld)
|
||||||
|
{
|
||||||
|
if (e.action.forceDespawn.delay || e.action.forceDespawn.forceRespawnTimer)
|
||||||
|
LOG_ERROR("sql.sql", "SmartScript: SMART_ACTION_FORCE_DESPAWN has removeObjectFromWorld set. delay and forceRespawnTimer ignored.");
|
||||||
|
|
||||||
// Wait at least one world update tick before despawn, so it doesn't break linked actions.
|
if (Creature* creature = target->ToCreature())
|
||||||
if (despawnDelay <= 0ms)
|
creature->AddObjectToRemoveList();
|
||||||
{
|
else if (GameObject* go = target->ToGameObject())
|
||||||
despawnDelay = 1ms;
|
go->AddObjectToRemoveList();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Milliseconds despawnDelay(e.action.forceDespawn.delay);
|
||||||
|
|
||||||
Seconds forceRespawnTimer(e.action.forceDespawn.forceRespawnTimer);
|
// Wait at least one world update tick before despawn, so it doesn't break linked actions.
|
||||||
if (Creature* creature = target->ToCreature())
|
if (despawnDelay <= 0ms)
|
||||||
{
|
despawnDelay = 1ms;
|
||||||
creature->DespawnOrUnsummon(despawnDelay, forceRespawnTimer);
|
|
||||||
}
|
Seconds forceRespawnTimer(e.action.forceDespawn.forceRespawnTimer);
|
||||||
else if (GameObject* go = target->ToGameObject())
|
if (Creature* creature = target->ToCreature())
|
||||||
{
|
creature->DespawnOrUnsummon(despawnDelay, forceRespawnTimer);
|
||||||
go->DespawnOrUnsummon(despawnDelay, forceRespawnTimer);
|
else if (GameObject* go = target->ToGameObject())
|
||||||
|
go->DespawnOrUnsummon(despawnDelay, forceRespawnTimer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -978,6 +978,7 @@ struct SmartAction
|
|||||||
{
|
{
|
||||||
uint32 delay;
|
uint32 delay;
|
||||||
uint32 forceRespawnTimer;
|
uint32 forceRespawnTimer;
|
||||||
|
SAIBool removeObjectFromWorld;
|
||||||
} forceDespawn;
|
} forceDespawn;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
|||||||
Reference in New Issue
Block a user