bool CClientManager::InitializeItemAttrTable()
{
char query[4096];
snprintf(query, sizeof(query),
"SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear, pendant FROM item_attr%s ORDER BY apply",
GetTablePostfix());
std::unique_ptr<SQLMsg> pkMsg (CDBManager::instance().DirectQuery (query));
SQLResult* pRes = pkMsg->Get();
if (!pRes->uiNumRows)
{
sys_err ("no result from item_attr");
return false;
}
if (!m_vec_itemAttrTable.empty())
{
sys_log (0, "RELOAD: item_attr");
m_vec_itemAttrTable.clear();
}
m_vec_itemAttrTable.reserve (pRes->uiNumRows);
MYSQL_ROW data;
while ((data = mysql_fetch_row (pRes->pSQLResult)))
{
TItemAttrTable t;
memset (&t, 0, sizeof (TItemAttrTable));
int col = 0;
strlcpy (t.szApply, data[col++], sizeof (t.szApply));
str_to_number (t.dwApplyIndex, data[col++]);
str_to_number (t.dwProb, data[col++]);
str_to_number (t.lValues[0], data[col++]);
str_to_number (t.lValues[1], data[col++]);
str_to_number (t.lValues[2], data[col++]);
str_to_number (t.lValues[3], data[col++]);
str_to_number (t.lValues[4], data[col++]);
str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], data[col++]);
str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]);
str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]);
str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]);
str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]);
str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]);
str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);
#ifdef ITEM_TALISMAN_EQUIPMENT
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_PENDANT], data[col++]);
#endif
sys_log (0, "ITEM_ATTR: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d %d }",
t.szApply,
t.dwProb,
t.lValues[0],
t.lValues[1],
t.lValues[2],
t.lValues[3],
t.lValues[4],
t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON],
t.bMaxLevelBySet[ATTRIBUTE_SET_BODY],
t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST],
t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS],
t.bMaxLevelBySet[ATTRIBUTE_SET_NECK],
t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD],
t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD],
t.bMaxLevelBySet[ATTRIBUTE_SET_EAR]
#ifdef ITEM_TALISMAN_EQUIPMENT
,t.bMaxLevelBySet[ATTRIBUTE_SET_PENDANT]
#endif
);
m_vec_itemAttrTable.push_back (t);
}
return true;
}