Files
Client/Server/AdminTool/AdminToolLibrary/network/protocol/RYL_AdminMgrProtocol.h
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

1792 lines
47 KiB
C++

#ifndef _RYL_ADMIN_MGR_PROTOCOL_H_
#define _RYL_ADMIN_MGR_PROTOCOL_H_
#include <Network/Packet/PacketBase.h>
#include <DB/DBDefine.h>
#include <atlcomtime.h>
#include <Item/Item.h>
#include <Creature/Siege/Camp.h>
#include <Community/Guild/GuildConstants.h>
#pragma pack( 1 )
namespace PktAgentServer
{
namespace PktCMD
{
enum CMD
{
CmdSysServerLogin = 0x28, // 시스템 서버 로그인
CmdAdminToolGetData = 0x76, // 운영툴에서 DBAgent의 데이터 얻어 오기.
CmdAdminToolSetData = 0x77, // 캐릭터 저장
};
};
struct PktSL : public PktBase
{
unsigned long m_dwServerID;
IN_ADDR m_Address;
};
// 어드민 툴에 데이터 업데이트하기.
struct PktAdminToolGetData : public PktBase
{
enum GetDataType
{
// DB중계 -> 운영서버
CHAR_BASIC_DATA = 10, // 캐릭터 정보. 다음 정보들이 들어감.
// CHAR_INFOST 캐릭터 기본 정보
// CHAR_POS 캐릭터 위치 정보
// SKILL 캐릭터 스킬 정보
// QUICK 캐릭터 퀵 슬롯
// EQUIP 캐릭터 장비
// INVEN 캐릭터 인벤
// EXTRA 캐릭터 여분
// EXCHANGE 캐릭터 교환
CHAR_EXTRA_DATA = 11, // 캐릭터 추가 정보들. 다음 정보들이 들어감.
// CHAR_INFOEX 캐릭터 추가 정보
// QUEST 퀘스트
// HISTORY 히스토리
// CONFIG 설정
// STORE_INFO 창고 정보
CHAR_FRIEND_DATA = 12, // 캐릭터 친구 정보
CHAR_BAN_DATA = 13, // 캐릭터 거부 정보
STORE_12_DATA = 14, // 창고 1, 2탭 데이터
STORE_34_DATA = 15, // 창고 3, 4탭 데이터
FINISH_GET_DATA = 19, // DB중계에서 운영서버로 데이터를 전부 보냈음.
// 운영서버 -> DB중계
GET_CHAR_DATA = 20, // 캐릭터 데이터 요청 패킷
CHANGE_CHAR_NAME = 30 // 캐릭터 이름 바꾸기
};
enum GetError
{
UNKNOWN_ERROR = 1, // 알 수 없는 에러
INVALID_REQUEST = 2, // 잘못된 데이터 패킷
GET_UIDCID_QUERY_FAILED = 3, // DB에서 이름으로 UID, CID를 얻어오는 데 실패했다.
INVALID_UID_CID_DATA = 4, // DB에서 이름으로 얻어온 UID, CID데이터가 이상하다.
GET_STORE_QUERY_FAILED = 5, // DB에서 창고 데이터를 얻어오는 데 실패했다.
GET_CHAR_DATA_QUERY_FAILED = 6 // DB에서 캐릭터 데이터를 얻어오는 데 실패했다.
};
char m_szName[CHAR_INFOST::MAX_NAME_LEN];
unsigned long m_dwRequestKey;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cType;
unsigned char m_cOldServerGroupID;
};
struct PktAdminToolGetDataAck : public PktBase
{
unsigned long m_dwRequestKey;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cType;
unsigned char m_cOldServerGroupID;
};
// 어드민 툴에서 데이터 업데이트하기. (뒤에 데이터를 넣음)
struct PktAdminToolSetData : public PktBase
{
enum SetDataType
{
CHAR_BASIC_DATA = 10, // 캐릭터 정보. 다음 정보들이 들어감.
// CHAR_INFOST 캐릭터 기본 정보
// CHAR_POS 캐릭터 위치 정보
// SKILL 캐릭터 스킬 정보
// QUICK 캐릭터 퀵 슬롯
// EQUIP 캐릭터 장비
// INVEN 캐릭터 인벤
// EXTRA 캐릭터 여분
// EXCHANGE 캐릭터 교환
CHAR_EXTRA_DATA = 11, // 캐릭터 추가 정보들. 다음 정보들이 들어감.
// CHAR_INFOEX 캐릭터 추가 정보
// QUEST 퀘스트
// HISTORY 히스토리
// CONFIG 설정
// STORE_INFO 창고 정보
CHAR_FRIEND_DATA = 12, // 캐릭터 친구 정보
CHAR_BAN_DATA = 13, // 캐릭터 거부 정보
STORE_12_DATA = 14, // 창고 1, 2탭 데이터
STORE_34_DATA = 15, // 창고 3, 4탭 데이터
OPEN_UPDATE_DATA = 20, // 세션을 열고 DB에 업데이트하려 시도한다.
FINISH_UPDATE_DATA = 21, // 데이터를 DB에 업데이트하고 세션을 닫는다.
RELOAD_ADMINLIST = 30
};
enum SetError
{
UNKNOWN_ERROR = 1, // 알 수 없는 에러.
INVALID_UID_CID_ERROR = 2, // 알 수 없는 UID/CID
LOGIN_ANOTHER_GAMESERVER = 3, // 다른 게임 서버에 로그인 해 있어서 업데이트 불가.
SESSION_OPEN_FAILED = 4, // 세션 열기 실패
ALREADY_LOGIN_USER_SESSION_OPEN = 5, // 이미 로그인 되어 있는 유저 세션을 열려고 했음
ANOTHER_CHAR_LOAD_FAILED = 6, // 캐릭터 정보를 DB에서 읽어오는 데 실패
SETTING_DATA_FAILED = 7, // 데이터 세팅 실패 (데이터 길이등이 맞지 않음)
SESSION_START_FAILED = 8 // 세션 시작 실패.
};
unsigned __int64 m_dwSerial;
unsigned long m_dwRequestKey;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cType;
unsigned char m_cOldServerGroupID;
};
struct PktAdminToolSetDataAck : public PktBase
{
unsigned long m_dwRequestKey;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cType;
};
};
namespace PktAdminMgr
{
enum MAX_LENGEH
{
MAX_ACCOUNT = 40,
MAX_PASSWORD = 40,
MAX_NAME = 20,
MAX_IP = 16,
MAX_DATE = 11,
MAX_IPBUFFER = 64,
MAX_BEFORE = 200,
MAX_AFTER = 200,
MAX_ITEM_NAME = 64,
MAX_TIME = 20,
MAX_CHARNAME = 16,
MAX_LOG = 200,
MAX_ITEM_BUFFER = 8000
};
namespace PktCMD
{
enum Type
{
PktResultAck = 1,
PktLogin = 2,
PktNewAdmin = 3,
PktNewAdminAck = 3,
PktAdminList = 4,
PktAdminListAck = 4,
PktDelAdmin = 5,
PktDelAdminAck = 5,
PktUpdateLevel = 6,
PktUpdateLevelAck = 6,
PktUpdateIP = 7,
PktUpdateIPAck = 7,
PktUpdatePasswd = 8,
PktLoginInfoAck = 9,
PktLogList = 10,
PktLogListAck = 10,
PktLogUseMessage = 11,
PktDetailLog = 12,
PktDetailLogAck = 12,
PktGetExitLogAck = 13,
PktBeforeAfter = 14,
PktBeforeAfterAck = 14,
PktSearchID = 15,
PktSearchResultAck = 15,
PktSearchName = 16,
PktSearchAck = 16,
PktAgentServerIndex = 17,
PktGetCharacter = 18,
PktGetCharacterAck = 18,
PktSetCharacter = 19,
PktCloseCharacter = 20,
PktCloseCharacterAck = 20,
PktUpdateStatus = 21,
PktCreateItem = 22,
PktCreateItemAck = 22,
PktUpdateItem = 23,
PktUpdateItemAck = 23,
PktRemoveItem = 24,
PktRemoveItemAck = 24,
PktDepositSync = 25,
PktItemReset = 26,
PktItemResetAck = 26,
PktInvenGold = 27,
PktInvenGoldAck = 27,
PktSkillEdit = 28,
PktSkillEditAck = 28,
PktAddBlockUser = 29,
PktSearchBlock = 30,
PktSearchBlockAck = 30,
PktChangePos = 31,
PktSetZoneList = 32,
PktSetZoneListAck = 32,
PktDepositPasswd = 33,
PktCheckName = 34,
PktChangeName = 35,
PktChangeNameAck = 35,
PktDelCharList = 36,
PktDelCharListAck = 36,
PktCharRestore = 37,
PktCharRestoreAck = 37,
PktAdminStoreInsert = 38,
PktAdminStoreInsertAck = 38,
PktAdminStoreDelete = 39,
PktAdminStoreDeleteAck = 39,
PktGetAdminStoreItem = 40,
PktGetAdminStoreItemAck = 40,
PktUpdateAdminStore = 41,
PktDelCharacter = 42,
PktDelCharacterAck = 42,
PktForcedDis = 43,
PktGuildSearch = 44,
PktGuildSearchAck = 44,
PktRequestGuildMemberList = 45,
PktRequestGuildMemberListAck = 45,
PktGuildRestoreDataList = 46,
PktGuildRestoreDataListAck = 46,
PktItemQtyControl = 47,
PktStoreGoldUpdate = 48,
PktUserBillingLog = 49,
PktUserBillingLogAck = 49,
PktGameAdmin = 50,
PktGameAdminAck = 50,
PktConnectAllServerz = 51,
PktRefreshConnectedList = 52,
PktInterestedUser = 53,
PktConnectionChk = 54,
PktConnectedUserList = 55,
PktDuplicatedItem = 56,
PktItemDistribute = 57,
PktItemDistributeAck = 57,
PktDelBlockUser = 58,
PktGuildRight = 59,
PktUnifiedCharInfo = 60,
PktUnifiedGuildInfo = 61,
PktDetailCharInfo = 62,
PktCancelExecuteQuest = 63,
PktDeleteHistoryQuest = 64,
PktUserNation = 65,
PktShiftToUID = 66,
PktStoreTabEdit = 67,
PktAmountOfGold = 68,
PktGMLogMsg = 69,
PktNameChangeCount = 70,
PktGuildMemberEdit = 71,
PktGetCharInfoTime = 72,
PktGetCharInfoTimeAck = 73,
PktFortSearch = 74,
PktFortSearchAck = 75,
PktMiningCamp = 76,
PktMiningCampAck = 77,
PktShopCamp = 78,
PktShopCampAck = 79,
PktShopCampGold = 80,
PktShopCampTax = 81,
PktCastleSearch = 82,
PktCastleSearchAck = 83,
PktCastleCreature = 84,
PktCastleCreatureAck = 84,
PktEnd
};
};
namespace PktResult
{
const unsigned char Result_Null = 0x00; // 걍 NULL ㅡ.ㅡ;
const unsigned char Err_Unknown = 0x01; // 알수 없는 오류
const unsigned char Err_Database = 0x02; // 데이터 베이스 오류
const unsigned char Err_Account = 0x03; // 로그인 (등록되어 있지 않은 Account)
const unsigned char Err_Passwd = 0x04; // 로그인 (비밀번호가 다르다)
const unsigned char Err_ConnectIP = 0x05; // 로그인 아이피 체크 (접속 IP가 다르다)
const unsigned char Err_OverlapID = 0x06; // 이미 사용중인 ID
const unsigned char Err_NewAdmin = 0x07; // ID생성 과정 중 비어있는 값이 있다.
const unsigned char Err_DelAdmin = 0x08; // 계정 삭제 오류 (존재하지 않는 ID거나 DB오류)
const unsigned char Err_UpdateLevel = 0x09; // 레벨 변경중 오류
const unsigned char Err_UpdateIP = 0x0a; // 아이피 변경중 오류
const unsigned char Err_UpdatePasswd = 0x0b; // 패스워드 변경중 오류
const unsigned char Err_Authority = 0x0c; // 사용 권한이 없다...
const unsigned char Err_UnkonwnPacket = 0x0d; // 알수없는 패킷 CMD를 받았습니다.
const unsigned char Err_ModifyCharacter = 0x0e; // 현제 에디팅중인 케릭터 입니다.
const unsigned char Err_NotFountDBComponent = 0x0f; // 선택한 서버그룹의 DBComponent를 찾을수없습니다.
const unsigned char Err_CloseCharacter = 0x10; // 케릭터 독점권해지 오류
const unsigned char Err_ChangeStatus = 0x11; // 케릭터 Status정보 수정 실패 ( Status수치오류 )
const unsigned char Err_PacketDispatch = 0x12; // 패킷에 잘못된 데이터가 들어간것같습니다.
const unsigned char Err_CreateItem1 = 0x13; // 아이템또는 캐릭터를 찾을수 없습니다.
const unsigned char Err_CreateItem2 = 0x14; // 아이템을 만드는데 실패했습니다.
const unsigned char Err_CreateItem3 = 0x15; // 아이템을 장착하는데 실패했습니다.
// 중계 서버 에러 메세지 ----------------------------------------------------------------------------------------------------------------------
const unsigned char UNKNOWN_ERROR = 0x16; // AgentServer(GetData) 알수없는 에러
const unsigned char INVALID_REQUEST = 0x17; // AgentServer(GetData) 잘못된 데이터 패킷
const unsigned char GET_UIDCID_QUERY_FAILED = 0x18; // AgentServer(GetData) DB에서 이름으로 UID, CID를 얻어오는데 실패했습니다
const unsigned char INVALID_UID_CID_DATA = 0x19; // AgentServer(GetData) DB에서 이름으로 어더온 UID, CID데이터가 이상합니다.
const unsigned char GET_STORE_QUERY_FAILED = 0x1a; // AgentServer(GetData) DB에서 창고 데이터를 얻어오는데 실패했습니다.
const unsigned char GET_CHAR_DATA_QUERY_FAILED = 0x1b; // AgentServer(GetData) DB에서 케릭터 데이터를 얻어오는데 실패했습니다.
const unsigned char INVALID_UID_CID_ERROR = 0x1c; // AgentServer(SetData) 알수없는 UID/CID
const unsigned char LOGIN_ANOTHER_GAMESERVER = 0x1d; // AgentServer(SetData) 다른 게임 서버에 로그인 해 있어서 업데이트 불가.
const unsigned char SESSION_OPEN_FAILED = 0x1e; // AgentServer(SetData) 세션 열기 실패
const unsigned char ALREADY_LOGIN_USER_SESSION_OPEN = 0x1f; // AgentServer(SetData) 이미 로그인 되어 있는 유저 세션을 열려고 했음
const unsigned char ANOTHER_CHAR_LOAD_FAILED = 0x20; // AgentServer(SetData) 캐릭터 정보를 DB에서 읽어오는데 실패
const unsigned char SETTING_DATA_FAILED = 0x21; // AgentServer(SetData) 데이터 세팅 실패 ( 데이터 길이등이 맞지 않음 )
const unsigned char SESSION_START_FAILED = 0x22; // AgentServer(SetData) 세션 시작 실패
// --------------------------------------------------------------------------------------------------------------------------------------------
const unsigned char Err_Invalid_ItemID = 0x23; // 아이템 식별번호가 일치하지 않습니다.
const unsigned char Err_Invalid_Item = 0x24; // 아이템이 존재하지 않습니다.
const unsigned char Err_Invalid_Character = 0x25; // 캐릭터가 존재하지 않습니다.
const unsigned char Err_RemoveItem = 0x26; // 캐릭터 아이템을 지우는데 실패했습니다.
const unsigned char Err_NotUseDeposit = 0x27; // 창고 아이템을 수정할 수없다 소유권이 없습니다.
const unsigned char Err_NotFoundAgentDispatch = 0x28; // 선택한 서버그룹의 AgentDispatch를 찾을수 없습니다.
const unsigned char Err_StateisSave = 0x29; // 선택한 캐릭터의 UID에 걸려있는 다른캐릭터가 창고정보를 업데이트 중입니다. 2 ~ 5초후 다시 시도해주세요.
const unsigned char Err_SetInventoryGold = 0x2a; // 인벤토리 골드를 변경하는데 실패했습니다.
const unsigned char Err_SkipCharacterSave = 0x2b; // 캐릭터 저장요청이 무시됐습니다 (변경된 정보없음 OR 현재 저장중인 캐릭터)
const unsigned char Err_SkillEdit = 0x2c; // 스킬 관리 실패
const unsigned char Err_DepositPasswd = 0x2d; // 창고 패스워드 변경 실패.
const unsigned char Err_NotUseName = 0x2e; // 사용할 수 없는 캐릭터 이름입니다.
const unsigned char Err_NotChangeName = 0x2f; // 캐릭터 이름 변경 실패.
const unsigned char Err_NotCharacterInfo = 0x30; // 캐릭터복구 시도 중 해당 캐릭터 정보가 존재하지 않습니다.
const unsigned char Err_NotUserInfoSlot = 0x31; // 캐릭터복구 시도 중 해당 UID에 캐릭터를 더이상 추가할수 없습니다.
const unsigned char Err_AdminStore = 0x32; // 관리자 창고에 아이템을 추가하는데 실패했습니다.
const unsigned char Err_AdminStoreDelete = 0x33; // 관리자 창고에서 아이템을 삭제하는데 실패했습니다.
const unsigned char Err_GameAdminManage = 0x34; // 게임 운영자 관리 실패 (ExecuteQuery 실패)
const unsigned char Err_InterestedUserManage = 0x35; // 관심유저 관리 실패
const unsigned char Err_NOT_ENOUGH_STAT = 0x36; // 스킬 관리 실패 (스탯이 부족합니다)
const unsigned char Err_NOT_ENOUGH_SKILLSLOT = 0x37; // 스킬 관리 실패 (스킬 슬롯이 부족합니다. 스킬슬롯은 최대 20개)
const unsigned char Err_FAILED_TO_GET_SKILLPROTOTYPE = 0x38; // 스킬 관리 실패 (스킬 프로토 타입 얻기 실패. 스킬 스크립트를 확인하십시요.)
const unsigned char Err_OVERED_MAX_LOCKCOUNT = 0x39; // 스킬 관리 실패 (최대 락 카운트를 초과했습니다.)
const unsigned char Err_OVERED_MAX_SKILL_LEVEL = 0x3a; // 스킬 관리 실패 (최대 스킬 레벨을 초과했습니다.)
const unsigned char Err_NOT_CURRENT_CLASS = 0x3b; // 스킬 관리 실패 (현재 클래스가 익힐 수 없는 스킬입니다.)
const unsigned char Err_DeleteQuest = 0x3c; // 퀘스트 삭제 실패
const unsigned char Err_AddBlockUser = 0x3d; // 블럭 추가 실패
const unsigned char Err_DelBlockUser = 0x3e; // 블럭 해제 실패
const unsigned char Success_Login = 0x64; // 로그인 성공
const unsigned char Success_ConnectIP = 0x65; // 로그인 아이피 체크( 접속 IP체크 성공 )
const unsigned char Success_NewAdmin = 0x66; // 새로운 계정생성 성공
const unsigned char Success_SearchCompleted = 0x67; // 검색에 대한 처리가 완료됬다.
const unsigned char Success_ModifyCharacter = 0x68; // 에디팅 요청 성공
const unsigned char Success_ChangeStatus = 0x69; // 캐릭터 Status정보 수정 성공
const unsigned char Success_ChangePos = 0x6a; // 캐릭터 위치및 존이동이 성공했습니다.
const unsigned char Success_DepositPasswd = 0x6b; // 창고 패스워드 변경 성공.
const unsigned char Success_UseName = 0x6c; // 사용할 수 있는 캐릭터 이름입니다.
const unsigned char Success_CharacterRestore = 0x6d; // 캐릭터 복구 성공
const unsigned char Success_AdminStore = 0x6e; // 관리자 창고에 아이템을 추가하는데 성공했습니다.
const unsigned char Success_UpdateAdminStore = 0x6f; // 관리자 창고 아이템 정보변경 성공.
const unsigned char Success_SaveCharacter = 0x70; // 캐릭터 저장 성공
const unsigned char Success_ChkDuplicatedItem = 0x71; // 중복 아이템 처리 성공
const unsigned char Success_SUCCESS = 0x72; // 스킬 관리 성공
const unsigned char Success_DeleteQuest = 0x73; // 퀘스트 삭제 성공
const unsigned char Success_StoreTabEdit = 0x74; // 창고 탭 수정 성공
const unsigned char Success_AddBlockUser = 0x75; // 블럭 추가 성공
const unsigned char Success_DelBlockUser = 0x76; // 블럭 해제 성공
const unsigned char Success_NameChangeCount = 0x77; // 캐릭명 변경 기회 수정 성공
};
namespace AuthorityMask
{
// 패킷사용권한 마스크 테이블 (Ack가 아닌 Req전용)
extern unsigned char AdminAuthority[PktCMD::PktEnd];
// 권한이 4개이며 총 4비트 사용
const unsigned char DEVELOPER = 0x01;
const unsigned char MASTER = 0x02;
const unsigned char GM = 0x04;
const unsigned char SUPPORTER = 0x08;
const unsigned char QUEST_MODE = 0x00; // 인증 전에 사용할 수 있는 권한
const unsigned char FREE_MODE = 0x0f; // 권한 체크 무조건 통과
};
struct PktResultAck : public PktBase
{
unsigned char m_Result;
};
struct PktLogin : public PktBase
{
char m_szAccount[MAX_ACCOUNT];
char m_szPasswd [MAX_PASSWORD];
};
struct PktNewAdmin : public PktBase
{
char m_szAccount[MAX_ACCOUNT];
char m_szPasswd[MAX_PASSWORD];
char m_szName[MAX_NAME];
char m_szIP[MAX_IP];
unsigned char m_szLev;
};
struct PktAdminListAck : public PktBase // 등록되어있는 계정목록이닷
{
char m_szAccount[MAX_ACCOUNT]; // ID
char m_szName[MAX_NAME]; // 관리자 이름
char m_szIP[MAX_IP]; // 관리자 접속IP
char m_szDate[MAX_DATE]; // 관리자 등록일
unsigned char m_szLevel; // 관리자 등급
};
struct PktDelAdmin : public PktBase // 선택 계정을 삭제한다.
{
char m_szAccount[MAX_ACCOUNT]; // 지우고자하는 ID
};
struct PktUpdateLevel : public PktBase // 계정 레벨등급 변경
{
char m_szAccount[MAX_ACCOUNT]; // 선택 ID
unsigned char m_szLevel; // 변경할 레벨
};
struct PktUpdateIP : public PktBase // 계정 접속IP 변경
{
char m_szAccount[MAX_ACCOUNT];
char m_szIP[MAX_IP]; // 변경할 IP
};
struct PktUpdatePasswd : public PktBase // 계정 패스워드 변경
{
char m_szAccount[MAX_ACCOUNT];
char m_szPasswd[MAX_PASSWORD]; // 변경할 패스워드
};
struct PktLoginInfoAck : public PktBase // 로그인성공시 상세정보를 날려주자..
{
unsigned int m_UID;
char m_szAccount [MAX_ACCOUNT];
char m_szPassword[MAX_PASSWORD];
unsigned char m_Level;
char m_szName[MAX_NAME];
char m_szIP[MAX_IP];
char m_RegDate[11];
};
struct PktLogList : public PktBase // 로그리스트 요청
{
char m_szAccount[ MAX_ACCOUNT ];
};
struct PktLogListAck : public PktBase //해당 계정에 해당하는 로그리스트를 보내준다.
{
unsigned int m_LogID;
char m_Login[20];
char m_Logout[20];
char m_UseIP[16];
};
struct PktLogUseMessage : public PktBase //클라이언트 종료시 사용사유를 DB에 저장한다.
{
char m_UseMessage[100]; //사용사유
};
struct PktDetailLog : public PktBase //상세로그 정보
{
unsigned int m_LogID; // 해당 로그 아이디에 속해있는 상세로그 목록을 요청한다.
};
struct PktDetailLogAck : public PktBase
{
unsigned int m_DetailLogID; // 디테일로그아이디
char m_UpdateDate[20]; // 업데이트 날자
unsigned int m_UpdateType; // 업데이트 종류
};
struct PktGetExitLogAck : public PktBase
{
char m_szExitLog[100]; // 사용사유
};
struct PktBeforeAfter : public PktBase
{
unsigned int m_DetailLogID; // 디테일 로그아이디
};
struct PktBeforeAfterAck : public PktBase
{
char m_szBefore [MAX_BEFORE]; // 수정전
char m_szAfter [MAX_AFTER]; // 수정후
};
struct PktSearchID : public PktBase
{
enum Type
{
SearchUID = 1,
SearchCID = 2
};
unsigned long m_dwRequestKey;
unsigned char m_SearchType;
unsigned long m_dwID;
unsigned long m_dwServerGroup;
unsigned int m_nOldServerID;
};
struct PktSearchName : public PktBase
{
enum Type
{
Account = 1,
Character = 2
};
unsigned long m_dwRequestKey;
unsigned char m_SearchType;
char m_szName[MAX_ACCOUNT];
unsigned long m_dwServerGroup;
unsigned int m_nOldServerID;
};
struct PktSearchResultAck : public PktBase
{
enum Type
{
Success = 1,
NoData = 2,
};
unsigned char m_Result;
unsigned long m_dwRequestKey;
};
struct PktAgentServerIndex : public PktBase
{
unsigned char m_ServerGroup;
char m_szServerName[MAX_NAME];
};
struct PktSearchAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned char m_CharCount;
unsigned long m_dwRequestKey;
unsigned char m_cOldServerGroup;
};
struct PktGetCharacter : public PktBase
{
char m_szCharName[MAX_CHARNAME];
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequestKey;
unsigned char m_cOldServerGroupID;
};
struct PktGetCharacterAck : public PktBase
{
enum Type
{
// 운영 서버 -> 운영 클라이언트
CHAR_BASIC_DATA = 1, // 캐릭터 정보. 다음 정보들이 들어감.
// CHAR_INFOST 캐릭터 기본 정보
// CHAR_POS 캐릭터 위치 정보
// SKILL 캐릭터 스킬 정보
// QUICK 캐릭터 퀵 슬롯
// EQUIP 캐릭터 장비
// INVEN 캐릭터 인벤
// EXTRA 캐릭터 여분
// EXCHANGE 캐릭터 교환
CHAR_EXTRA_DATA = 2, // 캐릭터 추가 정보들. 다음 정보들이 들어감.
// CHAR_INFOEX 캐릭터 추가 정보
// QUEST 퀘스트
// HISTORY 히스토리
// CONFIG 설정
// STORE_INFO 창고 정보
CHAR_FRIEND_DATA = 3, // 캐릭터 친구 정보
CHAR_BAN_DATA = 4, // 캐릭터 거부 정보
STORE_12_DATA = 5, // 창고 1, 2탭 데이터
STORE_34_DATA = 6, // 창고 3, 4탭 데이터
FINISH_GET_DATA = 7, // DB중계에서 운영서버로 데이터를 전부 보냈음.
};
unsigned long m_dwRequestKey;
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cType;
unsigned char m_cOldServerGroupID;
};
struct PktSetCharacter : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequestKey;
unsigned char m_cOldServerGroupID;
};
// 관리자 캐릭터 독점모드 해제
struct PktCloseCharacter : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned long m_dwRequestKey;
};
struct PktCloseCharacterAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequestKey;
};
// 캐릭터 Status 정보
struct CHAR_STATUS_ST
{
char m_cSex; // 캐릭터 성별
char m_cHair; // 캐릭터 머리 모양
char m_cFace; // 캐릭터 얼굴 모양
char m_cRace; // 캐릭터 종족
unsigned short m_nClass; // 캐릭터 클래스
unsigned long m_dwFame; // 명성
unsigned long m_dwMileage; // 마일리지
char m_cLevel; // 캐릭터 레벨
unsigned short m_nIP; // 증가 포인트
unsigned short m_nSTR; // 캐릭터 STR
unsigned short m_nDEX; // 캐릭터 DEX
unsigned short m_nCON; // 캐릭터 CON
unsigned short m_nINT; // 캐릭터 INT
unsigned short m_nWIS; // 캐릭터 WIS
__int64 m_dwExp; // 캐릭터 경험점
char m_cChance; // 스테이터스 재분배 기회
};
struct PktUpdateStatus : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned long m_dwRequestKey;
CHAR_STATUS_ST m_stStatus;
};
struct CreateItemInfo
{
unsigned char m_cUpdateEquip;
char m_szItemName[MAX_ITEM_NAME];
unsigned char m_cTakePos;
unsigned char m_cXPos;
unsigned char m_cYPos;
unsigned char m_cZPos;
unsigned char m_cNumOrDurability; // 현재 내구도 또는 개수
unsigned short m_usRuneSocket[Item::EquipmentInfo::MAX_RUNE_SOCKET_NUM]; // 룬 소켓
unsigned char m_cMaxDurability; // 최대 내구도
unsigned char m_cCurrentSocketNum; // 현재 소켓 수
unsigned char m_cMaxSocketNum; // 최대 소켓 수
unsigned char m_cUpgradeLevel; // 업그레이드 단계
unsigned char m_cSeasonRecord; // 시즌 레코드
unsigned char m_cCoreLevel; // 각성의 레벨(시즌레코드3이상)
unsigned char m_cSocket[Item::EquipmentInfo::MAX_SOCKET_NUM]; // 소켓 내용
short m_usAttribute[Item::Attribute::MAX_ATTRIBUTE_NUM]; // 속성
CreateItemInfo()
{
m_cUpdateEquip = m_cMaxDurability = m_cCurrentSocketNum = 0;
m_cMaxSocketNum = m_cUpgradeLevel = 0;
m_cSeasonRecord = 1; // 시즌 레코드는 생성시 1이 디폴트
m_cCoreLevel = 0;
memset(m_usRuneSocket, 0, sizeof(unsigned short) * Item::EquipmentInfo::MAX_RUNE_SOCKET_NUM);
memset(m_cSocket, 0, sizeof(unsigned char) * Item::EquipmentInfo::MAX_SOCKET_NUM);
memset(m_usAttribute, 0, sizeof(unsigned short) * Item::Attribute::MAX_ATTRIBUTE_NUM);
}
void AdminStore_Out(char* Out_Data, unsigned long& dwLength)
{
unsigned long* dwStoreLength = reinterpret_cast<unsigned long*>(Out_Data);
char* StoreInfo = static_cast<char*>(Out_Data + sizeof(unsigned long));
*reinterpret_cast<unsigned char*>(StoreInfo) = m_cNumOrDurability;
StoreInfo += sizeof(unsigned char);
CopyMemory(StoreInfo, m_usRuneSocket, sizeof(unsigned short) * Item::EquipmentInfo::MAX_RUNE_SOCKET_NUM);
StoreInfo += sizeof(m_usRuneSocket);
*reinterpret_cast<unsigned char*>(StoreInfo) = m_cMaxDurability;
StoreInfo += sizeof(unsigned char);
*reinterpret_cast<unsigned char*>(StoreInfo) = m_cCurrentSocketNum;
StoreInfo += sizeof(unsigned char);
*reinterpret_cast<unsigned char*>(StoreInfo) = m_cMaxSocketNum;
StoreInfo += sizeof(unsigned char);
*reinterpret_cast<unsigned char*>(StoreInfo) = m_cUpgradeLevel;
StoreInfo += sizeof(unsigned char);
*reinterpret_cast<unsigned char*>(StoreInfo) = m_cSeasonRecord;
StoreInfo += sizeof(unsigned char);
*reinterpret_cast<unsigned char*>(StoreInfo) = m_cCoreLevel;
StoreInfo += sizeof(unsigned char);
CopyMemory(StoreInfo, m_cSocket, sizeof(unsigned char) * Item::EquipmentInfo::MAX_SOCKET_NUM);
StoreInfo += sizeof(m_cSocket);
CopyMemory(StoreInfo, m_usAttribute, sizeof(short) * Item::Attribute::MAX_ATTRIBUTE_NUM);
StoreInfo += sizeof(m_usAttribute);
*dwStoreLength = (unsigned long)(StoreInfo - Out_Data);
};
void AdminStore_In(char* In_Data)
{
char* StoreInfo = static_cast<char*>(In_Data + sizeof(unsigned long));
m_cNumOrDurability = *reinterpret_cast<unsigned char*>(StoreInfo);
StoreInfo += sizeof(unsigned char);
CopyMemory(m_usRuneSocket, StoreInfo, sizeof(unsigned short) * Item::EquipmentInfo::MAX_RUNE_SOCKET_NUM);
StoreInfo += sizeof(m_usRuneSocket);
m_cMaxDurability = *reinterpret_cast<unsigned char*>(StoreInfo);
StoreInfo += sizeof(unsigned char);
m_cCurrentSocketNum = *reinterpret_cast<unsigned char*>(StoreInfo);
StoreInfo += sizeof(unsigned char);
m_cMaxSocketNum = *reinterpret_cast<unsigned char*>(StoreInfo);
StoreInfo += sizeof(unsigned char);
m_cUpgradeLevel = *reinterpret_cast<unsigned char*>(StoreInfo);
StoreInfo += sizeof(unsigned char);
m_cSeasonRecord = *reinterpret_cast<unsigned char*>(StoreInfo);
StoreInfo += sizeof(unsigned char);
m_cCoreLevel = *reinterpret_cast<unsigned char*>(StoreInfo);
StoreInfo += sizeof(unsigned char);
CopyMemory(m_cSocket, StoreInfo, sizeof(unsigned char) * Item::EquipmentInfo::MAX_SOCKET_NUM);
StoreInfo += sizeof(m_cSocket);
CopyMemory(m_usAttribute, StoreInfo, sizeof(short) * Item::Attribute::MAX_ATTRIBUTE_NUM);
StoreInfo += sizeof(m_usAttribute);
}
};
struct PktCreateItem : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned long m_dwRequestKey;
CreateItemInfo m_CreateItemInfo;
};
struct PktCreateItemAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned long m_dwRequestKey;
unsigned __int64 m_ItemID;
unsigned short m_PrototypeID;
CreateItemInfo m_CreateItemInfo;
};
struct PktUpdateItem : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned long m_dwRequestKey;
// 업데이트 아이템 데이터
unsigned __int64 m_ItemUID;
unsigned short m_ItemPrototypeID;
CreateItemInfo m_UpdataItemInfo;
};
struct PktUpdateItemAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned long m_dwRequestKey;
// 업데이트 아이템 데이터
unsigned __int64 m_ItemUID;
unsigned short m_ItemPrototypeID;
CreateItemInfo m_UpdataItemInfo;
};
struct PktRemoveItem : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned long m_dwRequestKey;
// 지울 아이템 데이터
unsigned __int64 m_ItemUID;
unsigned short m_ItemPrototypeID;
unsigned char m_cTakePos;
unsigned char m_cXPos;
unsigned char m_cYPos;
unsigned char m_cZPos;
};
struct PktRemoveItemAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned long m_dwRequestKey;
// 지울 아이템 데이터
unsigned __int64 m_ItemUID;
unsigned short m_ItemPrototypeID;
unsigned char m_cTakePos;
unsigned char m_cXPos;
unsigned char m_cYPos;
unsigned char m_cZPos;
};
struct PktSyncDeposit : public PktBase
{
enum Type
{
Tab12 = 1,
Tab34 = 2,
};
unsigned long m_dwUID;
unsigned long m_dwRequestID;
unsigned char m_cType;
};
struct PktItemReset : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequest;
unsigned char m_cTakePos;
};
struct PktItemResetAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequest;
unsigned char m_cTakePos;
};
struct PktInvenGold : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequest;
unsigned long m_dwGold;
};
struct PktSkillEdit : public PktBase
{
enum Type
{
Create = 1,
Edit = 2,
Delete = 3
};
enum RESULT_CMD
{
NOT_ENOUGH_STAT = 0,
NOT_ENOUGH_SKILLSLOT = 1,
FAILED_TO_GET_SKILLPROTOTYPE = 2,
OVERED_MAX_LOCKCOUNT = 3,
OVERED_MAX_SKILL_LEVEL = 4,
NOT_CURRENT_CLASS = 5,
FAILED = 6,
SUCCESS = 7
};
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequest;
unsigned char m_cType;
unsigned short m_wSkillID;
char m_SkillLevel;
char m_SkillLockCount;
};
struct PktAddBlockUser : public PktBase
{
enum BLOCK_INFO
{
MAX_DESCRIPTION = 31,
TARGET_ACCOUNT = 1, // 계정 블럭
TARGET_CHARACTER = 2, // 캐릭터 블럭
TERM_TEMPORARY = 0, // 임시 블럭
TERM_PERMANANT = 1, // 영구 블럭
};
unsigned char m_cServerGroup; // 서버 그룹
unsigned long m_dwUID; // UID
char m_szCharacterName[MAX_NAME]; // 이름 (캐릭터 블럭일 경우에만 필요)
unsigned char m_cBlockTarget; // 블럭 대상 (계정블럭, 캐릭터블럭)
unsigned char m_cBlockTerm; // 블럭 기간 (임시블럭, 영구블럭)
char m_szBlockFinishDateTime[MAX_TIME]; // 블럭 종료 시각
char m_szDescription[MAX_DESCRIPTION]; // 블럭 사유
};
struct PktDelBlockUser : public PktBase
{
unsigned char m_cServerGroup; // 서버 그룹
unsigned long m_nidx; // Index 번호
};
struct PktSearchBlock : public PktBase
{
unsigned long m_dwServerGroup;
};
struct PktSearchBlockAck : public PktBase
{
unsigned char m_cServerGroup;
unsigned long m_dwUID;
char m_szClientID[MAX_ACCOUNT];
char m_szCharacterName[MAX_NAME];
unsigned char m_cBlockTarget;
unsigned char m_cBlockTerm;
char m_szBlockStartTime[MAX_TIME];
char m_szBlockFinishTime[MAX_TIME];
char m_szAdminName[MAX_ACCOUNT];
char m_szDescription[PktAddBlockUser::MAX_DESCRIPTION];
unsigned long m_nidx;
};
struct PktChangePos : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequest;
float m_fPosX;
float m_fPosY;
float m_fPosZ;
char m_cZone;
};
struct PktSetZoneList : public PktBase
{
enum TYPE
{
MAX_BUFFER = 3304, // zone_buffer * 30
ZONE_BUFFER = 109, // 100byte + (4byte * 2) + 1byte
};
char m_ZoneBuffer[MAX_BUFFER];
};
struct PktDepositPasswd : public PktBase
{
enum TYPE
{
PASSWORD_LENGTH = 4,
};
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequest;
char m_cPasswd[PASSWORD_LENGTH];
};
struct PktCheckName : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwRequest;
char m_szCharacterName[MAX_NAME];
};
struct PktChangeName : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequest;
char m_szCharacterName[MAX_NAME];
};
struct PktDelCharList : public PktBase
{
enum TYPE
{
UID = 1,
CID = 2
};
unsigned char m_cType;
unsigned long m_dwValue;
unsigned long m_dwServerGroup;
};
struct PktDelCharListAck : public PktBase
{
enum TYPE
{
MAX_NAME = 16
};
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned char m_cNewServerGroupID;
unsigned char m_cOldServerGroupID;
char m_szInsertTime[MAX_TIME];
char m_szDeleteTime[MAX_TIME];
char m_szCharName[MAX_NAME];
unsigned int m_nLevel;
unsigned long m_dwGold;
};
struct PktCharRestore : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cNewServerGroupID;
unsigned char m_cOldServerGroupID;
};
struct PktCharRestoreAck : public PktBase
{
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cNewServerGroupID;
unsigned char m_cOldServerGroupID;
};
struct PktAdminStoreInsert : public PktBase
{
enum TYPE
{
EMPTY_SERVERID = 200,
MAX_ITEM_INFO = 100,
};
unsigned char m_cServerIdx;
char m_szOwnerName[MAX_NAME];
char m_szItemName[MAX_ITEM_NAME];
char m_binItemInfo[MAX_ITEM_INFO];
};
struct PktAdminStoreInsertAck : public PktBase
{
unsigned long m_dwStoreUID;
unsigned char m_cServerIdx;
char m_szOwnerName[MAX_NAME];
char m_szItemName[MAX_ITEM_NAME];
};
struct PktAdminStoreDelete : public PktBase
{
unsigned long m_dwStoreUID;
};
struct PktGetAdminStoreItem : public PktBase
{
enum TYPE
{
EDIT = 1,
CREATE = 2
};
unsigned char m_cType;
unsigned long m_dwStoreUID;
};
struct PktGetAdminStoreItemAck : public PktBase
{
enum TYPE
{
MAX_ITEM_INFO = 100,
};
unsigned char m_cType;
unsigned long m_dwStoreUID;
char m_binItemInfo[MAX_ITEM_INFO];
};
struct PktUpdateAdminStore : public PktBase
{
enum TYPE
{
MAX_ITEM_INFO = 100,
};
unsigned long m_dwStoreUID;
char m_binItemInfo[MAX_ITEM_INFO];
};
struct PktDelCharacter : public PktBase
{
unsigned long m_dwCID;
unsigned long m_dwUID;
unsigned long m_dwServerGroup;
unsigned long m_dwRequestKey;
};
struct PktGuildSearch : public PktBase
{
enum SEARCH_TYPE
{
NONE = 0,
ALLGROUP_ALLGUILD = 1,
ALLGROUP_SPEGUILD_NAME = 2,
ALLGROUP_SPEGUILD_GID = 3,
SPEGROUP_ALLGUILD = 4,
SPEGROUP_SPEGUILD_NAME = 5,
SPEGROUP_SPEGUILD_GID = 6,
};
unsigned char m_cSearchType;
unsigned long m_dwServerGroup;
char m_szSearchValue[MAX_PATH];
};
struct PktGuildSearchAck : public PktBase
{
unsigned long m_dwGID;
char m_szName[MAX_NAME];
unsigned int m_dwLevel;
unsigned long m_dwFame;
unsigned long m_dwGold;
unsigned int m_dwNation;
unsigned long m_dwServerGroup;
unsigned int m_nOldServerID;
unsigned int m_dwMemberNum;
};
struct PktRequestGuildMemberList : public PktBase
{
unsigned long m_dwGID;
unsigned long m_dwServerGroup;
};
struct PktRequestGuildMemberListAck : public PktBase
{
enum SIZE
{
MAX_NAME = 16,
};
unsigned long m_dwGID;
unsigned long m_dwCID;
int m_nPosition;
int m_nPositionInGuild;
char m_szLeaveGuildTime[MAX_TIME];
char m_szCharName[MAX_NAME];
int m_nLevel;
unsigned long m_dwFame;
unsigned short m_nClass;
unsigned long m_dwGold;
};
struct PktGuildRestoreDataList : public PktBase
{
bool m_bAllGroupChk;
unsigned long m_dwServerGroup;
};
struct PktGuildRestoreDataListAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwGID;
char m_szGuildName[MAX_NAME];
unsigned long m_dwGold;
char m_szDeleteDate[MAX_TIME];
};
struct PktFortSearch : public PktBase
{
enum SEARCH_TYPE
{
NONE = 0,
ALLSERVER_ALLZONE_ALLGUILD = 1,
ALLSERVER_ALLZONE_SPEGUILD_NAME = 2,
ALLSERVER_ALLZONE_SPEGUILD_GID = 3,
ALLSERVER_SPEZONE_ALLGUILD = 4,
ALLSERVER_SPEZONE_SPEGUILD_NAME = 5,
ALLSERVER_SPEZONE_SPEGUILD_GID = 6,
SPESERVER_ALLZONE_ALLGUILD = 7,
SPESERVER_ALLZONE_SPEGUILD_NAME = 8,
SPESERVER_ALLZONE_SPEGUILD_GID = 9,
SPESERVER_SPEZONE_ALLGUILD = 10,
SPESERVER_SPEZONE_SPEGUILD_NAME = 11,
SPESERVER_SPEZONE_SPEGUILD_GID = 12,
};
unsigned char m_cSearchType;
unsigned long m_dwServerGroup;
unsigned long m_dwZoneGroup;
char m_szSearchValue[MAX_PATH];
};
struct PktFortSearchAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCampID;
unsigned long m_dwGuildID;
char m_szGuildName[PktAdminMgr::MAX_NAME];
unsigned long m_dwHP;
unsigned char m_cZone;
unsigned char m_cChannel;
unsigned short m_usObjectType;
unsigned char m_cState;
unsigned char m_cSubState;
unsigned char m_cUpgradeStep;
char m_szRemainTime[PktAdminMgr::MAX_TIME];
char m_szLastUseTime[PktAdminMgr::MAX_TIME];
char m_cRight;
float m_fPosX;
float m_fPosY;
float m_fPosZ;
unsigned char m_cMaterial;
unsigned char m_cSiegeCount;
};
struct PktMiningCamp : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCampID;
};
struct PktMiningCampAck : public PktBase
{
unsigned long m_dwCampID;
unsigned short m_sMineralID;
unsigned short m_sAmount;
char m_cFlag;
};
struct PktShopCamp : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCampID;
};
struct PktShopCampAck : public PktBase
{
unsigned long m_dwCampID;
unsigned long m_dwServerGroup;
unsigned long m_dwTempMoney;
unsigned char m_cTax;
char m_szItem[PktAdminMgr::MAX_ITEM_BUFFER];
};
struct PktShopCampGold : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCampID;
unsigned long m_dwTempMoney;
};
struct PktShopCampTax : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCampID;
unsigned long m_dwTax;
};
struct PktCastleSearch : public PktBase
{
enum SEARCH_TYPE
{
NONE = 0,
ALLSERVER_ALLZONE_ALLCASTLE = 1,
ALLSERVER_ALLZONE_SPECASTLE_ID = 2,
ALLSERVER_SPEZONE_ALLCASTLE = 3,
ALLSERVER_SPEZONE_SPECASTLE_ID = 4,
SPESERVER_ALLZONE_ALLCASTLE = 5,
SPESERVER_ALLZONE_SPECASTLE_ID = 6,
SPESERVER_SPEZONE_ALLCASTLE = 7,
SPESERVER_SPEZONE_SPECASTLE_ID = 8,
};
unsigned char m_cSearchType;
unsigned long m_dwServerGroup;
unsigned long m_dwZoneGroup;
char m_szSearchValue[MAX_PATH];
};
struct PktCastleSearchAck : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCastleID;
unsigned char m_cNation;
unsigned char m_cZone;
unsigned char m_cChannel;
unsigned char m_cName;
unsigned char m_cSiegeCount;
unsigned char m_cInvincibleCount;
unsigned short m_wTotalSiegeCount;
unsigned long m_dwTotalTaxMoney;
char m_cRight;
float m_fPosInX;
float m_fPosInY;
float m_fPosInZ;
float m_fPosOutX;
float m_fPosOutY;
float m_fPosOutZ;
unsigned short m_wItemID;
unsigned char m_cItemNum;
};
struct PktCastleCreature : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCastleID;
};
struct PktCastleCreatureAck : public PktBase
{
unsigned long m_dwCreatureID;
unsigned long m_dwCastleID;
unsigned long m_dwOwnerID;
unsigned long m_dwHP;
unsigned short m_wObjectType;
float m_fDirection;
unsigned char m_cState;
unsigned char m_cSubState;
unsigned char m_cUpgradeStep;
unsigned char m_cUpgradeType;
char m_szRemainTime[PktAdminMgr::MAX_TIME];
char m_szLastUseTime[PktAdminMgr::MAX_TIME];
float m_fPosX;
float m_fPosY;
float m_fPosZ;
};
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_cServerGroup;
};
struct PktStoreGoldUpdate : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwRequest;
unsigned long m_dwGold;
};
struct PktUserBillingLog : public PktBase
{
enum SEARCH_TYPE
{
UID = 0,
ACCOUNT = 1,
};
unsigned char m_cSearchType;
char m_szSearchValue[100];
COleDateTime m_tStartTime;
COleDateTime m_tEndTime;
};
struct PktUserBillingLogAck : public PktBase
{
char m_szClientID[20];
unsigned long m_dwUID;
char m_szIP[MAX_IP];
unsigned int m_sServerIndex;
char m_szFirstLoginTime[MAX_TIME];
char m_szLogoutTime[MAX_TIME];
};
struct PktGameAdmin : public PktBase
{
enum PKT_TYPE
{
REG = 1,
EDIT = 2,
DEL = 3,
SEARCH = 4,
ACK = 5,
REFRESH = 6,
};
unsigned char m_cPktType;
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned int m_nAdminLV;
char m_szStartIP[MAX_IP];
char m_szEndIP[MAX_IP];
};
struct PktConnectAllServerz : public PktBase
{
enum SIZE { SERVERZ_NUM = 20 };
unsigned int m_nConnectedServerIndex[SERVERZ_NUM];
};
struct PktInterestedUser : public PktBase
{
enum PKT_TYPE
{
ADD_USER = 1,
REMOVE_USER = 2,
REQUEST_LIST = 3
};
unsigned char m_cPktType;
char m_szAccount[MAX_ACCOUNT];
char m_szReason[MAX_PATH];
};
struct PktConnectionChk : public PktBase
{
enum PKT_TYPE
{
REQUEST_CHK = 0,
INFO_ACK = 1
};
unsigned char m_cPktType;
char m_szAccount[MAX_ACCOUNT];
unsigned long m_dwUID;
char m_szLoginIP[MAX_IP];
unsigned int m_nServerGroup;
char m_szLoginTime[MAX_TIME];
};
struct PktDuplicatedItem : public PktBase
{
enum PKT_TYPE
{
SEARCH = 0,
RESULT_LIST = 1,
CHK = 2
};
unsigned char m_cPktType;
unsigned long m_dwServerGroup;
char m_szInsertTime[MAX_TIME];
char m_szUpdateTime[MAX_TIME];
unsigned long m_dwUID;
unsigned long m_dwCID;
char m_szCharName[MAX_NAME];
unsigned __int64 m_dwItemUID;
unsigned int m_nQty;
bool m_bChk;
};
struct DstUserInfo
{
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwServerGroup;
void Clear() { m_dwUID, m_dwCID, m_dwServerGroup = 0; }
bool IsValid()
{
if(!(m_dwUID && m_dwCID))
{
return false;
}
return true;
}
};
struct PktItemDistribute : public PktBase
{
CreateItemInfo m_stDistributeItem;
unsigned char m_cUserNum;
// DstUserInfo 구조체가 가변형태로 붙어서 사용됨
};
struct PktItemDistributeAck : public PktBase
{
enum RESULT_TYPE
{
SUCCESS = 1,
FALED_TO_CREATE_TEMPINVEN_OBJ = 2,
FALED_TO_GET_ITEMINFO = 3,
FALED_TO_GET_GAMEDB = 4,
FALED_TO_GET_TEMPINVEN_OBJ = 5,
FALED_TO_SERIALIZE_IN = 6,
FALED_TO_CREATE_ITEM_OBJ = 7,
FALED_TO_SET_ITEM = 8,
FALED_TO_SERIALIZE_OUT = 9,
FALED_TO_UPDATE_TEMPINVEN = 10
};
unsigned char m_cResultType;
DstUserInfo m_stUserInfo;
};
struct PktGuildRight : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwGID;
unsigned char m_aryRight[Guild::MAX_RIGHT_SIZE];
};
struct PktUnifiedCharInfo : public PktBase
{
enum PKT_TYPE
{
SEARCH_UID = 0,
SEARCH_ACCOUNT = 1,
RESULT_ACK = 2
};
unsigned char m_cPktType;
unsigned long m_dwServerGroup;
char m_szSearchValue[MAX_ACCOUNT];
unsigned long m_dwUID;
unsigned int m_nOldServerGroup;
unsigned long m_dwBeforeCID;
unsigned long m_dwNewCID;
char m_szBeforeCharName[MAX_NAME];
};
struct PktDetailCharInfo : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
char m_szCharName[MAX_CHARNAME];
unsigned short m_sClass;
unsigned long m_dwFame;
unsigned long m_dwMileage;
unsigned char m_cLevel;
unsigned long m_dwGold;
__int64 m_i64Exp;
};
struct PktUnifiedGuildInfo : public PktBase
{
enum PKT_TYPE
{
SEARCH = 0,
RESULT = 1
};
unsigned char m_cPktType;
unsigned long m_dwServerGroup;
unsigned long m_dwBeforeGID;
unsigned int m_nOldServerGroupID;
unsigned long m_dwNewGID;
char m_szBeforeGName[MAX_NAME];
char m_szNewGName[MAX_NAME];
};
struct PktCancelExecuteQuest : public PktBase
{
unsigned long m_dwRequestKey;
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned short m_wQuestID;
};
struct PktDeleteHistoryQuest : public PktBase
{
unsigned long m_dwRequestKey;
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned short m_wQuestID;
};
struct PktUserNation : public PktBase
{
unsigned long m_dwRequestKey;
unsigned long m_dwServerGroup;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned char m_cNation;
};
struct PktShiftToUID : public PktBase
{
enum PKT_TYPE
{
ACCOUNT_TO_UID = 1,
UID_TO_ACCOUNT = 2
};
unsigned char m_cPktType;
char m_szAccount[MAX_ACCOUNT];
unsigned long m_dwUID;
};
struct PktStoreTabEdit : public PktBase
{
unsigned long m_dwRequestKey;
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned int m_nTabNum;
};
struct PktAmountOfGold : public PktBase
{
unsigned long m_dwServerGroup;
unsigned __int64 m_i64Gold;
};
struct PktGMLogMsg : public PktBase
{
enum PKT_TYPE
{
LOG_CONFIRM = 1,
LOG_SELECT = 2,
LOG_INSERT = 3,
LOG_UPDATE = 4,
LOG_DELETE = 5,
LOG_REFRESH = 6
};
unsigned char m_cPktType;
unsigned long m_dwLogID;
unsigned long m_dwUID;
unsigned long m_dwCID;
unsigned long m_dwServerGroup;
char m_szLogMsg[MAX_LOG];
char m_szEditDate[MAX_TIME];
char m_szAdminID[MAX_ACCOUNT];
};
struct PktNameChangeCount : public PktBase
{
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned char m_cNameChangeCount;
};
struct PktGuildMemberEdit : public PktBase
{
enum PktErr
{
FAIL_GUILD = 1, // 길드가 없을때.
FAIL_CONNECT_CHAR = 2, // 캐릭터가 접속 중일때.
FAIL_DB_UPDATE = 3, // DB 업데이트 실패.
FAIL_MEMBER_DELETE = 4 // 길드 멤버 삭제 실패.
};
enum Const
{
TYPE_POSITION = 0, // 포지션 변경시.
TYPE_MEMBERDELETE = 1 // 길드 멤버 삭제시.
};
unsigned long m_dwServerGroup;
unsigned long m_dwGID;
unsigned long m_dwCID;
unsigned char m_cPosition;
unsigned char m_cType;
};
struct PktCharInfoTime : public PktBase
{
enum Type
{
SearchCID = 0,
SearchName = 1
};
unsigned long m_dwServerGroup;
unsigned long m_dwCID;
unsigned char m_SearchType;
char m_szName[MAX_CHARNAME];
};
struct PktCharInfoTimeResultAck : public PktBase
{
char m_CreateTime[MAX_TIME];
char m_UpdateTime[MAX_TIME];
};
};
#pragma pack( )
#endif