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();
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())
{
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);
if (it == m_map_itemTableByVnum.end())
{
SPDLOG_ERROR("Invalid item(vnum : {}). It is not in m_map_itemTableByVnum.", dwItemVnum);
continue;
}
TItemTable *item_table = it->second;
if (item_table == NULL)
{
SPDLOG_ERROR("Invalid item_table (vnum : {}). It's value is NULL in m_map_itemTableByVnum.", dwItemVnum);
continue;
}
if (0 == pItemAward->dwSocket0)
{
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
{
pqxx::work txn{*conn};
pqxx::result res = txn.exec_params(
"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",
pqxx::params{
GainItemID(),
pi->account_id,
pi->ip[0] == 0 ? "SAFEBOX" : "MALL",
iPos,
pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, dwSocket2});
pqxx::result res = txn.exec_prepared(
"result_safebox_load_insert_item",
GainItemID(),
pi->account_id,
pi->ip[0] == 0 ? "SAFEBOX" : "MALL",
iPos,
pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, dwSocket2);
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));
grid.Put(iPos, 1, it->second->bSize);
txn.commit();
}
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)
ItemAwardManager::instance().Taken(vec_dwFinishedAwardID[i].first, vec_dwFinishedAwardID[i].second);
}