int CBaseEntityOutput::Restore( IRestore &restore, int elementCount ) { // load the number of items saved if ( !restore.ReadFields( "Value", this, NULL, m_DataMap.dataDesc, m_DataMap.dataNumFields ) ) return 0; m_ActionList = NULL; // read in all the fields CEventAction *lastEv = NULL; for ( int i = 0; i < elementCount; i++ ) { CEventAction *ev = new CEventAction(NULL); if ( !restore.ReadFields( "EntityOutput", ev, NULL, ev->m_DataMap.dataDesc, ev->m_DataMap.dataNumFields ) ) return 0; // add it to the list in the same order it was saved in if ( lastEv ) { lastEv->m_pNext = ev; } else { m_ActionList = ev; } ev->m_pNext = NULL; lastEv = ev; } return 1; }
//----------------------------------------------------------------------------- // 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 CEventQueue::Restore( IRestore &restore ) { // clear the event queue Clear(); // rebuild the event queue by restoring all the queue items EventQueuePrioritizedEvent_t tmpEvent; // load the number of items saved if ( !restore.ReadFields( "EventQueue", this, NULL, m_DataMap.dataDesc, m_DataMap.dataNumFields ) ) return 0; for ( int i = 0; i < m_iListCount; i++ ) { if ( !restore.ReadFields( "PEvent", &tmpEvent, NULL, tmpEvent.m_DataMap.dataDesc, tmpEvent.m_DataMap.dataNumFields ) ) return 0; // add the restored event into the list if ( tmpEvent.m_pEntTarget ) { AddEvent( tmpEvent.m_pEntTarget, STRING(tmpEvent.m_iTargetInput), tmpEvent.m_VariantValue, tmpEvent.m_flFireTime - gpGlobals->curtime, tmpEvent.m_pActivator, tmpEvent.m_pCaller, tmpEvent.m_iOutputID ); } else { AddEvent( STRING(tmpEvent.m_iTarget), STRING(tmpEvent.m_iTargetInput), tmpEvent.m_VariantValue, tmpEvent.m_flFireTime - gpGlobals->curtime, tmpEvent.m_pActivator, tmpEvent.m_pCaller, tmpEvent.m_iOutputID ); } } return 1; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- int CDebugHistory::Restore( IRestore &restore ) { ClearHistories(); int iMaxCategorys = restore.ReadInt(); for ( int iCategory = 0; iCategory < MIN(iMaxCategorys,MAX_HISTORY_CATEGORIES); iCategory++ ) { int iEnd = restore.ReadInt(); m_DebugLineEnd[iCategory] = m_DebugLines[iCategory] + iEnd; restore.ReadData( m_DebugLines[iCategory], sizeof(m_DebugLines[iCategory]), 0 ); } return BaseClass::Restore(restore); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- int CDebugHistory::Restore( IRestore &restore ) { ClearHistories(); int iVersion = restore.ReadInt(); if ( iVersion >= DEBUG_HISTORY_FIRST_VERSIONED ) { int iMaxCategorys = restore.ReadInt(); for ( int iCategory = 0; iCategory < MIN(iMaxCategorys,MAX_HISTORY_CATEGORIES); iCategory++ ) { int iEnd = restore.ReadInt(); m_DebugLineEnd[iCategory] = m_DebugLines[iCategory] + iEnd; restore.ReadData( m_DebugLines[iCategory], sizeof(m_DebugLines[iCategory]), 0 ); } } else { int iMaxCategorys = iVersion; for ( int iCategory = 0; iCategory < MIN(iMaxCategorys,MAX_HISTORY_CATEGORIES); iCategory++ ) { int iEnd = restore.ReadInt(); m_DebugLineEnd[iCategory] = m_DebugLines[iCategory] + iEnd; restore.ReadData( m_DebugLines[iCategory], sizeof(m_DebugLines[iCategory]), 0 ); } } return BaseClass::Restore(restore); }
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; }
int CAI_BehaviorBase::Restore( IRestore &restore ) { return restore.ReadAll( this, GetDataDescMap() ); }