Files
Sun1602/ProgramCommon/SetItemOptionInfoParser.cpp
T
git 9cb257e7ae Add GameClients drops and keep current 1602 source work.
CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
2026-08-30 23:24:31 +03:00

499 lines
21 KiB
C++

#include "StdAfx.h"
#include ".\setitemoptioninfoparser.h"
#include <ItemOptionHeader.h>
#include "Struct.h"
//==================================================================================================
// @history
// - ~~~
// - 09/10/24|waverix|code arrangement, remove warnings
SetItemOptionInfoParser::SetItemOptionInfoParser(void)
{
}
SetItemOptionInfoParser::~SetItemOptionInfoParser(void)
{
}
void
SetItemOptionInfoParser::Release()
{
SETITEM_OPTION_INFO_MAP::iterator it = m_mapSetItemOptionInfo.begin(),
end = m_mapSetItemOptionInfo.end();
for( ; it != end; ++it) {
SETITEM_OPTION_INFO* option_info = it->second;
delete option_info;
}
m_mapSetItemOptionInfo.clear();
}
SETITEM_OPTION_INFO*
SetItemOptionInfoParser::Find(DWORD set_group_code)
{
SETITEM_OPTION_INFO_MAP::const_iterator it = m_mapSetItemOptionInfo.find(set_group_code);
if(it != m_mapSetItemOptionInfo.end()) {
SETITEM_OPTION_INFO* option_info = it->second;
return option_info;
}
return NULL;
}
eSETITEM_OPTION_LEVEL
SetItemOptionInfoParser::GetSetItemOptionLevel(int number_of_same_set_items) const
{
// (CHANGES) (WAVERIX) change binary-condition to unary-condition
if (number_of_same_set_items < 0 ||
number_of_same_set_items > MAX_SETITEM_ACTIVE_EQUIP_OPTION)
{
#ifdef _DEBUG
// (NOTE) 여기서 문제가 발생하면 SetItem관련 로직에 문제가 발생한 사례일 것이다.
// 반드시 해결 할 것.
__debugbreak();
#endif
number_of_same_set_items = (number_of_same_set_items < 0) ?
0 : MAX_SETITEM_ACTIVE_EQUIP_OPTION;
};
eSETITEM_OPTION_LEVEL level
= (number_of_same_set_items < 2) ? SETITEM_OPTION_LEVEL_NONE
: (number_of_same_set_items < 4) ? SETITEM_OPTION_LEVEL_FIRST
: (number_of_same_set_items < 6) ? SETITEM_OPTION_LEVEL_SECOND
: SETITEM_OPTION_LEVEL_THIRD;
//
return level;
}
// NOTE: f110325.3L, added interface to support fast calculation
const SET_ITEM_OPTION* SetItemOptionInfoParser::GetCurrentSetItemOption(
const SETITEM_OPTION_INFO* set_item_option_info,
POSTYPE pos, eSETITEM_OPTION_LEVEL level) const
{
if (bool out_of_ranges = !(pos < MAX_EQUIPMENT_SLOT_NUM)) {
return NULL;
}
const EQUIP_ACTIVE_OPTION* it = set_item_option_info->m_EquipActiveOption,
* const end = &set_item_option_info->m_EquipActiveOption[
_countof(set_item_option_info->m_EquipActiveOption)];
for ( ; it != end; ++it)
{
if (it->m_EqPos != pos) {
continue;
};
return &it->m_ActiveOption[level - 1];
}
return NULL;
}
//풀 옵션이 아닌 일반 장착 아이템 옵션을 구한다.
SET_ITEM_OPTION*
SetItemOptionInfoParser::GetSetItemOption(DWORD set_group_code,
POSTYPE pos, eSETITEM_OPTION_LEVEL level)
{
// (CHANGES) (WAVERIX) move to first condition
// 장착장 위치 확인
if(pos >= MAX_EQUIPMENT_SLOT_NUM)
return NULL;
SETITEM_OPTION_INFO* option_info = Find(set_group_code);
if(option_info == NULL)
return NULL;
for(int i = 0; i < MAX_SETITEM_ACTIVE_EQUIP_OPTION; ++i)
{
EQUIP_ACTIVE_OPTION& active_option = option_info->m_EquipActiveOption[i];
if(active_option.m_EqPos == pos)
return &active_option.m_ActiveOption[level - 1];
}
return NULL;
}
BYTE
SetItemOptionInfoParser::GetSetItemFullOption(DWORD set_group_code, OUT SET_ITEM_OPTION** ppOption)
{
SETITEM_OPTION_INFO* option_info = Find(set_group_code);
if(option_info == 0)
return 0;
BYTE count = 0;
for(int i = 0; i < MAX_SETITEM_FULL_OPTION; i++)
{
ppOption[i] = &option_info->m_FullOption[i];
++count;
}
return count;
}
BOOL
SetItemOptionInfoParser::IsFullOption(DWORD set_group_code, BYTE num_of_set_items)
{
SETITEM_OPTION_INFO* option_info = Find(set_group_code);
if(option_info == 0)
return false;
//풀 옵션인가?
if(option_info->m_byActiveFullOptionNum == num_of_set_items)
return true;
return false;
}
BOOL
SetItemOptionInfoParser::LoadScript(eSCRIPT_CODE script_code, BOOL bReload)
{
switch(script_code)
{
case SCRIPT_SETITEM_OPTION_INFO:
return _Load(bReload);
}
return false;
}
BOOL
SetItemOptionInfoParser::_Load(BOOL bReload)
{
int nRowSize = GetRowSize();
for(int nRow = 0; nRow < nRowSize; ++nRow)
{
// (CHANGES) change type to word|exist implicit check in TableData
WORD dwCode = GetDataWORD("wSetGCode", nRow);
SETITEM_OPTION_INFO* pInfo = Find(dwCode);
if(pInfo == NULL)
{
pInfo = new SETITEM_OPTION_INFO;
ZeroMemory(pInfo, sizeof(*pInfo)); // (CHANGES) (WAVERIX) add clear routine
m_mapSetItemOptionInfo.insert(std::make_pair(dwCode, pInfo));
}
else
{
if(false == bReload)
{
SUNLOG(eCRITICAL_LOG, "SetItemOptionInfoParser Error ID = %d", dwCode);
FASSERT(!"data error.");
}
}
pInfo->m_wSetGroupCode = dwCode;
pInfo->m_byItemType = GetDataBYTE("bysubType", nRow);
pInfo->m_byActiveFullOptionNum = GetDataBYTE("bFulloptionNum", nRow);
//ActiveOption
// (CHANGES) buffer size...
char szTemp[MAX_FIELD_NAME_SIZE]; // (REMOVE) = { 0, };
BOOST_STATIC_ASSERT(_countof(pInfo->m_EquipActiveOption) == MAX_SETITEM_ACTIVE_EQUIP_OPTION);
for(int i = 0; i < _countof(pInfo->m_EquipActiveOption); ++i)
{
EQUIP_ACTIVE_OPTION& active_option = pInfo->m_EquipActiveOption[i];
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "EqPos%d", i + 1);
active_option.m_EqPos = GetDataBYTE(szTemp, nRow);
BOOST_STATIC_ASSERT(_countof(active_option.m_ActiveOption) == MAX_SETITEM_OPTION_LEVEL);
for(int j = 0; j < _countof(active_option.m_ActiveOption); ++j)
{
SET_ITEM_OPTION& set_item_option = active_option.m_ActiveOption[j];
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "OptionKind%d_%d", j + 1, i + 1);
set_item_option.m_byOptionKind = GetDataBYTE(szTemp, nRow);
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "useType%d_%d", j + 1, i + 1);
set_item_option.m_byUseType = GetDataBYTE(szTemp, nRow);
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "Option%d_%d", j + 1, i + 1);
set_item_option.m_nOption = GetDataInt(szTemp, nRow);
}
}
BOOST_STATIC_ASSERT(_countof(pInfo->m_FullOption) == MAX_SETITEM_FULL_OPTION);
for(int i = 0; i < _countof(pInfo->m_FullOption); i++)
{
SET_ITEM_OPTION& full_option = pInfo->m_FullOption[i];
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "FullOptionKind%d", i+1);
full_option.m_byOptionKind = GetDataBYTE(szTemp, nRow);
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "useType%d", i+1);
full_option.m_byUseType = GetDataBYTE(szTemp, nRow);
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "FullOption%d", i+1);
full_option.m_nOption = GetDataInt(szTemp, nRow);
}
#ifdef _YMS_FULLSETITEM_RESOURCE_DIVISION_
#ifdef _YMS_GENDER_FULLSETITEM
pInfo->change_armor_resource[GenderType::kMale] = GetDataDWORD("FullsetChangeArmorResource", nRow);
pInfo->change_armor_resource[GenderType::kFemale] = GetDataDWORD("FullsetChangeArmorResource2", nRow);
#else
pInfo->change_armor_resource = GetDataDWORD("FullsetChangeArmorResource", nRow);
#endif //_YMS_GENDER_FULLSETITEM
#else
pInfo->m_FullSetChangeItem = GetDataWORD("FullSetChangeItemCode", nRow);
pInfo->change_armor_resource = 0;
#endif //_YMS_FULLSETITEM_RESOURCE_DIVISION_
pInfo->m_SpecialEquipOptionItem.m_wItemCode = GetDataWORD("SpecialItemCode", nRow);
pInfo->m_SpecialEquipOptionItem.m_EqPos = GetDataBYTE("SpecialPos", nRow);
BOOST_STATIC_ASSERT(_countof(pInfo->m_SpecialEquipOptionItem.m_ActiveOption) ==
MAX_SETITEM_SPECIAL_OPTION);
for(int i = 0; i < _countof(pInfo->m_SpecialEquipOptionItem.m_ActiveOption); ++i)
{
SET_ITEM_OPTION& special_option = pInfo->m_SpecialEquipOptionItem.m_ActiveOption[i];
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "SpecialOptionKind%d", i+1);
special_option.m_byOptionKind = GetDataBYTE(szTemp, nRow);
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "SpecialuseType%d", i+1);
special_option.m_byUseType = GetDataBYTE(szTemp, nRow);
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "SpecialOption%d", i+1);
special_option.m_nOption = GetDataInt(szTemp, nRow);
}
#ifdef _YMS_GENDER_FULLSETITEM
WzID null_wzid = StrToWzID("Null");
WzID effect_wzid =0;
//!< 남
effect_wzid = StrToWzID(GetDataString("sEffect1", nRow));
pInfo->m_dwEffectCode[0][1] = (effect_wzid == null_wzid) ? 0 : effect_wzid;
effect_wzid = StrToWzID(GetDataString("sEffect2", nRow));
pInfo->m_dwEffectCode[1][1] = (effect_wzid == null_wzid) ? 0 : effect_wzid;
effect_wzid = StrToWzID(GetDataString("sEffect3", nRow));
pInfo->m_dwEffectCode[2][1] = (effect_wzid == null_wzid) ? 0 : effect_wzid;
effect_wzid = StrToWzID(GetDataString("sEffect4", nRow));
pInfo->m_dwEffectCode[3][1] = (effect_wzid == null_wzid) ? 0 : effect_wzid;
//!< 여
effect_wzid = StrToWzID(GetDataString("sEffect5", nRow));
pInfo->m_dwEffectCode[0][2] = (effect_wzid == null_wzid) ? 0 : effect_wzid;
effect_wzid = StrToWzID(GetDataString("sEffect6", nRow));
pInfo->m_dwEffectCode[1][2] = (effect_wzid == null_wzid) ? 0 : effect_wzid;
effect_wzid = StrToWzID(GetDataString("sEffect7", nRow));
pInfo->m_dwEffectCode[2][2] = (effect_wzid == null_wzid) ? 0 : effect_wzid;
effect_wzid = StrToWzID(GetDataString("sEffect8", nRow));
pInfo->m_dwEffectCode[3][2] = (effect_wzid == null_wzid) ? 0 : effect_wzid;
//!< 남
pInfo->m_btBoneIdx[0][1] = GetDataBYTE("btBoneIdx1", nRow);
pInfo->m_btBoneIdx[1][1] = GetDataBYTE("btBoneIdx2", nRow);
pInfo->m_btBoneIdx[2][1] = GetDataBYTE("btBoneIdx3", nRow);
pInfo->m_btBoneIdx[3][1] = GetDataBYTE("btBoneIdx4", nRow);
//!< 여
pInfo->m_btBoneIdx[0][2] = GetDataBYTE("btBoneIdx5", nRow);
pInfo->m_btBoneIdx[1][2] = GetDataBYTE("btBoneIdx6", nRow);
pInfo->m_btBoneIdx[2][2] = GetDataBYTE("btBoneIdx7", nRow);
pInfo->m_btBoneIdx[3][2] = GetDataBYTE("btBoneIdx8", nRow);
#else
for(int i = 0; i < MAX_SETITEM_EFFECT_NUM; ++i)
{
// (CHANGES) remove buffer clear|sizeof -> _countof
char szTemp2[10]; // (REMOVE) = { 0, };
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "sEffect%d", i+1);
strncpy(szTemp2, GetDataString(szTemp, nRow), _countof(szTemp2));
szTemp2[4] = '\0';
pInfo->m_dwEffectCode[i] = (strcmp(szTemp2, "Null") == 0) ? 0 : StrToWzID(szTemp2);
_snprintf(szTemp, MAX_FIELD_NAME_SIZE, "btBoneIdx%d", i+1);
pInfo->m_btBoneIdx[i] = GetDataBYTE(szTemp, nRow);
}
#endif //_YMS_GENDER_FULLSETITEM
ValidCheck(pInfo);
// (NOTE) delete reserved section
#ifdef SHAKETAKE_DATA_CHECK
char pszAreaID[128] = {0,}; WzIDToString(pszAreaID, pInfo->m_dwEffectCode[0]);pszAreaID[4] = '\0';
char pszAreaID2[128]= {0,}; WzIDToString(pszAreaID2, pInfo->m_dwEffectCode[1]);pszAreaID2[4] = '\0';
char pszAreaID3[128]= {0,}; WzIDToString(pszAreaID3, pInfo->m_dwEffectCode[2]);pszAreaID3[4] = '\0';
SUNLOG(eCRITICAL_LOG,
"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%s\t%u\t%s\t%u\t%s\t%u\t",
pInfo->m_wSetGroupCode,
pInfo->m_byItemType,
pInfo->m_byActiveFullOptionNum,
pInfo->m_EquipActiveOption[0].m_EqPos,
pInfo->m_EquipActiveOption[0].m_ActiveOption[0].m_byOptionKind,
pInfo->m_EquipActiveOption[0].m_ActiveOption[0].m_byUseType,
pInfo->m_EquipActiveOption[0].m_ActiveOption[0].m_nOption,
pInfo->m_EquipActiveOption[0].m_ActiveOption[1].m_byOptionKind,
pInfo->m_EquipActiveOption[0].m_ActiveOption[1].m_byUseType,
pInfo->m_EquipActiveOption[0].m_ActiveOption[1].m_nOption,
pInfo->m_EquipActiveOption[0].m_ActiveOption[2].m_byOptionKind,
pInfo->m_EquipActiveOption[0].m_ActiveOption[2].m_byUseType,
pInfo->m_EquipActiveOption[0].m_ActiveOption[2].m_nOption,
pInfo->m_EquipActiveOption[1].m_EqPos,
pInfo->m_EquipActiveOption[1].m_ActiveOption[0].m_byOptionKind,
pInfo->m_EquipActiveOption[1].m_ActiveOption[0].m_byUseType,
pInfo->m_EquipActiveOption[1].m_ActiveOption[0].m_nOption,
pInfo->m_EquipActiveOption[1].m_ActiveOption[1].m_byOptionKind,
pInfo->m_EquipActiveOption[1].m_ActiveOption[1].m_byUseType,
pInfo->m_EquipActiveOption[1].m_ActiveOption[1].m_nOption,
pInfo->m_EquipActiveOption[1].m_ActiveOption[2].m_byOptionKind,
pInfo->m_EquipActiveOption[1].m_ActiveOption[2].m_byUseType,
pInfo->m_EquipActiveOption[1].m_ActiveOption[2].m_nOption,
pInfo->m_EquipActiveOption[2].m_EqPos,
pInfo->m_EquipActiveOption[2].m_ActiveOption[0].m_byOptionKind,
pInfo->m_EquipActiveOption[2].m_ActiveOption[0].m_byUseType,
pInfo->m_EquipActiveOption[2].m_ActiveOption[0].m_nOption,
pInfo->m_EquipActiveOption[2].m_ActiveOption[1].m_byOptionKind,
pInfo->m_EquipActiveOption[2].m_ActiveOption[1].m_byUseType,
pInfo->m_EquipActiveOption[2].m_ActiveOption[1].m_nOption,
pInfo->m_EquipActiveOption[2].m_ActiveOption[2].m_byOptionKind,
pInfo->m_EquipActiveOption[2].m_ActiveOption[2].m_byUseType,
pInfo->m_EquipActiveOption[2].m_ActiveOption[2].m_nOption,
pInfo->m_EquipActiveOption[3].m_EqPos,
pInfo->m_EquipActiveOption[3].m_ActiveOption[0].m_byOptionKind,
pInfo->m_EquipActiveOption[3].m_ActiveOption[0].m_byUseType,
pInfo->m_EquipActiveOption[3].m_ActiveOption[0].m_nOption,
pInfo->m_EquipActiveOption[3].m_ActiveOption[1].m_byOptionKind,
pInfo->m_EquipActiveOption[3].m_ActiveOption[1].m_byUseType,
pInfo->m_EquipActiveOption[3].m_ActiveOption[1].m_nOption,
pInfo->m_EquipActiveOption[3].m_ActiveOption[2].m_byOptionKind,
pInfo->m_EquipActiveOption[3].m_ActiveOption[2].m_byUseType,
pInfo->m_EquipActiveOption[3].m_ActiveOption[2].m_nOption,
pInfo->m_EquipActiveOption[4].m_EqPos,
pInfo->m_EquipActiveOption[4].m_ActiveOption[0].m_byOptionKind,
pInfo->m_EquipActiveOption[4].m_ActiveOption[0].m_byUseType,
pInfo->m_EquipActiveOption[4].m_ActiveOption[0].m_nOption,
pInfo->m_EquipActiveOption[4].m_ActiveOption[1].m_byOptionKind,
pInfo->m_EquipActiveOption[4].m_ActiveOption[1].m_byUseType,
pInfo->m_EquipActiveOption[4].m_ActiveOption[1].m_nOption,
pInfo->m_EquipActiveOption[4].m_ActiveOption[2].m_byOptionKind,
pInfo->m_EquipActiveOption[4].m_ActiveOption[2].m_byUseType,
pInfo->m_EquipActiveOption[4].m_ActiveOption[2].m_nOption,
pInfo->m_EquipActiveOption[5].m_EqPos,
pInfo->m_EquipActiveOption[5].m_ActiveOption[0].m_byOptionKind,
pInfo->m_EquipActiveOption[5].m_ActiveOption[0].m_byUseType,
pInfo->m_EquipActiveOption[5].m_ActiveOption[0].m_nOption,
pInfo->m_EquipActiveOption[5].m_ActiveOption[1].m_byOptionKind,
pInfo->m_EquipActiveOption[5].m_ActiveOption[1].m_byUseType,
pInfo->m_EquipActiveOption[5].m_ActiveOption[1].m_nOption,
pInfo->m_EquipActiveOption[5].m_ActiveOption[2].m_byOptionKind,
pInfo->m_EquipActiveOption[5].m_ActiveOption[2].m_byUseType,
pInfo->m_EquipActiveOption[5].m_ActiveOption[2].m_nOption,
pInfo->m_EquipActiveOption[6].m_EqPos,
pInfo->m_EquipActiveOption[6].m_ActiveOption[0].m_byOptionKind,
pInfo->m_EquipActiveOption[6].m_ActiveOption[0].m_byUseType,
pInfo->m_EquipActiveOption[6].m_ActiveOption[0].m_nOption,
pInfo->m_EquipActiveOption[6].m_ActiveOption[1].m_byOptionKind,
pInfo->m_EquipActiveOption[6].m_ActiveOption[1].m_byUseType,
pInfo->m_EquipActiveOption[6].m_ActiveOption[1].m_nOption,
pInfo->m_EquipActiveOption[6].m_ActiveOption[2].m_byOptionKind,
pInfo->m_EquipActiveOption[6].m_ActiveOption[2].m_byUseType,
pInfo->m_EquipActiveOption[6].m_ActiveOption[2].m_nOption,
pInfo->m_EquipActiveOption[7].m_EqPos,
pInfo->m_EquipActiveOption[7].m_ActiveOption[0].m_byOptionKind,
pInfo->m_EquipActiveOption[7].m_ActiveOption[0].m_byUseType,
pInfo->m_EquipActiveOption[7].m_ActiveOption[0].m_nOption,
pInfo->m_EquipActiveOption[7].m_ActiveOption[1].m_byOptionKind,
pInfo->m_EquipActiveOption[7].m_ActiveOption[1].m_byUseType,
pInfo->m_EquipActiveOption[7].m_ActiveOption[1].m_nOption,
pInfo->m_EquipActiveOption[7].m_ActiveOption[2].m_byOptionKind,
pInfo->m_EquipActiveOption[7].m_ActiveOption[2].m_byUseType,
pInfo->m_EquipActiveOption[7].m_ActiveOption[2].m_nOption,
pInfo->m_FullOption[0].m_byOptionKind,
pInfo->m_FullOption[0].m_byUseType,
pInfo->m_FullOption[0].m_nOption,
pInfo->m_FullOption[1].m_byOptionKind,
pInfo->m_FullOption[1].m_byUseType,
pInfo->m_FullOption[1].m_nOption,
pInfo->m_FullOption[2].m_byOptionKind,
pInfo->m_FullOption[2].m_byUseType,
pInfo->m_FullOption[2].m_nOption,
pInfo->m_FullOption[3].m_byOptionKind,
pInfo->m_FullOption[3].m_byUseType,
pInfo->m_FullOption[3].m_nOption,
pInfo->m_FullOption[4].m_byOptionKind,
pInfo->m_FullOption[4].m_byUseType,
pInfo->m_FullOption[4].m_nOption,
pszAreaID,
pInfo->m_btBoneIdx[0],
pszAreaID2,
pInfo->m_btBoneIdx[1],
pszAreaID3,
pInfo->m_btBoneIdx[2]);
#endif //SHAKETAKE_DATA_CHECK
}
return true;
}
void SetItemOptionInfoParser::ValidCheck(SETITEM_OPTION_INFO* pInfo)
{
for(int i = 0; i < MAX_SETITEM_ACTIVE_EQUIP_OPTION; ++i)
{
EQUIP_ACTIVE_OPTION& option = pInfo->m_EquipActiveOption[i];
for(int j = 0; j < MAX_SETITEM_OPTION_LEVEL; ++j)
{
SET_ITEM_OPTION& setOption = option.m_ActiveOption[j];
const BYTE byOptionKind = setOption.m_byOptionKind;
const BYTE byUseType = setOption.m_byUseType;
const int nOption = setOption.m_nOption;
if(!CheckOptionValidity(byOptionKind, byUseType, nOption))
{
SUNLOG(eCRITICAL_LOG,
"[SetItemOption]|轟槻돨陋구朞淃|"
"SetGroupCode=%d|OptionIndex=%d|OptionType=%d|OptionValue=%d|",
pInfo->m_wSetGroupCode, byOptionKind, byUseType, nOption);
}
}
}
for(int k = 0; k < MAX_SETITEM_FULL_OPTION; ++k)
{
SET_ITEM_OPTION& setOption = pInfo->m_FullOption[k];
const BYTE byOptionKind = setOption.m_byOptionKind;
const BYTE byUseType = setOption.m_byUseType;
const int nOption = setOption.m_nOption;
if(!CheckOptionValidity(byOptionKind, byUseType, nOption))
{
SUNLOG(eCRITICAL_LOG,
"[SetItemOption]|轟槻돨供憐朞淃|"
"SetGroupCode=%d|OptionIndex=%d|OptionType=%d|OptionValue=%d|",
pInfo->m_wSetGroupCode, byOptionKind, byUseType, nOption);
}
}
SPECIAL_EQUIP_ACTIVE_OPTION& specialOption = pInfo->m_SpecialEquipOptionItem;
for(int l = 0; l < MAX_SETITEM_SPECIAL_OPTION; ++l)
{
SET_ITEM_OPTION& setOption = specialOption.m_ActiveOption[l];
const BYTE byOptionKind = setOption.m_byOptionKind;
const BYTE byUseType = setOption.m_byUseType;
const int nOption = setOption.m_nOption;
if(!CheckOptionValidity(byOptionKind, byUseType, nOption))
{
SUNLOG(eCRITICAL_LOG,
"[SetItemOption]|轟槻돨景喝朞淃|"
"SetGroupCode=%d|OptionIndex=%d|OptionType=%d|OptionValue=%d|",
pInfo->m_wSetGroupCode, byOptionKind, byUseType, nOption);
}
}
}