#include "stdafx.h" // #include "ScriptLogic.Interfaces.h" ////////////////////////////////////////////////////////////////////////// // const CHAR* ScriptLogic::SCRIPTLOGIC_DATAFILE = "WiseClient.LogicControl.ini"; ScriptLogic::ScriptLogic() : m_pControlData(NULL) { } ScriptLogic::~ScriptLogic() { } DWORD ScriptLogic::GetVersion() { CHAR* rpOutput; if( GetData( "[GENERAL]", "VERSION", rpOutput ) ) { return Converter::String::ToDWORD( rpOutput ); } return 0; } // [ENTER_MAPCODE] MAPCODE MAPCODE ScriptLogic::GetPlayMapCode() { CHAR* rpOutput; if( GetData( "[ENTER_MAPCODE]", "MAPCODE", rpOutput ) ) { return Converter::String::ToWORD( rpOutput ); } return 0; } BOOL ScriptLogic::IsAcceptPlay( CHAR* pszAttribute ) { CHAR* rpOutput; if( GetData( "[ENTER_MAPCODE]", "MAPCODE", rpOutput ) ) { WORD wMAPCODE = Converter::String::ToWORD( rpOutput ); CHAR pszMAPCODE[20]; Converter::String::ToString( wMAPCODE, pszMAPCODE, sizeof(pszMAPCODE) ); if( GetData( "[MAPCODE]", pszMAPCODE, rpOutput ) ) { if( 0 == strncmp( pszAttribute, rpOutput, 32 ) ) return TRUE; } } return FALSE; } INT ScriptLogic::__ParseInfoSection( PVOID pPassingPtr, SDAttrTag tagName ) { ControlData* pControl = (ControlData*)pPassingPtr; if( !tagName.IsMatch( "[GENERAL]" ) ) { pControl->m_ReservedSection = FALSE; pControl->SetSectionCursor( tagName.GetString() ); } else { pControl->m_ReservedSection = TRUE; } return ScriptDataLoader::SECTION_COLUMNS; } BOOL ScriptLogic::__ParseInfoSectionData( PVOID pPassingPtr, SDAttrValueName tagValueName, SDAttrValue tagValue ) { ControlData* pControl = (ControlData*)pPassingPtr; if( !pControl->m_ReservedSection ) { pControl->AlignAttribute( tagValueName.GetString(), tagValue.GetString() ); return TRUE; } DWORD dwValue; if( tagValueName.IsMatch( "VERSION" ) ) { tagValue.GetValue( dwValue ); pControl->m_Version = dwValue; } return TRUE; } BOOL ScriptLogic::Load( BOOL bReload ) { if( bReload ) { SAFE_DELETE(m_pControlData); m_pControlData = new ControlData(); } ScriptDataLoader loader; ControlData* pDATA = new ControlData; loader.SectionCallbackAlloc( &__ParseInfoSection, pDATA ); loader.SectionDataCallbackAlloc( &__ParseInfoSectionData, pDATA ); if( !loader.Load( SCRIPTLOGIC_DATAFILE, FALSE ) ) { DISPMSG( "Can't Load ScriptControl File" ); DEBUG_INTERRUPT(); return FALSE; } //if( !loader.Load( Manipulater::CONFIG_ACCOUNT_INFO_FILENAME, FALSE ) ) //{ // DEBUGGING_CODE_L1( "Can't Load ConfigFile" ); // DEBUG_INTERRUPT(); //} //ObjectPoolRouter* pROUTER = ObjectPoolRouter::Instance(); //BOOL bSuccess = TRUE; //do //{ // sACCOUNT* pACCOUNT = (sACCOUNT*)pROUTER->Alloc( OBJTYPE_ACCOUNT_INFO ); // sACCOUNT& rACCOUNT = *pACCOUNT; // ZeroMemory( pACCOUNT, sizeof(*pACCOUNT) ); // BOOL bCompleteSentence = FALSE; // if( bSuccess = loader.ReadValue( pACCOUNT->LOCAL_IDX ) ) // if( bCompleteSentence = loader.ReadString( rACCOUNT.ID.GetBUFFER(), rACCOUNT.ID.GetBUFFER_LENGTH() ) ) // if( bCompleteSentence = loader.ReadString( rACCOUNT.PASSWORD.GetBUFFER(), rACCOUNT.PASSWORD.GetBUFFER_LENGTH() ) ) // { // rACCOUNT.ID.MakeSafeString(); // rACCOUNT.PASSWORD.MakeSafeString(); // } // if( bCompleteSentence ) // { // rLIST.push_back( pACCOUNT ); // } // else // { // bSuccess = FALSE; // pROUTER->Free( OBJTYPE_ACCOUNT_INFO, pACCOUNT ); // } //} while( bSuccess ); m_pControlData = pDATA; return TRUE; } BOOL ScriptLogic::Find( const CHAR* nameOfSection ) { string findname = nameOfSection; return Find( findname ); } BOOL ScriptLogic::Find( string& nameOfSection ) { ControlData& rQUERY = *m_pControlData; ControlData::SECTION_DATA_TABLE& rTABLE = rQUERY.m_Table; ControlData::SECTION_DATA_TABLE_IT itFIND = rTABLE.find( nameOfSection ); if( itFIND != rTABLE.end() ) return TRUE; return FALSE; } BOOL ScriptLogic::GetData( const CHAR* nameOfSection, const CHAR* nameOfAttr, CHAR*& OUT rValueOfAttr ) { ControlData& rQUERY = *m_pControlData; ControlData::SECTION_DATA_TABLE& rBTABLE = rQUERY.m_Table; ControlData::SECTION_DATA_TABLE_IT itBFIND = rBTABLE.find( nameOfSection ); if( itBFIND != rBTABLE.end() ) { ControlData::ATTR_DATA_VALUE_TABLE& rTABLE = itBFIND->second; ControlData::ATTR_DATA_VALUE_TABLE_IT itFIND = rTABLE.find( nameOfAttr ); if( itFIND != rTABLE.end() ) { string& rFINDVALUE = itFIND->second; rValueOfAttr = (CHAR*)rFINDVALUE.c_str(); return TRUE; } } return FALSE; } BOOL ScriptLogic::GetData( string& nameOfSection, string& nameOfAttr, string& OUT rValueOfAttr ) { ControlData& rQUERY = *m_pControlData; ControlData::SECTION_DATA_TABLE& rBTABLE = rQUERY.m_Table; ControlData::SECTION_DATA_TABLE_IT itBFIND = rBTABLE.find( nameOfSection ); if( itBFIND != rBTABLE.end() ) { ControlData::ATTR_DATA_VALUE_TABLE& rTABLE = itBFIND->second; ControlData::ATTR_DATA_VALUE_TABLE_IT itFIND = rTABLE.find( nameOfAttr ); if( itFIND != rTABLE.end() ) { string& rFINDVALUE = itFIND->second; rValueOfAttr = rFINDVALUE.c_str(); return TRUE; } } return FALSE; } ////////////////////////////////////////////////////////////////////////// // VOID ControlData::SetSectionCursor( string& nameOfSection ) { ATTR_DATA_VALUE_TABLE& rATTR = m_Table[nameOfSection]; m_Cursor = nameOfSection; } VOID ControlData::AlignAttribute( string& nameOfAttr, string& nameOfAttrValue ) { ATTR_DATA_VALUE_TABLE& rATTR = m_Table[m_Cursor]; rATTR.insert( make_pair( nameOfAttr, nameOfAttrValue ) ); } VOID ControlData::SetSectionCursor( const CHAR* nameOfSection ) { if( nameOfSection ) { string wrap = nameOfSection; SetSectionCursor( wrap ); } } VOID ControlData::AlignAttribute( const CHAR* nameOfAttr, const CHAR* nameOfAttrValue ) { if( nameOfAttr && nameOfAttrValue ) { string wrapAttr = nameOfAttr; string wrapValue = nameOfAttrValue; AlignAttribute( wrapAttr, wrapValue ); } } ////////////////////////////////////////////////////////////////////////// // DECLARE_BASE_WISE_STEP_FUNCTION() { ScriptLogicInterface* pINTERFACE = ScriptLogicFrame::GetInterfaceRef(); pINTERFACE->SCRIPTLOGIC = new ScriptLogic(); pINTERFACE->SCRIPTLOGIC->Load(); } REGISTER_STEP_HANDLER_BASE( eWISE_ROUTINES_INIT_GAME_DATAS );