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,218 @@
#ifndef _GAMA_CLIENT_SOCKET_CONSTANTS_H_
#define _GAMA_CLIENT_SOCKET_CONSTANTS_H_
const unsigned short NoError = 0x0000; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const unsigned short WrongParameter = 0x4001; // <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD>
const unsigned short ExceptionError = 0x4002; // <20><><EFBFBD><EFBFBD> <20><> <20>߻<EFBFBD>
namespace ClientConstants
{
enum Hand
{
Hand_Weapon1 = 1,
Hand_Weapon2 = 2
};
enum FameInfo
{
FameInfo_Fame = 1,
FameInfo_Mileage = 2
};
enum Require
{
Require_HPInfo = 0,
Require_UDPInfo = 1,
Require_Shape = 2
};
enum BindPos
{
Bind_SavePos = 0,
Bind_Warp = 1,
Bind_Recall = 2
};
enum ChatType
{
ChatType_Normal = 0,
ChatType_Party = 1,
ChatType_Friend = 2,
ChatType_Guild = 3,
ChatType_ClientLog = 5,
ChatType_Stall = 6,
ChatType_Shout = 7,
ChatType_FindParty = 14,
ChatType_Dice = 16,
ChatType_Notify = 255
};
enum CellOper
{
CellOper_Move = 0,
CellOper_Login = 1,
CellOper_Logout = 1,
CellOper_Respawn = 2
};
enum PartyCmd
{
PartyCmd_Invite = 0,
PartyCmd_Accept = 1,
PartyCmd_Refuse = 2,
PartyCmd_Banish = 3,
PartyCmd_Secession = 4,
PartyCmd_Transfer = 5,
PartyCmd_Destroy = 6,
PartyCmd_Login = 7,
PartyCmd_Logout = 8,
PartyCmd_Delete = 9,
PartyCmd_ReLogin = 10,
PartyCmd_FindParty = 11,
PartyCmd_FindMember = 12,
PartyCmd_AutoRoutingOn = 13,
PartyCmd_AutoRoutingOff = 14
};
enum StateType
{
StateType_STR = 1,
StateType_DEX = 2,
StateType_CON = 3,
StateType_INT = 4,
StateType_WIS = 5
};
enum Judge
{
Judge_Front = 0, Judge_Side = 1, Judge_Back = 2,
Judge_Guard = 3, Judge_Critical = 4, Judge_Heal = 5,
Judge_ManaHeal = 6, Judge_Chant = 7, Judge_Enchant = 8,
Judge_Disenchant = 9, Judge_Evade = 10, Judge_Resist = 11,
Judge_ManaShell = 12, Judge_Poisoned = 13, Judge_NonShow = 14,
Judge_Miss = 15, Judge_Counter = 16, Judge_FireCracker = 17,
Judge_ChinaFireCracker = 18, Judge_SkillItem = 19, Judge_Fired = 20,
Judge_Social = 21, Judge_Gather = 22
};
enum ExchangeCmd
{
ExchangeCmd_Propose = 0, ExchangeCmd_Accept = 1, ExchangeCmd_Refuse = 2,
ExchangeCmd_OK = 3, ExchangeCmd_Cancel = 4, ExchangeCmd_Exchange = 5,
ExchangeCmd_Quit = 6, ExchangeCmd_Lock = 7, ExchangeCmd_UnLock = 8
};
enum DuelCmd
{
DuelCmd_Propose = 0, DuelCmd_Ready = 1, DuelCmd_Refuse = 2,
DuelCmd_Logout = 3, DuelCmd_Dead = 4, DuelCmd_PartyPropose = 5,
DuelCmd_PartyReady = 6, DuelCmd_RequestPartyInfo = 7, DuelCmd_Cancel = 8
};
enum AdminCmd
{
MoveZoneChar = 1,
MoveZoneParty = 2,
MoveChar = 3,
MoveParty = 4,
RespawnChar = 5,
RespawnParty = 6,
KillChar = 7,
KillParty = 8,
DuelInit = 9,
CreateItem = 10,
CreateMon = 11,
InfoChar = 12,
GetExp = 13,
GetGold = 14,
LevelUp = 15,
PeaceMode = 16,
WarMode = 17,
GetFame = 18,
GetMileage = 19,
TraceChar = 20,
HideChar = 21,
ShowChar = 22,
InvincibleChar = 23,
NormalChar = 24,
LogoutChar = 25,
Apocalypse = 26,
CreateEquip = 27,
EliteBonus = 28,
StatueInit = 29, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
RespawnAllChar = 30, // <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD>)
ChangeClass = 31, // <20><><EFBFBD><EFBFBD> <20>ϱ<EFBFBD>
LearnSkill = 32, // <20>ش<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EraseSkill = 33, // <20>ش<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LevelDown = 34, // <20><><EFBFBD><EFBFBD> <20>ٿ<EFBFBD>
GetQuest = 35, // <20><><EFBFBD><EFBFBD>Ʈ <20>ޱ<EFBFBD>
AddQuest = 36, // <20>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20>߰<EFBFBD>)
DeleteQuest = 37, // <20><><EFBFBD><EFBFBD>/<2F>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// BATTLEGROUND_SERVER <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD>
FinishGame = 38, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
DrawGame = 39, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD>º<EFBFBD>)
IgnoreGame = 40, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
SetMax = 41, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD>
SetScore = 42, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ǥ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SetLimitTime = 43, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SetRestTime = 44, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
// = 45, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
AddSpell = 46, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD><CEBF>Ѵ<EFBFBD>.
DeleteSpell = 47, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
Stop = 48, // <20>ش<EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>.
StopOff = 49, // <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> Ǯ<><C7AE><EFBFBD>ش<EFBFBD>.
Relation = 55,
// = 100 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5B5> <20><><EFBFBD><EFBFBD>
};
enum AuthorizePanelCmd
{
APCmd_Resurrection = 1,
APCmd_Recall = 2
};
enum RespawnCmd
{
RespawnCmd_Normal = 0,
RespawnCmd_Select = 1,
RespawnCmd_FormerPlace = 2,
RespawnCmd_Human1 = 3,
RespawnCmd_Human2 = 4,
RespawnCmd_Human3 = 5,
RespawnCmd_Akhan1 = 6,
RespawnCmd_Akhan2 = 7,
RespawnCmd_Akhan3 = 8,
//-- 2004. 2. 13. Zergra From.--//
RespawnCmd_BGServer_Random = 9,
//-- Zergra To. --//
RespawnCmd_BG_Exit = 10
};
enum AutoRoutingCmd
{
ARCmd_Order = 0,
ARCmd_Possible = 1,
ARCmd_Impossible = 2
};
enum SummonCmd
{
SummonCmd_Attack = 0,
SummonCmd_Return = 1,
SummonCmd_Die = 2,
SummonCmd_GuardOn = 3,
SummonCmd_GuardOff = 4
};
};
#endif

View File

@@ -0,0 +1,697 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// ClientSocket Class
//
///////////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ClientSocket.h"
#include <mmsystem.h>
#include <Network/ClientNetwork/SessionMgr.h>
#include <Network/ClientNetwork/TCPSession.h>
#include <Network/ClientNetwork/UDPSession.h>
#include <Network/ClientNetwork/NullHandler.h>
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <ctime>
#include "GMMemory.h"
// forward decl
bool GetHostIP(IN_ADDR &Addr, bool AllowVirtual);
bool IsWrongIP(IN_ADDR &Addr);
bool GetNATAddress(SOCKET Socket_In, SOCKADDR_IN *Address_Out, bool AllowVirtual);
ClientSocket* ClientSocket::s_pInstance = 0;
ClientSocket* ClientSocket::CreateInstance()
{
if( s_pInstance )
delete s_pInstance;
s_pInstance = new ClientSocket;
return s_pInstance;
};
ClientSocket::ClientSocket()
: m_dwStatusFlag(0)
{
memset(m_Address, 0, sizeof(SOCKADDR_IN) * (MAX_ADDRESS + 1));
memset(m_lpEventHandler, 0, sizeof(ClientNet::CClientEventHandler*) * MAX_HANDLER + 1);
m_bStatusFlag.reset();
m_lpNullEventHandler = &ClientNet::CNullClientEventHandler::GetInstance();
#include "GMUndefNew.h"
m_lpEventHandlerMgr = new (std::nothrow) ClientNet::CClientEventHandlerMgr;
#include "GMRedefNew.h"
InitNSCheckList();
}
ClientSocket::~ClientSocket(void)
{
delete m_lpEventHandlerMgr;
}
bool ClientSocket::Open(const char* address, unsigned short usport,
ClientNet::CClientEventHandler* lpEventHandler)
{
return (0 != lpEventHandler && 0 != m_lpEventHandlerMgr &&
m_lpEventHandlerMgr->Connect(INET_Addr(address, usport), lpEventHandler));
}
void ClientSocket::SetHandler(ClientNet::CClientEventHandler* lpHandler, HandlerType eHandlerType)
{
m_lpEventHandler[eHandlerType] = lpHandler;
}
void ClientSocket::ResetHandler(ClientNet::CClientEventHandler* lpHandler, HandlerType eHandlerType)
{
if (lpHandler == m_lpEventHandler[eHandlerType])
{
m_lpEventHandler[eHandlerType] = 0;
}
}
bool ClientSocket::IsConnected(HandlerType eHandlerType)
{
return (0 != m_lpEventHandler[eHandlerType]);
}
void ClientSocket::Disconnect(HandlerType eHandlerType)
{
if (0 != m_lpEventHandlerMgr)
{
if (eHandlerType == MAX_HANDLER)
{
for(int idx = 0; idx < MAX_HANDLER; ++idx)
{
if(0 != m_lpEventHandler[idx])
{
m_lpEventHandlerMgr->Close(m_lpEventHandler[idx]);
}
}
}
else if(0 != m_lpEventHandler[eHandlerType])
{
m_lpEventHandlerMgr->Close(m_lpEventHandler[eHandlerType]);
}
}
}
void ClientSocket::SetAddress(AddressType eAddrType, const char* szAddress, unsigned port)
{
m_Address[eAddrType] = INET_Addr(szAddress, port).get_addr_in();
}
void ClientSocket::HandleEvents(DWORD dwProcessPerCall)
{
if(0 != m_lpEventHandlerMgr)
{
m_lpEventHandlerMgr->HandleEvents(dwProcessPerCall);
}
}
bool GetHostIP(IN_ADDR &Addr, bool AllowVirtual)
{
char HostName[256];
if(!gethostname(HostName, 255))
{
PHOSTENT pHost = gethostbyname(HostName);
if(NULL == pHost)
{
return false;
}
int Count = 0;
for(;pHost->h_addr_list[Count]; ++Count)
{
memcpy(&(Addr.S_un.S_addr), pHost->h_addr_list[Count], sizeof(IN_ADDR));
if(!AllowVirtual)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
// 10.0.0.0 ~ 10.255.255.255
// 172.16.0.0 ~ 172.31.255.255
// 192.168.0.0 ~ 192.168.255.255
if((unsigned char)10 == Addr.S_un.S_un_b.s_b1)
{
continue;
}
else if((unsigned char)172 == Addr.S_un.S_un_b.s_b1)
{
if(Addr.S_un.S_un_b.s_b2 >= (unsigned char)16 && Addr.S_un.S_un_b.s_b2 <= (unsigned char)31)
{
continue;
}
}
else if((unsigned char)192 == Addr.S_un.S_un_b.s_b1)
{
if((unsigned char)168 == Addr.S_un.S_un_b.s_b2)
{
continue;
}
}
}
// <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 169.X.X.X <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> ( SyGate )
// 0.X.X.X
if((unsigned char)169 == Addr.S_un.S_un_b.s_b1)
{
continue;
}
else if((unsigned char)0 == Addr.S_un.S_un_b.s_b1)
{
continue;
}
return true;
}
if(0 != Count)
return true;
}
return false;
}
bool IsWrongIP(IN_ADDR &Addr)
{
if((unsigned char)169 == Addr.S_un.S_un_b.s_b1)
{
if((unsigned char)254 == Addr.S_un.S_un_b.s_b2)
{
return true;
}
}
if((unsigned char)0 == Addr.S_un.S_un_b.s_b1)
return true;
return false;
}
bool GetNATAddress(SOCKET Socket_In, SOCKADDR_IN *Address_Out, bool AllowVirtual)
{
int AddressSize = sizeof(SOCKADDR_IN);
if(getsockname(Socket_In, (struct sockaddr *)Address_Out, &AddressSize) != SOCKET_ERROR)
{
char HostName[256];
if(!gethostname(HostName, 255))
{
PHOSTENT pHost = gethostbyname(HostName);
if(NULL == pHost)
{
return false;
}
IN_ADDR& Addr = Address_Out->sin_addr;
int Count = 0;
for(;pHost->h_addr_list[Count]; ++Count)
{
memcpy(&(Addr.S_un.S_addr), pHost->h_addr_list[Count], sizeof(IN_ADDR));
if(!AllowVirtual)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
// 10.0.0.0 ~ 10.255.255.255
// 172.16.0.0 ~ 172.31.255.255
// 192.168.0.0 ~ 192.168.255.255
if((unsigned char)10 == Addr.S_un.S_un_b.s_b1)
{
continue;
}
else if((unsigned char)172 == Addr.S_un.S_un_b.s_b1)
{
if(Addr.S_un.S_un_b.s_b2 >= (unsigned char)16 && Addr.S_un.S_un_b.s_b2 <= (unsigned char)31)
{
continue;
}
}
else if((unsigned char)192 == Addr.S_un.S_un_b.s_b1)
{
if((unsigned char)168 == Addr.S_un.S_un_b.s_b2)
{
continue;
}
}
}
// <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 169.X.X.X <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> ( SyGate )
// 0.X.X.X
if((unsigned char)169 == Addr.S_un.S_un_b.s_b1)
{
continue;
}
else if((unsigned char)0 == Addr.S_un.S_un_b.s_b1)
{
continue;
}
return true;
}
if(0 != Count)
return true;
}
return false;
}
return false;
}
//by Hades Kang
void
ClientSocket::SetStatusFlag(unsigned long dwStatusFlag)
{
m_dwStatusFlag = dwStatusFlag;
}
unsigned long
ClientSocket::GetStatusFlag()
{
return m_dwStatusFlag;
}
bool
//<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7>װ<EFBFBD> üũ<C3BC>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ClientSocket::IsNSFlagChecked( unsigned char ucCmdFlag )
{
if( s_pInstance )
return s_pInstance->m_bStatusFlag[ ucCmdFlag ];
return false;
}
bool
//<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> ü<><C3BC><EFBFBD><EFBFBD> üũ<C3BC>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ClientSocket::IsNSFlagChainChecked( unsigned char ucCmdFlag )
{
if( s_pInstance )
{
std::vector<unsigned char>* pCheckList;
std::vector<unsigned char>::iterator iter;
pCheckList = &(s_pInstance->m_SendCheckList[ucCmdFlag]);
for( iter = pCheckList->begin() ; iter != pCheckList->end(); iter++ )
{
if( s_pInstance->m_bStatusFlag[ (*iter) ] ) //<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7>װ<EFBFBD> üũ <20>Ǿ<EFBFBD> <20>ִٸ<D6B4>...
return true;
}
}
return false;
}
void
//<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7>׸<EFBFBD> Ȱ<><C8B0>ȭ <20><>Ŵ - Send <20>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>
ClientSocket::SetNSFlagOn( unsigned char ucCmdFlag )
{
if( ucCmdFlag == CmdCharMove || //üũ<C3BC><C5A9> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>κе<CEBA>.
ucCmdFlag == CmdCharUpdateAddress ||
ucCmdFlag == CmdSysPing ||
ucCmdFlag == CmdCharAdminCmd )
return ;
if( s_pInstance )
s_pInstance->m_bStatusFlag[ ucCmdFlag ] = true;
}
void
//<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7>׸<EFBFBD> <20><>Ȱ<EFBFBD><C8B0>ȭ <20><>Ŵ - Receive <20>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>
ClientSocket::SetNSFlagOff( unsigned char ucCmdFlag )
{
if( s_pInstance )
{
std::vector<unsigned char>* pCheckList;
std::vector<unsigned char>::iterator iter;
pCheckList = &(s_pInstance->m_ReceiveCheckList[ucCmdFlag]);
for( iter = pCheckList->begin() ; iter != pCheckList->end(); iter++ )
{
s_pInstance->m_bStatusFlag[ (*iter) ] = false;
}
}
}
void
// Network Status <20><><EFBFBD><EFBFBD> Check List <20>ʱ<EFBFBD>ȭ ( Send, Receive )
ClientSocket::InitNSCheckList()
{
InitSendCheckList();
InitReceiveCheckList();
}
void
ClientSocket::InitSendCheckList()
{
/*
m_SendCheckList[ CmdAuthAccount ].push_back( CmdAuthAccount ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdServerGroup ].push_back( CmdServerGroup ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdUserLogin ].push_back( CmdUserLogin ) ; // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
m_SendCheckList[ CmdUserKill ].push_back( CmdUserKill ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSelect ].push_back( CmdCharSelect ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharCreate ].push_back( CmdCharCreate ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharDelete ].push_back( CmdCharDelete ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharLogin ].push_back( CmdCharLogin ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
m_SendCheckList[ CmdCharSuicide ].push_back( CmdCharSuicide ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>ڻ<EFBFBD>
m_SendCheckList[ CmdCharRespawn ].push_back( CmdCharRespawn ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ȱ
//m_SendCheckList[ CmdCharMove ].push_back( CmdCharMove ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> (P2P)
m_SendCheckList[ CmdCharMoveUpdate ].push_back( CmdCharMoveUpdate ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdCharChat ].push_back( CmdCharChat ) ; // ij<><C4B3><EFBFBD><EFBFBD> ä<><C3A4>
m_SendCheckList[ CmdCharAttack ].push_back( CmdCharAttack ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharCastObject ].push_back( CmdCharCastObject ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharUseSkill ].push_back( CmdCharUseSkill ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
*/
m_SendCheckList[ CmdCharTakeItem ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTakeItem ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTakeItem ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTakeItem ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTakeItem ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharTakeItem ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharTakeItem ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharTakeItem ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharSwapItem ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSwapItem ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSwapItem ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharSwapItem ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSwapItem ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSwapItem ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharSwapItem ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharSwapItem ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharRepairItem ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharRepairItem ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharRepairItem ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharRepairItem ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharRepairItem ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharRepairItem ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharRepairItem ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharRepairItem ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharUseItem ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharUseItem ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharUseItem ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharUseItem ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharUseItem ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharUseItem ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharUseItem ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharUseItem ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharTradeItem ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharTradeItem ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTradeItem ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTradeItem ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTradeItem ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTradeItem ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharTradeItem ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharTradeItem ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharStartQuest ].push_back( CmdCharStartQuest ) ; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharEquipShopInfo ].push_back( CmdCharEquipShopInfo ) ; // NPC <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharPullDown ) ;
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharPickUp ) ;
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharPickUp ) ;
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharTradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharTakeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharSwapItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharRepairItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharUseItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
/*
m_SendCheckList[ CmdCharSkillLock ].push_back( CmdCharSkillLock ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><>
m_SendCheckList[ CmdCharSkillCreate ].push_back( CmdCharSkillCreate ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSkillErase ].push_back( CmdCharSkillErase ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharClassUpgrade ].push_back( CmdCharClassUpgrade ) ; // ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
m_SendCheckList[ CmdCharShapeInfo ].push_back( CmdCharShapeInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
m_SendCheckList[ CmdCharIncreasePoint ].push_back( CmdCharIncreasePoint ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>ɷ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharBindPosition ].push_back( CmdCharBindPosition ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharRequireInfo ].push_back( CmdCharRequireInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
// m_SendCheckList[ CmdCharUpdateAddress ].push_back( CmdCharUpdateAddress ) ; // ij<><C4B3><EFBFBD><EFBFBD> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdCharPartyCmd ].push_back( CmdCharPartyCmd ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPartyMemInfo ].push_back( CmdCharPartyMemInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20>ɹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
m_SendCheckList[ CmdCharExchangeCmd ].push_back( CmdCharExchangeCmd ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdSysConnectAgent ].push_back( CmdSysConnectAgent ) ; // <20>ý<EFBFBD><C3BD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD> (UDP <20>߰<EFBFBD>) # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdSysPacketTransmit ].push_back( CmdSysPacketTransmit ) ; // <20>ý<EFBFBD><C3BD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> (UDP <20>߰<EFBFBD>) # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharLogout ].push_back( CmdCharLogout ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD> <20>ƿ<EFBFBD>
m_SendCheckList[ CmdDBGetData ].push_back( CmdDBGetData ) ; // DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdDBUpdateData ].push_back( CmdDBUpdateData ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdAgentParty ].push_back( CmdAgentParty ) ; // DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ƽ
m_SendCheckList[ CmdSysServerLogin ].push_back( CmdSysServerLogin ) ; // <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
m_SendCheckList[ CmdServerZone ].push_back( CmdServerZone ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGameCellInfo ].push_back( CmdGameCellInfo ) ; // <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharInfo ].push_back( CmdCharInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharAddressInfo ].push_back( CmdCharAddressInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharCellLogin ].push_back( CmdCharCellLogin ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>α<EFBFBD><CEB1><EFBFBD>
m_SendCheckList[ CmdCharCellLogout ].push_back( CmdCharCellLogout ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>α׾ƿ<D7BE>
m_SendCheckList[ CmdMonMove ].push_back( CmdMonMove ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
m_SendCheckList[ CmdCharAttackInfo ].push_back( CmdCharAttackInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
m_SendCheckList[ CmdCharAttacked ].push_back( CmdCharAttacked ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharAward ].push_back( CmdCharAward ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemInfo ].push_back( CmdCharItemInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPickUp ].push_back( CmdCharPickUp ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPullDown ].push_back( CmdCharPullDown ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPickUpInfo ].push_back( CmdCharPickUpInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharPullDownInfo ].push_back( CmdCharPullDownInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharCastObjectInfo ].push_back( CmdCharCastObjectInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharInstallSocket ].push_back( CmdCharInstallSocket ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ
m_SendCheckList[ CmdCharLevelUp ].push_back( CmdCharLevelUp ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
m_SendCheckList[ CmdCharPartyInfo ].push_back( CmdCharPartyInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharUpgradeItem ].push_back( CmdCharUpgradeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
m_SendCheckList[ CmdCharHPRegen ].push_back( CmdCharHPRegen ) ; // ij<><C4B3><EFBFBD><EFBFBD> HP <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharLevelUpInfo ].push_back( CmdCharLevelUpInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSplitItem ].push_back( CmdCharSplitItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>ɰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdUpdateUIDTable ].push_back( CmdUpdateUIDTable ) ; // UID <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdCharQuickSlotMove ].push_back( CmdCharQuickSlotMove ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
m_SendCheckList[ CmdCharSwitchEQ ].push_back( CmdCharSwitchHand ) ; // <20><> <20>ٲٱ<D9B2>
m_SendCheckList[ CmdSysMngerRegistry ].push_back( CmdSysMngerRegistry ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdSysMngerRequest ].push_back( CmdSysMngerRequest ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û
m_SendCheckList[ CmdSysMngerResponse ].push_back( CmdSysMngerResponse ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTakeItems ].push_back( CmdCharTakeItems ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharTakeGold ].push_back( CmdCharTakeGold ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharExchangeItem ].push_back( CmdCharExchangeItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
m_SendCheckList[ CmdCellBroadCasting ].push_back( CmdCellBroadCasting ) ; // <20><> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>
m_SendCheckList[ CmdSysPatchAddress ].push_back( CmdSysPatchAddress ) ; // <20><>ġ <20>ּ<EFBFBD>
m_SendCheckList[ CmdCharPartyCmdInfo ].push_back( CmdCharPartyCmdInfo ) ; // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdServerLog ].push_back( CmdServerLog ) ; // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> (???)
m_SendCheckList[ CmdCharWhisper ].push_back( CmdCharWhisper ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>ӼӸ<D3BC>
m_SendCheckList[ CmdSysServerVerUpdate ].push_back( CmdSysServerVerUpdate ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdSysMng ].push_back( CmdSysMng ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ (<28>ӽ<EFBFBD>) (???)
m_SendCheckList[ CmdSysChannelUpdate ].push_back( CmdSysChannelUpdate ) ; // <20><><EFBFBD><EFBFBD> ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdCharPartyFind ].push_back( CmdCharPartyFind ) ; // <20><>Ƽ ã<><C3A3>
m_SendCheckList[ CmdCharPartyMemData ].push_back( CmdCharPartyMemData ) ; // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharControlOption ].push_back( CmdCharControlOption ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharDuelCmd ].push_back( CmdCharDuelCmd ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharFameInfo ].push_back( CmdCharFameInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdLoginServerList ].push_back( CmdLoginServerList ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ #!! <20><>ȣ <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD> !!#
m_SendCheckList[ CmdCharSpellInfo ].push_back( CmdCharSpellInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> æƮ&<26><>æƮ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSkillUnLock ].push_back( CmdCharSkillUnLock ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><> <20><><EFBFBD><EFBFBD>
// m_SendCheckList[ CmdSysPing ].push_back( CmdSysPing ) ; // <20><><EFBFBD><EFBFBD> <20><> <20><>Ŷ
m_SendCheckList[ CmdCharMoveZone ].push_back( CmdCharMoveZone ) ; // <20><> <20>̵<EFBFBD>
m_SendCheckList[ CmdAgentZone ].push_back( CmdAgentZone ) ; // <20><> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdDeposit ].push_back( CmdDeposit ) ; // â<><C3A2> ó<><C3B3> <20><>Ŷ (Client <--> GameServer)
m_SendCheckList[ CmdDepositUpdate ].push_back( CmdDepositUpdate ) ; // â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ŷ (GameServer <--> DBAgent)
m_SendCheckList[ CmdCharStallOpen ].push_back( CmdCharStallOpen ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharStallRegisterItem ].push_back( CmdCharStallRegisterItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharStallEnter ].push_back( CmdCharStallEnter ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharStallItemInfo ].push_back( CmdCharStallItemInfo ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//m_SendCheckList[ CmdCharAdminCmd ].push_back( CmdCharAdminCmd ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharTeamBattleInfo ].push_back( CmdCharTeamBattleInfo ) ; // <20><><EFBFBD><EFBFBD>Ʋ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdFriendAddRequest ].push_back( CmdFriendAddRequest ) ; // ģ<><C4A3> <20>߰<EFBFBD>
m_SendCheckList[ CmdFriendRemoveRequest ].push_back( CmdFriendRemoveRequest ) ; // ģ<><C4A3> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdFriendEtcRequest ].push_back( CmdFriendEtcRequest ) ; // ģ<><C4A3> <20><>Ÿ
m_SendCheckList[ CmdFriendAck ].push_back( CmdFriendAck ) ; // ģ<><C4A3> Ack
m_SendCheckList[ CmdFriendDB ].push_back( CmdFriendDB ) ; // ģ<><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdEliteBonus ].push_back( CmdEliteBonus ) ; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ʽ<EFBFBD>
m_SendCheckList[ CmdCharOperateTrigger ].push_back( CmdCharOperateTrigger ) ; // Ʈ<><C6AE><EFBFBD><EFBFBD> <20>ߵ<EFBFBD>
m_SendCheckList[ CmdQuestDB ].push_back( CmdQuestDB ) ; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> (DB<44><42> <20><><EFBFBD>̺<EFBFBD>/<2F>ε<EFBFBD>, ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>)
m_SendCheckList[ CmdCharEndQuest ].push_back( CmdCharEndQuest ) ; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharDisappearItem ].push_back( CmdCharDisappearItem ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharAuthorizePanel ].push_back( CmdCharAuthorizePanel ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>dz<EFBFBD>
m_SendCheckList[ CmdCharPeaceMode ].push_back( CmdCharPeaceMode ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdConfigInfoDB ].push_back( CmdConfigInfoDB ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharAutoRouting ].push_back( CmdCharAutoRouting ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdRankingInfo ].push_back( CmdRankingInfo ) ; // <20><>ŷ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharStateRedistribution ].push_back( CmdCharStateRedistribution ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>й<EFBFBD><><C5AC><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD>·<EFBFBD>)
m_SendCheckList[ CmdBillingTimeoutNotify ].push_back( CmdBillingTimeoutNotify ) ; // <20><><EFBFBD><EFBFBD> Ÿ<>Ӿƿ<D3BE> Notify<66><79><EFBFBD><EFBFBD>
m_SendCheckList[ CmdAdminToolGetData ].push_back( CmdAdminToolGetData ) ; // <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBAgent<6E><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
m_SendCheckList[ CmdAdminToolSetData ].push_back( CmdAdminToolSetData ) ; // <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBAgent<6E><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
m_SendCheckList[ CmdEventDropItem ].push_back( CmdEventDropItem ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ
m_SendCheckList[ CmdCharCancelQuest ].push_back( CmdCharCancelQuest ) ; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdBillingTimeCheckNotify ].push_back( CmdBillingTimeCheckNotify ) ; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> üũ
m_SendCheckList[ CmdCharLotteryResult ].push_back( CmdCharLotteryResult ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharSummonCmd ].push_back( CmdCharSummonCmd ) ; // <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdChatClientLogin ].push_back( CmdChatClientLogin ) ; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>
m_SendCheckList[ CmdChatLogin ].push_back( CmdChatLogin ) ; // <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>α<EFBFBD><CEB1><EFBFBD> <20><>.
m_SendCheckList[ CmdChatLogout ].push_back( CmdChatLogout ) ; // <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>α׾ƿ<D7BE> <20><>.
m_SendCheckList[ CmdChatInfoChanged ].push_back( CmdChatInfoChanged ) ; // <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.
m_SendCheckList[ CmdCharSummon ].push_back( CmdCharSummon ) ; // <20><>ȯ
m_SendCheckList[ CmdJapanAuthAccount ].push_back( CmdJapanAuthAccount ) ; // <20>Ϻ<EFBFBD><CFBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (ID, Password<72><64><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ尡 <20>´<EFBFBD>.)
m_SendCheckList[ CmdCharBattleGroundRespawn ].push_back( CmdCharBattleGroundRespawn ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharRespawnWaitQueue ].push_back( CmdCharRespawnWaitQueue ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ť <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdStatueInfo ].push_back( CmdStatueInfo ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCameraScript ].push_back( CmdCameraScript ) ; // ī<>޶<EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ
m_SendCheckList[ CmdCharEquipDurability ].push_back( CmdCharEquipDurability ) ; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCreateGuild ].push_back( CmdCreateGuild ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildCmd ].push_back( CmdGuildCmd ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildMark ].push_back( CmdGuildMark ) ; // <20><><EFBFBD><EFBFBD> <20><>ũ <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildLevel ].push_back( CmdGuildLevel ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildRelation ].push_back( CmdGuildRelation ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildList ].push_back( CmdGuildList ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdGuildDB ].push_back( CmdGuildDB ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildRight ].push_back( CmdGuildRight ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildMemberList ].push_back( CmdGuildMemberList ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdMyGuildInfo ].push_back( CmdMyGuildInfo ) ; // <20>ڱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildSafe ].push_back( CmdGuildSafe ) ; // <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD>
m_SendCheckList[ CmdGuildMemberInfoUpdate ].push_back( CmdGuildMemberInfoUpdate ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdCharStatusRetrain ].push_back( CmdCharStatusRetrain ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD> <20><><EFBFBD>Ʒ<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdSysServerLogout ].push_back( CmdSysServerLogout ) ; // <20><><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE>
// m_SendCheckList[ CmdCharPartyAddress ].push_back( CmdCharPartyAddress ) ; // <20><>Ƽ<EFBFBD><C6BC> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
// m_SendCheckList[ CmdCharPartyMemAddress ].push_back( CmdCharPartyMemAddress ) ; // <20><>Ƽ<EFBFBD><C6BC> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
m_SendCheckList[ CmdBGServerMapList ].push_back( CmdBGServerMapList ) ; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(<28><>) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û
m_SendCheckList[ CmdBGServerResultList ].push_back( CmdBGServerResultList ) ; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(<28><>) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û
m_SendCheckList[ CmdBGServerMoveZone ].push_back( CmdBGServerMoveZone ) ; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(<28><>) <20>̵<EFBFBD> (<28><> <20>̵<EFBFBD>)
m_SendCheckList[ CmdBGServerMileageChange ].push_back( CmdBGServerMileageChange ) ; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȯ<><C8AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdBGServerCharSlot ].push_back( CmdBGServerCharSlot ) ; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
m_SendCheckList[ CmdHanBTNWarning ].push_back( CmdHanBTNWarning ) ; // <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>
m_SendCheckList[ CmdHanBTNUserKill ].push_back( CmdHanBTNUserKill ) ; // <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>
m_SendCheckList[ CmdCharRepairAllItem ].push_back( CmdCharRepairAllItem ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCSAuth ].push_back( CmdCSAuth ) ; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharItemChemical ].push_back( CmdCharItemChemical ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ռ<EFBFBD>
m_SendCheckList[ CmdItemQtyCheck ].push_back( CmdItemQtyCheck ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildInclination ].push_back( CmdGuildInclination ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdGuildMemberFameUpdate ].push_back( CmdGuildMemberFameUpdate ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
m_SendCheckList[ CmdCastleInfo ].push_back( CmdCastleInfo ) ; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (DBAgentServer -> GameServer)
m_SendCheckList[ CmdCampInfo ].push_back( CmdCampInfo ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (DBAgentServer -> GameServer)
m_SendCheckList[ CmdCreateCastle ].push_back( CmdCreateCastle ) ; // <20><> <20><><EFBFBD><EFBFBD> (GameServer -> Client)
m_SendCheckList[ CmdCreateCamp ].push_back( CmdCreateCamp ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Client <- GameServer -> DBAgentServer)
m_SendCheckList[ CmdCreateSiegeArms ].push_back( CmdCreateSiegeArms ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Client <- GameServer -> DBAgentServer)
m_SendCheckList[ CmdCastleCmd ].push_back( CmdCastleCmd ) ; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GameServer <-> DBAgentServer)
m_SendCheckList[ CmdCampCmd ].push_back( CmdCampCmd ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GameServer <-> DBAgentServer)
m_SendCheckList[ CmdSiegeArmsCmd ].push_back( CmdSiegeArmsCmd ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GameServer <-> DBAgentServer)
m_SendCheckList[ CmdCastleRight ].push_back( CmdCastleRight ) ; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GameServer <-> DBAgentServer)
m_SendCheckList[ CmdCampRight ].push_back( CmdCampRight ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
m_SendCheckList[ CmdSiegeBroadCast ].push_back( CmdSiegeBroadCast ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ
m_SendCheckList[ CmdSiegeTimeInfo ].push_back( CmdSiegeTimeInfo ) ; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdStealthInfo ].push_back( CmdStealthInfo ) ; // <20><><EFBFBD>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EBB0A1> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCellBroadCast2nd ].push_back( CmdCellBroadCast2nd ) ; // <20><> <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
m_SendCheckList[ CmdCharRespawnInfo ].push_back( CmdCharRespawnInfo ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
m_SendCheckList[ CmdCharRespawnAreaInfo ].push_back( CmdCharRespawnAreaInfo ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharEquipShopInfo ].push_back( CmdCharEquipShopInfo ) ; // NPC <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdSiegeBroadCast2nd ].push_back( CmdSiegeBroadCast2nd ) ; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_SendCheckList[ CmdCharItemOptionGraft ].push_back( CmdCharItemOptionGraft ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
m_SendCheckList[ CmdCharItemCompensation ].push_back( CmdCharItemCompensation ) ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
*/
}
void
ClientSocket::InitReceiveCheckList()
{
for (int nIndex = 0; nIndex < CmdFinalPacketNum; ++nIndex)
{
m_ReceiveCheckList[nIndex].push_back(nIndex);
}
}
int
ClientSocket::CheckFlag( int* arrFlag ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
int res = 0;
for( int i = 0; i < CmdFinalPacketNum ; i++ )
{
if( s_pInstance->m_bStatusFlag[i] )
arrFlag[res++] = i;
}
return res;
}

View File

@@ -0,0 +1,130 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// ClientSocket Class
//
// Last Update : 2003-01-10
//
///////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _GAMA_CLIENT_SOCKET_H_
#define _GAMA_CLIENT_SOCKET_H_
#include <winsock2.h>
#include <windows.h>
#include <Network/Packet/PacketCommand.h>
#include <DB/DBDefine.h>
#include <vector>
#include <bitset>
namespace ClientNet
{
// forward decl.
class CNetworkMsgBlock;
class CClientEventHandler;
class CClientEventHandlerMgr;
};
class ClientSocket
{
protected:
ClientSocket();
virtual ~ClientSocket();
static ClientSocket* s_pInstance;
public:
static ClientSocket* CreateInstance();
static void DestroyInstance() { if(s_pInstance) { delete s_pInstance; s_pInstance = 0; } };
static ClientSocket* Instance() { return s_pInstance; };
enum Const
{
MAX_CHAT_SERVER_ADDR = 16,
MAX_GAME_GUARD_CRYPT_HEADER_SIZE = 32
};
enum ConnectPort
{
DEFAULT_AUTH_TCP_PORT = 10110,
DEFAULT_CLIENT_UDP_PORT = 20002
};
enum HandlerType
{
AuthEventHandler = 0,
GameEventHandler = 1,
MAX_HANDLER = 2
};
enum AddressType
{
PublicAddr = 0,
PrivateAddr = 1,
MoveZoneAddr = 2,
MAX_ADDRESS = 3
};
// ------------------------------------------------------------------------------------------------
// <20><>Ʈ<EFBFBD><C6AE>ũ <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD>
// by Hades Kang
void SetStatusFlag(unsigned long dwStatusFlag);
unsigned long GetStatusFlag();
static bool IsNSFlagChecked(unsigned char ucCmdFlag); //<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7>װ<EFBFBD> üũ<C3BC>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
static bool IsNSFlagChainChecked(unsigned char ucCmdFlag); //<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> ü<><C3BC><EFBFBD><EFBFBD> üũ<C3BC>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
static void SetNSFlagOn(unsigned char ucCmdFlag); //<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7>׸<EFBFBD> Ȱ<><C8B0>ȭ <20><>Ŵ - Send <20>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>
static void SetNSFlagOff(unsigned char ucCmdFlag); //<2F>ش<EFBFBD> <20>÷<EFBFBD><C3B7>׿<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>͵<EFBFBD><CDB5><EFBFBD> <20><>Ȱ<EFBFBD><C8B0>ȭ <20><>Ŵ - Receive <20>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>
static int CheckFlag( int* arrFlag ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ------------------------------------------------------------------------------------------------
// Management Address
SOCKADDR_IN& GetAddress(AddressType eAddrType) { return m_Address[eAddrType]; }
const char* GetAddressString(AddressType eAddrType) { return inet_ntoa(m_Address[eAddrType].sin_addr); }
unsigned short GetAddressPort(AddressType eAddrType) { return ntohs(m_Address[eAddrType].sin_port); }
void SetAddress(AddressType eAddrType, SOCKADDR_IN& Address) { m_Address[eAddrType] = Address; }
void SetAddress(AddressType eAddrType, const char* szAddress, unsigned port);
void ClearAddress(AddressType eAddrType) { memset(m_Address + eAddrType, 0, sizeof(SOCKADDR_IN)); }
ClientNet::CClientEventHandler& GetHandler(HandlerType eHandlerType)
{ return (0 == m_lpEventHandler[eHandlerType]) ? *m_lpNullEventHandler : *m_lpEventHandler[eHandlerType]; }
void SetHandler(ClientNet::CClientEventHandler* lpHandler, HandlerType eHandlerType);
void ResetHandler(ClientNet::CClientEventHandler* lpHandler, HandlerType eHandlerType);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰų<CFB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּҿ<D6BC> <20><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20>Ѵ<EFBFBD>.
bool Open(const char* address, unsigned short usport,
ClientNet::CClientEventHandler* lpEventHandler);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD>θ<EFBFBD> <20><><EFBFBD>ɴ<EFBFBD>.
bool IsConnected(HandlerType eHandlerType);
// MAX_SESSION<4F><4E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
void Disconnect(HandlerType eHandlerType);
// <20><><EFBFBD><EFBFBD> <20><> <20><>Ŷ<EFBFBD><C5B6> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
void HandleEvents(DWORD dwProcessPerCall);
private:
void InitNSCheckList(); // Network Status <20><><EFBFBD><EFBFBD> Check List <20>ʱ<EFBFBD>ȭ ( Send, Receive )
void InitSendCheckList();
void InitReceiveCheckList();
SOCKADDR_IN m_Address[MAX_ADDRESS + 1];
ClientNet::CClientEventHandler* m_lpEventHandler[MAX_HANDLER + 1];
ClientNet::CClientEventHandler* m_lpNullEventHandler;
ClientNet::CClientEventHandlerMgr* m_lpEventHandlerMgr;
unsigned long m_dwStatusFlag;
std::vector<unsigned char> m_SendCheckList[CmdFinalPacketNum]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ <20>ؾ<EFBFBD><D8BE>ϴ<EFBFBD> Ŀ<>ǵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ( <20>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD> true <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>! )
std::vector<unsigned char> m_ReceiveCheckList[CmdFinalPacketNum]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ <20>ؾ<EFBFBD><D8BE>ϴ<EFBFBD> Ŀ<>ǵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ( <20><><EFBFBD><EFBFBD> false<73><65> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>. )
std::bitset<CmdFinalPacketNum> m_bStatusFlag;
};
#endif

View File

@@ -0,0 +1,139 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// ClientSocket Class
//
///////////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "LoginSocket.h"
#include <Network/Packet/PacketBase.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/ClientToAuthServer.h>
#include <Network/Packet/PacketStruct/ClientToLoginServer.h>
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <mmsystem.h>
#include "GMMemory.h"
LoginSocket::LoginSocket()
: m_lpHandler(0), m_lpHandlerMgr(0)
{
m_lpHandlerMgr = new ClientNet::CClientEventHandlerMgr;
}
LoginSocket::~LoginSocket(void)
{
Destroy();
}
bool LoginSocket::ConnectToLoginServer(ClientNet::CClientEventHandler* lpEventHandler,
const char* Address_In, unsigned short port)
{
CHECK_NULL_RETURN(lpEventHandler, false);
CHECK_NULL_RETURN(m_lpHandlerMgr, false);
if(!m_lpHandlerMgr->Connect(INET_Addr(Address_In, port), lpEventHandler))
{
fprintf(stderr, "LoginSocket::ConnectToLoginServer - Connect to LoginServer failed\n");
return false;
}
return true;
}
void LoginSocket::Destroy()
{
delete m_lpHandlerMgr;
}
void LoginSocket::HandleEvents(unsigned long dwProcessPerCall)
{
if (0 != m_lpHandlerMgr)
{
m_lpHandlerMgr->HandleEvents(dwProcessPerCall);
}
}
void LoginSocket::Disconnect(void)
{
if(0 != m_lpHandlerMgr && 0 != m_lpHandler)
{
m_lpHandlerMgr->Close(m_lpHandler);
}
}
bool LoginSocket::IsConnected()
{
return (NULL != m_lpHandler);
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// GAS <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [ public ]
// - GAS <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
// 2st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>[In]
//
// Return :
// <09><>Ŷ <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD>н<EFBFBD> false
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool LoginSocket::ServerList(DWORD ClientVersion_In)
{
CHECK_NULL_RETURN(m_lpHandler, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktSvL), m_lpHandler->GetPeerAddress());
if(NULL != lpMsgBlock)
{
PktSvL* lpPktSvL = reinterpret_cast<PktSvL*>(lpMsgBlock->wr_ptr());
lpPktSvL->m_dwClientVer= ClientVersion_In;
if(lpMsgBlock->WrapCryptOld(sizeof(PktSvL), CmdLoginServerList, 0, PatcherModel))
{
m_lpHandlerMgr->SendPacket(m_lpHandler, lpMsgBlock);
return true;
}
}
return false;
}
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><>Ŷ ó<><C3B3> [ public ]
// - AUAckPt ó<><C3B3>
//
// Parameter :
// 1st : <20><>Ŷ <20><><EFBFBD><EFBFBD>[In]
// 2st : <20>α<EFBFBD><CEB1><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü[Out]
//
// Return :
// <09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
unsigned long LoginSocket::HandleServerList(PktBase* lpPktBase, DWORD* ClientVer_Out,
char* PatchAddress_Out, SERVER_LIST* lpServerList_Out)
{
PktSvLAck* lpPktSvLAck = static_cast<PktSvLAck*>(lpPktBase);
*ClientVer_Out = lpPktSvLAck->m_dwClientVer;
strncpy(PatchAddress_Out, lpPktSvLAck->m_PatchAddress, PktSvLAck::PATCH_ADDRESS_LENGTH);
*lpServerList_Out = lpPktSvLAck->m_ServerList;
return lpPktSvLAck->GetError();
}

View File

@@ -0,0 +1,78 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// LoginSocket Class
//
// Last Update : 2002. 8.28
//
///////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _GAMA_CLIENT_LOGIN_SOCKET_H_
#define _GAMA_CLIENT_LOGIN_SOCKET_H_
#include <cstdio>
#include <Network/ClientSocket/Send/SendPacket.h>
// forward decl
struct PktBase;
struct SERVER_LIST;
namespace ClientNet
{
class CClientEventHandler;
class CClientEventHandlerMgr;
}
const unsigned short PatcherModel = 1;
// class decl
class LoginSocket
{
public:
enum AuthFlag
{
AuthFlag_RegDB = 0x8000,
AuthFlag_Email = 0x4000
};
enum ConnectPort
{
DEFAULT_LOGIN_PORT = 10101 // Client Login TCP Port
};
LoginSocket();
virtual ~LoginSocket();
// <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
bool ConnectToLoginServer(ClientNet::CClientEventHandler* lpEventHandler,
const char* Address_In, unsigned short port = DEFAULT_LOGIN_PORT);
// <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
void HandleEvents(unsigned long dwProcessPerCall = 30);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
void Disconnect();
void Destroy();
bool IsConnected();
bool ServerList(unsigned long ClientVersion_In); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><>û
void SetHandler(ClientNet::CClientEventHandler* lpHandler) { m_lpHandler = lpHandler; }
void ResetHandler(ClientNet::CClientEventHandler* lpHandler) { if(m_lpHandler == lpHandler) { m_lpHandler = 0; } }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>޴´<DEB4>.
static unsigned long HandleServerList(PktBase* lpPktBase,
unsigned long* ClientVer_Out, char* PatchAddress_Out,
SERVER_LIST* lpServerList_Out);
private:
ClientNet::CClientEventHandlerMgr* m_lpHandlerMgr;
ClientNet::CClientEventHandler* m_lpHandler;
};
#endif

View File

@@ -0,0 +1,147 @@
#include "stdafx.h"
#include "ParseAuthServer.h"
#include <Network/Packet/PacketStruct/ClientToAuthServer.h>
#include <Network/Packet/PacketStruct/UnifiedCharPacket.h>
#include "GMMemory.h"
unsigned long ParsePacket::HandleAuthAccount(PktBase* lpPktBase, unsigned long& UserID_Out,
unsigned char& cAgentServerType_Out, unsigned char& cFirstLogin_Out)
{
PktAUAck* lpPktAUAck = static_cast<PktAUAck*>(lpPktBase);
UserID_Out = lpPktAUAck->m_dwUserID;
cAgentServerType_Out = lpPktAUAck->m_cAgentServerType;
cFirstLogin_Out = lpPktAUAck->m_cFirstLogin;
return lpPktAUAck->GetError();
}
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned long ParsePacket::HandleUserLogin(PktBase* lpPktBase, unsigned long *SessionID_Out, unsigned long *UserID_Out,
CHAR_VIEW* CharRecode_Out, sGuildData* CharGuildRecode_Out, unsigned char *cAccountNation,
time_t* currentTime, int* nPlayTime_Out, unsigned short* usAdminLevel_Out,
unsigned char* cBillingType_Out, unsigned char* cBillingUser_Out, unsigned char* cLoginType_Out,
unsigned long* dwTabFlag)
{
PktULiAck* lpPktULiAck = static_cast<PktULiAck*>(lpPktBase);
*SessionID_Out = lpPktULiAck->m_dwSessionID;
*UserID_Out = lpPktULiAck->m_dwUserID;
*currentTime = lpPktULiAck->m_dwCurrentTime;
*nPlayTime_Out = lpPktULiAck->m_nPlayTime;
*usAdminLevel_Out = lpPktULiAck->m_usAdminLevel;
*cBillingType_Out = lpPktULiAck->m_cBillingType;
*cBillingUser_Out = lpPktULiAck->m_cBillingUser;
*cLoginType_Out = lpPktULiAck->m_cLoginType;
*dwTabFlag = lpPktULiAck->m_dwTabFlag;
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
*cAccountNation = lpPktULiAck->m_cAccountNation;
memcpy(CharRecode_Out, lpPktULiAck->m_CharView, sizeof(CHAR_VIEW) * PktULiAck::MAX_CHAR_VIEW);
memcpy(CharGuildRecode_Out, lpPktULiAck->m_GuildData, sizeof(sGuildData) * PktULiAck::MAX_CHAR_VIEW);
return lpPktULiAck->GetError();
}
unsigned long ParsePacket::HandleCharCreate(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned long *SlotNum_Out, CHAR_VIEW* lpCharView_Out)
{
PktCCAck* lpPktCCAck = static_cast<PktCCAck*>(lpPktBase);
*CharID_Out = lpPktCCAck->m_dwCharID;
*SlotNum_Out = lpPktCCAck->m_dwSlotNum;
memcpy(lpCharView_Out, &(lpPktCCAck->m_CharView), sizeof(CHAR_VIEW));
return lpPktCCAck->GetError();
}
unsigned long ParsePacket::HandleCharSelect(PktBase* lpPktBase, unsigned char *Zone_Out,
unsigned short *lpChannelNum_Out)
{
PktCSAck* lpPktCSAck = static_cast<PktCSAck*>(lpPktBase);
*Zone_Out = lpPktCSAck->m_cZone;
memcpy(lpChannelNum_Out, lpPktCSAck->m_wChannelNum, sizeof(unsigned short) * PktCSAck::MAX_CHANNEL_NUM);
return lpPktCSAck->GetError();
}
unsigned long ParsePacket::HandleCharDelete(PktBase* lpPktBase,
unsigned long *UserID_Out, unsigned long *SlotNum_Out)
{
PktCDAck* lpPktCDAck = static_cast<PktCDAck*>(lpPktBase);
*UserID_Out = lpPktCDAck->m_dwUserID;
*SlotNum_Out = lpPktCDAck->m_dwSlotNum;
return lpPktCDAck->GetError();
}
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned long ParsePacket::HandleSelectAccountNation(PktBase* lpPktBase, unsigned long *UserID_Out,
unsigned char *cType, unsigned char *cAccountNation_Out)
{
PktSelectAccountNation* lpPktSANAck = static_cast<PktSelectAccountNation*>(lpPktBase);
*UserID_Out = lpPktSANAck->m_dwUserID;
*cType = lpPktSANAck->m_cType;
*cAccountNation_Out = lpPktSANAck->m_cAccountNation;
return lpPktSANAck->GetError();
}
// WORK_LIST 2.3 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleNationChangeResult(PktBase* lpPktBase, unsigned long *UserID_Out,
unsigned long* aryGID_Out, unsigned long* aryFame_Out)
{
PktNationChangeResult* lpPktNCAck = static_cast<PktNationChangeResult*>(lpPktBase);
*UserID_Out = lpPktNCAck->m_dwUserID;
::memcpy(aryGID_Out, lpPktNCAck->m_dwGID, sizeof(unsigned long) * PktNationChangeResult::MAX_CHAR_VIEW);
::memcpy(aryFame_Out, lpPktNCAck->m_dwFame, sizeof(unsigned long) * PktNationChangeResult::MAX_CHAR_VIEW);
return lpPktNCAck->GetError();
}
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleUnifiedCharInfo(PktBase* lpPktBase,
unsigned char& cRestrictedPart1ToPart2Level,
unsigned char& cRemainCharTransferCount,
USER_INFO& userInfo,
UnifiedStoreInfo** lppUnifiedStoreInfo,
unsigned long& dwStoreInfoNum_Out,
UnifiedCharData** lppUnifiedCharData,
unsigned long& dwCharDataNum_Out)
{
PktUnifiedCharInfo* lpPktUnifiedCharInfo =
static_cast<PktUnifiedCharInfo*>(lpPktBase);
userInfo = lpPktUnifiedCharInfo->userInfo;
cRestrictedPart1ToPart2Level = lpPktUnifiedCharInfo->cRestrictedPart1ToPart2Level;
cRemainCharTransferCount = lpPktUnifiedCharInfo->cRemainCharTransferCount;
*lppUnifiedStoreInfo = lpPktUnifiedCharInfo->unifiedStoreInfo;
dwStoreInfoNum_Out = lpPktUnifiedCharInfo->cStoreInfoNum;
*lppUnifiedCharData = lpPktUnifiedCharInfo->unifiedCharData;
dwCharDataNum_Out = lpPktUnifiedCharInfo->cCharDataNum;
return lpPktBase->GetError();
}
// <20><><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> <20>ڵ尪<DAB5><E5B0AA> <20>޴´<DEB4>.
unsigned long ParsePacket::HandleUnifiedCharSelectAck(PktBase* lpPktBase)
{
return lpPktBase->GetError();
}

View File

@@ -0,0 +1,44 @@
#ifndef _PARSE_AUTH_SERVER_PACKET_H_
#define _PARSE_AUTH_SERVER_PACKET_H_
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktBase;
#include <ctime>
#include <DB/DBDefine.h>
namespace ParsePacket
{
// AuthServer
unsigned long HandleAuthAccount(PktBase* lpPktBase, unsigned long& UserID_Out,
unsigned char& cAgentServerType_Out, unsigned char& cFirstLogin_Out);
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned long HandleUserLogin(PktBase* lpPktBase, unsigned long *SessionID_Out, unsigned long *UserID_Out, CHAR_VIEW* CharRecode_Out,
sGuildData* CharGuildRecode_Out, unsigned char* cAccountNation, time_t* currentTime, int* nPlayTime_Out,
unsigned short* usAdminLevel_Out, unsigned char* cBillingType_Out, unsigned char* cBillingUser_Out, unsigned char* cLoginType_Out,
unsigned long* dwTabFlag);
unsigned long HandleCharSelect(PktBase* lpPktBase, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out);
unsigned long HandleCharCreate(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned long *SlotNum_Out, CHAR_VIEW* lpCharView_Out);
unsigned long HandleCharDelete(PktBase* lpPktBase, unsigned long *UserID_Out, unsigned long *SlotNum_Out);
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned long HandleSelectAccountNation(PktBase* lpPktBase, unsigned long *UserID_Out, unsigned char *cType, unsigned char *cAccountNation_Out);
// WORK_LIST 2.3 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleNationChangeResult(PktBase* lpPktBase, unsigned long *UserID_Out, unsigned long* aryGID_Out, unsigned long* aryFame_Out);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleUnifiedCharInfo(PktBase* lpPktBase,
unsigned char& cRestrictedPart1ToPart2Level, unsigned char& cRemainCharTransferCount,
USER_INFO& userInfo,
UnifiedStoreInfo** lppUnifiedStoreInfo, unsigned long& dwStoreInfoNum_Out,
UnifiedCharData** lppUnifiedCharData, unsigned long& dwCharDataNum_Out);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack - <20><><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> <20>ڵ尪<DAB5><E5B0AA> <20>޴´<DEB4>.
unsigned long HandleUnifiedCharSelectAck(PktBase* lpPktBase);
};
#endif

View File

@@ -0,0 +1,63 @@
#include "stdafx.h"
#include "ParseBGServer.h"
#include <windows.h>
#include <Network/Packet/PacketStruct/BGServerPacket.h>
#include "GMMemory.h"
// <20><> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>, Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharBGServerMapList(PktBase* lpPktBase, bool* bAll, unsigned char* cMapInfoNodeNum,
BGServerMapInfoNode* lpMapInfo)
{
LPPktBGServerMapList lpPktBGServerMapList = (LPPktBGServerMapList)lpPktBase;
*bAll = lpPktBGServerMapList->m_bAll;
*cMapInfoNodeNum = lpPktBGServerMapList->m_cMapInfoNodeNum;
BGServerMapInfoNode* lpMapInfoNode = reinterpret_cast<BGServerMapInfoNode*>(lpPktBGServerMapList + 1);
CopyMemory(lpMapInfo, lpMapInfoNode, sizeof(BGServerMapInfoNode) * lpPktBGServerMapList->m_cMapInfoNodeNum);
return lpPktBGServerMapList->GetError();
}
unsigned long ParsePacket::HandleCharBGServerResultList(PktBase* lpPktBase, bool* bAll, unsigned char* cResultInfoNodeNum,
BGServerResultInfoNode* lpResultInfo)
{
LPPktBGServerResultList lpPktBGServerResultList = (LPPktBGServerResultList)lpPktBase;
*bAll = lpPktBGServerResultList->m_bAll;
*cResultInfoNodeNum = lpPktBGServerResultList->m_cResultInfoNodeNum;
BGServerResultInfoNode* lpResultInfoNode = reinterpret_cast<BGServerResultInfoNode*>(lpPktBGServerResultList + 1);
CopyMemory(lpResultInfo, lpResultInfoNode, sizeof(BGServerResultInfoNode) * lpPktBGServerResultList->m_cResultInfoNodeNum);
return lpPktBGServerResultList->GetError();
}
unsigned long ParsePacket::HandleCharBGServerMoveZone(PktBase* lpPktBase, unsigned char* cZone, unsigned char* cMoveType)
{
LPPktBGServerMoveZone lpPktBGServerMoveZone = (LPPktBGServerMoveZone)lpPktBase;
*cZone = lpPktBGServerMoveZone->m_cZone;
*cMoveType = lpPktBGServerMoveZone->m_cMoveType;
return lpPktBGServerMoveZone->GetError();
}
unsigned long ParsePacket::HandleCharBGServerMileageChange(PktBase* lpPktBase, unsigned long* dwCID,
unsigned char* cGroup, unsigned char* cCmd,
unsigned long* dwGold, unsigned long* dwMileage)
{
PktBGServerMileageChange* lpPktBGServerMileageChange = static_cast<PktBGServerMileageChange *>(lpPktBase);
*dwCID = lpPktBGServerMileageChange->m_dwCID;
*cGroup = lpPktBGServerMileageChange->m_cGroup;
*cCmd = lpPktBGServerMileageChange->m_cCmd;
*dwGold = lpPktBGServerMileageChange->m_dwGold;
*dwMileage = lpPktBGServerMileageChange->m_dwMileage;
return lpPktBGServerMileageChange->GetError();
}

View File

@@ -0,0 +1,20 @@
#ifndef _GAMA_CLIENT_PARSE_BATTLEGROUND_SERVER_PACKET_H_
#define _GAMA_CLIENT_PARSE_BATTLEGROUND_SERVER_PACKET_H_
#include <DB/DBDefine.h>
#include <Network/Packet/PacketStruct/BGServerPacket.h>
// forward decl.
struct PktBase;
namespace ParsePacket
{
// BATTLEGROUND SERVER
unsigned long HandleCharBGServerMapList(PktBase* lpPktBase, bool* bAll, unsigned char* cMapInfoNodeNum, BGServerMapInfoNode* lpMapInfo);
unsigned long HandleCharBGServerResultList(PktBase* lpPktBase, bool* bAll, unsigned char* cResultInfoNodeNum, BGServerResultInfoNode* lpResultInfo);
unsigned long HandleCharBGServerMoveZone(PktBase* lpPktBase, unsigned char* cZone, unsigned char* cMoveType);
unsigned long HandleCharBGServerMileageChange(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cGroup, unsigned char* cCmd, unsigned long* dwGold, unsigned long* dwMileage);
};
#endif

View File

@@ -0,0 +1,433 @@
#include "stdafx.h"
#include "ParseCastle.h"
#include <Network/Packet/PacketStruct/CastlePacket.h>
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharCreateCastle(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cNation, unsigned char* cZone,
unsigned char* cNameID, unsigned char* cUpgradeStep, unsigned char* cInvincibleCount,
unsigned short* wTotalSiegeCount, unsigned long* dwTotalTaxMoney, float* fPosX,
float* fPosY, float* fPosZ, unsigned short* wItemID, unsigned char* cItemNum,
CastleRight* castleRight, CastleTaxInfo* castleTaxInfo)
{
LPPktCreateCastle lpPktCreateCastle = (LPPktCreateCastle)lpPktBase;
*dwCastleID = lpPktCreateCastle->m_dwCastleID;
*cNation = lpPktCreateCastle->m_cNation;
*cZone = lpPktCreateCastle->m_cZone;
*cNameID = lpPktCreateCastle->m_cNameID;
*cUpgradeStep = lpPktCreateCastle->m_cUpgradeStep;
*cInvincibleCount = lpPktCreateCastle->m_cInvincibleCount;
*wTotalSiegeCount = lpPktCreateCastle->m_wTotalSiegeCount;
*dwTotalTaxMoney = lpPktCreateCastle->m_dwTotalTaxMoney;
*fPosX = lpPktCreateCastle->m_fPosX;
*fPosY = lpPktCreateCastle->m_fPosY;
*fPosZ = lpPktCreateCastle->m_fPosZ;
*wItemID = lpPktCreateCastle->m_wItemID;
*castleRight = lpPktCreateCastle->m_CastleRight;
for (int i=0; i<Castle::EMBLEM_UPGRADE_JEWEL_POS_NUM; ++i)
{
cItemNum[ i ] = lpPktCreateCastle->m_cItemNum[ i ] ;
}
for (int i=0; i<Castle::MAX_TAX_TYPE; ++i)
{
castleTaxInfo[ i ] = lpPktCreateCastle->m_CastleTax[ i ];
}
return lpPktCreateCastle->GetError();
}
unsigned long ParsePacket::HandleCharCreateCamp(PktBase* lpPktBase, unsigned long* dwActorCID, unsigned long* dwCID, unsigned long* dwCampID,
unsigned long* dwGID, unsigned long* dwHP, unsigned short* wObjectType, unsigned char* cState,
unsigned char* cSubState, unsigned char* cUpgradeStep, unsigned char* cNation, CampRight* campRight,
float* fPointX, float* fPointY, float* fPointZ, unsigned char* cMaterial)
{
LPPktCreateCamp lpPktCreateCamp = (LPPktCreateCamp)lpPktBase;
*dwActorCID = lpPktCreateCamp->m_dwActorCID;
*dwCID = lpPktCreateCamp->m_dwCID;
*dwCampID = lpPktCreateCamp->m_dwCampID;
*dwGID = lpPktCreateCamp->m_dwGID;
*dwHP = lpPktCreateCamp->m_dwHP;
*wObjectType = lpPktCreateCamp->m_wObjectType;
*cState = lpPktCreateCamp->m_cState;
*cSubState = lpPktCreateCamp->m_cSubState;
*cUpgradeStep = lpPktCreateCamp->m_cUpgradeStep;
*cNation = lpPktCreateCamp->m_cNation;
*campRight = lpPktCreateCamp->m_CampRight;
*fPointX = lpPktCreateCamp->m_Pos.fPointX;
*fPointY = lpPktCreateCamp->m_Pos.fPointY;
*fPointZ = lpPktCreateCamp->m_Pos.fPointZ;
*cMaterial = lpPktCreateCamp->m_cMaterial;
return lpPktCreateCamp->GetError();
}
unsigned long ParsePacket::HandleCharCreateSiegeArms(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwOwnerID, unsigned char* cNation,
unsigned long* dwHP, unsigned short* wObjectType, unsigned char* cState, unsigned char* cUpgradeStep,
float* fPointX, float* fPointY, float* fPointZ)
{
LPPktCreateSiegeArms lpPktCreateSiegeArms = (LPPktCreateSiegeArms)lpPktBase;
*dwCID = lpPktCreateSiegeArms->m_dwCID;
*dwOwnerID = lpPktCreateSiegeArms->m_dwOwnerID;
*cNation = lpPktCreateSiegeArms->m_cNation;
*dwHP = lpPktCreateSiegeArms->m_dwHP;
*wObjectType = lpPktCreateSiegeArms->m_wObjectType;
*cState = lpPktCreateSiegeArms->m_cState;
*cUpgradeStep = lpPktCreateSiegeArms->m_cUpgradeStep;
*fPointX = lpPktCreateSiegeArms->m_Pos.fPointX;
*fPointY = lpPktCreateSiegeArms->m_Pos.fPointY;
*fPointZ = lpPktCreateSiegeArms->m_Pos.fPointZ;
return lpPktCreateSiegeArms->GetError();
}
unsigned long ParsePacket::HandleCharCastleCmd(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned long* dwCastleObjectID, unsigned long* dwValue1,
unsigned long* dwValue2, unsigned char* cState, unsigned char* cSubCmd)
{
LPPktCastleCmd lpPktCastleCmd = (LPPktCastleCmd)lpPktBase;
*dwCastleID = lpPktCastleCmd->m_dwCastleID;
*dwCastleObjectID = lpPktCastleCmd->m_dwCastleObjectID;
*dwValue1 = lpPktCastleCmd->m_dwValue1;
*dwValue2 = lpPktCastleCmd->m_dwValue2;
*cState = lpPktCastleCmd->m_cState;
*cSubCmd = lpPktCastleCmd->m_cSubCmd;
return lpPktCastleCmd->GetError();
}
unsigned long ParsePacket::HandleCharCampCmd(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID,
unsigned char* cState, unsigned long* dwValue1, unsigned long* dwValue2,
unsigned char* cSubCmd)
{
LPPktCampCmd lpPktCampCmd = (LPPktCampCmd)lpPktBase;
*dwCID = lpPktCampCmd->m_dwCID;
*dwCampID = lpPktCampCmd->m_dwCampID;
*cState = lpPktCampCmd->m_cState;
*dwValue1 = lpPktCampCmd->m_dwValue1;
*dwValue2 = lpPktCampCmd->m_dwValue2;
*cSubCmd = lpPktCampCmd->m_cSubCmd;
return lpPktCampCmd->GetError();
}
unsigned long ParsePacket::HandleCharSiegeArmsCmd(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwArmsID,
unsigned long* dwValue, unsigned char* cState, unsigned char* cSubCmd)
{
LPPktSiegeArmsCmd lpPktSACmd = (LPPktSiegeArmsCmd)lpPktBase;
*dwCID = lpPktSACmd->m_dwCID;
*dwArmsID = lpPktSACmd->m_dwArmsID;
*dwValue = lpPktSACmd->m_dwValue;
*cState = lpPktSACmd->m_cState;
*cSubCmd = lpPktSACmd->m_cSubCmd;
return lpPktSACmd->GetError();
}
unsigned long ParsePacket::HandleCharCastleRight(PktBase* lpPktBase, unsigned long* dwCastleID, CastleRight* castleRight)
{
LPPktCastleRight lpPktCR = (LPPktCastleRight)lpPktBase;
*dwCastleID = lpPktCR->m_dwCastleID;
::memcpy(castleRight, &lpPktCR->m_CastleRight, sizeof(CastleRight));
return lpPktCR->GetError();
}
unsigned long ParsePacket::HandleCharCampRight(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, CampRight* campRight)
{
LPPktCampRight lpPktCR = (LPPktCampRight)lpPktBase;
*dwCampID = lpPktCR->m_dwCampID;
*dwCID = lpPktCR->m_dwCID ;
::memcpy(campRight, &lpPktCR->m_CampRight, sizeof(CampRight));
return lpPktCR->GetError();
}
unsigned long ParsePacket::HandleCharSiegeBroadCast(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwOwnerID,
unsigned long* dwGID, unsigned short* wObjectType, unsigned long* dwNowHP,
unsigned long* dwMaxHP, unsigned char* cState, unsigned char* cSubState,
unsigned char* cUpgradeStep, unsigned char* cUpgradeType, float* fDefaultDir,
unsigned long* ppdwRidersID, CNetworkPos* netPos)
{
// CASTLE_TODO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20><>Ŷ <20>ڵ鷯 <20>Լ<EFBFBD>
LPPktSiegeBroadCast lpPktSBC = (LPPktSiegeBroadCast)lpPktBase;
*dwCID = lpPktSBC->m_dwCID;
*dwOwnerID = lpPktSBC->m_dwOwnerID;
*dwGID = lpPktSBC->m_dwGID;
*wObjectType = lpPktSBC->m_wObjectType;
*dwNowHP = lpPktSBC->m_dwNowHP;
*dwMaxHP = lpPktSBC->m_dwMaxHP;
*cState = lpPktSBC->m_cState;
*cSubState = lpPktSBC->m_cSubState;
*cUpgradeStep = lpPktSBC->m_cUpgradeStep;
*cUpgradeType = lpPktSBC->m_cUpgradeType;
*fDefaultDir = lpPktSBC->m_fDefaultDir;
for (int i=0; i<Siege::AIRSHIP_RIDER_NUM; ++i)
{
ppdwRidersID[i] = lpPktSBC->m_dwRiderID[i];
}
*netPos = lpPktSBC->m_NetworkPos;
return lpPktSBC->GetError();
}
unsigned long ParsePacket::HandleCharSiegeBroadCast2nd(PktBase* lpPktBase, unsigned long* dwObjectCount,
PktSiegeBroadCast* siegeObjectArray)
{
// CASTLE_TODO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20><>Ŷ <20>ڵ鷯 <20>Լ<EFBFBD>
LPPktSiegeBroadCast2nd lpPktSBC = (LPPktSiegeBroadCast2nd)lpPktBase;
int nDataLen = lpPktSBC->GetLen() - sizeof(PktSiegeBroadCast2nd);
int nParseLen = 0;
int nIndex = 0;
if(0 < nDataLen)
{
PktSiegeBroadCast* szData = reinterpret_cast<PktSiegeBroadCast*>(lpPktSBC + 1);
while (nParseLen < nDataLen)
{
siegeObjectArray[nIndex] = *szData;
nParseLen += sizeof(PktSiegeBroadCast);
++szData;
++nIndex;
}
}
*dwObjectCount = static_cast<unsigned long>(nIndex);
return lpPktSBC->GetError();
}
unsigned long ParsePacket::HandleCharNewSiegeBroadCast(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cBroadCastType)
{
LPPktNewSiegeBroadCast lpPktNSBC = (LPPktNewSiegeBroadCast)lpPktBase;
*dwCID = lpPktNSBC->m_dwCID;
*cBroadCastType = lpPktNSBC->m_cType;
return lpPktNSBC->GetError();
}
unsigned long ParsePacket::HandleCharGameTimeInfo(PktBase* lpPktBase, GuildTimeInfo* lpGuildTimeInfo, RealmTimeInfo* lpRealmTimeInfo,
SiegeTimeInfo* lpSiegeTimeInfo, EnterTimeInfo* lpEnterTimeInfo, unsigned char* cType, unsigned char* cCastleNum,
CastleSiegeInfo* lpCastleSiegeInfo)
{
LPPktGameTimeInfo lpPktGTI = (LPPktGameTimeInfo)lpPktBase;
CastleSiegeInfo* lpCastleInfo = (CastleSiegeInfo*)(lpPktGTI + 1);
::memcpy(lpGuildTimeInfo, &lpPktGTI->m_GuildTimeInfo, sizeof(GuildTimeInfo));
::memcpy(lpRealmTimeInfo, &lpPktGTI->m_RealmTimeInfo, sizeof(GuildTimeInfo));
::memcpy(lpSiegeTimeInfo, &lpPktGTI->m_SiegeTimeInfo, sizeof(GuildTimeInfo));
::memcpy(lpEnterTimeInfo, &lpPktGTI->m_EnterTimeInfo, sizeof(GuildTimeInfo));
*cType = lpPktGTI->m_cType;
*cCastleNum = lpPktGTI->m_cCastleNum;
for (int i=0; i<lpPktGTI->m_cCastleNum; ++i)
{
::memcpy(&lpCastleSiegeInfo[i], lpCastleInfo, sizeof(CastleSiegeInfo));
++lpCastleInfo;
}
return lpPktGTI->GetError();
}
unsigned long ParsePacket::HandleCharStealthInfo(PktBase* lpPktBase, bool* bUseStealth)
{
LPPktStealthInfo lpPktSI = (LPPktStealthInfo)lpPktBase;
*bUseStealth = lpPktSI->m_bUseStealth;
return lpPktSI->GetError();
}
unsigned long ParsePacket::HandleCharCastleSiegeCount(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cSiegeCount,
unsigned char* cInvincibleCount, unsigned short* wTotalSiegeCount)
{
LPPktCastleSiegeCount lpPktCSC = (LPPktCastleSiegeCount)lpPktBase;
*dwCastleID = lpPktCSC->m_dwCastleID;
*cSiegeCount = lpPktCSC->m_cSiegeCount;
*cInvincibleCount = lpPktCSC->m_cInvincibleCount;
*wTotalSiegeCount = lpPktCSC->m_wTotalSiegeCount;
return lpPktCSC->GetError();
}
unsigned long ParsePacket::HandleCharCastleTaxMove(PktBase* lpPktBase, unsigned long* dwCastleID,
unsigned long* dwMoveTempMoney, unsigned long* dwResultTaxMoney)
{
LPPktCastleTaxMove lpPktCTM = (LPPktCastleTaxMove)lpPktBase;
*dwCastleID = lpPktCTM->m_dwCastleID;
for (int i=0; i<Castle::MAX_TAX_TYPE; ++i)
{
dwMoveTempMoney[ i ] = lpPktCTM->m_dwMoveTempMoney[ i ];
dwResultTaxMoney[ i ] = lpPktCTM->m_dwResultTaxMoney[ i ];
}
return lpPktCTM->GetError();
}
unsigned long ParsePacket::HandleCharCampMessage(PktBase* lpPktBase, char* szGuildName, char* szMasterName, char* szPCName, unsigned char* cMsgCmd,
unsigned long* dwCampID, unsigned char* cZone, unsigned char* cRemainTime, unsigned char* cNation,
PktCampMessage::sRight* Right, bool* bNotify, int* nValue1, int* nValue2, unsigned char* cTimeChk)
{
LPPktCampMessage lpPktCM = (LPPktCampMessage)lpPktBase;
::strcpy(szGuildName, lpPktCM->m_szGuildName);
::strcpy(szMasterName, lpPktCM->m_szMasterName);
::strcpy(szPCName, lpPktCM->m_szPCName);
*cMsgCmd = lpPktCM->m_cMsgCmd;
*dwCampID = lpPktCM->m_dwCampID;
*cZone = lpPktCM->m_cZone;
*cRemainTime = lpPktCM->m_cRemainTime;
*cNation = lpPktCM->m_cNation;
*Right = lpPktCM->m_Right;
*bNotify = lpPktCM->m_bNotify;
*nValue1 = lpPktCM->m_nValue1;
*nValue2 = lpPktCM->m_nValue2;
*cTimeChk = lpPktCM->m_cTimeChk;
return lpPktCM->GetError();
}
// ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long ParsePacket::HandleCharMiningCampMineralInfo(PktBase* lpPktBase, unsigned long* dwCampID, unsigned char* cState, unsigned long* dwRemainTime,
unsigned char* cMineralType, unsigned char* cNum, CampMineralInfo* lpMineralList)
{
LPPktMiningCampMineralInfo lpPktMI = (LPPktMiningCampMineralInfo)lpPktBase;
CampMineralInfo* lpInfo = reinterpret_cast<CampMineralInfo*>(lpPktMI + 1);
*dwCampID = lpPktMI->m_dwCampID;
*cState = lpPktMI->m_cState;
*dwRemainTime = lpPktMI->m_dwRemainTime;
*cMineralType = lpPktMI->m_cMineralType;
*cNum = lpPktMI->m_cNum;
if ( lpMineralList )
{
for (int i=0; i<*cNum; ++i, ++lpMineralList, ++lpInfo)
{
lpMineralList->m_wMineralID = lpInfo->m_wMineralID;
lpMineralList->m_wAmount = lpInfo->m_wAmount;
}
}
return lpPktMI->GetError();
}
// <20><> <20><>¡<EFBFBD><C2A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharTakeCastleJewel(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCastleID, unsigned char* cSubCmd,
unsigned short* wItemID, unsigned char* cIndex, unsigned char* cNum, Item::ItemPos* pos)
{
LPPktTakeCastleJewel lpPktTCJ = (LPPktTakeCastleJewel)lpPktBase;
*dwCID = lpPktTCJ->m_dwCID;
*dwCastleID = lpPktTCJ->m_dwCastleID;
*cSubCmd = lpPktTCJ->m_cSubCmd;
*wItemID = lpPktTCJ->m_wItemID;
*cIndex = lpPktTCJ->m_cIndex;
*cNum = lpPktTCJ->m_cNum;
*pos = lpPktTCJ->m_Pos;
return lpPktTCJ->GetError();
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharTakeMaterial(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, unsigned char* cSubCmd,
unsigned char* cNum, Item::ItemPos* pos)
{
LPPktTakeMaterial lpPktTM = (LPPktTakeMaterial)lpPktBase;
*dwCID = lpPktTM->m_dwCID;
*dwCampID = lpPktTM->m_dwCampID;
*cSubCmd = lpPktTM->m_cSubCmd;
*cNum = lpPktTM->m_cNum;
*pos = lpPktTM->m_Pos;
return lpPktTM->GetError();
}
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long ParsePacket::HandleCharCastleMineralInfo(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cNum, CastleMineral* lpMineralList)
{
LPPktCastleMineralInfo lpPktCMI = (LPPktCastleMineralInfo)lpPktBase;
CastleMineral* lpInfo = reinterpret_cast<CastleMineral*>(lpPktCMI + 1);
*dwCastleID = lpPktCMI->m_dwCastleID;
*cNum = lpPktCMI->m_cNum;
if ( lpMineralList )
{
for (int i=0; i<*cNum; ++i, ++lpMineralList, ++lpInfo)
{
lpMineralList->m_wMineralID = lpInfo->m_wMineralID;
lpMineralList->m_wAmount = lpInfo->m_wAmount;
}
}
return lpPktCMI->GetError();
}
unsigned long ParsePacket::HandleCharWarOnOff(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cFlag, unsigned char* cType)
{
PktWarOnOff* lpPktWarOnOff = (PktWarOnOff*)(lpPktBase);
*dwCID = lpPktWarOnOff->m_dwCID;
*cFlag = lpPktWarOnOff->m_cFlag;
*cType = lpPktWarOnOff->m_cType;
return lpPktWarOnOff->GetError();
}
unsigned long ParsePacket::HandleCharRealmPoint(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cRealmPoint, unsigned char* cType)
{
PktRealmPoint* lpPktRealmPoint = (PktRealmPoint*)(lpPktBase);
*dwCID = lpPktRealmPoint->m_dwCID;
*cRealmPoint = lpPktRealmPoint->m_cRealmPoint;
*cType = lpPktRealmPoint->m_cType;
return lpPktRealmPoint->GetError();
}
unsigned long ParsePacket::HandleCharRealmStatueDisplayInfo(PktBase* lpPktBase, unsigned short* wSubCmd, unsigned long* dwRealmStatueNum,
StatueDisplayInfo* lpDisplayInfo)
{
LPPktStatueCmd lpPktStatueCmd = (LPPktStatueCmd)lpPktBase;
StatueDisplayInfo* lpInfo = reinterpret_cast<StatueDisplayInfo*>(lpPktStatueCmd + 1);
*wSubCmd = lpPktStatueCmd->m_wSubCmd;
*dwRealmStatueNum = lpPktStatueCmd->m_dwValue;
if ( lpDisplayInfo )
{
for (unsigned long i=0; i<*dwRealmStatueNum; ++i, ++lpDisplayInfo, ++lpInfo)
{
*lpDisplayInfo = *lpInfo;
}
}
return lpPktStatueCmd->GetError();
}

View File

@@ -0,0 +1,104 @@
#ifndef _GAMA_CLIENT_PARSE_CASTLE_PACKET_H_
#define _GAMA_CLIENT_PARSE_CASTLE_PACKET_H_
#include <Network/Packet/PacketStruct/CastlePacket.h>
#include <Network/Packet/PacketStruct/CharMovePacket.h>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktBase;
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharCreateCastle(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cNation, unsigned char* cZone,
unsigned char* cNameID, unsigned char* cUpgradeStep, unsigned char* cInvincibleCount,
unsigned short* wTotalSiegeCount, unsigned long* dwTotalTaxMoney, float* fPosX,
float* fPosY, float* fPosZ, unsigned short* wItemID, unsigned char* cItemNum,
CastleRight* castleRight, CastleTaxInfo* castleTaxInfo);
unsigned long HandleCharCreateCamp(PktBase* lpPktBase, unsigned long* dwActorCID, unsigned long* dwCID, unsigned long* dwCampID,
unsigned long* dwGID, unsigned long* dwHP, unsigned short* wObjectType, unsigned char* cState,
unsigned char* cSubState, unsigned char* cUpgradeStep, unsigned char* cNation, CampRight* campRight,
float* fPointX, float* fPointY, float* fPointZ, unsigned char* cMaterial);
unsigned long HandleCharCreateSiegeArms(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwOwnerID, unsigned char* cNation,
unsigned long* dwHP, unsigned short* wObjectType, unsigned char* cState, unsigned char* cUpgradeStep,
float* fPointX, float* fPointY, float* fPointZ);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharCastleCmd(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned long* dwCastleObjectID, unsigned long* dwValue1,
unsigned long* dwValue2, unsigned char* cState, unsigned char* cSubCmd);
unsigned long HandleCharCampCmd(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, unsigned char* cState,
unsigned long* dwValue1, unsigned long* dwValue2, unsigned char* cSubCmd);
unsigned long HandleCharSiegeArmsCmd(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwArmsID,
unsigned long* dwValue, unsigned char* cState, unsigned char* cSubCmd);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharCastleRight(PktBase* lpPktBase, unsigned long* dwCastleID, CastleRight* castleRight);
unsigned long HandleCharCampRight(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, CampRight* campRight);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20><>Ŷ
unsigned long HandleCharSiegeBroadCast(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwOwnerID, unsigned long* dwGID,
unsigned short* wObjectType, unsigned long* dwNowHP, unsigned long* dwMaxHP,
unsigned char* cState, unsigned char* cSubState, unsigned char* cUpgradeStep,
unsigned char* cUpgradeType, float* fDefaultDir, unsigned long* ppdwRidersID, CNetworkPos* netPos);
unsigned long HandleCharSiegeBroadCast2nd(PktBase* lpPktBase, unsigned long* dwObjectCount, PktSiegeBroadCast* siegeObjectArray);
unsigned long HandleCharNewSiegeBroadCast(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cBroadCastType);
// <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><>Ŷ
unsigned long HandleCharGameTimeInfo(PktBase* lpPktBase, GuildTimeInfo* lpGuildTimeInfo, RealmTimeInfo* lpRealmTimeInfo, SiegeTimeInfo* lpSiegeTimeInfo, EnterTimeInfo* lpEnterTimeInfo,
unsigned char* cType, unsigned char* cCastleNum, CastleSiegeInfo* lpCastleSiegeInfo);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EBB0A1> <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharStealthInfo(PktBase* lpPktBase, bool* bUseStealth);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
unsigned long HandleCharCastleSiegeCount(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cSiegeCount,
unsigned char* cInvincibleCount, unsigned short* wTotalSiegeCount);
// <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleCharCastleTaxMove(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned long* dwMoveTempMoney, unsigned long* dwResultTaxMoney);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD> <20><>Ŷ
unsigned long HandleCharCampMessage(PktBase* lpPktBase, char* szGuildName, char* szMasterName, char* szPCName, unsigned char* cMsgCmd,
unsigned long* dwCampID, unsigned char* cZone, unsigned char* cRemainTime, unsigned char* cNation,
PktCampMessage::sRight* Right, bool* bNotify, int* nValue1, int* nValue2, unsigned char* cTimeChk);
// ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharMiningCampMineralInfo(PktBase* lpPktBase, unsigned long* dwCampID, unsigned char* cState, unsigned long* dwRemainTime,
unsigned char* cMineralType, unsigned char* cNum, CampMineralInfo* lpMineralList);
// <20><> <20><>¡<EFBFBD><C2A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long HandleCharTakeCastleJewel(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCastleID, unsigned char* cSubCmd,
unsigned short* wItemID, unsigned char* cIndex, unsigned char* cNum, Item::ItemPos* pos);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long HandleCharTakeMaterial(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwCampID, unsigned char* cSubCmd,
unsigned char* cNum, Item::ItemPos* pos);
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD> <20><>Ŷ
unsigned long HandleCharCastleMineralInfo(PktBase* lpPktBase, unsigned long* dwCastleID, unsigned char* cNum, CastleMineral* lpMineralList);
// <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, Ż<><C5BB>.
unsigned long HandleCharWarOnOff(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cFlag, unsigned char* cType);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ.
unsigned long HandleCharRealmPoint(PktBase* lpPktBase, unsigned long* dwCID, unsigned char* cRealmPoint, unsigned char* cType);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5> <20><><EFBFBD><EFBFBD>
unsigned long HandleCharRealmStatueDisplayInfo(PktBase* lpPktBase, unsigned short* wSubCmd, unsigned long* dwRealmStatueNum,
StatueDisplayInfo* lpDisplayInfo);
};
#endif

View File

@@ -0,0 +1,104 @@
#include "stdafx.h"
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include "ParseCharInfo.h"
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharLevelUp(PktBase* lpPktBase, unsigned long *CharID,
unsigned char *Level, ChState* lpChState)
{
PktLU* lpLUPt = static_cast<PktLU *>(lpPktBase);
*CharID = lpLUPt->m_dwCharID;
*Level = lpLUPt->m_cLevel;
*lpChState = lpLUPt->m_State;
return lpLUPt->GetError();
}
unsigned long ParsePacket::HandleCharLevelUpInfo(PktBase* lpPktBase, unsigned long *CharID, unsigned char *Level)
{
PktLUInfo* lpLUInfoPt = static_cast<PktLUInfo *>(lpPktBase);
*CharID = lpLUInfoPt->m_dwCharID;
*Level = lpLUInfoPt->m_cLevel;
return lpLUInfoPt->GetError();
}
unsigned long ParsePacket::HandleCharIncreasePoint(PktBase* lpPktBase, unsigned long *CharID, ChState* lpChState)
{
PktIPAck* lpIPAckPt = static_cast<PktIPAck *>(lpPktBase);
*CharID = lpIPAckPt->m_dwCharID;
*lpChState = lpIPAckPt->m_State;
return lpIPAckPt->GetError();
}
unsigned long ParsePacket::HandleCharClassUpgrade(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *cClassID, unsigned char *cLevel,
ChState* lpState, unsigned long *dwFame)
{
PktCUAck* lpCUAckPt = static_cast<PktCUAck *>(lpPktBase);
*dwCharID = lpCUAckPt->m_dwCharID;
*cClassID = lpCUAckPt->m_cClass;
*cLevel = lpCUAckPt->m_cLevel;
*lpState = lpCUAckPt->m_State;
*dwFame = lpCUAckPt->m_dwFame;
return lpCUAckPt->GetError();
}
unsigned long ParsePacket::HandleCharHPRegen(PktBase* lpPktBase, unsigned long *CharID,
unsigned short *HP, unsigned short *MP)
{
PktHP* lpHPPt = static_cast<PktHP *>(lpPktBase);
*CharID = lpHPPt->m_dwCharID;
*HP = lpHPPt->m_sHP;
*MP = lpHPPt->m_sMP;
return lpHPPt->GetError();
}
unsigned long ParsePacket::HandleCharQuickSlotMove(PktBase* lpPktBase, TakeType* lpTakeType)
{
PktQSM* lpQSMPt = static_cast<PktQSM *>(lpPktBase);
*lpTakeType = lpQSMPt->m_TakeType;
return lpQSMPt->GetError();
}
unsigned long ParsePacket::HandleCharSwitchEQ(PktBase* lpPktBase, unsigned char *Type, unsigned char *Select)
{
PktSwEQ* lpSwHPt = static_cast<PktSwEQ *>(lpPktBase);
*Type = lpSwHPt->m_cType;
*Select = lpSwHPt->m_cSelect;
return lpSwHPt->GetError();
}
unsigned long ParsePacket::HandleCharEliteBonus(PktBase* lpPktBase, char *cEliteBonus)
{
PktEB* lpEBPt = static_cast<PktEB *>(lpPktBase);
*cEliteBonus = lpEBPt->m_cEliteBonus;
return lpEBPt->GetError();
}

View File

@@ -0,0 +1,26 @@
#ifndef _GAMA_CLIENT_PARSE_CHAR_INFO_H_
#define _GAMA_CLIENT_PARSE_CHAR_INFO_H_
#include <Network/Packet/PacketStruct/CharStatusPacketStruct.h>
#include <Network/Packet/PacketStruct/CharItemPacketStruct.h>
// forward decl.
struct PktBase;
namespace ParsePacket
{
//ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleCharLevelUp(PktBase* lpPktBase, unsigned long *CharID, unsigned char *Level, LPChState lpChState);
unsigned long HandleCharIncreasePoint(PktBase* lpPktBase, unsigned long *CharID, ChState* lpChState);
unsigned long HandleCharClassUpgrade(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *cClassID, unsigned char *cLevel, ChState* lpState, unsigned long *dwFame);
unsigned long HandleCharHPRegen(PktBase* lpPktBase, unsigned long *CharID, unsigned short *HP, unsigned short *MP);
unsigned long HandleCharQuickSlotMove(PktBase* lpPktBase, TakeType* lpTakeType);
unsigned long HandleCharSwitchEQ(PktBase* lpPktBase, unsigned char *Type, unsigned char *Select);
unsigned long HandleCharEliteBonus(PktBase* lpPktBase, char *cEliteBonus);
// TODO : REMOVE UDP Packets
unsigned long HandleCharLevelUpInfo(PktBase* lpPktBase, unsigned long *CharID, unsigned char *Level);
};
#endif

View File

@@ -0,0 +1,520 @@
#include "stdafx.h"
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Network/Packet/PacketStruct/FriendPacket.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include <Network/Packet/PacketStruct/PartyPacket.h>
#include "ParseCommunity.h"
#include "GMMemory.h"
//--------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharCreateGuild(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID,
unsigned char *cInclination, char* szGuildName)
{
PktCreateGuild* lpCGPt = static_cast<PktCreateGuild *>(lpPktBase);
*dwCID = lpCGPt->m_dwCID;
*dwGID = lpCGPt->m_dwGID;
*cInclination = lpCGPt->m_cInclination;
strncpy(szGuildName, lpCGPt->m_szGuildName, Guild::MAX_GUILD_NAME_LEN);
return lpCGPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildCmd(PktBase* lpPktBase, unsigned long *dwGID, unsigned long *dwSenderID, unsigned long *dwReferenceID,
char* szGuildName, char* szSenderName, unsigned short *wCmd)
{
PktGuildCmd* lpGCPt = static_cast<PktGuildCmd *>(lpPktBase);
*dwGID = lpGCPt->m_dwGID;
*dwSenderID = lpGCPt->m_dwSenderID;
*dwReferenceID = lpGCPt->m_dwReferenceID;
strncpy(szGuildName, lpGCPt->m_szGuildName, Guild::MAX_GUILD_NAME_LEN);
strncpy(szSenderName, lpGCPt->m_szSenderName, Guild::MAX_MEMBER_NAME_LEN);
*wCmd = lpGCPt->m_wCmd;
return lpGCPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildMark(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwGID,
char* szMark, unsigned long *dwGold)
{
PktGuildMark* lpGMPt = static_cast<PktGuildMark *>(lpPktBase);
*dwCID = lpGMPt->m_dwCID;
*dwGID = lpGMPt->m_dwGID;
::memcpy(szMark, lpGMPt->m_szMark, Guild::MAX_MARK_SIZE);
*dwGold = lpGMPt->m_dwGold;
return lpGMPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildLevel(PktBase* lpPktBase, unsigned long *dwGID, unsigned char *cLevel, unsigned long *dwGold)
{
PktGuildLevel* lpGLPt = static_cast<PktGuildLevel *>(lpPktBase);
*dwGID = lpGLPt->m_dwUID;
*cLevel = lpGLPt->m_cLevel;
*dwGold = lpGLPt->m_dwGold;
return lpGLPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildRelation(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID,
unsigned long *dwTargetGID, unsigned long *dwValue, unsigned char *cSubCmd,
char* szGuildName, char* szTempGuildName)
{
PktGuildRelation* lpGRPt = static_cast<PktGuildRelation *>(lpPktBase);
*dwCID = lpGRPt->m_dwCID;
*dwGID = lpGRPt->m_dwGID;
*dwTargetGID = lpGRPt->m_dwTargetGID;
*dwValue = lpGRPt->m_dwValue;
*cSubCmd = lpGRPt->m_cSubCmd;
strncpy(szGuildName, lpGRPt->m_szGuildName, Guild::MAX_GUILD_NAME_LEN);
strncpy(szTempGuildName, lpGRPt->m_szTempGuildName, Guild::MAX_GUILD_NAME_LEN);
return lpGRPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildInclination(PktBase* lpPktBase, unsigned long *dwGID, unsigned char *cInclination)
{
PktGuildInclination* lpGIPt = static_cast<PktGuildInclination *>(lpPktBase);
*dwGID = lpGIPt->m_dwUID;
*cInclination = lpGIPt->m_cInclination;
return lpGIPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildList(PktBase* lpPktBase, unsigned long *dwCID,
unsigned char *cSortCmd, unsigned char *cPage,
unsigned char *cSmallNodeNum, GuildSmallInfoNode* lpSmallNode,
unsigned char *cLargeNodeNum, GuildLargeInfoNode* lpLargeNode)
{
PktGuildList* lpGLPt = static_cast<PktGuildList *>(lpPktBase);
*dwCID = lpGLPt->m_dwCID;
*cSortCmd = lpGLPt->m_cSortCmd;
*cPage = lpGLPt->m_cPage;
*cSmallNodeNum = lpGLPt->m_cSmallNodeNum;
*cLargeNodeNum = lpGLPt->m_cLargeNodeNum;
GuildSmallInfoNode* lpRecvSmallNode = reinterpret_cast<GuildSmallInfoNode *>(lpGLPt + 1);
GuildLargeInfoNode* lpRecvLargeNode = reinterpret_cast<GuildLargeInfoNode *>(lpRecvSmallNode + lpGLPt->m_cSmallNodeNum);
CopyMemory(lpSmallNode, lpRecvSmallNode, sizeof(GuildSmallInfoNode) * lpGLPt->m_cSmallNodeNum);
CopyMemory(lpLargeNode, lpRecvLargeNode, sizeof(GuildLargeInfoNode) * lpGLPt->m_cLargeNodeNum);
return lpGLPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildRight(PktBase* lpPktBase, unsigned long *dwGID, GuildRight *guildRight)
{
PktGuildRight* lpGRPt = static_cast<PktGuildRight *>(lpPktBase);
*dwGID = lpGRPt->m_dwUID;
*guildRight = lpGRPt->m_GuildRight;
return lpGRPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildMemberList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char* cMemberType,
unsigned char *cSortCmd, unsigned char *cPage, unsigned char *cTotalMemberNum,
unsigned char *cNodeNum, GuildMemberInfoNode* lpMemberNode)
{
PktGuildMemberList* lpGMLPt = static_cast<PktGuildMemberList *>(lpPktBase);
*dwCID = lpGMLPt->m_dwCID;
*cMemberType = lpGMLPt->m_cMemberType;
*cSortCmd = lpGMLPt->m_cSortCmd;
*cPage = lpGMLPt->m_cPage;
*cTotalMemberNum = lpGMLPt->m_cTotalMemberNum;
*cNodeNum = lpGMLPt->m_cNodeNum;
GuildMemberInfoNode* lpRecvNode = reinterpret_cast<GuildMemberInfoNode *>(lpGMLPt + 1);
CopyMemory(lpMemberNode, lpRecvNode, sizeof(GuildMemberInfoNode) * lpGMLPt->m_cNodeNum);
return lpGMLPt->GetError();
}
unsigned long ParsePacket::HandleCharMyGuildInfo(PktBase* lpPktBase, unsigned long *dwGold,
GuildRight *guildRight, unsigned char *cTitle)
{
PktMyGuildInfo* lpMGIPt = static_cast<PktMyGuildInfo *>(lpPktBase);
*dwGold = lpMGIPt->m_dwGold;
*guildRight = lpMGIPt->m_GuildRight;
*cTitle = lpMGIPt->m_cTitle;
return lpMGIPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildSafe(PktBase* lpPktBase, unsigned long *dwCID, char* szCharName,
unsigned long *dwSafeGold, unsigned long *dwCharGold, unsigned char *cCmd)
{
PktGuildSafeAck* lpGSAckPt = static_cast<PktGuildSafeAck *>(lpPktBase);
*dwCID = lpGSAckPt->m_dwCID;
*dwSafeGold = lpGSAckPt->m_dwSafeGold;
*dwCharGold = lpGSAckPt->m_dwCharGold;
*cCmd = lpGSAckPt->m_cCmd;
strncpy(szCharName, lpGSAckPt->m_szCharName, Guild::MAX_MEMBER_NAME_LEN);
return lpGSAckPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildHostilityList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char *cCurrentPage,
unsigned char *cPageState, unsigned char* cNodeNum, unsigned short* wTotalItemNum,
char* szHostility, char* szAlert, GuildHostilityInfoNode* lpHostilityNode)
{
PktGuildHostilityList* lpGHLPt = static_cast<PktGuildHostilityList *>(lpPktBase);
*dwCID = lpGHLPt->m_dwCID;
*cCurrentPage = lpGHLPt->m_cCurrentPage;
*cPageState = lpGHLPt->m_cPageState;
*cNodeNum = lpGHLPt->m_cNodeNum;
*wTotalItemNum = lpGHLPt->m_wTotalItemNum;
strncpy(szHostility, lpGHLPt->m_szHostility, Guild::MAX_GUILD_NAME_LEN);
strncpy(szAlert, lpGHLPt->m_szAlert, Guild::MAX_GUILD_NAME_LEN);
GuildHostilityInfoNode* lpRecvNode = reinterpret_cast<GuildHostilityInfoNode *>(lpGHLPt + 1);
CopyMemory(lpHostilityNode, lpRecvNode, sizeof(GuildHostilityInfoNode) * lpGHLPt->m_cNodeNum);
return lpGHLPt->GetError();
}
unsigned long ParsePacket::HandleCharGuildRelationInfo(PktBase* lpPktBase, unsigned long *dwCID,
unsigned long *dwGID, unsigned short *wNodeNum,
GuildRelationInfoNode* lpRelationNode )
{
PktGuildRelationInfo* lpGRIPt = static_cast<PktGuildRelationInfo *>(lpPktBase);
*dwCID = lpGRIPt->m_dwCID;
*dwGID = lpGRIPt->m_dwGID;
*wNodeNum = lpGRIPt->m_wNodeNum;
GuildRelationInfoNode* lpRecvNode = reinterpret_cast<GuildRelationInfoNode* >( lpGRIPt + 1 );
CopyMemory(lpRelationNode, lpRecvNode, sizeof(GuildRelationInfoNode) * lpGRIPt->m_wNodeNum);
return lpGRIPt->GetError();
}
//--------------------------------------------------------------------------------------------------------------
// <20><>Ƽ
unsigned long ParsePacket::HandleCharPartyInfo(PktBase* lpPktBase, PARTY_EX* lpParty)
{
PktPI* lpPIPt = static_cast<PktPI *>(lpPktBase);
*lpParty = lpPIPt->m_Party;
return lpPIPt->GetError();
}
unsigned long ParsePacket::HandleCharPartyCmd(PktBase* lpPktBase, AddressInfo* SenderAddress,
char *SenderName, unsigned long *dwSenderID, unsigned long *dwReferenceID,
unsigned long *dwPartyID, unsigned short *Cmd)
{
PktPCAck* lpPCAckPt = static_cast<PktPCAck *>(lpPktBase);
strncpy(SenderName, lpPCAckPt->m_strSenderName, 16);
*SenderAddress = lpPCAckPt->m_SenderAddressInfo;
*dwSenderID = lpPCAckPt->m_dwSenderID;
*dwReferenceID = lpPCAckPt->m_dwReferenceID;
*dwPartyID = lpPCAckPt->m_dwPartyID;
*Cmd = lpPCAckPt->m_cCmd;
return lpPCAckPt->GetError();
}
unsigned long ParsePacket::HandleCharPartyCmdInfo(PktBase* lpPktBase, unsigned long *dwMemberID,
unsigned long *dwPartyID, unsigned short *Cmd)
{
PktPCInfo* lpPCInfoPt = static_cast<PktPCInfo *>(lpPktBase);
*dwMemberID = lpPCInfoPt->m_dwMemberID;
*dwPartyID = lpPCInfoPt->m_dwPartyID;
*Cmd = lpPCInfoPt->m_cCmd;
return lpPCInfoPt->GetError();
}
unsigned long ParsePacket::HandleCharPartyMemData(PktBase* lpPktBase, unsigned long& dwPartyID, unsigned long& dwSenderID, unsigned long& dwGID,
unsigned long& dwServerID, unsigned short& wClass, char& cLevel,
const char*& szSenderName, unsigned short& wCmd)
{
if (sizeof(PktPMD) != lpPktBase->GetLen())
{
return 1;
}
PktPMD* lpPktPMD = reinterpret_cast<PktPMD*>(lpPktBase);
dwPartyID = lpPktPMD->m_dwPartyID;
dwSenderID = lpPktPMD->m_dwSenderID;
dwGID = lpPktPMD->m_dwGID;
cLevel = lpPktPMD->m_cLevel;
wClass = lpPktPMD->m_wClass;
dwServerID = lpPktPMD->m_dwServerID;
szSenderName = lpPktPMD->m_strSenderName;
wCmd = lpPktPMD->m_wCmd;
return lpPktBase->GetError();
}
inline void COPY_AND_ADVANCE_SRC(void* dst, const char*& src, size_t size)
{
memcpy(dst, src, size); src += size;
}
unsigned long ParsePacket::HandleCharPartyMemInfo(PktBase* lpPktBase, PartyMemberData* lpPartyMemberData,
unsigned int& nMemberDataNum)
{
memset(lpPartyMemberData, 0, sizeof(PartyMemberData) * nMemberDataNum);
const char* szDataPos = reinterpret_cast<char*>(lpPktBase + 1);
const char* szDataEnd = szDataPos + ((sizeof(PktBase) < lpPktBase->GetLen()) ? lpPktBase->GetLen() - sizeof(PktBase) : 0);
PartyMemberData* lpPMDPos = lpPartyMemberData;
PartyMemberData* lpPMDEnd = lpPartyMemberData + nMemberDataNum;
for(nMemberDataNum = 0 ;
szDataPos + sizeof(unsigned long) + sizeof(unsigned short) < szDataEnd && lpPMDPos < lpPMDEnd;
++lpPMDPos)
{
COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwCID, szDataPos, sizeof(unsigned long));
COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usDataChanged, szDataPos, sizeof(unsigned short));
unsigned short usDataChanged = lpPMDPos->m_usDataChanged;
// ------------------------------------------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> ġ<><C4A1><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
if (usDataChanged & PartyMemberData::CHANGED_XPOS) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_fXPos, szDataPos, sizeof(float)); }
if (usDataChanged & PartyMemberData::CHANGED_YPOS) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_fYPos, szDataPos, sizeof(float)); }
if (usDataChanged & PartyMemberData::CHANGED_ZPOS) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_fZPos, szDataPos, sizeof(float)); }
if (usDataChanged & PartyMemberData::CHANGED_MAX_HP) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usMaxHP, szDataPos, sizeof(unsigned short)); }
if (usDataChanged & PartyMemberData::CHANGED_MAX_MP) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usMaxMP, szDataPos, sizeof(unsigned short)); }
if (usDataChanged & PartyMemberData::CHANGED_CUR_HP) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usCurHP, szDataPos, sizeof(unsigned short)); }
if (usDataChanged & PartyMemberData::CHANGED_CUR_MP) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_usCurMP, szDataPos, sizeof(unsigned short)); }
if (usDataChanged & PartyMemberData::CHANGED_LEVEL) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_cLevel, szDataPos, sizeof(unsigned char)); }
if (usDataChanged & PartyMemberData::CHANGED_CLASS) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_cClass, szDataPos, sizeof(unsigned char)); }
if (usDataChanged & PartyMemberData::CHANGED_ENCHANT_INFO_0) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwEnchantInfo[0], szDataPos, sizeof(unsigned long)); }
if (usDataChanged & PartyMemberData::CHANGED_ENCHANT_INFO_1) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwEnchantInfo[1], szDataPos, sizeof(unsigned long)); }
if (usDataChanged & PartyMemberData::CHANGED_ENCHANT_INFO_2) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwEnchantInfo[2], szDataPos, sizeof(unsigned long)); }
if (usDataChanged & PartyMemberData::CHANGED_ENCHANT_INFO_3) { COPY_AND_ADVANCE_SRC(&lpPMDPos->m_dwEnchantInfo[3], szDataPos, sizeof(unsigned long)); }
// ------------------------------------------------------------------------------------------------------------------------------------------------------
}
nMemberDataNum = static_cast<unsigned int>(lpPMDPos - lpPartyMemberData);
return lpPktBase->GetError();
}
unsigned long ParsePacket::HandleCharPartyFind(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *MemberFindPartyNum,
unsigned char *PartyFindMemberNum,
MemberFindParty **lppMemberFindParty,
PartyFindMember **lppPartyFindMember)
{
PktPFAck* lpPFAckPt = static_cast<PktPFAck *>(lpPktBase);
*dwCharID = lpPFAckPt->m_dwCharID;
*MemberFindPartyNum = lpPFAckPt->m_cMemberFindPartyNum;
*PartyFindMemberNum = lpPFAckPt->m_cPartyFindMemberNum;
*lppMemberFindParty = (MemberFindParty*)(reinterpret_cast<char*>(lpPFAckPt + 1));
*lppPartyFindMember = (PartyFindMember*)(reinterpret_cast<char*>(lpPFAckPt + 1) +
(*MemberFindPartyNum * sizeof(MemberFindParty)));
return lpPFAckPt->GetError();
}
//--------------------------------------------------------------------------------------------------------------
// ģ<><C4A3>
unsigned long ParsePacket::HandleCharFriendDB(PktBase* lpPktBase, unsigned char* cDataType,
char **ppFriendListData, unsigned long *dwDataSize)
{
PktFriendDB* lpPktFriendDB = static_cast<PktFriendDB *>(lpPktBase);
switch(lpPktFriendDB->m_cCmd)
{
case PktFriendDB::FRIEND_LIST:
case PktFriendDB::BAN_LIST:
*cDataType = lpPktFriendDB->m_cCmd;
*dwDataSize = lpPktFriendDB->m_dwData;
*ppFriendListData = reinterpret_cast<char*>(lpPktFriendDB + 1);
break;
default:
return 1;
}
return lpPktFriendDB->GetError();
}
unsigned long ParsePacket::HandleCharFriendAck(PktBase* lpPktBase, unsigned char* cCmd, unsigned long *dwCID, char **ppszName,
unsigned long* dwGID, unsigned short* wClass, char* cLevel, unsigned long* dwServerID)
{
PktFriendAck* lpPktFriendAck = static_cast<PktFriendAck *>(lpPktBase);
*cCmd = lpPktFriendAck->m_cCmd;
*dwCID = lpPktFriendAck->m_dwCID;
*dwGID = lpPktFriendAck->m_dwGID;
*wClass = lpPktFriendAck->m_wClass;
*cLevel = lpPktFriendAck->m_cLevel;
*ppszName = lpPktFriendAck->m_szName;
*dwServerID = lpPktFriendAck->m_dwServerID;
return lpPktFriendAck->GetError();
}
unsigned long ParsePacket::HandleCharFriendRegistered(PktBase* lpPktBase, unsigned long* dwCID, char* szName)
{
PktFriendAddReq* lpPktFriendAddRequest = static_cast<PktFriendAddReq *>(lpPktBase);
memcpy(szName, lpPktFriendAddRequest->m_szName, PktFriendAddReq::MAX_NAME);
*dwCID = lpPktFriendAddRequest->m_dwCID;
return lpPktFriendAddRequest->GetError();
}
//--------------------------------------------------------------------------------------------------------------
// <20><>Ÿ
unsigned long ParsePacket::HandleCharChat(PktBase* lpPktBase, unsigned long& dwSenderCID, unsigned short *Cmd, unsigned short *Lang, char *Message)
{
PktChat* lpPktChat = static_cast<PktChat*>(lpPktBase);
int nLen = lpPktChat->GetLen();
*Cmd = lpPktChat->m_cCmd;
*Lang = lpPktChat->m_usLang;
dwSenderCID = lpPktChat->m_dwSenderCID;
char* szMessagePos = reinterpret_cast<char*>(lpPktChat + 1);
char* szMessageEnd = reinterpret_cast<char*>(lpPktChat) + nLen;
if (0 != lpPktChat->m_cNum)
{
if (szMessagePos + sizeof(char) * CHAR_INFOST::MAX_NAME_LEN * lpPktChat->m_cNum < szMessageEnd)
{
szMessagePos += sizeof(char) * CHAR_INFOST::MAX_NAME_LEN * lpPktChat->m_cNum;
}
}
std::copy(szMessagePos, szMessageEnd, Message);
Message[szMessageEnd - szMessagePos - 1] = 0;
return lpPktChat->GetError();
}
unsigned long ParsePacket::HandleCharWhisper(PktBase* lpPktBase, char *SenderName,
char *RecverName, char *Message)
{
PktWh* lpWhPt = static_cast<PktWh *>(lpPktBase);
strncpy(SenderName, lpWhPt->m_SenderName, 16);
strncpy(RecverName, lpWhPt->m_RecverName, 16);
int nLen = lpWhPt->GetLen();
if (sizeof(PktWh) < nLen && nLen <= PktWh::PktWhMaxSize + sizeof(PktWh))
{
memcpy(Message, reinterpret_cast<char*>(lpWhPt + 1), nLen - sizeof(PktWh));
Message[nLen - sizeof(PktWh) - 1] = NULL;
}
return lpWhPt->GetError();
}
unsigned long ParsePacket::HandleCharChatBan(PktBase* lpPktBase, bool& bChatBan)
{
PktChatBan* lpCBPtAck = static_cast<PktChatBan *>(lpPktBase);
bChatBan = (0 == lpCBPtAck->m_dwMinutes) ? false : true;
return lpCBPtAck->GetError();
}
unsigned long ParsePacket::HandleCharAuthorizePanel(PktBase* lpPktBase, unsigned long *dwCasterID,
char *szCasterName, unsigned char *cCmd)
{
PktAPAck* lpAPPtAck = static_cast<PktAPAck *>(lpPktBase);
*dwCasterID = lpAPPtAck->m_dwCasterID;
*cCmd = lpAPPtAck->m_cCmd;
strncpy(szCasterName, lpAPPtAck->m_szCasterName, CHAR_INFOST::MAX_NAME_LEN);
return lpAPPtAck->GetError();
}
unsigned long ParsePacket::HandleCharFameInfo(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *cOtherNation, unsigned char *cOtherClass,
unsigned long *dwFame, unsigned long *dwMileage,
unsigned char *RankingByRace, unsigned char *RankingByClass,
unsigned char *cCmd, char *szWinCharName, char *szLoseCharName)
{
PktFIAck* lpFIAckPt = static_cast<PktFIAck *>(lpPktBase);
*dwCharID = lpFIAckPt->m_dwCharID;
*cOtherNation = (unsigned char)lpFIAckPt->m_cOtherNation;
*cOtherClass = lpFIAckPt->m_cOtherClass;
*dwFame = lpFIAckPt->m_dwFame;
*dwMileage = lpFIAckPt->m_dwMileage;
*RankingByRace = lpFIAckPt->m_cRankingByRace;
*RankingByClass = lpFIAckPt->m_cRankingByClass;
*cCmd = lpFIAckPt->m_cCmd;
strncpy(szWinCharName, lpFIAckPt->m_szWinCharName, PktFIAck::MAX_NAME_LEN);
strncpy(szLoseCharName, lpFIAckPt->m_szLoseCharName, PktFIAck::MAX_NAME_LEN);
return lpFIAckPt->GetError();
}
unsigned long ParsePacket::HandleCharRankingInfo(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *cClass, unsigned char *cPage,
unsigned short *wNum, RankingNode **lppRankingNode)
{
PktRankingInfo* lpRankingInfo = static_cast<PktRankingInfo *>(lpPktBase);
*dwCharID = lpRankingInfo->m_dwCharID;
*cClass = lpRankingInfo->m_cClass;
*cPage = lpRankingInfo->m_cPage;
*wNum = lpRankingInfo->m_wNum;
*lppRankingNode = reinterpret_cast<RankingNode *>(lpRankingInfo + 1);
return lpRankingInfo->GetError();
}

View File

@@ -0,0 +1,66 @@
#ifndef _GAMA_CLIENT_PARSE_COMMUNITY_PACKET_H_
#define _GAMA_CLIENT_PARSE_COMMUNITY_PACKET_H_
#include <winsock2.h>
#include <windows.h>
#include <DB/DBDefine.h>
#include <Network/Packet/PacketStruct/AddressPacket.h>
#include <Network/Packet/PacketStruct/CharCommunityPacketStruct.h>
#include <Network/Packet/PacketStruct/RankingPacket.h>
struct GuildSmallInfoNode;
struct GuildLargeInfoNode;
struct GuildRight;
struct GuildMemberInfoNode;
struct PartyMemberData;
struct GuildHostilityInfoNode;
struct GuildRelationInfoNode;
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD>
unsigned long HandleCharCreateGuild(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID, unsigned char *cInclination, char* szGuildName);
unsigned long HandleCharGuildCmd(PktBase* lpPktBase, unsigned long *dwGID, unsigned long *dwSenderID, unsigned long *dwReferenceID, char* szGuildName, char* szSenderName, unsigned short *wCmd);
unsigned long HandleCharGuildMark(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwGID, char* szMark, unsigned long* dwGold);
unsigned long HandleCharGuildLevel(PktBase* lpPktBase, unsigned long *dwGID, unsigned char *cLevel, unsigned long *dwGold);
unsigned long HandleCharGuildRelation(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID, unsigned long *dwTargetGID, unsigned long *dwValue, unsigned char *cSubCmd, char* szGuildName, char* szTempGuildName);
unsigned long HandleCharGuildInclination(PktBase* lpPktBase, unsigned long *dwGID, unsigned char *cInclination);
unsigned long HandleCharGuildList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char *cSortCmd, unsigned char *cPage, unsigned char *cSmallNodeNum, GuildSmallInfoNode* lpSmallNode, unsigned char *cLargeNodeNum, GuildLargeInfoNode* lpLargeNode);
unsigned long HandleCharGuildRight(PktBase* lpPktBase, unsigned long *dwGID, GuildRight *guildRight);
unsigned long HandleCharGuildMemberList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char* cMemberType, unsigned char *cSortCmd, unsigned char *cPage, unsigned char *cTotalMemberNum, unsigned char *cNodeNum, GuildMemberInfoNode* lpMemberNode);
unsigned long HandleCharMyGuildInfo(PktBase* lpPktBase, unsigned long *dwGold, GuildRight *guildRight, unsigned char *cTitle);
unsigned long HandleCharGuildSafe(PktBase* lpPktBase, unsigned long *dwCID, char* szCharName, unsigned long *dwSafeGold, unsigned long *dwCharGold, unsigned char *cCmd);
unsigned long HandleCharGuildHostilityList(PktBase* lpPktBase, unsigned long *dwCID, unsigned char *cCurrentPage, unsigned char *cPageState, unsigned char* cNodeNum, unsigned short* wTotalItemNum, char* szHostility, char* szAlert, GuildHostilityInfoNode* lpHostilityNode);
unsigned long HandleCharGuildRelationInfo(PktBase* lpPktBase, unsigned long *dwCID, unsigned long *dwGID, unsigned short *wNodeNum, GuildRelationInfoNode* lpRelationNode ) ;
// <20><>Ƽ
unsigned long HandleCharPartyInfo(PktBase* lpPktBase, PARTY_EX* lpParty);
unsigned long HandleCharPartyCmd(PktBase* lpPktBase, AddressInfo* SenderAddress, char *SenderName, unsigned long *dwSenderID, unsigned long *dwReferenceID, unsigned long *dwPartyID, unsigned short *Cmd);
unsigned long HandleCharPartyCmdInfo(PktBase* lpPktBase, unsigned long *dwMemberID, unsigned long *dwPartyID, unsigned short *Cmd);
unsigned long HandleCharPartyFind(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *MemberFindPartyNum, unsigned char *PartyFindMemberNum, MemberFindParty** lppMemberFindParty, PartyFindMember** lppPartyFindMember);
unsigned long HandleCharPartyMemData(PktBase* lpPktBase, unsigned long& dwPartyID, unsigned long& dwSenderID, unsigned long& dwGID, unsigned long& dwServerID, unsigned short& wClass, char& cLevel, const char*& szSenderName, unsigned short& wCmd);
unsigned long HandleCharPartyMemInfo(PktBase* lpPktBase, PartyMemberData* lpPartyMemberData, unsigned int& nMemberDataNum);
// ģ<><C4A3>
unsigned long HandleCharFriendDB(PktBase* lpPktBase, unsigned char* cDataType, char **ppFriendListData, unsigned long *dwDataSize);
unsigned long HandleCharFriendRegistered(PktBase* lpPktBase, unsigned long* dwCID, char* szName);
unsigned long HandleCharFriendAck(PktBase* lpPktBase, unsigned char* cCmd, unsigned long *dwCID, char **ppszName, unsigned long* dwGID,
unsigned short* wClass, char* cLevel, unsigned long* dwServerID);
// ä<><C3A4>
unsigned long HandleCharChat(PktBase* lpPktBase, unsigned long& dwSenderCID, unsigned short *Cmd, unsigned short *Lang, char *Message);
unsigned long HandleCharWhisper(PktBase* lpPktBase, char *SenderName, char *RecverName, char *Message);
unsigned long HandleCharChatBan(PktBase* lpPktBase, bool& bChatBan);
// <20><>Ÿ Ŀ<>´<EFBFBD>Ƽ
unsigned long HandleCharAuthorizePanel(PktBase* lpPktBase, unsigned long *dwCasterID, char *szCasterName, unsigned char *cCmd);
unsigned long HandleCharFameInfo(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *cOtherNation, unsigned char *cOtherClass, unsigned long *dwFame, unsigned long *dwMileage, unsigned char *RankingByRace, unsigned char *RankingByClass, unsigned char *cCmd, char *szWinCharName, char *szLoseCharName);
unsigned long HandleCharRankingInfo(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *cClass, unsigned char *cPage, unsigned short *wNum, RankingNode **lppRankingNode);
};
#endif

View File

@@ -0,0 +1,115 @@
#include "stdafx.h"
#include "ParseEtc.h"
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharConfigPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include <Network/Packet/PacketStruct/CharAdminPacket.h>
#include "GMMemory.h"
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long ParsePacket::HandleCharBillingTimeoutInfo(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char* cRemainMinute, unsigned char* cBillingType)
{
PktBTN* lpPktBTN = reinterpret_cast<PktBTN *>(lpPktBase);
*dwCharID = lpPktBTN->m_dwCharID;
*cRemainMinute = lpPktBTN->m_cRemainMinute;
*cBillingType = lpPktBTN->m_cBillingType;
return lpPktBTN->GetError();
}
unsigned long ParsePacket::HandleCharBillingTimeCheckNotify(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char* cRemainMinute, unsigned char* cBillingType)
{
PktBTN* lpPktBTN = reinterpret_cast<PktBTN *>(lpPktBase);
*dwCharID = lpPktBTN->m_dwCharID;
*cRemainMinute = lpPktBTN->m_cRemainMinute;
*cBillingType = lpPktBTN->m_cBillingType;
return lpPktBTN->GetError();
}
unsigned long ParsePacket::HandleCharBindPos(PktBase* lpPktBase, unsigned long *NPCID_Out,
unsigned char *Cmd_Out, POS* lpPos_Out, char *Zone_Out)
{
PktBP* lpBPPt = reinterpret_cast<PktBP *>(lpPktBase);
*lpPos_Out = lpBPPt->m_Pos;
*NPCID_Out = lpBPPt->m_dwNPCID;
*Cmd_Out = lpBPPt->m_cCmd;
*Zone_Out = lpBPPt->m_cZone;
return lpBPPt->GetError();
}
unsigned long ParsePacket::HandleControlOption(PktBase* lpPktBase, unsigned long *CharID_Out, RejectOption* Reject_Out)
{
PktCOp* lpCOpPt = reinterpret_cast<PktCOp *>(lpPktBase);
*CharID_Out = lpCOpPt->m_dwCharID;
*Reject_Out = lpCOpPt->m_RejectOption;
return lpCOpPt->GetError();
}
unsigned long ParsePacket::HandleCharStateRedistribution(PktBase* lpPktBase, ChState* lpChState_Out, SKILL* lpSkill_Out)
{
PktSRAck* lpSRPtAck = reinterpret_cast<PktSRAck *>(lpPktBase);
*lpChState_Out = lpSRPtAck->m_State;
*lpSkill_Out = lpSRPtAck->m_Skill;
return lpSRPtAck->GetError();
}
unsigned long ParsePacket::HandleCharStatusRetrain(PktBase* lpPktBase, ChState* lpChState_Out, SKILL* lpSkill_Out,
Item::ItemPos* lpIndex_Out, unsigned long *Gold_Out)
{
PktSRTAck* lpSRTPtAck = reinterpret_cast<PktSRTAck *>(lpPktBase);
*lpChState_Out = lpSRTPtAck->m_State;
*lpSkill_Out = lpSRTPtAck->m_Skill;
*lpIndex_Out = lpSRTPtAck->m_ItemPos;
*Gold_Out = lpSRTPtAck->m_dwGold;
return lpSRTPtAck->GetError();
}
unsigned long ParsePacket::HandleCharLotteryResult(PktBase* lpPktBase, unsigned long *CharID_Out,
Item::ItemPos* lpIndex_Out, unsigned long *dwSize_Out,
char **lppBuffer_Out)
{
PktLotteryResult* lpPktLR = reinterpret_cast<PktLotteryResult *>(lpPktBase);
*CharID_Out = lpPktLR->m_dwCharID;
*lpIndex_Out = lpPktLR->m_itemPos;
*dwSize_Out = lpPktLR->m_dwSize;
*lppBuffer_Out = reinterpret_cast<char*>(lpPktLR + 1);
return lpPktLR->GetError();
}
unsigned long ParsePacket::HandleCharAdmin(PktBase* lpPktBase)
{
PktAdmin* lpPktAdmin = reinterpret_cast<PktAdmin *>(lpPktBase);
return lpPktAdmin->GetError();
}
unsigned long ParsePacket::HandleCharNameChange(PktBase* lpPktBase, char*& szChangedName,
unsigned char* cNameChangeCount)
{
PktCharNameChange* lpCharNameChange =
reinterpret_cast<PktCharNameChange*>(lpPktBase);
*cNameChangeCount = lpCharNameChange->m_cNameChangeCount;
szChangedName = lpCharNameChange->m_szCharName;
return lpPktBase->GetError();
}

View File

@@ -0,0 +1,28 @@
#ifndef _GAMA_CLIENT_PARSE_ETC_PACKET_H_
#define _GAMA_CLIENT_PARSE_ETC_PACKET_H_
#include <DB/DBDefine.h>
#include <Item/ItemStructure.h>
#include <Network/Packet/PacketStruct/CharStatusPacketStruct.h>
#include <Network/Packet/PacketStruct/CharConfigPacketStruct.h>
// forward decl.
struct PktBase;
namespace ParsePacket
{
// ETC
unsigned long HandleCharBillingTimeoutInfo(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char* cRemainMinute, unsigned char* cBillingType);
unsigned long HandleCharBillingTimeCheckNotify(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char* cRemainMinute, unsigned char* cBillingType);
unsigned long HandleCharStateRedistribution(PktBase* lpPktBase, ChState* lpChState_Out, SKILL* lpSkill_Out);
unsigned long HandleCharStatusRetrain(PktBase* lpPktBase, ChState* lpChState_Out, SKILL* lpSkill_Out, Item::ItemPos* lpIndex_Out, unsigned long *Gold_Out);
unsigned long HandleControlOption(PktBase* lpPktBase, unsigned long *CharID_Out, RejectOption* Reject_Out);
unsigned long HandleCharBindPos(PktBase* lpPktBase, unsigned long *NPCID_Out, unsigned char *Cmd_Out, POS* lpPos_Out, char *Zone_Out);
unsigned long HandleCharLotteryResult(PktBase* lpPktBase, unsigned long *CharID_Out, Item::ItemPos* lpIndex_Out, unsigned long *dwSize_Out, char **lppBuffer_Out);
unsigned long HandleCharAdmin(PktBase* lpPktBase);
unsigned long HandleCharNameChange(PktBase* lpPktBase, char*& szChangedName, unsigned char* cNameChangeCount);
};
#endif

View File

@@ -0,0 +1,254 @@
#include "stdafx.h"
#include "ParseFight.h"
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharAttack(PktBase* lpPktBase, unsigned long *CharID_Out, AtType* lpAtType_Out, unsigned short *HP_Out, unsigned short *MP_Out,
unsigned short* MPHeal_Out, char *Judge_Out, unsigned char *DefenserNum_Out, DefenserNode** lppNode_Out)
{
PktAtAck* lpAtAckPt = static_cast<PktAtAck*>(lpPktBase);
*CharID_Out = lpAtAckPt->m_dwCharID;
*lpAtType_Out = lpAtAckPt->m_AtType;
*HP_Out = lpAtAckPt->m_wHP;
*MP_Out = lpAtAckPt->m_wMP;
*MPHeal_Out = lpAtAckPt->m_wMPHeal;
*Judge_Out = lpAtAckPt->m_cJudge;
*DefenserNum_Out = lpAtAckPt->m_cDefenserNum;
*lppNode_Out = reinterpret_cast<DefenserNode*>(lpAtAckPt + 1);
return lpAtAckPt->GetError();
}
unsigned long ParsePacket::HandleCharAttacked(PktBase* lpPktBase, unsigned long *AtCharID_Out, unsigned long *MyID_Out,
AtType *AtType_Out, POS* lpAtPos_Out, float *AtDir_Out, unsigned short *Judge_Out,
unsigned short *MyHP_Out, unsigned short *MyMP_Out, unsigned short* MyMPHeal_Out)
{
PktAted* lpAtedPt = static_cast<PktAted*>(lpPktBase);
*AtCharID_Out = lpAtedPt->m_dwCharID;
*MyID_Out = lpAtedPt->m_dwMyID;
*AtType_Out = lpAtedPt->m_AtType;
*lpAtPos_Out = lpAtedPt->m_Postion;
*AtDir_Out = lpAtedPt->m_fDir;
*Judge_Out = lpAtedPt->m_cJudge;
*MyHP_Out = lpAtedPt->m_wMyHP;
*MyMP_Out = lpAtedPt->m_wMyMP;
*MyMPHeal_Out = lpAtedPt->m_wMyMPHeal;
return lpAtedPt->GetError();
}
unsigned long ParsePacket::HandleCharAttackInfo(PktBase* lpPktBase, unsigned long *CharID_Out,
AtType* lpAtType_Out, unsigned char *DefenserNum_Out,
DefenserNode **lppNode_Out)
{
PktAtInfo* lpPktAtInfo = static_cast<PktAtInfo*>(lpPktBase);
*CharID_Out = lpPktAtInfo->m_dwCharID;
*lpAtType_Out = lpPktAtInfo->m_AtType;
*DefenserNum_Out = lpPktAtInfo->m_cDefenserNum;
*lppNode_Out = reinterpret_cast<DefenserNode*>(lpPktAtInfo + 1);
return lpPktAtInfo->GetError();
}
unsigned long ParsePacket::HandleCharEquipDurability(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *cIndex, unsigned char *cValue)
{
PktEquipDurability* lpEDPt = static_cast<PktEquipDurability*>(lpPktBase);
*dwCharID = lpEDPt->m_dwCharID;
*cIndex = lpEDPt->m_cIndex;
*cValue = lpEDPt->m_cValue;
return lpEDPt->GetError();
}
unsigned long ParsePacket::HandleCharRespawn(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *HP_Out, unsigned short *MP_Out,
POS* lpPos_Out, __int64 *Exp_Out,
unsigned long *dwGold_Out)
{
PktRsAck* lpPktRsAck = static_cast<PktRsAck*>(lpPktBase);
*CharID_Out = lpPktRsAck->m_dwCharID;
*HP_Out = lpPktRsAck->m_wHP;
*MP_Out = lpPktRsAck->m_wMP;
*lpPos_Out = lpPktRsAck->m_Position;
*Exp_Out = lpPktRsAck->m_dlExp;
*dwGold_Out = lpPktRsAck->m_dwGold;
return lpPktRsAck->GetError();
}
unsigned long ParsePacket::HandleCharRespawnInfo(PktBase* lpPktBase, unsigned long* CharID_Out, unsigned char* cRsAreaNum, unsigned short* wSize, RespawnArea* pRespawnArea)
{
PktRsInfoAck* lpPktRsInfoAck = static_cast<PktRsInfoAck*>(lpPktBase);
*CharID_Out = lpPktRsInfoAck->m_dwCharID;
*cRsAreaNum = lpPktRsInfoAck->m_cRsAreaNum;
*wSize = lpPktRsInfoAck->m_wSize;
RespawnArea* lpRespawnAreaNode = reinterpret_cast<RespawnArea *>(lpPktRsInfoAck + 1);
for (int i=0; i<lpPktRsInfoAck->m_cRsAreaNum; ++i)
{
CopyMemory(&pRespawnArea[i], lpRespawnAreaNode, sizeof(RespawnArea));
++lpRespawnAreaNode;
}
return lpPktRsInfoAck->GetError();
}
unsigned long ParsePacket::HandleCharRespawnAreaInfo(PktBase* lpPktBase, unsigned long* CharID_Out, unsigned long* dwTownID,
unsigned short* wWaitOrder, unsigned char* cHour, unsigned char* cMin,
unsigned char* cSec, bool* bCount)
{
PktRsAreaInfoAck* lpPktRsAreaInfoAck = static_cast<PktRsAreaInfoAck*>(lpPktBase);
*CharID_Out = lpPktRsAreaInfoAck->m_dwCharID;
*dwTownID = lpPktRsAreaInfoAck->m_dwTownID;
*wWaitOrder = lpPktRsAreaInfoAck->m_nWaitOrder; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*cHour = lpPktRsAreaInfoAck->m_cRemainHour; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (<28><>)
*cMin = lpPktRsAreaInfoAck->m_cRemainMin; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (<28><>)
*cSec = lpPktRsAreaInfoAck->m_cRemainSec; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (<28><>)
*bCount = lpPktRsAreaInfoAck->m_bCount; // <20>ð<EFBFBD> ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD>ۿ<EFBFBD><DBBF><EFBFBD>
return lpPktRsAreaInfoAck->GetError();
}
unsigned long ParsePacket::HandleCharBattleGroundRespawn(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *wTurn_Out, unsigned short *wWaitNum_Out,
unsigned short *wLeftTime_Out, unsigned short *wHumanNum_Out,
unsigned short *wAkhanNum_Out)
{
PktBGRsAck* lpPktBGRAck = static_cast<PktBGRsAck*>(lpPktBase);
*CharID_Out = lpPktBGRAck->m_dwCharID;
*wTurn_Out = lpPktBGRAck->m_wTurn;
*wWaitNum_Out = lpPktBGRAck->m_wWaitNum;
*wLeftTime_Out = lpPktBGRAck->m_wLeftTime;
*wHumanNum_Out = lpPktBGRAck->m_wHumanNum;
*wAkhanNum_Out = lpPktBGRAck->m_wAkhanNum;
return lpPktBGRAck->GetError();
}
unsigned long ParsePacket::HandleCharRespawnWaitQueue(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *wWaitNum_Out)
{
PktRsWaitQueueAck* lpRsWQAckPt = static_cast<PktRsWaitQueueAck*>(lpPktBase);
*CharID_Out = lpRsWQAckPt->m_dwCharID;
::memcpy(wWaitNum_Out, lpRsWQAckPt->m_wWaitNum,
PktRsWaitQueueAck::MAX_POINT_NUM_PER_RACE);
return lpRsWQAckPt->GetError();
}
unsigned long ParsePacket::HandleCharDuelCmd(PktBase* lpPktBase, unsigned long *SenderID_Out,
unsigned long *RecverID_Out, unsigned char *Cmd_Out)
{
PktDuC* lpDuCPt = static_cast<PktDuC*>(lpPktBase);
*SenderID_Out = lpDuCPt->m_dwSenderID;
*RecverID_Out = lpDuCPt->m_dwRecverID;
*Cmd_Out = lpDuCPt->m_cCmd;
return lpDuCPt->GetError();
}
unsigned long ParsePacket::HandleCharTeamBattleInfo(PktBase* lpPktBase, unsigned long *CharID_Out,
char *ChallengerName_Out, unsigned char *Cmd_Out,
unsigned char *MemberNum_Out, unsigned long *MemberID_Out,
unsigned char *MemberLevel_Out)
{
PktTBInfo* lpPktTBInfo = static_cast<PktTBInfo*>(lpPktBase);
*CharID_Out = lpPktTBInfo->m_dwCharID;
*Cmd_Out = lpPktTBInfo->m_cCmd;
*MemberNum_Out = lpPktTBInfo->m_cMemberNum;
::strncpy(ChallengerName_Out, lpPktTBInfo->m_strChallengerName, CHAR_INFOST::MAX_NAME_LEN);
for (int nIndex = 0; nIndex < *MemberNum_Out; nIndex++)
{
MemberID_Out[nIndex] = *(reinterpret_cast<unsigned long *>(
reinterpret_cast<char*>(lpPktTBInfo + 1) +
nIndex * (sizeof(unsigned long) + sizeof(unsigned char))));
MemberLevel_Out[nIndex] = *(reinterpret_cast<unsigned char *>(
reinterpret_cast<char*>(lpPktTBInfo + 1) +
nIndex * (sizeof(unsigned long) + sizeof(unsigned char)) + sizeof(unsigned long)));
}
return lpPktTBInfo->GetError();
}
unsigned long ParsePacket::HandleCharPeaceMode(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned char *cLeftTime_Out, bool *bPeace_Out)
{
PktPeace* lpPeacePtAck = static_cast<PktPeace*>(lpPktBase);
*dwCharID_Out = lpPeacePtAck->m_dwCharID;
*cLeftTime_Out = lpPeacePtAck->m_cLeftTime;
*bPeace_Out = lpPeacePtAck->m_bPeace;
return lpPeacePtAck->GetError();
}
unsigned long ParsePacket::HandleCharAward(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned long *Exp_Out)
{
PktAw* lpAwPt = static_cast<PktAw*>(lpPktBase);
*CharID_Out = lpAwPt->m_dwCharID;
*Exp_Out = lpAwPt->m_dwExp;
return lpAwPt->GetError();
}
unsigned long ParsePacket::HandleStatueInfo(PktBase* lpPktBase, unsigned char *cIndex, unsigned short *wKID, unsigned char *cState, unsigned short *wNowHP,
unsigned long *dwMileage, unsigned short *wHumanNum, unsigned short *wAkhanNum)
{
PktStatueInfo* lpPktSI = static_cast<PktStatueInfo*>(lpPktBase);
*dwMileage = lpPktSI->m_dwMileage;
*wHumanNum = lpPktSI->m_wHumanNum;
*wAkhanNum = lpPktSI->m_wAkhanNum;
*wNowHP = lpPktSI->m_wNowHP;
*wKID = lpPktSI->m_wKID;
*cState = lpPktSI->m_cState;
*cIndex = lpPktSI->m_cIndex;
return lpPktSI->GetError();
}
unsigned long ParsePacket::HandleCameraScript(PktBase* lpPktBase, unsigned long *dwDeleteObject, unsigned long *dwNewObject, POS* NewPos)
{
PktCameraScript* lpPktCS = static_cast<PktCameraScript*>(lpPktBase);
*dwDeleteObject = lpPktCS->m_dwDeleteObject;
*dwNewObject = lpPktCS->m_dwNewObject;
*NewPos = lpPktCS->m_NewPos;
return lpPktCS->GetError();
}

View File

@@ -0,0 +1,36 @@
#ifndef _GAMA_CLIENT_PARSE_FIGHT_PACKET_H_
#define _GAMA_CLIENT_PARSE_FIGHT_PACKET_H_
#include <winsock2.h>
#include <windows.h>
#include <Network/Packet/PacketStruct/CharAttackPacket.h>
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD>
unsigned long HandleCharAttack(PktBase* lpPktBase, unsigned long *CharID_Out, AtType* lpAtType_Out, unsigned short *HP_Out, unsigned short *MP_Out, unsigned short* MPHeal_Out, char *Judge_Out, unsigned char *DefenserNum_Out, DefenserNode** lppNode_Out);
unsigned long HandleCharAttacked(PktBase* lpPktBase, unsigned long *AtCharID_Out, unsigned long *MyID_Out, AtType *AtType_Out, POS* lpAtPos_Out, float *AtDir_Out, unsigned short *Judge_Out, unsigned short *MyHP_Out, unsigned short *MyMP_Out, unsigned short* MyMPHeal_Out);
// <20><><EFBFBD>񳻱<EFBFBD><F1B3BBB1><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleCharEquipDurability(PktBase* lpPktBase, unsigned long *dwCharID, unsigned char *cIndex, unsigned char *cValue);
unsigned long HandleCharRespawn(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *HP_Out, unsigned short *MP_Out, POS* Pos_Out, __int64 *Exp_Out, unsigned long *dwGold_Out);
unsigned long HandleCharRespawnInfo(PktBase* lpPktBase, unsigned long* CharID_Out, unsigned char* cReAreaNum, unsigned short* wSize, RespawnArea* pRespawnArea);
unsigned long HandleCharRespawnAreaInfo(PktBase* lpPktBase, unsigned long* CharID_Out, unsigned long* dwTownID, unsigned short* wWaitOrder, unsigned char* cHour, unsigned char* cMin, unsigned char* cSec, bool* bCount);
unsigned long HandleCharBattleGroundRespawn(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *wTurn_Out, unsigned short *wWaitNum_Out, unsigned short *wLeftTime_Out, unsigned short *wHumanNum_Out, unsigned short *wAkhanNum_Out);
unsigned long HandleCharRespawnWaitQueue(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *wWaitNum_Out);
unsigned long HandleCharDuelCmd(PktBase* lpPktBase, unsigned long *SenderID_Out, unsigned long *RecverID_Out, unsigned char *Cmd_Out);
unsigned long HandleCharTeamBattleInfo(PktBase* lpPktBase, unsigned long *CharID_Out, char *ChallengerName_Out, unsigned char *Cmd_Out, unsigned char *MemberNum_Out, unsigned long *MemberID_Out, unsigned char *MemberLevel_Out);
unsigned long HandleCharPeaceMode(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned char *cLeftTime_Out, bool *bPeace_Out);
unsigned long HandleCharAward(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned long *Exp_Out);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long HandleStatueInfo(PktBase* lpPktBase, unsigned char *cIndex, unsigned short *wKID, unsigned char *cState, unsigned short *wNowHP, unsigned long *dwMileage, unsigned short *wHumanNum, unsigned short *wAkhanNum);
unsigned long HandleCameraScript(PktBase* lpPktBase, unsigned long *dwDeleteObject, unsigned long *dwNewObject, POS* NewPos);
// TODO : REMOVE UDP Packets
unsigned long HandleCharAttackInfo(PktBase* lpPktBase, unsigned long *CharID_Out, AtType* lpAtType_Out, unsigned char *DefenserNum_Out, DefenserNode **lppNode_Out);
};
#endif

View File

@@ -0,0 +1,524 @@
#include "stdafx.h"
#include "ParseItem.h"
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include "GMMemory.h"
// <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20>ּ<EFBFBD><D6BC><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD>.
unsigned long ParsePacket::HandleCharPickUp(PktBase* lpPktBase, unsigned long *dwCharID, unsigned __int64 *nObjectID,
Item::ItemPos* lpIndex, unsigned long *dwGold, unsigned long *dwSize,
unsigned char* cNum, char **lppBuffer)
{
PktPUAck* lpPktPUAck = static_cast<PktPUAck *>(lpPktBase);
*dwCharID = lpPktPUAck->m_dwCharID;
*nObjectID = lpPktPUAck->m_nObjectID;
*lpIndex = lpPktPUAck->m_itemPos;
*cNum = lpPktPUAck->m_cNum;
switch (lpPktPUAck->m_cType)
{
case PktPUAck::Item:
*dwGold = 0;
*dwSize = lpPktPUAck->m_dwSize;
*lppBuffer = reinterpret_cast<char *>(lpPktPUAck + 1);
break;
case PktPUAck::Gold:
*dwGold = lpPktPUAck->m_dwSize;
*dwSize = 0;
*lppBuffer = NULL;
break;
}
return lpPktPUAck->GetError();
}
unsigned long ParsePacket::HandleCharPickUpInfo(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned __int64 *nObjectID)
{
PktPUInfo* lpPktPUInfo = static_cast<PktPUInfo *>(lpPktBase);
*dwCharID = lpPktPUInfo->m_dwCharID;
*nObjectID = lpPktPUInfo->m_nObjectID;
return lpPktPUInfo->GetError();
}
unsigned long ParsePacket::HandleCharPullDown(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpIndex, FieldObject* lpFieldObject)
{
PktPDAck* lpPktPDAck = static_cast<PktPDAck *>(lpPktBase);
*dwCharID = lpPktPDAck->m_dwCharID;
*lpFieldObject = lpPktPDAck->m_FieldObject;
*lpIndex = lpPktPDAck->m_itemPos;
return lpPktPDAck->GetError();
}
unsigned long ParsePacket::HandleCharPullDownInfo(PktBase* lpPktBase, unsigned long *dwCharID,
FieldObject* lpFieldObject)
{
PktPDInfo* lpPktPDInfo = static_cast<PktPDInfo *>(lpPktBase);
*dwCharID = lpPktPDInfo->m_dwCharID;
*lpFieldObject = lpPktPDInfo->m_FieldObject;
return lpPktPDInfo->GetError();
}
unsigned long ParsePacket::HandleCharTakeItem(PktBase* lpPktBase,
unsigned long *dwCharID, TakeType* lpTakeType)
{
PktTI* lpPktTI = static_cast<PktTI *>(lpPktBase);
*dwCharID = lpPktTI->m_dwCharID;
*lpTakeType = lpPktTI->m_TakeType;
return lpPktTI->GetError();
}
unsigned long ParsePacket::HandleCharSwapItem(PktBase* lpPktBase, unsigned long *dwCharID,
TakeType* lpSrcType, TakeType* lpDstType)
{
PktSwI* lpPktSwI = static_cast<PktSwI *>(lpPktBase);
*dwCharID = lpPktSwI->m_dwCharID;
*lpSrcType = lpPktSwI->m_SwapSrc;
*lpDstType = lpPktSwI->m_SwapDst;
return lpPktSwI->GetError();
}
unsigned long ParsePacket::HandleCharTradeItem(PktBase* lpPktBase, unsigned long *dwCharID, unsigned long *dwNPCID,
unsigned long *dwGold, unsigned long *dwMileage, Item::ItemPos* CouponPos,
Item::ItemPos* lpIndex, unsigned char *Num,
unsigned short *Size, char **lppBuffer)
{
PktTrAck* lpPktTrAck = static_cast<PktTrAck *>(lpPktBase);
*dwCharID = lpPktTrAck->m_dwCharID;
*dwNPCID = lpPktTrAck->m_dwNPCID;
*dwGold = lpPktTrAck->m_dwGold;
*dwMileage = lpPktTrAck->m_dwMileage;
*CouponPos = lpPktTrAck->m_CouponPos;
*lpIndex = lpPktTrAck->m_itemPos;
*Num = lpPktTrAck->m_cNum;
if (0 == lpPktTrAck->m_wSize)
{
*Size = 0;
*lppBuffer = NULL;
}
else
{
*Size = lpPktTrAck->m_wSize;
*lppBuffer = reinterpret_cast<char *>(lpPktTrAck + 1);
}
return lpPktTrAck->GetError();
}
unsigned long ParsePacket::HandleCharEquipShopInfo(PktBase* lpPktBase, unsigned long *dwCharID, unsigned long *dwNPCID,
unsigned long *dwTime, unsigned char *cRace, unsigned char *cTabPage,
unsigned char *cNum, unsigned short *aryItemID, unsigned char *aryItemGrade)
{
PktEquipShopInfo* lpESIAck = static_cast<PktEquipShopInfo *>(lpPktBase);
*dwCharID = lpESIAck->m_dwCharID;
*dwNPCID = lpESIAck->m_dwNPCID;
*dwTime = lpESIAck->m_dwTime;
*cRace = lpESIAck->m_cRace;
*cTabPage = lpESIAck->m_cTabPage;
*cNum = lpESIAck->m_cNum;
unsigned short* lpItemID = reinterpret_cast<unsigned short *>(lpESIAck + 1);
for (unsigned char cIDIndex = 0; cIDIndex < *cNum; ++cIDIndex)
{
aryItemID[cIDIndex] = *lpItemID;
++lpItemID;
}
unsigned char* lpItemGrade = reinterpret_cast<unsigned char *>(lpItemID);
for (unsigned char cGradeIndex = 0; cGradeIndex < *cNum; ++cGradeIndex)
{
aryItemGrade[cGradeIndex] = *lpItemGrade;
++lpItemGrade;
}
return lpESIAck->GetError();
}
unsigned long ParsePacket::HandleCharRepairItem(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpIndex, unsigned long *dwGold)
{
PktRpI* lpPktRpI = static_cast<PktRpI *>(lpPktBase);
*dwCharID = lpPktRpI->m_dwCharID;
*dwGold = lpPktRpI->m_dwGold;
*lpIndex = lpPktRpI->m_itemPos;
return lpPktRpI->GetError();
}
unsigned long ParsePacket::HandleCharRepairAllItem(PktBase* lpPktBase, unsigned long *dwCharID, unsigned long *dwGold)
{
PktRpAI* lpPktRpAI = static_cast<PktRpAI *>(lpPktBase);
*dwCharID = lpPktRpAI->m_dwCharID;
*dwGold = lpPktRpAI->m_dwGold;
return lpPktRpAI->GetError();
}
unsigned long ParsePacket::HandleCharUseItem(PktBase* lpPktBase,
unsigned long& dwSenderID,
unsigned long& dwRecver, Item::ItemPos& index,
unsigned char& cRemainItemNum)
{
PktUI* lpPktUI = static_cast<PktUI *>(lpPktBase);
dwSenderID = lpPktUI->m_dwSender;
dwRecver = lpPktUI->m_dwRecver;
index = lpPktUI->m_itemPos;
cRemainItemNum = lpPktUI->m_cRemainItemNum;
return lpPktUI->GetError();
}
unsigned long ParsePacket::HandleCharCastObject(PktBase* lpPktBase, unsigned long *dwSenderID,
unsigned long *dwRecverID, CastObject* lpCastObject)
{
PktCO* lpPktCO = static_cast<PktCO *>(lpPktBase);
*dwSenderID = lpPktCO->m_dwSenderID;
*dwRecverID = lpPktCO->m_dwReceiverID;
*lpCastObject = lpPktCO->m_sCastObject;
return lpPktCO->GetError();
}
unsigned long ParsePacket::HandleCharCastObjectInfo(PktBase* lpPktBase, unsigned long *dwSenderID,
unsigned long *dwRecverID, CastObject* lpCastObject)
{
PktCOInfo* lpPktCOInfo = static_cast<PktCOInfo *>(lpPktBase);
*dwSenderID = lpPktCOInfo->m_dwSenderID;
*dwRecverID = lpPktCOInfo->m_dwReceiverID;
*lpCastObject = lpPktCOInfo->m_sCastObject;
return lpPktCOInfo->GetError();
}
unsigned long ParsePacket::HandleCharInstallSocket(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpEquipIndex,
Item::ItemPos* lpSocket,
unsigned char *Size, char **lppBuffer)
{
PktISAck* lpPktISAck = static_cast<PktISAck *>(lpPktBase);
*dwCharID = lpPktISAck->m_dwCharID;
*lpEquipIndex = lpPktISAck->m_equipPos;
*lpSocket = lpPktISAck->m_gemPos;
*Size = lpPktISAck->m_cSize;
*lppBuffer = (lpPktISAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktISAck + 1) : 0;
return lpPktISAck->GetError();
}
unsigned long ParsePacket::HandleCharInstallRune(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpEquipIndex,
Item::ItemPos* lpSocket, unsigned char* runePos, unsigned char* type,
unsigned char *Size, char **lppBuffer)
{
PktIRSAck* lpPktIRSAck = static_cast<PktIRSAck *>(lpPktBase);
*dwCharID = lpPktIRSAck->m_dwCharID;
*lpEquipIndex = lpPktIRSAck->m_equipPos;
*lpSocket = lpPktIRSAck->m_runePos;
*Size = lpPktIRSAck->m_cSize;
//*runePos = lpPktIRSAck->m_cRuneSocketPos;
*type = lpPktIRSAck->m_cType;
*lppBuffer = (lpPktIRSAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktIRSAck + 1) : 0;
return lpPktIRSAck->GetError();
}
unsigned long ParsePacket::HandleCharItemChemical(PktBase* lpPktBase, unsigned long *dwCharID,
Item::ItemPos* lpPickkingPos, Item::ItemPos* lpTargetPos,
unsigned short *wPickkingID, unsigned char *cPickkingNum,
unsigned char *cSize, char **lppBuffer)
{
PktItemChemicalAck* lpPktICAck = static_cast<PktItemChemicalAck *>(lpPktBase);
*dwCharID = lpPktICAck->m_dwCharID;
*lpPickkingPos = lpPktICAck->m_pickkingPos;
*lpTargetPos = lpPktICAck->m_targetPos;
*wPickkingID = lpPktICAck->m_wPickkingID;
*cPickkingNum = lpPktICAck->m_cPickkingNum;
*cSize = lpPktICAck->m_cResultSize;
*lppBuffer = (lpPktICAck->m_cResultSize > 0) ? reinterpret_cast<char *>(lpPktICAck + 1) : 0;
return lpPktICAck->GetError();
}
unsigned long ParsePacket::HandleCharSplitItem(PktBase* lpPktBase, unsigned long *dwCharID,
TakeType* lpTakeType, unsigned char *Size, char **lppBuffer)
{
PktSpItAck* lpPktSpltAck = static_cast<PktSpItAck *>(lpPktBase);
*dwCharID = lpPktSpltAck->m_dwCharID;
*lpTakeType = lpPktSpltAck->m_TakeType;
*Size = lpPktSpltAck->m_cSize;
*lppBuffer = (lpPktSpltAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktSpltAck + 1) : 0;
return lpPktSpltAck->GetError();
}
unsigned long ParsePacket::HandleDeposit(PktBase* lpPktBase, unsigned char *Cmd,
unsigned long *dwGold, char *PassSave)
{
PktDeposit* lpPktDeposit = static_cast<PktDeposit *>(lpPktBase);
*Cmd = lpPktDeposit->m_cCmd;
memcpy(dwGold, &lpPktDeposit->m_szData[0], sizeof(unsigned long));
*PassSave = lpPktDeposit->m_szData[4];
return lpPktDeposit->GetError();
}
unsigned long ParsePacket::HandleDepositUpdate(PktBase* lpPktBase, unsigned long *dwFlag,
unsigned char *TabNum, bool *Complete,
unsigned short *StoreSize, char **lppStoreBuff)
{
PktDepositUpdateDB* lpDepositUpdateDB = static_cast<PktDepositUpdateDB *>(lpPktBase);
*dwFlag = lpDepositUpdateDB->m_dwTabFlag;
*TabNum = lpDepositUpdateDB->m_cTabNum;
*Complete = lpDepositUpdateDB->m_bUpdateComplete;
*StoreSize = lpDepositUpdateDB->m_usDataSize;
*lppStoreBuff = reinterpret_cast<char *>(lpDepositUpdateDB + 1);
return lpDepositUpdateDB->GetError();
}
unsigned long ParsePacket::HandleCharUpgradeItem(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned long *dwCurrentGold, unsigned char *cCurrentMineralNum,
unsigned char *Size, char **lppBuffer)
{
PktUgIAck* lpPktUgIAck = static_cast<PktUgIAck *>(lpPktBase);
*dwCharID = lpPktUgIAck->m_dwCharID;
*dwCurrentGold = lpPktUgIAck->m_dwCurrentGold;
*cCurrentMineralNum = lpPktUgIAck->m_cCurrentMineralNum;
*Size = lpPktUgIAck->m_cSize;
*lppBuffer = (lpPktUgIAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktUgIAck + 1) : 0;
return lpPktUgIAck->GetError();
}
unsigned long ParsePacket::HandleCharItemOptionGraft(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned long *dwCurrentGold, unsigned char *cItemSize, char **lppItemBuffer)
{
PktItemOptionGraftAck* lpPktIOGAck = static_cast<PktItemOptionGraftAck *>(lpPktBase);
*dwCharID = lpPktIOGAck->m_dwCharID;
*dwCurrentGold = lpPktIOGAck->m_dwGold;
*cItemSize = lpPktIOGAck->m_cSize;
*lppItemBuffer = (lpPktIOGAck->m_cSize > 0) ? reinterpret_cast<char *>(lpPktIOGAck + 1) : 0;
return lpPktIOGAck->GetError();
}
unsigned long ParsePacket::HandleCharItemCompensation(PktBase* lpPktBase, unsigned long *dwCharID)
{
PktItemCompensation* lpPktICAck = static_cast<PktItemCompensation *>(lpPktBase);
*dwCharID = lpPktICAck->m_dwCharID;
return lpPktICAck->GetError();
}
unsigned long ParsePacket::HandleCharAutoRouting(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned __int64 *nObjectID, unsigned short *wItemID,
unsigned char *cNum, unsigned char *cCmd)
{
PktAutoRouting* lpPktAutoRouting = static_cast<PktAutoRouting *>(lpPktBase);
*dwCharID = lpPktAutoRouting->m_dwCharID;
*nObjectID = lpPktAutoRouting->m_nObjectID;
*wItemID = lpPktAutoRouting->m_wItemID;
*cNum = lpPktAutoRouting->m_cNum;
*cCmd = lpPktAutoRouting->m_cCmd;
return lpPktAutoRouting->GetError();
}
unsigned long ParsePacket::HandleCharDisappearItem(PktBase* lpPktBase, unsigned long* dwCharID,
Item::ItemPos* lpIndex, unsigned char* cNum, unsigned char* cCmd)
{
PktDisappearItem* lpPktDisappearItem = static_cast<PktDisappearItem *>(lpPktBase);
*dwCharID = lpPktDisappearItem->m_dwCharID;
*lpIndex = lpPktDisappearItem->m_itemPos;
*cNum = lpPktDisappearItem->m_cNum;
*cCmd = lpPktDisappearItem->m_cCmd;
return lpPktDisappearItem->GetError();
}
unsigned long ParsePacket::HandleCharExchangeCmd(PktBase* lpPktBase, unsigned long *dwSenderID,
unsigned long *dwRecverID, unsigned char *Cmd)
{
PktExC* lpExCPt = static_cast<PktExC *>(lpPktBase);
*dwSenderID = lpExCPt->m_dwSenderID;
*dwRecverID = lpExCPt->m_dwRecverID;
*Cmd = lpExCPt->m_cCmd;
return lpExCPt->GetError();
}
unsigned long ParsePacket::HandleCharExchangeItem(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned long *dwSize, Item::ItemPos* lpIndex,
unsigned char *Type, unsigned char *Num, char **lppBuffer)
{
PktExI* lpExIPt = static_cast<PktExI *>(lpPktBase);
*dwCharID = lpExIPt->m_dwCharID;
*dwSize = lpExIPt->m_dwSize;
*lpIndex = lpExIPt->m_itemPos;
*Type = lpExIPt->m_cType;
*Num = lpExIPt->m_cNum;
*lppBuffer = (0 < lpExIPt->m_dwSize) ? reinterpret_cast<char *>(lpExIPt + 1) : 0;
return lpExIPt->GetError();
}
unsigned long ParsePacket::HandleCharStallOpen(PktBase* lpPktBase, unsigned long *dwCharID, char* StallName)
{
PktStO* lpStOPt = static_cast<PktStO *>(lpPktBase);
*dwCharID = lpStOPt->m_dwCharID;
strncpy(StallName, lpStOPt->m_StallName, PktStO::MAX_STALL_NAME_LEN);
return lpStOPt->GetError();
}
unsigned long ParsePacket::HandleCharStallRegisterItem(PktBase* lpPktBase, unsigned long *dwCharID, unsigned long *dwShopID,
TakeType *TakeType, unsigned long *dwPrice, unsigned char *Cmd)
{
PktStRI* lpStRIPt = static_cast<PktStRI *>(lpPktBase);
*dwCharID = lpStRIPt->m_dwCharID;
*dwShopID = lpStRIPt->m_dwShopID;
*TakeType = lpStRIPt->m_TakeType;
*dwPrice = lpStRIPt->m_dwPrice;
*Cmd = lpStRIPt->m_cCmd;
return lpStRIPt->GetError();
}
unsigned long ParsePacket::HandleCharStallEnter(PktBase* lpPktBase, unsigned long *dwCustomerID, unsigned long *dwOwner)
{
PktStE* lpStEPt = static_cast<PktStE *>(lpPktBase);
*dwCustomerID = lpStEPt->m_dwCustomerID;
*dwOwner = lpStEPt->m_dwOwnerID;
return lpStEPt->GetError();
}
unsigned long ParsePacket::HandleCharStallItemInfo(PktBase* lpPktBase,
unsigned long *dwOwnerID, unsigned long *dwCustomerID,
unsigned char *cTax, unsigned long *dwStallSize, char **lppStallBuff,
unsigned char *ItemNum, unsigned long **dwStallPrice)
{
PktStIInfo* lpPktStIInfo = static_cast<PktStIInfo *>(lpPktBase);
::memcpy(dwCustomerID, lpPktStIInfo->m_dwCustomerID, sizeof(unsigned long) * PktStIInfo::MAX_CUSTOMER_NUM);
*dwOwnerID = lpPktStIInfo->m_dwOwnerID;
*cTax = lpPktStIInfo->m_cTax;
*dwStallSize = lpPktStIInfo->m_dwItemSize;
*lppStallBuff = reinterpret_cast<char *>(lpPktStIInfo + 1);
*ItemNum = lpPktStIInfo->m_cItemNum;
*dwStallPrice = reinterpret_cast<unsigned long *>(*lppStallBuff + lpPktStIInfo->m_dwItemSize);
return lpPktStIInfo->GetError();
}
unsigned long ParsePacket::HandleCharTakeItems(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *TakeNum, TakeType** lppTakeTypes)
{
PktTIs* lpTIsPt = static_cast<PktTIs *>(lpPktBase);
*dwCharID = lpTIsPt->m_dwCharID;
*TakeNum = lpTIsPt->m_TakeNum;
*lppTakeTypes = reinterpret_cast<TakeType *>(lpTIsPt + 1);
return lpTIsPt->GetError();
}
unsigned long ParsePacket::HandleCharTakeGold(PktBase* lpPktBase, unsigned long *dwCharID,
unsigned char *SrcPos, unsigned char *DstPos,
unsigned long *dwGold)
{
PktTG* lpTGPt = static_cast<PktTG *>(lpPktBase);
*dwCharID = lpTGPt->m_dwCharID;
*SrcPos = lpTGPt->m_cSrcPos;
*DstPos = lpTGPt->m_cDstPos;
*dwGold = lpTGPt->m_dwGold;
return lpTGPt->GetError();
}

View File

@@ -0,0 +1,62 @@
#ifndef _PARSE_ITEM_PACKET_H_
#define _PARSE_ITEM_PACKET_H_
#include <Network/Packet/PacketStruct/CharItemPacket.h>
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD>
unsigned long HandleCharPickUp(PktBase* lpPktBase, unsigned long* dwCharID, unsigned __int64* nObjectID, Item::ItemPos* lpIndex, unsigned long* dwGold, unsigned long* dwSize, unsigned char* cNum, char* *lppBuffer);
unsigned long HandleCharPickUpInfo(PktBase* lpPktBase, unsigned long* dwCharID, unsigned __int64* nObjectID);
unsigned long HandleCharAutoRouting(PktBase* lpPktBase, unsigned long* dwCharID, unsigned __int64* nObjectID, unsigned short* wItemID, unsigned char* cNum, unsigned char* cCmd);
unsigned long HandleCharDisappearItem(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpIndex, unsigned char* cNum, unsigned char* cCmd);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long HandleCharPullDown(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpIndex, FieldObject* lpFieldObject);
unsigned long HandleCharPullDownInfo(PktBase* lpPktBase, unsigned long* dwCharID, FieldObject* lpFieldObject);
// <20>̵<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long HandleCharTakeItem(PktBase* lpPktBase, unsigned long* dwCharID, TakeType* lpTakeType);
unsigned long HandleCharSwapItem(PktBase* lpPktBase, unsigned long* dwCharID, TakeType* lpSrcType, TakeType* lpDstType);
unsigned long HandleCharSplitItem(PktBase* lpPktBase, unsigned long* dwCharID, TakeType* lpTakeType, unsigned char* Size, char* *lppBuffer);
// <20><><EFBFBD><EFBFBD>/<2F>ȱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
unsigned long HandleCharTradeItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwNPCID, unsigned long* dwGold, unsigned long* dwMileage, Item::ItemPos* CouponPos, Item::ItemPos* lpIndex, unsigned char* Num, unsigned short* Size, char* *lppBuffer);
unsigned long HandleCharEquipShopInfo(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwNPCID, unsigned long* dwTime, unsigned char* cRace, unsigned char* cTabPage, unsigned char* cNum, unsigned short* aryItemID, unsigned char* aryItemGrade);
unsigned long HandleCharRepairItem(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpIndex, unsigned long* dwGold);
unsigned long HandleCharRepairAllItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwGold);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long HandleCharCastObject(PktBase* lpPktBase, unsigned long* dwSenderID, unsigned long* dwRecverID, CastObject* lpCastObject);
unsigned long HandleCharCastObjectInfo(PktBase* lpPktBase, unsigned long* dwSenderID, unsigned long* dwRecverID, CastObject* lpCastObject);
// <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
unsigned long HandleCharUseItem(PktBase* lpPktBase, unsigned long& dwSenderID, unsigned long& dwRecver, Item::ItemPos& index, unsigned char& cRemainItemNum);
unsigned long HandleCharInstallSocket(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket, unsigned char* Size, char* *lppBuffer);
unsigned long HandleCharInstallRune(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket, unsigned char* runePos, unsigned char* type, unsigned char* Size, char* *lppBuffer);
unsigned long HandleCharItemChemical(PktBase* lpPktBase, unsigned long* dwCharID, Item::ItemPos* lpPickkingPos, Item::ItemPos* lpTargetPos, unsigned short* wPickkingID, unsigned char* cPickkingNum, unsigned char* cSize, char* *lppBuffer);
unsigned long HandleCharUpgradeItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwCurrentGold, unsigned char* cCurrentMineralNum, unsigned char* Size, char* *lppBuffer);
unsigned long HandleCharItemOptionGraft(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwCurrentGold, unsigned char* cItemSize, char* *lppItemBuffer);
unsigned long HandleCharItemCompensation(PktBase* lpPktBase, unsigned long* dwCharID);
// â<><C3A2>
unsigned long HandleDeposit(PktBase* lpPktBase, unsigned char* Cmd, unsigned long* dwGold, char* PassSave);
unsigned long HandleDepositUpdate(PktBase* lpPktBase, unsigned long* dwFlag, unsigned char* TabNum, bool* Complete, unsigned short* StoreSize, char* *lppStoreBuff);
// <20><>ȯ
unsigned long HandleCharExchangeCmd(PktBase* lpPktBase, unsigned long* dwSenderID, unsigned long* dwRecverID, unsigned char* Cmd);
unsigned long HandleCharExchangeItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwSize, Item::ItemPos* lpIndex, unsigned char* Type, unsigned char* Num, char* *lppBuffer);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long HandleCharStallOpen(PktBase* lpPktBase, unsigned long* dwCharID, char* StallName);
unsigned long HandleCharStallRegisterItem(PktBase* lpPktBase, unsigned long* dwCharID, unsigned long* dwShopID, TakeType* TakeType, unsigned long* dwPrice, unsigned char* Cmd);
unsigned long HandleCharStallEnter(PktBase* lpPktBase, unsigned long* dwCustomerID, unsigned long* dwOwner);
unsigned long HandleCharStallItemInfo(PktBase* lpPktBase, unsigned long* dwOwnerID, unsigned long* dwCustomerID, unsigned char* cTax, unsigned long* dwStallSize, char **lppStallBuff, unsigned char* ItemNum, unsigned long **dwStallPrice);
// <20><>Ÿ
unsigned long HandleCharTakeItems(PktBase* lpPktBase, unsigned long* dwCharID, unsigned char* TakeNum, TakeType** lppTakeTypes);
unsigned long HandleCharTakeGold(PktBase* lpPktBase, unsigned long* dwCharID, unsigned char* SrcPos, unsigned char* DstPos, unsigned long* dwGold);
};
#endif

View File

@@ -0,0 +1,139 @@
#include "stdafx.h"
#include <Network/Address/INET_Addr.h>
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Network/Packet/PacketStruct/CharLoginOutPacket.h>
#include <Network/Packet/PacketStruct/CharLoginOutPacketStruct.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include "ParseLoginout.h"
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharLogin(PktBase* lpPktBase, ClientSocket& clientSocket,
bool *bPeace_Out, bool *bCheckRelation,
unsigned char *cNameChangeCount, unsigned char *cAdminFlag,
unsigned char *cGuildWarFlag, unsigned char *cRealmWarFlag,
unsigned char *cRealmPoint, unsigned char *cTacticsFlag,
CHAR_INFOST* lpCharInfo_Out, SKILL* lpSkill_Out, QUICK* lpQuick_Out, SPELL* lpSpell_Out,
CHAR_POS* lpPos_Out,
unsigned long *ServerTime_Out, unsigned long *dwServerID,
unsigned short *EquipSize_Out, char **lppEquipBuff_Out,
unsigned short *InvenSize_Out, char **lppInvenBuff_Out,
unsigned short *ExtraSize_Out, char **lppExtraBuff_Out,
unsigned short *ExchangeSize_Out, char **lppExchangeBuff_Out,
unsigned short *TempInvenSize_Out, char **lppTempInvenBuff_Out)
{
PktCLiAck* lpCLiAckPt = static_cast<PktCLiAck*>(lpPktBase);
*ServerTime_Out = lpCLiAckPt->m_dwServerTime;
*dwServerID = lpCLiAckPt->m_dwServerID;
*bPeace_Out = lpCLiAckPt->m_bPeaceMode;
*bCheckRelation = lpCLiAckPt->m_bCheckRelation;
*cNameChangeCount = lpCLiAckPt->m_cNameChangeCount;
*cAdminFlag = lpCLiAckPt->m_cAdminFlag;
*cGuildWarFlag = lpCLiAckPt->m_cGuildWarFlag;
*cRealmWarFlag = lpCLiAckPt->m_cRealmWarFlag;
*cRealmPoint = lpCLiAckPt->m_cRealmPoint;
*cTacticsFlag = lpCLiAckPt->m_cTacticsFlag;
unsigned short *usUpdateLen = lpCLiAckPt->m_usUpdate;
*lppEquipBuff_Out = NULL;
*lppInvenBuff_Out = NULL;
*lppExtraBuff_Out = NULL;
*lppExchangeBuff_Out = NULL;
*lppTempInvenBuff_Out = NULL;
*EquipSize_Out = 0;
*InvenSize_Out = 0;
*ExtraSize_Out = 0;
*ExchangeSize_Out = 0;
*TempInvenSize_Out = 0;
char* OffSet = reinterpret_cast<char*>(lpCLiAckPt + 1);
for (int nCount = 0; nCount < DBUpdateData::MAX_UPDATE_DB; ++nCount)
{
if (0 != usUpdateLen[nCount])
{
switch (nCount)
{
case DBUpdateData::STATUS_UPDATE: *lpCharInfo_Out = *reinterpret_cast<CHAR_INFOST *>(OffSet); break;
case DBUpdateData::POSITION_UPDATE: *lpPos_Out = *reinterpret_cast<CHAR_POS *>(OffSet); break;
case DBUpdateData::SKILL_UPDATE: *lpSkill_Out = *reinterpret_cast<SKILL *>(OffSet); break;
case DBUpdateData::QUICKSLOT_UPDATE: *lpQuick_Out = *reinterpret_cast<QUICK *>(OffSet); break;
case DBUpdateData::SPELL_UPDATE: *lpSpell_Out = *reinterpret_cast<SPELL *>(OffSet); break;
case DBUpdateData::ITEM_EQUIP_UPDATE: *lppEquipBuff_Out = OffSet; *EquipSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_INVEN_UPDATE: *lppInvenBuff_Out = OffSet; *InvenSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_EXTRA_UPDATE: *lppExtraBuff_Out = OffSet; *ExtraSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_EXCHANGE_UPDATE: *lppExchangeBuff_Out = OffSet; *ExchangeSize_Out = usUpdateLen[nCount]; break;
case DBUpdateData::ITEM_TEMPINVEN_UPDATE: *lppTempInvenBuff_Out = OffSet; *TempInvenSize_Out = usUpdateLen[nCount]; break;
}
OffSet += usUpdateLen[nCount];
}
}
return lpCLiAckPt->GetError();
}
unsigned long ParsePacket::HandleCharLogout(PktBase* lpPktBase, unsigned long *CharID_Out)
{
PktCLoAck* lpCLoAckPt = static_cast<PktCLoAck*>(lpPktBase);
*CharID_Out = lpCLoAckPt->m_dwCharID;
return lpCLoAckPt->GetError();
}
unsigned long ParsePacket::HandleCharMoveZone(PktBase* lpPktBase, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out)
{
PktSZMvAck* lpSZMvAckPt = static_cast<PktSZMvAck*>(lpPktBase);
*Zone_Out = lpSZMvAckPt->m_cZone;
memcpy(lpChannelNum_Out, lpSZMvAckPt->m_wChannelNum, sizeof(unsigned short) * PktSZMvAck::MAX_CHANNEL_NUM);
return lpSZMvAckPt->GetError();
}
unsigned long ParsePacket::HandleServerZone(PktBase* lpPktBase, ClientSocket& clientSocket,
unsigned long *ServerID_Out)
{
PktSZAck* lpSZAckPt = static_cast<PktSZAck*>(lpPktBase);
*ServerID_Out = lpSZAckPt->m_dwServerID;
clientSocket.SetAddress(ClientSocket::MoveZoneAddr, lpSZAckPt->m_GameServerTCPAddr);
return lpSZAckPt->GetError();
}
unsigned long ParsePacket::HandleCSAuth(PktBase* lpPktBase, unsigned long* dwCID,
unsigned long* dwAuthCode, GG_AUTH_DATA* lpAuthCode2)
{
PktCSAuth* lpCSAuthPt = static_cast<PktCSAuth *>(lpPktBase);
*dwCID = lpCSAuthPt->m_dwCharID;
*dwAuthCode = lpCSAuthPt->m_dwAuthCode;
*lpAuthCode2 = lpCSAuthPt->m_AuthCode2;
return lpCSAuthPt->GetError();
}
unsigned long ParsePacket::HandleKeyInfo(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* pKeyInfo)
{
PktKeyInfo* lpKeyInfo = static_cast<PktKeyInfo*>(lpPktBase);
*dwCID = lpKeyInfo->m_dwCID;
memcpy(pKeyInfo, lpKeyInfo->m_dwKeyInfo, sizeof(unsigned long)*PktKeyInfo::MAX_KEY_INFO);
return lpKeyInfo->GetError();
}

View File

@@ -0,0 +1,38 @@
#ifndef _GAMA_CLIENT_PARSE_LOGIN_OUT_H_
#define _GAMA_CLIENT_PARSE_LOGIN_OUT_H_
#include <winsock2.h>
#include <windows.h>
#include <DB/DBDefine.h>
class ClientSocket;
struct PktBase;
struct _GG_AUTH_DATA;
namespace ParsePacket
{
// <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. ClientSocket<65><74> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD> UDP<44>ּҿ<D6BC> ä<>ü<EFBFBD><C3BC><EFBFBD> <20>ּҸ<D6BC> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
unsigned long HandleCharLogin(PktBase* lpPktBase, ClientSocket& clientSocket,
bool *bPeace_Out, bool *bCheckRelation, unsigned char *cNameChangeCount, unsigned char *cAdminFlag,
unsigned char *cGuildWarFlag, unsigned char *cRealmWarFlag, unsigned char *cRealmPoint, unsigned char *cTacticsFlag,
CHAR_INFOST* lpCharInfo_Out, SKILL* lpSkill_Out, QUICK* lpQuick_Out, SPELL* lpSpell_Out,
CHAR_POS* lpPos_Out,
unsigned long *ServerTime_Out, unsigned long *dwServerID,
unsigned short *EquipSize_Out, char **lppEquipBuff_Out,
unsigned short *InvenSize_Out, char **lppInvenBuff_Out,
unsigned short *ExtraSize_Out, char **lppExtraBuff_Out,
unsigned short *ExchangeSize_Out, char **lppExchangeBuff_Out,
unsigned short *TempInvenSize_Out, char **lppTempInvenBuff_Out);
unsigned long HandleCharLogout(PktBase* lpPktBase, unsigned long *CharID_Out);
unsigned long HandleCharMoveZone(PktBase* lpPktBase, unsigned char *Zone_Out, unsigned short *lpChannelNum_Out);
// <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> MoveZone<6E>ּҸ<D6BC> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
unsigned long HandleServerZone(PktBase* lpPktBase, ClientSocket& clientSocket, unsigned long *ServerID_Out);
unsigned long HandleCSAuth(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* dwAuthCode, _GG_AUTH_DATA* lpAuthCode2);
unsigned long HandleKeyInfo(PktBase* lpPktBase, unsigned long* dwCID, unsigned long* pKeyInfo);
};
#endif

View File

@@ -0,0 +1,76 @@
#include "stdafx.h"
#include "ParseMove.h"
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharBroadcastPacket.h>
#include <mmsystem.h>
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharUpdateAddress(PktBase* lpPktBase, ClientSocket& clientSocket)
{
PktUAAck* lpUAAckPt = static_cast<PktUAAck*>(lpPktBase);
clientSocket.SetAddress(ClientSocket::PrivateAddr, lpUAAckPt->m_PrivateAddress);
clientSocket.SetAddress(ClientSocket::PublicAddr, lpUAAckPt->m_PublicAddress);
return lpUAAckPt->GetError();
}
unsigned long ParsePacket::HandleCharAddressInfo(PktBase* lpPktBase, unsigned long *CharID_Out,
SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out)
{
PktAI* lpAIPt = static_cast<PktAI*>(lpPktBase);
*CharID_Out = lpAIPt->m_AddressInfo.m_dwCharID;
*PubAddress_Out = lpAIPt->m_AddressInfo.m_PublicAddress;
*PriAddress_Out = lpAIPt->m_AddressInfo.m_PrivateAddress;
return lpAIPt->GetError();
}
unsigned long ParsePacket::HandleCharMoveEx(PktBase* lpPktBase, unsigned long *CharID_Out, POS* Pos_Out,
float *Dir_Out, unsigned char *UAct_Out, unsigned char *LAct_Out)
{
PktMVEx* lpPktMVEx = static_cast<PktMVEx*>(lpPktBase);
CNetworkPos& netPos = lpPktMVEx->m_NetworkPos;
Pos_Out->fPointX = netPos.GetXPos();
Pos_Out->fPointY = netPos.GetYPos();
Pos_Out->fPointZ = netPos.GetZPos();
*Dir_Out = netPos.GetDirection();
*CharID_Out = lpPktMVEx->GetServerInfo();
*UAct_Out = lpPktMVEx->m_cUAct;
*LAct_Out = lpPktMVEx->m_cLAct;
return 0;
}
unsigned long ParsePacket::HandleMonMove(PktBase* lpPktBase, unsigned long *MonID_Out, POS* lpPos_Out,
float *Dir_Out, float *Vec_Out,
unsigned short *Act_Out, unsigned short *AniNum_Out)
{
PktMM* lpMMPt = static_cast<PktMM*>(lpPktBase);
*MonID_Out = lpMMPt->m_dwMonID;
CNetworkPos& netPos = lpMMPt->m_NetworkPos;
lpPos_Out->fPointX = netPos.GetXPos();
lpPos_Out->fPointY = netPos.GetYPos();
lpPos_Out->fPointZ = netPos.GetZPos();
*Dir_Out = netPos.GetDirection();
*Vec_Out = netPos.GetVelocity();
*Act_Out = lpMMPt->m_cAct;
*AniNum_Out = lpMMPt->m_cAniNum;
return lpMMPt->GetError();
}

View File

@@ -0,0 +1,36 @@
#ifndef _GAMA_CLIENT_PARSE_MOVE_BROADCAST_H_
#define _GAMA_CLIENT_PARSE_MOVE_BROADCAST_H_
#include <winsock2.h>
#include <windows.h>
#include <DB/DBDefine.h>
#include <Network/Packet/PacketStruct/AddressPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacketStruct.h>
// forward decl
class ClientSocket;
struct PktBase;
namespace BroadcastInfo
{
class CObjectInfoMgr;
};
namespace ParsePacket
{
unsigned long HandleMonMove(PktBase* lpPktBase, unsigned long *MonID_Out, POS* lpPos_Out, float *Dir_Out, float *Vec_Out, unsigned short *Act_Out, unsigned short *AniNum_Out);
unsigned long HandleCharMoveEx(PktBase* lpPktBase, unsigned long *CharID_Out,
POS* Pos_Out, float *Dir_Out, unsigned char *UAct_Out, unsigned char *LAct_Out);
// TODO : REMOVE UDP Packets
// ClientSocket<65><74> UDP public, private <20>ּҸ<D6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD>Ѵ<EFBFBD>.
unsigned long HandleCharUpdateAddress(PktBase* lpPktBase, ClientSocket& clientSocket);
unsigned long HandleCharAddressInfo(PktBase* lpPktBase, unsigned long *CharID_Out, SOCKADDR_IN* PubAddress_Out, SOCKADDR_IN* PriAddress_Out);
unsigned long HandleCharMove(PktBase* lpPktBase, unsigned long *CharID_Out, POS* Pos_Out, float *Dir_Out, unsigned short *UAct_Out, unsigned short *LAct_Out, char *Level_Out, unsigned long *ChantEf_Out, unsigned long *EnchantEf_Out, unsigned long *PtCount_Out);
}
#endif

View File

@@ -0,0 +1,77 @@
#include "stdafx.h"
#include "ParseQuest.h"
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharStartQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned long *dwNPCID_Out, unsigned short *wQuestID_Out)
{
PktStartQuest* lpPktStartQuest = static_cast<PktStartQuest*>(lpPktBase);
*dwCharID_Out = lpPktStartQuest->m_dwCharID;
*dwNPCID_Out = lpPktStartQuest->m_dwNPCID;
*wQuestID_Out = lpPktStartQuest->m_wQuestID;
return lpPktStartQuest->GetError();
}
unsigned long ParsePacket::HandleCharCancelQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned short *wQuestID_Out)
{
PktCancelQuest* lpPktCancelQuest = static_cast<PktCancelQuest*>(lpPktBase);
*dwCharID_Out = lpPktCancelQuest->m_dwCharID;
*wQuestID_Out = lpPktCancelQuest->m_wQuestID;
return lpPktCancelQuest->GetError();
}
unsigned long ParsePacket::HandleCharOperateTrigger(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned short *wQuestID_Out, unsigned char *cPhase_Out,
unsigned char *cTrigger_Out,unsigned char *cCount_Out)
{
PktOperateTrigger* lpPktOT = static_cast<PktOperateTrigger*>(lpPktBase);
*dwCharID_Out = lpPktOT->m_dwCharID;
*wQuestID_Out = lpPktOT->m_wQuestID;
*cPhase_Out = lpPktOT->m_cPhase;
*cTrigger_Out = lpPktOT->m_cTrigger;
*cCount_Out = lpPktOT->m_cCount;
return lpPktOT->GetError();
}
unsigned long ParsePacket::HandleCharQuestInfo(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned short *wExecutingQuestNum_Out,
PktQuestDB::ExecutingQuest **lppExecutingQuest_Out,
unsigned short *wHistoryQuestNum_Out,
unsigned short **lppHistoryQuest_Out)
{
PktQuestDB* lpPktQuestDB = static_cast<PktQuestDB*>(lpPktBase);
*dwCharID_Out = lpPktQuestDB->m_dwCID;
*wExecutingQuestNum_Out = lpPktQuestDB->m_wExecuteQuestSize / sizeof(PktQuestDB::ExecutingQuest);
*wHistoryQuestNum_Out = lpPktQuestDB->m_wHistoryQuestSize / sizeof(unsigned short);
*lppExecutingQuest_Out = reinterpret_cast<PktQuestDB::ExecutingQuest *>(lpPktQuestDB + 1);
*lppHistoryQuest_Out = reinterpret_cast<unsigned short*>(
reinterpret_cast<char*>(lpPktQuestDB + 1) + lpPktQuestDB->m_wExecuteQuestSize);
return lpPktQuestDB->GetError();
}
unsigned long ParsePacket::HandleCharEndQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out,
unsigned short *wQuestID_Out, bool *bSave_Out)
{
PktEndQuest* lpPktEQ = static_cast<PktEndQuest*>(lpPktBase);
*dwCharID_Out = lpPktEQ->m_dwCharID;
*wQuestID_Out = lpPktEQ->m_wQuestID;
*bSave_Out = lpPktEQ->m_bSave;
return lpPktEQ->GetError();
}

View File

@@ -0,0 +1,16 @@
#ifndef _GAMA_CLIENT_PARSE_CHAR_QUEST_
#define _GAMA_CLIENT_PARSE_CHAR_QUEST_
#include <Network/Packet/PacketStruct/CharQuestPacket.h>
namespace ParsePacket
{
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
unsigned long HandleCharStartQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned long *dwNPCID_Out, unsigned short *wQuestID_Out);
unsigned long HandleCharCancelQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned short *wQuestID_Out);
unsigned long HandleCharOperateTrigger(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned short *wQuestID_Out, unsigned char *cPhase_Out, unsigned char *cTrigger_Out, unsigned char *cCount_Out);
unsigned long HandleCharQuestInfo(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned short *wExecutingQuestNum_Out, PktQuestDB::ExecutingQuest **lppExecutingQuest_Out, unsigned short *wHistoryQuestNum_Out, unsigned short **lppHistoryQuest_Out);
unsigned long HandleCharEndQuest(PktBase* lpPktBase, unsigned long *dwCharID_Out, unsigned short *wQuestID_Out, bool *bSave_Out);
}
#endif

View File

@@ -0,0 +1,113 @@
#include "stdafx.h"
#include "ParseSkill.h"
#include <Network/Packet/PacketStruct/CharMovePacket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharAttackPacket.h>
#include "GMMemory.h"
unsigned long ParsePacket::HandleCharSkillLock(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *SkillID_Out, unsigned char *Index_Out)
{
LPPktSk lpSkPt = (LPPktSk)lpPktBase;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
return lpSkPt->GetError();
}
unsigned long ParsePacket::HandleCharSkillUnLock(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *SkillID_Out, unsigned char *Index_Out, unsigned char *cSkillLevel, Item::ItemPos* itemPos_Out)
{
LPPktSkULAck lpSkULAckPt = (LPPktSkULAck)lpPktBase;
*CharID_Out = lpSkULAckPt->m_dwCharID;
*SkillID_Out = lpSkULAckPt->m_wSkill;
*Index_Out = lpSkULAckPt->m_cIndex;
*cSkillLevel = lpSkULAckPt->m_cSkillLevel;
*itemPos_Out = lpSkULAckPt->m_ItemPos;
return lpSkULAckPt->GetError();
}
unsigned long ParsePacket::HandleCharSkillCreate(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *SkillID_Out, unsigned char *Index_Out)
{
LPPktSk lpSkPt = (LPPktSk)lpPktBase;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
return lpSkPt->GetError();
}
unsigned long ParsePacket::HandleCharSkillErase(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned short *SkillID_Out, unsigned char *Index_Out, Item::ItemPos* itemPos_Out)
{
LPPktSk lpSkPt = (LPPktSk)lpPktBase;
*CharID_Out = lpSkPt->m_dwCharID;
*SkillID_Out = lpSkPt->m_wSkill;
*Index_Out = lpSkPt->m_cIndex;
*itemPos_Out = lpSkPt->m_ItemPos;
return lpSkPt->GetError();
}
unsigned long ParsePacket::HandleCharSummonCmd(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned char *Cmd_Out, unsigned long *TargetID_Out)
{
LPPktSummonCmd lpSuCPtAck = (LPPktSummonCmd)lpPktBase;
*CharID_Out = lpSuCPtAck->m_dwCharID;
*Cmd_Out = lpSuCPtAck->m_cCmd;
*TargetID_Out = lpSuCPtAck->m_dwTargetID;
return lpSuCPtAck->GetError();
}
unsigned long ParsePacket::HandleCharSummon(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned long *TargetID_Out, POS* lpPos_Out)
{
LPPktSummon lpSummonPt = (LPPktSummon)lpPktBase;
*CharID_Out = lpSummonPt->m_dwCharID;
*TargetID_Out = lpSummonPt->m_dwTargetID;
CNetworkPos& netPos = lpSummonPt->m_NetworkPos;
lpPos_Out->fPointX = netPos.GetXPos();
lpPos_Out->fPointY = netPos.GetYPos();
lpPos_Out->fPointZ = netPos.GetZPos();
return lpSummonPt->GetError();
}
unsigned long ParsePacket::HandleCharSpellInfo(PktBase* lpPktBase, unsigned long *CharID_Out,
unsigned char *SpellType_Out, unsigned short *EnchantLevel_Out, unsigned long *EnchantTime_Out,
bool *OnOff_Out)
{
LPPktSpInfo lpSpInfoPt = (LPPktSpInfo)lpPktBase;
*CharID_Out = lpSpInfoPt->m_dwCharID;
*SpellType_Out = lpSpInfoPt->m_cSpellType;
*EnchantLevel_Out = lpSpInfoPt->m_nEnchantLevel;
*EnchantTime_Out = lpSpInfoPt->m_dwEnchantTime;
*OnOff_Out = lpSpInfoPt->m_bOnOff;
return lpSpInfoPt->GetError();
}

View File

@@ -0,0 +1,22 @@
#ifndef _GAMA_CLIENT_PARSE_SKILL_PACKET_H_
#define _GAMA_CLIENT_PARSE_SKILL_PACKET_H_
#include <Item/ItemStructure.h>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktBase;
namespace ParsePacket
{
// <20><>ų
unsigned long HandleCharSkillLock(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out);
unsigned long HandleCharSkillUnLock(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out, unsigned char *SkillLevel_Out, Item::ItemPos* itemPos_Out);
unsigned long HandleCharSkillCreate(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out);
unsigned long HandleCharSkillErase(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned short *SkillID_Out, unsigned char *Index_Out, Item::ItemPos* itemPos_Out);
unsigned long HandleCharSummonCmd(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned char *Cmd_Out, unsigned long *TargetID_Out);
unsigned long HandleCharSummon(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned long *TargetID_Out, POS* lpPos_Out);
unsigned long HandleCharSpellInfo(PktBase* lpPktBase, unsigned long *CharID_Out, unsigned char *SpellType_Out, unsigned short *EnchantLevel_Out, unsigned long *EnchantTime_Out, bool *OnOff_Out);
};
#endif

View File

@@ -0,0 +1,164 @@
#include "stdafx.h"
#include "SendAttack.h"
#include "SendPacket.h"
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CharAttackPacket.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/ClientNetwork/NetworkMsgBlock.h>
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <GameGuardLib/NPGameLib.h>
#include <mmsystem.h>
#include "GMMemory.h"
bool SendPacket::CharAttack(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In,
POS* lpPos_In, float Dir_In, AtType &AtType_In, AtNode &AtNode_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktAt) + ClientSocket::MAX_GAME_GUARD_CRYPT_HEADER_SIZE, lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktAt* lpAtPt = reinterpret_cast<PktAt *>(lpMsgBlock->wr_ptr());
lpAtPt->m_dwCharID = CharID_In;
lpAtPt->m_Postion = *lpPos_In;
lpAtPt->m_fDir = Dir_In;
lpAtPt->m_AtType = AtType_In;
lpAtPt->m_AtNode = AtNode_In;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><>Ŷ <20><>ȣȭ
unsigned short wPacketSize = static_cast<unsigned short>(
EncryptPacket(lpMsgBlock->wr_ptr() + sizeof(PktBase), sizeof(PktAt) - sizeof(PktBase)));
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktBase) + wPacketSize, CmdCharAttack, timeGetTime());
}
bool SendPacket::CharRespawn(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In,
unsigned char cCmd_In, POS& Pos_In, unsigned long dwTownID_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, true);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktRs), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktRs* lpRsPt = reinterpret_cast<PktRs *>(lpMsgBlock->wr_ptr());
lpRsPt->m_dwCharID = CharID_In;
lpRsPt->m_cCmd = cCmd_In;
lpRsPt->m_Position = Pos_In;
lpRsPt->m_dwTownID = dwTownID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktRs), CmdCharRespawn, 0, 0);
}
bool SendPacket::CharRespawnInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, true);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktRs), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktRsInfo* lpPktRsInfo = reinterpret_cast<PktRsInfo*>(lpMsgBlock->wr_ptr());
lpPktRsInfo->m_dwCharID = CharID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktRsInfo), CmdCharRespawnInfo, 0, 0);
}
bool SendPacket::CharRespawnAreaInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned long TownID_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, true);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktRs), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktRsAreaInfo* lpPktRsAreaInfo = reinterpret_cast<PktRsAreaInfo*>(lpMsgBlock->wr_ptr());
lpPktRsAreaInfo->m_dwCharID = CharID_In;
lpPktRsAreaInfo->m_dwTownID = TownID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktRsAreaInfo), CmdCharRespawnAreaInfo, 0, 0);
}
bool SendPacket::CharRespawnWaitQueue(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktRsWaitQueue), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktRsWaitQueue* lpRsWQPt = reinterpret_cast<PktRsWaitQueue *>(lpMsgBlock->wr_ptr());
lpRsWQPt->m_dwCharID = CharID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktRsWaitQueue), CmdCharRespawnWaitQueue, 0, 0);
}
bool SendPacket::CharSwitchHand(ClientNet::CClientEventHandler* lpHandler, unsigned char SelectHand_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktSwEQ), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSwEQ* lpSwHPt = reinterpret_cast<PktSwEQ *>(lpMsgBlock->wr_ptr());
lpSwHPt->m_cType = 0;
lpSwHPt->m_cSelect = SelectHand_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSwEQ), CmdCharSwitchEQ, 0, 0);
}
bool SendPacket::CharPeaceMode(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID_In, bool bPeace_In)
{
CHECK_TRUE_RETURN(0 == dwCharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktPeace), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktPeace* lpPeacePt = reinterpret_cast<PktPeace *>(lpMsgBlock->wr_ptr());
lpPeacePt->m_dwCharID = dwCharID_In;
lpPeacePt->m_bPeace = bPeace_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktPeace), CmdCharPeaceMode, 0, 0);
}
bool SendPacket::CharDuelCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long SenderID_In,
unsigned long RecverID_In, unsigned char Cmd_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktDuC), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktDuC* lpDuCPt = reinterpret_cast<PktDuC *>(lpMsgBlock->wr_ptr());
lpDuCPt->m_dwSenderID = SenderID_In;
lpDuCPt->m_dwRecverID = RecverID_In;
lpDuCPt->m_cCmd = Cmd_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktDuC), CmdCharDuelCmd, 0, 0);
}

View File

@@ -0,0 +1,30 @@
#ifndef _GAMA_CLIENT_SEND_ATTACK_PACKET_H_
#define _GAMA_CLIENT_SEND_ATTACK_PACKET_H_
#include <DB/DBdefine.h>
#include <Network/Packet/PacketStruct/CharAttackPacketStruct.h>
// forward decl.
struct CHAR_CREATE;
class ClientSocket;
namespace ClientNet
{
// forward decl.
class CClientEventHandler;
}
namespace SendPacket
{
bool CharAttack(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, POS* lpPos_In, float Dir_In, AtType &AtType_In, AtNode &AtNode_In);
bool CharRespawn(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned char cCmd_In, POS& Pos_In, unsigned long dwTownID_In);
bool CharRespawnInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In);
bool CharRespawnAreaInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned long TownID_In);
bool CharRespawnWaitQueue(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In);
bool CharPeaceMode(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID_In, bool bPeace_In);
bool CharSwitchHand(ClientNet::CClientEventHandler* lpHandler, unsigned char SelectHand_In);
bool CharDuelCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long SenderID_In, unsigned long RecverID_In, unsigned char Cmd_In);
}
#endif

View File

@@ -0,0 +1,211 @@
#include "stdafx.h"
#include <winsock2.h>
#include <windows.h>
#include "SendPacket.h"
#include "SendAuthServer.h"
#include <DB/DBDefine.h>
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/ClientToAuthServer.h>
#include <Network/Packet/PacketStruct/UnifiedCharPacket.h>
#include <Network/ClientNetwork/NetworkMsgBlock.h>
#include <Network/ClientNetwork/ClientEventHandler.h>
#include "GMMemory.h"
unsigned long GetDiskSerial(char Drv_In)
{
unsigned long VolumeSerial = 0;
char Root[10] = "";
sprintf(Root, "%c:\\", Drv_In);
if(!GetVolumeInformation(Root, 0, 0, &VolumeSerial, 0, 0, 0, 0))
return 0;
return VolumeSerial;
}
bool SendPacket::AuthAccount(ClientSocket& clientSocket, char* UserID_In, char* UserPW_In,
unsigned long ClientVer_In, unsigned long CheckSum_In, unsigned short Flag_In)
{
clientSocket.ClearAddress(ClientSocket::MoveZoneAddr);
ClientNet::CClientEventHandler* lpHandler = &clientSocket.GetHandler(ClientSocket::AuthEventHandler);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktAU), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktAU* lpAUPt = reinterpret_cast<PktAU *>(lpMsgBlock->wr_ptr());
strncpy(lpAUPt->m_UserAccount, UserID_In, PktAU::ID_LEN);
strncpy(lpAUPt->m_UserPassword, UserPW_In, PktAU::PASS_LEN);
lpAUPt->m_dwSessionID = GetDiskSerial('C');
lpAUPt->m_dwClientVer = ClientVer_In;
lpAUPt->m_dwCheckSum = CheckSum_In;
lpAUPt->m_usFlag = Flag_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktAU), CmdAuthAccount, 0, PktBase::NO_SERVER_ERR);
}
bool SendPacket::JapanAuthAccount(ClientSocket& clientSocket, char* UserID_In,
unsigned long dwUID, unsigned long ClientVer_In,
unsigned long CheckSum_In, unsigned short Flag_In)
{
clientSocket.ClearAddress(ClientSocket::MoveZoneAddr);
ClientNet::CClientEventHandler* lpHandler =
&clientSocket.GetHandler(ClientSocket::AuthEventHandler);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktJPAU), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktJPAU* lpJPAUPt = reinterpret_cast<PktJPAU *>(lpMsgBlock->wr_ptr());
strncpy(lpJPAUPt->m_szUserAccount, UserID_In, 16);
lpJPAUPt->m_dwUserID = dwUID;
lpJPAUPt->m_dwSessionID = GetDiskSerial('C');
lpJPAUPt->m_dwClientVer = ClientVer_In;
lpJPAUPt->m_dwCheckSum = CheckSum_In;
lpJPAUPt->m_usFlag = Flag_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktJPAU), CmdJapanAuthAccount, 0, 0);
}
bool SendPacket::UserLogin(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In, unsigned char cLoginType_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktULi), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktULi* lpULiPt = reinterpret_cast<PktULi *>(lpMsgBlock->wr_ptr());
lpULiPt->m_dwUserID = UserID_In;
lpULiPt->m_cLoginType = cLoginType_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktULi), CmdUserLogin, 0);
}
bool SendPacket::CharCreate(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In,
unsigned long SlotNum_In, CHAR_CREATE &Create_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCC), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCC* lpCCPt = reinterpret_cast<PktCC *>(lpMsgBlock->wr_ptr());
lpCCPt->m_dwUserID = UserID_In;
lpCCPt->m_dwSlotNum = SlotNum_In;
lpCCPt->m_CreateChar = Create_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCC), CmdCharCreate, 0, 0);
}
bool SendPacket::CharSelect(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In,unsigned long CharID_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCS), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCS* lpCSPt = reinterpret_cast<PktCS *>(lpMsgBlock->wr_ptr());
lpCSPt->m_dwUserID = UserID_In;
lpCSPt->m_dwCharID = CharID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCS), CmdCharSelect, 0, 0);
}
bool SendPacket::CharDelete(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In,
unsigned long CharID_In, unsigned long SlotNum_In, char* szPassword)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCD), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCD* lpCDPt = reinterpret_cast<PktCD *>(lpMsgBlock->wr_ptr());
lpCDPt->m_dwUserID = UserID_In;
lpCDPt->m_dwCharID = CharID_In;
lpCDPt->m_dwSlotNum = SlotNum_In;
memset(lpCDPt->m_szPassword, 0, STORE_INFO::MAX_PASS_LEN);
memcpy(lpCDPt->m_szPassword, szPassword, STORE_INFO::MAX_PASS_LEN);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCD), CmdCharDelete, 0, 0);
}
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
bool SendPacket::SelectAccountNation(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In,
unsigned char cType, unsigned char cAccountNation_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktSelectAccountNation), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSelectAccountNation* lpSANPt = reinterpret_cast<PktSelectAccountNation*>(lpMsgBlock->wr_ptr());
lpSANPt->m_dwUserID = UserID_In;
lpSANPt->m_cType = cType;
lpSANPt->m_cAccountNation = cAccountNation_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSelectAccountNation), CmdSelectAccountNation, 0, 0);
}
bool SendPacket::UnifiedCharSelect(ClientNet::CClientEventHandler* lpHandler, const char* szPassword,
unsigned long* lpdwCID, unsigned long dwCIDNum,
unsigned char cSelectedStoreServerGroup,
unsigned char cSelectedNation)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktUnifiedCharSelectReq), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
memset(lpMsgBlock->wr_ptr(), 0, sizeof(PktUnifiedCharSelectReq));
PktUnifiedCharSelectReq* lpPktUnifiedCharSelectReq =
reinterpret_cast<PktUnifiedCharSelectReq*>(lpMsgBlock->wr_ptr());
strncpy(lpPktUnifiedCharSelectReq->szPassword,
szPassword, PktUnifiedCharSelectReq::MAX_PASSWORD_LEN);
lpPktUnifiedCharSelectReq->szPassword[PktUnifiedCharSelectReq::MAX_PASSWORD_LEN - 1] = 0;
memcpy(lpPktUnifiedCharSelectReq->dwCID, lpdwCID,
sizeof(unsigned long) * min(USER_INFO::MAX_CHAR_NUM, dwCIDNum));
lpPktUnifiedCharSelectReq->cSelectedServerGroupID = cSelectedStoreServerGroup;
lpPktUnifiedCharSelectReq->cSelectedNation = cSelectedNation;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktUnifiedCharSelectReq), CmdUnifiedCharSelect, 0, 0);
}

View File

@@ -0,0 +1,33 @@
#ifndef _GAMA_CLIENT_SEND_PACKET_H_
#define _GAMA_CLIENT_SEND_PACKET_H_
// forward decl.
class ClientSocket;
struct CHAR_CREATE;
namespace ClientNet
{
// forward decl.
class CClientEventHandler;
}
namespace SendPacket
{
bool AuthAccount(ClientSocket& clientSocket, char* UserID_In, char* UserPW_In, unsigned long ClientVer_In, unsigned long CheckSum_In, unsigned short Flag_In = 0);
bool JapanAuthAccount(ClientSocket& clientSocket, char* UserID_In, unsigned long dwUID, unsigned long ClientVer_In, unsigned long CheckSum_In, unsigned short Flag_In = 0);
bool UserLogin(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In, unsigned char cLoginType_In);
bool CharSelect(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In, unsigned long CharID_In);
bool CharCreate(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In, unsigned long SlotNum_In, CHAR_CREATE &Create_In);
bool CharDelete(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In, unsigned long CharID_In, unsigned long SlotNum_In, char* szPassword);
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
bool SelectAccountNation(ClientNet::CClientEventHandler* lpHandler, unsigned long UserID_In, unsigned char cType, unsigned char cAccountNation_In);
// <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool UnifiedCharSelect(ClientNet::CClientEventHandler* lpHandler, const char* szPassword,
unsigned long* lpdwCID, unsigned long dwCIDNum,
unsigned char cSelectedStoreServerGroup, unsigned char cSelectedNation);
}
#endif

View File

@@ -0,0 +1,103 @@
#include "stdafx.h"
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/BGServerPacket.h>
#include "SendPacket.h"
#include "SendBGServer.h"
#include "GMMemory.h"
bool SendPacket::CharBGServerMapList(ClientNet::CClientEventHandler* lpHandler)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktBGServerMapList), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktBGServerMapList* lpBGSMLPt = reinterpret_cast<PktBGServerMapList *>(lpMsgBlock->wr_ptr());
lpBGSMLPt->m_bAll = true;
lpBGSMLPt->m_cMapInfoNodeNum = PktBGServerMapList::MAX_MAP_NUM;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktBGServerMapList), CmdBGServerMapList, 0, 0);
}
bool SendPacket::CharBGServerResultList(ClientNet::CClientEventHandler* lpHandler)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktBGServerResultList), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktBGServerResultList* lpBGSRLPt = reinterpret_cast<PktBGServerResultList *>(lpMsgBlock->wr_ptr());
lpBGSRLPt->m_bAll = true;
lpBGSRLPt->m_cResultInfoNodeNum = PktBGServerResultList::MAX_MAP_NUM;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktBGServerResultList), CmdBGServerResultList, 0, 0);
}
bool SendPacket::CharBGServerMoveZone(ClientNet::CClientEventHandler* lpHandler, unsigned short wMapNumber, unsigned char cMoveType)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktBGServerMoveZone), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktBGServerMoveZone* lpBGSMZPt = reinterpret_cast<PktBGServerMoveZone *>(lpMsgBlock->wr_ptr());
lpBGSMZPt->m_wMapNumber = wMapNumber;
lpBGSMZPt->m_cMoveType = cMoveType;
lpBGSMZPt->m_cZone = 0;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktBGServerMoveZone), CmdBGServerMoveZone, 0, 0);
}
bool SendPacket::CharBGServerCharSlot(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cGroup)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktBGServerCharSlot), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktBGServerCharSlot* lpBGSCSPt = reinterpret_cast<PktBGServerCharSlot *>(lpMsgBlock->wr_ptr());
lpBGSCSPt->m_dwCID = dwCID;
lpBGSCSPt->m_dwUID = 0;
lpBGSCSPt->m_cGroup = cGroup;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktBGServerCharSlot), CmdBGServerCharSlot, 0, 0);
}
bool SendPacket::CharBGServerMileageChange(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cGroup, unsigned char cCmd,
unsigned long dwMileage)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktBGServerMileageChange), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktBGServerMileageChange* lpBGSMCPt = reinterpret_cast<PktBGServerMileageChange *>(lpMsgBlock->wr_ptr());
lpBGSMCPt->m_dwCID = dwCID;
lpBGSMCPt->m_cGroup = cGroup;
lpBGSMCPt->m_cCmd = cCmd;
lpBGSMCPt->m_dwGold = 0;
lpBGSMCPt->m_dwMileage = dwMileage;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktBGServerMileageChange), CmdBGServerMileageChange, 0, 0);
}

View File

@@ -0,0 +1,22 @@
#ifndef _GAMA_CLIENT_SEND_BATTLEGROUND_SERVER_H_
#define _GAMA_CLIENT_SEND_BATTLEGROUND_SERVER_H_
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
class ClientSocket;
namespace ClientNet
{
class CClientEventHandler;
}
namespace SendPacket
{
bool CharBGServerMapList(ClientNet::CClientEventHandler* lpHandler);
bool CharBGServerResultList(ClientNet::CClientEventHandler* lpHandler);
bool CharBGServerMoveZone(ClientNet::CClientEventHandler* lpHandler, unsigned short wMapNumber, unsigned char cMoveType);
bool CharBGServerCharSlot(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cGroup);
bool CharBGServerMileageChange(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cGroup, unsigned char cCmd, unsigned long dwMileage);
};
#endif

View File

@@ -0,0 +1,169 @@
#include "stdafx.h"
#include "SendPacket.h"
#include "SendCastle.h"
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CastlePacket.h>
#include "GMMemory.h"
bool SendPacket::CharCastleCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCastleID,
unsigned long dwCastleObjectID, unsigned long dwValue1, unsigned long dwValue2, unsigned char cSubCmd)
{
CHECK_TRUE_RETURN(0 == dwCID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCastleCmd), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
LPPktCastleCmd lpCCPt = reinterpret_cast<LPPktCastleCmd>(lpMsgBlock->wr_ptr());
lpCCPt->m_dwCID = dwCID;
lpCCPt->m_dwCastleID = dwCastleID;
lpCCPt->m_dwCastleObjectID = dwCastleObjectID;
lpCCPt->m_dwValue1 = dwValue1;
lpCCPt->m_dwValue2 = dwValue2;
lpCCPt->m_cSubCmd = cSubCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCastleCmd), CmdCastleCmd, 0, 0);
}
bool SendPacket::CharCampCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCampID,
unsigned long dwValue, unsigned long dwValue2, unsigned char cSubCmd)
{
CHECK_TRUE_RETURN(0 == dwCID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCampCmd), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
LPPktCampCmd lpCCPt = reinterpret_cast<LPPktCampCmd>(lpMsgBlock->wr_ptr());
lpCCPt->m_dwCID = dwCID;
lpCCPt->m_dwCampID = dwCampID;
lpCCPt->m_cState = 0;
lpCCPt->m_dwValue1 = dwValue;
lpCCPt->m_dwValue2 = dwValue2;
lpCCPt->m_cSubCmd = cSubCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCampCmd), CmdCampCmd, 0, 0);
}
bool SendPacket::CharSiegeArmsCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwArmsID, unsigned char cSubCmd)
{
CHECK_TRUE_RETURN(0 == dwCID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCampCmd), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
LPPktSiegeArmsCmd lpSACPt = reinterpret_cast<LPPktSiegeArmsCmd>(lpMsgBlock->wr_ptr());
lpSACPt->m_dwCID = dwCID;
lpSACPt->m_dwArmsID = dwArmsID;
lpSACPt->m_cSubCmd = cSubCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSiegeArmsCmd), CmdSiegeArmsCmd, 0, 0);
}
bool SendPacket::CharCastleRight(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCastleID, CastleRight castleRight)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCastleRight), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCastleRight* lpCRPt = reinterpret_cast<PktCastleRight *>(lpMsgBlock->wr_ptr());
lpCRPt->m_dwCID = dwCID;
lpCRPt->m_dwCastleID = dwCastleID;
lpCRPt->m_CastleRight = castleRight;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCastleRight), CmdCastleRight, 0, 0);
}
bool SendPacket::CharCampRight(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCampID, CampRight campRight)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCampRight), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCampRight* lpCRPt = reinterpret_cast<PktCampRight *>(lpMsgBlock->wr_ptr());
lpCRPt->m_dwCID = dwCID;
lpCRPt->m_dwCampID = dwCampID;
lpCRPt->m_CampRight = campRight;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCampRight), CmdCampRight, 0, 0);
}
// <20><> <20><>¡<EFBFBD><C2A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
bool SendPacket::CharTakeCastleJewel(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCastleID, unsigned char cSubCmd,
unsigned short wItemID, unsigned char cIndex, unsigned char cNum, Item::ItemPos pos)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktTakeCastleJewel), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktTakeCastleJewel* lpPktTCJ = reinterpret_cast<PktTakeCastleJewel *>(lpMsgBlock->wr_ptr());
lpPktTCJ->m_dwCID = dwCID;
lpPktTCJ->m_dwCastleID = dwCastleID;
lpPktTCJ->m_cSubCmd = cSubCmd;
lpPktTCJ->m_wItemID = wItemID;
lpPktTCJ->m_cIndex = cIndex;
lpPktTCJ->m_cNum = cNum;
lpPktTCJ->m_Pos = pos;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktTakeCastleJewel), CmdTakeCastleJewel, 0, 0);
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
bool SendPacket::CharTakeMaterial(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCampID, unsigned char cSubCmd,
unsigned char cNum, Item::ItemPos pos)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktTakeMaterial), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktTakeMaterial* lpPktTM = reinterpret_cast<PktTakeMaterial *>(lpMsgBlock->wr_ptr());
lpPktTM->m_dwCID = dwCID;
lpPktTM->m_dwCampID = dwCampID;
lpPktTM->m_cSubCmd = cSubCmd;
lpPktTM->m_cNum = cNum;
lpPktTM->m_Pos = pos;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktTakeMaterial), CmdTakeMaterial, 0, 0);
}
bool SendPacket::WarOnOff(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cFlag, unsigned char cType)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktWarOnOff), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktWarOnOff* lpPktWarOnOff = reinterpret_cast<PktWarOnOff*>(lpMsgBlock->wr_ptr());
lpPktWarOnOff->m_dwCID = dwCID;
lpPktWarOnOff->m_cType = cType;
lpPktWarOnOff->m_cFlag = cFlag;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktWarOnOff), CmdWarOnOff, 0, 0);
}

View File

@@ -0,0 +1,44 @@
#ifndef _GAMA_CLIENT_SEND_CASTLE_PACKET_H_
#define _GAMA_CLIENT_SEND_CASTLE_PACKET_H_
#include <Network/Packet/PacketStruct/CastlePacket.h>
namespace ClientNet
{
// forward decl.
class CClientEventHandler;
}
namespace SendPacket
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
bool CharCastleCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCastleID,
unsigned long dwCastleObjectID, unsigned long dwValue1, unsigned long dwValue2, unsigned char cSubCmd);
bool CharCampCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCampID,
unsigned long dwValue, unsigned long dwValue2, unsigned char cSubCmd);
bool CharSiegeArmsCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwArmsID, unsigned char cSubCmd);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
bool CharCastleRight(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCastleID, CastleRight castleRight);
bool CharCampRight(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCampID, CampRight campRight);
// <20><> <20><>¡<EFBFBD><C2A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
bool CharTakeCastleJewel(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCastleID, unsigned char cSubCmd,
unsigned short wItemID, unsigned char cIndex, unsigned char cNum, Item::ItemPos pos);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
bool CharTakeMaterial(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCampID, unsigned char cSubCmd,
unsigned char cNum, Item::ItemPos pos);
// <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool WarOnOff(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cFlag, unsigned char cType);
};
#endif

View File

@@ -0,0 +1,623 @@
#include "stdafx.h"
#include <Utility/CheckSum/Crc32Static.h>
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Network/Packet/PacketStruct/PartyPacket.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include "SendPacket.h"
#include "SendCommunity.h"
#include "GMMemory.h"
//--------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD>
bool SendPacket::CharCreateGuild(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, char* szGuildName)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktCreateGuild), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCreateGuild* lpCGPt = reinterpret_cast<PktCreateGuild *>(lpMsgBlock->wr_ptr());
lpCGPt->m_dwCID = dwCID;
lpCGPt->m_dwGID = 0; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޴´<DEB4>.
lpCGPt->m_cInclination = 0; // <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
strncpy(lpCGPt->m_szGuildName, szGuildName, Guild::MAX_GUILD_NAME_LEN);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCreateGuild), CmdCreateGuild, 0, 0);
}
bool SendPacket::CharGuildCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwGID,
unsigned long dwSenderID, unsigned long dwReferenceID, unsigned short wCmd)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(
sizeof(PktGuildCmd), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildCmd* lpGCPt = reinterpret_cast<PktGuildCmd *>(lpMsgBlock->wr_ptr());
lpGCPt->m_dwGID = dwGID & ~Guild::MEMBER_WAIT_BIT;
lpGCPt->m_dwSenderID = dwSenderID;
lpGCPt->m_dwReferenceID = dwReferenceID;
lpGCPt->m_wCmd = wCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildCmd), CmdGuildCmd, 0, 0);
}
bool SendPacket::CharGuildMark(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwGID, char* szMark)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildMark), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildMark* lpGMPt= reinterpret_cast<PktGuildMark *>(lpMsgBlock->wr_ptr());
lpGMPt->m_dwCID = dwCID;
lpGMPt->m_dwGID = dwGID;
::memcpy(lpGMPt->m_szMark, szMark, Guild::MAX_MARK_SIZE);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildMark), CmdGuildMark, 0, 0);
}
bool SendPacket::CharGuildLevel(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cLevel)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildLevel), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildLevel* lpGLPt = reinterpret_cast<PktGuildLevel *>(lpMsgBlock->wr_ptr());
lpGLPt->m_dwUID = dwCID;
lpGLPt->m_cLevel = cLevel;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildLevel), CmdGuildLevel, 0, 0);
}
bool SendPacket::CharGuildRelation(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID,
unsigned long dwGID, unsigned long dwTargetGID, unsigned long dwValue, unsigned char cSubCmd)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildRelation), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildRelation* lpGRPt = reinterpret_cast<PktGuildRelation *>(lpMsgBlock->wr_ptr());
lpGRPt->m_dwCID = dwCID;
lpGRPt->m_dwGID = dwGID;
lpGRPt->m_dwTargetGID = dwTargetGID;
lpGRPt->m_dwValue = dwValue;
lpGRPt->m_cSubCmd = cSubCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildRelation), CmdGuildRelation, 0, 0);
}
bool SendPacket::CharGuildInclination(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cInclination)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildInclination), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildInclination* lpGIPt = reinterpret_cast<PktGuildInclination *>(lpMsgBlock->wr_ptr());
lpGIPt->m_dwUID = dwCID;
lpGIPt->m_cInclination = cInclination;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildInclination), CmdGuildInclination, 0, 0);
}
bool SendPacket::CharGuildList(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID,
unsigned char cSortCmd, unsigned char cPage, unsigned char cNodeNum, GuildSmallInfoNode* lpNode)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned short usPacketSize = sizeof(PktGuildList) + sizeof(GuildCheckSumNode) * cNodeNum;
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(usPacketSize, lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildList* lpGLPt = reinterpret_cast<PktGuildList *>(lpMsgBlock->wr_ptr());
lpGLPt->m_dwCID = dwCID;
lpGLPt->m_cSortCmd = cSortCmd;
lpGLPt->m_cPage = cPage;
lpGLPt->m_cSmallNodeNum = cNodeNum;
unsigned short wBufferSize = sizeof(PktGuildList);
for (int nIndex = 0; nIndex < cNodeNum; ++nIndex, ++lpNode)
{
// üũ<C3BC><C5A9><EFBFBD><EFBFBD> <20>̾Ƴ<CCBE><C6B3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
GuildCheckSumNode tempNode;
tempNode.m_dwGID = lpNode->m_dwGID & ~Guild::MEMBER_WAIT_BIT;
CCrc32Static::BufferCrc32(reinterpret_cast<const char *>(lpNode), sizeof(GuildSmallInfoNode),
tempNode.m_dwCheckSum);
CopyMemory(lpMsgBlock->wr_ptr() + wBufferSize, &tempNode, sizeof(GuildCheckSumNode));
wBufferSize += sizeof(GuildCheckSumNode);
}
return SendPacket(lpHandler, lpMsgBlock, usPacketSize, CmdGuildList, 0, 0);
}
bool SendPacket::CharGuildRight(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, GuildRight guildRight)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildRight), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildRight* lpGRPt = reinterpret_cast<PktGuildRight *>(lpMsgBlock->wr_ptr());
lpGRPt->m_dwUID = dwCID;
lpGRPt->m_GuildRight = guildRight;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildRight), CmdGuildRight, 0, 0);
}
bool SendPacket::CharGuildMemberList(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID,
unsigned char cMemberType, unsigned char cSortCmd, unsigned char cPage)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildMemberList), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildMemberList* lpGMLPt = reinterpret_cast<PktGuildMemberList *>(lpMsgBlock->wr_ptr());
lpGMLPt->m_dwCID = dwCID;
lpGMLPt->m_cMemberType = cMemberType;
lpGMLPt->m_cSortCmd = cSortCmd;
lpGMLPt->m_cPage = cPage;
lpGMLPt->m_cTotalMemberNum = 0;
lpGMLPt->m_cNodeNum = 0;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildMemberList), CmdGuildMemberList, 0, 0);
}
bool SendPacket::CharGuildSafe(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwGold, unsigned char cCmd)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildSafe), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildSafe* lpGSPt = reinterpret_cast<PktGuildSafe *>(lpMsgBlock->wr_ptr());
lpGSPt->m_dwCID = dwCID;
lpGSPt->m_dwGold = dwGold;
lpGSPt->m_cCmd = cCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildSafe), CmdGuildSafe, 0, 0);
}
bool SendPacket::CharGuildHostilityList(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID,
unsigned char cCurrentPage, unsigned char cPageState)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildHostilityList), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildHostilityList* lpGHLPt = reinterpret_cast<PktGuildHostilityList *>(lpMsgBlock->wr_ptr());
lpGHLPt->m_dwCID = dwCID;
lpGHLPt->m_cCurrentPage = cCurrentPage;
lpGHLPt->m_cPageState = cPageState;
lpGHLPt->m_cNodeNum = 0;
lpGHLPt->m_wTotalItemNum = 0;
::memset(lpGHLPt->m_szHostility, 0, Guild::MAX_GUILD_NAME_LEN);
::memset(lpGHLPt->m_szAlert, 0, Guild::MAX_GUILD_NAME_LEN);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildHostilityList), CmdGuildHostilityList, 0, 0);
}
bool SendPacket::CharGuildRelationInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwGID)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktGuildRelationInfo), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktGuildRelationInfo* lpGRIPt = reinterpret_cast<PktGuildRelationInfo *>(lpMsgBlock->wr_ptr());
lpGRIPt->m_dwCID = dwCID;
lpGRIPt->m_dwGID = dwGID;
lpGRIPt->m_wNodeNum = 0;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktGuildRelationInfo), CmdGuildRelationInfo, 0, 0);
}
//--------------------------------------------------------------------------------------------------------------
// <20><>Ƽ
bool SendPacket::CharPartyCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long SenderID,
unsigned long ReferenceID, unsigned long PartyID, unsigned short Cmd)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktPC), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktPC* lpPCPt = reinterpret_cast<PktPC *>(lpMsgBlock->wr_ptr());
lpPCPt->m_wCmd = Cmd;
lpPCPt->m_dwPartyID = PartyID;
lpPCPt->m_dwSenderID = SenderID;
lpPCPt->m_dwReferenceID = ReferenceID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktPC), CmdCharPartyCmd, 0, 0);
}
bool SendPacket::CharPartyFind(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktPF), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktPF* lpPFPt = reinterpret_cast<PktPF *>(lpMsgBlock->wr_ptr());
lpPFPt->m_dwCharID = CharID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktPF), CmdCharPartyFind, 0, 0);
}
/*
bool SendPacket::CharPartyMemInfo(ClientSocket& clientSocket, unsigned long CharID,
unsigned long PartyID, unsigned char Class,
char Level, POS Pos,
unsigned short MaxHP, short CurHP,
unsigned short MaxMP, short CurMP,
unsigned long Chant, unsigned long Enchant)
{
ClientNet::CSession& Session = clientSocket.GetSession(ClientSocket::UDPSession);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktPM), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktPM* lpPMPt = reinterpret_cast<PktPM *>(lpMsgBlock->wr_ptr());
lpPMPt->m_dwCharID = CharID;
lpPMPt->m_dwPartyID = PartyID;
lpPMPt->m_cClass = Class;
lpPMPt->m_cLevel = Level;
lpPMPt->m_Position = Pos;
lpPMPt->m_wMaxHP = MaxHP;
lpPMPt->m_sCurrHP = CurHP;
lpPMPt->m_wMaxMP = MaxMP;
lpPMPt->m_sCurrMP = CurMP;
lpPMPt->m_dwChant = Chant;
lpPMPt->m_dwEnchant = Enchant;
lpPMPt->m_PublicAddress = clientSocket.GetAddress(ClientSocket::PublicAddr);
lpPMPt->m_PrivateAddress = clientSocket.GetAddress(ClientSocket::PrivateAddr);
SendUDPList(Session, clientSocket.GetUDPList(ClientSocket::ListType_Party),
clientSocket.IsRealIP(), lpMsgBlock, sizeof(PktPM), CmdCharPartyMemInfo, 0, 0);
return true;
}
bool SendPacket::CharPartyMemAddress(ClientSocket& clientSocket, unsigned long CharID,
unsigned long PartyID, const SOCKADDR_IN& PublicAddress,
const SOCKADDR_IN& PrivateAddress)
{
ClientNet::CSession& Session = clientSocket.GetSession(ClientSocket::UDPSession);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktPMA), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktPMA* lpPMAPt = reinterpret_cast<PktPMA *>(lpMsgBlock->wr_ptr());
lpPMAPt->m_dwCharID = CharID;
lpPMAPt->m_dwPartyID = PartyID;
lpPMAPt->m_PublicAddress = PublicAddress;
lpPMAPt->m_PrivateAddress = PrivateAddress;
SendUDPList(Session, clientSocket.GetUDPList(ClientSocket::ListType_Party),
clientSocket.IsRealIP(), lpMsgBlock, sizeof(PktPMA), CmdCharPartyMemAddress, 0, 0);
return true;
}
*/
//--------------------------------------------------------------------------------------------------------------
// ģ<><C4A3>
bool SendPacket::CharFriendAddRequest(ClientNet::CClientEventHandler* lpHandler, char* szName, PktFriendAddReq::CMD addType)
{
CHECK_NULL_RETURN(szName, false);
// ģ<><C4A3> <20>Ǵ<EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
switch(addType)
{
case PktFriendAddReq::ADD_FRIEND_REQ:
case PktFriendAddReq::BAN_FRIEND_REQ:
break;
default:
return false;
}
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktFriendAddReq), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktFriendAddReq* lpPktFriendAddRequest = reinterpret_cast<PktFriendAddReq*>(lpMsgBlock->wr_ptr());
memset(lpPktFriendAddRequest->m_szName, 0, PktFriendAddReq::MAX_NAME);
memcpy(lpPktFriendAddRequest->m_szName, szName, PktFriendAddReq::MAX_NAME);
lpPktFriendAddRequest->m_dwCID = 0;
lpPktFriendAddRequest->m_cCmd = addType;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktFriendAddReq), CmdFriendAddRequest, 0);
}
bool SendPacket::CharFriendRemoveRequest(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID,
PktFriendRemoveReq::CMD removeType)
{
// ģ<><C4A3> <20>Ǵ<EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktFriendRemoveReq), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktFriendRemoveReq* lpPktFriendRemoveRequest = reinterpret_cast<PktFriendRemoveReq*>(lpMsgBlock->wr_ptr());
lpPktFriendRemoveRequest->m_cCmd = removeType;
lpPktFriendRemoveRequest->m_dwCID = dwCID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktFriendRemoveReq), CmdFriendRemoveRequest, 0);
}
bool SendPacket::CharFriendEtcRequest(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID,
unsigned long dwData, PktFriendEtc::CMD etcType)
{
switch(etcType)
{
case PktFriendEtc::SETGROUP:
break;
default:
return false;
}
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktFriendEtc), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktFriendEtc* lpPktFriendEtc = reinterpret_cast<PktFriendEtc*>(lpMsgBlock->wr_ptr());
lpPktFriendEtc->m_dwCID = dwCID;
lpPktFriendEtc->m_dwData = dwData;
lpPktFriendEtc->m_cCmd = etcType;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktFriendEtc), CmdFriendEtcRequest, 0);
}
//--------------------------------------------------------------------------------------------------------------
// <20><>Ÿ
bool SendPacket::CharFameInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktFI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktFI* lpFIPt = reinterpret_cast<PktFI *>(lpMsgBlock->wr_ptr());
lpFIPt->m_dwCharID = CharID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktFI), CmdCharFameInfo, 0, 0);
}
bool SendPacket::CharRankingInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char cClass, unsigned char cPage)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktRankingInfo), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktRankingInfo* lpRankingInfo = reinterpret_cast<PktRankingInfo* >(lpMsgBlock->wr_ptr());
lpRankingInfo->m_dwCharID = dwCharID;
lpRankingInfo->m_cClass = cClass;
lpRankingInfo->m_cPage = cPage;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktRankingInfo), CmdRankingInfo, 0, 0);
}
bool SendPacket::CharAuthorizePanel(ClientNet::CClientEventHandler* lpHandler, unsigned long dwAffectedID,
unsigned long dwCasterID, unsigned char cCmd)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktAP), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktAP* lpAPPt = reinterpret_cast<PktAP *>(lpMsgBlock->wr_ptr());
lpAPPt->m_dwAffectedID = dwAffectedID;
lpAPPt->m_dwCasterID = dwCasterID;
lpAPPt->m_cCmd = cCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktAP), CmdCharAuthorizePanel, 0, 0);
}
// NewChat - ä<>ü<EFBFBD><C3BC><EFBFBD>
bool SendPacket::CharChat(ClientNet::CClientEventHandler* lpHandler, unsigned char Cmd, char* Message, int MessageSize)
{
unsigned short usPacketLen = static_cast<unsigned short>(sizeof(PktChat) + MessageSize + 1);
CHECK_TRUE_RETURN(NULL == Message || MessageSize <= 0 || PktMaxLen <= usPacketLen, false);
switch (Cmd)
{
case PktChat::NORMAL: // <20><><EFBFBD><EFBFBD>
case PktChat::PARTY: // <20><>Ƽ
case PktChat::DICE: // <20>ֻ<EFBFBD><D6BB><EFBFBD>
case PktChat::GUILD: // <20><><EFBFBD><EFBFBD>
case PktChat::CLIENT_LOG: // <20>α<EFBFBD>
case PktChat::TRADE : // <20>ŷ<EFBFBD>
case PktChat::SHOUT: // <20><>ġ<EFBFBD><C4A1>
case PktChat::ADMIN_NORMAL_CHAT: // <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> <20><>
case PktChat::ADMIN_SHOUT: // <20><EFBFBD><EEBFB5> <20><>ġ<EFBFBD><C4A1>
case PktChat::FIND_PARTY: // <20><>Ƽ ã<><C3A3>
break;
case PktChat::NOTICE: // <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
default:
return false;
}
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(usPacketLen, lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktChat* lpPktChat = reinterpret_cast<PktChat *>(lpMsgBlock->wr_ptr());
lpPktChat->m_dwSenderCID = 0;
lpPktChat->m_usLang = 0;
lpPktChat->m_cCmd = Cmd;
lpPktChat->m_cNum = 0;
*(Message + MessageSize) = NULL;
strncpy(lpMsgBlock->wr_ptr() + sizeof(PktChat), Message, MessageSize + 1);
*(lpMsgBlock->wr_ptr() + sizeof(PktChat) + MessageSize) = NULL;
return SendPacket(lpHandler, lpMsgBlock, usPacketLen, CmdCharChat, 0, 0);
}
bool SendPacket::CharTargetedChat(ClientNet::CClientEventHandler* lpHandler, unsigned char Cmd,
char* TargetNames, int nTargetNamesNum,
char* Message, int MessageSize)
{
const int NAME_LENGTH = 16;
unsigned short usPacketLen = static_cast<unsigned short>(sizeof(PktChat) +
nTargetNamesNum * NAME_LENGTH + MessageSize + 1);
CHECK_TRUE_RETURN(NULL == TargetNames || nTargetNamesNum <= 0 || 100 < nTargetNamesNum ||
NULL == Message || MessageSize <= 0 || PktMaxLen <= usPacketLen, false);
switch (Cmd)
{
case PktChat::FRIEND: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case PktChat::STALL: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD>
case PktChat::CAMP_SHOP: // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD>
break;
default:
return false;
}
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(usPacketLen, lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktChat* lpPktChat = reinterpret_cast<PktChat *>(lpMsgBlock->wr_ptr());
lpPktChat->m_usLang = 0;
lpPktChat->m_cCmd = Cmd;
lpPktChat->m_cNum = nTargetNamesNum;
*(Message + MessageSize) = NULL;
memcpy(lpMsgBlock->wr_ptr() + sizeof(PktChat), TargetNames, nTargetNamesNum * NAME_LENGTH);
strncpy(lpMsgBlock->wr_ptr() + sizeof(PktChat) + nTargetNamesNum * NAME_LENGTH, Message, MessageSize + 1);
*(lpMsgBlock->wr_ptr() + sizeof(PktChat) + nTargetNamesNum * NAME_LENGTH + MessageSize) = NULL;
return SendPacket(lpHandler, lpMsgBlock, usPacketLen, CmdCharChat, 0, 0);
}
bool SendPacket::CharWhisper(ClientNet::CClientEventHandler* lpHandler, char* SenderName,
char *RecverName, char* Message, int MessageSize)
{
unsigned short usPacketLen = static_cast<unsigned short>(sizeof(PktWh) + MessageSize + 1);
CHECK_TRUE_RETURN(SenderName == NULL || RecverName == NULL ||
Message == NULL || MessageSize <= 0 || usPacketLen <= MessageSize, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(usPacketLen, lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktWh* lpWhPt = reinterpret_cast<PktWh *>(lpMsgBlock->wr_ptr());
strncpy(lpWhPt->m_SenderName, SenderName, 16);
strncpy(lpWhPt->m_RecverName, RecverName, 16);
*(Message + MessageSize) = NULL;
CopyMemory(lpMsgBlock->wr_ptr() + sizeof(PktWh), Message, MessageSize);
*(lpMsgBlock->wr_ptr() + sizeof(PktWh) + MessageSize) = NULL;
return SendPacket(lpHandler, lpMsgBlock, usPacketLen, CmdCharWhisper, 0, 0);
}
/* NOT USE
bool SendPacket::CharPartyData(ClientSocket& clientSocket, unsigned long CharID,
unsigned short Cmd, unsigned short Len, void *Data)
{
ClientNet::CSession& Session = clientSocket.GetSession(ClientSocket::UDPSession);
CHECK_TRUE_RETURN(0 == CharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktPMD) + Len, lpHandler->GetPeerAddress());
PktMD* lpMDPt = reinterpret_cast<PktMD *>(lpMsgBlock->wr_ptr());
lpMDPt->m_dwCharID = CharID;
lpMDPt->m_wCmd = Cmd;
lpMDPt->m_wLen = Len;
CopyMemory(lpMsgBlock->wr_ptr() + sizeof(PktMD), Data, Len);
SendUDPList(Session, clientSocket.GetUDPList(ClientSocket::ListType_Party),
clientSocket.IsRealIP(), lpMsgBlock, sizeof(PktPMD) + Len, CmdCharPartyMemData, 0, 0);
return true;
}
*/

View File

@@ -0,0 +1,72 @@
#ifndef _GAMA_CLIENT_COMMUNITY_SEND_H_
#define _GAMA_CLIENT_COMMUNITY_SEND_H_
#include <Network/Packet/PacketStruct/FriendPacket.h>
#include <Network/Packet/PacketStruct/RankingPacket.h>
// forward decl.
class ClientSocket;
struct GuildSmallInfoNode;
struct GuildRight;
struct POS;
namespace ClientNet
{
// forward decl.
class CClientEventHandler;
}
namespace SendPacket
{
// <20><><EFBFBD><EFBFBD>
bool CharCreateGuild(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, char* szGuildName);
bool CharGuildCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwGID, unsigned long dwSenderID, unsigned long dwReferenceID, unsigned short wCmd);
bool CharGuildMark(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwGID, char* szMark);
bool CharGuildLevel(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cLevel);
bool CharGuildRelation(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwGID, unsigned long dwTargetGID, unsigned long dwValue, unsigned char cSubCmd);
bool CharGuildInclination(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cInclination);
bool CharGuildList(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cSortCmd, unsigned char cPage, unsigned char cNodeNum, GuildSmallInfoNode* lpNode);
bool CharGuildRight(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, GuildRight guildRight);
bool CharGuildMemberList(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cMemberType, unsigned char cSortCmd, unsigned char cPage);
bool CharGuildSafe(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwGold, unsigned char cCmd);
bool CharGuildHostilityList(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned char cCurrentPage, unsigned char cPageState);
bool CharGuildRelationInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwGID);
// <20><>Ƽ
bool CharPartyCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long SenderID, unsigned long ReferenceID, unsigned long PartyID, unsigned short Cmd);
bool CharPartyFind(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID);
// ģ<><C4A3>
bool CharFriendAddRequest(ClientNet::CClientEventHandler* lpHandler, char* szName, PktFriendAddReq::CMD addType);
bool CharFriendRemoveRequest(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, PktFriendRemoveReq::CMD removeType);
bool CharFriendEtcRequest(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwData, PktFriendEtc::CMD etcType);
// <20><>Ÿ Ŀ<>´<EFBFBD>Ƽ
bool CharFameInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID);
bool CharRankingInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID, unsigned char cClass, unsigned char cPage);
bool CharAuthorizePanel(ClientNet::CClientEventHandler* lpHandler, unsigned long dwAffectedID, unsigned long dwCasterID, unsigned char cCmd);
bool CharChat(ClientNet::CClientEventHandler* lpHandler, unsigned char Cmd, char* Message, int MessageSize);
bool CharTargetedChat(ClientNet::CClientEventHandler* lpHandler, unsigned char Cmd, char* TargetNames, int nTargetNamesNum, char* Message, int MessageSize);
bool CharWhisper(ClientNet::CClientEventHandler* lpHandler, char* SenderName, char *RecverName, char* Message, int MessageSize);
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------
// UDP Packets
/* NOT USE
// TODO : REMOVE UDP Packets
bool CharPartyMemInfo(ClientSocket& clientSocket, unsigned long CharID,
unsigned long PartyID, unsigned char Class, char Level, POS Pos,
unsigned short MaxHP, short CurHP, unsigned short MaxMP, short CurMP,
unsigned long Chant, unsigned long Enchant);
bool CharPartyMemAddress(ClientSocket& clientSocket, unsigned long CharID,
unsigned long PartyID, const SOCKADDR_IN& PublicAddress,
const SOCKADDR_IN& PrivateAddress);
bool CharPartyData(ClientSocket& clientSocket, unsigned long CharID,
unsigned short Cmd, unsigned short Len, void *Data);
*/
}
#endif

View File

@@ -0,0 +1,207 @@
#include "stdafx.h"
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharConfigPacket.h>
#include <Network/Packet/PacketStruct/CharAdminPacket.h>
#include "SendPacket.h"
#include "SendEtc.h"
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ö󰡸<C3B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
#include <mmsystem.h>
#include "GMMemory.h"
bool SendPacket::SendSysPing(ClientNet::CClientEventHandler* lpHandler)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSyP), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSyP* lpSyPAckPt = reinterpret_cast<PktSyP *>(lpMsgBlock->wr_ptr());
lpSyPAckPt->m_dwTickTime = timeGetTime();
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSyP), CmdSysPing, 0);
}
bool SendPacket::CharSuicide(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSC), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSC* lpSCPt = reinterpret_cast<PktSC *>(lpMsgBlock->wr_ptr());
lpSCPt->m_dwCharID = CharID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSC), CmdCharSuicide, 0, 0);
}
bool SendPacket::CharBindPos(ClientNet::CClientEventHandler* lpHandler, unsigned long NPCID_In,
unsigned char Cmd_In, POS* lpPos_In, char Zone_In)
{
CHECK_TRUE_RETURN(0 == NPCID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktBP), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktBP* lpBPPt = reinterpret_cast<PktBP *>(lpMsgBlock->wr_ptr());
lpBPPt->m_Pos = *lpPos_In;
lpBPPt->m_dwNPCID = NPCID_In;
lpBPPt->m_cCmd = Cmd_In;
lpBPPt->m_cZone = Zone_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktBP), CmdCharBindPosition, 0, 0);
}
bool SendPacket::CharIncreasePoint(ClientNet::CClientEventHandler* lpHandler,
unsigned long CharID_In, unsigned char StateType_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktIP), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktIP* lpIPPt = reinterpret_cast<PktIP *>(lpMsgBlock->wr_ptr());
lpIPPt->m_dwCharID = CharID_In;
lpIPPt->m_cStateType = StateType_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktIP), CmdCharIncreasePoint, 0, 0);
}
bool SendPacket::CharClassUpgrade(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned char ClassID_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCU), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCU* lpCUPt = reinterpret_cast<PktCU *>(lpMsgBlock->wr_ptr());
lpCUPt->m_dwCharID = CharID_In;
lpCUPt->m_cClass = ClassID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCU), CmdCharClassUpgrade, 0, 0);
}
bool SendPacket::CharControlOption(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, RejectOption &Reject_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCOp), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCOp* lpCOpPt = reinterpret_cast<PktCOp *>(lpMsgBlock->wr_ptr());
lpCOpPt->m_dwCharID = CharID_In;
lpCOpPt->m_RejectOption = Reject_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCOp), CmdCharControlOption, 0, 0);
}
bool SendPacket::CharAdmin(ClientNet::CClientEventHandler* lpHandler, unsigned short Cmd_In,
char* Name_In, char Zone_In, char Channel_In,
unsigned short ProtoTypeID, POS& Pos_In, unsigned long dwAmount,unsigned long dwAmount2, unsigned long dwAmount3)
{
CHECK_TRUE_RETURN(NULL == Name_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktAdmin), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktAdmin* lpAdmin = reinterpret_cast<PktAdmin*>(lpMsgBlock->wr_ptr());
lpAdmin->m_usCmd = Cmd_In;
memcpy(lpAdmin->m_stName, Name_In, PktAdmin::MAX_NAME_LEN);
if (0 != ProtoTypeID)
{
lpAdmin->m_usProtoTypeID = ProtoTypeID;
}
else
{
lpAdmin->m_ZoneInfo.m_cZone = Zone_In;
lpAdmin->m_ZoneInfo.m_cChannel = Channel_In;
}
lpAdmin->m_Position = Pos_In;
lpAdmin->m_dwAmount = dwAmount;
lpAdmin->m_dwAmount2 = dwAmount2;
lpAdmin->m_dwAmount3 = dwAmount3;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktAdmin), CmdCharAdminCmd, 0);
}
bool SendPacket::CharStateRedistribution(ClientNet::CClientEventHandler* lpHandler, ChState* lpState_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSR), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSR* lpSRPt = reinterpret_cast<PktSR *>(lpMsgBlock->wr_ptr());
lpSRPt->m_State = *lpState_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSR), CmdCharStateRedistribution, 0, 0);
}
bool SendPacket::CharStatusRetrain(ClientNet::CClientEventHandler* lpHandler, ChState* lpState_In, Item::ItemPos* lpIndex_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSRT), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSRT* lpSRTPt = reinterpret_cast<PktSRT *>(lpMsgBlock->wr_ptr());
lpSRTPt->m_State = *lpState_In;
lpSRTPt->m_ItemPos = *lpIndex_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSRT), CmdCharStatusRetrain, 0, 0);
}
bool SendPacket::CharNameChange(ClientNet::CClientEventHandler* lpHandler, unsigned long dwUID,
unsigned long dwCID, const char* szChangeName)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCharNameChange), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCharNameChange* lpCharNameChange =
reinterpret_cast<PktCharNameChange*>(lpMsgBlock->wr_ptr());
lpCharNameChange->m_dwUID = dwUID;
lpCharNameChange->m_dwCID = dwCID;
lpCharNameChange->m_cNameChangeCount = 0;
strncpy(lpCharNameChange->m_szCharName, szChangeName, CHAR_INFOST::MAX_NAME_LEN);
lpCharNameChange->m_szCharName[CHAR_INFOST::MAX_NAME_LEN - 1] = 0;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCharNameChange), CmdCharNameChange, 0, 0);
}

View File

@@ -0,0 +1,38 @@
#ifndef _GAMA_CLIENT_ETC_SEND_PACKET_H_
#define _GAMA_CLIENT_ETC_SEND_PACKET_H_
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct ChState;
struct POS;
struct RejectOption;
class ClientSocket;
namespace ClientNet
{
class CClientEventHandler;
}
namespace Item
{
struct ItemPos;
}
namespace SendPacket
{
bool SendSysPing(ClientNet::CClientEventHandler* lpHandler);
bool CharAdmin(ClientNet::CClientEventHandler* lpHandler, unsigned short Cmd_In, char* Name_In, char Zone_In, char Channel_In, unsigned short ProtoTypeID, POS& Pos_In, unsigned long dwAmount, unsigned long dwAmount2 = 0, unsigned long dwAmount3 = 0);
bool CharSuicide(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In);
bool CharBindPos(ClientNet::CClientEventHandler* lpHandler, unsigned long NPCID_In, unsigned char Cmd_In, POS* lpPos_In, char Zone_In);
bool CharStateRedistribution(ClientNet::CClientEventHandler* lpHandler, ChState* lpState_In);
bool CharControlOption(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, RejectOption &Reject_In);
bool CharIncreasePoint(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned char StateType_In);
bool CharClassUpgrade(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned char ClassID_In);
bool CharStatusRetrain(ClientNet::CClientEventHandler* lpHandler, ChState* lpState_In, Item::ItemPos* lpIndex_In);
bool CharNameChange(ClientNet::CClientEventHandler* lpHandler, unsigned long dwUID,
unsigned long dwCID, const char* szChangeName);
}
#endif

View File

@@ -0,0 +1,637 @@
#include "stdafx.h"
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CharItemPacket.h>
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Item/Item.h>
#include "SendPacket.h"
#include "SendItem.h"
#include "GMMemory.h"
bool SendPacket::CharPickUp(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
unsigned __int64 nObjectID, Item::ItemPos Index)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktPU), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktPU* lpPUPt = reinterpret_cast<PktPU *>(lpMsgBlock->wr_ptr());
lpPUPt->m_dwCharID = dwCharID;
lpPUPt->m_nObjectID = nObjectID;
lpPUPt->m_itemPos = Index;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktPU), CmdCharPickUp, 0, 0);
}
bool SendPacket::CharPullDown(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
Item::ItemPos Index, unsigned char cNum)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktPD), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktPD* lpPDPt = reinterpret_cast<PktPD *>(lpMsgBlock->wr_ptr());
lpPDPt->m_dwCharID = dwCharID;
lpPDPt->m_itemPos = Index;
lpPDPt->m_cNum = cNum;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktPD), CmdCharPullDown, 0, 0);
}
bool SendPacket::CharTakeItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, TakeType TakeType)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktTI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktTI* lpTIPt = reinterpret_cast<PktTI *>(lpMsgBlock->wr_ptr());
lpTIPt->m_dwCharID = dwCharID;
lpTIPt->m_TakeType = TakeType;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktTI), CmdCharTakeItem, 0, 0);
}
bool SendPacket::CharSwapItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
TakeType SrcType, TakeType DstType)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSwI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSwI* lpSwIPt = reinterpret_cast<PktSwI *>(lpMsgBlock->wr_ptr());
lpSwIPt->m_dwCharID = dwCharID;
lpSwIPt->m_SwapSrc = SrcType;
lpSwIPt->m_SwapDst = DstType;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSwI), CmdCharSwapItem, 0, 0);
}
bool SendPacket::CharTradeItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
unsigned long dwNPCID, unsigned char cCmd,
unsigned short wItemID, TakeType TakeType, Item::ItemPos CouponPos,
Item::CItem* lpItem)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktTr) + Item::MAX_ITEM_SIZE, lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktTr* lpTrPt = reinterpret_cast<PktTr *>(lpMsgBlock->wr_ptr());
lpTrPt->m_dwCustomerID = dwCharID;
lpTrPt->m_dwOwnerID = dwNPCID;
lpTrPt->m_cCmd = cCmd;
lpTrPt->m_wBuyItemID = wItemID;
lpTrPt->m_TakeType = TakeType;
lpTrPt->m_CouponPos = CouponPos;
size_t nItemSize = 0;
if (NULL != lpItem)
{
nItemSize = Item::MAX_ITEM_SIZE;
if (false == lpItem->SerializeOut(lpMsgBlock->wr_ptr() + sizeof(PktTr), nItemSize))
{
return false;
}
}
lpTrPt->m_wSize = static_cast<unsigned short>(nItemSize);
return SendPacket(lpHandler, lpMsgBlock, static_cast<unsigned short>(sizeof(PktTr) + nItemSize),
CmdCharTradeItem, 0, 0);
}
bool SendPacket::CharEquipShopInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned long dwNPCID,
unsigned char cRace, unsigned char cTabPage)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktEquipShopInfo), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktEquipShopInfo* lpESIPt = reinterpret_cast<PktEquipShopInfo *>(lpMsgBlock->wr_ptr());
lpESIPt->m_dwCharID = dwCharID;
lpESIPt->m_dwNPCID = dwNPCID;
lpESIPt->m_cRace = cRace;
lpESIPt->m_cTabPage = cTabPage;
lpESIPt->m_cNum = 0;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktEquipShopInfo), CmdCharEquipShopInfo, 0, 0);
}
bool SendPacket::CharRepairItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwNPCID, Item::ItemPos* lpIndex)
{
CHECK_TRUE_RETURN(0 == dwNPCID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktRpI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktRpI* lpRpIPt = reinterpret_cast<PktRpI *>(lpMsgBlock->wr_ptr());
lpRpIPt->m_dwCharID = dwNPCID;
lpRpIPt->m_itemPos = *lpIndex;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktRpI), CmdCharRepairItem, 0, 0);
}
bool SendPacket::CharRepairAllItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwNPCID)
{
CHECK_TRUE_RETURN(0 == dwNPCID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktRpAI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktRpAI* lpRpAIPt = reinterpret_cast<PktRpAI *>(lpMsgBlock->wr_ptr());
lpRpAIPt->m_dwCharID = dwNPCID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktRpAI), CmdCharRepairAllItem, 0, 0);
}
bool SendPacket::CharUseItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwSenderID,
unsigned long dwRecverID, Item::ItemPos* lpIndex)
{
CHECK_TRUE_RETURN(0 == dwSenderID || 0 == dwRecverID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktUI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktUI* lpUIPt = reinterpret_cast<PktUI *>(lpMsgBlock->wr_ptr());
lpUIPt->m_dwSender = dwSenderID;
lpUIPt->m_dwRecver = dwRecverID;
lpUIPt->m_itemPos = *lpIndex;
lpUIPt->m_cRemainItemNum = 0; // <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktUI), CmdCharUseItem, 0, 0);
}
bool SendPacket::CharCastObject(ClientNet::CClientEventHandler* lpHandler, unsigned long dwSenderID,
unsigned long dwRecverID, CastObject &CastObject)
{
CHECK_TRUE_RETURN(0 == dwSenderID || 0 == dwRecverID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCO), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCO* lpCOPt = reinterpret_cast<PktCO *>(lpMsgBlock->wr_ptr());
lpCOPt->m_dwSenderID = dwSenderID;
lpCOPt->m_dwReceiverID = dwRecverID;
lpCOPt->m_sCastObject = CastObject;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCO), CmdCharCastObject, 0, 0);
}
bool SendPacket::CharInstallSocket(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket)
{
CHECK_TRUE_RETURN(0 == dwCharID || NULL == lpEquipIndex || NULL == lpSocket, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktIS), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktIS* lpISPt = reinterpret_cast<PktIS *>(lpMsgBlock->wr_ptr());
lpISPt->m_dwCharID = dwCharID;
lpISPt->m_equipPos = *lpEquipIndex;
lpISPt->m_gemPos = *lpSocket;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktIS), CmdCharInstallSocket, 0, 0);
}
bool SendPacket::CharRuneInstallSocket(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char ucRunePos,
Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket)
{
CHECK_TRUE_RETURN(0 == dwCharID || NULL == lpEquipIndex || NULL == lpSocket, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktIRS), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktIRS* lpIRSPt = reinterpret_cast<PktIRS *>(lpMsgBlock->wr_ptr());
/*char pos = PktIRS::RUNE_POS_RUNE1;
if( ucRunePos == 1 )
pos = PktIRS::RUNE_POS_RUNE2;*/
lpIRSPt->m_dwCharID = dwCharID;
lpIRSPt->m_equipPos = *lpEquipIndex;
lpIRSPt->m_runePos = *lpSocket;
//lpIRSPt->m_cRuneSocketPos = pos ;
lpIRSPt->m_cType = PktIRS::RUNE_INSTALL ;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktIRS), CmdCharInstallRuneSocket, 0, 0);
}
bool SendPacket::CharRuneRemoveSocket(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char ucRunePos,
Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket)
{
CHECK_TRUE_RETURN(0 == dwCharID || NULL == lpEquipIndex || NULL == lpSocket, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktIRS), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktIRS* lpIRSPt = reinterpret_cast<PktIRS *>(lpMsgBlock->wr_ptr());
/*char pos = PktIRS::RUNE_POS_RUNE1;
if( ucRunePos == 1 )
pos = PktIRS::RUNE_POS_RUNE2;*/
lpIRSPt->m_dwCharID = dwCharID;
lpIRSPt->m_equipPos = *lpEquipIndex;
lpIRSPt->m_runePos = *lpSocket;
//lpIRSPt->m_cRuneSocketPos = pos ;
lpIRSPt->m_cType = PktIRS::RUNE_UNINSTALL ;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktIRS), CmdCharInstallRuneSocket, 0, 0);
}
bool SendPacket::CharItemChemical(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
Item::ItemPos* lpPickkingPos, Item::ItemPos* lpTargetPos, unsigned char cPickkingNum)
{
CHECK_TRUE_RETURN(0 == dwCharID || NULL == lpPickkingPos || NULL == lpTargetPos, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktItemChemical), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktItemChemical* lpICPt = reinterpret_cast<PktItemChemical *>(lpMsgBlock->wr_ptr());
lpICPt->m_dwCharID = dwCharID;
lpICPt->m_pickkingPos = *lpPickkingPos;
lpICPt->m_targetPos = *lpTargetPos;
lpICPt->m_cPickkingNum = cPickkingNum;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktItemChemical), CmdCharItemChemical, 0, 0);
}
bool SendPacket::CharUpgradeItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwNPCID)
{
CHECK_TRUE_RETURN(0 == dwNPCID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktUgI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktUgI* lpUgIPt = reinterpret_cast<PktUgI *>(lpMsgBlock->wr_ptr());
lpUgIPt->m_dwNPCID = dwNPCID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktUgI), CmdCharUpgradeItem, 0, 0);
}
bool SendPacket::CharItemOptionGraft(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char cAttributeType)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktItemOptionGraft), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktItemOptionGraft* lpIOGPt = reinterpret_cast<PktItemOptionGraft *>(lpMsgBlock->wr_ptr());
lpIOGPt->m_dwCharID = dwCharID;
lpIOGPt->m_cAttributeType = cAttributeType;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktItemOptionGraft), CmdCharItemOptionGraft, 0, 0);
}
bool SendPacket::CharItemCompensation(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktItemCompensation), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktItemCompensation* lpICPt = reinterpret_cast<PktItemCompensation *>(lpMsgBlock->wr_ptr());
lpICPt->m_dwCharID = dwCharID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktItemCompensation), CmdCharItemCompensation, 0, 0);
}
bool SendPacket::CharSplitItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, TakeType &TakeType)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSplt), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSplt* lpSpltPt = reinterpret_cast<PktSplt *>(lpMsgBlock->wr_ptr());
lpSpltPt->m_dwCharID = dwCharID;
lpSpltPt->m_TakeType = TakeType;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSplt), CmdCharSplitItem, 0, 0);
}
bool SendPacket::CharAutoRouting(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
unsigned __int64 nObjectID, unsigned short wItemID, Item::ItemPos Index)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktAutoRouting), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktAutoRouting* lpARPt = reinterpret_cast<PktAutoRouting *>(lpMsgBlock->wr_ptr());
lpARPt->m_dwCharID = dwCharID;
lpARPt->m_nObjectID = nObjectID;
lpARPt->m_wItemID = wItemID;
lpARPt->m_itemPos = Index;
lpARPt->m_cCmd = (TakeType::TS_INVEN == Index.m_cPos) ?
PktAutoRouting::ARC_POSSIBLE : PktAutoRouting::ARC_IMPOSSIBLE;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktAutoRouting), CmdCharAutoRouting, 0, 0);
}
bool SendPacket::StoreLogin(ClientNet::CClientEventHandler* lpHandler, char *Password, char PassSave)
{
CHECK_TRUE_RETURN(NULL == Password, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktDeposit), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktDeposit* lpDeposit = reinterpret_cast<PktDeposit*>(lpMsgBlock->wr_ptr());
lpDeposit->m_cCmd = PktDeposit::LOGIN;
memcpy(&lpDeposit->m_szData[0], Password, Deposit::PASSWORD_LENGTH);
lpDeposit->m_szData[4] = PassSave;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktDeposit), CmdDeposit, 0);
}
bool SendPacket::StoreLogout(ClientNet::CClientEventHandler* lpHandler)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktDeposit), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktDeposit* lpDeposit = reinterpret_cast<PktDeposit*>(lpMsgBlock->wr_ptr());
lpDeposit->m_cCmd = PktDeposit::LOGOUT;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktDeposit), CmdDeposit, 0);
}
bool SendPacket::StoreBuyTab(ClientNet::CClientEventHandler* lpHandler, char TabNum)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktDeposit), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktDeposit* lpDeposit = reinterpret_cast<PktDeposit*>(lpMsgBlock->wr_ptr());
lpDeposit->m_cCmd = PktDeposit::BUY_TAB;
lpDeposit->m_szData[0] = TabNum;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktDeposit), CmdDeposit, 0);
}
bool SendPacket::StoreChangePass(ClientNet::CClientEventHandler* lpHandler, char *Password, char *NewPassword)
{
CHECK_TRUE_RETURN(NULL == Password || NULL == NewPassword, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktDeposit), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktDeposit* lpDeposit = reinterpret_cast<PktDeposit*>(lpMsgBlock->wr_ptr());
lpDeposit->m_cCmd = PktDeposit::CHANGE_PASS;
memcpy(&lpDeposit->m_szData[0], Password, Deposit::PASSWORD_LENGTH);
memcpy(&lpDeposit->m_szData[4], NewPassword, Deposit::PASSWORD_LENGTH);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktDeposit), CmdDeposit, 0);
}
bool SendPacket::CharStallOpen(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, char* StallName)
{
CHECK_TRUE_RETURN(NULL == StallName || 0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktStO), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktStO* lpStOPt = reinterpret_cast<PktStO *>(lpMsgBlock->wr_ptr());
lpStOPt->m_dwCharID = dwCharID;
strncpy(lpStOPt->m_StallName, StallName, PktStO::MAX_STALL_NAME_LEN);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktStO), CmdCharStallOpen, 0, 0);
}
bool SendPacket::CharStallRegisterItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned long dwShopID,
TakeType TakeType, unsigned long dwPrice, unsigned char cCmd)
{
CHECK_TRUE_RETURN(0 == dwCharID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktStRI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktStRI* lpStRIPt = reinterpret_cast<PktStRI *>(lpMsgBlock->wr_ptr());
lpStRIPt->m_dwCharID = dwCharID;
lpStRIPt->m_dwShopID = dwShopID;
lpStRIPt->m_TakeType = TakeType;
lpStRIPt->m_dwPrice = dwPrice;
lpStRIPt->m_cCmd = cCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktStRI), CmdCharStallRegisterItem, 0, 0);
}
bool SendPacket::CharStallEnter(ClientNet::CClientEventHandler* lpHandler,
unsigned long dwCustomerID, unsigned long dwOwner)
{
CHECK_TRUE_RETURN(0 == dwCustomerID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktStE), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktStE* lpStEPt = reinterpret_cast<PktStE *>(lpMsgBlock->wr_ptr());
lpStEPt->m_dwCustomerID = dwCustomerID;
lpStEPt->m_dwOwnerID = dwOwner;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktStE), CmdCharStallEnter, 0, 0);
}
bool SendPacket::CharTakeItems(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
unsigned char cTakeNum, TakeType* lpTakeTypes)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktTIs) + sizeof(TakeType) * cTakeNum, lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktTIs* lpTIsPt = reinterpret_cast<PktTIs *>(lpMsgBlock->wr_ptr());
lpTIsPt->m_dwCharID = dwCharID;
lpTIsPt->m_TakeNum = cTakeNum;
CopyMemory(lpMsgBlock->wr_ptr() + sizeof(PktTIs), lpTakeTypes, sizeof(TakeType) * cTakeNum);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktTIs) + sizeof(TakeType) * cTakeNum, CmdCharTakeItems, 0, 0);
}
bool SendPacket::CharTakeGold(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID,
unsigned char cSrcPos, unsigned char cDstPos, unsigned long dwGold)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktTG), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktTG* lpTGPt = reinterpret_cast<PktTG *>(lpMsgBlock->wr_ptr());
lpTGPt->m_dwCharID = dwCharID;
lpTGPt->m_cSrcPos = cSrcPos;
lpTGPt->m_cDstPos = cDstPos;
lpTGPt->m_dwGold = dwGold;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktTG), CmdCharTakeGold, 0, 0);
}
bool SendPacket::CharExchangeCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwSenderID,
unsigned long dwRecverID, unsigned char cCmd)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktExC), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktExC* lpExCPt = reinterpret_cast<PktExC *>(lpMsgBlock->wr_ptr());
lpExCPt->m_dwSenderID = dwSenderID;
lpExCPt->m_dwRecverID = dwRecverID;
lpExCPt->m_cCmd = cCmd;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktExC), CmdCharExchangeCmd, 0, 0);
}
bool SendPacket::CharQuickSlotMove(ClientNet::CClientEventHandler* lpHandler,
TakeType &TakeType, unsigned short usSkillID)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktQSM), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktQSM* lpQSMPt = reinterpret_cast<PktQSM *>(lpMsgBlock->wr_ptr());
lpQSMPt->m_TakeType = TakeType;
lpQSMPt->m_usSkillID = usSkillID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktQSM), CmdCharQuickSlotMove, 0, 0);
}
bool SendPacket::CharCastObjectInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwSenderID,
unsigned long dwRecverID, CastObject &CastObject)
{
CHECK_TRUE_RETURN(0 == dwSenderID || 0 == dwRecverID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCOInfo), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCOInfo* lpCOInfoPt = reinterpret_cast<PktCOInfo *>(lpMsgBlock->wr_ptr());
lpCOInfoPt->m_dwSenderID = dwSenderID;
lpCOInfoPt->m_dwReceiverID = dwRecverID;
lpCOInfoPt->m_sCastObject = CastObject;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCOInfo), CmdCharCastObjectInfo, 0, 0);
}

View File

@@ -0,0 +1,63 @@
#ifndef _GAMA_CLIENT_SEND_ITEM_H_
#define _GAMA_CLIENT_SEND_ITEM_H_
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct TakeType;
struct CastObject;
class ClientSocket;
namespace ClientNet
{
class CClientEventHandler;
}
namespace Item
{
class CItem;
struct ItemPos;
}
namespace SendPacket
{
bool CharPickUp(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned __int64 nObjectID, Item::ItemPos Index);
bool CharPullDown(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, Item::ItemPos Index, unsigned char cNum);
bool CharTakeItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, TakeType TakeType);
bool CharSwapItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, TakeType SrcType, TakeType DstType);
bool CharTradeItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned long dwNPCID, unsigned char cCmd, unsigned short wItemID, TakeType TakeType, Item::ItemPos CouponPos, Item::CItem* lpItem);
bool CharEquipShopInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned long dwNPCID, unsigned char cRace, unsigned char cTabPage);
bool CharRepairItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwNPCID, Item::ItemPos* lpIndex);
bool CharRepairAllItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwNPCID);
bool CharUseItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwSenderID, unsigned long dwRecver, Item::ItemPos* lpIndex);
bool CharCastObject(ClientNet::CClientEventHandler* lpHandler, unsigned long dwSenderID, unsigned long dwRecverID, CastObject &CastObject);
bool CharInstallSocket(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket);
bool CharRuneInstallSocket(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char ucRunePos, Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket);
bool CharRuneRemoveSocket(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char ucRunePos, Item::ItemPos* lpEquipIndex, Item::ItemPos* lpSocket);
bool CharItemChemical(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, Item::ItemPos* lpPickkingPos, Item::ItemPos* lpTargetPos, unsigned char cPickkingNum);
bool CharUpgradeItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwNPCID);
bool CharItemOptionGraft(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char cAttributeType);
bool CharItemCompensation(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID);
bool CharSplitItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, TakeType &TakeType);
bool CharAutoRouting(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned __int64 nObjectID, unsigned short wItemID, Item::ItemPos Index);
bool StoreLogin(ClientNet::CClientEventHandler* lpHandler, char *Password, char PassSave);
bool StoreLogout(ClientNet::CClientEventHandler* lpHandler);
bool StoreBuyTab(ClientNet::CClientEventHandler* lpHandler, char TabNum);
bool StoreChangePass(ClientNet::CClientEventHandler* lpHandler, char *Password, char *NewPassword);
bool CharStallOpen(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, char* StallName);
bool CharStallRegisterItem(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned long dwShopID, TakeType TakeType, unsigned long dwPrice, unsigned char cCmd);
bool CharStallEnter(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCustomerID, unsigned long dwOwner);
bool CharTakeItems(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char cTakeNum, TakeType* lpTakeTypes);
bool CharTakeGold(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID, unsigned char cSrcPos, unsigned char cDstPos, unsigned long dwGold);
bool CharExchangeCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long dwSenderID, unsigned long dwRecverID, unsigned char cCmd);
bool CharQuickSlotMove(ClientNet::CClientEventHandler* lpHandler, TakeType &TakeType, unsigned short usSkillID);
bool CharCastObjectInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwSenderID,
unsigned long dwRecverID, CastObject &CastObject);
};
#endif

View File

@@ -0,0 +1,126 @@
#include "stdafx.h"
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Network/Packet/PacketStruct/CharLoginoutPacket.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <Network/Packet/PacketStruct/GuildPacket.h>
#include "SendPacket.h"
#include "SendLoginout.h"
#include "GMMemory.h"
bool SendPacket::CharLogin(ClientSocket& clientSocket, unsigned long dwUID,
unsigned long dwCID, unsigned long dwSessionID)
{
clientSocket.ClearAddress(ClientSocket::MoveZoneAddr);
CHECK_TRUE_RETURN(0 == dwUID || 0 == dwCID, false);
ClientNet::CClientEventHandler* lpHandler =
&clientSocket.GetHandler(ClientSocket::GameEventHandler);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCLi), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCLi* lpCLiPt = reinterpret_cast<PktCLi *>(lpMsgBlock->wr_ptr());
lpCLiPt->m_dwSessionID = dwSessionID;
lpCLiPt->m_dwUserID = dwUID;
lpCLiPt->m_dwCharID = dwCID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCLi), CmdCharLogin, 0, 0);
}
bool SendPacket::CharLogout(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCloseReason)
{
CHECK_TRUE_RETURN(0 == dwCID, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCLo), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCLo* lpCLoPt = reinterpret_cast<PktCLo *>(lpMsgBlock->wr_ptr());
lpCLoPt->m_dwCharID = dwCID;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCLo), CmdCharLogout, 0, 0);
}
// sphawk : ä<><C3A4> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -1<><31> <20>־<EFBFBD> <20>ּ<EFBFBD><D6BC><EFBFBD>.
bool SendPacket::CharMoveZone(ClientNet::CClientEventHandler* lpHandler, char cZone, char cChannel, POS& NewPos_In)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSZMv), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSZMv* lpSZMvPt = reinterpret_cast<PktSZMv *>(lpMsgBlock->wr_ptr());
lpSZMvPt->m_cChannel = cChannel;
lpSZMvPt->m_cZone = cZone;
lpSZMvPt->m_NewPos = NewPos_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSZMv), CmdCharMoveZone, 0, 0);
}
bool SendPacket::ServerZone(ClientNet::CClientEventHandler* lpHandler, char cZone,char cChannel)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSZ), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktSZ* lpSZPt = reinterpret_cast<PktSZ *>(lpMsgBlock->wr_ptr());
lpSZPt->m_cZone = cZone;
lpSZPt->m_cChannel = cChannel;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSZ), CmdServerZone, 0, 0);
}
bool SendPacket::CSAuthReturnCode(ClientNet::CClientEventHandler* lpHandler,
unsigned long dwCID, unsigned long dwAuthCodeType,
unsigned long dwReturnCode, const _GG_AUTH_DATA* lpAnswerCode)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCSAuth), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCSAuth* lpCSAuthPt = reinterpret_cast<PktCSAuth *>(lpMsgBlock->wr_ptr());
lpCSAuthPt->m_dwCharID = dwCID;
lpCSAuthPt->m_AuthCodeType = dwAuthCodeType;
lpCSAuthPt->m_dwAuthCode = dwReturnCode;
lpCSAuthPt->m_AuthCode2 = *lpAnswerCode;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCSAuth), CmdCSAuth, 0, 0);
}
bool SendPacket::KeyInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long* pKeyInfo)
{
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktKeyInfo), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktKeyInfo* lpKeyInfo = reinterpret_cast<PktKeyInfo*>(lpMsgBlock->wr_ptr());
lpKeyInfo->m_dwCID = dwCID;
memcpy(lpKeyInfo->m_dwKeyInfo, pKeyInfo, sizeof(unsigned long)*PktKeyInfo::MAX_KEY_INFO);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktKeyInfo), CmdKeyInfo, 0, 0);
}

View File

@@ -0,0 +1,29 @@
#ifndef _GAMA_CLIENT_SEND_LOGIN_OUT_H_
#define _GAMA_CLIENT_SEND_LOGIN_OUT_H_
#include <DB/DBDefine.h>
struct _GG_AUTH_DATA;
class ClientSocket;
namespace ClientNet
{
class CClientEventHandler;
}
namespace SendPacket
{
bool CharLogin(ClientSocket& clientSocket, unsigned long dwUID, unsigned long dwCID, unsigned long dwSessionID);
bool CharLogout(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long dwCloseReason);
bool CharMoveZone(ClientNet::CClientEventHandler* lpHandler, char cZone, char cChannel, POS& NewPos_In);
bool ServerZone(ClientNet::CClientEventHandler* lpHandler, char cZone, char cChannel);
// AuthCodeType<70><65><31><C8A4> 2<><32>
bool CSAuthReturnCode(ClientNet::CClientEventHandler* lpHandler,
unsigned long dwCID, unsigned long dwAuthCodeType,
unsigned long dwReturnCode, const _GG_AUTH_DATA* lpAnswerCode);
bool KeyInfo(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCID, unsigned long* pKeyInfo);
};
#endif

View File

@@ -0,0 +1,160 @@
#include "stdafx.h"
#include "SendMove.h"
#include "SendPacket.h"
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/ClientSocket/ClientSocket.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/AddressPacket.h>
#include <Network/Packet/PacketStruct/CharMovePacket.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <mmsystem.h>
#include "GMMemory.h"
// TODO : ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD> <20>ܺο<DCBA><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
// TODO : 1<>и<EFBFBD><D0B8><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UDP<44><50>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
/*
bool SendPacket::CharMoveUpdate(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In,
bool SitMode_In, POS* Pos_In, float Dir_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktMU), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktMU* lpMUPt = reinterpret_cast<PktMU *>(lpMsgBlock->wr_ptr());
lpMUPt->m_dwTick = timeGetTime(); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ƾ
lpMUPt->m_bSitMode = SitMode_In;
lpMUPt->m_Position = *Pos_In;
lpMUPt->m_fDir = Dir_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktMU), CmdCharMoveUpdate, 0, 0);
}
bool SendPacket::CharUpdateAddress(ClientSocket& clientSocket, unsigned long CharID_In)
{
ClientNet::CSession& Session = clientSocket.GetSession(ClientSocket::UDPSession);
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktUA), INET_Addr(
reinterpret_cast<SOCKADDR&>(clientSocket.GetAddress(ClientSocket::GameServerUDPAddr)), sizeof(SOCKADDR_IN)), CmdCharUpdateAddress);
CHECK_NULL_RETURN(lpMsgBlock, false);
PktUA* lpUAPt = reinterpret_cast<PktUA *>(lpMsgBlock->wr_ptr());
lpUAPt->m_dwCharID = CharID_In;
lpUAPt->m_PrivateAddress = clientSocket.GetAddress(ClientSocket::PrivateAddr);
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktUA), CmdCharUpdateAddress, 0, 0);
}
bool SendPacket::CharAddressInfo(ClientSocket& clientSocket, unsigned long CharID_In, unsigned long TargetID_In)
{
ClientNet::CSession& Session = clientSocket.GetSession(ClientSocket::UDPSession);
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktAI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktAI* lpAIPt = reinterpret_cast<PktAI *>(lpMsgBlock->wr_ptr());
lpAIPt->m_AddressInfo.m_dwCharID = CharID_In;
lpAIPt->m_AddressInfo.m_PublicAddress = clientSocket.GetAddress(ClientSocket::PublicAddr);
lpAIPt->m_AddressInfo.m_PrivateAddress = clientSocket.GetAddress(ClientSocket::PrivateAddr);
SendUDPList(Session, clientSocket.GetUDPList(ClientSocket::ListType_Client),
TargetID_In, lpMsgBlock, sizeof(PktAI), CmdCharAddressInfo, 0, 0);
return true;
}
bool SendPacket::CharMove(ClientSocket& clientSocket, unsigned long CharID_In, POS* Pos_In,
float Dir_In, unsigned short UAct_In, unsigned short LAct_In,
char Level_In, unsigned long ChantEf_In, unsigned long EnchantEf_In)
{
ClientNet::CSession& Session = clientSocket.GetSession(ClientSocket::UDPSession);
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktMV), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktMV* lpMVPt = reinterpret_cast<PktMV *>(lpMsgBlock->wr_ptr());
lpMVPt->m_dwCharID = CharID_In;
lpMVPt->m_Position = *Pos_In;
lpMVPt->m_fDir = Dir_In;
lpMVPt->m_wUAct = UAct_In;
lpMVPt->m_wLAct = LAct_In;
lpMVPt->m_wLevel = Level_In;
lpMVPt->m_dwChantEf = ChantEf_In;
lpMVPt->m_dwEnchantEf = EnchantEf_In;
SendUDPList(Session, clientSocket.GetUDPList(ClientSocket::ListType_Instance),
clientSocket.IsRealIP(), lpMsgBlock, sizeof(PktMV), CmdCharMove, 0, 0);
clientSocket.DeleteInstanceUDPList();
return true;
}
*/
bool SendPacket::CharMoveEx(ClientSocket& clientSocket, unsigned long CharID_In,
CNetworkPos& netPos, unsigned char UAct_In, unsigned char LAct_In)
{
ClientNet::CClientEventHandler* lpHandler = &clientSocket.GetHandler(ClientSocket::GameEventHandler);
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktMVEx), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktMVEx* lpPktMVEx = reinterpret_cast<PktMVEx*>(lpMsgBlock->wr_ptr());
lpPktMVEx->m_NetworkPos = netPos;
lpPktMVEx->m_cUAct = UAct_In;
lpPktMVEx->m_cLAct = LAct_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktMVEx), CmdCharMove, CharID_In);
}
/* NOT USE
bool SendPacket::CharRequireInfo(ClientSocket& clientSocket, unsigned long SenderID_In,
unsigned long TargetID_In, unsigned char Cmd_In)
{
ClientNet::CSession& Session = clientSocket.GetSession(ClientSocket::UDPSession);
CHECK_TRUE_RETURN(0 == SenderID_In || 0 == TargetID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktRI), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktRI* lpRIPt = reinterpret_cast<PktRI *>(lpMsgBlock->wr_ptr());
lpRIPt->m_dwCharID = SenderID_In;
lpRIPt->m_cCmd = Cmd_In;
lpRIPt->m_PublicAddress = clientSocket.GetAddress(ClientSocket::PublicAddr);
lpRIPt->m_PrivateAddress = clientSocket.GetAddress(ClientSocket::PrivateAddr);
SendUDPList(Session, clientSocket.GetUDPList(ClientSocket::ListType_Client),
TargetID_In, lpMsgBlock, sizeof(PktRI), CmdCharRequireInfo, 0, 0);
return true;
}
*/

View File

@@ -0,0 +1,34 @@
#ifndef _GAMA_CLIENT_SEND_MOVE_H_
#define _GAMA_CLIENT_SEND_MOVE_H_
#include <Network/Address/INET_Addr.h>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
class ClientSocket;
class CNetworkPos;
struct POS;
namespace ClientNet
{
// forward decl.
class CClientEventHandler;
}
namespace SendPacket
{
bool CharMoveUpdate(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, bool SitMode_In, POS* Pos_In, float Dir_In);
bool CharMoveEx(ClientSocket& clientSocket, unsigned long CharID_In,
CNetworkPos& netPos, unsigned char UAct_In, unsigned char LAct_In);
/* DEPLECATED
// TODO : REMOVE UDP Packets
bool CharUpdateAddress(ClientSocket& clientSocket, unsigned long CharID_In);
bool CharAddressInfo(ClientSocket& clientSocket, unsigned long CharID_In, unsigned long TargetID_In);
bool CharMove(ClientSocket& clientSocket, unsigned long CharID_In, POS* Pos_In, float Dir_In, unsigned short UAct_In,
unsigned short LAct_In, char Level_In, unsigned long ChantEf_In, unsigned long EnchantEf_In);
bool CharRequireInfo(ClientSocket& clientSocket, unsigned long SenderID_In, unsigned long TargetID_In, unsigned char Cmd_In);
*/
};
#endif

View File

@@ -0,0 +1,41 @@
#include "stdafx.h"
#include "../ClientSocket.h"
#include "SendPacket.h"
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/ClientNetwork/NetworkMsgBlock.h>
#include "GMMemory.h"
bool SendPacket::SendPacket(ClientNet::CClientEventHandler* lpHandler,
ClientNet::CNetworkMsgBlock* lpNetworkMsgBlock,
unsigned short Len_In, unsigned char Cmd_In,
unsigned short State_In, unsigned short Error_In)
{
if (0 != lpNetworkMsgBlock &&
lpNetworkMsgBlock->WrapCrypt(Len_In, Cmd_In, State_In, Error_In) &&
!ClientSocket::IsNSFlagChainChecked(Cmd_In))
{
ClientSocket::SetNSFlagOn( Cmd_In );
lpHandler->SendPacket(lpNetworkMsgBlock);
return true;
}
ClientNet::CNetworkMsgPool::GetInstance().FreeNetworkMsgBlock(lpNetworkMsgBlock);
return false;
}
bool SendPacket::SendPacket(ClientNet::CClientEventHandler* lpHandler,
ClientNet::CNetworkMsgBlock* lpNetworkMsgBlock,
unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In)
{
if (0 != lpNetworkMsgBlock &&
lpNetworkMsgBlock->WrapCrypt(Len_In, Cmd_In, Tick_In) &&
!ClientSocket::IsNSFlagChainChecked(Cmd_In))
{
ClientSocket::SetNSFlagOn( Cmd_In );
lpHandler->SendPacket(lpNetworkMsgBlock);
return true;
}
ClientNet::CNetworkMsgPool::GetInstance().FreeNetworkMsgBlock(lpNetworkMsgBlock);
return false;
}

View File

@@ -0,0 +1,45 @@
#ifndef _GAMA_CLIENT_PACKET_SEND_H_
#define _GAMA_CLIENT_PACKET_SEND_H_
#include <cstdio>
#define _QUOTE(x) # x
#define QUOTE(x) _QUOTE(x)
#ifdef _DEBUG
#define CHECK_NULL_RETURN(value, retval)\
if(0 == (value)) { fprintf(stderr, QUOTE(__FUNCTION__) " - " QUOTE(value) " is NULL\n"); return (retval); }
#define CHECK_TRUE_RETURN(value, retval)\
if((value)) { fprintf(stderr, QUOTE(__FUNCTION__) " - " QUOTE(value) " is TRUE\n"); return (retval); }
#else
#define CHECK_NULL_RETURN(value, retval) if(0 == (value)) { return (retval); }
#define CHECK_TRUE_RETURN(value, retval) if((value)) { return (retval); }
#endif
namespace ClientNet
{
// forward decl.
class CClientEventHandler;
class CNetworkMsgBlock;
}
namespace SendPacket
{
bool SendPacket(ClientNet::CClientEventHandler* lpHandler,
ClientNet::CNetworkMsgBlock* lpNetworkMsgBlock,
unsigned short Len_In, unsigned char Cmd_In,
unsigned short State_In, unsigned short Error_In);
bool SendPacket(ClientNet::CClientEventHandler* lpHandler,
ClientNet::CNetworkMsgBlock* lpNetworkMsgBlock,
unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In);
};
#endif

View File

@@ -0,0 +1,69 @@
#include "stdafx.h"
#include "SendPacket.h"
#include "SendQuest.h"
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CharQuestPacket.h>
#include "GMMemory.h"
bool SendPacket::CharStartQuest(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID_In,
unsigned long dwNPCID_In, unsigned short wQuestID_In)
{
CHECK_TRUE_RETURN(0 == dwCharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktStartQuest), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktStartQuest* lpSQPt = reinterpret_cast<PktStartQuest *>(lpMsgBlock->wr_ptr());
lpSQPt->m_dwCharID = dwCharID_In;
lpSQPt->m_dwNPCID = dwNPCID_In;
lpSQPt->m_wQuestID = wQuestID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktStartQuest), CmdCharStartQuest, 0, 0);
}
bool SendPacket::CharCancelQuest(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID_In, unsigned short wQuestID_In)
{
CHECK_TRUE_RETURN(0 == dwCharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktCancelQuest), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktCancelQuest* lpCQPt = reinterpret_cast<PktCancelQuest *>(lpMsgBlock->wr_ptr());
lpCQPt->m_dwCharID = dwCharID_In;
lpCQPt->m_wQuestID = wQuestID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktCancelQuest), CmdCharCancelQuest, 0, 0);
}
bool SendPacket::CharOperateTrigger(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID_In, unsigned short wQuestID_In,
unsigned char cPhase_In, unsigned char cTriggerKind_In, unsigned char cTrigger_In, unsigned char cCount_In)
{
CHECK_TRUE_RETURN(0 == dwCharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktOperateTrigger), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
PktOperateTrigger* lpOTPt = reinterpret_cast<PktOperateTrigger *>(lpMsgBlock->wr_ptr());
lpOTPt->m_dwCharID = dwCharID_In;
lpOTPt->m_wQuestID = wQuestID_In;
lpOTPt->m_cPhase = cPhase_In;
lpOTPt->m_cTriggerKind = cTriggerKind_In;
lpOTPt->m_cTrigger = cTrigger_In;
lpOTPt->m_cCount = cCount_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktOperateTrigger), CmdCharOperateTrigger, 0, 0);
}

View File

@@ -0,0 +1,19 @@
#ifndef _GAMA_CLIENT_SEND_QUEST_H_
#define _GAMA_CLIENT_SEND_QUEST_H_
namespace ClientNet
{
// forward decl.
class CClientEventHandler;
}
namespace SendPacket
{
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
bool CharStartQuest(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID_In, unsigned long dwNPCID_In, unsigned short wQuestID_In);
bool CharCancelQuest(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID_In, unsigned short wQuestID_In);
bool CharOperateTrigger(ClientNet::CClientEventHandler* lpHandler, unsigned long dwCharID_In, unsigned short wQuestID_In, unsigned char cPhase_In,
unsigned char cTriggerKind_In, unsigned char cTrigger_In, unsigned char cCount_In);
}
#endif

View File

@@ -0,0 +1,69 @@
#include "stdafx.h"
#include "SendPacket.h"
#include "SendSkill.h"
#include <Network/ClientNetwork/ClientEventHandler.h>
#include <Network/Packet/PacketCommand.h>
#include <Network/Packet/PacketStruct/CharStatusPacket.h>
#include <Network/Packet/PacketStruct/CharAttackPacket.h>
#include "GMMemory.h"
bool SendPacket::CharSkillCreate(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In,
unsigned short SkillID_In, unsigned char Index_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSk), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
LPPktSk lpSkPt = reinterpret_cast<LPPktSk>(lpMsgBlock->wr_ptr());
lpSkPt->m_dwCharID = CharID_In;
lpSkPt->m_wSkill = SkillID_In;
lpSkPt->m_cIndex = Index_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSk), CmdCharSkillCreate, 0, 0);
}
bool SendPacket::CharSkillErase(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In,
unsigned short SkillID_In, unsigned char Index_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSk), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
LPPktSk lpSkPt = reinterpret_cast<LPPktSk>(lpMsgBlock->wr_ptr());
lpSkPt->m_dwCharID = CharID_In;
lpSkPt->m_wSkill = SkillID_In;
lpSkPt->m_cIndex = Index_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSk), CmdCharSkillErase, 0, 0);
}
bool SendPacket::CharSummonCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In,
unsigned char Cmd_In, unsigned long TargetID_In)
{
CHECK_TRUE_RETURN(0 == CharID_In, false);
ClientNet::CNetworkMsgBlock* lpMsgBlock =
ClientNet::CNetworkMsgPool::GetInstance().GetNetworkMsgBlock(sizeof(PktSummonCmd), lpHandler->GetPeerAddress());
CHECK_NULL_RETURN(lpMsgBlock, false);
LPPktSummonCmd lpSuCPt = reinterpret_cast<LPPktSummonCmd>(lpMsgBlock->wr_ptr());
lpSuCPt->m_dwCharID = CharID_In;
lpSuCPt->m_cCmd = Cmd_In;
lpSuCPt->m_dwTargetID = TargetID_In;
return SendPacket(lpHandler, lpMsgBlock, sizeof(PktSummonCmd), CmdCharSummonCmd, 0, 0);
}

View File

@@ -0,0 +1,21 @@
#ifndef _GAMA_CLIENT_SEND_SKILL_PACKET_H_
#define _GAMA_CLIENT_SEND_SKILL_PACKET_H_
#include <Item/ItemStructure.h>
namespace ClientNet
{
// forward decl.
class CClientEventHandler;
}
namespace SendPacket
{
bool CharSkillCreate(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned short SkillID_In, unsigned char Index_In);
bool CharSkillErase(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned short SkillID_In, unsigned char Index_In);
bool CharSummonCmd(ClientNet::CClientEventHandler* lpHandler, unsigned long CharID_In, unsigned char Cmd_In, unsigned long TargetID_In = 0);
};
#endif

View File

@@ -0,0 +1,357 @@
/*
///////////////////////////////////////////////////////////////////////////////////////////////
//
// UDPList
//
///////////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "UDPList.h"
UDPList::UDPList(void)
{
}
UDPList::~UDPList(void)
{
}
DWORD UDPList::InsertIntoAddressList(DWORD CharID_In, const SOCKADDR_IN& PubAddress_In,
const SOCKADDR_IN& PriAddress_In, PEERTYPE PeerType_In)
{
LPUDP_LIST lpList = SearchFromAddressList(CharID_In);
if(lpList != NULL)
{
lpList->CharID = CharID_In;
lpList->PublicAddress = PubAddress_In;
lpList->PrivateAddress = PriAddress_In;
lpList->PeerType = PeerType_In;
return 1;
}
lpList = Create();
if(lpList != NULL)
{
lpList->CharID = CharID_In;
lpList->PublicAddress = PubAddress_In;
lpList->PrivateAddress = PriAddress_In;
lpList->PeerType = PeerType_In;
InsertToList(lpList);
return 2;
}
return 0;
}
bool UDPList::DeleteFromAddressList(DWORD CharID_In)
{
LPUDP_LIST lpList = SearchFromAddressList(CharID_In);
if(lpList != NULL)
{
DeleteFromList(lpList);
return true;
}
return false;
}
bool UDPList::DeleteFromAddressList(const SOCKADDR_IN& Address_In)
{
LPUDP_LIST lpList = SearchFromAddressList(Address_In);
if(lpList != NULL)
{
DeleteFromList(lpList);
return true;
}
return false;
}
LPUDP_LIST UDPList::SearchFromAddressList(DWORD CharID_In)
{
LPUDP_LIST lpList;
lpList = m_pListHead;
while(lpList)
{
if(lpList->CharID == CharID_In)
return lpList;
lpList = lpList->pNext;
}
return NULL;
}
LPUDP_LIST UDPList::SearchFromAddressList(const SOCKADDR_IN& Address_In)
{
LPUDP_LIST lpList;
lpList = m_pListHead;
while(lpList)
{
if(lpList->PrivateAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr && lpList->PrivateAddress.sin_port == Address_In.sin_port)
return lpList;
if(lpList->PublicAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr && lpList->PublicAddress.sin_port == Address_In.sin_port)
return lpList;
lpList = lpList->pNext;
}
return NULL;
}
*/
///////////////////////////////////////////////////////////////////////////////////////////////
//
// UDPList
//
///////////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "UDPList.h"
#include "GMMemory.h"
UDPList::UDPList(void)
: m_nMaxGarbageStackLength(0)
{
}
UDPList::~UDPList(void)
{
DeleteAllFromList();
ClearGarbageStack();
}
DWORD UDPList::InsertIntoAddressList(DWORD CharID_In, const SOCKADDR_IN& PubAddress_In,
const SOCKADDR_IN& PriAddress_In, PEERTYPE PeerType_In)
{
LPUDP_LIST lpList = SearchFromAddressList(CharID_In);
if(NULL == lpList)
{
if(m_GarbageList.empty())
{
lpList = new UDP_LIST;
}
else
{
lpList = m_GarbageList.front();
m_GarbageList.pop_front();
}
if(lpList != NULL)
{
lpList->CharID = CharID_In;
lpList->PublicAddress = PubAddress_In;
lpList->PrivateAddress = PriAddress_In;
lpList->PeerType = PeerType_In;
lpList->MoveTick = 0;
m_UDP_List.push_back(lpList);
return 1;
}
}
else
{
lpList->PublicAddress = PubAddress_In;
lpList->PrivateAddress = PriAddress_In;
lpList->PeerType = PeerType_In;
lpList->MoveTick = 0;
return 2;
}
return 0;
}
DWORD UDPList::InsertIntoAddressList(UDP_LIST* lpUDP_List)
{
LPUDP_LIST lpList = SearchFromAddressList(lpUDP_List->CharID);
if(NULL == lpList)
{
if(m_GarbageList.empty())
{
lpList = new UDP_LIST;
}
else
{
lpList = m_GarbageList.front();
m_GarbageList.pop_front();
}
if(lpList != NULL)
{
*lpList = *lpUDP_List;
m_UDP_List.push_back(lpList);
return 1;
}
}
else
{
*lpList = *lpUDP_List;
return 2;
}
return 0;
}
bool UDPList::DeleteFromAddressList(DWORD CharID_In)
{
STDLIST::iterator pos = m_UDP_List.begin();
STDLIST::iterator end = m_UDP_List.end();
for(;pos != end; ++pos)
{
LPUDP_LIST lpList = (*pos);
if(lpList->CharID == CharID_In)
{
m_UDP_List.erase(pos);
if(m_GarbageList.size() < m_nMaxGarbageStackLength)
{
m_GarbageList.push_back(lpList);
}
else
{
delete lpList;
}
return true;
}
}
return false;
}
bool UDPList::DeleteFromAddressList(const SOCKADDR_IN& Address_In)
{
STDLIST::iterator pos = m_UDP_List.begin();
STDLIST::iterator end = m_UDP_List.end();
for(;pos != end; ++pos)
{
LPUDP_LIST lpList = (*pos);
bool bDelete = false;
if(lpList->PrivateAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr &&
lpList->PrivateAddress.sin_port == Address_In.sin_port)
{
bDelete = true;
}
if(lpList->PublicAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr &&
lpList->PublicAddress.sin_port == Address_In.sin_port)
{
bDelete = true;
}
if(bDelete)
{
m_UDP_List.erase(pos);
if(m_GarbageList.size() < m_nMaxGarbageStackLength)
{
m_GarbageList.push_back(lpList);
}
else
{
delete lpList;
}
}
}
return false;
}
LPUDP_LIST UDPList::SearchFromAddressList(DWORD CharID_In)
{
STDLIST::iterator pos = m_UDP_List.begin();
STDLIST::iterator end = m_UDP_List.end();
for(;pos != end; ++pos)
{
LPUDP_LIST lpList = (*pos);
if(lpList->CharID == CharID_In)
{
return lpList;
}
}
return NULL;
}
LPUDP_LIST UDPList::SearchFromAddressList(const SOCKADDR_IN& Address_In)
{
STDLIST::iterator pos = m_UDP_List.begin();
STDLIST::iterator end = m_UDP_List.end();
for(;pos != end; ++pos)
{
LPUDP_LIST lpList = (*pos);
if(lpList->PrivateAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr &&
lpList->PrivateAddress.sin_port == Address_In.sin_port)
{
return lpList;
}
if(lpList->PublicAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr &&
lpList->PublicAddress.sin_port == Address_In.sin_port)
{
return lpList;
}
}
return NULL;
}
void UDPList::DeleteAllFromList()
{
STDLIST::iterator pos = m_UDP_List.begin();
STDLIST::iterator end = m_UDP_List.end();
for(;pos != end; ++pos)
{
LPUDP_LIST lpList = (*pos);
if(m_GarbageList.size() < m_nMaxGarbageStackLength)
{
m_GarbageList.push_back(lpList);
}
else
{
delete lpList;
}
}
m_UDP_List.clear();
}
void UDPList::SetGarbageStackLength(size_t StackLength_In)
{
m_nMaxGarbageStackLength = StackLength_In;
}
void UDPList::ClearGarbageStack(void)
{
STDLIST::iterator pos = m_GarbageList.begin();
STDLIST::iterator end = m_GarbageList.end();
for(;pos != end; ++pos)
{
delete (*pos);
}
m_GarbageList.clear();
}

View File

@@ -0,0 +1,78 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// UDPList
//
///////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _GAMA_CLIENT_UDP_ADDRESS_LIST_H_
#define _GAMA_CLIENT_UDP_ADDRESS_LIST_H_
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <winsock.h>
#include <list>
enum PEERTYPE
{
Not_Defined = 0, // <20><><EFBFBD><EFBFBD> <20>ȵ<EFBFBD>
REAL_IP, // <20><><EFBFBD><EFBFBD> IP
NAT_Friendly, // <20><><EFBFBD><EFBFBD> IP (<28><><EFBFBD><EFBFBD> NAT)
NAT_Different // <20><><EFBFBD><EFBFBD> IP (<28>ٸ<EFBFBD> NAT)
};
typedef struct UDP_LIST* LPUDP_LIST;
struct UDP_LIST
{
DWORD CharID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
PEERTYPE PeerType; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
SOCKADDR_IN PublicAddress; // <20>ּ<EFBFBD> Public
SOCKADDR_IN PrivateAddress; // <20>ּ<EFBFBD> Private
DWORD MoveTick; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>
};
///////////////////////////////////////////////////////////////////////////////////////////////
//
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//
///////////////////////////////////////////////////////////////////////////////////////////////
class UDPList
{
public:
typedef std::list<UDP_LIST*> STDLIST;
UDPList();
~UDPList();
DWORD InsertIntoAddressList(DWORD CharID_In, const SOCKADDR_IN& PubAddress_In,
const SOCKADDR_IN& PriAddress_In, PEERTYPE PeerType_In);
DWORD InsertIntoAddressList(UDP_LIST* lpUDP_List);
bool DeleteFromAddressList(DWORD CharID_In);
bool DeleteFromAddressList(const SOCKADDR_IN& Address_In);
void DeleteAllFromList();
bool IsListEmpty() { return m_UDP_List.empty(); }
size_t GetListCount() { return m_UDP_List.size(); }
LPUDP_LIST SearchFromAddressList(DWORD CharID_In);
LPUDP_LIST SearchFromAddressList(const SOCKADDR_IN& Address_In);
void SetGarbageStackLength(size_t StackLength_In);
void ClearGarbageStack(void);
STDLIST::iterator begin() { return m_UDP_List.begin(); }
STDLIST::iterator end() { return m_UDP_List.end(); }
protected:
STDLIST m_UDP_List;
STDLIST m_GarbageList;
size_t m_nMaxGarbageStackLength;
};
#endif