diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index ecdf6a514..a7daf67cc 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -720,7 +720,7 @@ void GameObject::Respawn() } } -bool GameObject::ActivateToQuest(Player *pTarget)const +bool GameObject::ActivateToQuest(Player *pTarget) const { // if GO is ReqCreatureOrGoN for quest if (pTarget->HasQuestForGO(GetEntry())) @@ -812,7 +812,6 @@ void GameObject::SummonLinkedTrapIfAny() GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, GO_ANIMPROGRESS_DEFAULT, GO_STATE_READY)) { delete linkedGO; - linkedGO = NULL; return; } @@ -828,10 +827,15 @@ void GameObject::SummonLinkedTrapIfAny() GetMap()->Add(linkedGO); } -void GameObject::TriggeringLinkedGameObject( uint32 trapEntry, Unit* target) +void GameObject::TriggerLinkedGameObject(Unit* target) { + uint32 trapEntry = GetGOInfo()->GetLinkedGameObjectEntry(); + + if (!trapEntry) + return; + GameObjectInfo const* trapInfo = sGOStorage.LookupEntry(trapEntry); - if(!trapInfo || trapInfo->type!=GAMEOBJECT_TYPE_TRAP) + if (!trapInfo || trapInfo->type != GAMEOBJECT_TYPE_TRAP) return; SpellEntry const* trapSpell = sSpellStore.LookupEntry(trapInfo->trap.spellId); @@ -920,7 +924,7 @@ void GameObject::Use(Unit* user) switch(GetGoType()) { - case GAMEOBJECT_TYPE_DOOR: //0 + case GAMEOBJECT_TYPE_DOOR: // 0 { //doors never really despawn, only reset to default state/flags UseDoorOrButton(); @@ -929,7 +933,7 @@ void GameObject::Use(Unit* user) GetMap()->ScriptsStart(sGameObjectScripts, GetDBTableGUIDLow(), spellCaster, this); return; } - case GAMEOBJECT_TYPE_BUTTON: //1 + case GAMEOBJECT_TYPE_BUTTON: // 1 { //buttons never really despawn, only reset to default state/flags UseDoorOrButton(); @@ -937,13 +941,10 @@ void GameObject::Use(Unit* user) // activate script GetMap()->ScriptsStart(sGameObjectScripts, GetDBTableGUIDLow(), spellCaster, this); - // triggering linked GO - if (uint32 trapEntry = GetGOInfo()->button.linkedTrapId) - TriggeringLinkedGameObject(trapEntry, user); - + TriggerLinkedGameObject(user); return; } - case GAMEOBJECT_TYPE_QUESTGIVER: //2 + case GAMEOBJECT_TYPE_QUESTGIVER: // 2 { if (user->GetTypeId() != TYPEID_PLAYER) return; @@ -958,7 +959,7 @@ void GameObject::Use(Unit* user) return; } - case GAMEOBJECT_TYPE_CHEST: + case GAMEOBJECT_TYPE_CHEST: // 3 { if (user->GetTypeId() != TYPEID_PLAYER) return; @@ -972,10 +973,7 @@ void GameObject::Use(Unit* user) GetMap()->ScriptsStart(sEventScripts, GetGOInfo()->chest.eventId, user, this); } - // triggering linked GO - if (uint32 trapEntry = GetGOInfo()->chest.linkedTrapId) - TriggeringLinkedGameObject(trapEntry, user); - + TriggerLinkedGameObject(user); return; } case GAMEOBJECT_TYPE_GENERIC: // 5 @@ -987,7 +985,7 @@ void GameObject::Use(Unit* user) case GAMEOBJECT_TYPE_TRAP: // 6 { // Currently we do not expect trap code below to be Use() - // directly (except from spell effect). Code here will be called by TriggeringLinkedGameObject. + // directly (except from spell effect). Code here will be called by TriggerLinkedGameObject. // FIXME: when GO casting will be implemented trap must cast spell to target if (uint32 spellId = GetGOInfo()->trap.spellId) @@ -1058,11 +1056,9 @@ void GameObject::Use(Unit* user) player->SetStandState(UNIT_STAND_STATE_SIT_LOW_CHAIR+info->chair.height); return; } - case GAMEOBJECT_TYPE_SPELL_FOCUS: + case GAMEOBJECT_TYPE_SPELL_FOCUS: // 8 { - // triggering linked GO - if (uint32 trapEntry = GetGOInfo()->spellFocus.linkedTrapId) - TriggeringLinkedGameObject(trapEntry, user); + TriggerLinkedGameObject(user); // some may be activated in addition? Conditions for this? (ex: entry 181616) break; @@ -1110,8 +1106,7 @@ void GameObject::Use(Unit* user) } - if (uint32 trapEntry = info->goober.linkedTrapId) - TriggeringLinkedGameObject(trapEntry, user); + TriggerLinkedGameObject(user); SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); SetLootState(GO_ACTIVATED); @@ -1497,7 +1492,7 @@ void GameObject::Use(Unit* user) return; } - Spell *spell = new Spell(spellCaster, spellInfo, triggered,GetGUID()); + Spell *spell = new Spell(spellCaster, spellInfo, triggered, GetObjectGuid()); // spell target is user of GO SpellCastTargets targets; diff --git a/src/game/GameObject.h b/src/game/GameObject.h index b6e69f7b1..d04702a23 100644 --- a/src/game/GameObject.h +++ b/src/game/GameObject.h @@ -695,7 +695,7 @@ class MANGOS_DLL_SPEC GameObject : public WorldObject bool IsFriendlyTo(Unit const* unit) const; void SummonLinkedTrapIfAny(); - void TriggeringLinkedGameObject( uint32 trapEntry, Unit* target); + void TriggerLinkedGameObject(Unit* target); bool isVisibleForInState(Player const* u, WorldObject const* viewPoint, bool inVisibleList) const; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index f16edbed9..69bce9195 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 "10901" + #define REVISION_NR "10902" #endif // __REVISION_NR_H__