int CAI_BehaviorBase::RestoreBehaviors(IRestore &restore, CAI_BehaviorBase **ppBehavior, int nBehaviors ) { int iCurrent = -1; char szBlockName[SIZE_BLOCK_NAME_BUF]; restore.StartBlock( szBlockName ); if ( strcmp( szBlockName, BEHAVIOR_SAVE_BLOCKNAME ) == 0 ) { short version; restore.ReadShort( &version ); if ( version == BEHAVIOR_SAVE_VERSION ) { short nToRestore; char szClassNameCurrent[256]; restore.ReadShort( &nToRestore ); for ( int i = 0; i < nToRestore; i++ ) { restore.StartBlock(); restore.ReadString( szClassNameCurrent, sizeof( szClassNameCurrent ), 0 ); bool bIsCurrent; restore.ReadBool( &bIsCurrent ); for ( int j = 0; j < nBehaviors; j++ ) { if ( strcmp( ppBehavior[j]->GetDataDescMap()->dataClassName, szClassNameCurrent ) == 0 ) { if ( bIsCurrent ) iCurrent = j; ppBehavior[j]->Restore( restore ); } } restore.EndBlock(); } } } restore.EndBlock(); return iCurrent; }
int CFunc_LiquidPortal::Restore( IRestore &restore ) { m_hTeleportList.RemoveAll(); m_hLeftToTeleportThisFill.RemoveAll(); if( !BaseClass::Restore( restore ) ) return 0; char szBlockName[SIZE_BLOCK_NAME_BUF]; restore.StartBlock( szBlockName ); if( !FStrEq( szBlockName, "LiquidPortal" ) ) //loading a save without liquid portal save data return 1; short iTeleportListCount; restore.ReadShort( &iTeleportListCount ); if( iTeleportListCount != 0 ) { m_hTeleportList.SetCount( iTeleportListCount ); restore.ReadEHandle( m_hTeleportList.Base(), iTeleportListCount ); } short iLeftToTeleportThisFillCount; restore.ReadShort( &iLeftToTeleportThisFillCount ); if( iLeftToTeleportThisFillCount != 0 ) { m_hLeftToTeleportThisFill.SetCount( iLeftToTeleportThisFillCount ); restore.ReadEHandle( m_hLeftToTeleportThisFill.Base(), iLeftToTeleportThisFillCount ); } restore.EndBlock(); return 1; }