Files
Sun1602/ProgramCommon/PKScriptParser.cpp
T
2022-10-26 12:25:11 +08:00

143 lines
4.0 KiB
C++

#include "StdAfx.h"
#include "PKScriptParser.h"
#include <Struct.h>
#include <SolarFileReader.h>
#include <iostream>
#define PARSER_END_ROW_KEY 7777
PKScriptParser::PKScriptParser()
{
}
PKScriptParser::~PKScriptParser()
{
}
VOID PKScriptParser::Reload()
{
// Load( m_pszFileName, TRUE );
}
#pragma warning ( push )
#pragma warning ( disable : 4244)
BOOL PKScriptParser::_Load( BOOL bReload )
{
__UNUSED(bReload);
int nRowSize = GetRowSize();
for( int nRow = 0; nRow < nRowSize; ++nRow )
{
m_PKOptionInfo.m_PKAllowableLV = GetDataNumber( "PK_Use", nRow );
m_PKOptionInfo.m_PKProtectLV = GetDataNumber( "PK_Protect", nRow );
m_PKOptionInfo.m_BadFriendDropRatio = GetDataNumber( "NItemDrop", nRow );
m_PKOptionInfo.m_PreChaoDropRatio = GetDataNumber( "PrecaoItemDrop", nRow );
m_PKOptionInfo.m_ChaoDropRatio = GetDataNumber( "CaoItemDrop", nRow );
m_PKOptionInfo.m_EquipDropRatio = GetDataNumber( "EquipDropRatio", nRow );
m_PKOptionInfo.m_PreChaoTime = GetDataNumber( "TimeA", nRow );
m_PKOptionInfo.m_ChaoTime = GetDataNumber( "TimeB", nRow );
m_PKOptionInfo.m_AddChaoTime = GetDataNumber( "TimeC", nRow );
m_PKOptionInfo.m_BoradoriAttackTime = GetDataNumber( "Attack_Time", nRow );
m_PKOptionInfo.m_BoradoriAttackTime *= 1000; // Tick 단위로 환산한다.
m_PKOptionInfo.m_BoradoriNormalTime = GetDataNumber( "Normal_Time", nRow );
m_PKOptionInfo.m_BoradoriNormalTime *= 1000; // Tick 단위로 환산한다.
m_PKOptionInfo.m_IgnorePKTile = GetDataNumber( "Ignore_PKTile", nRow );
//__NA_0_POSSESSION_ITEM_DROP
m_PKOptionInfo.m_ePossessionDropOption = (PKOptionInfo::ePoessessionDropOption)GetDataInt( "Drop_SBItems", nRow );
// 마지막 열을 표시하는 키
m_PKOptionInfo.m_wEND_ROW_KEY = GetDataNumber( "End_Row_Key", nRow );
if( m_PKOptionInfo.m_wEND_ROW_KEY != PARSER_END_ROW_KEY )
{
SUNLOG( eCRITICAL_LOG, "[PKScriptParser::Load]신굶契鑒꼇攣횅!" );
return FALSE;
}
}
if( !CheckValidity() )
return FALSE;
return TRUE;
}
BOOL PKScriptParser::CheckValidity()
{
BOOL bSuccess = TRUE;
// 보호레벨이 10미만이면 혹시 수치입력 실수?
if( m_PKOptionInfo.m_PKProtectLV < 10 )
{
SUNLOG( eCRITICAL_LOG, "[PKScriptParser] m_PKProtectLV[%d] 格됴! \n", m_PKOptionInfo.m_PKProtectLV );
bSuccess = FALSE;
}
// 아이템 드랍확률은 0~100 사이 값이다.
if( m_PKOptionInfo.m_BadFriendDropRatio <= 0 || m_PKOptionInfo.m_BadFriendDropRatio > 100 )
{
SUNLOG( eCRITICAL_LOG, "[PKScriptParser] m_BadFriendDropRatio[%d] 轟槻! \n", m_PKOptionInfo.m_BadFriendDropRatio );
bSuccess = FALSE;
}
if( m_PKOptionInfo.m_PreChaoDropRatio <= 0 || m_PKOptionInfo.m_PreChaoDropRatio > 100 )
{
SUNLOG( eCRITICAL_LOG, "[PKScriptParser] m_PreChaoDropRatio[%d] 轟槻! \n", m_PKOptionInfo.m_PreChaoDropRatio );
bSuccess = FALSE;
}
if( m_PKOptionInfo.m_ChaoDropRatio <= 0 || m_PKOptionInfo.m_ChaoDropRatio > 100 )
{
SUNLOG( eCRITICAL_LOG, "[PKScriptParser] m_ChaoDropRatio[%d] 轟槻! \n", m_PKOptionInfo.m_ChaoDropRatio );
bSuccess = FALSE;
}
// 카오 유지시간이 10시간 미만, 100시간 이상이면 혹시 수치입력 실수?
//if( m_PKOptionInfo.m_PreChaoTime < 10*3600 || m_PKOptionInfo.m_PreChaoTime >= 100*3600 )
//{
// SUNLOG( eCRITICAL_LOG, "[PKScriptParser] m_PreChaoTime[%d] is Invalid! \n", m_PKOptionInfo.m_PreChaoTime );
// bSuccess = FALSE;
//}
//if( m_PKOptionInfo.m_ChaoTime < 10*3600 || m_PKOptionInfo.m_ChaoTime >= 100*3600 )
//{
// SUNLOG( eCRITICAL_LOG, "[PKScriptParser] m_ChaoTime[%d] is Invalid! \n", m_PKOptionInfo.m_ChaoTime );
// bSuccess = FALSE;
//}
//if( m_PKOptionInfo.m_AddChaoTime >= 50*3600 )
//{
// SUNLOG( eCRITICAL_LOG, "[PKScriptParser] m_AddChaoTime[%d] is Invalid! \n", m_PKOptionInfo.m_AddChaoTime );
// bSuccess = FALSE;
//}
return bSuccess;
}
#pragma warning ( pop )
VOID PKScriptParser::Release()
{
Unload();
}
VOID PKScriptParser::Unload()
{
}
BOOL PKScriptParser::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload )
{
switch( ScriptCode )
{
case SCRIPT_PKSCRIPT:
return _Load( bReload );
}
return FALSE;
}