//----------------------------------------------------------------------------- // Purpose: // Input : &restore - //----------------------------------------------------------------------------- int CSpeaker::Restore( IRestore &restore ) { int iret = BaseClass::Restore( restore ); if ( iret ) { bool doRead = false; restore.ReadBool( &doRead ); if ( doRead ) { char szResponseSystemBlockName[SIZE_BLOCK_NAME_BUF]; restore.StartBlock( szResponseSystemBlockName ); if ( !Q_stricmp( szResponseSystemBlockName, "InstancedResponseSystem" ) ) { if ( !m_pInstancedResponseSystem ) { m_pInstancedResponseSystem = PrecacheCustomResponseSystem( STRING( m_iszRuleScriptFile ) ); if ( m_pInstancedResponseSystem ) { SaveRestoreFieldInfo_t fieldInfo = { &m_pInstancedResponseSystem, 0, NULL }; responseSystemSaveRestoreOps->Restore( fieldInfo, &restore ); } } } restore.EndBlock(); } } return iret; }
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; }