Changeset 3148

Show
Ignore:
Timestamp:
02/03/2010 04:40:07 AM (5 weeks ago)
Author:
jackpoz
Message:

FIXED: CreatureAIScript::Destroy() is called by Creature::Despawn(), too.

Files:
1 modified

Legend:

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

    r3131 r3148  
    742742void Creature::RemoveFromWorld( bool addrespawnevent, bool free_guid ) 
    743743{ 
    744  
    745     //remove ai stuff 
    746         sEventMgr.RemoveEvents( this, EVENT_CREATURE_AISPELL ); 
    747  
    748         if( GetScript() != NULL ) 
    749         { 
    750                 GetScript()->Destroy(); 
    751                 _myScriptClass = NULL; 
    752         } 
    753  
    754         RemoveAllAuras(); 
    755          
    756         // If we have a summons then let's remove them 
    757         RemoveAllGuardians(); 
    758          
    759         // remove our reference from owner 
    760         if( m_owner != NULL ) 
    761         { 
    762                 m_owner->RemoveGuardianRef( this ); 
    763                 m_owner = NULL; 
    764         } 
    765  
    766         if( IsInWorld() ) 
    767         { 
    768                 if( IsPet() ) 
    769                 { 
    770                         static_cast<Pet*>(this)->ScheduledForDeletion = true; 
    771                         Unit::RemoveFromWorld( true ); 
    772             SafeDelete(); 
    773                         return; 
    774                 } 
    775                  
    776                 uint32 delay = 0; 
    777                 if( addrespawnevent && ( m_respawnTimeOverride > 0 || ( proto && proto->RespawnTime > 0 ) ) ) 
    778                         delay = m_respawnTimeOverride > 0 ? m_respawnTimeOverride : proto->RespawnTime; 
    779  
    780                 Despawn( 0, delay ); 
    781         } 
     744        uint32 delay = 0; 
     745        if( addrespawnevent && ( m_respawnTimeOverride > 0 || ( proto && proto->RespawnTime > 0 ) ) ) 
     746                delay = m_respawnTimeOverride > 0 ? m_respawnTimeOverride : proto->RespawnTime; 
     747 
     748        Despawn( 0, delay ); 
    782749} 
    783750 
     
    18671834        } 
    18681835 
     1836        //remove ai stuff 
     1837        sEventMgr.RemoveEvents( this, EVENT_CREATURE_AISPELL ); 
     1838 
     1839        if( GetScript() != NULL ) 
     1840        { 
     1841                GetScript()->Destroy(); 
     1842                _myScriptClass = NULL; 
     1843        } 
     1844 
     1845        RemoveAllAuras(); 
     1846         
     1847        // If we have a summons then let's remove them 
     1848        RemoveAllGuardians(); 
     1849         
     1850        // remove our reference from owner 
     1851        if( m_owner != NULL ) 
     1852        { 
     1853                m_owner->RemoveGuardianRef( this ); 
     1854                m_owner = NULL; 
     1855        } 
     1856 
    18691857        if(!IsInWorld()) 
    18701858                return; 
     
    18781866        } 
    18791867 
     1868        if( IsPet() ) 
     1869        { 
     1870                static_cast<Pet*>(this)->ScheduledForDeletion = true; 
     1871                Unit::RemoveFromWorld( true ); 
     1872        SafeDelete(); 
     1873                return; 
     1874        } 
     1875         
    18801876        if(respawntime && !m_noRespawn) 
    18811877        {