diff options
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/game/Entities/GameObject/GameObjectData.h | 16 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 5 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index 89ee6f97307..97689f9d63e 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -835,6 +835,22 @@ struct GameObjectTemplate } } + uint32 GetRequireLOS() const + { + switch (type) + { + case GAMEOBJECT_TYPE_BUTTON: return button.requireLOS; + case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.requireLOS; + case GAMEOBJECT_TYPE_CHEST: return chest.requireLOS; + case GAMEOBJECT_TYPE_TRAP: return trap.requireLOS; + case GAMEOBJECT_TYPE_GOOBER: return goober.requireLOS; + case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.requireLOS; + case GAMEOBJECT_TYPE_NEW_FLAG: return newflag.requireLOS; + case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.requireLOS; + default: return 0; + } + } + uint32 GetLockId() const { switch (type) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 7fa43bfb3eb..bc5f090bb38 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -7300,6 +7300,11 @@ bool Spell::CheckEffectTarget(Unit const* target, SpellEffectInfo const& spellEf if (m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, nullptr, SPELL_DISABLE_LOS)) return true; + // check if gameobject ignores LOS + if (GameObject const* gobCaster = m_caster->ToGameObject()) + if (!gobCaster->GetGOInfo()->GetRequireLOS()) + return true; + // if spell is triggered, need to check for LOS disable on the aura triggering it and inherit that behaviour if (IsTriggered() && m_triggeredByAuraSpell && (m_triggeredByAuraSpell->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_triggeredByAuraSpell->Id, nullptr, SPELL_DISABLE_LOS))) return true; |