fix: RESULT_SAFEBOX_LOAD.

This commit is contained in:
WildEgo 2025-06-09 17:28:58 +01:00
parent 74e9f0e99d
commit 42fd697dac

View File

@ -747,6 +747,21 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer *pkPeer, ClientHandleInfo *pi, pq
typeof(pSet->begin()) it = pSet->begin(); typeof(pSet->begin()) it = pSet->begin();
auto pool = CDBManager::instance().GetConnectionPool();
auto conn = pool->acquire();
pqxx::work txn{*conn};
static bool prepared = false;
if (!prepared)
{
conn->prepare("result_safebox_load_insert_item",
"INSERT INTO player.item (id, owner_id, window, position, vnum, count, socket_0, socket_1, socket_2) "
"VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id");
prepared = true;
}
while (it != pSet->end()) while (it != pSet->end())
{ {
TItemAward *pItemAward = *(it++); TItemAward *pItemAward = *(it++);
@ -847,17 +862,20 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer *pkPeer, ClientHandleInfo *pi, pq
{ {
itertype(m_map_itemTableByVnum) it = m_map_itemTableByVnum.find(dwItemVnum); itertype(m_map_itemTableByVnum) it = m_map_itemTableByVnum.find(dwItemVnum);
if (it == m_map_itemTableByVnum.end()) if (it == m_map_itemTableByVnum.end())
{ {
SPDLOG_ERROR("Invalid item(vnum : {}). It is not in m_map_itemTableByVnum.", dwItemVnum); SPDLOG_ERROR("Invalid item(vnum : {}). It is not in m_map_itemTableByVnum.", dwItemVnum);
continue; continue;
} }
TItemTable *item_table = it->second; TItemTable *item_table = it->second;
if (item_table == NULL) if (item_table == NULL)
{ {
SPDLOG_ERROR("Invalid item_table (vnum : {}). It's value is NULL in m_map_itemTableByVnum.", dwItemVnum); SPDLOG_ERROR("Invalid item_table (vnum : {}). It's value is NULL in m_map_itemTableByVnum.", dwItemVnum);
continue; continue;
} }
if (0 == pItemAward->dwSocket0) if (0 == pItemAward->dwSocket0)
{ {
for (int i = 0; i < ITEM_LIMIT_MAX_NUM; i++) for (int i = 0; i < ITEM_LIMIT_MAX_NUM; i++)
@ -884,21 +902,15 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer *pkPeer, ClientHandleInfo *pi, pq
} }
} }
auto pool = CDBManager::instance().GetConnectionPool();
auto conn = pool->acquire();
try try
{ {
pqxx::work txn{*conn}; pqxx::result res = txn.exec_prepared(
pqxx::result res = txn.exec_params( "result_safebox_load_insert_item",
"INSERT INTO player.item (id, owner_id, window, position, vnum, count, socket_0, socket_1, socket_2) " GainItemID(),
"VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id", pi->account_id,
pqxx::params{ pi->ip[0] == 0 ? "SAFEBOX" : "MALL",
GainItemID(), iPos,
pi->account_id, pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, dwSocket2);
pi->ip[0] == 0 ? "SAFEBOX" : "MALL",
iPos,
pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, dwSocket2});
SPDLOG_DEBUG("SAFEBOX Query"); SPDLOG_DEBUG("SAFEBOX Query");
@ -917,8 +929,6 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer *pkPeer, ClientHandleInfo *pi, pq
vec_dwFinishedAwardID.push_back(std::make_pair(pItemAward->dwID, item.id)); vec_dwFinishedAwardID.push_back(std::make_pair(pItemAward->dwID, item.id));
grid.Put(iPos, 1, it->second->bSize); grid.Put(iPos, 1, it->second->bSize);
txn.commit();
} }
catch (const std::exception &e) catch (const std::exception &e)
{ {
@ -927,6 +937,8 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer *pkPeer, ClientHandleInfo *pi, pq
} }
} }
txn.commit();
for (DWORD i = 0; i < vec_dwFinishedAwardID.size(); ++i) for (DWORD i = 0; i < vec_dwFinishedAwardID.size(); ++i)
ItemAwardManager::instance().Taken(vec_dwFinishedAwardID[i].first, vec_dwFinishedAwardID[i].second); ItemAwardManager::instance().Taken(vec_dwFinishedAwardID[i].first, vec_dwFinishedAwardID[i].second);
} }