Files
Client/Server/RylServerProject/RylDBAgentServer/Network/Dispatch/AdminToolDispatch.cpp
LGram16 dd97ddec92 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>
2025-11-29 20:17:20 +09:00

911 lines
31 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "stdafx.h"
#include "AdminToolDispatch.h"
#include <Log/ServerLog.h>
#include <Network/Address/INET_Addr.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/CharAdminPacket.h>
#include <Network/Packet/PacketStruct/GameEventPacket.h>
#include <Network/Packet/PacketStruct/CharLoginOutPacketStruct.h>
#include <Network/SendPacket/SendAdminTool.h>
#include <Network/SendPacket/SendServerInfo.h>
#include <Network/Dispatch/GameDispatch.h>
#include <Network/Dispatch/GameClient/SendCharAdmin.h>
#include <DataStorage/AdminDataMgr.h>
#include <DataStorage/SessionData.h>
#include <DataStorage/SessionDataMgr.h>
#include <DataStorage/StoreData.h>
#include <DataStorage/StoreDataMgr.h>
#include <DataStorage/CharacterData.h>
#include <DataStorage/CharacterDataMgr.h>
#include <DB/DBComponent.h>
#include <DB/GameDBComponent.h>
#include <DB/GuildDBComponent.h>
#include <GameEvent/GameEventDBMgr.h>
#include <Utility/Setup/ServerSetup.h>
#include <Creature/Character/CharacterClass.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include <Community/Guild/GuildDB.h>
#include <Community/Guild/GuildDBMgr.h>
namespace DBAgent
{
// forward decl.
bool GetUIDCIDFromName(const char* szName, unsigned long& dwUID_Out,
unsigned long& dwCID_Out, unsigned char& cOldServerGroupID);
CMultiDispatch& CAdminToolDispatch::GetDispatchTable()
{
static CMultiDispatch gameDispatch;
return gameDispatch;
}
CAdminToolDispatch::CAdminToolDispatch(CSession& Session)
: CRylServerDispatch(Session, MAX_PACKET_DISPATCH_PER_PULSE),
m_dwServerID(0)
{
}
CAdminToolDispatch::~CAdminToolDispatch()
{
}
void CAdminToolDispatch::Connected()
{
DETLOG3(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/AdminToolServer Connected",
&GetSession(), this, GetRemoteAddr().get_addr_string());
}
void CAdminToolDispatch::Disconnected()
{
DETLOG3(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/AdminToolServer Disconnected",
&GetSession(), this, GetRemoteAddr().get_addr_string());
if(0 != m_dwServerID)
{
GetDispatchTable().RemoveDispatch(m_dwServerID);
if(0LL != m_AdminItemSerialMgr.GetItemSerial())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> DB<44><42> <20><><EFBFBD><EFBFBD>
m_AdminItemSerialMgr.SaveItemSerial(
CDBSingleObject::GetInstance(), m_dwServerID);
}
}
}
bool CAdminToolDispatch::DispatchPacket(PktBase* lpPktBase)
{
bool bResult = false;
PktBase::CMDType cCmd = lpPktBase->GetCmd();
switch(cCmd)
{
case CmdSysServerLogin: bResult = ParseServerLogin(static_cast<PktSL*>(lpPktBase)); break;
case CmdSysServerLogout: bResult = ParseServerLogout(lpPktBase); break;
case CmdUserKill: bResult = ParseUserKill(static_cast<PktUK*>(lpPktBase)); break;
case CmdAdminToolGetData: bResult = ParseGetData(static_cast<PktAdminToolGetData*>(lpPktBase)); break;
case CmdAdminToolSetData: bResult = ParseSetData(static_cast<PktAdminToolSetData*>(lpPktBase)); break;
case CmdItemQtyCheck: bResult = ParseItemQtyCheck(static_cast<PktItemQtyControl*>(lpPktBase)); break;
case CmdGuildPosition: bResult = ParseGuildPosition(static_cast<PktGuildPosition*>(lpPktBase)); break;
default:
ERRLOG4(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/Cmd:0x%02X/ <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD><C7B5>Դϴ<D4B4>",
&GetSession(), this, GetRemoteAddr().get_addr_string(), cCmd);
bResult = true;
break;
}
if(!bResult)
{
ERRLOG4(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/Cmd:0x%02X/ <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3> <20><><EFBFBD><EFBFBD> : ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>",
&GetSession(), this, GetRemoteAddr().get_addr_string(), cCmd);
}
return true;
}
bool CAdminToolDispatch::ParseServerLogin(PktSL* lpPktSL)
{
m_dwServerID = lpPktSL->m_dwServerID;
INFLOG4(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/ServerID:0x%08X/ <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>õ<EFBFBD> : <20><>Ŷ <20><><EFBFBD><EFBFBD>",
&GetSession(), this, GetRemoteAddr().get_addr_string(), m_dwServerID);
GET_MULTI_DISPATCH(lpAdminToolDispatch, m_dwServerID,
CAdminToolDispatch, GetDispatchTable());
if(0 != lpAdminToolDispatch)
{
ERRLOG4(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/ServerID:0x%08X/ <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>",
&GetSession(), this, GetRemoteAddr().get_addr_string(), m_dwServerID);
CloseSession();
}
else
{
// Dispatch <20><><EFBFBD><EFBFBD>.
GetDispatchTable().SetDispatch(m_dwServerID, this);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> <20>ε<EFBFBD>.
if(!m_AdminItemSerialMgr.LoadItemSerial(CDBSingleObject::GetInstance(), m_dwServerID))
{
ERRLOG4(g_Log, "SS:0x%08x/DP:0x%08x/IP:%15s/ServerID:0x%08X/ <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>",
&GetSession(), this, GetRemoteAddr().get_addr_string(), m_dwServerID);
CloseSession();
return false;
}
return SendPacket::ServerLoginAck(m_SendStream,
m_dwServerID, m_AdminItemSerialMgr.GetItemSerial());
}
return true;
}
bool CAdminToolDispatch::ParseServerLogout(PktBase* lpPktBase)
{
// <20><><EFBFBD><EFBFBD> <20><>Ŷ <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
char* lpBuffer = m_SendStream.GetBuffer(sizeof(PktBase));
if(0 != lpBuffer)
{
return m_SendStream.WrapHeader(sizeof(PktBase), CmdSysServerLogout, 0, 0);
}
return false;
}
bool CAdminToolDispatch::ParseUserKill(PktUK* lpPktUK)
{
using namespace DataStorage;
// <20><><EFBFBD><EFBFBD> DB<44><42> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49><50> <20><>ġ<EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰ſ<DFB0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
CSessionData* lpSessionData =
CSessionDataMgr::GetInstance().GetOpenSession(lpPktUK->m_dwUserID);
if(0 == lpSessionData)
{
ERRLOG1(g_Log, "UID:%10u / <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>", lpPktUK->m_dwUserID);
}
else
{
SERVER_ID serverID;
serverID.dwID = lpSessionData->GetServerID();
CSessionData::SessionState eSessionState = lpSessionData->GetSessionState();
if ((serverID.GetType() == CServerSetup::AuthServer && CSessionData::SE_USER_ENABLED != eSessionState) ||
(serverID.GetType() == CServerSetup::GameServer && CSessionData::SE_CHAR_ENABLED != eSessionState))
{
ERRLOG3(g_Log, "UID:%10u / ServerID:0x%08X / ST:%s / <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><>Ȱ<EFBFBD><C8B0>ȭ<EFBFBD>Ǿ<EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>",
lpPktUK->m_dwUserID, serverID.dwID, g_szSessionStateString[lpSessionData->GetSessionState()]);
}
else if(!SendPacket::UserKill(*lpSessionData))
{
ERRLOG3(g_Log, "UID:%10u / ServerID:0x%08X / ST:%s / <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
lpPktUK->m_dwUserID, serverID.dwID, g_szSessionStateString[lpSessionData->GetSessionState()]);
}
}
return true;
}
bool CAdminToolDispatch::ParseGetData(PktBase* lpPktBase)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><>Ŷ <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
PktAdminToolGetData* lpPktAdminToolGetData = static_cast<PktAdminToolGetData*>(lpPktBase);
switch(lpPktAdminToolGetData->m_cType)
{
case PktAdminToolGetData::GET_CHAR_DATA:
return ParseAdminToolGetData(lpPktAdminToolGetData);
case PktAdminToolGetData::CHANGE_CHAR_NAME:
return ParseAdminToolChangeName(lpPktAdminToolGetData);
default:
ERRLOG2(g_Log, "IP:%15s / Cmd:%d / <20><> <20><> <20><><EFBFBD><EFBFBD> <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD><C7B5>Դϴ<D4B4>.",
GetRemoteAddr().get_addr_string(), lpPktAdminToolGetData->m_cType);
return true;
}
return false;
}
bool CAdminToolDispatch::ParseSetData(PktBase* lpPktBase)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>. <20><>Ŷ <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD>.
// CharLogin<69><6E> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1, â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2, â<><C3A2> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><>Ŷ <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
PktAdminToolSetData* lpPktAdminToolSetData = static_cast<PktAdminToolSetData*>(lpPktBase);
switch(lpPktAdminToolSetData->m_cType)
{
case PktAdminToolSetData::CHAR_BASIC_DATA:
case PktAdminToolSetData::CHAR_EXTRA_DATA:
case PktAdminToolSetData::CHAR_FRIEND_DATA:
case PktAdminToolSetData::CHAR_BAN_DATA:
case PktAdminToolSetData::STORE_12_DATA:
case PktAdminToolSetData::STORE_34_DATA:
case PktAdminToolSetData::OPEN_UPDATE_DATA:
case PktAdminToolSetData::FINISH_UPDATE_DATA:
return ParseAdminToolSetData(lpPktAdminToolSetData);
case PktAdminToolSetData::RELOAD_ADMINLIST:
return DataStorage::CAdminDataMgr::GetInstance().LoadAdminList(CDBSingleObject::GetInstance());
default:
ERRLOG2(g_Log, "IP:%15s / Cmd:%d / <20><> <20><> <20><><EFBFBD><EFBFBD> <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>Ŷ Ŀ<>ǵ<EFBFBD><C7B5>Դϴ<D4B4>",
GetRemoteAddr().get_addr_string(), lpPktAdminToolSetData->m_cType);
return true;
}
return false;
}
bool CAdminToolDispatch::ParseAdminToolGetData(PktAdminToolGetData* lpPktAdminToolGetData)
{
// DBRequestKey.
unsigned long dwRequestKey = lpPktAdminToolGetData->m_dwRequestKey;
unsigned long dwUID = lpPktAdminToolGetData->m_dwUID;
unsigned long dwCID = lpPktAdminToolGetData->m_dwCID;
unsigned char cOldServerGroupID = 0;
if (UnifiedConst::Part2Selectable == CServerSetup::GetInstance().GetAgentServerType())
{
cOldServerGroupID = lpPktAdminToolGetData->m_cOldServerGroupID;
}
else
{
cOldServerGroupID = static_cast<unsigned char>(
CServerSetup::GetInstance().GetAgentServerType());
}
PktAdminToolGetData::GetDataType eDataType =
static_cast<PktAdminToolGetData::GetDataType>(lpPktAdminToolGetData->m_cType);
unsigned short wError = 0;
if(eDataType != PktAdminToolGetData::GET_CHAR_DATA)
{
// <20>߸<EFBFBD><DFB8><EFBFBD> <20><>Ŷ<EFBFBD><C5B6>
wError = PktAdminToolGetData::INVALID_REQUEST;
}
else
{
// UID, CID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UID<49><44> CID<49><44> <20><><EFBFBD><EFBFBD> <20>´<EFBFBD>.
if(0 == dwUID || 0 == dwCID || 0 == cOldServerGroupID)
{
if(!GetUIDCIDFromName(lpPktAdminToolGetData->m_szName,
dwUID, dwCID, cOldServerGroupID))
{
// DB Query <20><><EFBFBD><EFBFBD>.
wError = PktAdminToolGetData::GET_UIDCID_QUERY_FAILED;
}
if(0 == dwUID || 0 == dwCID || 0 == cOldServerGroupID)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>̻<EFBFBD><CCBB><EFBFBD>.
wError = PktAdminToolGetData::INVALID_UID_CID_DATA;
}
}
DETLOG4(g_Log, "UID:%10u / ServerGroupID:%d / CID:%10u / IP:%15s / <20><EFBFBD><EEBFB5><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD>",
dwUID, cOldServerGroupID, dwCID, GetRemoteAddr().get_addr_string());
if(0 == wError)
{
using namespace DataStorage;
CStoreData* lpStoreData = 0;
CCharacterData* lpCharacterData = 0;
CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetOpenSession(dwUID);
if(0 != lpSessionData)
{
// <20>̹<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(dwUID == lpSessionData->GetUID())
{
lpStoreData = lpSessionData->GetStoreData();
}
if(dwCID == lpSessionData->GetCID())
{
lpCharacterData = lpSessionData->GetCharacterData();
}
}
// ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD>. ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, DB<44><42><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>ؼ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
if(0 == lpStoreData)
{
lpStoreData = CStoreDataMgr::GetInstance().GetLogoutData(
UnifiedStoreKey(dwUID, cOldServerGroupID));
}
if(0 == lpCharacterData)
{
lpCharacterData = CCharacterDataMgr::GetInstance().GetLogoutData(dwCID);
}
if(0 == lpStoreData)
{
wError = PktAdminToolGetData::GET_STORE_QUERY_FAILED;
}
else if(0 == lpCharacterData)
{
wError = PktAdminToolGetData::GET_CHAR_DATA_QUERY_FAILED;
}
else
{
SendPacket::TotalDataToAdminTool(GetSendStream(), dwRequestKey,
GetRemoteAddr().get_addr_in().sin_addr, *lpStoreData, *lpCharacterData);
}
}
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
return SendPacket::AdminToolGetDataAck(GetSendStream(),
PktAdminToolGetData::FINISH_GET_DATA, dwRequestKey, dwUID, dwCID, 0, 0, wError, cOldServerGroupID);
}
bool CAdminToolDispatch::ParseAdminToolSetData(PktAdminToolSetData* lpPktAdminToolSetData)
{
SERVER_ID serverID;
serverID.dwID = m_dwServerID;
unsigned long dwUID = lpPktAdminToolSetData->m_dwUID;
unsigned long dwCID = lpPktAdminToolSetData->m_dwCID;
unsigned long dwRequestKey = lpPktAdminToolSetData->m_dwRequestKey;
unsigned long dwDataSize = lpPktAdminToolSetData->GetLen() - sizeof(PktAdminToolSetData);
unsigned char cType = lpPktAdminToolSetData->m_cType;
unsigned char cOldServerGroupID = 0;
if (UnifiedConst::Part2Selectable == CServerSetup::GetInstance().GetAgentServerType())
{
cOldServerGroupID = lpPktAdminToolSetData->m_cOldServerGroupID;
}
else
{
cOldServerGroupID = static_cast<unsigned char>(
CServerSetup::GetInstance().GetAgentServerType());
}
unsigned short wError = 0;
if(0 == dwUID || 0 == dwCID)
{
wError = PktAdminToolSetData::INVALID_UID_CID_ERROR;
}
else
{
DETLOG3(g_Log, "UID:%10u / CID:%10u / IP:%15s / <20><EFBFBD>ڰ<EFBFBD> <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>õ<EFBFBD>",
dwUID, dwCID, GetRemoteAddr().get_addr_string());
using namespace DataStorage;
CStoreData* lpStoreData = 0;
CCharacterData* lpCharacterData = 0;
CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetOpenSession(dwUID);
if(0 != lpSessionData)
{
if(CSessionData::SE_USER_ENABLED == lpSessionData->GetSessionState() ||
CSessionData::SE_CHAR_ENABLED == lpSessionData->GetSessionState())
{
// Ȱ<><C8B0>ȭ<EFBFBD><C8AD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
wError = PktAdminToolSetData::LOGIN_ANOTHER_GAMESERVER;
}
else
{
// <20>̹<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(dwUID == lpSessionData->GetUID())
{
lpStoreData = lpSessionData->GetStoreData();
}
if(dwCID == lpSessionData->GetCID())
{
lpCharacterData = lpSessionData->GetCharacterData();
}
}
}
if(0 == wError)
{
// ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD>. ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, DB<44><42><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>ؼ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
if(0 == lpStoreData)
{
lpStoreData = CStoreDataMgr::GetInstance().GetLogoutData(
UnifiedStoreKey(dwUID, cOldServerGroupID));
}
if(0 == lpCharacterData)
{
lpCharacterData = CCharacterDataMgr::GetInstance().GetLogoutData(dwCID);
}
if(0 != lpStoreData && 0 != lpCharacterData)
{
switch(lpPktAdminToolSetData->m_cType)
{
case PktAdminToolSetData::OPEN_UPDATE_DATA:
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB<44><42> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD>Ϸ<EFBFBD> <20>õ<EFBFBD><C3B5>Ѵ<EFBFBD>. : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>. <20>׳<EFBFBD> <20>Ѵ<EFBFBD>.
break;
case PktAdminToolSetData::FINISH_UPDATE_DATA:
// <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> DB<44><42> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݴ´<DDB4>. : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>. <20>׳<EFBFBD> <20>Ѵ<EFBFBD>.
break;
case PktAdminToolSetData::CHAR_BASIC_DATA: // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>Ѵ<EFBFBD>. <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
{
unsigned short* lpSizeArray = reinterpret_cast<unsigned short*>(lpPktAdminToolSetData + 1);
char* lpData = reinterpret_cast<char*>(lpSizeArray + DBUpdateData::MAX_UPDATE_DB);
if(!lpCharacterData->SerializeIn(lpData, lpSizeArray,
dwDataSize - sizeof(unsigned short) * DBUpdateData::MAX_UPDATE_DB, DBUpdateData::MAX_UPDATE_DB))
{
ERRLOG3(g_Log, "UID:%10u / CID:%10u / IP:%15s / <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : CHAR_BASIC_DATA",
dwUID, dwCID, GetRemoteAddr().get_addr_string());
wError = PktAdminToolSetData::SETTING_DATA_FAILED;
}
else
{
INFLOG3(g_Log, "UID:%10u / CID:%10u / IP:%15s / <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : CHAR_BASIC_DATA",
dwUID, dwCID, GetRemoteAddr().get_addr_string());
}
}
break;
case PktAdminToolSetData::CHAR_EXTRA_DATA: // ij<><C4B3><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>.
{
unsigned long dwExpectDataSize = sizeof(CHAR_INFOEX) + sizeof(QUEST) +
sizeof(HISTORY) + sizeof(CONFIG) + sizeof(STORE_INFO);
if(dwDataSize == dwExpectDataSize)
{
char* lpCharDataExPos = reinterpret_cast<char*>(lpPktAdminToolSetData + 1);
// CHAR_INFOEX : ij<><C4B3><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD>
lpCharacterData->SetInfoEx(*reinterpret_cast<CHAR_INFOEX*>(lpCharDataExPos));
lpCharDataExPos += sizeof(CHAR_INFOEX);
// QUEST : <20><><EFBFBD><EFBFBD>Ʈ
lpCharacterData->SetQuest(*reinterpret_cast<QUEST*>(lpCharDataExPos));
lpCharDataExPos += sizeof(QUEST);
// HISTORY : <20><><EFBFBD><EFBFBD><EFBFBD>
lpCharacterData->SetHistory(*reinterpret_cast<HISTORY*>(lpCharDataExPos));
lpCharDataExPos += sizeof(HISTORY);
// CONFIG : <20><><EFBFBD><EFBFBD>
lpCharacterData->SetConfig(*reinterpret_cast<CONFIG*>(lpCharDataExPos));
lpCharDataExPos += sizeof(CONFIG);
// STORE_INFO : â<><C3A2> <20><><EFBFBD><EFBFBD>
lpStoreData->SetStoreInfo(*reinterpret_cast<STORE_INFO*>(lpCharDataExPos));
lpCharDataExPos += sizeof(STORE_INFO);
}
else
{
wError = PktAdminToolSetData::SETTING_DATA_FAILED;
}
}
break;
case PktAdminToolSetData::CHAR_FRIEND_DATA: // ij<><C4B3><EFBFBD><EFBFBD> ģ<><C4A3> <20><><EFBFBD><EFBFBD>
if(!lpCharacterData->FriendSerializeIn(
reinterpret_cast<char*>(lpPktAdminToolSetData + 1), dwDataSize))
{
wError = PktAdminToolSetData::SETTING_DATA_FAILED;
}
break;
case PktAdminToolSetData::CHAR_BAN_DATA: // ij<><C4B3><EFBFBD><EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>
if(!lpCharacterData->BanSerializeIn(
reinterpret_cast<char*>(lpPktAdminToolSetData + 1), dwDataSize))
{
wError = PktAdminToolSetData::SETTING_DATA_FAILED;
}
break;
case PktAdminToolSetData::STORE_12_DATA: // â<><C3A2> 1, 2<><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(dwDataSize == sizeof(STORE))
{
const STORE& store1 = *reinterpret_cast<STORE*>(lpPktAdminToolSetData + 1);
lpStoreData->SetStore1(store1.Data, store1.dwSize);
}
else
{
wError = PktAdminToolSetData::SETTING_DATA_FAILED;
}
break;
case PktAdminToolSetData::STORE_34_DATA: // â<><C3A2> 3, 4<><34> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(dwDataSize == sizeof(STORE))
{
const STORE& store2 = *reinterpret_cast<STORE*>(lpPktAdminToolSetData + 1);
lpStoreData->SetStore2(store2.Data, store2.dwSize);
}
else
{
wError = PktAdminToolSetData::SETTING_DATA_FAILED;
}
break;
}
}
}
}
// ItemSerial <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
if(m_AdminItemSerialMgr.SetItemSerial(lpPktAdminToolSetData->m_dwSerial))
{
m_AdminItemSerialMgr.SaveItemSerial(CDBSingleObject::GetInstance(), m_dwServerID);
}
return SendPacket::AdminToolSetDataAck(
GetSendStream(), dwRequestKey, dwUID, dwCID, cType, wError);
}
bool CAdminToolDispatch::ParseGuildPosition(PktGuildPosition* lpPktGuildPosition)
{
using namespace DataStorage;
unsigned short wError = PktBase::NO_SERVER_ERR;
unsigned long dwGID = lpPktGuildPosition->m_dwGID;
unsigned long dwCID = lpPktGuildPosition->m_dwCID;
unsigned char cPosition = lpPktGuildPosition->m_cPosition;
unsigned char cType = lpPktGuildPosition->m_cType;
using namespace Guild;
CGuildDB* lpGuild = static_cast<CGuildDB*>(CGuildDBMgr::GetInstance().GetGuild(dwGID));
char* lpBuffer = GetSendStream().GetBuffer(sizeof(PktGuildPosition));
PktGuildPosition* pktSendPacket = NULL;
if(lpBuffer)
{
pktSendPacket = reinterpret_cast<PktGuildPosition*>(lpBuffer);
pktSendPacket->m_cPosition = lpPktGuildPosition->m_cPosition;
pktSendPacket->m_dwCID = lpPktGuildPosition->m_dwCID;
pktSendPacket->m_dwGID = lpPktGuildPosition->m_dwGID;
pktSendPacket->m_cType = lpPktGuildPosition->m_cType;
}
if(!lpGuild)
{
wError = PktGuildPosition::FAIL_GUILD;
}
else
{
CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetCharLoadedSession(dwCID);
if(lpSessionData)
{
wError = PktGuildPosition::FAIL_CONNECT_CHAR;
}
else
{
if(cType==PktGuildPosition::TYPE_POSITION)
{
lpGuild->SetTitle(dwCID, cPosition);
SYSTEMTIME systemTime;
::memset(&systemTime, 0, sizeof(SYSTEMTIME));
GetLocalTime(&systemTime);
if(!DBComponent::GuildDB::UpdateMemberTitle(CDBSingleObject::GetInstance(), dwCID, cPosition, systemTime))
{
wError = PktGuildPosition::FAIL_DB_UPDATE;
}
}
else if(cType==PktGuildPosition::TYPE_MEMBERDELETE)
{
if(!lpGuild->LeaveMember(dwCID))
{
wError = PktGuildPosition::FAIL_MEMBER_DELETE;
}
else
{
using namespace DBAgent::DataStorage;
DBComponent::GameDB::UpdateGuildWarFlag(CDBSingleObject::GetInstance(), dwCID, Creature::WAR_OFF);
}
}
}
}
return GetSendStream().WrapHeader(sizeof(PktGuildPosition), CmdGuildPosition, 0, wError);
}
bool CAdminToolDispatch::ParseItemQtyCheck(PktItemQtyControl* lpPktItemQtyControl)
{
tm* lpTm = localtime(&lpPktItemQtyControl->m_tStartTime);
if(0 == lpTm)
{
ERRLOG2(g_Log, "IP:%15s / StartTime:%d / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>",
GetRemoteAddr().get_addr_string(), lpPktItemQtyControl->m_tStartTime);
}
else
{
tm tStartTime = *lpTm;
lpTm = localtime(&lpPktItemQtyControl->m_tEndTime);
if(0 == lpTm)
{
ERRLOG2(g_Log, "IP:%15s / EndTime:%d / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>",
GetRemoteAddr().get_addr_string(), lpPktItemQtyControl->m_tEndTime);
}
else
{
tm tEndTime = *lpTm;
if(lpPktItemQtyControl->m_cGroup != CServerSetup::GetInstance().GetServerGroup())
{
ERRLOG3(g_Log, "IP:%15s / CurrentServerGroup:%d / ReceivedServerGroup:%d / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>",
GetRemoteAddr().get_addr_string(), CServerSetup::GetInstance().GetServerGroup(), lpPktItemQtyControl->m_cGroup);
}
else
{
bool bResult = false;
switch(lpPktItemQtyControl->m_cType)
{
case PktItemQtyControl::ADD:
bResult = CGameEventDBMgr::GetInstance().InsertDropItem(
static_cast<unsigned short>(lpPktItemQtyControl->m_dwItemTypeID),
static_cast<unsigned short>(lpPktItemQtyControl->m_dwItemQty),
tStartTime, tEndTime);
DETLOG5(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD> %s : ID:%u/Qty:%u/StartTime:%d/EndTime:%d",
bResult ? "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
lpPktItemQtyControl->m_dwItemTypeID, lpPktItemQtyControl->m_dwItemQty,
lpPktItemQtyControl->m_tStartTime, lpPktItemQtyControl->m_tEndTime);
SendPacket::ItemQtyCheck(lpPktItemQtyControl->m_dwItemTypeID,
lpPktItemQtyControl->m_dwItemQty, 0,
lpPktItemQtyControl->m_tStartTime,
lpPktItemQtyControl->m_tEndTime,
PktItemQtyControl::ADD, bResult ? 0 : 1);
break;
case PktItemQtyControl::DEL:
bResult = CGameEventDBMgr::GetInstance().EraseDropItem(
static_cast<unsigned short>(lpPktItemQtyControl->m_dwItemTypeID));
DETLOG5(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %s : ID:%u/Qty:%u/StartTime:%d/EndTime:%d",
bResult ? "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
lpPktItemQtyControl->m_dwItemTypeID, lpPktItemQtyControl->m_dwItemQty,
lpPktItemQtyControl->m_tStartTime, lpPktItemQtyControl->m_tEndTime);
SendPacket::ItemQtyCheck(lpPktItemQtyControl->m_dwItemTypeID,
lpPktItemQtyControl->m_dwItemQty, 0,
lpPktItemQtyControl->m_tStartTime, lpPktItemQtyControl->m_tEndTime,
PktItemQtyControl::DEL, bResult ? 0 : 1);
break;
case PktItemQtyControl::STATUS_REQUEST:
DETLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û");
CGameEventDBMgr::GetInstance().SendDropItemInfo();
break;
}
}
}
}
return true;
}
class CSendNameChanged
{
public:
CSendNameChanged(unsigned long dwUID, unsigned long dwCID, const char* szChangedName,
unsigned char cNameChangeCount, unsigned short usError)
: m_dwUID(dwUID), m_dwCID(dwCID),
m_cNameChangeCount(cNameChangeCount),
m_usError(usError)
{
strncpy(m_szChangedName, szChangedName, CHAR_INFOST::MAX_NAME_LEN);
m_szChangedName[ CHAR_INFOST::MAX_NAME_LEN - 1 ] = 0;
}
bool operator () (unsigned long dwServerID, CPacketDispatch& dispatch)
{
return GameClientSendPacket::SendCharNameChange(
static_cast<CRylServerDispatch&>(dispatch).GetSendStream(),
m_dwUID, m_dwCID, m_szChangedName, m_cNameChangeCount, NULL, m_usError);
}
private:
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cNameChangeCount;
unsigned short m_usError;
char m_szChangedName[CHAR_INFOST::MAX_NAME_LEN];
};
bool CAdminToolDispatch::ParseAdminToolChangeName(PktAdminToolGetData* lpPktAdminToolGetData)
{
unsigned long dwUID = lpPktAdminToolGetData->m_dwUID;
unsigned long dwCID = lpPktAdminToolGetData->m_dwCID;
unsigned long dwRequestKey = lpPktAdminToolGetData->m_dwRequestKey;
const char* szChangeName = lpPktAdminToolGetData->m_szName;
unsigned short usError = 0;
using namespace DBAgent::DataStorage;
CSessionData* lpSessionData =
CSessionDataMgr::GetInstance().GetCharLoadedSession(dwCID);
CCharacterData* lpCharacterData = 0;
if (0 == lpSessionData ||
lpSessionData->GetUID() != dwUID ||
lpSessionData->GetCID() != dwCID ||
(0 == (lpCharacterData = lpSessionData->GetCharacterData())) ||
dwCID != lpCharacterData->GetCID())
{
lpCharacterData = CCharacterDataMgr::GetInstance().GetLogoutData(dwCID);
}
if (0 != lpCharacterData)
{
unsigned long dwResult = 0;
if (DBComponent::GameDB::ChangeCharName(
CDBSingleObject::GetInstance(), dwCID, szChangeName, dwResult))
{
if (0 == dwResult)
{
// <20≯<EFBFBD><CCB8><EFBFBD> <20>ٲ۴<D9B2>.
CHAR_INFOST charInfoST = lpCharacterData->GetInfo();
strncpy(charInfoST.Name, szChangeName, CHAR_INFOST::MAX_NAME_LEN);
charInfoST.Name[CHAR_INFOST::MAX_NAME_LEN - 1] = 0;
lpCharacterData->SetInfo(charInfoST, true);
}
else if(1 == dwResult)
{
ERRLOG3(g_Log, "UID:%10u / CID:%10u / ChangeName:%s / <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> : <20≯<EFBFBD><CCB8><EFBFBD> <20>̹<EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>",
dwUID, dwCID, szChangeName);
usError = PktCharNameChange::ERR_ALREADY_USE_NAME;
}
else
{
ERRLOG4(g_Log, "UID:%10u / CID:%10u / ChangeName:%s / dwResult:%10u / <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> : <20><> <20><> <20><><EFBFBD><EFBFBD> dwResult<6C><74><EFBFBD>Դϴ<D4B4>",
dwUID, dwCID, szChangeName, dwResult);
usError = PktCharNameChange::ERR_SERVER;
}
}
else
{
ERRLOG3(g_Log, "UID:%10u / CID:%10u / ChangeName:%s / <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> : DBȣ<42><C8A3> <20><><EFBFBD><EFBFBD>",
dwUID, dwCID, szChangeName);
usError = PktCharNameChange::ERR_SERVER;
}
}
else
{
ERRLOG3(g_Log, "UID:%10u / CID:%10u / ChangeName:%s / "
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> : <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.", dwUID, dwCID, szChangeName);
usError = PktCharNameChange::ERR_CANNOT_FIND_CHARACTER;
}
if (0 != lpSessionData && 0 != lpCharacterData && 0 == usError)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
DBAgent::CGameDispatch::GetDispatchTable().Process(
CSendNameChanged(dwUID, dwCID, szChangeName,
lpCharacterData->GetInfoEx().cNameChangeCount, usError));
}
// <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> Ack<63><6B> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
return SendPacket::AdminToolGetDataAck(GetSendStream(),
PktAdminToolGetData::CHANGE_CHAR_NAME, dwRequestKey, dwUID, dwCID, 0, 0, usError);
}
bool GetUIDCIDFromName(const char* szName, unsigned long& dwUID_Out,
unsigned long& dwCID_Out, unsigned char& cOldServerGroupID)
{
#pragma pack(1)
struct UIDCID
{
unsigned long dwUID;
unsigned long dwCID;
unsigned char cOldServerGroupID;
};
#pragma pack()
UIDCID uidcid;
uidcid.dwUID = 0;
uidcid.dwCID = 0;
const int MAX_BUFFER = 1024;
char szQuery[MAX_BUFFER] = { 0, };
int nLength = _snprintf(szQuery, MAX_BUFFER - 1, "dbo.GetUIDCIDFromName '%s'", szName);
szQuery[MAX_BUFFER - 1] = 0;
if(0 < nLength)
{
szQuery[nLength] = 0;
if(CDBSingleObject::GetInstance().ExecuteQueryGetData(szQuery, &uidcid))
{
dwUID_Out = uidcid.dwUID;
dwCID_Out = uidcid.dwCID;
cOldServerGroupID = uidcid.cOldServerGroupID;
return true;
}
}
ERRLOG2(g_Log, "ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD> UID / CID <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>. %s : %s",
CDBSingleObject::GetInstance().GetErrorString(), szQuery);
return false;
}
}