Очень хорошо для проверки нужных спелов подходит атрибут SPELL_ATTR_EX_UNK27
Код:
@@ -4420,11 +4420,19 @@ SpellCastResult Spell::CheckCast(bool strict)
}
// check if target is in combat
if (non_caster_target && m_spellInfo->HasAttribute(SPELL_ATTR_EX_NOT_IN_COMBAT_TARGET) && target->isInCombat())
return SPELL_FAILED_TARGET_AFFECTING_COMBAT;
+
+ // check melee spell that the target was in front caster
+ if (m_spellInfo->HasAttribute(SPELL_ATTR_EX_UNK9) || m_spellInfo->HasAttribute(SPELL_ATTR_EX_UNK27))
+ {
+ if (!m_caster->HasInArc(M_PI_F, target))
+ return SPELL_FAILED_UNIT_NOT_INFRONT;
+ }
}
+
// zone check
uint32 zone, area;
m_caster->GetZoneAndAreaId(zone, area);
SpellCastResult locRes = sSpellMgr.GetSpellAllowedInLocationError(m_spellInfo, m_caster->GetMapId(), zone, area,