aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/GameObject/GameObjectData.h13
-rw-r--r--src/server/game/Spells/Spell.cpp5
2 files changed, 18 insertions, 0 deletions
diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h
index 35bb6ec6aa2..b5b2262c410 100644
--- a/src/server/game/Entities/GameObject/GameObjectData.h
+++ b/src/server/game/Entities/GameObject/GameObjectData.h
@@ -445,6 +445,19 @@ struct GameObjectTemplate
}
}
+ bool IsIgnoringLOSChecks() const
+ {
+ switch (type)
+ {
+ case GAMEOBJECT_TYPE_BUTTON: return button.losOK == 0;
+ case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.losOK == 0;
+ case GAMEOBJECT_TYPE_CHEST: return chest.losOK == 0;
+ case GAMEOBJECT_TYPE_GOOBER: return goober.losOK == 0;
+ case GAMEOBJECT_TYPE_FLAGSTAND: return flagstand.losOK == 0;
+ default: return false;
+ }
+ }
+
uint32 GetLockId() const
{
switch (type)
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 58bc720c642..9f49c556baf 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -7121,6 +7121,11 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff, Position const* lo
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()->IsIgnoringLOSChecks())
+ 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;