Changeset 69

Show
Ignore:
Timestamp:
11/19/08 13:31:22 (17 years ago)
Author:
yumileroy
Message:

[svn] Add Unit::IsWithinCombatDist? function to check melee range and spell range (now range is related to the attacker's bounding_radius and target's combat_reach, not sure if both should be combat_reach).

Original author: megamage
Date: 2008-10-19 14:42:12-05:00

Location:
trunk/src
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/bindings/scripts/include/sc_creature.cpp

    r44 r69  
    134134    { 
    135135        //If we are within range melee the target 
    136         if( m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE)) 
     136        if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE)) 
    137137        { 
    138138            m_creature->AttackerStateUpdate(m_creature->getVictim()); 
  • trunk/src/game/Player.cpp

    r44 r69  
    10571057            if (isAttackReady(BASE_ATTACK)) 
    10581058            { 
    1059                 if(!IsWithinDistInMap(pVictim, pldistance)) 
     1059                if(!IsWithinCombatDist(pVictim, pldistance)) 
    10601060                { 
    10611061                    setAttackTimer(BASE_ATTACK,100); 
     
    10941094            if ( haveOffhandWeapon() && isAttackReady(OFF_ATTACK)) 
    10951095            { 
    1096                 if(!IsWithinDistInMap(pVictim, pldistance)) 
     1096                if(!IsWithinCombatDist(pVictim, pldistance)) 
    10971097                { 
    10981098                    setAttackTimer(OFF_ATTACK,100); 
  • trunk/src/game/Spell.cpp

    r55 r69  
    43384338    { 
    43394339        // distance from target center in checks 
    4340         float dist = m_caster->GetDistance(target->GetPositionX(),target->GetPositionY(),target->GetPositionZ()); 
    4341         if(dist > max_range) 
     4340        if(!m_caster->IsWithinCombatDist(target, max_range)) 
    43424341            return SPELL_FAILED_OUT_OF_RANGE;               //0x5A; 
    4343         if(dist < min_range) 
     4342        if(min_range && m_caster->IsWithinCombatDist(target, min_range)) // skip this check if min_range = 0 
    43444343            return SPELL_FAILED_TOO_CLOSE; 
    43454344        if( m_caster->GetTypeId() == TYPEID_PLAYER && 
  • trunk/src/game/Unit.cpp

    r63 r69  
    407407        reach = 1.0f; 
    408408    return IsWithinDistInMap(pVictim, reach); 
     409} 
     410 
     411bool Unit::IsWithinCombatDist(Unit *obj, float dist2compare) const 
     412{ 
     413    if (!obj || !IsInMap(obj)) return false; 
     414 
     415    float dx = GetPositionX() - obj->GetPositionX(); 
     416    float dy = GetPositionY() - obj->GetPositionY(); 
     417    float dz = GetPositionZ() - obj->GetPositionZ(); 
     418    float distsq = dx*dx + dy*dy + dz*dz; 
     419    //not sure here, or combatreach + combatreach? 
     420    float sizefactor = GetObjectSize() + obj->GetFloatValue(UNIT_FIELD_COMBATREACH); 
     421    float maxdist = dist2compare + sizefactor; 
     422 
     423    return distsq < maxdist * maxdist; 
    409424} 
    410425 
  • trunk/src/game/Unit.h

    r61 r69  
    719719        bool haveOffhandWeapon() const; 
    720720        bool canReachWithAttack(Unit *pVictim) const; 
     721        bool IsWithinCombatDist(Unit *obj, float dist2compare) const; 
    721722        uint32 m_extraAttacks; 
    722723