change: Marriage.

This commit is contained in:
WildEgo 2025-06-07 22:42:01 +01:00
parent 93d8f2a0be
commit 3a38f8828c
2 changed files with 89 additions and 53 deletions

View File

@ -13,5 +13,5 @@
- [ ] GuildManager - [ ] GuildManager
- [ ] ItemAwardManager - [ ] ItemAwardManager
- [ ] ItemIDRangeManager - [ ] ItemIDRangeManager
- [ ] Marriage - [x] Marriage
- [x] Monarch - [x] Monarch

View File

@ -34,36 +34,32 @@ namespace marriage
bool CManager::Initialize() bool CManager::Initialize()
{ {
char szQuery[1024]; auto pool = CDBManager::instance().GetConnectionPool();
auto conn = pool->acquire();
snprintf(szQuery, sizeof(szQuery), try
"SELECT pid1, pid2, love_point, time, is_married, p1.name, p2.name FROM marriage, player%s as p1, player%s as p2 WHERE p1.id = pid1 AND p2.id = pid2",
GetTablePostfix(), GetTablePostfix());
unique_ptr<SQLMsg> pmsg_delete(CDBManager::instance().DirectQuery("DELETE FROM marriage WHERE is_married = 0"));
unique_ptr<SQLMsg> pmsg(CDBManager::instance().DirectQuery(szQuery));
SQLResult *pRes = pmsg->Get();
SPDLOG_DEBUG("MarriageList(size={})", pRes->uiNumRows);
if (pRes->uiNumRows > 0)
{ {
for (uint uiRow = 0; uiRow != pRes->uiNumRows; ++uiRow) pqxx::work txn{*conn};
{ txn.exec("DELETE FROM player.marriage WHERE is_married = false");
MYSQL_ROW row = mysql_fetch_row(pRes->pSQLResult); pqxx::result result = txn.exec("SELECT player_id_1, player_id_2, love_points, created_at, is_married, p1.name, p2.name FROM player.marriage, player.player as p1, player.player as p2 WHERE p1.id = player_id_1 AND p2.id = player_id_2");
std::size_t const numRows = std::size(result);
SPDLOG_DEBUG("MarriageList(size={})", numRows);
for (auto row : result)
{
DWORD pid1 = 0; DWORD pid1 = 0;
str_to_number(pid1, row[0]); str_to_number(pid1, row[0].c_str());
DWORD pid2 = 0; DWORD pid2 = 0;
str_to_number(pid2, row[1]); str_to_number(pid2, row[1].c_str());
int love_point = 0; int love_point = 0;
str_to_number(love_point, row[2]); str_to_number(love_point, row[2].c_str());
DWORD time = 0; DWORD time = 0;
str_to_number(time, row[3]); str_to_number(time, row[3].c_str());
BYTE is_married = 0; BYTE is_married = 0;
str_to_number(is_married, row[4]); str_to_number(is_married, row[4].c_str());
const char *name1 = row[5]; const char *name1 = row[5].c_str();
const char *name2 = row[6]; const char *name2 = row[6].c_str();
TMarriage *pMarriage = new TMarriage(pid1, pid2, love_point, time, is_married, name1, name2); TMarriage *pMarriage = new TMarriage(pid1, pid2, love_point, time, is_married, name1, name2);
m_Marriages.insert(pMarriage); m_Marriages.insert(pMarriage);
@ -73,6 +69,12 @@ namespace marriage
SPDLOG_DEBUG("Marriage {}: LP:{} TM:{} ST:{} {:10}:{:16} {:10}:{:16} ", uiRow, love_point, time, is_married, pid1, name1, pid2, name2); SPDLOG_DEBUG("Marriage {}: LP:{} TM:{} ST:{} {:10}:{:16} {:10}:{:16} ", uiRow, love_point, time, is_married, pid1, name1, pid2, name2);
} }
} }
catch (const std::exception &e)
{
SPDLOG_ERROR("[CManager::Initialize] Query error: {}", e.what());
return false;
}
return true; return true;
} }
@ -103,17 +105,26 @@ namespace marriage
Align(dwPID1, dwPID2); Align(dwPID1, dwPID2);
char szQuery[512]; auto pool = CDBManager::instance().GetConnectionPool();
snprintf(szQuery, sizeof(szQuery), "INSERT INTO marriage(pid1, pid2, love_point, time) VALUES (%u, %u, 0, %u)", dwPID1, dwPID2, now); auto conn = pool->acquire();
unique_ptr<SQLMsg> pmsg(CDBManager::instance().DirectQuery(szQuery)); try
{
pqxx::work txn{*conn};
pqxx::result result = txn.exec_params("INSERT INTO player.marriage(player_id_1, player_id_2, love_points, created_at) VALUES ($1, $2, 0, $3) RETURNING id", dwPID1, dwPID2, now);
std::size_t const numRows = std::size(result);
SQLResult *res = pmsg->Get(); if (numRows == 0)
if (res->uiAffectedRows == 0 || res->uiAffectedRows == (uint32_t)-1)
{ {
SPDLOG_ERROR("cannot insert marriage"); SPDLOG_ERROR("cannot insert marriage");
return; return;
} }
}
catch (const std::exception &e)
{
SPDLOG_ERROR("[CManager::Add] Query error: {}", e.what());
return;
}
SPDLOG_DEBUG("MARRIAGE ADD {} {}", dwPID1, dwPID2); SPDLOG_DEBUG("MARRIAGE ADD {} {}", dwPID1, dwPID2);
@ -142,18 +153,26 @@ namespace marriage
Align(dwPID1, dwPID2); Align(dwPID1, dwPID2);
char szQuery[512]; auto pool = CDBManager::instance().GetConnectionPool();
snprintf(szQuery, sizeof(szQuery), "UPDATE marriage SET love_point = %d, is_married = %d WHERE pid1 = %u AND pid2 = %u", auto conn = pool->acquire();
iLovePoint, byMarried, pMarriage->pid1, pMarriage->pid2);
unique_ptr<SQLMsg> pmsg(CDBManager::instance().DirectQuery(szQuery)); try
{
pqxx::work txn{*conn};
pqxx::result result = txn.exec_params("UPDATE player.marriage SET love_points=$1, is_married=$2 WHERE player_id_1=$3 AND player_id_2=$4 RETURNING id", iLovePoint, byMarried, pMarriage->pid1, pMarriage->pid2);
std::size_t const numRows = std::size(result);
SQLResult *res = pmsg->Get(); if (numRows == 0)
if (res->uiAffectedRows == 0 || res->uiAffectedRows == (uint32_t)-1)
{ {
SPDLOG_ERROR("cannot update marriage : PID:{} {}", dwPID1, dwPID2); SPDLOG_ERROR("cannot update marriage : PID:{} {}", dwPID1, dwPID2);
return; return;
} }
}
catch (const std::exception &e)
{
SPDLOG_ERROR("[CManager::Update] Query error: {}", e.what());
return;
}
SPDLOG_DEBUG("MARRIAGE UPDATE PID:{} {} LP:{} ST:{}", dwPID1, dwPID2, iLovePoint, byMarried); SPDLOG_DEBUG("MARRIAGE UPDATE PID:{} {} LP:{} ST:{}", dwPID1, dwPID2, iLovePoint, byMarried);
pMarriage->love_point = iLovePoint; pMarriage->love_point = iLovePoint;
@ -189,17 +208,26 @@ namespace marriage
Align(dwPID1, dwPID2); Align(dwPID1, dwPID2);
char szQuery[512]; auto pool = CDBManager::instance().GetConnectionPool();
snprintf(szQuery, sizeof(szQuery), "DELETE FROM marriage WHERE pid1 = %u AND pid2 = %u", dwPID1, dwPID2); auto conn = pool->acquire();
unique_ptr<SQLMsg> pmsg(CDBManager::instance().DirectQuery(szQuery)); try
{
pqxx::work txn{*conn};
pqxx::result result = txn.exec_params("DELETE FROM player.marriage WHERE player_id_1=$1 AND player_id_2=$2", dwPID1, dwPID2);
std::size_t const numRows = std::size(result);
SQLResult *res = pmsg->Get(); if (numRows == 0)
if (res->uiAffectedRows == 0 || res->uiAffectedRows == (uint32_t)-1)
{ {
SPDLOG_ERROR("cannot delete marriage : PID:{} {}", dwPID1, dwPID2); SPDLOG_ERROR("cannot delete marriage : PID:{} {}", dwPID1, dwPID2);
return; return;
} }
}
catch (const std::exception &e)
{
SPDLOG_ERROR("[CManager::Remove] Query error: {}", e.what());
return;
}
SPDLOG_DEBUG("MARRIAGE REMOVE PID:{} {}", dwPID1, dwPID2); SPDLOG_DEBUG("MARRIAGE REMOVE PID:{} {}", dwPID1, dwPID2);
@ -232,18 +260,26 @@ namespace marriage
Align(dwPID1, dwPID2); Align(dwPID1, dwPID2);
char szQuery[512]; auto pool = CDBManager::instance().GetConnectionPool();
snprintf(szQuery, sizeof(szQuery), "UPDATE marriage SET is_married = 1 WHERE pid1 = %u AND pid2 = %u", auto conn = pool->acquire();
pMarriage->pid1, pMarriage->pid2);
unique_ptr<SQLMsg> pmsg(CDBManager::instance().DirectQuery(szQuery)); try
{
pqxx::work txn{*conn};
pqxx::result result = txn.exec_params("UPDATE player.marriage SET is_married = 1 WHERE player_id_1=$1 AND player_id_2=$2", pMarriage->pid1, pMarriage->pid2);
std::size_t const numRows = std::size(result);
SQLResult *res = pmsg->Get(); if (numRows == 0)
if (res->uiAffectedRows == 0 || res->uiAffectedRows == (uint32_t)-1)
{ {
SPDLOG_ERROR("cannot change engage to marriage : PID:{} {}", dwPID1, dwPID2); SPDLOG_ERROR("cannot change engage to marriage : PID:{} {}", dwPID1, dwPID2);
return; return;
} }
}
catch (const std::exception &e)
{
SPDLOG_ERROR("[CManager::EngageToMarriage] Query error: {}", e.what());
return;
}
SPDLOG_DEBUG("MARRIAGE ENGAGE->MARRIAGE PID:{} {}", dwPID1, dwPID2); SPDLOG_DEBUG("MARRIAGE ENGAGE->MARRIAGE PID:{} {}", dwPID1, dwPID2);
pMarriage->is_married = 1; pMarriage->is_married = 1;