Show
Ignore:
Timestamp:
11/21/08 08:48:50 (17 years ago)
Author:
yumileroy
Message:

*Fix the bug that updatepacket is not sent to players.
*TODO: move creature::update to map::update. This requires that move activeobjectlist to map.

Original author: megamage
Date: 2008-11-20 20:28:17-06:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/GridNotifiers.h

    r233 r266  
    699699    // Creature checks 
    700700 
    701     class InAttackDistanceFromAnyHostileCreatureCheck 
    702     { 
    703         public: 
    704             explicit InAttackDistanceFromAnyHostileCreatureCheck(Unit* funit) : i_funit(funit) {} 
    705             bool operator()(Creature* u) 
    706             { 
    707                 if(u->isAlive() && u->IsHostileTo(i_funit) && i_funit->IsWithinDistInMap(u, u->GetAttackDistance(i_funit))) 
    708                     return true; 
    709  
    710                 return false; 
    711             } 
    712         private: 
    713             Unit* const i_funit; 
     701    class NearestHostileUnitInAttackDistanceCheck 
     702    { 
     703        public: 
     704            explicit NearestHostileUnitInAttackDistanceCheck(Creature* creature, float dist = 0) : m_creature(creature)  
     705            { 
     706                m_range = (dist == 0 ? 9999 : dist); 
     707                m_force = (dist == 0 ? false : true); 
     708            } 
     709            bool operator()(Unit* u) 
     710            { 
     711                if(!u->isAlive() || !m_creature->IsHostileTo(u)) 
     712                    return false; 
     713 
     714                float dist; 
     715                if(m_force) dist = m_range; 
     716                else 
     717                { 
     718                    dist = m_creature->GetAttackDistance(u); 
     719                    if(dist > m_range) dist = m_range; 
     720                } 
     721                if(!m_creature->IsWithinDistInMap(u, dist)) 
     722                    return false; 
     723 
     724                if(!m_creature->canSeeOrDetect(u, true, false)) 
     725                    return false; 
     726 
     727                m_range = m_creature->GetDistance(u); 
     728                return true; 
     729            } 
     730            float GetLastRange() const { return m_range; } 
     731        private: 
     732            Creature* const m_creature; 
     733            float m_range; 
     734            bool m_force; 
     735            NearestHostileUnitInAttackDistanceCheck(NearestHostileUnitInAttackDistanceCheck const&); 
    714736    }; 
    715737