Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
577
Server/DBProcess/RylDBLibrary/RylDBCharCommand.cpp
Normal file
577
Server/DBProcess/RylDBLibrary/RylDBCharCommand.cpp
Normal file
@@ -0,0 +1,577 @@
|
||||
#include <Log/ServerLog.h>
|
||||
#include "RylDBStoreCommand.h"
|
||||
#include "RylDBCharCommand.h"
|
||||
|
||||
namespace RylDBCommand
|
||||
{
|
||||
|
||||
#define BOUNDED_SUBTRACT(data, minusval, minbound) if ((data) < (minusval) + (minbound)) { (data) = (minbound); } else { (data) -= (minusval); }
|
||||
|
||||
void DBErrorLogByCID(DBErrorType eErrorType,
|
||||
unsigned long dwCID, HRESULT hr,
|
||||
const char* szClassName, const CString& DBStatus)
|
||||
{
|
||||
switch(eErrorType)
|
||||
{
|
||||
case DBERR_CONVERT_FAILED:
|
||||
ERRLOG2(g_Log, "CID:%10u / %s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD>", dwCID, szClassName);
|
||||
break;
|
||||
|
||||
case DBERR_SETDATA_FAILED:
|
||||
ERRLOG4(g_Log, "CID:%10u / hr:0x%08x / %s SetData <20><><EFBFBD><EFBFBD> : DBStatus:%s",
|
||||
dwCID, hr, szClassName, DBStatus);
|
||||
break;
|
||||
|
||||
case DBERR_UPDATE_FAILED:
|
||||
ERRLOG4(g_Log, "CID:%10u / hr:0x%08x / %s Update <20><><EFBFBD><EFBFBD> : DBStatus:%s",
|
||||
dwCID, hr, szClassName, DBStatus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CCharData::Init(void)
|
||||
{
|
||||
m_CID = 0;
|
||||
|
||||
memset(m_Name, 0, sizeof(char) * CHAR_INFOST::MAX_NAME_LEN);
|
||||
memset(m_EquipData, 0, sizeof(BYTE) * MAX_EQUIP_DATA);
|
||||
|
||||
m_Sex = m_Hair = m_Face = m_Race = 0;
|
||||
m_Class = 0;
|
||||
|
||||
m_Fame = m_Mileage = m_GID = m_PID = 0;
|
||||
m_Level = 0;
|
||||
|
||||
m_Gold = 0;
|
||||
|
||||
m_IP = m_STR = m_DEX = m_CON = m_INT = m_WIS = m_HP = m_MP = 0;
|
||||
m_Exp = 0LL;
|
||||
|
||||
m_Chance = 0;
|
||||
m_NameLen = m_EquipLen = 0;
|
||||
|
||||
// Data Status
|
||||
m_CIDStatus = m_NameStatus = m_SexStatus = m_HairStatus =
|
||||
m_FaceStatus = m_RaceStatus = m_ClassStatus = m_FameStatus =
|
||||
m_MileageStatus = m_GIDStatus = m_PIDStatus = m_LevelStatus =
|
||||
m_GoldStatus = m_IPStatus = m_STRStatus = m_DEXStatus =
|
||||
m_CONStatus = m_INTStatus = m_WISStatus = m_HPStatus = m_MPStatus = m_ExpStatus =
|
||||
m_ChanceStatus = m_EquipDataStatus = DBSTATUS_S_OK;
|
||||
}
|
||||
|
||||
bool CCharData::operator == (const CCharData& rhs) const
|
||||
{
|
||||
return (m_CID == rhs.m_CID &&
|
||||
0 == memcmp(m_Name, rhs.m_Name, sizeof(char) * CHAR_INFOST::MAX_NAME_LEN) &&
|
||||
m_Sex == rhs.m_Sex &&
|
||||
m_Hair == rhs.m_Hair &&
|
||||
m_Face == rhs.m_Face &&
|
||||
m_Race == rhs.m_Race &&
|
||||
m_Class == rhs.m_Class &&
|
||||
m_Fame == rhs.m_Fame &&
|
||||
m_Mileage == rhs.m_Mileage &&
|
||||
m_GID == rhs.m_GID &&
|
||||
m_PID == rhs.m_PID &&
|
||||
m_Level == rhs.m_Level &&
|
||||
m_Gold == rhs.m_Gold &&
|
||||
m_IP == rhs.m_IP &&
|
||||
m_STR == rhs.m_STR &&
|
||||
m_DEX == rhs.m_DEX &&
|
||||
m_CON == rhs.m_CON &&
|
||||
m_INT == rhs.m_INT &&
|
||||
m_WIS == rhs.m_WIS &&
|
||||
m_HP == rhs.m_HP &&
|
||||
m_MP == rhs.m_MP &&
|
||||
m_Exp == rhs.m_Exp &&
|
||||
m_Chance == rhs.m_Chance &&
|
||||
0 == memcmp(m_EquipData, rhs.m_EquipData, sizeof(BYTE) * MAX_EQUIP_DATA));
|
||||
}
|
||||
|
||||
void CCharData::LogError(DBErrorType eErrorType, HRESULT hr)
|
||||
{
|
||||
DBErrorLogByCID(eErrorType, GetCID(), hr, "CCharData", GetDBStatus());
|
||||
}
|
||||
|
||||
CString CCharData::GetDBStatus()
|
||||
{
|
||||
CString dbStatus;
|
||||
|
||||
dbStatus.Format("CID:%10u(0x%08x) "
|
||||
"Name:%s(0x%08x) "
|
||||
"Sex:%d(0x%08x) "
|
||||
"Hair:%d(0x%08x) "
|
||||
"Face:%d(0x%08x) "
|
||||
"Race:%d(0x%08x) "
|
||||
"Class:%d(0x%08x) "
|
||||
"Fame:%6d(0x%08x) "
|
||||
"Mileage:%6d(0x%08x) "
|
||||
"GID:%d(0x%08x) "
|
||||
"PID:%d(0x%08x) "
|
||||
"Level:%d(0x%08x) "
|
||||
"Gold:%10u(0x%08x) "
|
||||
"IP:%d(0x%08x) "
|
||||
"STR:%3d(0x%08x) "
|
||||
"DEX:%3d(0x%08x) "
|
||||
"CON:%3d(0x%08x) "
|
||||
"INT:%3d(0x%08x) "
|
||||
"WIS:%3d(0x%08x) "
|
||||
"HP:%d(0x%08x) "
|
||||
"MP:%d(0x%08x) "
|
||||
"Exp:%I64u(0x%08x) "
|
||||
"Chance:%d(0x%08x) "
|
||||
"Equipdata(0x%08x) ",
|
||||
m_CID, m_CIDStatus,
|
||||
m_Name, m_NameStatus,
|
||||
m_Sex, m_SexStatus,
|
||||
m_Hair, m_HairStatus,
|
||||
m_Face, m_FaceStatus,
|
||||
m_Race, m_RaceStatus,
|
||||
m_Class, m_ClassStatus,
|
||||
m_Fame, m_FameStatus,
|
||||
m_Mileage, m_MileageStatus,
|
||||
m_GID, m_GIDStatus,
|
||||
m_PID, m_PIDStatus,
|
||||
m_Level, m_LevelStatus,
|
||||
m_Gold, m_GoldStatus,
|
||||
m_IP, m_IPStatus,
|
||||
m_STR, m_STRStatus,
|
||||
m_DEX, m_DEXStatus,
|
||||
m_CON, m_CONStatus,
|
||||
m_INT, m_INTStatus,
|
||||
m_WIS, m_WISStatus,
|
||||
m_HP, m_HPStatus,
|
||||
m_MP, m_MPStatus,
|
||||
m_Exp, m_ExpStatus,
|
||||
m_Chance, m_ChanceStatus,
|
||||
m_EquipDataStatus);
|
||||
|
||||
return dbStatus;
|
||||
}
|
||||
|
||||
void CSkillData::Init(void)
|
||||
{
|
||||
m_CID = 0;
|
||||
memset(m_Skill, 0, sizeof(BYTE) * sizeof(SKILL));
|
||||
|
||||
m_SkillLength = 0;
|
||||
m_CIDStatus = m_SkillStatus = DBSTATUS_S_OK;
|
||||
}
|
||||
|
||||
void CSkillData::LogError(DBErrorType eErrorType, HRESULT hr)
|
||||
{
|
||||
DBErrorLogByCID(eErrorType, GetCID(), hr, "CSkillData", GetDBStatus());
|
||||
}
|
||||
|
||||
bool CSkillData::operator == (const CSkillData& rhs) const
|
||||
{
|
||||
return m_CID == rhs.m_CID &&
|
||||
0 == memcmp(m_Skill, rhs.m_Skill, sizeof(SKILL));
|
||||
}
|
||||
|
||||
CString CSkillData::GetDBStatus()
|
||||
{
|
||||
CString dbStatus;
|
||||
|
||||
dbStatus.Format("CID:%10u(0x%08x) Skill(0x%08x)",
|
||||
m_CID, m_CIDStatus, m_SkillStatus);
|
||||
|
||||
return dbStatus;
|
||||
}
|
||||
|
||||
void CCharItem::Init()
|
||||
{
|
||||
m_CID = 0;
|
||||
|
||||
memset(m_Quick, 0, sizeof(QUICK));
|
||||
memset(m_Equip, 0, sizeof(EQUIP));
|
||||
memset(m_Inven, 0, sizeof(INVEN));
|
||||
memset(m_Extra, 0, sizeof(EXTRA));
|
||||
|
||||
m_QuickLen = m_EquipLen = m_InvenLen = m_ExtraLen = 0;
|
||||
m_CIDStatus = m_QuickStatus = m_EquipStatus = m_InvenStatus = m_ExtraStatus = DBSTATUS_S_OK;
|
||||
|
||||
m_bAdjustSize = false;
|
||||
}
|
||||
|
||||
void CCharItem::LogError(DBErrorType eErrorType, HRESULT hr)
|
||||
{
|
||||
DBErrorLogByCID(eErrorType, GetCID(), hr, "CCharItem", GetDBStatus());
|
||||
}
|
||||
|
||||
void CCharItem::AdjustSize(bool bRestore)
|
||||
{
|
||||
if (bRestore && m_bAdjustSize)
|
||||
{
|
||||
reinterpret_cast<EQUIP&>(m_Equip).dwSize += sizeof(unsigned long);
|
||||
reinterpret_cast<INVEN&>(m_Inven).dwSize += sizeof(unsigned long);
|
||||
reinterpret_cast<EXTRA&>(m_Extra).dwSize += sizeof(unsigned long);
|
||||
m_bAdjustSize = false;
|
||||
}
|
||||
else if (!bRestore && !m_bAdjustSize)
|
||||
{
|
||||
BOUNDED_SUBTRACT(reinterpret_cast<EQUIP&>(m_Equip).dwSize, sizeof(unsigned long), 0);
|
||||
BOUNDED_SUBTRACT(reinterpret_cast<INVEN&>(m_Inven).dwSize, sizeof(unsigned long), 0);
|
||||
BOUNDED_SUBTRACT(reinterpret_cast<EXTRA&>(m_Extra).dwSize, sizeof(unsigned long), 0);
|
||||
m_bAdjustSize = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool CCharItem::operator == (const CCharItem& rhs) const
|
||||
{
|
||||
return m_CID == rhs.m_CID &&
|
||||
0 == memcmp(m_Quick, rhs.m_Quick, sizeof(QUICK)) &&
|
||||
0 == memcmp(m_Equip, rhs.m_Equip, sizeof(EQUIP)) &&
|
||||
0 == memcmp(m_Inven, rhs.m_Inven, sizeof(INVEN)) &&
|
||||
0 == memcmp(m_Extra, rhs.m_Extra, sizeof(EXTRA));
|
||||
}
|
||||
|
||||
CString CCharItem::GetDBStatus()
|
||||
{
|
||||
CString dbStatus;
|
||||
|
||||
dbStatus.Format("CID:%10u(0x%08x) Quick(0x%08x) "
|
||||
"Equip:%d(0x%08x) Inven:%d(0x%08x) Extra:%d(0x%08x)",
|
||||
m_CID, m_CIDStatus, m_QuickStatus,
|
||||
GetEquip().dwSize, m_EquipStatus,
|
||||
GetInven().dwSize, m_InvenStatus,
|
||||
GetExtra().dwSize, m_ExtraStatus);
|
||||
|
||||
return dbStatus;
|
||||
}
|
||||
|
||||
void CCharItemEx::Init()
|
||||
{
|
||||
m_CID = 0;
|
||||
|
||||
memset(m_Exchange, 0, sizeof(EXCHANGE));
|
||||
memset(m_TempInven, 0, sizeof(TEMPINVEN));
|
||||
|
||||
m_ExchangeLen = m_TempInvenLen = 0;
|
||||
m_CIDStatus = m_ExchangeStatus = m_TempInvenStatus = DBSTATUS_S_OK;
|
||||
|
||||
m_bAdjustSize = false;
|
||||
}
|
||||
|
||||
void CCharItemEx::LogError(DBErrorType eErrorType, HRESULT hr)
|
||||
{
|
||||
DBErrorLogByCID(eErrorType, GetCID(), hr, "CCharItemEx", GetDBStatus());
|
||||
}
|
||||
|
||||
void CCharItemEx::AdjustSize(bool bRestore)
|
||||
{
|
||||
if (bRestore && m_bAdjustSize)
|
||||
{
|
||||
reinterpret_cast<EXCHANGE&>(m_Exchange).dwSize += sizeof(unsigned long);
|
||||
reinterpret_cast<TEMPINVEN&>(m_TempInven).dwSize += sizeof(unsigned long);
|
||||
m_bAdjustSize = false;
|
||||
}
|
||||
else if (!bRestore && !m_bAdjustSize)
|
||||
{
|
||||
BOUNDED_SUBTRACT(reinterpret_cast<EXCHANGE&>(m_Exchange).dwSize, sizeof(unsigned long), 0);
|
||||
BOUNDED_SUBTRACT(reinterpret_cast<TEMPINVEN&>(m_TempInven).dwSize, sizeof(unsigned long), 0);
|
||||
m_bAdjustSize = true;
|
||||
}
|
||||
}
|
||||
|
||||
bool CCharItemEx::operator == (const CCharItemEx& rhs) const
|
||||
{
|
||||
return m_CID == rhs.m_CID &&
|
||||
0 == memcmp(m_Exchange, rhs.m_Exchange, sizeof(EXCHANGE)) &&
|
||||
0 == memcmp(m_TempInven, rhs.m_TempInven, sizeof(TEMPINVEN));
|
||||
}
|
||||
|
||||
CString CCharItemEx::GetDBStatus()
|
||||
{
|
||||
CString dbStatus;
|
||||
|
||||
dbStatus.Format("CID:%10u(0x%08x) Exchange:%d(0x%08x) TempInven:%d(0x%08x)",
|
||||
m_CID, m_CIDStatus, GetExchange().dwSize, m_ExchangeStatus,
|
||||
GetTempInven().dwSize, m_TempInvenStatus);
|
||||
|
||||
return dbStatus;
|
||||
}
|
||||
|
||||
void CCharQuest::Init()
|
||||
{
|
||||
m_CID = 0;
|
||||
|
||||
memset(m_Quest, 0, sizeof(QUEST));
|
||||
memset(m_History, 0, sizeof(HISTORY));
|
||||
|
||||
m_QuestLen = m_HistoryLen = 0;
|
||||
m_CIDStatus = m_QuestStatus = m_HistoryStatus = DBSTATUS_S_OK;
|
||||
|
||||
m_bAdjustSize = false;
|
||||
}
|
||||
|
||||
void CCharQuest::LogError(DBErrorType eErrorType, HRESULT hr)
|
||||
{
|
||||
DBErrorLogByCID(eErrorType, GetCID(), hr, "CCharQuest", GetDBStatus());
|
||||
}
|
||||
|
||||
void CCharQuest::AdjustSize(bool bRestore)
|
||||
{
|
||||
if (bRestore && m_bAdjustSize)
|
||||
{
|
||||
reinterpret_cast<QUEST&>(m_Quest).dwSize += sizeof(unsigned long);
|
||||
reinterpret_cast<HISTORY&>(m_History).dwSize += sizeof(unsigned long);
|
||||
|
||||
m_bAdjustSize = false;
|
||||
}
|
||||
else if(!bRestore && !m_bAdjustSize)
|
||||
{
|
||||
BOUNDED_SUBTRACT(reinterpret_cast<QUEST&>(m_Quest).dwSize, sizeof(unsigned long), 0);
|
||||
BOUNDED_SUBTRACT(reinterpret_cast<HISTORY&>(m_History).dwSize, sizeof(unsigned long), 0);
|
||||
|
||||
m_bAdjustSize = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool CCharQuest::operator == (const CCharQuest& rhs) const
|
||||
{
|
||||
return m_CID == rhs.m_CID &&
|
||||
0 == memcmp(m_Quest, rhs.m_Quest, sizeof(QUEST)) &&
|
||||
0 == memcmp(m_History, rhs.m_History, sizeof(HISTORY));
|
||||
}
|
||||
|
||||
CString CCharQuest::GetDBStatus()
|
||||
{
|
||||
CString dbStatus;
|
||||
|
||||
dbStatus.Format("CID:%10u(0x%08x) Quest(0x%08x) History(0x%08x)",
|
||||
m_CID, m_CIDStatus, m_QuestStatus, m_HistoryStatus);
|
||||
|
||||
return dbStatus;
|
||||
}
|
||||
|
||||
void CPartyData::Init()
|
||||
{
|
||||
m_PID = m_GID = 0;
|
||||
memset(m_PartyInfo, 0, sizeof(m_PartyInfo));
|
||||
memset(m_UserInfo, 0, sizeof(m_UserInfo));
|
||||
|
||||
m_PartyLen = sizeof(m_PartyInfo);
|
||||
m_UserInfoLen = sizeof(m_UserInfo);
|
||||
|
||||
m_PIDStatus = m_GIDStatus =
|
||||
m_PartyStatus = m_UserInfoStatus = DBSTATUS_S_OK;
|
||||
}
|
||||
|
||||
void CPartyData::LogError(DBErrorType eErrorType, HRESULT hr)
|
||||
{
|
||||
switch(eErrorType)
|
||||
{
|
||||
case DBERR_CONVERT_FAILED:
|
||||
ERRLOG1(g_Log, "PID:%10u / CPartyData <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD>", GetPID());
|
||||
break;
|
||||
|
||||
case DBERR_SETDATA_FAILED:
|
||||
ERRLOG3(g_Log, "PID:%10u / hr:0x%08x / CPartyData SetData <20><><EFBFBD><EFBFBD> : DBStatus:%s",
|
||||
GetPID(), hr, GetDBStatus());
|
||||
break;
|
||||
|
||||
case DBERR_UPDATE_FAILED:
|
||||
ERRLOG3(g_Log, "PID:%10u / hr:0x%08x / CPartyData Update <20><><EFBFBD><EFBFBD> : DBStatus:%s",
|
||||
GetPID(), hr, GetDBStatus());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool CPartyData::operator == (const CPartyData& rhs) const
|
||||
{
|
||||
return (m_PID == rhs.m_PID &&
|
||||
m_GID == rhs.m_GID &&
|
||||
0 == memcmp(m_PartyInfo, rhs.m_PartyInfo, sizeof(m_PartyInfo)) &&
|
||||
0 == memcmp(m_UserInfo, rhs.m_UserInfo, sizeof(m_UserInfo)));
|
||||
}
|
||||
|
||||
CString CPartyData::GetDBStatus()
|
||||
{
|
||||
CString dbStatus;
|
||||
|
||||
dbStatus.Format("PID:%10u(0x%08x) GID:%10u(0x%08x) Party(0x%08x) PartyUserInfo(0x%08x)",
|
||||
m_PID, m_PIDStatus, m_GID, m_GIDStatus, m_PartyStatus, m_UserInfoStatus);
|
||||
|
||||
return dbStatus;
|
||||
}
|
||||
|
||||
|
||||
void CFriendData::Init()
|
||||
{
|
||||
m_CID = 0;
|
||||
memset(m_Friend, 0, sizeof(m_Friend));
|
||||
memset(m_Ban, 0, sizeof(m_Ban));
|
||||
|
||||
memset(m_FriendInfo, 0, sizeof(m_FriendInfo));
|
||||
memset(m_BanInfo, 0, sizeof(m_BanInfo));
|
||||
|
||||
m_FriendLen = sizeof(m_Friend);
|
||||
m_BanLen = sizeof(m_Ban);
|
||||
m_FriendInfoLen = sizeof(m_FriendInfo);
|
||||
m_BanInfoLen = sizeof(m_BanInfo);
|
||||
|
||||
m_CIDStatus = m_FriendStatus =
|
||||
m_BanStatus = m_FriendInfoStatus = m_BanInfoStatus = DBSTATUS_S_OK;
|
||||
|
||||
m_bAdjustSize = false;
|
||||
}
|
||||
|
||||
void CFriendData::AdjustSize(bool bRestore)
|
||||
{
|
||||
if (bRestore && m_bAdjustSize)
|
||||
{
|
||||
*reinterpret_cast<unsigned long*>(m_Friend) += sizeof(unsigned long);
|
||||
*reinterpret_cast<unsigned long*>(m_FriendInfo) += sizeof(unsigned long);
|
||||
*reinterpret_cast<unsigned long*>(m_Ban) += sizeof(unsigned long);
|
||||
*reinterpret_cast<unsigned long*>(m_BanInfo) += sizeof(unsigned long);
|
||||
m_bAdjustSize = false;
|
||||
}
|
||||
else if (!bRestore && !m_bAdjustSize)
|
||||
{
|
||||
BOUNDED_SUBTRACT(*reinterpret_cast<unsigned long*>(m_Friend), sizeof(unsigned long), 0);
|
||||
BOUNDED_SUBTRACT(*reinterpret_cast<unsigned long*>(m_FriendInfo), sizeof(unsigned long), 0);
|
||||
BOUNDED_SUBTRACT(*reinterpret_cast<unsigned long*>(m_Ban), sizeof(unsigned long), 0);
|
||||
BOUNDED_SUBTRACT(*reinterpret_cast<unsigned long*>(m_BanInfo), sizeof(unsigned long), 0);
|
||||
m_bAdjustSize = true;
|
||||
}
|
||||
}
|
||||
|
||||
void CFriendData::LogError(DBErrorType eErrorType, HRESULT hr)
|
||||
{
|
||||
DBErrorLogByCID(eErrorType, GetCID(), hr, "FriendData", GetDBStatus());
|
||||
}
|
||||
|
||||
const FRIEND CFriendData::GetFriend() const
|
||||
{
|
||||
FRIEND localFriend;
|
||||
memcpy(&localFriend, m_Friend, sizeof(m_Friend));
|
||||
memcpy(reinterpret_cast<BYTE*>(&localFriend) + sizeof(m_Friend),
|
||||
m_FriendInfo, sizeof(m_FriendInfo));
|
||||
|
||||
return localFriend;
|
||||
}
|
||||
|
||||
const BAN CFriendData::GetBan() const
|
||||
{
|
||||
BAN localBan;
|
||||
|
||||
memcpy(&localBan, m_Ban, sizeof(m_Ban));
|
||||
|
||||
memcpy(reinterpret_cast<BYTE*>(&localBan) + sizeof(m_Ban),
|
||||
m_BanInfo, sizeof(m_BanInfo));
|
||||
|
||||
return localBan;
|
||||
}
|
||||
|
||||
void CFriendData::SetFriend(const FRIEND& friendData)
|
||||
{
|
||||
memcpy(m_Friend, &friendData.dwSize, sizeof(friendData.dwSize));
|
||||
memcpy(m_Friend + sizeof(friendData.dwSize),
|
||||
friendData.Data, sizeof(friendData.Data));
|
||||
|
||||
memcpy(m_FriendInfo, &friendData.dwInfoSize, sizeof(friendData.dwInfoSize));
|
||||
memcpy(m_FriendInfo + sizeof(friendData.dwInfoSize),
|
||||
friendData.Info, sizeof(friendData.Info));
|
||||
|
||||
m_FriendLen = sizeof(m_Friend);
|
||||
m_FriendInfoLen = sizeof(m_FriendInfo);
|
||||
m_FriendStatus = DBSTATUS_S_OK;
|
||||
m_FriendInfoStatus = DBSTATUS_S_OK;
|
||||
}
|
||||
|
||||
void CFriendData::SetBan(const BAN& banData)
|
||||
{
|
||||
memcpy(m_Ban, &banData.dwSize, sizeof(banData.dwSize));
|
||||
memcpy(m_Ban + sizeof(banData.dwSize),
|
||||
banData.Data, sizeof(banData.Data));
|
||||
|
||||
memcpy(m_BanInfo, &banData.dwInfoSize, sizeof(banData.dwInfoSize));
|
||||
memcpy(m_BanInfo + sizeof(banData.dwSize),
|
||||
banData.Info, sizeof(banData.Info));
|
||||
|
||||
m_BanLen = sizeof(m_Ban);
|
||||
m_BanInfoLen = sizeof(m_BanInfo);
|
||||
m_BanStatus = DBSTATUS_S_OK;
|
||||
m_BanInfoStatus = DBSTATUS_S_OK;
|
||||
}
|
||||
|
||||
bool CFriendData::operator == (const CFriendData& rhs) const
|
||||
{
|
||||
return m_CID == rhs.m_CID &&
|
||||
0 == memcmp(m_Friend, rhs.m_Friend, sizeof(m_Friend)) &&
|
||||
0 == memcmp(m_Ban, rhs.m_Ban, sizeof(m_Ban)) &&
|
||||
0 == memcmp(m_FriendInfo, rhs.m_FriendInfo, sizeof(m_FriendInfo)) &&
|
||||
0 == memcmp(m_BanInfo, rhs.m_BanInfo, sizeof(m_BanInfo));
|
||||
}
|
||||
|
||||
CString CFriendData::GetDBStatus()
|
||||
{
|
||||
CString dbStatus;
|
||||
|
||||
dbStatus.Format("CID:%10u(0x%08x) Friend(0x%08x) Ban(0x%08x) FriendInfo(0x%08x) BanInfo(0x%08x)",
|
||||
m_CID, m_CIDStatus, m_FriendStatus, m_BanStatus, m_FriendInfoStatus, m_BanInfoStatus);
|
||||
|
||||
return dbStatus;
|
||||
}
|
||||
|
||||
|
||||
void CUnifiedCharList::Init()
|
||||
{
|
||||
m_UID = m_BeforeCID = m_NewCID = 0;
|
||||
memset(m_BeforeCharName, 0, sizeof(m_BeforeCharName));
|
||||
|
||||
m_OldServerGroupID = 0;
|
||||
m_BeforeCharNameLen = 0;
|
||||
|
||||
m_UIDStatus = m_OldServerGroupIDStatus = m_BeforeCIDStatus =
|
||||
m_NewCIDStatus = m_BeforeCharNameStatus = DBSTATUS_S_ISNULL;
|
||||
}
|
||||
|
||||
void CUnifiedCharList::LogError(DBErrorType eErrorType, HRESULT hr)
|
||||
{
|
||||
switch(eErrorType)
|
||||
{
|
||||
case DBERR_CONVERT_FAILED:
|
||||
ERRLOG2(g_Log, "UID:%10u / NewCID:%10u / CUnifiedCharList <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD>",
|
||||
GetUID(), GetNewCID());
|
||||
break;
|
||||
|
||||
case DBERR_SETDATA_FAILED:
|
||||
ERRLOG4(g_Log, "CID:%10u / NewCID:%10u / hr:0x%08x / CUnifiedCharList SetData <20><><EFBFBD><EFBFBD> : DBStatus:%s",
|
||||
GetUID(), GetNewCID(), hr, GetDBStatus());
|
||||
break;
|
||||
|
||||
case DBERR_UPDATE_FAILED:
|
||||
ERRLOG4(g_Log, "CID:%10u / NewCID:%10u / hr:0x%08x / CUnifiedCharList Update <20><><EFBFBD><EFBFBD> : DBStatus:%s",
|
||||
GetUID(), GetNewCID(), hr, GetDBStatus());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
CString CUnifiedCharList::GetDBStatus()
|
||||
{
|
||||
CString DBStatus;
|
||||
|
||||
DBStatus.Format("UIDStatus(0x%08x)/OldServerGroupID(0x%08x)/BeforeCIDStatus(0x%08x)/"
|
||||
"NewCIDStatus(0x%08x)/BeforeCharNameStatus(0x%08x)",
|
||||
m_UIDStatus, m_OldServerGroupIDStatus,
|
||||
m_BeforeCIDStatus, m_NewCIDStatus, m_BeforeCharNameStatus);
|
||||
|
||||
return DBStatus;
|
||||
}
|
||||
|
||||
bool CUnifiedCharList::operator == (const CUnifiedCharList& rhs) const
|
||||
{
|
||||
return m_UID == rhs.m_UID &&
|
||||
m_BeforeCID == rhs.m_BeforeCID &&
|
||||
m_NewCID == rhs.m_NewCID &&
|
||||
m_OldServerGroupID == rhs.m_OldServerGroupID &&
|
||||
0 == memcmp(m_BeforeCharName, rhs.m_BeforeCharName, sizeof(m_BeforeCharName));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user