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:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,675 @@
#include "stdafx.h"
#include <Network/Session/Session.h>
#include <Network/Winsock/SocketFactory.h>
#include <Network/Dispatch/GameClient/GameClientDispatch.h>
#include <Network/Dispatch/GameClient/SendCharBGServer.h>
#include <Network/Packet/WrapPacket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/BGServerPacket.h>
#include <Network/Packet/PacketStruct/CharAdminPacket.h>
#include <Stream/Buffer/Buffer.h>
#include <Stream/Buffer/BufferFactory.h>
#include <Creature/CreatureManager.h>
#include <Creature/Character/Character.h>
#include <Utility/Setup/ServerSetup.h>
#include <Creature/Character/TempCharacter.h>
#include <Item/ItemFactory.h>
#include <DB/DBComponent.h>
#include <DB/AuthDBComponent.h>
#include <Log/LogStruct.h>
#include <Log/ItemLog.h>
#include "RegularAgentDispatch.h"
RylServerInfo CRegularAgentDispatch::ms_AgentServerInfo[SERVER_ID::MAX_GROUP_NUM];
CMultiDispatch& CRegularAgentDispatch::GetDispatchTable(void)
{
static CMultiDispatch multiDispatch;
return multiDispatch;
}
CTempCharacterMgr& CRegularAgentDispatch::GetTempCharacterMgr(void)
{
static CTempCharacterMgr tempCharacterMgr;
return tempCharacterMgr;
}
CRegularAgentDispatch::CRegularAgentDispatch(CSession& Session)
: CRylServerDispatch(Session, MAX_PACKET_DISPATCH_PER_PULSE), m_cGroup(0)
{
}
CRegularAgentDispatch::~CRegularAgentDispatch()
{
}
bool CRegularAgentDispatch::Initialize(void)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const char szGroupFileName[MAX_PATH] = "./Script/Server/ServerGroup.txt";
const char szIPFileName[MAX_PATH] = "./Script/Server/ServerIP.txt";
FILE *lpGroupFile = fopen(szGroupFileName, "rt");
FILE *lpIPFile = fopen(szIPFileName, "rt");
const int MAX_BUFFERSIZE = 256;
char szGroupBuffer[MAX_BUFFERSIZE];
char szIPBuffer[MAX_BUFFERSIZE];
if (NULL == lpGroupFile || NULL == lpIPFile)
{
ERRLOG2(g_Log, "Cannot load server group/IP file : %s or %s", szGroupFileName, szIPFileName);
return false;
}
for (int nGroup = 0; nGroup < SERVER_ID::MAX_GROUP_NUM; )
{
if (NULL == fgets(szGroupBuffer, MAX_BUFFERSIZE, lpGroupFile) ||
NULL == fgets(szIPBuffer, MAX_BUFFERSIZE, lpIPFile))
{
break;
}
nGroup = atoi(strtok(szIPBuffer, "\n:"));
ms_AgentServerInfo[nGroup].m_ServerUID.sID.Group = nGroup;
ms_AgentServerInfo[nGroup].m_ServerAddress.S_un.S_addr = inet_addr(strtok(NULL, "\n:"));
ms_AgentServerInfo[nGroup].m_usChannelClientNum[0] = 1;
ms_AgentServerInfo[nGroup].m_usChannelClientNum[1] = 2;
ms_AgentServerInfo[nGroup].m_usChannelNum = 2;
strncpy(ms_AgentServerInfo[nGroup].m_szGroupName, strtok(szGroupBuffer, "\n"),
RylServerInfo::GROUP_NAME_LENGTH - 1);
ms_AgentServerInfo[nGroup].m_szGroupName[RylServerInfo::GROUP_NAME_LENGTH - 1] = '\0';
ms_AgentServerInfo[nGroup].m_nGroupNameLen = strlen(ms_AgentServerInfo[nGroup].m_szGroupName);
}
fclose(lpGroupFile);
fclose(lpIPFile);
return true;
}
void CRegularAgentDispatch::Connected()
{
int nGroup = 0;
for (; nGroup < SERVER_ID::MAX_GROUP_NUM; ++nGroup)
{
if (ms_AgentServerInfo[nGroup].m_ServerAddress.S_un.S_addr ==
GetRemoteAddr().get_addr_in().sin_addr.S_un.S_addr)
{
break;
}
}
if (SERVER_ID::MAX_GROUP_NUM == nGroup)
{
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.");
Shutdown();
return;
}
char* lpBuffer = m_SendStream.GetBuffer(sizeof(PktSL));
if (NULL != lpBuffer)
{
PktSL* lpPktSL = reinterpret_cast<PktSL*>(lpBuffer);
const int MAX_ADDRESS = 128;
char szAddress[MAX_ADDRESS];
CTCPFactory tcpFactory;
tcpFactory.GetNetworkInfo(szAddress, MAX_ADDRESS);
lpPktSL->m_Address.S_un.S_addr = inet_addr(szAddress);
SERVER_ID serverID = {0,};
serverID.sID.Type = CServerSetup::AdminToolServer;
serverID.sID.Group = nGroup;
serverID.sID.Channel = CServerSetup::GetInstance().GetChannelFromCmdLine() + 2;
serverID.sID.ID = SERVER_ID::ADMIN_TOOL_ZONE;
lpPktSL->m_dwServerID = serverID.dwID;
if (m_SendStream.WrapHeader(sizeof(PktSL), CmdSysServerLogin, 0, 0))
{
INFLOG2(g_Log, "<EFBFBD>߰輼<EFBFBD><EFBFBD>(0x%p)<29><> <20><><EFBFBD><EFBFBD>(0x%08x)<29><> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.", this, serverID);
}
}
}
void CRegularAgentDispatch::Disconnected()
{
INFLOG2(g_Log, "<EFBFBD>߰輼<EFBFBD><EFBFBD>(0x%p)<29><> <20><><EFBFBD><EFBFBD>(%d)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.", this, m_cGroup);
GetDispatchTable().RemoveDispatch(m_cGroup);
}
bool CRegularAgentDispatch::DispatchPacket(PktBase* lpPktBase)
{
switch (lpPktBase->GetCmd())
{
case CmdSysServerLogin: return ParseServerLogin(lpPktBase);
case CmdBGServerCharSlot: return RegularAgentPacketParse::ParseGetCharSlot(lpPktBase);
case CmdAdminToolGetData: return RegularAgentPacketParse::ParseGetCharData(lpPktBase, m_cGroup);
default:
// <20><>Ŷ Command<6E><64> invaild<6C><64><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. invalid<69><64> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20>˻<EFBFBD><CBBB>ؼ<EFBFBD> vaild<6C><64> <20><>ġ<EFBFBD><C4A1> ã<>Ƴ<EFBFBD><C6B3><EFBFBD>.
LogErrorPacket("<EFBFBD><EFBFBD>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ Ŀ<>ǵ尡 <20>߸<EFBFBD><DFB8>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.", lpPktBase->GetCmd());
break;
}
return true;
}
bool CRegularAgentDispatch::ParseServerLogin(PktBase* lpPktBase)
{
PktSL* lpPktSL = static_cast<PktSL *>(lpPktBase);
SERVER_ID serverID = {0,};
serverID.dwID = lpPktSL->m_dwServerID;
m_cGroup = serverID.sID.Group;
if (false == GetDispatchTable().SetDispatch(m_cGroup, this))
{
ERRLOG3(g_Log, "DP:0x%p/IP:%s/Duplicated servergroup login : %d",
this, GetRemoteAddr().get_addr_string(), m_cGroup);
return false;
}
DETLOG3(g_Log, "DP:0x%p/IP:%s/Servergroup login : %d",
this, GetRemoteAddr().get_addr_string(), m_cGroup);
return true;
}
bool RegularAgentPacketParse::ParseGetCharSlot(PktBase* lpPktBase)
{
PktBGServerCharSlotAck* lpPktCharSlotAck = static_cast<PktBGServerCharSlotAck *>(lpPktBase);
// TODO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD>մϴ<D5B4>. (â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǹǷ<C7B9>...)
// <09><><EFBFBD><EFBFBD> ȯ<><C8AF><EFBFBD>ҿ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ǹ<EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> PktBGServerCharSlotAck<63><6B> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>մϴ<D5B4>.
unsigned long dwCID = lpPktCharSlotAck->m_dwCID;
unsigned char cGroup = lpPktCharSlotAck->m_cGroup;
CCharacter* lpCharacter = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL == lpCharacter)
{
ERRLOG1(g_Log, "CID:0x%08x ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.", dwCID);
return false;
}
CTempCharacter* lpTempCharacter = CRegularAgentDispatch::GetTempCharacterMgr().GetCharacter(dwCID, cGroup);
if(0 != lpTempCharacter)
{
unsigned long dwTempUID = 0;
if(DBComponent::AuthDB::GetUIDFromBattleUID(
CDBSingleObject::GetInstance(), lpCharacter->GetUID(), &dwTempUID))
{
int nCount = 0;
for(; nCount < USER_INFO::MAX_CHAR_NUM; ++nCount)
{
if(0 != lpPktCharSlotAck->m_dwSlotCID[nCount])
{
lpTempCharacter->SetUID(dwTempUID);
lpTempCharacter->SetCID(lpPktCharSlotAck->m_dwSlotCID[nCount]);
lpTempCharacter->SetCharacterName(lpPktCharSlotAck->m_szSlotName[nCount]);
lpTempCharacter->SetData(CTempCharacter::SLOT_INFO_SET);
DETLOG5(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD> UID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û : UID:%10u/CID:%10u/Group:%d/",
lpCharacter->GetUID(), dwCID, dwTempUID, lpPktCharSlotAck->m_dwSlotCID[nCount], cGroup);
if(SendGetCharData(dwTempUID, lpPktCharSlotAck->m_dwSlotCID[nCount],
lpPktCharSlotAck->m_szSlotName[nCount], dwCID, cGroup))
{
lpTempCharacter->AddDataRequestCount();
}
break;
}
}
// ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20>Ѹ<EFBFBD><D1B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
if(nCount == USER_INFO::MAX_CHAR_NUM)
{
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(), dwCID, cGroup,
PktBGServerMileageChange::MC_INFO, 0, lpCharacter->GetMileage(), PktBGServerMileageChange::NONE_CHARACTER);
}
}
}
else
{
ERRLOG3(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD> UID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : %s",
lpCharacter->GetUID(), dwCID, CDBSingleObject::GetInstance().GetErrorString());
}
}
else
{
ERRLOG2(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD> UID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ӽ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", lpCharacter->GetUID(), dwCID);
}
return true;
}
bool RegularAgentPacketParse::ParseGetCharData(PktBase* lpPktBase, unsigned char cGroup)
{
PktAdminToolGetDataAck* lpPktGetDataAck = static_cast<PktAdminToolGetDataAck *>(lpPktBase);
char* lpDataBuffer = reinterpret_cast<char *>(lpPktGetDataAck + 1);
unsigned long dwUID = lpPktGetDataAck->m_dwUID;
unsigned long dwCID = lpPktGetDataAck->m_dwCID;
unsigned long dwRequestKey = lpPktGetDataAck->m_dwRequestKey;
unsigned char cType = lpPktGetDataAck->m_cType;
unsigned long dwGold = 0;
CTempCharacter* lpTempCharacter =
CRegularAgentDispatch::GetTempCharacterMgr().GetCharacter(dwRequestKey, cGroup);
if (NULL != lpTempCharacter)
{
if (PktAdminToolGetData::CHAR_EXTRA_DATA == cType)
{
lpTempCharacter->SetUID(dwUID);
lpTempCharacter->SetCID(dwCID);
lpTempCharacter->GetCharInfoEx() = *reinterpret_cast<CHAR_INFOEX *>(lpDataBuffer);
lpDataBuffer += sizeof(CHAR_INFOEX);
lpTempCharacter->GetQuest() = *reinterpret_cast<QUEST *>(lpDataBuffer);
lpDataBuffer += sizeof(QUEST);
lpTempCharacter->GetHistory() = *reinterpret_cast<HISTORY *>(lpDataBuffer);
lpDataBuffer += sizeof(HISTORY);
lpTempCharacter->GetConfig() = *reinterpret_cast<CONFIG *>(lpDataBuffer);
lpDataBuffer += sizeof(CONFIG);
// STORE_INFO ------------------------------------------------------------------------------------
STORE_INFO& storeInfo = lpTempCharacter->GetStoreInfo() = *reinterpret_cast<STORE_INFO*>(lpDataBuffer);
//--------------------------------------------------------------------------------------------------
lpTempCharacter->SetData(CTempCharacter::CHAR_DATA_SET);
lpTempCharacter->ReleaseDataRequestCount();
dwGold = storeInfo.Gold;
CCharacter* lpCharacter = CCreatureManager::GetInstance().GetCharacter(dwRequestKey);
if (NULL != lpCharacter)
{
DETLOG6(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD>UID:%10u/<2F><><EFBFBD><EFBFBD>CID:%10u/Group:%d/Gold:%10u/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>ϴ<EFBFBD>.",
lpCharacter->GetUID(), lpCharacter->GetCID(), dwUID, dwCID, cGroup, dwGold);
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(), dwRequestKey, cGroup,
PktBGServerMileageChange::MC_INFO, dwGold, lpCharacter->GetMileage(), PktBase::NO_SERVER_ERR);
return true;
}
}
}
}
return true;
}
bool RegularAgentPacketParse::SendGetCharSlot(unsigned long dwCID, unsigned char cGroup)
{
CCharacter* lpCharacter = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL == lpCharacter)
{
ERRLOG1(g_Log, "CID:0x%08x ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.", dwCID);
return false;
}
/*
// Test : ȯ<><C8AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (10000002 != lpCharacter->GetUID() &&
10000012 != lpCharacter->GetUID() &&
10000006 != lpCharacter->GetUID() &&
10000015 != lpCharacter->GetUID() &&
10000310 != lpCharacter->GetUID() &&
10000027 != lpCharacter->GetUID() &&
10001591 != lpCharacter->GetUID() &&
10000020 != lpCharacter->GetUID() &&
10000601 != lpCharacter->GetUID() &&
10000013 != lpCharacter->GetUID())
{
return true;
}
*/
GET_MULTI_DISPATCH(lpDispatch, cGroup,
CRegularAgentDispatch, CRegularAgentDispatch::GetDispatchTable());
if (NULL == lpDispatch)
{
ERRLOG2(g_Log, "CID:0x%08x <20>׷<EFBFBD>:%d <20><><EFBFBD><EFBFBD><E1BCBC> <20><><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD>", dwCID, cGroup);
return false;
}
unsigned long dwTempUID = 0;
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> UID<49><44> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Slot<6F><74><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD>.
CTempCharacter* lpTempCharacter = CRegularAgentDispatch::GetTempCharacterMgr().GetCharacter(dwCID, cGroup);
if(0 == lpTempCharacter)
{
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
}
else if(lpTempCharacter->IsSetData(CTempCharacter::SLOT_INFO_SET))
{
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD>Ѵ<EFBFBD>.
/*
<20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> â<><C3A2> <20>ǵ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>..
if(lpTempCharacter->IsSetData(CTempCharacter::CHAR_DATA_SET))
{
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if (NULL != lpDispatch)
{
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(),
dwCID, cGroup, PktBGServerMileageChange::MC_INFO,
lpTempCharacter->GetStoreInfo().Gold, lpCharacter->GetMileage(),
PktBase::NO_SERVER_ERR);
}
}
else*/
{
if(SendGetCharData(lpTempCharacter->GetUID(), lpTempCharacter->GetCID(),
lpTempCharacter->GetCharacterName(), dwCID, cGroup))
{
lpTempCharacter->AddDataRequestCount();
}
}
}
else if(DBComponent::AuthDB::GetUIDFromBattleUID(
CDBSingleObject::GetInstance(), lpCharacter->GetUID(), &dwTempUID))
{
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û.
DETLOG4(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD> UID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> UID:%10u/Group:%d",
lpCharacter->GetUID(), dwCID, dwTempUID, cGroup);
CSendStream& SendStream = lpDispatch->GetSendStream();
char* lpBuffer = SendStream.GetBuffer(sizeof(PktBGServerCharSlot));
if (NULL != lpBuffer)
{
PktBGServerCharSlot* lpCharSlot = reinterpret_cast<PktBGServerCharSlot*>(lpBuffer);
lpCharSlot->m_dwCID = dwCID;
lpCharSlot->m_dwUID = dwTempUID;
lpCharSlot->m_cGroup = cGroup;
return SendStream.WrapHeader(sizeof(PktBGServerCharSlot), CmdBGServerCharSlot, 0, 0);
}
}
else
{
ERRLOG3(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD> UID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : %s",
lpCharacter->GetUID(), dwCID, CDBSingleObject::GetInstance().GetErrorString());
}
return false;
}
bool RegularAgentPacketParse::SendGetCharData(unsigned long dwUID, unsigned long dwSlotCID,
const char* szSlotName, unsigned long dwCID, unsigned char cGroup)
{
GET_MULTI_DISPATCH(lpDispatch, cGroup,
CRegularAgentDispatch, CRegularAgentDispatch::GetDispatchTable());
if (NULL == lpDispatch)
{
ERRLOG2(g_Log, "CID:0x%08x <20>׷<EFBFBD>:%d <20><><EFBFBD><EFBFBD><E1BCBC> <20><><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD>", dwCID, cGroup);
return false;
}
CSendStream& SendStream = lpDispatch->GetSendStream();
char* lpBuffer = SendStream.GetBuffer(sizeof(PktAdminToolGetData));
if (NULL != lpBuffer)
{
PktAdminToolGetData* lpGetData = reinterpret_cast<PktAdminToolGetData *>(lpBuffer);
lpGetData->m_cType = PktAdminToolGetData::GET_CHAR_DATA;
lpGetData->m_dwUID = dwUID;
lpGetData->m_dwCID = dwSlotCID;
strncpy(lpGetData->m_szName, szSlotName, CHAR_INFOST::MAX_NAME_LEN);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>صӴϴ<D3B4>.
lpGetData->m_dwRequestKey = dwCID;
if(SendStream.WrapHeader(sizeof(PktAdminToolGetData), CmdAdminToolGetData, 0, 0))
{
return true;
}
}
return false;
}
bool RegularAgentPacketParse::SendSetCharData(unsigned long dwCID, unsigned long dwMileage, unsigned char cGroup)
{
CTempCharacter* lpTempCharacter = CRegularAgentDispatch::GetTempCharacterMgr().GetCharacter(dwCID, cGroup);
CCharacter* lpCharacter = CCreatureManager::GetInstance().GetCharacter(dwCID);
if (NULL != lpTempCharacter && NULL != lpCharacter && lpTempCharacter->IsSetData(CTempCharacter::CHAR_DATA_SET))
{
/*
// Test : ȯ<><C8AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (10000002 != lpCharacter->GetUID() &&
10000012 != lpCharacter->GetUID() &&
10000006 != lpCharacter->GetUID() &&
10000015 != lpCharacter->GetUID() &&
10000310 != lpCharacter->GetUID() &&
10000027 != lpCharacter->GetUID() &&
10001591 != lpCharacter->GetUID() &&
10000020 != lpCharacter->GetUID() &&
10000601 != lpCharacter->GetUID() &&
10000013 != lpCharacter->GetUID())
{
return true;
}
*/
CGameClientDispatch* lpDispatch = lpCharacter->GetDispatcher();
if(!(lpTempCharacter->GetStoreInfo().Flag & PktDepositUpdateDB::USED_DEPOSIT))
{
// â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
ERRLOG2(g_Log, "CID:0x%08x/DataRequestCount:0x%08x/â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
dwCID, lpTempCharacter->GetStoreInfo().Flag);
if (NULL != lpDispatch)
{
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(), dwCID, cGroup,
PktBGServerMileageChange::MC_RESULT, 0, lpCharacter->GetMileage(), PktBGServerMileageChange::NOT_USED_STORE);
}
return true;
}
if(0 != lpTempCharacter->GetDataRequestCount())
{
ERRLOG2(g_Log, "CID:0x%08x/DataRequestCount:%u/<2F><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB><EFBFBD>Դϴ<D4B4>.",
dwCID, lpTempCharacter->GetDataRequestCount());
if (NULL != lpDispatch)
{
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(), dwCID, cGroup,
PktBGServerMileageChange::MC_RESULT, 0, lpCharacter->GetMileage(), PktBGServerMileageChange::DATA_REQUESTING);
}
return true;
}
unsigned char cGroup = lpTempCharacter->GetGroup();
GET_MULTI_DISPATCH(lpAgentDispatch, cGroup,
CRegularAgentDispatch, CRegularAgentDispatch::GetDispatchTable());
if (NULL == lpAgentDispatch)
{
ERRLOG2(g_Log, "CID:0x%08x <20>׷<EFBFBD>:%d <20><><EFBFBD><EFBFBD><E1BCBC> <20><><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD>", dwCID, cGroup);
if (NULL != lpDispatch)
{
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(), dwCID, cGroup,
PktBGServerMileageChange::MC_RESULT, 0, lpCharacter->GetMileage(), PktBGServerMileageChange::SERVER_ERROR);
}
return true;
}
if (lpCharacter->GetMileage() < dwMileage)
{
ERRLOG1(g_Log, "CID:0x%08x <20><><EFBFBD><EFBFBD> <20>޴<EFBFBD><DEB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.", dwCID);
if (NULL != lpDispatch)
{
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(), dwCID, cGroup,
PktBGServerMileageChange::MC_RESULT, 0, lpCharacter->GetMileage(), PktBGServerMileageChange::NOT_ENOUGH_MEDAL);
}
return true;
}
unsigned long dwAddGold = dwMileage * 10;
unsigned long dwSrcGold = lpTempCharacter->GetStoreInfo().Gold;
if(ULONG_MAX - dwAddGold < dwSrcGold)
{
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD>÷ο<C3B7> <20>߻<EFBFBD>
if (NULL != lpDispatch)
{
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(), dwCID, cGroup,
PktBGServerMileageChange::MC_RESULT, 0, lpCharacter->GetMileage(), PktBGServerMileageChange::MONEY_OVERFLOW);
}
return true;
}
unsigned long dwDstGold = dwSrcGold + dwAddGold;
GAMELOG::LogTakeGold(*lpCharacter, dwSrcGold, dwDstGold, dwAddGold,
TakeType::TS_DEPOSIT, TakeType::TS_DEPOSIT, GAMELOG::sTakeGoldLogV2::BATTLE_DEPOSIT, 0);
lpCharacter->SetMileage(lpCharacter->GetMileage() - dwMileage);
lpTempCharacter->GetStoreInfo().Gold = dwDstGold;
CSendStream& SendStream = lpAgentDispatch->GetSendStream();
PktAdminToolSetData baseData;
memset(&baseData, 0, sizeof(PktAdminToolSetData));
baseData.m_dwSerial = Item::CItemFactory::GetInstance().GetItemUID();
baseData.m_dwUID = lpTempCharacter->GetUID();
baseData.m_dwCID = lpTempCharacter->GetCID();
baseData.m_dwRequestKey = dwCID;
// -------------------------------------------------------------------------------------------------
// OPEN_UPDATE_DATA
char* lpOpenBuffer = SendStream.GetBuffer(sizeof(PktAdminToolSetData));
if (NULL != lpOpenBuffer)
{
PktAdminToolSetData* lpOpenSetData = reinterpret_cast<PktAdminToolSetData *>(lpOpenBuffer);
*lpOpenSetData = baseData;
lpOpenSetData->m_cType = PktAdminToolSetData::OPEN_UPDATE_DATA;
SendStream.WrapHeader(sizeof(PktAdminToolSetData),
CmdAdminToolSetData, 0, PktBase::NO_SERVER_ERR);
}
// -------------------------------------------------------------------------------------------------
// CHAR_EXTRA_DATA
unsigned short usBufferSize = sizeof(PktAdminToolSetData) +
sizeof(CHAR_INFOEX) + sizeof(QUEST) + sizeof(HISTORY) + sizeof(CONFIG) + sizeof(STORE_INFO);
char* lpExtraBuffer = SendStream.GetBuffer(usBufferSize);
if (NULL != lpExtraBuffer)
{
PktAdminToolSetData* lpExtraSetData = reinterpret_cast<PktAdminToolSetData *>(lpExtraBuffer);
char* In_DataBuffer = reinterpret_cast<char *>(lpExtraSetData + 1);
CopyMemory(In_DataBuffer, &lpTempCharacter->GetCharInfoEx(), sizeof(CHAR_INFOEX));
In_DataBuffer += sizeof(CHAR_INFOEX);
CopyMemory(In_DataBuffer, &lpTempCharacter->GetQuest(), sizeof(QUEST));
In_DataBuffer += sizeof(QUEST);
CopyMemory(In_DataBuffer, &lpTempCharacter->GetHistory(), sizeof(HISTORY));
In_DataBuffer += sizeof(HISTORY);
CopyMemory(In_DataBuffer, &lpTempCharacter->GetConfig(), sizeof(CONFIG));
In_DataBuffer += sizeof(CONFIG);
*reinterpret_cast<STORE_INFO *>(In_DataBuffer) = lpTempCharacter->GetStoreInfo();
*lpExtraSetData = baseData;
lpExtraSetData->m_cType = PktAdminToolSetData::CHAR_EXTRA_DATA;
SendStream.WrapHeader(usBufferSize, CmdAdminToolSetData, 0, PktBase::NO_SERVER_ERR);
}
// -------------------------------------------------------------------------------------------------
// FINISH_UPDATE_DATA
char* lpFinishBuffer = SendStream.GetBuffer(sizeof(PktAdminToolSetData));
if (NULL != lpFinishBuffer)
{
PktAdminToolSetData* lpFinishSetData = reinterpret_cast<PktAdminToolSetData *>(lpFinishBuffer);
*lpFinishSetData = baseData;
lpFinishSetData->m_cType = PktAdminToolSetData::FINISH_UPDATE_DATA;
SendStream.WrapHeader(sizeof(PktAdminToolSetData), CmdAdminToolSetData, 0, PktBase::NO_SERVER_ERR);
}
//--------------------------------------------------------------------------------------------------
if (NULL != lpDispatch)
{
DETLOG10(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD>UID:%10u/<2F><><EFBFBD><EFBFBD>CID:%10u/Group:%d/"
"<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>:%10u/<2F>Ա<EFBFBD><D4B1><EFBFBD>:%10u/<2F>Աݾ<D4B1>:%10u/<2F><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>:%10u/<2F><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>:%10u/"
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.",
lpCharacter->GetUID(), lpCharacter->GetCID(), baseData.m_dwUID, baseData.m_dwCID,
cGroup, dwSrcGold, dwDstGold, dwAddGold, dwMileage, lpCharacter->GetMileage());
GameClientSendPacket::SendCharBGServerMileageChange(lpDispatch->GetSendStream(),
dwCID, cGroup, PktBGServerMileageChange::MC_RESULT, lpTempCharacter->GetStoreInfo().Gold,
lpCharacter->GetMileage(), PktBase::NO_SERVER_ERR);
}
}
return true;
}