Changeset 118 for trunk

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

[svn] Make mobs scatter around in melee attack. Patch provided by smellbee.
Fix Join Instance Can Enter while Encounter is in Progress. Patch provided by mknjc.

Original author: megamage
Date: 2008-10-27 08:00:33-05:00

Location:
trunk/src
Files:
4 modified

Legend:

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

    r113 r118  
    9393        { 
    9494            //If we are within range melee the target 
    95             if (m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE)) 
     95            if (m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE)) 
    9696            { 
    9797                m_creature->AttackerStateUpdate(m_creature->getVictim()); 
     
    149149    { 
    150150        //If we are within range melee the target 
    151         if (m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE)) 
     151        if (m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE)) 
    152152        { 
    153153            m_creature->AttackerStateUpdate(m_creature->getVictim()); 
  • trunk/src/game/Map.cpp

    r102 r118  
    14201420bool InstanceMap::CanEnter(Player *player) 
    14211421{ 
     1422    if(!player->isGameMaster() && i_data && i_data->IsEncounterInProgress()) 
     1423    { 
     1424        sLog.outDebug("InstanceMap::CanEnter - Player '%s' can't enter instance '%s' while an encounter is in progress.", player->GetName(), GetMapName()); 
     1425        player->SendTransferAborted(GetId(), TRANSFER_ABORT_ZONE_IN_COMBAT); 
     1426        return false; 
     1427    } 
     1428 
    14221429    if(std::find(i_Players.begin(),i_Players.end(),player)!=i_Players.end()) 
    14231430    { 
  • trunk/src/game/Object.h

    r102 r118  
    373373            GetNearPoint(obj,x,y,z,obj->GetObjectSize(),distance2d,GetAngle( obj )); 
    374374        } 
     375        void GetRandomContactPoint( const WorldObject* obj, float &x, float &y, float &z, float distance2dMin, float distance2dMax ) const 
     376        { 
     377            float object_size = obj->GetObjectSize();//here we use object_size to determine the angle offset, the bigger object the smaller angle offset, then this makes mob move naturally in visual. 
     378            //let assume 12.0f is the max size for object to have 0 angle offset. 
     379            float angle_offset_ratio = 1 - object_size/12.0f; 
     380            if (angle_offset_ratio < 0.05) angle_offset_ratio = 0.05; 
     381            // angle to face `obj` to `this`plus a random angle offset(from -90 degree to 90 degree)*angle_offset_ratio using distance from distance2dMin to distance2dMax includes size of `obj` 
     382            GetNearPoint(obj,x,y,z,object_size,distance2dMin+(distance2dMax-distance2dMin)*rand_norm(), GetAngle( obj ) + (M_PI_2 - M_PI * rand_norm()) * angle_offset_ratio); 
     383        } 
    375384 
    376385        float GetObjectSize() const 
  • trunk/src/game/TargetedMovementGenerator.cpp

    r102 r118  
    6060    if(!i_offset) 
    6161    { 
    62         // to nearest contact position 
    63         i_target->GetContactPoint( &owner, x, y, z ); 
     62        // to nearest random contact position  
     63        i_target->GetRandomContactPoint( &owner, x, y, z,0.5f,4.5f ); 
    6464    } 
    6565    else