mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
Core/Spell: fix LoS checks for GameObject spells
Closes #21580
(cherry picked from commit f7869ad38b)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user