Files
Client/Server/RylServerProject/RylGameLibrary/Network/Packet/PacketStruct/CharItemPacket.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

671 lines
18 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 <Network/Packet/PacketStruct/DataPacket.h>
#include "CharItemPacketStruct.h"
#pragma pack(1)
// 집기 (응답 필요)
struct PktPU : public PktBase
{
unsigned __int64 m_nObjectID; // 오브젝트 아이디
unsigned long m_dwCharID; // 캐릭터 아이디
Item::ItemPos m_itemPos; // 아이템 위치
};
// 집기 Ack
struct PktPUAck : public PktBase
{
enum ObjectType { Item = 0, Gold = 1 };
enum PktPUAckError
{
NO_SERVER_ERR = 0,
SERVER_ERROR = 1,
FAIL_GET_CELL = 2,
FAIL_GET_ITEM = 3,
FAIL_PICKUP_INVEN = 4,
FAIL_NOT_OWNER_OF_ITEM = 5,
FAIL_NOT_ITEM = 6,
FAIL_CREATE_ITEM = 7,
FAIL_AUTO_ROUTING = 8,
FAIL_GOLD_OVERFLOW = 9
};
unsigned __int64 m_nObjectID; // 오브젝트 아이디
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned long m_dwSize; // Object크기(혹은 돈 양)
Item::ItemPos m_itemPos; // 아이템이 놓일 위치
unsigned char m_cType; // Object종류(아이템 혹은 돈)
unsigned char m_cNum; // 아이템 갯수
};
// 집기 정보
struct PktPUInfo : public PktBase
{
unsigned __int64 m_nObjectID; // 오브젝트 아이디
unsigned long m_dwCharID; // 캐릭터 아이디
};
// 오토 루팅
struct PktAutoRouting : public PktBase
{
enum PktARCmd
{
ARC_ORDER = 0,
ARC_POSSIBLE = 1,
ARC_IMPOSSIBLE = 2
};
unsigned __int64 m_nObjectID; // 오브젝트 아이디
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned short m_wItemID; // 아이템 아이디
unsigned char m_cNum; // 아이템 갯수
Item::ItemPos m_itemPos; // 아이템 위치
unsigned char m_cCmd; // 명령
};
// 떨구기 (응답 필요)
struct PktPD : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
Item::ItemPos m_itemPos; // 아이템 위치 및 인덱스
unsigned char m_cNum; // 아이템 갯수
};
// 떨구기 Ack
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; // 아이템 위치 및 인덱스
};
// 떨구기 정보
struct PktPDInfo : public PktBase
{
unsigned long m_dwCharID;
FieldObject m_FieldObject;
};
// 사라지기
struct PktDisappearItem : public PktBase
{
enum PktDICmd
{
DIC_DEFAULT = 0, // 일반적인 아이템 삭제
DIC_LINKED_QUEST = 1 // 퀘스트 종속 아이템의 삭제 (메세지 출력 필요)
};
unsigned long m_dwCharID; // 캐릭터 아이디
Item::ItemPos m_itemPos; // 아이템 위치 및 인덱스
unsigned char m_cNum; // 아이템 갯수
unsigned char m_cCmd; // 명령
};
/* TODO : REMOVE HERE
셀 정보
struct PktCeInfo : public PktBase
{
struct Stall_Info
{
enum { MAX_STALL_NAME = 32 };
unsigned long m_dwCID;
char m_szStallName[MAX_STALL_NAME];
};
unsigned char m_cItemNum; // 뒤에 따라오는 아이템 개수.
unsigned char m_cStallNum; // 뒤에 따라오는 상점 이름 개수.
};
*/
// 아이템 처리 (응답 필요)
struct PktTI : public PktBase
{
enum PktTIError
{
SERVER_ERROR = 1,
FAIL_MOVE = 2,
FAIL_MOVE_FIFTHSKILL_LOCKITEM = 3
};
unsigned long m_dwCharID; // 캐릭터 아이디
TakeType m_TakeType; // 아이템 집기 구조체
};
// 돈 처리 (응답 필요)
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 참조
};
// 아이템 처리 (응답 필요)
struct PktTIs : public PktBase
{
enum PktTlsError
{
SERVER_ERROR = 1
};
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned char m_TakeNum; // 아이템 집기 숫자
};
// 아이템 스왑
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; // - 스왑 대상 아이템 집기 구조체
};
// 아이템 거래
struct PktTr : public PktBase
{
enum PktTrError
{
FAIL_DROP_INVEN = 2, // 인벤토리에 아이템이 없어 팔기 실패
FAIL_WRONG_NPC = 3, // 잘못된 NPC
FAIL_ITEM_BUY = 4, // 아이템 구입 실패
FAIL_PUT_INVEN = 5, // 인벤토리에 아이템 놓기 실패
FAIL_FULL_INVEN = 6, // 인벤토리가 꽉 찬 상태
FAIL_ENEMY_ITEM = 7, // 공성시간에 적대 길드 요새 상점에서 아이템 구매 실패.
FAIL_GOLD_OVERFLOW = 8 // 거래후 최대 소지금 초과
};
enum PktTrCmd
{
TRC_BUY_WITH_GOLD = 0, // 아이템 구입 (일반 상점)
TRC_BUY_WITH_MILEAGE = 1, // 아이템 구입 (메달 상점)
TRC_SELL = 2, // 아이템 판매
TRC_BUY_EQUIP = 3, // 랜덤 옵션이 붙은 장비 구입
TRC_BUY_WITH_SKILL_COUPON = 4 // 아이템 구입 (상위 트레이너)
};
unsigned long m_dwCustomerID; // 손님 아이디
unsigned long m_dwOwnerID; // 상점 주인 아이디 (NPC 또는 캐릭터)
unsigned char m_cCmd; // 명령
unsigned short m_wBuyItemID; // 사려고 하는 아이템 종류 ID
TakeType m_TakeType; // 아이템 집기 구조체
Item::ItemPos m_CouponPos; // 스킬북 쿠폰 위치 (TRC_BUY_WITH_SKILL_COUPON 명령의 경우 돈 대신 쿠폰을 사용한다.)
unsigned short m_wSize; // 아이템 크기 (TRC_BUY_EQUIP 명령의 경우 '가변길이 아이템'이 덧붙는다.)
// Rodin : 아이템 전체가 아닌 속성 배열을 넣어 패킷 길이 체크와 더불어 해킹 위험을 줄이도록 수정합시다.
};
// 아이템 거래 Ack (+ 가변길이 아이템)
struct PktTrAck : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned long m_dwNPCID; // 상점 NPC 아이디
unsigned long m_dwGold; // 현재 소지금
unsigned long m_dwMileage; // 현재 마일리지
Item::ItemPos m_CouponPos; // 스킬북 쿠폰 위치 (TRC_BUY_WITH_SKILL_COUPON 명령의 경우 돈 대신 쿠폰을 사용한다.)
unsigned short m_wSize; // 아이템 크기
Item::ItemPos m_itemPos; // 아이템 위치
unsigned char m_cNum; // 아이템 갯수
};
// NPC 장비 상점 정보 (+ Ack시엔 가변 길이 아이템 목록)
struct PktEquipShopInfo : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned long m_dwNPCID; // NPC 아이디
unsigned long m_dwTime; // 물품 재진열 시간 (그레이드가 새로 책정된 시간)
unsigned char m_cRace; // 종족
unsigned char m_cTabPage; // 탭
unsigned char m_cNum; // 아이템 갯수
};
// 아이템의 수리 (응답 필요)
struct PktRpI : public PktBase
{
enum Err
{
NOT_ENOUGH_GOLD = 2, // 가지고 있는 돈이 부족
FAIL_NOT_CREATURE = 10, // 크리에이쳐가 존재하지 않습니다.
FAIL_NOT_NPCZONE = 11, // NPC의 존번호가 다릅니다.
FAIL_NOT_REPAIR = 12, // 리페어아이템이없다.
FAIL_NOT_POSITEM = 13, // 아이템이 위치에없다.
FAIL_NOT_STACKABLE = 14, // 소모성아이템이다.
FAIL_NOT_EQUIP = 15, // 장비아이템이아니다.
FAIL_FULL_DRUA = 16, // 내구도가 풀이다.
};
enum Pos
{
EQUIPMENT = 1,
INVENTORY = 2,
EQUIPMENT_ALL = 3,
INVENTORY_ALL = 4,
};
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned long m_dwGold; // 수리 비용
Item::ItemPos m_itemPos; // 수리 아이템 위치
};
// 장비하고 있는 모든 아이템 수리 (응답 필요)
struct PktRpAI : public PktBase
{
enum Err
{
NOT_ENOUGH_GOLD = 2, // 가지고 있는 돈이 부족
FAIL_NOT_CREATURE = 10, // 크리에이쳐가 존재하지 않습니다.
FAIL_NOT_NPCZONE = 11, // NPC의 존번호가 다릅니다.
FAIL_NOT_REPAIR = 12, // 리페어아이템이없다.
};
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned long m_dwGold; // 수리 비용
};
// 아이템의 사용 (응답 필요)
struct PktUI : public PktBase
{
enum PktUIAck
{
USE_FAILED = 2,
/* 공성 관련 아이템 사용 에러 */
NOT_SIEGE_TIME = 3, // 공성 시간이 아님
NOT_EXIST_GUILD = 4, // 길드가 없거나, 길드에 가입하지 않았음
NOT_MASTER = 5, // 길드 마스터가 아님
NOT_ENOUGH_FAME = 6, // 길드 명성 부족
ANOTHER_DEV_CAMP = 7, // 구축중, 취소중, 파괴중인 다른 진지가 있음
INNER_RADIUS = 8, // 다른 진지나 성의 반경 안에 있음
OUTER_RADIUS = 9, // 아군 진지의 영역 밖에 있음
NOT_ENOUGH_MATERIAL = 10, // 공성 병기 생성 자재 부족
IN_SAFETYZONE = 11, // 진지를 세울수 없는 곳임
FAIL_PEACE_GUILD = 12, // 평화 모드 길드
FAIL_CAPITAL_ZONE = 13, // 카나번에만 생성 가능
// FAIL_ALMIGHTY_GROUND = 13, // 신의 대지에는 생성 할수 없음
FAIL_STONE_BATTLE = 14, // 다크 카나번에는 생성 할수 없음
FAIL_EXIST_ANOTHER_WEAPON = 15, // 이미 월드 웨폰이 존재함
FAIL_ALMIGHTY_PIRATE = 16, // 신의 해적단은 생성 불가
FAIL_REMAIN_3_DAY = 17, // 3번의 공성 시간후에 가능
FAIL_REMAIN_2_DAY = 18, // 2번의 공성 시간후에 가능
FAIL_REMAIN_1_DAY = 19, // 1번의 공성 시간후에 가능
FAIL_POSITION = 20, // 위치가 이상함
NOT_EXIST_QUEST = 21, // 퀘스트가 존재하지 않음
FAIL_HAS_QUEST = 22, // 이미 가지고 있는 퀘스트
FAIL_FULL_QUEST = 23, // 받을 수 있는 퀘스트수가 꽉 찼음
FAIL_QUEST_LEVEL = 24, // 퀘스트를 수행할수 있는 레벨 아님
FAIL_NOT_GT_GUILD_WAR_TIME = 25, // 길드전 시간이 아님
OUTER_RADIUS_SIEGE = 26, // 영역 밖에서 공성 병기를 생성
FAIL_HAS_SIEGE_ARMS = 27, // 1개 이상에 공성 병기를 생성 하려고 할때.
FAIL_MATERIAL_COUNT = 28, // 공성용 자재가 부족할때.
NOT_GUILD_MASTER = 29, // 길드 마스터가 아닐 경우.
NOT_CASTLE_NATION = 30, // 공성측일 경우.
FAIL_MAX_SIEGE_OBJECT = 31, // 충차가 최대값으로 생성되었을 경우.
FAIL_NEWZONE = 32, // 신규존에서는 생성 할수 없음
NOT_LIMIT_LEVEL = 33 // 80 레벨 미만 일 경우.
};
unsigned long m_dwSender; // 사용자 아이디
unsigned long m_dwRecver; // 대상자 아이디
Item::ItemPos m_itemPos; // 사용 아이템 위치
unsigned char m_cRemainItemNum; // 남은 아이템 개수. 서버->클라이언트로 보내는 패킷일 경우에만 의미 있음.
};
// 오브젝트 던지기 ( 응답 필요 )
struct PktCO : public PktBase
{
CastObject m_sCastObject;
unsigned long m_dwSenderID; // 던지는 사람
unsigned long m_dwReceiverID; // 받는 사람
};
// 오브젝트 던지기 (Cast Object)
struct PktCOInfo : public PktBase
{
CastObject m_sCastObject;
unsigned long m_dwSenderID; // 던지는 사람
unsigned long m_dwReceiverID; // 받는 사람
};
// 소켓 설치
struct PktIS : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
Item::ItemPos m_equipPos; // 장비 위치
Item::ItemPos m_gemPos; // 보석 위치
};
// 소켓 설치 Ack (+ 소켓이 설치된 장비 아이템)
struct PktISAck : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
Item::ItemPos m_equipPos; // 장비 위치
Item::ItemPos m_gemPos; // 보석 위치
unsigned char m_cSize; // 아이템 크기
};
// 룬 설치/제거.
struct PktIRS : public PktBase
{
enum
{
RUNE_INSTALL = 0x02,
RUNE_UNINSTALL = 0x03,
};
unsigned long m_dwCharID; // 캐릭터 아이디.
Item::ItemPos m_equipPos; // 장비 위치.
Item::ItemPos m_runePos; // 룬 위치.
unsigned char m_cType; // 패킷 타입(설치/제거).
};
// 룬 설치/제거 Ack.
struct PktIRSAck : public PktBase
{
enum
{
RUNE_INSTALL = 0x02,
RUNE_UNINSTALL = 0x03,
};
unsigned long m_dwCharID; // 캐릭터 아이디
Item::ItemPos m_equipPos; // 장비 위치.
Item::ItemPos m_runePos; // 룬 위치.
unsigned char m_cSize; // 아이템 크기.
unsigned char m_cType; // 패킷 타입(설치/제거).
};
// 아이템 합성
struct PktItemChemical : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
Item::ItemPos m_pickkingPos; // 들고 있는 아이템 위치
Item::ItemPos m_targetPos; // 합성 대상 아이템 위치
unsigned char m_cPickkingNum; // 들고 있는 아이템 갯수
};
// 아이템 합성 Ack
struct PktItemChemicalAck : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
Item::ItemPos m_pickkingPos; // 들고 있는 아이템 위치
Item::ItemPos m_targetPos; // 합성 대상 아이템 위치
unsigned short m_wPickkingID; // 들고 있는 아이템 아이디
unsigned char m_cPickkingNum; // 들고 있는 아이템의 남은 갯수
unsigned char m_cResultSize; // 합성 결과물 크기
};
// 업그레이드 아이템
struct PktUgI : public PktBase
{
unsigned long m_dwNPCID; // 대장장이 NPC 아이디
};
// 업그레이드 아이템 Ack (+ 아이템 구조체)
struct PktUgIAck : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned long m_dwCurrentGold; // 현재 인벤토리에 남은 금액, 에러시 의미 없음
unsigned char m_cCurrentMineralNum; // 현재 남은 광물 갯수, 에러시 의미 없음.
unsigned char m_cValue; // 업그레이드 추가 스텟
unsigned char m_cSize; // 장비 아이템 크기
};
// 아이템 옵션 이식
struct PktItemOptionGraft : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned char m_cAttributeType; // 이식할 옵션 종류
};
// 아이템 옵션 이식 Ack (+ 아이템 구조체)
struct PktItemOptionGraftAck : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
unsigned long m_dwGold; // 남은 금액
unsigned char m_cSize; // 결과 아이템 크기
};
// 아이템 보상 판매
struct PktItemCompensation : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
};
// 아이템 스플릿 요청 (응답 필요)
struct PktSplt : public PktBase
{
unsigned long m_dwCharID; // 캐릭터 아이디
TakeType m_TakeType; // 아이템 집기 구조체
// ( Src : 나눌 아이템, Dst : 나누어서 놓을 자리(항상 비어 있어야 함),
// Num : 나눌 아이템 갯수)
};
// 아이템 스플릿 Ack (응답 필요) (+ 가변길이 아이템 구조체 (나누어서 생긴 아이템 정보))
struct PktSpItAck : public PktBase
{
enum PktSpltAckError
{
SERVER_ERROR = 1,
FAIL_SPLIT = 2
};
unsigned long m_dwCharID; // 캐릭터 아이디
TakeType m_TakeType; // 아이템 집기 구조체
unsigned char m_cSize; // 아이템 크기
};
// 퀵 슬롯 이동 (응답 필요)
struct PktQSM : public PktBase
{
enum PktQSMError
{
SERVER_ERROR = 1,
FAIL_MOVE = 2
};
TakeType m_TakeType;
unsigned short m_usSkillID;
unsigned char m_cLockCount;
unsigned char m_cSkillLevel;
};
// 스위치 장비
struct PktSwEQ : public PktBase
{
unsigned char m_cType; // 0 : 핸드, 1 : 말
unsigned char m_cSelect; // 선택 핸드 ( 1 = 무기1 & 방패1, 2 = 무기2 & 방패2 )
};
// 교환 명령
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
{
FAIL_EXCHANGING_CHAR = 2, // 다른 캐릭터와 교환중인 캐릭터에게 교환 신청
FAIL_NOT_ALL_OK = 3, // 양쪽 모두 확인하지 않은 상태에서 거래 성립
FAIL_REJECT = 4, // 거부 옵션이 켜진 상태
FAIL_EXCHANGING_ID = 5 // 수락했을때와 거래성립때에 아이디가 틀릴경우.
};
unsigned long m_dwSenderID; // 보낸이 아이디
unsigned long m_dwRecverID; // 받는이 아이디
unsigned char m_cCmd; // 명령
};
// 교환 아이템 (+ 아이템 구조체)
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를 한다.
struct PktDepositUpdateDB : public PktDD
{
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 PktDD
{
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
{
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];
};
// 복권 결과
struct PktLotteryResult : public PktBase
{
enum PktLRErr
{
FAIL_BLANK = 2 // 존재하지 않는 상품
};
unsigned long m_dwCharID;
unsigned long m_dwSize;
Item::ItemPos m_itemPos;
};
#pragma pack()
#endif