From c9cf2f059f8f33c3fcb58ad472871515e59df7c3 Mon Sep 17 00:00:00 2001 From: Rat Date: Wed, 3 Nov 2010 18:33:47 +0100 Subject: Core/AI: delay all AI()->Respawn() hooks by 1 server tick, this way when creatures are just got created they will successfully find other objects in scripts at spawn time --HG-- branch : trunk --- src/server/game/Entities/Creature/Creature.cpp | 9 ++++++++- src/server/game/Entities/Creature/Creature.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 16a84e533ad..dce2c968a84 100755 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -161,6 +161,7 @@ m_formation(NULL) m_CombatDistance = 0;//MELEE_RANGE; ResetLootMode(); // restore default loot mode + TriggerJustRespawned = false; } Creature::~Creature() @@ -437,6 +438,12 @@ void Creature::Update(uint32 diff) else m_GlobalCooldown -= diff; + if (IsAIEnabled && TriggerJustRespawned) + { + TriggerJustRespawned = false; + AI()->JustRespawned(); + } + switch(m_deathState) { case JUST_ALIVED: @@ -1630,7 +1637,7 @@ void Creature::Respawn(bool force) //Call AI respawn virtual function if (IsAIEnabled) - AI()->JustRespawned(); + TriggerJustRespawned = true;//delay event to next tick so all creatures are created on the map before processing uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr.IsPartOfAPool(GetDBTableGUIDLow()) : 0; if (poolid) diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 5700c161e90..6e4290e08d5 100755 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -732,6 +732,7 @@ class Creature : public Unit, public GridObject //Formation var CreatureGroup *m_formation; + bool TriggerJustRespawned; }; class AssistDelayEvent : public BasicEvent -- cgit v1.2.3