Core/Spell: fix LoS checks for GameObject spells

Closes #21580
This commit is contained in:
ariel-
2018-03-10 20:25:50 -03:00
committed by Ovahlord
parent d34eb1a276
commit dcd017bbad
2 changed files with 18 additions and 0 deletions

View File

@@ -456,6 +456,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)

View File

@@ -7398,6 +7398,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;