#include "StdAfx.h" #include "TEtTrigger.h" #include "TEtTriggerObject.h" #include "SundriesFuncEx.h" CTEtTrigger::CTEtTrigger( CEtWorldSector *pSector ) : CEtTrigger( pSector ) { } CTEtTrigger::~CTEtTrigger() { } bool CTEtTrigger::Load( const char *szFileName ) { bool bResult = CEtTrigger::Load( szFileName ); #ifdef PRE_FIX_62845 if( CEtTrigger::IsDetectLuaError() ) { CEtTrigger::ShowErrLuaName(); } #endif if( bResult == false ) return false; return true; } bool CTEtTrigger::Save( const char *szFileName ) { FILE *fp; fopen_s( &fp, szFileName, "wb" ); if( fp == NULL ) return false; DWORD dwCount = GetTriggerCount(); fwrite( &dwCount, sizeof(DWORD), 1, fp ); for( DWORD i=0; iSave( fp ) == false ) { fclose(fp); return false; } } fclose( fp ); return true; } bool CTEtTrigger::SaveDefine( const char *szFileName ) { FILE *fp; fopen_s( &fp, szFileName, "wb" ); if( fp == NULL ) return false; DWORD dwCount = GetDefineValueCount(); fwrite( &dwCount, sizeof(DWORD), 1, fp ); CString szStr; for( DWORD i=0; inUniqueID, sizeof(int), 1, fp ); szStr = pValue->szName.c_str(); WriteCString( &szStr, fp ); fwrite( &pValue->ParamType, sizeof(int), 1, fp ); switch( pValue->ParamType ) { case CEtTrigger::Integer: fwrite( &pValue->nValue, sizeof(int), 1, fp ); break; case CEtTrigger::Float: fwrite( &pValue->fValue, sizeof(float), 1, fp ); break; case CEtTrigger::String: { szStr = pValue->szValue; WriteCString( &szStr, fp ); } break; } } fclose( fp ); return true; } CEtTriggerObject *CTEtTrigger::AllocTriggerObject() { return new CTEtTriggerObject( this ); } bool CTEtTrigger::IsExistCategory( const char *szName ) { for( DWORD i=0; iGetCategory(), szName ) == NULL ) return true; } return false; } void CTEtTrigger::InsertTrigger( const char *szCategory, const char *szTriggerName ) { CTEtTriggerObject *pTrigger = (CTEtTriggerObject *)AllocTriggerObject(); pTrigger->SetCategory( szCategory ); pTrigger->SetTriggerName( szTriggerName ); m_pVecTriggerList.push_back( pTrigger ); } void CTEtTrigger::InsertTrigger( CEtTriggerObject *pObject ) { m_pVecTriggerList.push_back( pObject ); } void CTEtTrigger::RemoveTrigger( const char *szCategory ) { std::vector szVecTriggerList; for( DWORD i=0; iGetCategory(), szCategory ) == NULL ) { szVecTriggerList.push_back( m_pVecTriggerList[i]->GetTriggerName() ); } } for( DWORD i=0; iGetCategory(), szCategory ) == NULL && strcmp( m_pVecTriggerList[i]->GetTriggerName(), szTriggerName ) == NULL ) { SAFE_DELETE( m_pVecTriggerList[i] ); m_pVecTriggerList.erase( m_pVecTriggerList.begin() + i ); return; } } } void CTEtTrigger::ChangeCategoryName( const char *szOldName, const char *szNewName ) { std::vector dwVecIndex; for( DWORD i=0; iGetCategory(), szOldName ) == NULL ) { dwVecIndex.push_back( i ); } } for( DWORD i=0; iSetCategory( szNewName ); } } void CTEtTrigger::ChangeTriggerOrder( CTEtTriggerObject *pObject, CTEtTriggerObject *pTarget ) { bool bValid = false; for( DWORD i=0; iGetCategory(), szCategory ) == NULL ) { int nCount = 0; for( DWORD i=0; iGetCategory(), szCategory ) == NULL ) { nCount++; } } if( nCount == 1 ) return; } bool bValid = false; for( DWORD i=0; iGetCategory(), szCategory ) == NULL ) { m_pVecTriggerList.insert( m_pVecTriggerList.begin() + i, pObject ); bValid = true; break; } } if( bValid == false ) { m_pVecTriggerList.push_back( pObject ); } } DWORD CTEtTrigger::GetDefineValueCount() { return (DWORD)m_pVecDefineValueList.size(); } CEtTrigger::DefineValue *CTEtTrigger::GetDefineValueFromIndex( DWORD dwIndex ) { if( dwIndex < 0 || dwIndex >= m_pVecDefineValueList.size() ) return NULL; return m_pVecDefineValueList[dwIndex]; } CEtTrigger::DefineValue *CTEtTrigger::GetDefineValueFromName( const char *szValueName ) { for( DWORD i=0; m_pVecDefineValueList.size(); i++ ) { if( strcmp( m_pVecDefineValueList[i]->szName.c_str(), szValueName ) == NULL ) return m_pVecDefineValueList[i]; } return NULL; } CEtTrigger::DefineValue *CTEtTrigger::GetDefineValueFromUniqueID( int nUniqueID ) { for( DWORD i=0; inUniqueID == nUniqueID ) { return m_pVecDefineValueList[i]; } } return NULL; } CEtTrigger::DefineValue *CTEtTrigger::AddDefineValue( const char *szValueName ) { int nUniqueID = GetDefineValueUniqueID(); if( nUniqueID == -1 ) return NULL; DefineValue *pStruct = new DefineValue; pStruct->nUniqueID = GetDefineValueUniqueID(); pStruct->szName = szValueName; m_pVecDefineValueList.push_back( pStruct ); return pStruct; } void CTEtTrigger::DeleteDefineValueFromIndex( DWORD dwIndex ) { if( dwIndex < 0 || dwIndex >= m_pVecDefineValueList.size() ) return; SAFE_DELETE( m_pVecDefineValueList[dwIndex] ); m_pVecDefineValueList.erase( m_pVecDefineValueList.begin() + dwIndex ); } void CTEtTrigger::DeleteDefineValueFromName( const char *szValueName ) { for( DWORD i=0; iszName.c_str(), szValueName ) == NULL ) { SAFE_DELETE( m_pVecDefineValueList[i] ); m_pVecDefineValueList.erase( m_pVecDefineValueList.begin() + i ); return; } } } int CTEtTrigger::GetDefineValueUniqueID() { for( int i=0; i<256; i++ ) { bool bValid = true; for( DWORD j=0; jnUniqueID == i ) { bValid = false; break; } } if( bValid ) return i; } return -1; } void CTEtTrigger::ChangeCategoryOrder( CString szCategory, CString szTarget ) { std::vector pVecList; for( DWORD i=0; iGetCategory(), szCategory ) == NULL ) { pVecList.push_back( m_pVecTriggerList[i] ); m_pVecTriggerList.erase( m_pVecTriggerList.begin() + i ); i--; } } if( pVecList.empty() ) return; if( szTarget.IsEmpty() ) { for( int i=(int)pVecList.size() - 1; i>=0; i-- ) { m_pVecTriggerList.insert( m_pVecTriggerList.begin(), pVecList[i] ); } } else { for( int i=(int)m_pVecTriggerList.size() - 1; i>=0; i-- ) { if( _stricmp( m_pVecTriggerList[i]->GetCategory(), szTarget ) == NULL ) { for( int j=(int)pVecList.size() - 1; j>=0; j-- ) { m_pVecTriggerList.insert( m_pVecTriggerList.begin() + i + 1, pVecList[j] ); } break; } } } } void CTEtTrigger::SortCategory( std::vector &szVecList ) { std::vector pVecList = m_pVecTriggerList; m_pVecTriggerList.clear(); for( DWORD i=0; iGetCategory() ) == NULL ) { m_pVecTriggerList.push_back( pVecList[j] ); pVecList.erase( pVecList.begin() + j ); j--; } } } }