Files
2022-10-26 12:25:11 +08:00

260 lines
6.2 KiB
C++

#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 );