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>
451 lines
12 KiB
C++
451 lines
12 KiB
C++
#ifndef _CHAR_ITEM_PACKET_H_
|
|
#define _CHAR_ITEM_PACKET_H_
|
|
|
|
// CharItemPacket.h
|
|
// ItemStructure.h을 포함해야 함. (집기, 떨구기, )
|
|
|
|
#include <Item/ItemStructure.h>
|
|
#include <Network/Packet/PacketBase.h>
|
|
|
|
#include "CharItemPacketStruct.h"
|
|
|
|
#pragma pack(1)
|
|
|
|
// 집기 패킷 (응답 필요)
|
|
typedef struct PktPU* LPPktPU;
|
|
struct PktPU : public PktBase
|
|
{
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned long m_dwObjectID; // 오브젝트 아이디
|
|
Item::ItemPos m_itemPos; // 아이템 위치
|
|
};
|
|
|
|
|
|
// 집기 패킷 Ack
|
|
typedef struct PktPUAck* LPPktPUAck;
|
|
struct PktPUAck : public PktBase
|
|
{
|
|
enum ObjectType { Item = 0, Gold = 1 };
|
|
enum PktPUAckError
|
|
{
|
|
SERVER_ERROR = 1,
|
|
FAIL_GET_CELL = 2,
|
|
FAIL_GET_ITEM = 3,
|
|
FAIL_PICKUP_INVEN = 4
|
|
};
|
|
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned long m_dwObjectID; // 오브젝트 아이디
|
|
unsigned long m_dwSize; // Object크기(혹은 돈 양)
|
|
|
|
Item::ItemPos m_itemPos; // 아이템이 놓일 위치
|
|
unsigned char m_cType; // Object종류(아이템 혹은 돈)
|
|
unsigned char m_cNum; // 아이템 개수
|
|
};
|
|
|
|
|
|
// 집기 정보
|
|
typedef struct PktPUInfo PktPUInfo, *LPPktPUInfo;
|
|
struct PktPUInfo : public PktBase
|
|
{
|
|
unsigned long m_dwCharID; // 캐릭터 정보
|
|
unsigned long m_dwObjectID; // 오브젝트 아이디
|
|
};
|
|
|
|
|
|
// 떨구기 (응답 필요)
|
|
typedef struct PktPD* LPPktPD;
|
|
struct PktPD : public PktBase
|
|
{
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
Item::ItemPos m_itemPos; // 아이템 위치 및 인덱스
|
|
unsigned char m_cNum; // 아이템 개수
|
|
};
|
|
|
|
|
|
// 떨구기 Ack
|
|
typedef struct PktPDAck* LPPktPDAck;
|
|
struct PktPDAck : public PktBase
|
|
{
|
|
enum PktPDAckError
|
|
{
|
|
SERVER_ERROR = 1,
|
|
FAIL_GET_CELL = 2,
|
|
FAIL_DROP_INVEN = 3,
|
|
FAIL_DROP_FIELD = 4,
|
|
FAIL_ZERO_ITEM = 5
|
|
};
|
|
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
FieldObject m_FieldObject; // FieldObject
|
|
Item::ItemPos m_itemPos; // 아이템 위치 및 인덱스
|
|
};
|
|
|
|
// 떨구기 정보
|
|
typedef struct PktPDInfo* LPPktPDInfo;
|
|
struct PktPDInfo : public PktBase
|
|
{
|
|
unsigned long m_dwCharID;
|
|
FieldObject m_FieldObject;
|
|
};
|
|
|
|
// 셀 정보
|
|
typedef struct PktCeInfo* LPPktCeInfo;
|
|
struct PktCeInfo : public PktBase
|
|
{
|
|
unsigned char m_cObjectNum; // 오브젝트 개수
|
|
};
|
|
|
|
|
|
// 아이템 처리 패킷 (응답 필요)
|
|
typedef struct PktTI* LPPktTI;
|
|
struct PktTI : public PktBase
|
|
{
|
|
enum PktTIError
|
|
{
|
|
SERVER_ERROR = 1,
|
|
FAIL_MOVE = 2
|
|
};
|
|
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
TakeType m_TakeType; // 아이템 집기 구조체
|
|
};
|
|
|
|
|
|
// 돈 처리 패킷 (응답 필요)
|
|
typedef struct PktTG* LPPktTG;
|
|
struct PktTG : public PktBase
|
|
{
|
|
enum PktTGError
|
|
{
|
|
SERVER_ERROR = 1,
|
|
FAIL_MOVE = 2,
|
|
GOLD_OVERFLOW = 3
|
|
};
|
|
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned long m_dwGold; // 돈 액수
|
|
|
|
unsigned char m_cSrcPos : 4; // Src위치 - TakeType 참조
|
|
unsigned char m_cDstPos : 4; // Dst위치 - TakeType 참조
|
|
};
|
|
|
|
// 아이템 처리 패킷 (응답 필요)
|
|
typedef struct PktTIs* LPPktTIs;
|
|
struct PktTIs : public PktBase
|
|
{
|
|
enum PktTlsError
|
|
{
|
|
SERVER_ERROR = 1
|
|
};
|
|
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned char m_TakeNum; // 아이템 집기 숫자
|
|
};
|
|
|
|
// 아이템 스왑 패킷
|
|
typedef struct PktSwI* LPPktSwI;
|
|
struct PktSwI : public PktBase
|
|
{
|
|
enum PktSwlError
|
|
{
|
|
SERVER_ERROR = 1,
|
|
FAIL_SRC_MOVE = 2,
|
|
FAIL_DST_MOVE = 3,
|
|
CANT_SWAP = 4
|
|
};
|
|
|
|
unsigned long m_dwCharID; // - 캐릭터 아이디
|
|
TakeType m_SwapSrc; // - 스왑 소스 아이템 집기 구조체
|
|
TakeType m_SwapDst; // - 스왑 대상 아이템 집기 구조체
|
|
};
|
|
|
|
// 아이템 거래 패킷
|
|
typedef struct PktTr* LPPktTr;
|
|
struct PktTr : public PktBase
|
|
{
|
|
enum PktTrError
|
|
{
|
|
NO_SERVER_ERR = 0,
|
|
SERVER_ERROR = 1,
|
|
FAIL_DROP_INVEN = 2,
|
|
WRONG_NPC = 3,
|
|
FAIL_ITEM_BUY = 4,
|
|
FAIL_PUT_INVEN = 5
|
|
};
|
|
|
|
unsigned long m_dwCustomerID; // 손님 아이디
|
|
unsigned long m_dwOwnerID; // 상점 주인 아이디 (NPC 또는 캐릭터)
|
|
|
|
unsigned short m_wBuyItemID; // 사려고 하는 아이템 종류 ID (0이면 팔기)
|
|
TakeType m_TakeType; // 아이템 집기 구조체
|
|
};
|
|
|
|
// 아이템 거래 패킷 Ack (+ 가변길이 아이템)
|
|
typedef struct PktTrAck* LPPktTrAck;
|
|
struct PktTrAck : public PktBase
|
|
{
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned long m_dwNPCID; // 상점 NPC 아이디
|
|
unsigned long m_dwGold; // 현재 소지금
|
|
unsigned short m_wSize; // 아이템 크기(0 = 팔기, 0이 아니면 사기)
|
|
Item::ItemPos m_itemPos; // 아이템 위치
|
|
unsigned char m_cNum; // 아이템 갯수
|
|
};
|
|
|
|
// 아이템의 수리 패킷 (응답 필요)
|
|
typedef struct PktRpI* LPPktRpI;
|
|
struct PktRpI : public PktBase
|
|
{
|
|
enum Pos
|
|
{
|
|
EQUIPMENT = 1,
|
|
INVENTORY = 2,
|
|
EQUIPMENT_ALL = 3,
|
|
INVENTORY_ALL = 4,
|
|
};
|
|
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned long m_dwGold; // 수리 비용
|
|
Item::ItemPos m_itemPos; // 수리 아이템 위치
|
|
};
|
|
|
|
// 아이템의 사용 패킷 (응답 필요)
|
|
typedef struct PktUI* LPPktUI;
|
|
struct PktUI : public PktBase
|
|
{
|
|
enum PktUIAck
|
|
{
|
|
SERVER_ERROR = 1,
|
|
USE_FAILED = 2
|
|
};
|
|
|
|
unsigned long m_dwSender; // 사용자 아이디
|
|
unsigned long m_dwRecver; // 대상자 아이디
|
|
Item::ItemPos m_itemPos; // 사용 아이템 위치
|
|
};
|
|
|
|
// 오브젝트 던지기 패킷 ( 응답 필요 )
|
|
typedef struct PktCO* LPPktCO;
|
|
struct PktCO : public PktBase
|
|
{
|
|
CastObject m_sCastObject;
|
|
unsigned long m_dwSenderID; // 던지는 사람
|
|
unsigned long m_dwReceiverID; // 받는 사람
|
|
};
|
|
|
|
// 오브젝트 던지기 패킷 (Cast Object)
|
|
typedef struct PktCOInfo* LPPktCOInfo;
|
|
struct PktCOInfo : public PktBase
|
|
{
|
|
CastObject m_sCastObject;
|
|
unsigned long m_dwSenderID; // 던지는 사람
|
|
unsigned long m_dwReceiverID; // 받는 사람
|
|
};
|
|
|
|
// 소켓 설치 패킷
|
|
typedef struct PktIS* LPPktIS;
|
|
struct PktIS : public PktBase
|
|
{
|
|
unsigned long m_dwCharID;
|
|
Item::ItemPos m_equipPos; // 장비 위치
|
|
Item::ItemPos m_gemPos; // 보석 위치
|
|
};
|
|
|
|
// 소켓 설치 패킷 Ack (+ 소켓이 설치된 장비 아이템)
|
|
typedef struct PktISAck* LPPktISAck;
|
|
struct PktISAck : public PktBase
|
|
{
|
|
unsigned long m_dwCharID;
|
|
Item::ItemPos m_equipPos; // 장비 위치
|
|
Item::ItemPos m_gemPos; // 보석 위치
|
|
unsigned char m_wSize; // 아이템 크기
|
|
};
|
|
|
|
// 업그레이드 아이템
|
|
typedef struct PktUgI* LPPktUgI;
|
|
struct PktUgI : public PktBase
|
|
{
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned char m_cMineralNum; // 광물 숫자
|
|
};
|
|
|
|
// 업그레이드 아이템 Ack (+ 아이템 구조체)
|
|
typedef struct PktUgIAck* LPPktUgIAck;
|
|
struct PktUgIAck : public PktBase
|
|
{
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned char m_cSize; // 아이템 크기
|
|
};
|
|
|
|
// 아이템 스플릿 요청 (응답 필요)
|
|
typedef struct PktSplt* LPPktSplt;
|
|
struct PktSplt : public PktBase
|
|
{
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
TakeType m_TakeType; // 아이템 집기 구조체
|
|
// ( Src : 나눌 아이템, Dst : 나누어서 놓을 자리(항상 비어 있어야 함),
|
|
// Num : 나눌 아이템 개수)
|
|
};
|
|
|
|
// 아이템 스플릿 Ack (응답 필요) (+ 가변길이 아이템 구조체 (나누어서 생긴 아이템 정보))
|
|
typedef struct PktSpItAck* LPPktSpItAck;
|
|
struct PktSpItAck : public PktBase
|
|
{
|
|
enum PktSpltAckError
|
|
{
|
|
SERVER_ERROR = 1,
|
|
FAIL_SPLIT = 2
|
|
};
|
|
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
TakeType m_TakeType; // 아이템 집기 구조체
|
|
unsigned char m_cSize; // 아이템 크기
|
|
};
|
|
|
|
|
|
// 퀵 슬롯 이동 (응답 필요)
|
|
typedef struct PktQSM* LPPktQSM;
|
|
struct PktQSM : public PktBase
|
|
{
|
|
enum PktQSMError
|
|
{
|
|
SERVER_ERROR = 1,
|
|
FAIL_MOVE = 2
|
|
};
|
|
|
|
TakeType m_TakeType;
|
|
};
|
|
|
|
|
|
// 스위치 핸드
|
|
typedef struct PktSwH* LPPktSwH;
|
|
struct PktSwH : public PktBase
|
|
{
|
|
unsigned char m_cSelect; // 선택 핸드 ( 1 = 무기1 & 방패1, 2 = 무기2 & 방패2 )
|
|
};
|
|
|
|
// 교환 명령
|
|
//
|
|
// 명령 :
|
|
// 0 = 제안, 1 = 수락, 2 = 거절, 3 = 확인, 4 = 확인 취소, 5 = 거래 성립, 6 = 거래 취소
|
|
//
|
|
// 에러 :
|
|
// 0 = 성공, 1 = 서버 에러, 2 = 이미 교환중인 캐릭터에게 교환 신청,
|
|
// 3 = 양쪽 모두 확인하지 않은 상태에서 거래 성립, 4 = 거부 옵션이 켜진 상태
|
|
//
|
|
typedef struct PktExC* LPPktExC;
|
|
struct PktExC : public PktBase
|
|
{
|
|
enum ExchageCmd
|
|
{
|
|
EXC_PROPOSE = 0, EXC_ACCEPT = 1, EXC_REFUSE = 2,
|
|
EXC_OK = 3, EXC_CANCEL = 4, EXC_EXCHANGE = 5,
|
|
EXC_QUIT = 6, EXC_LOCK = 7, EXC_UNLOCK = 8
|
|
};
|
|
|
|
enum PktExCError
|
|
{
|
|
NO_SERVER_ERR = 0, SERVER_ERROR = 1, FAIL_EXCHANGING_CHAR = 2,
|
|
FAIL_NOT_ALL_OK = 3, FAIL_REJECT = 4
|
|
};
|
|
|
|
unsigned long m_dwSenderID; // 보낸이 아이디
|
|
unsigned long m_dwRecverID; // 받는이 아이디
|
|
unsigned char m_cCmd; // 명령
|
|
};
|
|
|
|
// 교환 아이템 (+ 아이템 구조체)
|
|
typedef struct PktExI* LPPktExI;
|
|
struct PktExI : public PktBase
|
|
{
|
|
enum Type
|
|
{
|
|
Item = 0,
|
|
Gold = 1,
|
|
Remove = 2
|
|
};
|
|
|
|
unsigned long m_dwCharID; // 캐릭터 아이디
|
|
unsigned long m_dwSize; // 아이템 데이터 크기(혹은 돈 양)
|
|
Item::ItemPos m_itemPos; // 아이템 위치
|
|
unsigned char m_cType; // 아이템 종류(아이템 = 0, 돈 = 1)
|
|
unsigned char m_cNum; // 아이템 개수(stack아이템인 경우, 개수만 보냄)
|
|
};
|
|
|
|
|
|
|
|
namespace Deposit
|
|
{
|
|
enum Const { PASSWORD_LENGTH = 4 };
|
|
};
|
|
|
|
// 창고 패킷 (GameServer <--> DBAgent)
|
|
// 로그인시에, PktDBUpdate를 보낸 후, PktDepositUpdateDB를 여러개 준다.
|
|
// 마지막 패킷에 m_bUpdateComplete를 true로 Set해 준다.
|
|
|
|
// 게임 중에는 게임 서버가 수시로 Update를 한다.
|
|
typedef struct PktDepositUpdateDB* LPPktDepositUpdateDB;
|
|
struct PktDepositUpdateDB : public PktBase
|
|
{
|
|
enum TabFlag
|
|
{
|
|
ITEM_TAB1 = ( 1 << 0 ),
|
|
ITEM_TAB2 = ( 1 << 1 ),
|
|
ITEM_TAB3 = ( 1 << 2 ),
|
|
ITEM_TAB4 = ( 1 << 3 ),
|
|
USED_DEPOSIT = ( 1 << 30), // 0 : 창고 사용 X, 1 : 창고 사용함.
|
|
SAVED_PASSWORD = ( 1 << 31) // 0 : NOSAVE 1 : SAVE
|
|
};
|
|
|
|
enum TabNum
|
|
{
|
|
TAB_12 = 0,
|
|
TAB_34 = 1,
|
|
};
|
|
|
|
unsigned long m_dwUID; // 캐릭터 UID
|
|
unsigned long m_dwCID; // 캐릭터 CID
|
|
unsigned long m_dwTabFlag; // 현재 탭의 구입 상태를 나타내는 bitset
|
|
unsigned short m_usDataSize; // 탭(혹은 암호) 데이터 크기. 암호인 경우는 Deposit::PASSWORD_LENGTH와 같아야 한다.
|
|
unsigned char m_cTabNum; // password인 경우는 PASSWORD_TABNUM임
|
|
bool m_bUpdateComplete; // 업데이트가 완료되는 경우, true로 set.
|
|
};
|
|
|
|
|
|
// 창고 패킷 (Client <--> GameServer)
|
|
struct PktDeposit : public PktBase
|
|
{
|
|
enum CMD
|
|
{
|
|
LOGIN = 1, // Ack있음(Ack데이터 없음) (Client<->GameServer) szData[0]~[3]는 password, 그 다음에 암호 저장 여부 1byte (0, 1)
|
|
BUY_TAB = 2, // Ack있음(Ack데이터 없음) (Client<->GameServer) szData[0]에 사용할 탭 번호를 넣어 줌
|
|
RETURN_TAB = 3, // Ack있음(Ack데이터 없음) (Client<->GameServer) szData[0]에 사용할 탭 번호를 넣어 줌, 아직 구현되지 않음
|
|
|
|
LOGOUT = 4, // Ack있음 (Client->GameServer) 데이터 없음.
|
|
CHANGE_PASS = 5, // Ack있음 (Client->GameServer) szData[0]~[3]는 password. 인증된 상태에서만 가능.
|
|
SAVED_PASS = 6, // Ack없음 (GameServer -> Client) 게임 로그인시 줌. szData[0]~[3]는 Gold, [4]는 암호 저장 여부 1byte (0, 1)
|
|
|
|
PASSWORD = 7, // AgentServer -> GameServer (CID, Password), GameServer -> AgentServer (UID, Password)
|
|
GOLD = 8 // AgentServer -> GameServer (CID, Gold), GameServer -> AgentServer (UID, Gold)
|
|
};
|
|
|
|
enum DepositError
|
|
{
|
|
SERVER_ERROR = 1,
|
|
INSUFFICIENT_MONEY = 2,
|
|
AUTH_FAILED = 3,
|
|
INVALID_ARGUMENT = 4
|
|
};
|
|
|
|
enum { MIN_DATA_SIZE = Deposit::PASSWORD_LENGTH + 4 };
|
|
|
|
unsigned char m_cCmd;
|
|
char m_szData[MIN_DATA_SIZE];
|
|
};
|
|
|
|
|
|
#pragma pack()
|
|
|
|
|
|
#endif |