diff options
author | QAston <none@none> | 2010-08-02 18:05:07 +0200 |
---|---|---|
committer | QAston <none@none> | 2010-08-02 18:05:07 +0200 |
commit | 18dd17730876dd41c38452a1c99b1dd61c9a0f5e (patch) | |
tree | 6467069b8f23d3a6a5b723cba619735f484e6c44 | |
parent | 027ca9b62a260a8a10811448b6346b577341ca55 (diff) |
*Search for aura caster in our out of world in Aura::UnregisterSingleTarget().
--HG--
branch : trunk
-rw-r--r-- | src/server/game/Globals/ObjectAccessor.h | 15 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 2 |
3 files changed, 18 insertions, 2 deletions
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 8134bff2c19..4bdef49e2b2 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -98,6 +98,21 @@ class ObjectAccessor // TODO: override these template functions for each holder type and add assertions + template<class T> static T* GetObjectInOrOutOfWorld(uint64 guid, T* /*typeSpecifier*/) + { + return HashMapHolder<T>::Find(guid); + } + static Unit* GetObjectInOrOutOfWorld(uint64 guid, Unit* /*typeSpecifier*/) + { + if (IS_PLAYER_GUID(guid)) + return (Unit*)GetObjectInOrOutOfWorld(guid, (Player*)NULL); + + if (IS_PET_GUID(guid)) + return (Unit*)GetObjectInOrOutOfWorld(guid, (Pet*)NULL); + + return (Unit*)GetObjectInOrOutOfWorld(guid, (Creature*)NULL); + } + // returns object if is in world template<class T> static T* GetObjectInWorld(uint64 guid, T* /*typeSpecifier*/) { diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index b68f3cfa79b..1ec2320da9b 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -764,7 +764,8 @@ bool Aura::IsVisible() const void Aura::UnregisterSingleTarget() { ASSERT(m_isSingleTarget); - Unit * caster = GetCaster(); + Unit * caster = ObjectAccessor::GetObjectInOrOutOfWorld(GetCasterGUID(), (Unit*)NULL);//GetCaster(); + assert(caster); caster->GetSingleCastAuras().remove(this); SetIsSingleTarget(false); } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 1f3f2883d09..eef6783330f 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -264,7 +264,7 @@ bool SpellCastTargets::read (WorldPacket * data, Unit *caster) if (!(m_targetMask & TARGET_FLAG_SOURCE_LOCATION)) m_srcPos.Relocate(caster); - if (!(m_targetMask & TARGET_FLAG_DEST_LOCATION) + if (!(m_targetMask & TARGET_FLAG_DEST_LOCATION)) m_dstPos.Relocate(caster); // find real units/GOs |