aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRat <none@none>2010-11-03 18:33:47 +0100
committerRat <none@none>2010-11-03 18:33:47 +0100
commitc9cf2f059f8f33c3fcb58ad472871515e59df7c3 (patch)
tree13ea4e9262e0b12c78c785450010bfc77d778707
parent4747c5f820ad966a8cf95633ad3b8456ef57c79f (diff)
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
-rwxr-xr-xsrc/server/game/Entities/Creature/Creature.cpp9
-rwxr-xr-xsrc/server/game/Entities/Creature/Creature.h1
2 files changed, 9 insertions, 1 deletions
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<Creature>(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<Creature>
//Formation var
CreatureGroup *m_formation;
+ bool TriggerJustRespawned;
};
class AssistDelayEvent : public BasicEvent