diff options
Diffstat (limited to 'src/game/Spell.cpp')
| -rw-r--r-- | src/game/Spell.cpp | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 35e5dbd815f..56247e1bcbe 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -4670,19 +4670,35 @@ bool Spell::CanAutoCast(Unit* target) uint8 Spell::CheckRange(bool strict) { - float range_mod; + //float range_mod; // self cast doesn't need range checking -- also for Starshards fix if (m_spellInfo->rangeIndex == 1) return 0; - if (strict) //add radius of caster + // i do not know why we need this + /*if (strict) //add radius of caster range_mod = 1.25; else //add radius of caster and ~5 yds "give" - range_mod = 6.25; + range_mod = 6.25;*/ SpellRangeEntry const* srange = sSpellRangeStore.LookupEntry(m_spellInfo->rangeIndex); - float max_range = GetSpellMaxRange(srange) + range_mod; - float min_range = GetSpellMinRange(srange); + float max_range, min_range; + float range_type = GetSpellRangeType(srange); + if(range_type == SPELL_RANGE_DEFAULT) + { + max_range = GetSpellMaxRange(srange);// + range_mod; + min_range = GetSpellMinRange(srange); + } + else if(range_type == SPELL_RANGE_MELEE) + { + max_range = ATTACK_DISTANCE; + min_range = GetSpellMinRange(srange); + } + else + { + max_range = GetSpellMaxRange(srange);// + range_mod; + min_range = ATTACK_DISTANCE; + } if(Player* modOwner = m_caster->GetSpellModOwner()) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, max_range, this); @@ -4694,8 +4710,10 @@ uint8 Spell::CheckRange(bool strict) // distance from target center in checks if(!m_caster->IsWithinCombatDist(target, max_range)) return SPELL_FAILED_OUT_OF_RANGE; //0x5A; + if(min_range && m_caster->IsWithinCombatDist(target, min_range)) // skip this check if min_range = 0 return SPELL_FAILED_TOO_CLOSE; + if( m_caster->GetTypeId() == TYPEID_PLAYER && (m_spellInfo->FacingCasterFlags & SPELL_FACING_FLAG_INFRONT) && !m_caster->HasInArc( M_PI, target ) ) return SPELL_FAILED_UNIT_NOT_INFRONT; |
