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

178 lines
4.5 KiB
C++

#include "StdAfx.h"
#include ".\LimitedOptionParser.h"
#include <iostream>
LimitedOptionParser::LimitedOptionParser(void)
{
}
LimitedOptionParser::~LimitedOptionParser(void)
{
Unload();
}
VOID LimitedOptionParser::Release()
{
Unload();
}
VOID LimitedOptionParser::Init( char * pszPackFileName )
{
SetPackFileName( pszPackFileName );
}
VOID LimitedOptionParser::Unload()
{
{
LIMITED_ITEM_OPT_HASH::iterator it, end( m_LimitedOptionListHash.end() );
for( it = m_LimitedOptionListHash.begin() ; it != end ; ++it )
{
sLIMITED_ITEM_OPTION * pOptionArray = (it->second);
SAFE_DELETE( pOptionArray );
}
m_LimitedOptionListHash.clear();
}
{
LIMITEDOPT_HASH::iterator it, end( m_LimitedOptionKindHash.end() );
for( it = m_LimitedOptionKindHash.begin() ; it != end ; ++it )
{
sLIMITED_OPTION * pOptionArray = (it->second);
SAFE_DELETE( pOptionArray );
}
m_LimitedOptionKindHash.clear();
}
}
//#pragma warning ( push )
//#pragma warning ( disable : 4244)
BOOL LimitedOptionParser::_Load( BOOL bReload )
{
int nRowSize = GetRowSize();
for( int nRow = 0; nRow < nRowSize; ++nRow )
{
WORD wIndex = GetDataWORD( "wOptionIndex", nRow );
sLIMITED_ITEM_OPTION * pInfo = NULL;
LIMITED_ITEM_OPT_HASH::iterator itr = m_LimitedOptionListHash.find( wIndex );
if ( itr == m_LimitedOptionListHash.end() )
{
// 绝栏搁!
pInfo = new sLIMITED_ITEM_OPTION;
m_LimitedOptionListHash[wIndex] = pInfo;
}
else
{
pInfo = itr->second;
if( FALSE == bReload )
{
SUNLOG( eCRITICAL_LOG, "脚本文件数据错误, Code = %d", wIndex );
FASSERT( !"数据有错误." );
}
}
pInfo->m_LimitedOptionIndex = wIndex;
strncpy( pInfo->m_pszName, GetDataString( "szName", nRow ), MAX_LIMITED_OPTIONNAME_LENGTH );
pInfo->m_ItemType = GetDataBYTE( "byItemType", nRow );
pInfo->m_OptionKind = GetDataWORD( "wOptionKind", nRow );
pInfo->m_NumericType = (eVALUE_TYPE)GetDataInt( "iOptionType", nRow );
pInfo->m_MinValue = GetDataWORD( "wMinValue", nRow );
pInfo->m_MaxValue = GetDataWORD( "wMaxValue", nRow );
TCHAR szTemp[MAX_FIELD_NAME_SIZE];
for( BYTE i = 0 ; i < 5 ; ++i)
{
_snprintf( szTemp, MAX_FIELD_NAME_SIZE, "iProbability%d\0", i+1 );
pInfo->m_Probability[i] = GetDataInt( szTemp, nRow );
}
pInfo->m_ProbabilitySum = GetDataInt( "iProbabilitySum", nRow );
if( ValidCheck( pInfo ) )
{
ASSERT(FALSE);
}
///////////////////////////////////
sLIMITED_OPTION * pOptionInfo = NULL;
LIMITEDOPT_HASH::iterator itr2 = m_LimitedOptionKindHash.find( pInfo->m_OptionKind );
if ( itr2 == m_LimitedOptionKindHash.end() )
{
// 绝栏搁!
pOptionInfo = new sLIMITED_OPTION;
m_LimitedOptionKindHash[pInfo->m_OptionKind] = pOptionInfo;
}
else
{
pOptionInfo = itr2->second;
}
pOptionInfo->m_AttrIndex = pInfo->m_OptionKind;
strncpy( pOptionInfo->m_pszAttrName, pInfo->m_pszName, MAX_LIMITED_OPTIONNAME_LENGTH );
pOptionInfo->m_NumericType = pInfo->m_NumericType;
pOptionInfo->m_iValue[LIMITED_1] = 0;
pOptionInfo->m_iValue[LIMITED_2] = 0;
pOptionInfo->m_iValue[LIMITED_3] = 0;
}
return TRUE;
}
//#pragma warning ( pop )
BOOL LimitedOptionParser::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload )
{
switch( ScriptCode )
{
case SCRIPT_GAMBLE_OPTION:
return _Load( bReload );
}
return FALSE;
}
sLIMITED_OPTION * LimitedOptionParser::GetLimitedOptionByKind( WORD OptionIndex )
{
sLIMITED_OPTION * pOptionInfo = NULL;
LIMITEDOPT_HASH::iterator itr = m_LimitedOptionKindHash.find( OptionIndex );
if ( itr != m_LimitedOptionKindHash.end() )
{
pOptionInfo = itr->second;
if( OptionIndex < _MAX_LIMITED_ITEM_OPTION_NUM )
return pOptionInfo;
}
return NULL;
}
WORD LimitedOptionParser::ValidCheck(sLIMITED_ITEM_OPTION* item_option)
{
int sum_of_probabilities = 0;
for (int* it = item_option->m_Probability;
it != &item_option->m_Probability[_countof(item_option->m_Probability)];
++it)
{
sum_of_probabilities += *it;
};
// 犬伏 眉农
if (item_option->m_ProbabilitySum != sum_of_probabilities) {
return 1;
};
// 厚啦鸥涝 可记 眉农
if (ns_formula::CheckOptionValidity(item_option->m_OptionKind,
item_option->m_NumericType, item_option->m_MaxValue) == false)
{
SUNLOG(eCRITICAL_LOG,
"[LimitedOption]|无效的选项 Option|Index=%d|OptionIndex=%d|OptionType=%d|OptionValue=%d|",
item_option->m_LimitedOptionIndex,
item_option->m_OptionKind, item_option->m_NumericType, item_option->m_MaxValue);
};
return 0;
}