Changeset 3150

Show
Ignore:
Timestamp:
02/03/2010 02:10:27 PM (5 weeks ago)
Author:
jackpoz
Message:

MODIFIED: Better fix for r3149, thanks Wayland.

Location:
trunk/src/arcemu-world
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/arcemu-world/MapMgr.cpp

    r3149 r3150  
    14941494        // Update creatures. 
    14951495        { 
    1496                 CreatureSet creatures(activeCreatures); 
    1497                 CreatureSet::iterator itr = creatures.begin(); 
     1496                creature_iterator = activeCreatures.begin(); 
    14981497                Creature * ptr; 
    14991498                Pet * ptr2; 
    15001499 
    1501                 for(; itr != creatures.end();) 
    1502                 { 
    1503                         ptr = *itr; 
    1504                         ++itr; 
    1505                         if( activeCreatures.find(ptr) != activeCreatures.end())//required by owners despawning creatures and deleting *(++itr) 
    1506                                 ptr->Update(difftime); 
     1500                for(; creature_iterator != activeCreatures.end();) 
     1501                { 
     1502                        ptr = *creature_iterator; 
     1503                        ++creature_iterator; 
     1504                        ptr->Update(difftime); 
    15071505                } 
    15081506 
  • trunk/src/arcemu-world/MapMgr.h

    r3131 r3150  
    122122        uint32 m_CreatureHighGuid; 
    123123    std::vector< Creature* > CreatureStorage; 
     124        CreatureSet::iterator creature_iterator;//required by owners despawning creatures and deleting *(++itr) 
    124125        Creature * CreateCreature(uint32 entry, bool isVehicle = false); 
    125126 
  • trunk/src/arcemu-world/Object.cpp

    r3138 r3150  
    32413241        { 
    32423242        case TYPEID_UNIT: 
     3243                // check iterator 
     3244                if(mgr->creature_iterator != mgr->activeCreatures.end() && (*mgr->creature_iterator) == TO_CREATURE(this)) 
     3245                        ++mgr->creature_iterator; 
    32433246                mgr->activeCreatures.erase((Creature*)this); 
    32443247                break;