4234 | | if( !m_IsTriggeredSpell && m_caster->GetTypeId() == TYPEID_PLAYER && |
4235 | | !IsPositiveSpell(m_spellInfo->Id) && !m_caster->HasInArc( M_PI, target ) ) |
4236 | | { |
4237 | | // Spell-Family Related Checks |
4238 | | switch (m_spellInfo->SpellFamilyName) |
4239 | | { |
4240 | | case SPELLFAMILY_PRIEST: |
4241 | | { |
4242 | | // Shadow Word: Death, castable without facing |
4243 | | if (m_spellInfo->SpellFamilyFlags & 0x200000000LL) |
4244 | | return 0; // this is not TARGET_FLAG_DEST_LOCATION so we can return safely |
4245 | | break; |
4246 | | } |
4247 | | case SPELLFAMILY_PALADIN: |
4248 | | { |
4249 | | // Holy Shock, require facing |
4250 | | if (m_spellInfo->SpellFamilyFlags & 0x200000LL) |
4251 | | return SPELL_FAILED_UNIT_NOT_INFRONT; |
4252 | | break; |
4253 | | } |
4254 | | case SPELLFAMILY_WARRIOR: |
4255 | | { |
4256 | | // Charge, require facing |
4257 | | if (m_spellInfo->SpellFamilyFlags & 1) |
4258 | | return SPELL_FAILED_UNIT_NOT_INFRONT; |
4259 | | break; |
4260 | | } |
4261 | | } |
4262 | | |
4263 | | // Ranged Weapon |
4264 | | if (IsRangedSpell()) |
4265 | | return SPELL_FAILED_UNIT_NOT_INFRONT; |
4266 | | |
4267 | | // Melee Combat |
4268 | | if (m_spellInfo->rangeIndex == 2) |
4269 | | return SPELL_FAILED_UNIT_NOT_INFRONT; |
4270 | | |
4271 | | // Missile Effect |
4272 | | if (m_spellInfo->speed > 0) |
4273 | | return SPELL_FAILED_UNIT_NOT_INFRONT; |
4274 | | |
4275 | | // Channeled Spells need facing |
4276 | | if (IsChanneledSpell(m_spellInfo)) |
4277 | | return SPELL_FAILED_UNIT_NOT_INFRONT; |
4278 | | |
4279 | | // Direct Damage and charge effects |
4280 | | for (uint8 i=0;i<3;++i) |
4281 | | { |
4282 | | if (m_spellInfo->Effect[i] == SPELL_EFFECT_SCHOOL_DAMAGE || |
4283 | | m_spellInfo->Effect[i] == SPELL_EFFECT_POWER_BURN || |
4284 | | m_spellInfo->Effect[i] == SPELL_EFFECT_HEALTH_LEECH || |
4285 | | m_spellInfo->Effect[i] == SPELL_EFFECT_CHARGE) |
4286 | | return SPELL_FAILED_UNIT_NOT_INFRONT; |
4287 | | } |
4288 | | } |
| 4241 | if( m_caster->GetTypeId() == TYPEID_PLAYER && |
| 4242 | (m_spellInfo->FacingCasterFlags & SPELL_FACING_FLAG_INFRONT) && !m_caster->HasInArc( M_PI, target ) ) |
| 4243 | return SPELL_FAILED_UNIT_NOT_INFRONT; |