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>
671 lines
18 KiB
C++
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 |