diff --git a/Source/Game/Entities/GameObject/GameObject.cs b/Source/Game/Entities/GameObject/GameObject.cs index 126116cc2..5e06d0a89 100644 --- a/Source/Game/Entities/GameObject/GameObject.cs +++ b/Source/Game/Entities/GameObject/GameObject.cs @@ -337,6 +337,19 @@ namespace Game.Entities if (map.Is25ManRaid()) loot.maxDuplicates = 3; + uint linkedEntry = GetGoInfo().GetLinkedGameObjectEntry(); + if (linkedEntry != 0) + { + GameObject linkedGO = new GameObject(); + if (linkedGO.Create(linkedEntry, map, phaseMask, pos, rotation, 255, GameObjectState.Ready)) + { + SetLinkedTrap(linkedGO); + map.AddToMap(linkedGO); + } + else + linkedGO.Dispose(); + } + return true; } @@ -2347,7 +2360,7 @@ namespace Game.Entities } public void SetLinkedTrap(GameObject linkedTrap) { m_linkedTrap = linkedTrap.GetGUID(); } - GameObject GetLinkedTrap() + public GameObject GetLinkedTrap() { return ObjectAccessor.GetGameObject(this, m_linkedTrap); } diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 34c28d363..8849571af 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -2904,30 +2904,18 @@ namespace Game.Spells { Battleground bg = player.GetBattleground(); if (bg) - bg.SetDroppedFlagGUID(pGameObj.GetGUID(), (int)(player.GetTeam() == Team.Alliance ? TeamId.Horde : TeamId.Alliance)); + bg.SetDroppedFlagGUID(pGameObj.GetGUID(), (player.GetTeam() == Team.Alliance ? TeamId.Horde : TeamId.Alliance)); } } - uint linkedEntry = pGameObj.GetGoInfo().GetLinkedGameObjectEntry(); - if (linkedEntry != 0) + GameObject linkedTrap = pGameObj.GetLinkedTrap(); + if (linkedTrap) { - GameObject linkedGO = new GameObject(); - if (linkedGO.Create(linkedEntry, map, m_caster.GetPhaseMask(), new Position(x, y, z, target.GetOrientation()), rotation, 255, GameObjectState.Ready)) - { - pGameObj.SetLinkedTrap(linkedGO); + linkedTrap.CopyPhaseFrom(m_caster); + linkedTrap.SetRespawnTime(duration > 0 ? duration / Time.InMilliseconds : 0); + linkedTrap.SetSpellId(m_spellInfo.Id); - linkedGO.CopyPhaseFrom(m_caster); - - linkedGO.SetRespawnTime(duration > 0 ? duration / Time.InMilliseconds : 0); - linkedGO.SetSpellId(m_spellInfo.Id); - - ExecuteLogEffectSummonObject(effIndex, linkedGO); - - // Wild object not have owner and check clickable by players - map.AddToMap(linkedGO); - } - else - linkedGO.Dispose(); + ExecuteLogEffectSummonObject(effIndex, linkedTrap); } } @@ -4652,28 +4640,15 @@ namespace Game.Spells Log.outDebug(LogFilter.Spells, "AddObject at SpellEfects.cpp EffectTransmitted"); cMap.AddToMap(pGameObj); - uint linkedEntry = pGameObj.GetGoInfo().GetLinkedGameObjectEntry(); - if (linkedEntry != 0) + GameObject linkedTrap = pGameObj.GetLinkedTrap(); + if (linkedTrap != null) { - GameObject linkedGO = new GameObject(); - if (linkedGO.Create(linkedEntry, cMap, m_caster.GetPhaseMask(), pos, rotation, 255, GameObjectState.Ready)) - { - pGameObj.SetLinkedTrap(linkedGO); + linkedTrap.CopyPhaseFrom(m_caster); + linkedTrap.SetRespawnTime(duration > 0 ? duration / Time.InMilliseconds : 0); + linkedTrap.SetSpellId(m_spellInfo.Id); + linkedTrap.SetOwnerGUID(m_caster.GetGUID()); - linkedGO.CopyPhaseFrom(m_caster); - - linkedGO.SetRespawnTime(duration > 0 ? duration / Time.InMilliseconds : 0); - linkedGO.SetSpellId(m_spellInfo.Id); - linkedGO.SetOwnerGUID(m_caster.GetGUID()); - ExecuteLogEffectSummonObject(effIndex, linkedGO); - - linkedGO.GetMap().AddToMap(linkedGO); - } - else - { - linkedGO = null; - return; - } + ExecuteLogEffectSummonObject(effIndex, linkedTrap); } }