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,140 @@
#ifndef _CHAT_TOOL_PACKET_COMMAND_H_
#define _CHAT_TOOL_PACKET_COMMAND_H_
#include <Network/Packet/PacketBase.h>
#include <Network/Packet/PacketCommand.h>
#include <DB/DBDefine.h>
//! ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><> <20><>Ŷ <20><> <20><>Ŷ Ŀ<>ǵ带 <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
namespace ChatToolCMD
{
enum CMD
{
Authorize = 1,
ChangeOption = 2,
ChatSend = 3,
ChatRequest = 4,
ChatAdminStatus = 5,
ChatPing = CmdSysPing
};
};
#pragma pack(1)
namespace ChatToolPkt
{
enum Const
{
MAX_USER_ID = 16,
MAX_PASSWORD = 16,
MAX_CHAR_NAME = 16,
TARGET_UID = 0,
TARGET_CHARNAME = 1,
TARGET_ACCOUNTNAME = 2
};
//! Request : fill UserID/Passsword
//! Result : fill m_cResult( 1 : success / 0 : failed )
struct Authorize : public PktBase
{
char m_szUserID[MAX_USER_ID];
char m_szPassword[MAX_PASSWORD];
unsigned char m_cResult;
};
//! ChatServer -> ChatTool : fill all data + chatting message;
struct ChatDataSend : public PktBase
{
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwServerID; // <20><><EFBFBD><EFBFBD> ID<49><44> 0<><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
// <20>̶<EFBFBD><CCB6><EFBFBD> UID/CID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UID/CID<49><44><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
char m_szSenderName[CHAR_INFOST::MAX_NAME_LEN];
char m_szTargetName[CHAR_INFOST::MAX_NAME_LEN];
unsigned short m_usXPos;
unsigned short m_usZPos;
unsigned short m_usLang;
unsigned char m_cChatType;
unsigned char m_cChatMsgLen;
unsigned char m_cRace; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ӳ<EFBFBD>
};
//! ChatTool -> ChatServer : ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
struct ChatRequest : public PktBase
{
enum ERR
{
PACKET_ERROR = 1,
NONE_CHARACTER = 2, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
char m_szAdminName[MAX_CHAR_NAME]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EEBFB5> <20≯<EFBFBD>.
char m_szTargetName[MAX_CHAR_NAME]; // <20>ӼӸ<D3BC><D3B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. (ij<><C4B3><EFBFBD><EFBFBD> Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
unsigned long m_dwUID; // <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> UID (TargetName<6D><65> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
unsigned long m_dwCID; // <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> CID
unsigned long m_dwMessageID; // <20>޽<EFBFBD><DEBD><EFBFBD> ID. <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
unsigned char m_cTargetType; // UID / CharName / AccountName <20><> <20>ϳ<EFBFBD>
unsigned char m_cChatType;
unsigned char m_cChatMsgLen;
};
//! Request : fill m_cChatOption
//! Result : none
struct ChatOption : public PktBase
{
enum Options
{
DO_LISTEN = 0, // <20><><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31> <20><><EFBFBD><EFBFBD>.
LISTEN_NORMAL_CHAT = 1,
LISTEN_PARTY_CHAT = 2,
LISTEN_FRIEND_CHAT = 3,
LISTEN_GUILD_CHAT = 4,
LISTEN_STALL_CHAT = 5,
LISTEN_SHOUT_CHAT = 6,
LISTEN_ADMIN_NORMAL_CHAT = 7, // <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD> ä<><C3A4> (Ack<63>θ<EFBFBD> <20><><EFBFBD><EFBFBD>)
LISTEN_ADMIN_SHOUT = 8, // <20><EFBFBD><EEBFB5> <20><>ġ<EFBFBD><C4A1> (Ack<63>θ<EFBFBD> <20><><EFBFBD><EFBFBD>)
LISTEN_WHISPER_CHAT = 9,
LISTEN_NOTICE = 10,
LISTEN_TRADE_CHAT = 11,
LISTEN_DICE_CHAT = 12,
MAX_OPTION = 20
};
unsigned char m_cChatOption[MAX_OPTION];
};
struct ChatAdminStatus : public PktBase
{
enum Status
{
LOGIN = 0,
LOGOUT = 1
};
char m_szChatAdminName[MAX_USER_ID];
unsigned char m_cChangeStatus;
};
};
#pragma pack()
#endif

View File

@@ -0,0 +1,329 @@
#ifndef _MANAGE_PACKET_COMMAND_H_
#define _MANAGE_PACKET_COMMAND_H_
#include <winsock2.h>
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
#include <Network/Packet/PacketBase.h>
#include <Network/Packet/PacketCommand.h>
#include <ctime>
namespace ServerManage
{
namespace CMD
{
enum CMDType
{
// ManageClient, ManageServer, ManageTool <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ Ŀ<>ǵ<EFBFBD>.
UpdateRunList = 0x00, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> (ManageServer -> ManageClient, ManageTool), Ack<63><6B><EFBFBD><EFBFBD>.
RunProcess = 0x01, // <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. (ManageTool -> ManageServer -> ManageClient), Ack<63><6B> <20>ݴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
QuitProcess = 0x02, // <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. (ManageTool -> ManageServer -> ManageClient), Ack<63><6B> <20>ݴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ForceTerminate = 0x03, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. (ManageTool -> ManageServer -> ManageClient), Ack<63><6B> <20>ݴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ProcessStatus = 0x04, // <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (ManageClient -> ManageServer -> ManageTool), Ack<63><6B><EFBFBD><EFBFBD>.
RelayCommand = 0x05, // <20><>Ŷ Ŀ<>ǵ带 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><20>߰<EFBFBD><DFB0>ؼ<EFBFBD> <20>ѱ<EFBFBD><D1B1><EFBFBD>.
AutoPatch = 0x06, // <20>ڱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><>ġ<EFBFBD>Ѵ<EFBFBD>
ChangeSetup = 0x07, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲٰ<D9B2> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
ReloadSetup = 0x08, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD><CEB5>Ѵ<EFBFBD>.
ExecuteCommand = 0x09, // <20>ܼ<EFBFBD> Ŀ<>ǵ带 <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// ManageServer <-> ManageTool
AuthUser = 0x10, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
AddUser = 0x11, // <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
DelUser = 0x12, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ModUser = 0x13, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
RequestUserReaction = 0x14, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20>Ǵܿ<C7B4> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>.(usSubCommand Ȱ<><C8B0>)
RequestPromote = 0x15, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ǰڴٰ<DAB4> <20><><EFBFBD><EFBFBD>
ManagerInfo = 0x16, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
// ManageServer -> ManageTool
UserList = 0x20, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ(<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
UserLogin = 0x21, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
UserLogout = 0x22, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE><C6BF><EFBFBD><EFBFBD><EFBFBD>)
StatServerStatus= 0x23, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><E8BCAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¸<EFBFBD> <20>ش<EFBFBD>.
// ManageClient <-> Each Server
IPC_ManagePing = 0x30, // Each Server -> ManageClient (Alive<76><65><EFBFBD><EFBFBD> <20><> Window Name<6D><65> <20>ش<EFBFBD>)
// ManageTool <-> ManageServer
Ping = CmdSysPing
};
enum RelaySubCmd
{
// UserInfo
SubCmd_ServerUserNum = 0x01
};
enum UserReactionSubCmd
{
// Promote
REQUEST_TAKEBACK_PROMOTE = 0x01,
ACK_TAKEBACK_PROMOTE = 0x02,
NAK_TAKEBACK_PROMOTE = 0x03
};
enum UserStatCMD
{
UPDATE_USER_STATUS = 0x01
};
};
#pragma pack(1)
// <20><>Ŷ <20>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>, <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>پ<EFBFBD> <20>´<EFBFBD>.
// <20><><EFBFBD><EFBFBD> <20><>Ŷ : ExecuteFile, RelayCommand, AutoPatch,
// ChangeSetup, ReloadSetup
//
struct ManageCommand : public PktBase
{
enum AutoPatchFlag
{
AUTOPATCH_OPENFILE = 1,
AUTOPATCH_DATA = 2
};
unsigned int nMessage; // <20>޽<EFBFBD><DEBD><EFBFBD> <20><>ȣ
WPARAM wParam; // <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>1
LPARAM lParam; // <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>2
unsigned long dwRunID; // Ÿ<><C5B8> RunID
unsigned short usFlags; // <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD>
unsigned short usDataLen; // <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
enum ManageCommandError
{
INVALID_MANAGE_PACKET_ERROR = 0,
CANNOT_FIND_CLIENT_DISPATCH = 1,
SEND_MANAGE_COMMAND_ERROR = 2,
UNKNOWN_RUN_INFO = 3,
INVALID_MANAGE_RIGHTS = 4
};
enum UpdateRunInfoFlags
{
SEND_RUNINFO_START = 0,
SEND_RUNINFO_NOW = 1,
SEND_RUNINFO_FINISH = 2
};
enum ProcessStatusFlags
{
PROCESS_RUNNING = (1 << 0)
};
struct ProcessStatus
{
unsigned long m_dwRunID;
unsigned long m_dwStatusFlags;
unsigned long m_dwCustomStatus;
unsigned long m_dwLastSetWindowHandleTime;
unsigned long m_dwCurrentTime;
FILETIME m_CreationTIme;
FILETIME m_ExitTime;
FILETIME m_KernelTime;
FILETIME m_UserTime;
PROCESS_MEMORY_COUNTERS m_ProcessMemoryCounters;
};
/*
<09><><EFBFBD><EFBFBD> <20><>Ŷ : AuthUser, AddUser, DelUser, ModUser, PromoteUser
AuthUser : <09><> -> <20><><EFBFBD><EFBFBD> (szID, szPassword),
<09><><EFBFBD><EFBFBD> -> <20><> (szID, szPassword, szFullName, dwIP, usAdminLevel)
<09>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><E9BFA1> <20><><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> UserInfo <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
<09>α<EFBFBD><CEB1><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޴´<DEB4>.
<09><><EFBFBD><EFBFBD> : <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
<09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> : INVALID_PACKET_ERROR,
AUTHORIZE_FAILED
AddUser : <09><> -> <20><><EFBFBD><EFBFBD> (szID, szPassword, szFullName, dwIP, usAdminLevel)
<09><><EFBFBD><EFBFBD> -> <20><> (szID, szPassword, szFullName, dwIP, usAdminLevel)
<09><><EFBFBD><EFBFBD> : <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
<09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> :
DelUser : <09><> -> <20><><EFBFBD><EFBFBD> (szID, szPassword, szFullName, dwIP, usAdminLevel)
<09><><EFBFBD><EFBFBD> -> <20><> (szID, szPassword, szFullName, dwIP, usAdminLevel)
<09><><EFBFBD><EFBFBD> : <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
<09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> :
ModUser : <09><> -> <20><><EFBFBD><EFBFBD> (szID, szPassword, szFullName, dwIP, usAdminLevel)
<09><><EFBFBD><EFBFBD> -> <20><> (szID, szPassword, szFullName, dwIP, usAdminLevel)
<09><><EFBFBD><EFBFBD> : <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
<09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> :
UserInfo : <09><> -> <20><><EFBFBD><EFBFBD>
<09><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1>ε<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD>.
<09><><EFBFBD><EFBFBD> -> <20><>
<09><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1>ε<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ŭ UserInfo<66><6F><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20>ڿ<EFBFBD> <20>پ<EFBFBD> <20>´<EFBFBD>.
<09><><EFBFBD><EFBFBD> : <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
<09><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> :
Promote<74><65> <20><><EFBFBD><EFBFBD>
0. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> Promote<74><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<49><44> <20>ش<EFBFBD>.
1. Manager<65><72> <20><><EFBFBD>ų<EFBFBD> Master<65><72> Promote
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Promote<74><65>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Master<65>ų<EFBFBD> Manager<65><72> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>.
-> Ȯ<><C8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> id<69><64> Promote <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
-> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9BFA1> <20><><EFBFBD><EFBFBD> Promote<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
2. General<61><6C> Promote
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Promote<74><65>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> General<61><6C><EFBFBD><EFBFBD> Ȯ<><C8AE>
-> Ȯ<><C8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> Promote <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD>ǰ<EFBFBD> Ȯ<><C8AE> <20><>Ŷ <20><><EFBFBD><EFBFBD>
-> Ȯ<><C8AE> <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>, ok<6F><6B> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѱ<EFBFBD><D1B1><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9BFA1> Promote<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
-> Ȯ<><C8AE> <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>, no<6E><6F> <20><><EFBFBD><EFBFBD>, Promote<74><65>û<EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
<20>ʿ<EFBFBD> <20><>Ŷ
1. ManageUserInfo (ManageServer -> ManageTool) ManagerID<49><44> <20><><EFBFBD><EFBFBD>
2. Request Promote (ManageTool -> ManageServer) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
3. Request Promote Ack (ManageServer -> ManageTool) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
4. Request User Reaction (ManageServer -> ManageTool) <20><EFBFBD><E4B1B8> <20><><EFBFBD><EFBFBD>, <20>䱸 Ÿ<><C5B8>(usSubCommand)
5. Request User Reaction Ack (ManageTool -> ManageServer) <20><EFBFBD><E4B1B8> <20><><EFBFBD><EFBFBD>, <20><20><><EFBFBD><EFBFBD>(usSubCommand)
*/
enum UserCommandError
{
NO_USER_COMMAND_ERROR = 0,
INVALID_USER_PACKET_ERROR = 1,
AUTHORIZE_FAILED = 2,
CANNOT_AUTHORIZE_NOT_USER = 3,
CANNOT_AUTHORIZE_INVALID_PASSWORD = 4,
CANNOT_AUTHORIZE_INVALID_IPADDRESS = 5,
ALREADY_LOGINED = 6,
ADD_USER_FAILED = 7,
DELETE_USER_FAILED = 8,
MODIFY_USER_FAILED = 9,
PROMOTE_USER_FAILED = 10,
PROMOTE_TAKEBACK_FAILED = 11,
REJECTED_PROMOTE_USER = 12,
SEND_USER_LIST_FAILED = 13,
INVALID_USERMANAGE_RIGHTS = 14
};
struct UserInfo
{
enum Const
{
// edith 2008.03.17 ID,PASS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ID_LEN = 16,
PASS_LEN = 16,
NAME_LEN = 32
};
TCHAR szFullName[NAME_LEN];
TCHAR szID[ID_LEN];
TCHAR szPassword[PASS_LEN];
unsigned long dwIP;
unsigned short usAdminLevel;
unsigned short usSubCommand;
};
struct UserCommand : public PktBase
{
unsigned char cUserInfoNum;
// <20>ڿ<EFBFBD> UserInfo<66><6F><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> cUserInfoNum<75><6D> <20><>ŭ <20>ٴ´<D9B4>.
};
/*
Relay Command<6E><64> <20><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD>
<09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
*/
struct RunInfo
{
enum Const
{
MAX_SERVER_NAME = 64,
MAX_PATH_LEN = 260,
MAX_OPT_LEN = 260
};
unsigned long m_dwRunID; // RunID(primary key)
unsigned long m_dwServerIP; // (network order ip)
unsigned long m_dwPathID; // PathID
unsigned long m_dwOptionID; // OptionID
char m_szServerName[MAX_SERVER_NAME];
char m_szPath[MAX_PATH_LEN];
char m_szOption[MAX_OPT_LEN];
};
struct PktManagePacket : public PktBase
{
unsigned long m_dwPID;
unsigned long m_dwStatusFlag;
unsigned long m_dwSubCommand;
PktManagePacket() : m_dwPID(GetCurrentProcessId()), m_dwStatusFlag(0), m_dwSubCommand(0) { }
};
struct PktManagePing : public PktManagePacket
{
char m_szAppFullPathName[MAX_PATH];
char m_szWindowName[MAX_PATH];
char m_szCommandLine[MAX_PATH * 2];
};
struct UserNumPair
{
unsigned long m_dwServerID;
int m_nUserNum;
};
struct PktManageUserNum : public PktManagePacket
{
unsigned long m_dwUserInfoNum;
};
struct PktUserStat : public PktBase
{
enum SIZE
{
MAX_DATE = 20
};
//time_t m_nTime;
char m_szSendingTime[MAX_DATE];
unsigned short m_usUserStatDataNum;
};
struct UserStatData
{
unsigned int m_nNation; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>(AdminToolServer.ini <20><><EFBFBD><EFBFBD>)
unsigned long m_dwServerID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD> <20><><EFBFBD><EFBFBD> ID
unsigned int m_nUserNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
};
struct StatServerStatus : public PktBase
{
bool m_bGlobalStatServerOK; // <20>۷ι<DBB7> <20><><EFBFBD><EFBFBD><E8BCAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_bLocalStatServerOK; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E8BCAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
#pragma pack()
};
#endif

View File

@@ -0,0 +1,3 @@
#include "stdafx.h"
#include "PacketBase.h"
#include "GMMemory.h"

View File

@@ -0,0 +1,177 @@
#ifndef _PACKET_BASE
#define _PACKET_BASE
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD>
//
// SS_SMOOTH : <20><>Ȱ<EFBFBD><C8B0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
// SS_LOADED : <20><EFBFBD><E0B0A3> <20><><EFBFBD>ϰ<EFBFBD> <20>ֽ<EFBFBD>. (50 % of bufferring)
// SS_BUSY : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20>ֽ<EFBFBD>. (70 % of bufferring)
// SS_VERYBUSY : <20>ؽ<EFBFBD><D8BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>Ŷ <20>ս<EFBFBD><D5BD><EFBFBD> <20>ʷ<EFBFBD><CAB7><EFBFBD> <20><> <20>ֽ<EFBFBD>.)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
union ServerInfo
{
enum ServerState
{
SS_SMOOTH, SS_LOADED, SS_BUSY, SS_VERYBUSY
};
struct sSrvState
{
unsigned short wError; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
unsigned short wSrvState; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
sSrvState SrvState;
unsigned long dwServerInfo;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
// <20><20><>Ŷ
#pragma pack(1)
struct PktBase
{
enum PktBaseErr
{
NO_SERVER_ERR = 0,
SERVER_ERROR = 1
};
typedef unsigned char StartType;
typedef unsigned char CMDType;
typedef unsigned short LengthType;
protected:
StartType m_StartBit;
CMDType m_Cmd;
LengthType m_Len; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
unsigned long m_CodePage;
ServerInfo m_SrvInfo;
public:
inline void InitPtHead(unsigned short Len_In, unsigned char Cmd_In,
unsigned short State_In, unsigned short Error_In);
inline void InitPtHead(unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In);
inline void SetError(unsigned short Error) { m_SrvInfo.SrvState.wError = Error; }
inline unsigned short GetError(void) { return m_SrvInfo.SrvState.wError; }
inline unsigned short GetState(void) { return m_SrvInfo.SrvState.wSrvState; }
inline StartType GetStartBit(void) { return m_StartBit; }
inline void SetCodePage(unsigned long Code) { m_CodePage = Code; }
inline unsigned long GetCodePage(void) { return m_CodePage; }
inline void SetServerInfo(unsigned long Info) { m_SrvInfo.dwServerInfo = Info; }
inline unsigned long GetServerInfo(void) { return m_SrvInfo.dwServerInfo; }
inline CMDType GetCmd(void) const { return m_Cmd; }
inline bool IsCrypt(void);
inline void SetCrypt(void);
inline bool IsCompress(void);
inline void SetCompress(void);
inline LengthType GetUncompressLen(void);
inline void SetLen(LengthType Len);
inline LengthType GetLen(void);
};
typedef PktBase* LPPktBase;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>.
struct PktBlockCompressedBase
{
public:
unsigned short GetLength() const { return m_usLength; }
unsigned char GetCmd() const { return m_cCommand; }
unsigned char GetExtra() const { return m_cExtra; }
void InitPtHead(unsigned short usLength, unsigned char cCmd, unsigned char cExtra)
{
m_usLength = usLength;
m_cCommand = cCmd;
m_cExtra = cExtra;
}
protected:
unsigned short m_usLength;
unsigned char m_cCommand;
unsigned char m_cExtra;
};
#pragma pack()
const unsigned int PktBaseSize = sizeof(PktBase);
const PktBase::StartType StartBit = 0xFF; // <20><><EFBFBD><EFBFBD> <20><>Ʈ
const PktBase::LengthType Crypt = 0x8000; // <20><>ȣȭ <20><><EFBFBD><EFBFBD> - 1000B
const PktBase::LengthType Compress = 0x4000; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - 0100B
const PktBase::LengthType LengthHdr = 0xC000; // 1100B
const PktBase::LengthType LengthMask = 0x3FFF; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB3BB> <20><><EFBFBD><EFBFBD>ũ <20><>. <20><><EFBFBD><EFBFBD> 14<31><34>Ʈ. <20>ִ<EFBFBD> 16383byte.
const PktBase::LengthType PktMinLen = sizeof(PktBase);
const PktBase::LengthType PktMaxLen = 16383;
const PktBase::LengthType MIN_PACKET_LEN = sizeof(PktBase);
const PktBase::LengthType MAX_PACKET_LEN = 16383;
inline bool PktBase::IsCrypt(void) { return ((m_Len & Crypt) == Crypt) ? true : false; }
inline void PktBase::SetCrypt(void) { m_Len |= Crypt; }
inline bool PktBase::IsCompress(void) { return ((m_Len & Compress) == Compress) ? true : false; }
inline void PktBase::SetCompress(void) { m_Len |= Compress; }
inline PktBase::LengthType PktBase::GetUncompressLen(void) { return PktMaxLen; }
inline void PktBase::SetLen(PktBase::LengthType Len) { m_Len = (m_Len & LengthHdr) | Len; }
inline PktBase::LengthType PktBase::GetLen(void) { return m_Len & LengthMask; }
//Interface/////////////////////////////////////////////////////////////////////////////////////
//
// <20><>Ŷ <20>ش<EFBFBD> <20>ʱ<EFBFBD>ȭ
//
// Parameter :
// 1st : <20><><EFBFBD><EFBFBD>[In]
// 2st : Ŀ<>ǵ<EFBFBD>[In]
// 3st : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>[In]
// 4st : <20><><EFBFBD><EFBFBD>[In]
//
// Return :
//
///////////////////////////////////////////////////////////////////////////////////////////////
inline void PktBase::InitPtHead(unsigned short Len_In, unsigned char Cmd_In,
unsigned short State_In, unsigned short Error_In)
{
m_StartBit = StartBit;
m_Cmd = Cmd_In;
m_Len = Len_In;
m_CodePage = 0;
m_SrvInfo.SrvState.wSrvState = State_In;
m_SrvInfo.SrvState.wError = Error_In;
}
inline void PktBase::InitPtHead(unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In)
{
m_StartBit = StartBit;
m_Cmd = Cmd_In;
m_Len = Len_In;
m_CodePage = 0;
m_SrvInfo.dwServerInfo = Tick_In;
}
#endif

View File

@@ -0,0 +1,299 @@
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><>Ŷ Ŀ<>ǵ<EFBFBD>
//
////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _PACKET_COMMAND_H_
#define _PACKET_COMMAND_H_
#include <Network/Packet/PacketBase.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Ŀ<>ǵ<EFBFBD>
//
////////////////////////////////////////////////////////////////////////////////////////////////////
const PktBase::CMDType CmdNull = 0x00;
const PktBase::CMDType CmdAuthAccount = 0x01; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdServerGroup = 0x02; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdUserLogin = 0x03; // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
const PktBase::CMDType CmdUserKill = 0x04; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharSelect = 0x05; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharCreate = 0x06; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharDelete = 0x07; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharLogin = 0x08; // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
const PktBase::CMDType CmdCharSuicide = 0x09; // ij<><C4B3><EFBFBD><EFBFBD> <20>ڻ<EFBFBD>
const PktBase::CMDType CmdCharRespawn = 0x0A; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ȱ
const PktBase::CMDType CmdCharMove = 0x0B; // ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> (P2P)
const PktBase::CMDType CmdCharMoveUpdate = 0x0C; // ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdCharChat = 0x0D; // ij<><C4B3><EFBFBD><EFBFBD> ä<><C3A4>
const PktBase::CMDType CmdCharAttack = 0x0E; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharCastObject = 0x0F; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharUseSkill = 0x10; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharTakeItem = 0x11; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharSwapItem = 0x12; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharRepairItem = 0x13; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharUseItem = 0x14; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharTradeItem = 0x15; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ŷ<EFBFBD>
const PktBase::CMDType CmdCharSkillLock = 0x16; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><>
const PktBase::CMDType CmdCharSkillCreate = 0x17; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharSkillErase = 0x18; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharClassUpgrade = 0x19; // ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
const PktBase::CMDType CmdCharShapeInfo = 0x1A; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
const PktBase::CMDType CmdCharIncreasePoint = 0x1B; // ij<><C4B3><EFBFBD><EFBFBD> <20>ɷ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharBindPosition = 0x1C; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharRequireInfo = 0x1D; // ij<><C4B3><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
const PktBase::CMDType CmdCharUpdateAddress = 0x1E; // ij<><C4B3><EFBFBD><EFBFBD> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdCharPartyCmd = 0x1F; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharPartyMemInfo = 0x20; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20>ɹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharExchangeCmd = 0x21; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdSysConnectAgent = 0x22; // <20>ý<EFBFBD><C3BD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD> (UDP <20>߰<EFBFBD>) # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdSysPacketTransmit = 0x23; // <20>ý<EFBFBD><C3BD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> (UDP <20>߰<EFBFBD>) # <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharLogout = 0x24; // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD> <20>ƿ<EFBFBD>
const PktBase::CMDType CmdDBGetData = 0x25; // DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdDBUpdateData = 0x26; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdAgentParty = 0x27; // DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ƽ
const PktBase::CMDType CmdSysServerLogin = 0x28; // <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
const PktBase::CMDType CmdServerZone = 0x29; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGameCellInfo = 0x2A; // <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdCharInfo = 0x2B; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>տ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdCharAddressInfo = 0x2C; // ij<><C4B3><EFBFBD><EFBFBD> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharCellLogin = 0x2D; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>α<EFBFBD><CEB1><EFBFBD>
const PktBase::CMDType CmdCharCellLogout = 0x2E; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20>α׾ƿ<D7BE>
const PktBase::CMDType CmdMonMove = 0x2F; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
const PktBase::CMDType CmdCharAttackInfo = 0x30; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
const PktBase::CMDType CmdCharAttacked = 0x31; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharAward = 0x32; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharItemInfo = 0x33; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharPickUp = 0x34; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharPullDown = 0x35; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharPickUpInfo = 0x36; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharPullDownInfo = 0x37; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharCastObjectInfo = 0x38; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharInstallSocket = 0x39; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ
const PktBase::CMDType CmdCharLevelUp = 0x3A; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
const PktBase::CMDType CmdCharPartyInfo = 0x3B; // ij<><C4B3><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharUpgradeItem = 0x3C; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
const PktBase::CMDType CmdCharHPRegen = 0x3D; // ij<><C4B3><EFBFBD><EFBFBD> HP <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharLevelUpInfo = 0x3E; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharSplitItem = 0x3F; // 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>)
const PktBase::CMDType CmdUpdateUIDTable = 0x40; // UID <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdCharQuickSlotMove = 0x41; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
const PktBase::CMDType CmdCharSwitchEQ = 0x42; // <20><><EFBFBD><EFBFBD> <20>ٲٱ<D9B2>
const PktBase::CMDType CmdSysMngerRegistry = 0x43; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdSysMngerRequest = 0x44; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û
const PktBase::CMDType CmdSysMngerResponse = 0x45; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharTakeItems = 0x46; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdCharTakeGold = 0x47; // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharExchangeItem = 0x48; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
const PktBase::CMDType CmdCellBroadCasting = 0x49; // <20><> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>
const PktBase::CMDType CmdSysPatchAddress = 0x4A; // <20><>ġ <20>ּ<EFBFBD>
const PktBase::CMDType CmdCharPartyCmdInfo = 0x4B; // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdServerLog = 0x4C; // <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> (???)
const PktBase::CMDType CmdCharWhisper = 0x4D; // ij<><C4B3><EFBFBD><EFBFBD> <20>ӼӸ<D3BC>
const PktBase::CMDType CmdSysServerVerUpdate = 0x4E; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdSysMng = 0x4F; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ (<28>ӽ<EFBFBD>) (???)
const PktBase::CMDType CmdSysChannelUpdate = 0x50; // <20><><EFBFBD><EFBFBD> ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdCharPartyFind = 0x51; // <20><>Ƽ ã<><C3A3>
const PktBase::CMDType CmdCharPartyMemData = 0x52; // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharControlOption = 0x53; // ij<><C4B3><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharDuelCmd = 0x54; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharFameInfo = 0x55; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdLoginServerList = 0x56; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ #!! <20><>ȣ <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD> !!#
const PktBase::CMDType CmdCharSpellInfo = 0x57; // ij<><C4B3><EFBFBD><EFBFBD> æƮ&<26><>æƮ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharSkillUnLock = 0x58; // ij<><C4B3><EFBFBD><EFBFBD> <20><>ų <20><> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdSysPing = 0x59; // <20><><EFBFBD><EFBFBD> <20><> <20><>Ŷ
const PktBase::CMDType CmdCharMoveZone = 0x5A; // <20><> <20>̵<EFBFBD>
const PktBase::CMDType CmdAgentZone = 0x5B; // <20><> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdDeposit = 0x5C; // â<><C3A2> ó<><C3B3> <20><>Ŷ (Client <--> GameServer)
const PktBase::CMDType CmdDepositUpdate = 0x5D; // â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ŷ (GameServer <--> DBAgent)
const PktBase::CMDType CmdCharStallOpen = 0x5E; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharStallRegisterItem = 0x5F; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharStallEnter = 0x60; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharStallItemInfo = 0x61; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharAdminCmd = 0x62; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharTeamBattleInfo = 0x63; // <20><><EFBFBD><EFBFBD>Ʋ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdFriendAddRequest = 0x64; // ģ<><C4A3> <20>߰<EFBFBD>
const PktBase::CMDType CmdFriendRemoveRequest = 0x65; // ģ<><C4A3> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdFriendEtcRequest = 0x66; // ģ<><C4A3> <20><>Ÿ
const PktBase::CMDType CmdFriendAck = 0x67; // ģ<><C4A3> Ack
const PktBase::CMDType CmdFriendDB = 0x68; // ģ<><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdEliteBonus = 0x69; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ʽ<EFBFBD>
const PktBase::CMDType CmdCharStartQuest = 0x6A; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharOperateTrigger = 0x6B; // Ʈ<><C6AE><EFBFBD><EFBFBD> <20>ߵ<EFBFBD>
const PktBase::CMDType CmdQuestDB = 0x6C; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> (DB<44><42> <20><><EFBFBD>̺<EFBFBD>/<2F>ε<EFBFBD>, ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>)
const PktBase::CMDType CmdCharEndQuest = 0x6D; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharDisappearItem = 0x6E; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharAuthorizePanel = 0x6F; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>dz<EFBFBD>
const PktBase::CMDType CmdCharPeaceMode = 0x70; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdConfigInfoDB = 0x71; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharAutoRouting = 0x72; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdRankingInfo = 0x73; // <20><>ŷ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharStateRedistribution = 0x74; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>й<EFBFBD><><C5AC><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD>·<EFBFBD>)
const PktBase::CMDType CmdBillingTimeoutNotify = 0x75; // <20><><EFBFBD><EFBFBD> Ÿ<>Ӿƿ<D3BE> Notify<66><79><EFBFBD><EFBFBD>
const PktBase::CMDType CmdAdminToolGetData = 0x76; // <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBAgent<6E><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
const PktBase::CMDType CmdAdminToolSetData = 0x77; // <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBAgent<6E><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
const PktBase::CMDType CmdEventDropItem = 0x78; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ
const PktBase::CMDType CmdCharCancelQuest = 0x79; // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdBillingTimeCheckNotify = 0x7A; // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> üũ
const PktBase::CMDType CmdCharLotteryResult = 0x7B; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharSummonCmd = 0x7C; // <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdChatClientLogin = 0x7D; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>
const PktBase::CMDType CmdChatLogin = 0x7E; // <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>α<EFBFBD><CEB1><EFBFBD> <20><>.
const PktBase::CMDType CmdChatLogout = 0x7F; // <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>α׾ƿ<D7BE> <20><>.
const PktBase::CMDType CmdChatInfoChanged = 0x80; // <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.
const PktBase::CMDType CmdCharSummon = 0x81; // <20><>ȯ
const PktBase::CMDType CmdJapanAuthAccount = 0x82; // <20>Ϻ<EFBFBD><CFBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (ID, Password<72><64><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ尡 <20>´<EFBFBD>.)
const PktBase::CMDType CmdCharBattleGroundRespawn = 0x83; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdCharRespawnWaitQueue = 0x84; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ť <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdStatueInfo = 0x85; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCameraScript = 0x86; // ī<>޶<EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ
const PktBase::CMDType CmdCharEquipDurability = 0x87; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCreateGuild = 0x88; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildCmd = 0x89; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildMark = 0x8A; // <20><><EFBFBD><EFBFBD> <20><>ũ <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildLevel = 0x8B; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildRelation = 0x8C; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildList = 0x8D; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdGuildDB = 0x8E; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildRight = 0x8F; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildMemberList = 0x90; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdMyGuildInfo = 0x91; // <20>ڱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildSafe = 0x92; // <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD>
const PktBase::CMDType CmdGuildMemberInfoUpdate = 0x93; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdCharStatusRetrain = 0x94; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD> <20><><EFBFBD>Ʒ<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdSysServerLogout = 0x95; // <20><><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE>
const PktBase::CMDType CmdCharUseCashItem = 0x96; // ij<><C4B3><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdExtraEvent = 0x97; // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
//const PktBase::CMDType CmdCharPartyAddress = 0x96; // <20><>Ƽ<EFBFBD><C6BC> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
//const PktBase::CMDType CmdCharPartyMemAddress = 0x97; // <20><>Ƽ<EFBFBD><C6BC> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> (P2P)
const PktBase::CMDType CmdBGServerMapList = 0x98; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(<28><>) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û
const PktBase::CMDType CmdBGServerResultList = 0x99; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(<28><>) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û
const PktBase::CMDType CmdBGServerMoveZone = 0x9A; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(<28><>) <20>̵<EFBFBD> (<28><> <20>̵<EFBFBD>)
const PktBase::CMDType CmdBGServerMileageChange = 0x9B; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȯ<><C8AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdBGServerCharSlot = 0x9C; // <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
const PktBase::CMDType CmdHanBTNWarning = 0x9D; // <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>
const PktBase::CMDType CmdHanBTNUserKill = 0x9E; // <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>
const PktBase::CMDType CmdCharRepairAllItem = 0x9F; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCSAuth = 0xA0; // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdCharItemChemical = 0xA1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ռ<EFBFBD>
const PktBase::CMDType CmdItemQtyCheck = 0xA2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildInclination = 0xA3; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGuildMemberFameUpdate = 0xA4; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdCastleInfo = 0xA5; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (DBAgentServer -> GameServer)
const PktBase::CMDType CmdCampInfo = 0xA6; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (DBAgentServer -> GameServer)
const PktBase::CMDType CmdCreateCastle = 0xA7; // <20><> <20><><EFBFBD><EFBFBD> (GameServer -> Client)
const PktBase::CMDType CmdCreateCamp = 0xA8; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Client <- GameServer -> DBAgentServer)
const PktBase::CMDType CmdCreateSiegeArms = 0xA9; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Client <- GameServer -> DBAgentServer)
const PktBase::CMDType CmdCastleCmd = 0xAA; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GameServer <-> DBAgentServer)
const PktBase::CMDType CmdCampCmd = 0xAB; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GameServer <-> DBAgentServer)
const PktBase::CMDType CmdSiegeArmsCmd = 0xAC; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GameServer <-> DBAgentServer)
const PktBase::CMDType CmdCastleRight = 0xAD; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GameServer <-> DBAgentServer)
const PktBase::CMDType CmdCampRight = 0xAE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
const PktBase::CMDType CmdSiegeBroadCast = 0xAF; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ
const PktBase::CMDType CmdGameTimeInfo = 0xB0; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdStealthInfo = 0xB1; // <20><><EFBFBD>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EBB0A1> <20><><EFBFBD><EFBFBD>
//const PktBase::CMDType CmdCastleUpdate = 0xB2; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ (DBAgentServer -> GameServer -> Client)
const PktBase::CMDType CmdCellBroadCast2nd = 0xB3; // <20><> <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
const PktBase::CMDType CmdCharRespawnInfo = 0xB4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdCharRespawnAreaInfo = 0xB5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharEquipShopInfo = 0xB6; // NPC <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdSiegeBroadCast2nd = 0xB7; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharItemOptionGraft = 0xB8; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20>̽<EFBFBD>
const PktBase::CMDType CmdCharItemCompensation = 0xB9; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
const PktBase::CMDType CmdGuildMemberGoldUpdate = 0xBA; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
const PktBase::CMDType CmdCampMessage = 0xBB; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD> <20><>Ŷ
const PktBase::CMDType CmdCharDeadInfo = 0xBC; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdNewSiegeBroadCast = 0xBD; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ε<EFBFBD> ij<><C4B3>Ʈ <20>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD>Ǿ<EFBFBD> Ʈ<><C6AE> <20><><EFBFBD><EFBFBD>)
const PktBase::CMDType CmdSelectAccountNation = 0xBE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
const PktBase::CMDType CmdNationChangeResult = 0xBF; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
const PktBase::CMDType CmdUnifiedCharInfo = 0xC0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const PktBase::CMDType CmdUnifiedCharSelect = 0xC1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> / â<><C3A2> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdChatBan = 0xC2; // ä<><C3A4> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdGiveItemToTempInven = 0xC3; // <20>ӽ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCharNameChange = 0xC4; // ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>ٲٱ<D9B2>
const PktBase::CMDType CmdFertilityInfo = 0xC5; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (DBAgentServer -> GameServer)
const PktBase::CMDType CmdMiningCampMineralInfo = 0xC6; // ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer -> Client)
const PktBase::CMDType CmdProcessMining = 0xC7; // ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdWorldWeaponInfo = 0xC8; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (DBAgentServer -> GameServer)
const PktBase::CMDType CmdCampShopInfo = 0xC9; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer -> DBAgentServer)
const PktBase::CMDType CmdCharInstallRuneSocket = 0xCA; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
const PktBase::CMDType CmdTakeMaterial = 0xCB; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCastleTaxMove = 0xCC; // <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCastleSiegeCount = 0xCD; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCompressedPacket = 0xCE; // <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdTakeCastleJewel = 0xCF; // <20><> <20><>¡<EFBFBD><C2A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>/<2F><><EFBFBD><EFBFBD>
const PktBase::CMDType CmdCastleMineralInfo = 0xD0; // <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// (GS -> DBAS), (GS -> Client)
const PktBase::CMDType CmdWarOnOff = 0xD1; // <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (Client <-> GS).
const PktBase::CMDType CmdRealmPoint = 0xD2; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> (DBAgentServer -> GameServer -> Client).
const PktBase::CMDType CmdStatueCmd = 0xD3; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD> <20><>Ŷ
const PktBase::CMDType CmdSaveEnemy = 0xD4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ (DBAgentServer <-> GameServer).
const PktBase::CMDType CmdGuildHostilityList = 0xD5; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȳ <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><>Ŷ
const PktBase::CMDType CmdGuildRelationInfo = 0xD6; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Խ<EFBFBD> <20>ڱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><>Ŷ
const PktBase::CMDType CmdGuildPosition = 0xD7; // <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
const PktBase::CMDType CmdAdminCommandLog = 0xD8; // <20><EFBFBD><EEBFB5> <20><><EFBFBD>ɾ<EFBFBD> <20>α<EFBFBD> <20><>Ŷ.
const PktBase::CMDType CmdChatBanInfo = 0xD9; // ä<>ñ<EFBFBD><C3B1><EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer <-> ChatServer).
const PktBase::CMDType CmdKeyInfo = 0xDA; // <20><><EFBFBD>̽<EFBFBD>ƽ Ű <20><><EFBFBD><EFBFBD>.
const PktBase::CMDType CmdFinalPacketNum = 0xDB; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><>ȣ
#endif

View File

@@ -0,0 +1,93 @@
#ifndef _RYL_SERVERLIB_PACKET_DISPATHCH_TABLE_H_
#define _RYL_SERVERLIB_PACKET_DISPATHCH_TABLE_H_
#include <vector>
#include <utility>
template<typename FunctionType>
class CPacketDispatchTable
{
public:
typedef std::pair<unsigned long, FunctionType> DispatchType;
typedef std::vector<DispatchType> DispatchMap;
FunctionType GetDispatch(unsigned long dwCmd);
protected:
struct PredFirstPairOnly
{
template<typename Ty1, typename Ty2>
bool operator () (const std::pair<Ty1, Ty2>& lhs, const std::pair<Ty1, Ty2>& rhs)
{
return lhs.first < rhs.first;
}
};
CPacketDispatchTable(size_t nReservedSize) { m_DispatchMap.reserve(nReservedSize); }
bool AddDispatch(unsigned long dwCmd, FunctionType fnDispatch);
void RemoveDispatch(unsigned long dwCmd);
private:
DispatchMap m_DispatchMap;
PredFirstPairOnly m_PredFirstPairOnly;
};
template<typename FunctionType>
FunctionType CPacketDispatchTable<FunctionType>::GetDispatch(unsigned long dwCmd)
{
DispatchType findVal(dwCmd, FunctionType());
DispatchMap::iterator end = m_DispatchMap.end();
DispatchMap::iterator pos = std::lower_bound(m_DispatchMap.begin(),
end, findVal, m_PredFirstPairOnly);
return (pos != end && !m_PredFirstPairOnly(findVal, *pos)) ? pos->second : findVal.second;
}
template<typename FunctionType>
bool CPacketDispatchTable<FunctionType>::AddDispatch(unsigned long dwCmd, FunctionType lpDispatch)
{
DispatchType addVal(dwCmd, lpDispatch);
DispatchMap::iterator end = m_DispatchMap.end();
DispatchMap::iterator pos = std::lower_bound(m_DispatchMap.begin(),
end, addVal, m_PredFirstPairOnly);
if(pos == end || m_PredFirstPairOnly(addVal, *pos))
{
// <20>Ȱ<EFBFBD><C8B0><EFBFBD> Ŀ<>ǵ<EFBFBD><C7B5><EFBFBD> <20><><EFBFBD><EFBFBD> <20>õ<EFBFBD>. <20>׳<EFBFBD> <20>ִ´<D6B4>.
m_DispatchMap.insert(pos, addVal);
return true;
}
return false;
}
template<typename FunctionType>
void CPacketDispatchTable<FunctionType>::RemoveDispatch(unsigned long dwCmd)
{
DispatchType removeVal(dwCmd, FunctionType());
DispatchMap::iterator end = m_DispatchMap.end();
DispatchMap::iterator pos = std::lower_bound(m_DispatchMap.begin(),
end, removeVal, m_PredFirstPairOnly);
if(pos != end && !m_PredFirstPairOnly(removeVal, *pos))
{
// <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
m_DispatchMap.erase(pos);
}
}
#endif

View File

@@ -0,0 +1,274 @@
#include "stdafx.h"
#include "PacketStatistics.h"
#include <algorithm>
#include <functional>
#include <Utility/Debug/DebugUtils.h>
void MakeBytesToString(char* szString, unsigned long dwStringLen, double fBytes)
{
_snprintf(szString, dwStringLen - 1, "%16.4fMb/%16.4fKb/%16.4fBytes",
fBytes / 1024 / 1024, fBytes / 1024, fBytes);
szString[dwStringLen - 1] = 0;
}
void LogPacketStatData(FILE* logFile, const char* szTotalSummeryHeader, time_t tDiffTime,
CPacketStatistics::PacketData* lpPos, CPacketStatistics::PacketData* lpEnd)
{
const int MAX_BUFFER = 128;
char szTotalBytes[MAX_BUFFER];
CPacketStatistics::PacketData totalData;
for(unsigned char cCmd = 0; lpPos != lpEnd; ++lpPos, ++cCmd)
{
if (0.0f != lpPos->m_Count)
{
MakeBytesToString(szTotalBytes, MAX_BUFFER, lpPos->m_Bytes);
fprintf(logFile, "\t %3d(0x%02X) : %16.4f : (%s) : %16.4fBytes/Sec\n",
cCmd, cCmd, lpPos->m_Count, szTotalBytes,
lpPos->m_Bytes / tDiffTime);
totalData.m_Bytes += lpPos->m_Bytes;
totalData.m_Count += lpPos->m_Count;
}
}
MakeBytesToString(szTotalBytes, MAX_BUFFER, totalData.m_Bytes);
fprintf(logFile,
"\n %s"
"\n Total Data : %s/%16.4fBytes/Sec"
"\n Total Count : %16.4f/%16.4f(Count/Sec)\n\n",
szTotalSummeryHeader, szTotalBytes, totalData.m_Bytes / tDiffTime,
totalData.m_Count, totalData.m_Count / tDiffTime);
}
CPacketStatistics::PacketData::PacketData()
: m_Bytes(0.0f)
, m_Count(0.0f)
{
}
void CPacketStatistics::PacketData::Clear()
{
m_Bytes = m_Count = 0.0f;
}
CPacketStatistics::CompressData::CompressData()
: m_CompressCount(0.0f)
, m_FailedCount(0.0f)
, m_TotalBytes(0.0f)
, m_TotalCompressed(0.0f)
{
}
void CPacketStatistics::CompressData::Clear()
{
m_CompressCount = m_FailedCount =
m_TotalBytes = m_TotalCompressed = 0.0f;
}
CPacketStatistics::CPacketStatistics()
: m_StartTime(time(0)), m_fnPrefix(0), m_fnPostfix(0)
{
}
CPacketStatistics::~CPacketStatistics()
{
Log();
}
CPacketStatistics& CPacketStatistics::GetInstance()
{
static CPacketStatistics packetStatistics;
return packetStatistics;
}
void CPacketStatistics::Recv(unsigned char cCmd, unsigned long dwPacketSize)
{
PacketData& packetData = m_RecvData[cCmd];
packetData.m_Bytes += dwPacketSize;
++packetData.m_Count;
}
void CPacketStatistics::Send(unsigned char cCmd, unsigned long dwPacketSize)
{
PacketData& packetData = m_SendData[cCmd];
packetData.m_Bytes += dwPacketSize;
++packetData.m_Count;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ۼ<EFBFBD>
void CPacketStatistics::CheckCompression(unsigned char cCmd,
unsigned long dwSrcSize, unsigned long dwDstSize)
{
CompressData& compressData = m_CompressionData[cCmd];
compressData.m_TotalBytes += dwSrcSize;
compressData.m_TotalCompressed += dwDstSize;
++compressData.m_CompressCount;
if (dwSrcSize < dwDstSize) { ++compressData.m_FailedCount; }
}
void CPacketStatistics::Clear()
{
std::for_each(m_RecvData, m_RecvData + UCHAR_MAX, std::mem_fun_ref(&PacketData::Clear));
std::for_each(m_SendData, m_SendData + UCHAR_MAX, std::mem_fun_ref(&PacketData::Clear));
std::for_each(m_CompressionData, m_CompressionData + UCHAR_MAX, std::mem_fun_ref(&CompressData::Clear));
m_StartTime = time(0);
}
void CPacketStatistics::SetUserMessageFunc(FnPrintUserMessage fnPreFix, FnPrintUserMessage fnPostFix)
{
m_fnPrefix = fnPreFix;
m_fnPostfix = fnPostFix;
}
bool CPacketStatistics::Log()
{
char strLogPath[MAX_PATH];
char strLogFileName[MAX_PATH];
DbgUtils::SetProgramName(strLogPath, MAX_PATH, 0);
// create the directory if it doesn't exist
if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(strLogPath) &&
!CreateDirectory(strLogPath, 0))
{
return false;
}
unsigned long dwSpinCount = 0;
unsigned long dwMaxFileSize = 50 * 1024 * 1024;
while (true)
{
_sntprintf(strLogFileName, MAX_PATH, "%s/Statistics-%s-%05d.log",
strLogPath, strLogPath, dwSpinCount);
HANDLE hLogFile = CreateFile(strLogFileName, GENERIC_WRITE,
FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
if(INVALID_HANDLE_VALUE == hLogFile)
{
break;
}
else
{
unsigned long dwHighValue = 0;
unsigned long dwFileSize = GetFileSize(hLogFile, &dwHighValue);
CloseHandle(hLogFile);
if(dwHighValue == 0 && dwFileSize < dwMaxFileSize)
{
break;
}
}
++dwSpinCount;
}
FILE* logFile = fopen(strLogFileName, "at");
if(0 != logFile)
{
// Prefix
if(0 != m_fnPrefix)
{
m_fnPrefix(logFile);
}
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
time_t tCurrent = time(0);
time_t tDiffTime = tCurrent - m_StartTime;
time_t tDiffHour = tDiffTime / 3600;
time_t tDiffMinute = (tDiffTime % 3600) / 60;
time_t tDiffSecond = (tDiffTime % 3600) % 60;
struct tm tmServerStart = *localtime(&m_StartTime);
struct tm tmCurrent = *localtime(&tCurrent);
fprintf(logFile, "\t-- Server Packet Statistics -- \n"
"\tLog Start Time : %04dyear %02dmon %02dday %02dhour %02dmin %02dsec\n"
"\tCurrent Log Time : %04dyear %02dmon %02dday %02dhour %02dmin %02dsec\n"
"\tLog Duration : %02dhour %02dmin %02dsec\n\n",
tmServerStart.tm_year + 1900, tmServerStart.tm_mon + 1, tmServerStart.tm_mday,
tmServerStart.tm_hour, tmServerStart.tm_min, tmServerStart.tm_sec,
tmCurrent.tm_year + 1900, tmCurrent.tm_mon + 1, tmCurrent.tm_mday,
tmCurrent.tm_hour, tmCurrent.tm_min, tmCurrent.tm_sec,
tDiffHour, tDiffMinute, tDiffSecond);
const int MAX_BUFFER = 128;
char szTotalBytes[MAX_BUFFER];
char szCompressedBytes[MAX_BUFFER];
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD>
LogPacketStatData(logFile, "Recv Packet", tDiffTime, m_RecvData, m_RecvData + UCHAR_MAX);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD>
LogPacketStatData(logFile, "Send Packet", tDiffTime, m_SendData, m_SendData + UCHAR_MAX);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD>
CompressData* lpCompressPos = m_CompressionData;
CompressData* lpCompressEnd = m_CompressionData + UCHAR_MAX;
CompressData totalCount;
for(unsigned char cCmd = 0; lpCompressPos != lpCompressEnd; ++lpCompressPos, ++cCmd)
{
if (0.0f != lpCompressPos->m_CompressCount)
{
MakeBytesToString(szTotalBytes, MAX_BUFFER, lpCompressPos->m_TotalBytes);
MakeBytesToString(szCompressedBytes, MAX_BUFFER, lpCompressPos->m_TotalCompressed);
fprintf (logFile, "\t %3d(0x%02X) : %16.4f(Failed %16.4f) : Total(%16s) : Compressed(%16s)\n",
cCmd, cCmd, lpCompressPos->m_CompressCount, lpCompressPos->m_FailedCount,
szTotalBytes, szCompressedBytes);
totalCount.m_CompressCount += lpCompressPos->m_CompressCount;
totalCount.m_FailedCount += lpCompressPos->m_FailedCount;
totalCount.m_TotalBytes += lpCompressPos->m_TotalBytes;
totalCount.m_TotalCompressed += lpCompressPos->m_TotalCompressed;
}
}
MakeBytesToString(szTotalBytes, MAX_BUFFER, totalCount.m_TotalBytes);
MakeBytesToString(szCompressedBytes, MAX_BUFFER, totalCount.m_TotalCompressed);
fprintf(logFile,
"\n Check compression status - not actually sent"
"\n Total Data : %s"
"\n Total Data Compressed : %s"
"\n Total Count : %16.4f/Failed(%16.4f)\n\n\n",
szTotalBytes, szCompressedBytes, totalCount.m_CompressCount, totalCount.m_FailedCount);
// Postfix
if(0 != m_fnPostfix)
{
m_fnPostfix(logFile);
}
fclose(logFile);
}
return true;
}

View File

@@ -0,0 +1,64 @@
#ifndef _GAMA_PACKET_STATISTICS_H_
#define _GAMA_PACKET_STATISTICS_H_
#include <climits>
#include <ctime>
class CPacketStatistics
{
public:
struct PacketData
{
double m_Bytes;
double m_Count;
PacketData();
void Clear();
};
struct CompressData
{
double m_CompressCount;
double m_FailedCount;
double m_TotalBytes;
double m_TotalCompressed;
CompressData();
void Clear();
};
typedef void (*FnPrintUserMessage) (FILE* fDescriptor);
static CPacketStatistics& GetInstance();
void Recv(unsigned char cCmd, unsigned long dwPacketSize); // <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ)
void Send(unsigned char cCmd, unsigned long dwPacketSize); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ۼ<EFBFBD>
void CheckCompression(unsigned char cCmd, unsigned long dwSrcSize, unsigned long dwDstSize);
void Clear();
bool Log();
void SetUserMessageFunc(FnPrintUserMessage fnPreFix = 0, FnPrintUserMessage fnPostFix = 0);
private:
CPacketStatistics();
~CPacketStatistics();
time_t m_StartTime;
FnPrintUserMessage m_fnPrefix;
FnPrintUserMessage m_fnPostfix;
PacketData m_RecvData[UCHAR_MAX];
PacketData m_SendData[UCHAR_MAX];
CompressData m_CompressionData[UCHAR_MAX];
};
#endif

View File

@@ -0,0 +1,237 @@
#ifndef _AUTHSERVER_TO_DBAGENT_SERVER_PACKET_H_
#define _AUTHSERVER_TO_DBAGENT_SERVER_PACKET_H_
#include <winsock2.h>
#include <windows.h>
#include <DB/DBDefine.h>
#include "DataPacket.h"
#pragma pack(1)
// ---------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><>û AuthServer -> DBAgentServer
typedef struct PktULD* LPPktULD;
struct PktULD : public PktDD
{
unsigned long m_dwSessionID;
unsigned long m_dwUserID;
IN_ADDR m_Address;
unsigned char m_cLoginType;
};
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> DBAgentServer -> AuthServer
typedef struct PktULDAck* LPPktULDAck;
struct PktULDAck : public PktDD
{
enum Const
{
MAX_CHAR_VIEW = 5
};
unsigned long m_dwUserID;
sGuildData m_GuildData[MAX_CHAR_VIEW];
CHAR_VIEW m_CharView[MAX_CHAR_VIEW];
STORE_INFO m_sStoreInfo;
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned char m_cAccountNation; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_nPlayTime; // BillingType<70><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>¥. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>(<28><>)
unsigned short m_usAdminLevel;
unsigned char m_cBillingType; // D : <20><><EFBFBD><EFBFBD> T : <20><><EFBFBD><EFBFBD> N : <20><><EFBFBD><EFBFBD>
unsigned char m_cBillingUser; // 0 : <20><><EFBFBD><EFBFBD> 1 : <20>ǽù<C7BD>
unsigned char m_cLoginType;
};
// <20><><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE> AuthServer -> DBAgentServer
typedef struct PktULoD *LPPktULoD;
struct PktULoD : public PktDD
{
unsigned long m_dwSessionID;
unsigned long m_dwUserID;
};
// <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD>
typedef struct PktUMvD *LPPktUMvD;
struct PktUMvD : public PktDD
{
unsigned long m_dwSessionID;
unsigned long m_dwUserID;
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DBAgentServer -> AuthServer
typedef struct PktSSD *LPPktSSD;
struct PktSSD : public PktDD
{
enum
{
// edith 2008.03.17 ID,PASS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MaxName = 24,
MaxPass = 36,
};
unsigned long m_dwSessionID;
unsigned long m_dwUserID;
char m_AccountName[MaxName];
// edith 2008.01.15 <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>۾<EFBFBD>
char m_Password[MaxPass];
unsigned char m_cAgentServerType;
unsigned char m_cFirstLogin;
IN_ADDR m_Address;
};
/*
* cAgentServerType <20><><EFBFBD><EFBFBD>
CServerSetup::AgentServerType <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
Part1 = 20,
Part1Unified = 21,
Part2 = 22,
Part2Unified = 23,
Part2Selectable = 24,
* cFirstLogin <20><><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20>̻<EFBFBD><CCBB≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
cAgentServerType<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Part2Unified/Part2Selectable<6C><65> <20><><EFBFBD><20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
Part2Unified
â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> : 0
Part1 <20><><EFBFBD>տ<EFBFBD><D5BF><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> : 1
Part2 <20><><EFBFBD>տ<EFBFBD><D5BF><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> : 2
Part2Selectable
<20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : 0
<20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> : 2
*/
// ---------------------------------------------------------
// ---------------------------------------------------------
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û AuthServer -> DBAgentServer
typedef struct PktCCD* LPPktCCD;
struct PktCCD : public PktDD
{
unsigned long m_dwUserID;
unsigned long m_dwSlot;
unsigned long m_dwGold;
POS m_Pos;
CHAR_CREATE m_CharCreate;
unsigned short m_wSkill;
};
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DBAgentServer -> AuthServer
typedef struct PktCCDAck* LPPktCCDAck;
struct PktCCDAck : public PktDD
{
unsigned long m_dwCharID;
unsigned long m_dwSlot;
CHAR_VIEW m_CharView;
};
// ---------------------------------------------------------
// ---------------------------------------------------------
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
typedef struct PktCSD* LPPktCSD;
struct PktCSD : public PktDD
{
unsigned long m_dwUserID;
unsigned long m_dwCharID;
};
typedef struct PktCSDAck* LPPktCSDAck;
struct PktCSDAck : public PktDD
{
enum { MAX_CHANNEL_NUM = 5 };
unsigned char m_cZone;
unsigned short m_wChannelNum[MAX_CHANNEL_NUM];
};
// ---------------------------------------------------------
// ---------------------------------------------------------
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
typedef struct PktCDD* LPPktCDD;
struct PktCDD : public PktDD
{
unsigned long m_dwUserID;
unsigned long m_dwSlotNum;
unsigned long m_dwCharID;
};
// ---------------------------------------------------------
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
// ---------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
typedef struct PktSAND* LPPktSAND;
struct PktSAND : public PktDD
{
enum eType { TYPE_SET = 1, TYPE_CHANGE = 2 };
unsigned long m_dwUserID;
unsigned char m_cType;
unsigned char m_cAccountNation;
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
typedef struct PktANCAck* LPPktANCAck;
struct PktANCAck : public PktDD
{
enum
{
MAX_CHAR_VIEW = 5
};
unsigned long m_dwUserID;
unsigned long m_dwGID[ MAX_CHAR_VIEW ];
unsigned long m_dwFame[ MAX_CHAR_VIEW ];
};
// ---------------------------------------------------------
// ---------------------------------------------------------
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
typedef struct PktCCID* LPPktCCID;
struct PktCCID : public PktDD
{
unsigned __int64 m_dwItemSerial;
unsigned long m_dwCharID;
unsigned long m_dwSize;
};
// ---------------------------------------------------------
// ---------------------------------------------------------
// ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
typedef struct PktCLiD* LPPktCLiD;
struct PktCLiD : public PktDD
{
unsigned long m_dwUserID;
unsigned long m_dwCharID;
unsigned long m_dwSerial;
};
// ---------------------------------------------------------
#pragma pack()
#endif

View File

@@ -0,0 +1,157 @@
#ifndef _BATTLEGROUND_SERVER_PACKET_H_
#define _BATTLEGROUND_SERVER_PACKET_H_
#include <Network/Packet/PacketBase.h>
#include <Creature/Character/CharacterClass.h>
#pragma pack(1)
// <20><> <20><><EFBFBD><EFBFBD>Ʈ (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><> <20><><EFBFBD><EFBFBD>
typedef struct PktBGServerMapList* LPPktBGServerMapList;
struct PktBGServerMapList : public PktBase
{
enum Const
{
MAX_MAP_NUM = 10
};
bool m_bAll; // true <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ, false <20≯<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
unsigned char m_cMapInfoNodeNum; // <20><><EFBFBD><EFBFBD> <20><>
};
// <20><> <20><><EFBFBD><EFBFBD>
struct BGServerMapInfoNode
{
enum MapType
{
FRAG = 0, // <20><><EFBFBD>ھ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
STATUE = 1, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
MAX_MAP_TYPE
};
// <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_bPlaying; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cMapType; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cMaxCharNumOfNation; // <20><> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>ο<EFBFBD>
unsigned char m_cRemainMin; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD> Ȥ<><C8A4> <20><><EFBFBD>½ð<C2BD>) (<28><>)
unsigned short m_wTargetScore; // <20><>ǥ <20><><EFBFBD><EFBFBD>
unsigned char m_cCurrentCharNum[CClass::MAX_RACE]; // <20><><EFBFBD><EFBFBD> <20>ο<EFBFBD>
unsigned short m_wScore[CClass::MAX_RACE]; // <20><><EFBFBD><EFBFBD>
};
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
typedef struct PktBGServerResultList* LPPktBGServerResultList;
struct PktBGServerResultList : public PktBase
{
enum Const
{
MAX_MAP_NUM = 10
};
bool m_bAll; // true <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ, false <20≯<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
unsigned char m_cResultInfoNodeNum; // <20><><EFBFBD><EFBFBD> <20><>
};
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct BGServerResultInfoNode
{
unsigned char m_cWinRace; // <20><><EFBFBD><EFBFBD> (CClass::MAX_RACE <20≯<EFBFBD> <20><><EFBFBD>º<EFBFBD>)
unsigned char m_cPlayMin; // <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>
unsigned char m_cKill; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
unsigned char m_cKilled; // <20><><EFBFBD><EFBFBD> <20><>
unsigned short m_wAward; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>
unsigned short m_wScore[CClass::MAX_RACE]; // <20><><EFBFBD><EFBFBD>
};
// BATTLEGROUND_SERVER <20><> <20>̵<EFBFBD>
typedef struct PktBGServerMoveZone* LPPktBGServerMoveZone;
struct PktBGServerMoveZone : public PktBase
{
enum MoveType
{
TYPE_PLAYER = 0, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TYPE_SPECTATOR = 1, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MAX_TYPE_NUM
};
enum Error
{
FAIL_FULL_MAP = 2, // <20><> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
FAIL_FIX_RATE = 3 // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߱<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
unsigned short m_wMapNumber; // <20>ش<EFBFBD> <20><> <20><>ȣ (0<><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
unsigned char m_cMoveType; // <20><20><><EFBFBD><EFBFBD><EEB0A1> Ÿ<><C5B8>
unsigned char m_cZone; // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>ȣ (Ack)
};
// <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
typedef struct PktBGServerCharSlot* LPPktBGServerCharSlot;
struct PktBGServerCharSlot : public PktBase
{
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (Client <-> Game)
unsigned long m_dwUID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (Game <-> DBAgent)
unsigned char m_cGroup; // <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD>
};
// <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
typedef struct PktBGServerCharSlotAck* LPPktBGServerCharSlotAck;
struct PktBGServerCharSlotAck : public PktBase
{
enum PktCharSlotAckErr
{
FAIL_NOT_USER = 2, // DB<44><42><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_NOT_CHAR = 3 // DB<44><42><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned char m_cGroup; // <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD>
unsigned long m_dwSlotCID[USER_INFO::MAX_CHAR_NUM]; // <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> ID
char m_szSlotName[USER_INFO::MAX_CHAR_NUM][CHAR_INFOST::MAX_NAME_LEN]; // <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>
};
// ȯ<><C8AF><EFBFBD><EFBFBD> <20>̿<EFBFBD>
typedef struct PktBGServerMileageChange* LPPktBGServerMileageChange;
struct PktBGServerMileageChange : public PktBase
{
enum PktBGSMCCmd
{
MC_REQUEST = 0, // <20><><EFBFBD><EFBFBD> <20><>û (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...)
MC_INFO = 1, // <20><><EFBFBD><EFBFBD> Ack
MC_CHANGE = 2, // <20><>ȯ <20><>û (BG<42><47> <20><><EFBFBD><EFBFBD><EFBFBD>޴<EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>)
MC_RESULT = 3 // <20><>ȯ Ack
};
enum PktErr
{
SERVER_ERROR = 1,
NOT_USED_STORE = 2, // â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - MC_RESULT (<28>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3> <20>ʿ<EFBFBD>)
NOT_ENOUGH_MEDAL = 3, // <20><><EFBFBD><EFBFBD> <20>޴<EFBFBD> <20><><EFBFBD><EFBFBD> - MC_RESULT (<28>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3> <20>ʿ<EFBFBD>)
MONEY_OVERFLOW = 4, // <20><> <20><><EFBFBD><EFBFBD><EFBFBD>÷ο<C3B7> <20>߻<EFBFBD>(<28>Ա<EFBFBD> <20>Ұ<EFBFBD>) - MC_RESULT ( <20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3> <20>ʿ<EFBFBD>)
DATA_REQUESTING = 5, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD> - MC_RESULT (<28>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>)
NONE_CHARACTER = 6 // ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - MC_INFO (<28>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3> <20>ʿ<EFBFBD>)
};
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> ID
unsigned char m_cGroup; // <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD>
unsigned char m_cCmd; // <20><><EFBFBD><EFBFBD>
unsigned long m_dwGold; // <20><>
unsigned long m_dwMileage; // <20><><EFBFBD><EFBFBD> <20>޴<EFBFBD>
};
#pragma pack()
#endif

View File

@@ -0,0 +1,326 @@
#ifndef _CLIENT_TO_AUTH_SERVER_PACKET_H_
#define _CLIENT_TO_AUTH_SERVER_PACKET_H_
#include <DB/DBDefine.h>
#include <Network/Packet/PacketBase.h>
#pragma pack(1)
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û (Client to AuthServer)
// - <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
// - <20><><EFBFBD><EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
// - Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
//
// : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktAU* LPPktAU;
struct PktAU : public PktBase
{
enum
{
// edith 2008.03.17 ID,PASS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ID_LEN = 24,
PASS_LEN = 36
};
char m_UserAccount[ID_LEN];
char m_UserPassword[PASS_LEN];
unsigned long m_dwSessionID;
unsigned long m_dwClientVer;
unsigned long m_dwCheckSum;
unsigned short m_usFlag;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20>Ϻ<EFBFBD><CFBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û (Client to AuthServer)
//
// : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktJPAU* LPPktJPAU;
struct PktJPAU : public PktBase
{
enum { NAME_LEN = 16 };
char m_szUserAccount[NAME_LEN];
unsigned long m_dwUserID;
unsigned long m_dwSessionID;
unsigned long m_dwClientVer;
unsigned long m_dwCheckSum;
unsigned short m_usFlag;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (AuthServer to Client)
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
//
// : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktAUAck* LPPktAUAck;
struct PktAUAck : public PktBase
{
unsigned long m_dwUserID;
unsigned char m_cAgentServerType;
unsigned char m_cFirstLogin;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> (Client to AuthServer)
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - üũ<C3BC><C5A9>
// - <20><><EFBFBD><EFBFBD>
//
// : <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20>Ŀ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktULi* LPPktULi;
struct PktULi : public PktBase
{
enum LoginType
{
USERLOGIN_FIRST = 0, // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
USERLOGIN_CHAR_SELECT = 1 // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
};
unsigned long m_dwUserID;
unsigned long m_dwCheckSum;
unsigned char m_cLoginType;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> Ack (AuthServer to Client)
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//
// (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktULiAck* LPPktULiAck;
struct PktULiAck : public PktBase
{
enum Const
{
MAX_CHAR_VIEW = 5
};
enum PktULiAckErr
{
FAIL_GET_DATA = 2
};
unsigned long m_dwSessionID;
unsigned long m_dwUserID;
CHAR_VIEW m_CharView[MAX_CHAR_VIEW];
sGuildData m_GuildData[MAX_CHAR_VIEW];
unsigned long m_dwTabFlag;
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
unsigned char m_cAccountNation; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
time_t m_dwCurrentTime; // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
int m_nPlayTime; // BillingType<70><65> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>¥. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>(<28><>)
unsigned short m_usAdminLevel; // <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD>.
unsigned char m_cBillingType; // D : <20><><EFBFBD><EFBFBD> T : <20><><EFBFBD><EFBFBD> N : <20><><EFBFBD><EFBFBD>
unsigned char m_cBillingUser; // 0 : <20><><EFBFBD><EFBFBD> 1 : <20>ǽù<C7BD>
unsigned char m_cLoginType;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ( Char Select )
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
//
// : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ش<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <20>ּҸ<D6BC> <20>Ѱ<EFBFBD> <20>޴´<DEB4>.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktCS* LPPktCS;
struct PktCS : public PktBase
{
unsigned long m_dwUserID;
unsigned long m_dwCharID;
};
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
typedef struct PktCSAck* LPPktCSAck;
struct PktCSAck : public PktBase
{
enum { MAX_CHANNEL_NUM = 5 };
unsigned char m_cZone; // <20><>
unsigned short m_wChannelNum[MAX_CHANNEL_NUM]; // ä<><C3A4>
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ( Char Create )
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - <20><><EFBFBD><EFBFBD> <20><>ȣ
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// - <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktCC* LPPktCC;
struct PktCC : public PktBase
{
unsigned long m_dwUserID;
unsigned long m_dwSlotNum;
CHAR_CREATE m_CreateChar;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - <20><><EFBFBD><EFBFBD> <20><>ȣ
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
// (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 3 = <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>, 4 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,
// 5 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>, 6 = <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktCCAck* LPPktCCAck;
struct PktCCAck : public PktBase
{
unsigned long m_dwCharID;
unsigned long m_dwSlotNum;
CHAR_VIEW m_CharView;
enum
{
SERVER_ERROR = 1,
FAIL_INSERT_DATA = 2,
EXIST_CHAR_NAME = 3,
EXIST_SLOT = 4,
WRONG_CHAR_NAME = 5,
WRONG_CHAR_DATA = 6,
SLANG_FILTERED = 7,
NULL_SESSION = 8,
VIEW_RELOAD_FAILED = 9,
SUPRESSED_CHAR_CREATE = 10
};
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ( Char Delete )
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - <20><><EFBFBD><EFBFBD> <20><>ȣ
// - <20><>Ƽ <20><><EFBFBD>̵<EFBFBD>
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktCD* LPPktCD;
struct PktCD : public PktBase
{
unsigned long m_dwUserID;
unsigned long m_dwCharID;
unsigned long m_dwSlotNum;
unsigned char m_szPassword[STORE_INFO::MAX_PASS_LEN];
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - <20><><EFBFBD><EFBFBD> <20><>ȣ
//
// (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktCDAck* LPPktCDAck;
struct PktCDAck : public PktBase
{
unsigned long m_dwUserID;
unsigned long m_dwSlotNum;
enum
{
SERVER_ERROR = 1,
FAIL_DELETE_DATA = 2,
BLOCKED_DELETE_DATA = 6,
FAIL_PASSWORD = 7
};
};
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ( Select Account Nation )
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//
// (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 2 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktSelectAccountNation* LPPktSelectAccountNation;
struct PktSelectAccountNation : public PktBase
{
unsigned long m_dwUserID;
unsigned char m_cType;
unsigned char m_cAccountNation;
enum eType
{
TYPE_SET = 1, // <20><> <20><><EFBFBD><EFBFBD>
TYPE_CHANGE = 2 // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
enum { SERVER_ERROR = 1, FAIL_SET_NATION = 2 };
};
// WORK_LIST 2.3 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>͵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// - <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
// - CID, GID, Fame
//
// (1 = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> )
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktNationChangeResult* LPPktNationChangeResult;
struct PktNationChangeResult : public PktBase
{
enum
{
MAX_CHAR_VIEW = 5
};
unsigned long m_dwUserID;
unsigned long m_dwGID[ MAX_CHAR_VIEW ];
unsigned long m_dwFame[ MAX_CHAR_VIEW ];
};
#pragma pack()
#endif

View File

@@ -0,0 +1,85 @@
#ifndef _CLIENT_TO_LOGIN_SERVER_PACKET_H_
#define _CLIENT_TO_LOGIN_SERVER_PACKET_H_
#include "ServerInfo.h"
#include <Network/Packet/PacketBase.h>
#pragma pack(1)
// -----------------------------------------------------------------------------
// <20>α<EFBFBD><CEB1><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><>Ŷ.
// -----------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><>Ŷ : Launcher to LoginServer
typedef struct PktSvL* LPPktSvL;
struct PktSvL : public PktBase
{
unsigned long m_dwClientVer;
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><>Ŷ : LoginServer to Launcher
typedef struct PktSvLAck* LPPktSvLAck;
struct PktSvLAck : public PktBase
{
enum { PATCH_ADDRESS_LENGTH = 100 };
unsigned long m_dwClientVer;
char m_PatchAddress[PATCH_ADDRESS_LENGTH];
SERVER_LIST m_ServerList; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
};
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û <20><>Ŷ : Launcher to LoginServer
typedef struct PktSG* LPPktSG;
struct PktSG : public PktBase
{
char m_cGroup;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ : LoginServer to Launcher
typedef struct PktSGAck* LPPktSGAck;
struct PktSGAck : public PktBase
{
unsigned long m_dwServerID;
IN_ADDR m_AuthAddress;
};
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û <20><>Ŷ(OLD) : Launcher to LoginServer
typedef struct PktAUO* LPPktAUO;
struct PktAUO : public PktBase
{
enum
{
// edith 2008.03.17 ID,PASS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NAME_LEN = 24,
PASS_LEN = 36
};
char m_UserAccount[NAME_LEN];
char m_UserPassword[PASS_LEN];
unsigned long m_ClientVerInfo;
unsigned short m_cFlag;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ : LoginServer to Launcher
typedef struct PktAUOAck* LPPktAUOAck;
struct PktAUOAck : public PktBase
{
unsigned long m_dwUserID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
SERVER_LIST m_ServerList; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
};
// -----------------------------------------------------------------------------
#pragma pack()
#endif

View File

@@ -0,0 +1,63 @@
#ifndef _DATA_PACKET_H_
#define _DATA_PACKET_H_
#include <Network/Packet/PacketBase.h>
#pragma pack(1)
typedef struct PktDD* LPPktDD;
struct PktDD : public PktBase
{
unsigned long m_dwRequestKey;
unsigned short m_wCmd;
enum SubCommands
{
SCmdUserLogin = 0x0001, // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
SCmdUserLogout = 0x0002, // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
SCmdUserMove = 0x0003, // <20><><EFBFBD><EFBFBD> <20><> <20>̵<EFBFBD>
// WORK_LIST 2.1 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
SCmdSelectNation = 0x0004, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// WORK_LIST 2.3 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SCmdNationChangeResult = 0x0005,
SCmdCharCreate = 0x0021, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SCmdCharDelete = 0x0022, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SCmdCharCreateItem = 0x0023, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCmdCharSelect = 0x0024, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SCmdCreateParty = 0x0031, // <20><>Ƽ <20><><EFBFBD><EFBFBD>
SCmdDeleteParty = 0x0032, // <20><>Ƽ <20><><EFBFBD><EFBFBD>
SCmdGetPartyInfo = 0x0033, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SCmdInsertPartyMem = 0x0034, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
SCmdDeletePartyMem = 0x0035, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SCmdLoginPartyMem = 0x0036, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
SCmdLogoutPartyMem = 0x0037, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE>
SCmdTransferLeader = 0x0038, // <20><>Ƽ <20><><EFBFBD><EFBFBD> <20>
SCmdAutoRoutingOn = 0x0039, // <20><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѱ<EFBFBD>
SCmdAutoRoutingOff = 0x003A, // <20><>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//SCmdPartyAddress = 0x003B, // <20><>Ƽ<EFBFBD><C6BC> UDP <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
SCmdDeadPartyMem = 0x003C, // <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD>
SCmdMoveZonePartyMem = 0x003D, // <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>̵<EFBFBD> : RefID = <20>̵<EFBFBD><CCB5><EFBFBD> <20><> ID
SCmdLevelUpPartyMem = 0x003E, // <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RefID = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SCmdChangeClassPartyMem = 0x003F, // <20><>Ƽ<EFBFBD><C6BC> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RefID = <20>ٲ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
SCmdChangeGuildPartyMem = 0x0040, // <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RefID = <20>ٲ<EFBFBD> <20><><EFBFBD><EFBFBD> ID
SCmdStartSession = 0x0050, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SCmdServerZone = 0x0051, // <20><><EFBFBD><EFBFBD> <20><>
SCmdCharMoveZone = 0x0052, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
SCmdServerZoneEnd = 0x0053 // <20><><EFBFBD><EFBFBD> <20><> <20><>
};
inline void InitPtSubCmd(unsigned long dwRequestKey, unsigned short Cmd_In);
};
inline void PktDD::InitPtSubCmd(unsigned long dwRequestKey, unsigned short Cmd_In)
{
m_dwRequestKey = dwRequestKey;
m_wCmd = Cmd_In;
}
#pragma pack()
#endif

View File

@@ -0,0 +1,364 @@
#ifndef _CHAR_FRIEND_PACKET_H_
#define _CHAR_FRIEND_PACKET_H_
// CharFriendPacket.h
#include <Network/Packet/PacketBase.h>
#include <Network/Packet/PacketStruct/DataPacket.h>
#pragma pack(1)
/*
struct PktFriendAddReq : public PktBase CMD : 0x64
struct PktFriendRemoveReq : public PktBase CMD : 0x65
struct PktFriendEtc : public PktBase CMD : 0x66
struct PktFriendAck : public PktBase CMD : 0x67
struct PktFriendDB : public PktBase CMD : 0x68
ģ<><C4A3> <20><><EFBFBD><EFBFBD> Operations
<Client->GameServer>
ģ<><C4A3> <20><><EFBFBD><EFBFBD> : PktFriendAddReq
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendAddReq
ģ<><C4A3> <20><><EFBFBD><EFBFBD> : PktFriendRemoveReq
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendRemoveReq
<20>׷<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendEtc(Ack<63><6B><EFBFBD><EFBFBD>)
<GameServer->Client>
ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ <20>ֱ<EFBFBD> : PktFriendDB
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>߱<EFBFBD> : PktFriendDB
ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack : PktFriendAck
ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack : PktFriendAck
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> Ack : PktFriendAck
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> Ack : PktFriendAck
ģ<><C4A3> <20>α<EFBFBD><CEB1><EFBFBD> : PktFriendAck
ģ<><C4A3> <20>α׾ƿ<D7BE> : PktFriendAck
ģ<><C4A3> <20><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD> : PktFriendAddReq
<GameServer->DBAgent>
ģ<><C4A3> <20><><EFBFBD><EFBFBD> : PktFriendDB
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendDB
ģ<><C4A3> <20><><EFBFBD><EFBFBD> : PktFriendDB
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendDB
<20>׷<EFBFBD> <20><><EFBFBD><EFBFBD> : PktFriendDB
<DBAgent->GameServer>
ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ <20>ֱ<EFBFBD> : PktFriendDB
<20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>ֱ<EFBFBD> : PktFriendDB
*/
struct DBFriend
{
enum { MAX_NAME = 16 };
unsigned long m_dwCID;
unsigned long m_dwStatusFlag;
char m_szName[MAX_NAME];
};
struct DBFriendInfo
{
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
unsigned short m_wClass; // Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
char m_cLevel; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
};
struct FriendInfo
{
private:
enum StatusMask
{
IS_LOGINED = 0x00000001,
GROUP = 0x000000F0,
};
public:
enum
{
MAX_NAME = 16,
MOVE_ZONE = 0x00000100,
};
unsigned long m_dwCID;
unsigned long m_dwStatusFlag;
char m_szName[MAX_NAME];
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
unsigned short m_wClass; // Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
char m_cLevel; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
unsigned long m_dwServerID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
FriendInfo() : m_dwCID(0), m_dwStatusFlag(0), m_dwGID(0), m_wClass(0), m_cLevel(0), m_dwServerID(0) { }
bool IsLogined() { return (0 != (m_dwStatusFlag & IS_LOGINED)); }
void SetLoginStatus(bool bLogined)
{
unsigned long dwMoveZone = 0;
if(!bLogined)
{
if(m_dwStatusFlag&MOVE_ZONE )
dwMoveZone = MOVE_ZONE;
}
m_dwStatusFlag = bLogined ? (m_dwStatusFlag | IS_LOGINED) : (m_dwStatusFlag & (~IS_LOGINED));
m_dwStatusFlag = (m_dwStatusFlag - dwMoveZone);
}
unsigned long GetGroup() { return ((m_dwStatusFlag & GROUP) >> 4); }
bool IsMoveZone() { if(m_dwStatusFlag & MOVE_ZONE) return true; return false; }
void SetMoveZone(unsigned long dwMoveZone) { m_dwStatusFlag = (m_dwStatusFlag | MOVE_ZONE); }
bool SetGroup(unsigned long dwGroup)
{
if(dwGroup <= 0xF) { m_dwStatusFlag = (m_dwStatusFlag & (~GROUP)) | (dwGroup << 4); return true; }
return false;
}
};
struct DBBan
{
enum { MAX_NAME = 16 };
unsigned long m_dwCID;
char m_szName[MAX_NAME];
};
struct DBBanInfo
{
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
unsigned short m_wClass; // Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
char m_cLevel; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
};
struct BanInfo
{
enum { MAX_NAME = 16 };
unsigned long m_dwCID;
char m_szName[MAX_NAME];
unsigned long m_dwGID;
unsigned short m_wClass;
char m_cLevel;
unsigned long m_dwServerID;
BanInfo() : m_dwCID(0) { }
};
// <20>߰<EFBFBD> <20><>Ŷ
struct PktFriendAddReq : public PktBase
{
enum { MAX_NAME = 16 };
enum CMD
{
ADD_FRIEND_REQ = 0, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> (Client->GameServer), m_szName<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>.
BAN_FRIEND_REQ = 1, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> (Client->GameServer), m_szName<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>.
ADDED_INFO = 2 // ģ<><C4A3><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> (GameServer->Client), m_szName<6D><65> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>.
};
char m_szName[MAX_NAME]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>.
unsigned long m_dwCID; // ADDED_INFO<46>϶<EFBFBD><CFB6><EFBFBD> CID<49><44> <20>־<EFBFBD> <20>ش<EFBFBD>.
unsigned char m_cCmd;
};
// <20><><EFBFBD><EFBFBD> <20><>Ŷ
struct PktFriendRemoveReq : public PktBase
{
enum { MAX_NAME = 16 };
enum CMD
{
REMOVE_FRIEND_REQ = 0, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> (Client->GameServer), m_dwCID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID.
REMOVE_BAN_REQ = 1, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (Client->GameServer), m_dwCID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID.
NOFRIEND_REQ = 2, // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
char m_szName[MAX_NAME]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>.
unsigned long m_dwCID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID;
unsigned char m_cCmd;
};
// <20><>Ÿ <20><>Ŷ
struct PktFriendEtc : public PktBase
{
enum CMD
{
SETGROUP = 0, // <20>׷<EFBFBD> <20><><EFBFBD><EFBFBD> (Client->GameServer),
// m_dwCID<49><44> <20>׷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID, m_dwData<74><61> <20>ٲ<EFBFBD> <20>׷<EFBFBD> <20><>ȣ
};
unsigned long m_dwCID;
unsigned long m_dwData;
unsigned char m_cCmd;
};
// ģ<><C4A3> <20><><EFBFBD><EFBFBD> <20><>Ŷ ( Client <--> GameServer )
struct PktFriendAck : public PktBase
{
enum CMD
{
UNKNOWN_ERROR_ACK = 0, // <20><> <20><> <20><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> (Ack)
ADD_FRIEND_ACK = 1, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// CLIENT_ERROR (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8><EFBFBD> Ŀ<>ǵ带 <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>)
// NOT_LOGINED (<28>α<EFBFBD><CEB1>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20><>)
// LIST_FULL (ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20><> <20><><EFBFBD><EFBFBD>)
// REJECTED (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// m_dwCID : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID, <20><><EFBFBD>н<EFBFBD> : 0
MOVE_BAN_TO_FRIEND = 2, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client) <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// CLIENT_ERROR (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8><EFBFBD> Ŀ<>ǵ带 <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>)
// NOT_LOGINED (<28>α<EFBFBD><CEB1>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20><>)
// LIST_FULL (ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20><> <20><><EFBFBD><EFBFBD>)
// REJECTED (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// m_dwCID : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID, <20><><EFBFBD>н<EFBFBD> : 0
REMOVE_FRIEND_ACK = 3, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// CLIENT_ERROR (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8><EFBFBD> Ŀ<>ǵ带 <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>)
// NOT_IN_LIST (<28><>û<EFBFBD>ϴ<EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
// m_dwCID : 0
ADD_BAN_ACK = 4, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// CLIENT_ERROR (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8><EFBFBD> Ŀ<>ǵ带 <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>)
// NOT_LOGINED (<28>α<EFBFBD><CEB1>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20><>)
// LIST_FULL (ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20><> <20><><EFBFBD><EFBFBD>)
// m_dwCID : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID, <20><><EFBFBD>н<EFBFBD> : 0
MOVE_FRIEND_TO_BAN = 5, // ģ<><C4A3> <20>շ<EFBFBD> Ack (GameServer->Client) ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>źθ<C5BA> <20>߰<EFBFBD><DFB0><EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// CLIENT_ERROR (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8><EFBFBD> Ŀ<>ǵ带 <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>)
// NOT_LOGINED (<28>α<EFBFBD><CEB1>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20><>)
// LIST_FULL (ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20><> <20><><EFBFBD><EFBFBD>)
// REJECTED (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// m_dwCID : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID, <20><><EFBFBD>н<EFBFBD> : 0
REMOVE_BAN_ACK = 6, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// CLIENT_ERROR (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8><EFBFBD> Ŀ<>ǵ带 <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>)
// NOT_IN_LIST (<28><>û<EFBFBD>ϴ<EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
// m_dwCID : 0
FRIEND_LOGIN = 7, // ģ<><C4A3> <20>α<EFBFBD><CEB1><EFBFBD> (GameServer->Client), m_dwCID<49><44> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> CID, m_szName<6D><65> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> <20≯<EFBFBD>
FRIEND_LOGOUT = 8, // ģ<><C4A3> <20>α׾ƿ<D7BE> (GameServer->Client), m_dwCID<49><44> <20>α׾ƿ<D7BE><C6BF><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> CID, m_szName<6D><65> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> <20≯<EFBFBD>
FRIEND_LOGIN_TO_GAME = 9, // ģ<><C4A3> <20>α<EFBFBD><CEB1><EFBFBD> (Chat->GameServer)
// m_dwCID<49><44> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> CID, m_szName<6D><65> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> <20≯<EFBFBD>
// <20><>Ŷ <20>ڿ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> CID<49><44><EFBFBD><EFBFBD>(2byte unsigned long)
// ij<><C4B3><EFBFBD><EFBFBD> CID<49><44> CID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>. <20>ش<EFBFBD> ij<><C4B3><EFBFBD>͵鿡<CDB5><E9BFA1> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȴ<EFBFBD>.
FRIEND_LOGOUT_TO_GAME = 10, // ģ<><C4A3> <20>α׾ƿ<D7BE> (Chat->GameServer)
// m_dwCID<49><44> <20>α׾ƿ<D7BE><C6BF><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> CID, m_szName<6D><65> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD> <20≯<EFBFBD>
// <20><>Ŷ <20>ڿ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> CID<49><44><EFBFBD><EFBFBD>(2byte unsigned long)
// ij<><C4B3><EFBFBD><EFBFBD> CID<49><44> CID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>. <20>ش<EFBFBD> ij<><C4B3><EFBFBD>͵鿡<CDB5><E9BFA1> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȴ<EFBFBD>.
FRIEND_INFO_UPDATE = 11, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ.
BAN_INFO_UPDATE = 12, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ.
BAN_LOGIN = 13, // <20>ź<EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>. (GameServer->Client)
BAN_LOGOUT = 14, // <20>ź<EFBFBD> <20>α׾ƿ<D7BE>. (GameServer->Client)
BAN_LOGIN_TO_GAME = 15, // <20>ź<EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>. (Chat->GameServer)
BAN_LOGOUT_TO_GAME = 16, // <20>ź<EFBFBD> <20>α׾ƿ<D7BE>. (Chat->GameServer)
// edith 2009.08.28 NoFriend <20>߰<EFBFBD>
NOFRIEND_ACK = 17, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> Ack (GameServer->Client)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : SERVER_ERROR (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// CLIENT_ERROR (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8><EFBFBD> Ŀ<>ǵ带 <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>)
// NOT_IN_LIST (<28><>û<EFBFBD>ϴ<EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
// m_dwCID : 0
};
enum FriendERROR
{
SERVER_ERROR = 1, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CLIENT_ERROR = 2, // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8><EFBFBD> Ŀ<>ǵ带 <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
NOT_LOGINED = 3, // <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾ<EFBFBD><CABE><EFBFBD>
LIST_FULL = 4, // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><> á<><C3A1>
REJECTED = 5, // <20>źδ<C5BA><CEB4><EFBFBD><EFBFBD><EFBFBD>
NOT_IN_LIST = 6, // <20><>û<EFBFBD>ϴ<EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
FAIL_ENEMY = 7 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20>Ұ<EFBFBD><D2B0><EFBFBD>
};
enum { MAX_NAME = 16 };
unsigned long m_dwCID;
char m_szName[MAX_NAME];
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>.
unsigned short m_wClass; // Ŭ<><C5AC><EFBFBD><EFBFBD>.
char m_cLevel; // <20><><EFBFBD><EFBFBD>.
unsigned long m_dwServerID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>.
unsigned char m_cCmd;
};
// ģ<><C4A3> <20><><EFBFBD><EFBFBD> <20><>Ŷ
struct PktFriendDB : public PktDD
{
enum CMD
{
ADD_FRIEND = 0, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent) Owner<65><72> Reference<63><65> <20><><EFBFBD><EFBFBD>.
REMOVE_FRIEND = 1, // ģ<><C4A3> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent) Owner<65><72> Reference<63><65> <20><><EFBFBD><EFBFBD>. <20>̶<EFBFBD><CCB6><EFBFBD> ReferenceUID = 0;
ADD_BAN = 2, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent) Owner<65><72> Reference<63><65> <20><><EFBFBD><EFBFBD>.
REMOVE_BAN = 3, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent) Owner<65><72> Reference<63><65> <20><><EFBFBD><EFBFBD>. <20>̶<EFBFBD><CCB6><EFBFBD> ReferenceUID = 0;
SETGROUP = 4, // <20>׷<EFBFBD> <20><><EFBFBD><EFBFBD> (GameServer->DBAgent)
// Owner<65><72> Reference<63><65> m_dwData<74><61> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>̶<EFBFBD><CCB6><EFBFBD> ReferenceUID = 0;
FRIEND_LIST = 5, // ģ<><C4A3> <20><><EFBFBD><EFBFBD>Ʈ (DBAgent->GameServer, GameServer->Client)
// FriendList<73><74> <20><EFBFBD><E8BFAD> <20>ٴ´<D9B4>.
// Reference<63><65> <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>. m_dwData<74><61> <20>ڿ<EFBFBD> <20>ٴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>.
BAN_LIST = 6, // <20>ź<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ (DBAgent->GameServer, GameServer->Client)
// BanInfo<66><6F> <20><EFBFBD><E8BFAD> <20>ٴ´<D9B4>.
// Reference<63><65> <20>ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>. m_dwData<74><61> <20>ڿ<EFBFBD> <20>ٴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>.
FRIEND_INFO_UPDATE = 7, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ.
FRIEND_INFO = 8, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ.
BAN_INFO = 9, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ.
};
unsigned long m_dwOwnerUID; // <20><><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> UID
unsigned long m_dwOwnerCID; // <20><><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> CID
unsigned long m_dwReferenceUID; // <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> UID
unsigned long m_dwReferenceCID; // <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> CID
unsigned long m_dwData; // Data
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
unsigned short m_wClass; // <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
char m_cLevel; // <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
unsigned long m_dwServerID; // <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
unsigned char m_cCmd;
};
#pragma pack()
#endif

View File

@@ -0,0 +1,43 @@
#ifndef _GAME_EVENT_PACKET_H_
#define _GAME_EVENT_PACKET_H_
#include <Network/Packet/PacketBase.h>
#pragma pack(1)
// ---------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
typedef struct PktEventDropItem* LPPktEventDropItem;
struct PktEventDropItem : public PktBase
{
unsigned short m_usItemID;
};
struct PktItemQtyControl : public PktBase
{
enum TYPE
{
ADD = 0,
DEL = 1,
STATUS_REQUEST = 2,
STATUS_ACK = 3,
STATUS_ACK_END = 4
};
unsigned long m_dwItemTypeID;
unsigned long m_dwItemQty;
unsigned long m_dwCurrentItemQty;
time_t m_tStartTime;
time_t m_tEndTime;
unsigned char m_cType;
unsigned char m_cGroup;
};
#pragma pack()
#endif

View File

@@ -0,0 +1,119 @@
#ifndef _GAME_LOG_PACKET_H_
#define _GAME_LOG_PACKET_H_
#include <Network/Packet/PacketBase.h>
namespace GAMELOG
{
namespace CMD
{
enum Packet
{
DefaultInfo = 1,
ItemInfo = 2,
EquipInfo = 3,
};
enum LogType
{
CHAR_LOGIN = 1, // <20>α<EFBFBD><CEB1><EFBFBD>
CHAR_LOGOUT = 2, // <20>α׾ƿ<D7BE>
PICKUP = 3, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
DROP = 4, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
BUY_ITEM = 5, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
SELL_ITEM = 6, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȱ<EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
BEFORE_EXCHANGE = 7, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD> <20><>ȯâ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
AFTER_EXCHANGE = 8, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD> <20><>ȯâ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
USE_ITEM = 9, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
UPGRADE_ITEM = 10, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
INSTALL_SOCKET = 11, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڱ<EFBFBD>
GET_QUEST_ITEM = 12, // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GET_QUEST_REWARD = 13, // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
REMOVE_QUEST_ITEM = 14, // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
REPAIR_ITEM = 15, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
ADMIN_DROP = 16, // <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD>
CHAR_LOGIN_INVENTORY_GOLD = 17, // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1>ν<EFBFBD> <20>κ<EFBFBD><CEBA><20><>
CHAR_LOGIN_DEPOSIT_GOLD = 18, // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1>ν<EFBFBD> â<><C3A2> <20><>
CHAR_LOGOUT_INVENTORY_GOLD = 19, // ij<><C4B3><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE><C6BF><EFBFBD> <20>κ<EFBFBD><CEBA><20><>
CHAR_LOGOUT_DEPOSIT_GOLD = 20, // ij<><C4B3><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE><C6BF><EFBFBD> â<><C3A2> <20><>
DEPOSIT_RENT_GOLD = 21, // â<><C3A2> <20><EFBFBD><EBBFA9>
FAME_GET_BATTLE = 22, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAME_LOSE_BATTLE = 23, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAME_GET_CAMP = 24, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAME_LOSE_CAMP = 25, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
QUEST_GET_REWARD = 26, // <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CHANGE_RIDE = 27, // <20><><EFBFBD>̴<EFBFBD> Ÿ<><C5B8> <20>α<EFBFBD>
MAX_LOG_TYPE = 28
};
};
namespace PACKET
{
enum Flags
{
ITEM_INFO = (1 << 0),
EQUIP_INFO = (1 << 1)
};
enum
{
MAX_SOCKET_NUM = 8,
MAX_ATTRIBUTE_NUM = 35
};
#pragma pack(1)
struct DefaultInfo : public PktBase
{
time_t m_dwTime;
unsigned long m_dwFirstUID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UID
unsigned long m_dwFirstCID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID
unsigned long m_dwGold; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ް<EFBFBD> <20><> <20>ݾ<EFBFBD>
unsigned long m_dwSecondUID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UID
unsigned long m_dwSecondCID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CID
unsigned short m_usPosX; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͼ <20><><EFBFBD><EFBFBD>(X)
unsigned short m_usPosY; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͼ <20><><EFBFBD><EFBFBD>(Y)
unsigned short m_usPosZ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͼ <20><><EFBFBD><EFBFBD>(Z)
unsigned char m_cCommand; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cFlags; // <20><>Ÿ <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٴ<EFBFBD><D9B4><EFBFBD> <20><>..)
};
struct ItemInfo : public DefaultInfo
{
unsigned __int64 m_dwItemUID;
unsigned short m_usItemProtoTypeID;
unsigned char m_cTakeType;
unsigned char m_cItemAmount;
unsigned char m_cItemPosX;
unsigned char m_cItemPosY;
unsigned char m_cItemPosZ;
unsigned char m_cItemExtra; // <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD>
};
struct EquipInfo : public ItemInfo
{
unsigned short m_usRuneSocket; // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cUpgradeStep; // <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>ܰ<EFBFBD>
unsigned char m_cMaxSocket; // <20><><EFBFBD><EFBFBD> <20>շ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
unsigned char m_cMaxDurability; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char m_cSocket[MAX_SOCKET_NUM]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
short m_usAttribute[MAX_ATTRIBUTE_NUM]; // <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
};
#pragma pack()
};
};
#endif

View File

@@ -0,0 +1,611 @@
#ifndef _GUILD_PACKET_H_
#define _GUILD_PACKET_H_
#include <Network/Packet/PacketBase.h>
#include <Creature/Character/CharacterClass.h>
#include <Creature/CreatureStructure.h>
#include <Community/Guild/GuildConstants.h>
#include <Community/Guild/GuildStructure.h>
#pragma pack(1)
using namespace Guild;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktCreateGuild : public PktBase
{
enum PktCreateGuildErr
{
FAIL_ALREADY_NAME = 2, // <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20≯<EFBFBD>
FAIL_DISSOLVE_GUILD = 3, // <20><><EFBFBD><EFBFBD> <20><>ü
FAIL_INVALID_NAME = 4 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
};
enum DissolveReason
{
NONE_LOGIN = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƹ<EFBFBD><C6B9><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
MIN_MEMBER_TIMEOUT = 2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20>ο<EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> ä <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
NONE_NEXT_GUILDMASTER_BY_NONE_LOGIN = 3, // <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><E5B8B6><EFBFBD>Ͱ<EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20>̾<EFBFBD><CCBE>Ϸ<EFBFBD> <20><> <20>ÿ<EFBFBD> <20><EFBFBD><E6B8B6> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
NONE_NEXT_GUILDMASTER_BY_GUILDMASTER_OUT = 4, // <20><><EFBFBD><EFBFBD><E5B8B6><EFBFBD><EFBFBD> Ż<><C5BB><EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>̾<EFBFBD><CCBE>Ϸ<EFBFBD> <20><> <20>ÿ<EFBFBD> <20><EFBFBD><E6B8B6> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
NONE_NEXT_GUILDMASTER_BY_GUILDMASTER_DELETED = 5 // <20><><EFBFBD><EFBFBD><E5B8B6><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>̾<EFBFBD><CCBE>Ϸ<EFBFBD> <20><> <20>ÿ<EFBFBD> <20><EFBFBD><E6B8B6> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
unsigned long m_dwCID;
unsigned long m_dwGID;
unsigned char m_cInclination;
char m_szGuildName[MAX_GUILD_NAME_LEN];
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildList : public PktBase
{
enum { MAX_NUM_PER_PAGE = 10 };
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned char m_cSortCmd; // <20><><EFBFBD><EFBFBD>
unsigned char m_cPage; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char m_cSmallNodeNum; // <20><><EFBFBD><EFBFBD> <20><> (C -> S : üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD>, S -> C : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
unsigned char m_cLargeNodeNum; // <20><><EFBFBD><EFBFBD> <20><> (<28><>ü <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (üũ<C3BC><C5A9>)
struct GuildCheckSumNode
{
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned long m_dwCheckSum; // üũ<C3BC><C5A9>
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȥ <20><>û<EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>͵<EFBFBD>)
struct GuildSmallInfoNode
{
// TODO : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> GuildLargeInfoNode<64><65> <20><><EFBFBD><EFBFBD> <20><> <20><> <20>մϴ<D5B4>.
// (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><C3B8><EFBFBD> <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>˴ϴ<CBB4>.)
// <09><><EFBFBD>Ҿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GuildLargeInfoNode<64><65> <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>մϴ<D5B4>.
// (<28><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20>մϴ<D5B4>.)
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned char m_cIndex; // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
unsigned char m_cInclination; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned short m_wRank; // <20><><EFBFBD><EFBFBD>
unsigned long m_dwFame; // <20><><EFBFBD><EFBFBD>
unsigned char m_cLevel; // <20><><EFBFBD><EFBFBD>
unsigned char m_cCurrentMemberNum; // <20>ο<EFBFBD><CEBF><EFBFBD>
char m_szName[MAX_GUILD_NAME_LEN]; // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
char m_szMasterName[MAX_MEMBER_NAME_LEN]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
GuildSmallInfoNode()
: m_dwGID(0), m_cIndex(0), m_cInclination(0), m_wRank(0), m_dwFame(0), m_cLevel(0), m_cCurrentMemberNum(0)
{
std::fill_n(m_szName, int(MAX_GUILD_NAME_LEN), 0);
std::fill_n(m_szMasterName, int(MAX_MEMBER_NAME_LEN), 0);
}
GuildSmallInfoNode(unsigned long dwGID, unsigned char cIndex, unsigned char cInclination,
unsigned short wRank, unsigned long dwFame, unsigned char cLevel,
unsigned char cCurrentMemberNum, const char* szGuildName, const char* szMasterName)
: m_dwGID(dwGID), m_cIndex(cIndex), m_cInclination(cInclination),
m_wRank(wRank), m_dwFame(dwFame), m_cLevel(cLevel), m_cCurrentMemberNum(cCurrentMemberNum)
{
if (NULL != szGuildName)
{
strncpy(m_szName, szGuildName, MAX_GUILD_NAME_LEN);
}
if (NULL != szMasterName)
{
strncpy(m_szMasterName, szMasterName, MAX_MEMBER_NAME_LEN);
}
}
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>)
struct GuildLargeInfoNode : public GuildSmallInfoNode
{
char m_szMark[MAX_MARK_SIZE]; // <20><>ũ
unsigned char m_cRelationByMine; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ(<28><><EFBFBD><EFBFBD>)<29><> <20><> <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cRelationByTarget; // <20><> <20><><EFBFBD>尡 Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GuildLargeInfoNode()
: GuildSmallInfoNode(), m_cRelationByMine(0), m_cRelationByTarget(0)
{
std::fill_n(m_szMark, int(MAX_MARK_SIZE), 0);
}
GuildLargeInfoNode(unsigned long dwGID, unsigned char cIndex, unsigned char cInclination,
unsigned short wRank, unsigned long dwFame, unsigned char cLevel,
unsigned char cCurrentMemberNum, const char* szMasterName, const char* szGuildName,
const char* szMark, unsigned char cRelationByMine, unsigned char cRelationByTarget)
: GuildSmallInfoNode(dwGID, cIndex, cInclination, wRank, dwFame, cLevel, cCurrentMemberNum, szGuildName, szMasterName),
m_cRelationByMine(cRelationByMine), m_cRelationByTarget(cRelationByTarget)
{
if (NULL != szMark)
{
memcpy(m_szMark, szMark, MAX_MARK_SIZE);
}
}
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildCmd : public PktBase
{
enum GuildCmd
{
GC_INVITE = 0, // <20>ʴ<EFBFBD>
GC_JOIN = 1, // <20><><EFBFBD><EFBFBD> (<28>ʴ뿡 <20><><EFBFBD><EFBFBD>)
GC_REFUSE = 2, // <20><><EFBFBD><EFBFBD> (<28>ʴ뿡 <20><><EFBFBD><EFBFBD>)
GC_ASK_ENTER = 3, // <20><><EFBFBD><EFBFBD> <20><>û
GC_ASK_LEAVE = 4, // Ż<><C5BB> <20><>û
GC_KICK = 5, // <20><><EFBFBD><EFBFBD> Ż<><C5BB>
GC_SETUP_TITLE = 6, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GC_LOGINOUT = 7, // <20>α<EFBFBD><CEB1><EFBFBD>/<2F>ƿ<EFBFBD>
GC_RANK_UP = 8, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GC_RANK_DOWN = 9, // <20><><EFBFBD><EFBFBD> <20>Ʒ<EFBFBD><C6B7><EFBFBD>
GC_TACTICS = 10, // <20><20><><EFBFBD><EFBFBD> <20><>û.
GC_TACTICS_JOIN = 11, // <20><20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD>.
GC_TACTICS_TITLE = 12, // <20><20>㰡.
GC_TACTICS_KICK = 13, // <20><20><><EFBFBD><EFBFBD>.
GC_TACTICS_LEAVE = 14, // <20>뺴 Ż<><C5BB>.
GC_TACTICS_REQUEST = 15, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><20><20><> ij<><C4B3><EFBFBD><EFBFBD> Ȯ<><C8AE> <20><>û.
};
enum PktGuildCmdErr
{
FAIL_NOT_MEMBER = 2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
FAIL_NOT_RIGHT = 3, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_ALREADY_MEMBER = 4, // <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FAIL_OVER_MEMBER = 5, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
FAIL_NATION = 6, // <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_DIFFERENCE_TITLE = 7, // <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_OVER_MEMBER_NUM = 8, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD><CAB0>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_GUILDWAR_TIME_KICK = 9, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> Ż<><C5BB><EFBFBD><EFBFBD> <20>õ<EFBFBD><C3B5>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_TACTICS_LIMITLEVEL = 10, // <20><20><>û <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵǴ<C8B5> ij<><C4B3><EFBFBD><EFBFBD>.
FAIL_TACTICS_NATION = 11, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>.
FAIL_TACTICS_GUILDJOIN = 12, // <20><><EFBFBD><20><EFBFBD><EBBAB4> <20><><EFBFBD>ԵǾ<D4B5><C7BE>ְų<D6B0> <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>.
FAIL_TACTICS_OVER_MEMBER = 13, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>.
FAIL_TACTICS_LOGOUT = 14 // <20><20><20><> <20>α׾ƿ<D7BE> <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>.
};
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned long m_dwSenderID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (<28><>ü)
unsigned long m_dwReferenceID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> (<28><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><>Ʈ)
char m_szGuildName[MAX_GUILD_NAME_LEN]; // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
char m_szSenderName[MAX_MEMBER_NAME_LEN]; // ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> (<28><>ü)
unsigned short m_wCmd; // <20><><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildMemberList : public PktBase
{
enum { MAX_NUM_PER_PAGE = 10 };
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned char m_cMemberType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ, <20><EFBFBD><EBBAB4><EFBFBD><EFBFBD>Ʈ
unsigned char m_cSortCmd; // <20><><EFBFBD><EFBFBD> (Guild::MemberSort)
unsigned char m_cPage; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char m_cTotalMemberNum; // <20><> <20><><EFBFBD><EFBFBD> <20><>
unsigned char m_cNodeNum; // <20><><EFBFBD><EFBFBD> <20><> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct GuildMemberInfoNode
{
unsigned long m_dwCID;
char m_szName[MAX_MEMBER_NAME_LEN];
unsigned char m_cTactics;
unsigned long m_dwFame;
unsigned long m_dwGold;
unsigned long m_dwServerID;
unsigned char m_cRank;
unsigned char m_cTitle;
unsigned char m_cLevel;
unsigned char m_cClass;
unsigned char m_cGuildWarFlag;
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ (Game <-> DBAgent)
struct PktGuildMemberInfoUpdate : public PktBase
{
unsigned long m_dwGID;
unsigned long m_dwCID;
MemberListInfo m_MemberListInfo;
MemberDetailInfo m_MemberDetailInfo;
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
struct PktGuildMemberFameUpdate : public PktBase
{
unsigned long m_dwOurGID;
unsigned long m_dwEnemyGID;
unsigned long m_dwCID;
unsigned char m_cType;
int m_nAddFame;
};
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
struct PktGuildMemberGoldUpdate : public PktBase
{
unsigned long m_dwGID;
unsigned long m_dwCID;
unsigned long m_dwGold;
};
// <20><><EFBFBD><EFBFBD> <20><>ũ
struct PktGuildMark : public PktBase
{
enum eError
{
FAIL_INVALID_GUILD = 2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_INVALID_MARK = 3, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD>
FAIL_INVALID_CHARACTER = 4, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʴ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>
FAIL_NOT_MASTER = 5, // <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ƴ<EFBFBD>
FAIL_NOT_ENOUGH_GOLD = 6, // <20>ݾ<EFBFBD> <20><><EFBFBD><EFBFBD>
};
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
char m_szMark[MAX_MARK_SIZE]; // <20><>ũ
unsigned long m_dwGold; // <20>ݰ<EFBFBD> <20>ܾ<EFBFBD>
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildLevel : public PktBase
{
unsigned long m_dwUID; // <20><><EFBFBD>̵<EFBFBD> (C -> S : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>, S -> C : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>)
unsigned char m_cLevel; // <20><><EFBFBD><EFBFBD>
unsigned long m_dwGold; // <20>ݰ<EFBFBD> <20>ܾ<EFBFBD>
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildRelation : public PktBase
{
enum eSubCmd
{
GR_HOSTILITY = 0, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GR_PEACE = 1, // <20><>ȭ <20><><EFBFBD><EFBFBD>
GR_ALERT = 2, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GR_COUNTER = 3, // ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GR_REQUEST = 4, // <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEBAB8> <20><>ȭâ
GR_HOSTILITYDEL = 5 // A->B<><42> <20><><EFBFBD><EFBFBD><EBBCB1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> A->B<><42><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ص<EFBFBD> B<><42> Target<65><74> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EBBCB1> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>. B<><42> <20><><EFBFBD><EFBFBD> 5<><35> Ŀ<>ǵ<EFBFBD><C7B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD>
// <20><><EFBFBD>Ұ<EFBFBD> <20>ȴ<EFBFBD>.
};
enum eError
{
FAIL_NOT_MEMBER = 2, // <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
FAIL_NOT_HOSTILITY_TIME = 3, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
FAIL_NOT_ALERT_TIME = 4, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
FAIL_NOT_COUNTER_TIME = 5, // ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
FAIL_NOT_MASTER = 6, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ƴ<EFBFBD>
FAIL_NOT_EXIST_GUILD = 7, // <20><><EFBFBD><EFBFBD> ID<49><44> 0 <20>̰ų<CCB0> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_SELF_GUILD = 8, // <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD><E5BFA1> <20><><EFBFBD><EFBFBD>/<2F><>ȭ/<2F><><EFBFBD><EFBFBD><><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_ALREADY_HOSTILITY = 9, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
FAIL_ALREADY_COUNTER_HOSTILITY = 10, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
FAIL_ALREADY_ALERT_HOSTILITY = 11, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
FAIL_ALREADY_NEUTRALITY = 12, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20>߸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
FAIL_MAX_ALERT_NUM = 13, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
FAIL_NOT_HAVE_DEVELOPING_CAMP = 14, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_NOT_HAVE_ALERT = 15, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> <20>Ϸ<EFBFBD><CFB7><EFBFBD>
FAIL_TARGET_HOSTILITY_FULL = 16, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20>Ѱ<EFBFBD>ġ <20>ʰ<EFBFBD>
FAIL_REQUEST_WINDOW = 100, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD><CAB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD>
FAIL_REQUEST_COUNTER = 101, // ī<><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD>
};
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned long m_dwGID; // <20>ڽ<EFBFBD><DABD><EFBFBD> GID
unsigned long m_dwTargetGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned long m_dwValue; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GID ( GR_REQUEST <20>϶<EFBFBD><CFB6><EFBFBD>... )
char m_cSubCmd; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD>
char m_szGuildName[MAX_GUILD_NAME_LEN]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char m_szTempGuildName[MAX_GUILD_NAME_LEN]; // <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildInclination : public PktBase
{
enum PktGIErr
{
FAIL_SO_FAST = 2, // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
FAIL_WRONG_NATION_KARTERANT = 3, // ī<><C4AB><EFBFBD>׶<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><E5BFA1> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
FAIL_WRONG_NATION_MERKADIA = 4 // <20>޸<EFBFBD>ī<EFBFBD><C4AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E5BFA1> <20><>ĭ<EFBFBD><C4AD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
};
unsigned long m_dwUID; // <20><><EFBFBD>̵<EFBFBD> (C -> S : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>, S -> C : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>)
unsigned char m_cInclination; // <20><><EFBFBD><EFBFBD> (Guild::Inclination <20><><EFBFBD><EFBFBD>)
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct GuildRight
{
enum Index
{
PUT_STOREHOUSE = 0,
GET_STOREHOUSE = 1,
USE_SAFE = 2,
INVITE_MEMBER = 3,
PERMIT_JOIN = 4,
CHANGE_PASSWORD = 5,
REGULATE_TEX = 6,
KICK_MEMBER = 7,
BOARD_ADMIN = 8,
SETUP_MARK_N_LEVEL = 9,
SETUP_MIDDLE = 10,
DIVIDE_GOLD = 11,
SETUP_POLICY = 12,
MAX_USING_RIGHT = 13
};
unsigned char m_aryRight[MAX_RIGHT_SIZE];
GuildRight()
{
Init(false);
}
GuildRight(bool bMaxRight)
{
Init(bMaxRight);
}
void Init(bool bMaxRight)
{
std::fill_n(m_aryRight, int(MAX_RIGHT_SIZE), Guild::NONE);
m_aryRight[CHANGE_PASSWORD] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[PUT_STOREHOUSE] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[GET_STOREHOUSE] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[USE_SAFE] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[INVITE_MEMBER] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[PERMIT_JOIN] = (true == bMaxRight) ? Guild::COMMON : Guild::MASTER;
m_aryRight[REGULATE_TEX] = (true == bMaxRight) ? Guild::MIDDLE_ADMIN : Guild::MASTER;
m_aryRight[KICK_MEMBER] = (true == bMaxRight) ? Guild::MIDDLE_ADMIN : Guild::MASTER;
m_aryRight[BOARD_ADMIN] = (true == bMaxRight) ? Guild::MIDDLE_ADMIN : Guild::MASTER;
m_aryRight[SETUP_MARK_N_LEVEL] = (true == bMaxRight) ? Guild::MASTER : Guild::MASTER;
m_aryRight[SETUP_MIDDLE] = (true == bMaxRight) ? Guild::MASTER : Guild::MASTER;
m_aryRight[DIVIDE_GOLD] = (true == bMaxRight) ? Guild::MASTER : Guild::MASTER;
m_aryRight[SETUP_POLICY] = (true == bMaxRight) ? Guild::MASTER : Guild::MASTER;
}
int IsValid(void)
{
GuildRight MaxRight(true);
int nIndex = 0;
for (; nIndex < MAX_RIGHT_SIZE; ++nIndex)
{
if (m_aryRight[nIndex] > MaxRight.m_aryRight[nIndex])
{
return nIndex;
}
}
return nIndex;
}
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildRight : public PktBase
{
unsigned long m_dwUID; // <20><><EFBFBD>̵<EFBFBD> (C -> S : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>, S -> C : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>)
GuildRight m_GuildRight; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
// <20>ڱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktMyGuildInfo : public PktBase
{
unsigned long m_dwGold; // <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD>
GuildRight m_GuildRight; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cTitle; // <20><><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD> <20><>Ȳ <20><><EFBFBD><EFBFBD>Ʈ (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><><EFBFBD><EFBFBD> <20><>Ȳ <20><><EFBFBD><EFBFBD>
struct PktGuildHostilityList : public PktBase
{
enum { MAX_NUM_PER_PAGE = 5 };
enum PageState
{
PAGE_CURRENT = 0,
PAGE_PREV = 1,
PAGE_NEXT = 2
};
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned char m_cCurrentPage; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char m_cPageState; // <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cNodeNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned short m_wTotalItemNum; // <20><><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD><C8B2> <20><> <20><><EFBFBD><EFBFBD>Ʈ <20><>
char m_szHostility[MAX_GUILD_NAME_LEN]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char m_szAlert[MAX_GUILD_NAME_LEN]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȳ <20><><EFBFBD><EFBFBD>
struct GuildHostilityInfoNode
{
char m_szName[MAX_GUILD_NAME_LEN]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
unsigned char m_cRelationType; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> (Guild::Relation)
};
// <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><>Ŷ (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildRelationInfo : public PktBase
{
unsigned long m_dwCID; // <20><>û ij<><C4B3><EFBFBD><EFBFBD>
unsigned long m_dwGID; // <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD> ID
unsigned short m_wNodeNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct GuildRelationInfoNode
{
// GuildLargeInfo <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long m_dwGID;
unsigned char m_cRelationByMine;
unsigned char m_cRelationByTarget;
};
// <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD>
struct PktGuildSafe : public PktBase
{
enum PktGuildSafeErr
{
FAIL_NOT_ENOUGH_MONEY = 2, // <20>ݰ<EFBFBD><DDB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>
FAIL_NOT_CHAR_MONEY = 3, // ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>
FAIL_NOT_GUILD_DEPOSIT = 4, // <20>ݰ<EFBFBD> <20>Ա<EFBFBD><D4B1>ϴµ<CFB4> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
FAIL_NOT_GUILD_UPDATE = 5, // <20>ݰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ϴµ<CFB4> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.
FAIL_REQUEST_DATA = 6, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB><EFBFBD>Դϴ<D4B4>.
};
enum SafeCmd
{
SC_WITHDRAWAL = 0, // <20><><EFBFBD><EFBFBD>
SC_DEPOSIT = 1, // <20>Ա<EFBFBD>
SC_RELEASE = 2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SC_REFER = 3, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȸ
SC_CAMPSHOP = 4, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ͱ<EFBFBD>
SC_BONUS = 5, // <20><><EFBFBD>ʽ<EFBFBD> <20>Ա<EFBFBD>
};
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned long m_dwGold; // <20>Ա<EFBFBD>/<2F><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ݾ<EFBFBD>
unsigned char m_cCmd; // <20><><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD> Ack
struct PktGuildSafeAck : public PktBase
{
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned long m_dwSafeGold; // <20>ݰ<EFBFBD> <20>ܾ<EFBFBD>
unsigned long m_dwCharGold; // ij<><C4B3><EFBFBD><EFBFBD> <20>ܾ<EFBFBD> (C -> S : <20>Ա<EFBFBD>/<2F><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ݾ<EFBFBD>)
unsigned char m_cCmd; // <20><><EFBFBD><EFBFBD>
char m_szCharName[Guild::MAX_MEMBER_NAME_LEN]; // ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>
};
// <20><><EFBFBD><EFBFBD> DB (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) + <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
struct PktGuildDB : public PktBase
{
bool m_bStartFlag; // <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD>ΰ<EFBFBD>? (PktGuildDB<44><42> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> ù<><C3B9>° <20><><EFBFBD><20>޾<EFBFBD><DEBE><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD>־<EFBFBD><D6BE><EFBFBD> <20>Ѵ<EFBFBD>.)
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
unsigned char m_cTotalMemberNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
unsigned char m_cRelationByMineNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char m_cRelationByTargetNum; // <20>ٸ<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned short m_wSize; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (DB)
struct GuildInfoDB
{
unsigned long m_dwGID;
char m_strName[MAX_GUILD_NAME_FOR_DB];
unsigned char m_cLevel;
unsigned long m_dwFame;
unsigned long m_dwGold;
TIME m_tmLastLogout;
TIME m_tmCheckMember;
TIME m_tmGMLastLogout;
char m_szMark[MAX_MARK_SIZE];
char m_szRight[MAX_RIGHT_SIZE];
unsigned char m_cInclination;
TIME m_tmChangeInclination;
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (DB)
struct GuildMemberDB
{
unsigned long m_dwGID;
unsigned long m_dwCID;
unsigned long m_dwRank;
char m_strName[MAX_MEMBER_NAME_LEN];
unsigned long m_dwTitle;
unsigned char m_cLevel;
unsigned short m_wClass;
unsigned long m_dwFame;
unsigned long m_dwGold;
unsigned char m_cGuildWarFlag;
TIME m_LeaveGuildTime;
unsigned char m_cTactics;
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (DB)
struct GuildRelationDB
{
unsigned long m_dwGID;
unsigned long m_dwTargetGID;
unsigned char m_cRelation;
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ.
struct PktGuildPosition : public PktBase
{
enum PktErr
{
FAIL_GUILD = 1, // <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
FAIL_CONNECT_CHAR = 2, // ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>϶<EFBFBD>.
FAIL_DB_UPDATE = 3, // DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>.
FAIL_MEMBER_DELETE = 4 // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
};
enum Const
{
TYPE_POSITION = 0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
TYPE_MEMBERDELETE = 1 // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
};
unsigned long m_dwGID;
unsigned long m_dwCID;
unsigned char m_cPosition;
unsigned char m_cType;
};
// <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><20>ӽ÷<D3BD>(<28><><EFBFBD>̽<EFBFBD>ƽ Ű <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>).
struct PktKeyInfo : public PktBase
{
enum Const
{
MAX_KEY_INFO = 34
};
unsigned long m_dwCID;
unsigned long m_dwKeyInfo[MAX_KEY_INFO];
};
#pragma pack()
#endif

View File

@@ -0,0 +1,174 @@
#ifndef _PARTY_INFO_PACKET_H_
#define _PARTY_INFO_PACKET_H_
#include "DataPacket.h"
#include <DB/DBdefine.h>
#pragma pack(1)
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktPID* LPPktPID;
struct PktPID : public PktDD
{
unsigned long m_dwCharID;
unsigned long m_dwPartyID;
unsigned long m_dwServerID;
unsigned long m_dwGID;
unsigned short m_wClass;
char m_cLevel;
};
typedef struct PktPIDAck* LPPktPIDAck;
struct PktPIDAck : public PktDD
{
PARTY m_Party;
unsigned long m_dwCharID;
unsigned long m_dwServerID;
unsigned long m_dwGID;
unsigned short m_wClass;
char m_cLevel;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktCPD* LPPktCPD;
struct PktCPD : public PktDD
{
unsigned long m_dwLeaderID;
unsigned long m_dwMemberID;
unsigned long m_dwLeaderGID;
unsigned short m_wLeaderClass;
char m_cLeaderLevel;
unsigned long m_dwMemberGID;
unsigned short m_wMemberClass;
char m_cMemberLevel;
};
typedef struct PktCPDAck* LPPktCPDAck;
struct PktCPDAck : public PktDD
{
PARTY m_Party;
unsigned long m_dwLeaderID;
unsigned long m_dwMemberID;
unsigned long m_dwLeaderGID;
unsigned short m_wLeaderClass;
char m_cLeaderLevel;
unsigned long m_dwMemberGID;
unsigned short m_wMemberClass;
char m_cMemberLevel;
unsigned char m_cZone;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktDPD* LPPktDPD;
struct PktDPD : public PktDD
{
unsigned long m_dwPartyID;
};
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// <20><>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//
//
// <09><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> : CID/CID 0/SID
// <09><><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE> : CID/CID 0/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(0 <20>ϰ<EFBFBD><CFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD>)
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : CID/CID CID/CID
// <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : CID/CID CID/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(0 <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD>)
//
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct PktPMD* LPPktPMD;
struct PktPMD : public PktDD
{
enum PktPMDErr
{
NO_SERVER_ERR = 0,
SERVER_ERROR = 1,
FAIL_WRONG_PARTY = 2
};
unsigned long m_dwPartyID;
unsigned long m_dwSenderID;
unsigned long m_dwGID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>(<28><><EFBFBD><EFBFBD> Reference <20><> <20><><EFBFBD><EFBFBD>).
unsigned long m_dwServerID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>.
unsigned short m_wClass; // Ŭ<><C5AC><EFBFBD><EFBFBD>.
char m_cLevel; // <20><><EFBFBD><EFBFBD>.
char m_strSenderName[CHAR_INFOST::MAX_NAME_LEN];
};
struct PartyMemberData
{
// <20><>æƮ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> CreatureStructure.h<><68> EnchantInfo<66><6F> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>մϴ<D5B4>.
enum ChangedData
{
CHANGED_XPOS = ( 1 << 0 ),
CHANGED_YPOS = ( 1 << 1 ),
CHANGED_ZPOS = ( 1 << 2 ),
CHANGED_MAX_HP = ( 1 << 3 ),
CHANGED_MAX_MP = ( 1 << 4 ),
CHANGED_CUR_HP = ( 1 << 5 ),
CHANGED_CUR_MP = ( 1 << 6 ),
CHANGED_LEVEL = ( 1 << 7 ),
CHANGED_CLASS = ( 1 << 8 ),
CHANGED_ENCHANT_INFO_0 = ( 1 << 9 ),
CHANGED_ENCHANT_INFO_1 = ( 1 << 10 ),
CHANGED_ENCHANT_INFO_2 = ( 1 << 11 ),
CHANGED_ENCHANT_INFO_3 = ( 1 << 12 )
};
enum Const
{
MAX_ENCHANT_INFO_NUM = 4
};
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> CID
float m_fXPos; // X<><58>ġ
float m_fYPos; // Y<><59>ġ
float m_fZPos; // Z<><5A>ġ
unsigned short m_usMaxHP; // <20>ִ<EFBFBD> HP
unsigned short m_usMaxMP; // <20>ִ<EFBFBD> MP
unsigned short m_usCurHP; // <20><><EFBFBD><EFBFBD> HP
unsigned short m_usCurMP; // <20><><EFBFBD><EFBFBD> MP
unsigned char m_cLevel; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cClass; // ij<><C4B3><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
unsigned long m_dwEnchantInfo[MAX_ENCHANT_INFO_NUM]; // <20><>æƮ <20><><EFBFBD><EFBFBD>
unsigned short m_usDataChanged; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
#pragma pack()
#endif

View File

@@ -0,0 +1,79 @@
#ifndef _RANKING_PACKET_H_
#define _RANKING_PACKET_H_
#include <algorithm>
#include <Network/Packet/PacketBase.h>
#pragma pack(1)
// ---------------------------------------------------------------------------
// <20><>ŷ <20><><EFBFBD><EFBFBD>
struct RankingNode
{
enum { MAX_NAME = 16 };
char m_szCharName[MAX_NAME];
unsigned long m_dwPoint;
unsigned char m_cLevel;
unsigned char m_cClass;
RankingNode()
: m_dwPoint(0), m_cLevel(0), m_cClass(0)
{
std::fill_n(m_szCharName, int(MAX_NAME), 0);
}
RankingNode(const char* szCharName, unsigned long dwPoint, unsigned char cLevel, unsigned char cClass)
: m_dwPoint(dwPoint), m_cLevel(cLevel), m_cClass(cClass)
{
strncpy(m_szCharName, szCharName, MAX_NAME);
m_szCharName[MAX_NAME - 1] = 0;
}
bool operator < (const RankingNode& rhs)
{
return (m_dwPoint < rhs.m_dwPoint);
}
bool operator > (const RankingNode& rhs)
{
return (m_dwPoint > rhs.m_dwPoint);
}
struct ComparePoint
{
int operator() (const RankingNode& node1, const RankingNode& node2)
{
return (node1.m_dwPoint > node2.m_dwPoint);
}
};
};
typedef struct PktRankingInfo* LPPktRankingInfo;
struct PktRankingInfo : public PktBase
{
enum Const
{
MAX_NUM_PER_PAGE = 18
};
enum PktRankingInfoErr
{
FAIL_INVALID_PAGE = 2
};
unsigned long m_dwCharID;
unsigned char m_cClass;
unsigned char m_cPage;
unsigned short m_wNum;
};
#pragma pack()
#endif

View File

@@ -0,0 +1,163 @@
#ifndef _LOGIN_SERVER_INFO_
#define _LOGIN_SERVER_INFO_
#include <winsock2.h>
#include <windows.h>
#include <algorithm>
#pragma pack(1)
// -----------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü<EFBFBD><C3BC>
typedef union SERVER_ID* LPSERVER_ID;
union SERVER_ID
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum Group
{
GROUP_TEST = 0, // <20>׽<EFBFBD>Ʈ
GROUP_OFFICIAL1 = 1, // Ichman
GROUP_OFFICIAL2 = 2, //
GROUP_OFFICIAL3 = 3, //
GROUP_OFFICIAL4 = 4, //
GROUP_OFFICIAL5 = 5, //
GROUP_OFFICIAL6 = 6, //
GROUP_OFFICIAL7 = 7, //
GROUP_OFFICIAL8 = 8, //
GROUP_BATTLE_SERVER = 9, // <20><>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD>
// Rodin : MAX_GROUP_NUM<55><4D> 8<><38> <20>ϸ<EFBFBD> <20>α<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBFA1> <20>׽<EFBFBD><D7BD>ϴ<EFBFBD>. <20><>?!?!
MAX_GROUP_NUM = 10
};
enum Zone
{
NONE = 0,
ZONE1 = 1, // <20>׷<EFBFBD><D7B7><EFBFBD> <20>ڽ<EFBFBD>Ʈ
ZONE2 = 2, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ZONE3 = 3, // X <20><> <20><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
ZONE4 = 4, // <20><><EFBFBD>̳<EFBFBD> <20><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>
ZONE5 = 5, // <20><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
BATTLE_ZONE = 6, // X <20><>Ʋ <20><>
ADMIN_TOOL_ZONE = 7, // X (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) - <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰڼ<CFB0>.
CAPITAL = 8, // ī<><C4AB><EFBFBD><EFBFBD>
ZONE9 = 9, // X <20><> NEWZONE5 <20><><EFBFBD>ε<EFBFBD> <20>۷ι<DBB7><CEB9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZONE9<45><39> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
FRAG_ZONE = 10, // X <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
BATTLE_SERVER = 11, // X <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ZONE12 = 12, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
STATUE_ZONE = 13, // X <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
PRISON = 14, // <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD>)
CHAR_SELECT = 15, // X ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȭ<><C8AD> <20><>
STONE_WAR1 = 16, // <20>ο<EFBFBD> 40<34><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
STONE_WAR2 = 17, // <20>ο<EFBFBD> 80<38><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
STONE_WAR3 = 18, // <20>ο<EFBFBD> 80<38><30><EFBFBD>̻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MAX_ZONE_NUM = 19
};
enum Channel
{
// sphawk : ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD>ƽ<EFBFBD><C6BD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ժη<D4BA> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><>ģ <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// 1. <20><><EFBFBD><EFBFBD>.
// 2. PktSCInfo (<28>߰<EFBFBD><DFB0>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ<EFBFBD>Դϴ<D4B4>)
// 3. PktCSAck
// 4. PktSZMvAck
// 5. PktCSDAck (<28>߰<EFBFBD><DFB0>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ<EFBFBD>Դϴ<D4B4>)
// 6. PktSZMvDAck (<28>߰<EFBFBD><DFB0>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ŷ<EFBFBD>Դϴ<D4B4>)
// SERVER_GROUP<55><50><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD> <20>޸<EFBFBD>/<2F><>ĭ <20><> <20>ο<EFBFBD><CEBF><EFBFBD><EFBFBD>Դϴ<D4B4>.(<28>߰<EFBFBD> <20>ҽ<EFBFBD><D2BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>дϴ<D0B4>.)
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD> <20>ٶ<EFBFBD><D9B6>ϴ<EFBFBD>.
MAX_CHANNEL_NUM = 5
};
typedef struct SID* LPSID;
struct SID
{
char Type;
char Group;
char Channel;
char ID;
};
SID sID;
unsigned long dwID;
inline char GetType(void) { return sID.Type; }
inline char GetChannel(void) { return sID.Channel; }
inline char GetZone(void) { return sID.ID; }
inline char GetGroup(void) { return sID.Group; }
};
typedef struct SERVER* LPSERVER_GROUP;
struct SERVER_GROUP
{
enum { CHANNEL_NUM = 2, SERVER_NAME = 15 };
char m_Group; // <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD>
char m_Name[SERVER_NAME]; // <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
long m_ClientNum[CHANNEL_NUM]; // <20><><EFBFBD><EFBFBD> <20><> <20><>
IN_ADDR m_Address; // <20><><EFBFBD><EFBFBD> <20>ּ<EFBFBD>
};
typedef struct SERVER* LPSERVER_LIST;
struct SERVER_LIST
{
enum { SERVER_NUM = 10 };
unsigned short m_ServerNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SERVER_GROUP m_ServerGroup[SERVER_NUM]; // <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD>
};
#pragma pack()
typedef struct RylServerInfo* LPRylServerInfo;
struct RylServerInfo
{
enum
{
GROUP_NAME_LENGTH = 120,
PATCH_ADDRESS_LENGTH = 100
};
SERVER_ID m_ServerUID;
IN_ADDR m_ServerAddress;
unsigned long m_dwClientVer;
unsigned long m_dwChecksum;
size_t m_nGroupNameLen;
size_t m_nPatchAddressLen;
char m_szGroupName[GROUP_NAME_LENGTH];
char m_szPatchAddress[PATCH_ADDRESS_LENGTH];
unsigned short m_usChannelClientNum[SERVER_GROUP::CHANNEL_NUM];
unsigned short m_usChannelNum;
RylServerInfo::RylServerInfo()
: m_dwClientVer(0), m_dwChecksum(0),
m_nPatchAddressLen(0), m_usChannelNum(0)
{
m_ServerUID.dwID = 0;
m_ServerAddress.S_un.S_addr = 0;
m_szPatchAddress[0] = '\0';
strncpy(m_szGroupName, "UnKnown", GROUP_NAME_LENGTH);
m_nGroupNameLen = strlen(m_szGroupName);
std::fill_n(m_usChannelClientNum, int(SERVER_GROUP::CHANNEL_NUM), 0);
}
};
#endif

View File

@@ -0,0 +1,34 @@
#ifndef _RYL_SERVER_NETWORK_SERVER_LOG_H_
#define _RYL_SERVER_NETWORK_SERVER_LOG_H_
#include <Network/Packet/PacketBase.h>
#pragma pack(1)
struct PktServerLog : public PktBase
{
enum LogType
{
ITEM_DUPLICATED_LOG = 0x01
};
unsigned char m_cLogCmd;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
struct PktItemDuplicated : public PktServerLog
{
enum { MAX_NAME = 16 };
char m_szName[MAX_NAME];
unsigned __int64 m_dwItemSerial;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwQty;
};
#pragma pack()
#endif

View File

@@ -0,0 +1,295 @@
#ifndef _DBAGENT_TO_LOGIN_
#define _DBAGENT_TO_LOGIN_
#include <DB/DBDefine.h>
#include <Network/Packet/PacketBase.h>
#include <Network/Packet/PacketStruct/DataPacket.h>
#pragma pack(1)
// <20><> <20><>Ŷ ( Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5<>ʸ<EFBFBD><CAB8><EFBFBD>.. <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ŵ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> Ping<6E><67> <20>ش<EFBFBD>. )
typedef struct PktSyP* LPPktSyP;
struct PktSyP : public PktBase
{
unsigned long m_dwTickTime;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><>û <20><>Ŷ
typedef struct PktSL* LPPktSL;
struct PktSL : public PktBase
{
unsigned long m_dwServerID;
IN_ADDR m_Address;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
typedef struct PktSLAck* LPPktSLAck;
struct PktSLAck : public PktBase
{
enum { PATCH_ADDRESS_LENGTH = 100 };
unsigned __int64 m_dlItemUID;
unsigned long m_dwServerID;
unsigned long m_dwClientVer;
unsigned long m_dwCheckSum;
char m_PatchAddress[PATCH_ADDRESS_LENGTH];
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
typedef struct PktSVU* LPPktSVU;
struct PktSVU : public PktBase
{
enum { PATCH_ADDRESS_LENGTH = 100 };
unsigned long m_dwServerID;
IN_ADDR m_ServerAddr;
unsigned long m_dwClientVer;
unsigned long m_dwCheckSum;
char m_PatchAddress[PATCH_ADDRESS_LENGTH];
};
// ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
typedef struct PktSCInfo* LPPktSCInfo;
struct PktSCInfo : public PktBase
{
enum { MAX_CHANNEL_NUM = 5 };
unsigned long m_dwServerID;
unsigned char m_cChannelNum;
unsigned short m_usChannelClientNum[MAX_CHANNEL_NUM];
};
// ---------------------------------------------------------------------------
// <20><>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
// <20><>ġ <20><><EFBFBD><EFBFBD> <20><>û <20><>Ŷ
typedef struct PktSPI* LPPktSPI;
struct PktSPI : public PktBase
{
unsigned long m_dwServerID;
};
// <20><>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ
typedef struct PktSPIAck* LPPktSPIAck;
struct PktSPIAck : public PktBase
{
enum { PATCH_ADDRESS_LENGTH = 100 };
unsigned long m_dwClientVer;
char m_PatchAddress[PATCH_ADDRESS_LENGTH];
};
// ---------------------------------------------------------------------------
// Zone <20><><EFBFBD><EFBFBD> <20><>Ŷ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
typedef struct PktSZ* LPPktSZ;
struct PktSZ : public PktBase
{
unsigned short m_cChannel;
unsigned char m_cZone;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
typedef struct PktSZAck* LPPktSZAck;
struct PktSZAck : public PktBase
{
unsigned long m_dwServerID;
sockaddr_in m_GameServerTCPAddr;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
typedef struct PktSZMv* LPPktSZMv;
struct PktSZMv : public PktBase
{
POS m_NewPos;
char m_cZone;
char m_cChannel;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
typedef struct PktSZMvAck* LPPktSZMvAck;
struct PktSZMvAck : public PktBase
{
enum { MAX_CHANNEL_NUM = 5 };
unsigned short m_wChannelNum[MAX_CHANNEL_NUM];
unsigned char m_cZone;
};
typedef struct PktSZMvD* LPPktSZMvD;
struct PktSZMvD : public PktDD
{
unsigned long m_dwUserID;
char m_cZone;
char m_cChannel;
POS m_NewPos;
};
typedef struct PktSZMvDAck* LPPktSZMvDAck;
struct PktSZMvDAck : public PktDD
{
enum
{
MAX_CHANNEL_NUM = 5
};
enum PktSZMvDAckErr
{
FAIL_INVALID_ZONE = 3,
FAIL_INVALID_CHAR = 5,
FAIL_PERSONNEL_OVER = 6,
FAIL_LIMIT_LEVEL = 7
};
unsigned char m_cZone;
unsigned short m_wChannelNum[MAX_CHANNEL_NUM];
};
// <20><><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
typedef struct PktSA* LPPktSA;
struct PktSA : public PktDD
{
unsigned long m_dwUserID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>
char m_cZone; // <20><> <20><>ȣ
char m_cChannel; // ä<><C3A4> <20><>ȣ
};
// <20><><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> Ack
typedef struct PktSAAck* LPPktSAAck;
struct PktSAAck : public PktDD
{
enum PktSAAckErr
{
NO_SERVER_ERR = 0,
SERVER_ERROR = 1,
FAIL_USER_LIMIT = 4
};
unsigned long m_dwServerID;
IN_ADDR m_GameAddress;
};
// ---------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
typedef struct PktUUT *LPPktUUT;
struct PktUUT : public PktBase
{
enum UpdateType
{
UpdateUIDTableNone = 0, // <20><><EFBFBD><EFBFBD>
UpdateUIDTableUserLogin = 1, // <20><><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
UpdateUIDTableUserLogout = 2, // <20><><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE>
UpdateUIDTableUserMove = 3, // <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD>
UpdateUIDTableCharLogin = 4, // ij<><C4B3><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
UpdateUIDTableCharLogout = 5, // ij<><C4B3><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE>
UpdateUIDTableCharMove = 6, // ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD>
UpdateUIDTableBillingCheck = 7, // <20><><EFBFBD><EFBFBD> üũ
MAX_UPDATE_TYPE = 8
};
enum Err
{
DISCONNECT_USER = 1
};
enum
{
// edith 2008.03.17 ID,PASS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MaxAccountLen = 24,
MaxPasswordLen = 36
};
unsigned char m_cCmd;
char m_strAccount[MaxAccountLen];
// edith 2008.01.15 <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>۾<EFBFBD>
char m_strPassword[MaxPasswordLen];
IN_ADDR m_IPAddress;
unsigned long m_dwSessionID;
unsigned long m_dwServerID;
unsigned long m_dwUserID;
unsigned long m_dwCharID;
};
typedef struct PktUUTAck *LPPktUUTAck;
struct PktUUTAck : public PktBase
{
unsigned char m_cCmd;
unsigned long m_dwUserID;
unsigned long m_dwFlag; // Success(=0)
int m_nPlayTime; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (<28><>, <20><>)
unsigned long m_dwCRMIndex1; // <20>ǽù<C7BD> ID(0<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
char m_cstrBillingType; // D, T(N: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
};
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD>.
typedef struct PktUK* LPPktUK;
struct PktUK : public PktBase
{
unsigned long m_dwUserID;
unsigned long m_dwCharID;
unsigned long m_dwServerID;
};
// <20><><EFBFBD><EFBFBD> Ÿ<>Ӿƿ<D3BE> <20><><EFBFBD><EFBFBD>. (Billing Timeout Notify)
typedef struct PktBTN* LPPktBTN;
struct PktBTN : public PktBase
{
unsigned long m_dwUserID;
unsigned long m_dwCharID;
unsigned long m_dwServerID;
unsigned char m_cRemainMinute; // <20><><EFBFBD><EFBFBD> <20><>..
unsigned char m_cBillingType; // 'D' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 'T' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>
typedef struct PktHanBTN* LPPktHanBTN;
struct PktHanBTN : public PktBase
{
enum
{
MAX_HAN_BTN = 70
};
unsigned long m_dwIP;
unsigned long m_dwUID;
unsigned long m_dwCID;
char m_szAccount[PktUUT::MaxAccountLen];
char m_szMsg[MAX_HAN_BTN];
};
// <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, IP<49><50>)
typedef struct PktHanUserKill* LPPktHanUserKill;
struct PktHanUserKill : public PktBase
{
enum
{
DISCONN_ALL_IP = 0xFFFFFFFF
};
unsigned long m_dwIP;
char m_szAccount[PktUUT::MaxAccountLen];
};
#pragma pack()
#endif

View File

@@ -0,0 +1,99 @@
#ifndef _UNIFIED_CHAR_DATA_PACKET_H_
#define _UNIFIED_CHAR_DATA_PACKET_H_
#include <DB/DBdefine.h>
#include <Network/Packet/PacketBase.h>
namespace UnifiedConst
{
enum AgentServerType
{
// OldServerGroupID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. 0 ~ 10 <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<49>̴<EFBFBD>.
Part1 = 20,
Part1Unified = 21,
ROW = 22,
Part2Unified = 23,
Part2Selectable = 24,
};
enum StoreSelected
{
NONE_SELECTED = 0,
SELECTED_PART1 = (1 << 0),
SELECTED_PART2 = (1 << 1)
};
}
struct PktUnifiedCharInfo : public PktBase
{
enum
{
MAX_STORE_INFO = 10,
MAX_CHAR_DATA = 30
};
enum ErrorCode
{
STORE_READ_ERROR = 1,
CHARINFO_READ_ERROR = 2
};
unsigned long dwUID;
unsigned char cStoreInfoNum;
unsigned char cCharDataNum;
unsigned char cRestrictedPart1ToPart2Level; // Part1 <20><><EFBFBD><EFBFBD> Part2 <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char cRemainCharTransferCount; // Part1 <20><><EFBFBD><EFBFBD> Part2 <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ƚ<><C8BD>
USER_INFO userInfo;
UnifiedStoreInfo unifiedStoreInfo[MAX_STORE_INFO];
UnifiedCharData unifiedCharData[MAX_CHAR_DATA];
};
struct PktUnifiedCharSelectReq : public PktBase
{
enum
{
// edith 2008.03.17 ID,PASS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MAX_PASSWORD_LEN = 36
};
char szPassword[MAX_PASSWORD_LEN]; // <20><><EFBFBD><EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
unsigned char cSelectedServerGroupID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ
unsigned char cSelectedNation; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long dwRequestKey; // RequestKey
unsigned long dwUID; // UID
unsigned long dwCID[USER_INFO::MAX_CHAR_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> CID<49><44> ä<><C3A4> <20>ش<EFBFBD>.
};
struct PktUnifiedCharSelectAck : public PktBase
{
enum ErrorCode
{
SERVER_ERROR = 1,
PACKET_ERROR = 2,
PASSWORD_FAILED = 3,
WRONG_STORE_SELECTED = 4, // <20>߸<EFBFBD><DFB8><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD>(<28><> <20><><EFBFBD><EFBFBD> <20>ƴѰ<C6B4> <20><><EFBFBD><EFBFBD>)
WRONG_CHAR_SELECTED = 5, // <20>߸<EFBFBD><DFB8><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><> <20><><EFBFBD><EFBFBD> <20>ƴѰ<C6B4> <20><><EFBFBD><EFBFBD>. <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
UNIFIED_STORE_READ_ERROR = 6, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20>б<EFBFBD> <20><><EFBFBD><EFBFBD>
UNIFIED_STORE_WRITE_ERROR = 7, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
UNIFIED_CHAR_READ_ERROR = 8, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>б<EFBFBD> <20><><EFBFBD><EFBFBD>
UNIFIED_CHAR_WRITE_ERROR = 9, // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CHAR_VIEW_RELOAD_ERROR = 10, // ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD>
PART1_DB_LOGINED = 11, // Part1 DB<44><42> <20>α<EFBFBD><CEB1><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
TRANSFER_COUNT_OVER = 12 // TransferCount<6E><74> <20><><EFBFBD><EFBFBD> ȸ<><C8B8> <20>̻<EFBFBD> <20>ʰ<EFBFBD><CAB0>Ǿ<EFBFBD> <20>ִ<EFBFBD>.
};
unsigned long dwUID;
unsigned long dwRequestKey;
};
#endif

View File

@@ -0,0 +1,233 @@
#include "stdafx.h"
#include "WrapPacket.h"
#include "PacketStatistics.h"
#include <Log/ServerLog.h>
#include <Stream/Buffer/Buffer.h>
#include <Network/XORCrypt/XORCrypt.h>
#include <Utility/Compress/MiniLZO/MiniLZOWrapper.h>
bool PacketWrap::WrapHeader(CBuffer* lpBuffer_In, unsigned short usUsed_In, unsigned char cCMD_In,
unsigned short usState_In, unsigned short usError_In)
{
if (WrapHeader(lpBuffer_In->wr_ptr(), usUsed_In, cCMD_In, usState_In, usError_In))
{
lpBuffer_In->wr_ptr(usUsed_In);
return true;
}
return false;
}
bool PacketWrap::WrapCryptOld(CBuffer* lpBuffer_In, unsigned short usUsed_In, unsigned char cCMD_In,
unsigned short usState_In, unsigned short usError_In)
{
if (WrapCryptOld(lpBuffer_In->wr_ptr(), usUsed_In, cCMD_In, usState_In, usError_In))
{
lpBuffer_In->wr_ptr(usUsed_In);
return true;
}
return false;
}
bool PacketWrap::WrapCrypt(CBuffer* lpBuffer_In, unsigned short usUsed_In, unsigned char cCMD_In,
unsigned short usState_In, unsigned short usError_In)
{
if (WrapCrypt(lpBuffer_In->wr_ptr(), usUsed_In, cCMD_In, usState_In, usError_In))
{
lpBuffer_In->wr_ptr(usUsed_In);
return true;
}
return false;
}
bool PacketWrap::WrapCompress(CBuffer* lpDstBuffer, const char* lpSourceData, unsigned short usSourceLength,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In)
{
char* lpBuffer = lpDstBuffer->wr_ptr();
unsigned long dwDstBufferSize_InOut = static_cast<unsigned long>(lpDstBuffer->remain());
if (WrapCompress(lpBuffer, dwDstBufferSize_InOut,
lpSourceData, usSourceLength, cCMD_In, usState_In, usError_In))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20>˾ƾ<CBBE> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD>.
lpDstBuffer->wr_ptr(dwDstBufferSize_InOut);
return true;
}
return false;
}
bool PacketWrap::WrapHeader(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In)
{
reinterpret_cast<PktBase*>(lpBuffer_In)->InitPtHead(usUsed_In, cCMD_In, usState_In, usError_In);
CXORCrypt::GetInstance().EncodeHeader(lpBuffer_In + 1, sizeof(PktBase) - 1, 0, 0);
return true;
}
bool PacketWrap::WrapCryptOld(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In)
{
CXORCrypt& Crypt = CXORCrypt::GetInstance();
unsigned long dwCodePage = Crypt.GetCodePage(1);
if(Crypt.EncodePacket(lpBuffer_In + sizeof(PktBase), usUsed_In - sizeof(PktBase), dwCodePage))
{
PktBase* lpPktBase = reinterpret_cast<PktBase*>(lpBuffer_In);
lpPktBase->InitPtHead(usUsed_In, cCMD_In, usState_In, usError_In);
lpPktBase->SetCodePage(dwCodePage);
lpPktBase->SetCrypt();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD>
Crypt.EncodeHeader(lpBuffer_In + 1, sizeof(PktBase) - 1, 0, 0);
return true;
}
return false;
}
bool PacketWrap::WrapCryptOld(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned long dwTick)
{
CXORCrypt& Crypt = CXORCrypt::GetInstance();
unsigned long dwCodePage = Crypt.GetCodePage(1);
if(Crypt.EncodePacket(lpBuffer_In + sizeof(PktBase), usUsed_In - sizeof(PktBase), dwCodePage))
{
PktBase* lpPktBase = reinterpret_cast<PktBase*>(lpBuffer_In);
lpPktBase->InitPtHead(usUsed_In, cCMD_In, dwTick);
lpPktBase->SetCodePage(dwCodePage);
lpPktBase->SetCrypt();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD>
Crypt.EncodeHeader(lpBuffer_In + 1, sizeof(PktBase) - 1, 0, 0);
return true;
}
return false;
}
bool PacketWrap::WrapCrypt(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In)
{
CXORCrypt& Crypt = CXORCrypt::GetInstance();
unsigned long dwCodePage = Crypt.GetCodePage();
if(Crypt.EncodePacket(lpBuffer_In + sizeof(PktBase), usUsed_In - sizeof(PktBase), dwCodePage))
{
PktBase* lpPktBase = reinterpret_cast<PktBase*>(lpBuffer_In);
lpPktBase->InitPtHead(usUsed_In, cCMD_In, usState_In, usError_In);
lpPktBase->SetCodePage(dwCodePage);
lpPktBase->SetCrypt();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD>
Crypt.EncodeHeader(lpBuffer_In + 1, sizeof(PktBase) - 1, 0, 0);
return true;
}
return false;
}
bool PacketWrap::WrapCrypt(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned long dwTick)
{
CXORCrypt& Crypt = CXORCrypt::GetInstance();
unsigned long dwCodePage = Crypt.GetCodePage();
if(Crypt.EncodePacket(lpBuffer_In + sizeof(PktBase), usUsed_In - sizeof(PktBase), dwCodePage))
{
PktBase* lpPktBase = reinterpret_cast<PktBase*>(lpBuffer_In);
lpPktBase->InitPtHead(usUsed_In, cCMD_In, dwTick);
lpPktBase->SetCodePage(dwCodePage);
lpPktBase->SetCrypt();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD>
Crypt.EncodeHeader(lpBuffer_In + 1, sizeof(PktBase) - 1, 0, 0);
return true;
}
return false;
}
bool PacketWrap::WrapCompress(char* lpDstBuffer, unsigned long& dwDstBufferSize_InOut,
const char* lpSourceData, unsigned short usSourceLength,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In)
{
if(usSourceLength < sizeof(PktBase) || PktMaxLen < usSourceLength)
{
// <20><>Ŷ ũ<><20><><EFBFBD><EFBFBD> ũ<><EFBFBD><E2BAB8> <20>۰ų<DBB0>, <20>ҽ<EFBFBD> ũ<><20>ִ<EFBFBD> <20><>Ŷ <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> ū <20><><EFBFBD><EFBFBD>
ERRLOG2(g_Log, "Cmd:0x%02x Invalid packet size, Can't compress now.",
reinterpret_cast<const PktBase*>(lpSourceData)->GetCmd(), usSourceLength);
}
else if(dwDstBufferSize_InOut < usSourceLength)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><20>ҽ<EFBFBD> ũ<><EFBFBD><E2BAB8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SERLOG1(g_Log, "Cmd:0x%02x Insufficient buffer size, Can't compress now.",
reinterpret_cast<const PktBase*>(lpSourceData)->GetCmd());
}
else
{
unsigned long dwArchiveSrcLen = usSourceLength - sizeof(PktBase);
unsigned long dwArchiveDstLen = dwDstBufferSize_InOut - sizeof(PktBase);
bool bCompressResult =
CMiniLZO::Compress(lpSourceData + sizeof(PktBase), dwArchiveSrcLen,
lpDstBuffer + sizeof(PktBase), &dwArchiveDstLen);
// <20><>ü <20><><EFBFBD><EFBFBD> ũ<><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
dwArchiveDstLen += sizeof(PktBase);
if (!bCompressResult)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>α׸<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
SERLOG2(g_Log, "Cmd:0x%02x Packet compress failed. Packet length is %d.",
reinterpret_cast<const PktBase*>(lpSourceData)->GetCmd(), usSourceLength);
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><20><><EFBFBD><EFBFBD>. <20><>Ŷ Ŀ<>ǵ<EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>, <20><><EFBFBD>ົ ũ<><20>ѱ<EFBFBD><D1B1><EFBFBD>.
CPacketStatistics::GetInstance().CheckCompression(cCMD_In,
usSourceLength, dwArchiveDstLen);
}
if (!bCompressResult || usSourceLength <= dwArchiveDstLen)
{
// <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>߰ų<DFB0>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ũ<><20><><EFBFBD>ų<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Ŀ<><C4BF> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ŀ<EFBFBD>, WrapCrypt<70><74> <20>ٽ<EFBFBD> <20>۾<EFBFBD><DBBE>Ѵ<EFBFBD>.
memcpy(lpDstBuffer, lpSourceData, usSourceLength);
dwDstBufferSize_InOut = usSourceLength;
return PacketWrap::WrapCrypt(lpDstBuffer, usSourceLength,
cCMD_In, usState_In, usError_In);
}
else
{
PktBase* lpPktDst = reinterpret_cast<PktBase*>(lpDstBuffer);
lpPktDst->InitPtHead(static_cast<PktBase::LengthType>(dwArchiveDstLen),
cCMD_In, usState_In, usError_In);
lpPktDst->SetCompress();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD>
CXORCrypt::GetInstance().EncodeHeader(lpDstBuffer + 1, sizeof(PktBase) - 1, 0, 0);
dwDstBufferSize_InOut = dwArchiveDstLen;
return true;
}
}
return false;
}

View File

@@ -0,0 +1,45 @@
#ifndef _WRAP_PACKET_
#define _WRAP_PACKET_
#include "PacketBase.h"
#include <Stream/Buffer/Buffer.h>
namespace PacketWrap
{
// WrapHeader
bool WrapHeader(CBuffer* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In);
bool WrapHeader(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In);
// WrapCrypt Old
bool WrapCryptOld(CBuffer* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In);
bool WrapCryptOld(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In);
bool WrapCryptOld(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned long dwTick);
// WrapCrypt
bool WrapCrypt(CBuffer* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In);
bool WrapCrypt(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In);
bool WrapCrypt(char* lpBuffer_In, unsigned short usUsed_In,
unsigned char cCMD_In, unsigned long dwTick);
// WrapCompress
bool WrapCompress(CBuffer* lpDstBuffer, const char* lpSourceData, unsigned short usSourceLength,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In);
bool WrapCompress(char* lpDstBuffer, unsigned long& dwDstBufferSize_InOut,
const char* lpSourceData, unsigned short usSourceLength,
unsigned char cCMD_In, unsigned short usState_In, unsigned short usError_In);
};
#endif