Index: game/Spell.cpp =================================================================== --- game/Spell.cpp (revision 5317) +++ game/Spell.cpp (working copy) @@ -3542,9 +3542,7 @@ if (m_rangedShoot) return SPELL_FAILED_UNIT_NOT_INFRONT; - uint32 original_casttime = GetSpellCastTime(sCastTimesStore.LookupEntry(m_spellInfo->CastingTimeIndex)); - - if (original_casttime!= 0 && !IsPositiveSpell(m_spellInfo->Id) && !IsSingleTargetSpell(m_spellInfo->Id)) + if (!IsPositiveSpell(m_spellInfo->Id) && IsDirectDamageSpell(m_spellInfo->Id)) return SPELL_FAILED_UNIT_NOT_INFRONT; } } Index: game/SpellMgr.cpp =================================================================== --- game/SpellMgr.cpp (revision 5317) +++ game/SpellMgr.cpp (working copy) @@ -417,7 +417,37 @@ return false; return true; } +bool IsDirectDamageSpell(uint32 spellId) +{ + SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId); + if (!spellInfo) + return false; + for (uint32 i=0; i<3; i++) + { + switch(spellInfo->Effect[i]) + { + // Plain Damage + case SPELL_EFFECT_SCHOOL_DAMAGE: + case SPELL_EFFECT_ENVIRONMENTAL_DAMAGE: + // Weapon Based Damage + case SPELL_EFFECT_WEAPON: + case SPELL_EFFECT_WEAPON_DAMAGE: + case SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL: + case SPELL_EFFECT_WEAPON_PERCENT_DAMAGE: + case SPELL_EFFECT_NORMALIZED_WEAPON_DMG: + // Special Damage + case SPELL_EFFECT_MANA_DRAIN: + case SPELL_EFFECT_HEALTH_LEECH: + case SPELL_EFFECT_POWER_BURN: + return true; + default: + break; + } + } + + return false; +} bool IsSingleTargetSpell(uint32 spellId) { SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId); Index: game/SpellMgr.h =================================================================== --- game/SpellMgr.h (revision 5317) +++ game/SpellMgr.h (working copy) @@ -100,6 +100,8 @@ bool IsPositiveEffect(uint32 spellId, uint32 effIndex); bool IsPositiveTarget(uint32 targetA, uint32 targetB); +bool IsDirectDamageSpell(uint32 spellId); + bool IsSingleTargetSpell(uint32 spellId); bool IsSingleTargetSpells(SpellEntry const *spellInfo1, SpellEntry const *spellInfo2);