From 0e1997f746911fef71624f8fe50800c75a9cdb3a Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Mon, 13 Apr 2009 01:03:16 +0400 Subject: [PATCH] [7657] Implement function for access to gameobject owned by unit and created by some spell. --- src/game/Unit.cpp | 15 ++++++++++++--- src/game/Unit.h | 11 ++++++++--- src/shared/revision_nr.h | 2 +- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 66b18d0c9..832d8dc7b 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2916,7 +2916,7 @@ void Unit::_UpdateSpells( uint32 time ) if(!m_gameObj.empty()) { - std::list::iterator ite1, dnext1; + GameObjectList::iterator ite1, dnext1; for (ite1 = m_gameObj.begin(); ite1 != m_gameObj.end(); ite1 = dnext1) { dnext1 = ite1; @@ -4059,6 +4059,15 @@ DynamicObject * Unit::GetDynObject(uint32 spellId) return NULL; } +GameObject* Unit::GetGameObject(uint32 spellId) const +{ + for (GameObjectList::const_iterator i = m_gameObj.begin(); i != m_gameObj.end();) + if ((*i)->GetSpellId() == spellId) + return *i; + + return NULL; +} + void Unit::AddGameObject(GameObject* gameObj) { assert(gameObj && gameObj->GetOwnerGUID()==0); @@ -4109,7 +4118,7 @@ void Unit::RemoveGameObject(uint32 spellid, bool del) { if(m_gameObj.empty()) return; - std::list::iterator i, next; + GameObjectList::iterator i, next; for (i = m_gameObj.begin(); i != m_gameObj.end(); i = next) { next = i; @@ -4132,7 +4141,7 @@ void Unit::RemoveGameObject(uint32 spellid, bool del) void Unit::RemoveAllGameObjects() { // remove references to unit - for(std::list::iterator i = m_gameObj.begin(); i != m_gameObj.end();) + for(GameObjectList::iterator i = m_gameObj.begin(); i != m_gameObj.end();) { (*i)->SetOwnerGUID(0); (*i)->SetRespawnTime(0); diff --git a/src/game/Unit.h b/src/game/Unit.h index 19f54195c..e3ea874e7 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1320,16 +1320,20 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void SetNativeDisplayId(uint32 modelId) { SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, modelId); } void setTransForm(uint32 spellid) { m_transform = spellid;} uint32 getTransForm() const { return m_transform;} + + DynamicObject* GetDynObject(uint32 spellId, uint32 effIndex); + DynamicObject* GetDynObject(uint32 spellId); void AddDynObject(DynamicObject* dynObj); void RemoveDynObject(uint32 spellid); void RemoveDynObjectWithGUID(uint64 guid) { m_dynObjGUIDs.remove(guid); } void RemoveAllDynObjects(); + + GameObject* GetGameObject(uint32 spellId) const; void AddGameObject(GameObject* gameObj); void RemoveGameObject(GameObject* gameObj, bool del); void RemoveGameObject(uint32 spellid, bool del); void RemoveAllGameObjects(); - DynamicObject *GetDynObject(uint32 spellId, uint32 effIndex); - DynamicObject *GetDynObject(uint32 spellId); + uint32 CalculateDamage(WeaponAttackType attType, bool normalized); float GetAPMultiplier(WeaponAttackType attType, bool normalized); void ModifyAuraState(AuraState flag, bool apply); @@ -1455,7 +1459,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject typedef std::list DynObjectGUIDs; DynObjectGUIDs m_dynObjGUIDs; - std::list m_gameObj; + typedef std::list GameObjectList; + GameObjectList m_gameObj; bool m_isSorted; uint32 m_transform; uint32 m_removedAuras; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index a17c844ea..a9dbed3fd 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7656" + #define REVISION_NR "7657" #endif // __REVISION_NR_H__