260 lines
6.2 KiB
C++
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 );
|
|
|
|
|