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

1082 lines
36 KiB
C++

#ifndef _CASTLE_PACKET_H_
#define _CASTLE_PACKET_H_
#include <algorithm>
#include <Network/Packet/PacketBase.h>
#include <Network/Packet/PacketStruct/CharMovePacket.h>
#include <DB/DBDefine.h>
#include <Item/ItemStructure.h>
#include <Castle/CastleConstants.h>
#include <Creature/Siege/SiegeConstants.h>
#include <Community/Guild/GuildConstants.h>
#pragma pack(1)
using namespace Castle;
using namespace Siege;
// 성 관리 권한
struct CastleRight
{
enum Index
{
CONTROL_CASTLE_EMBLEM = 0, // 성 상징물 관리
CONTROL_CASTLE_GATE = 1, // 성문 관리
USE_CASTLE_GATE = 2, // 성문 이용
CONTROL_CASTLE_ARMS = 3, // 병기 관리
USE_CASTLE_ARMS = 4, // 병기 이용
MAX_RIGHT_NUM = 10
};
unsigned char m_aryCastleRight[MAX_RIGHT_NUM];
CastleRight()
{
std::fill_n(&m_aryCastleRight[0], int(MAX_RIGHT_NUM), Guild::COMMON);
};
bool Check(unsigned char cRightType, unsigned char cTitle)
{
return (m_aryCastleRight[cRightType] >= cTitle);
}
};
// 길드 요새 관리 권한
struct CampRight
{
enum Index
{
CAMP_CONTROL = 0, // 길드 요새 관리 권한
MAX_RIGHT_NUM = 10
};
unsigned char m_aryCampRight[MAX_RIGHT_NUM];
CampRight()
{
std::fill_n(&m_aryCampRight[0], int(MAX_RIGHT_NUM), Guild::MASTER);
}
bool Check(unsigned char cRightType, unsigned char cTitle)
{
return (m_aryCampRight[cRightType] >= cTitle);
}
};
// 성 정보 DB 데이터
struct CastleInfoDB
{
unsigned long m_dwCastleID; // Castle ID
unsigned char m_cNation; // 소유 국가
unsigned char m_cZone; // 존 번호
unsigned char m_cChannel; // 채널 번호
unsigned char m_cNameID; // 성 이름 ID
unsigned char m_cSiegeCount; // 공성 횟수 (임시 세금 -> 누적 세금으로 옮길때 사용)
unsigned char m_cInvincibleCount; // 무적 횟수
unsigned short m_wTotalSiegeCount; // 누적 공성 횟수
unsigned long m_dwTotalTaxMoney; // 누적 세금 회수량
char m_szRight[CastleRight::MAX_RIGHT_NUM]; // 길드원들의 성 관리 권한
POS m_InPos; // 뒷문 사용시 성안으로 이동될 위치
POS m_OutPos; // 뒷문 사용시 성밖으로 이동될 위치
unsigned short m_wItemID; // 업그레이드에 사용할 보석 아이템 아이디
unsigned char m_cItemNum; // 업그레이드에 사용할 보석 아이템 갯수
};
// 성의 세율 및 세금 DB 데이터
struct CastleTaxInfoDB
{
unsigned long m_dwCastleID; // Castle ID
unsigned char m_cTaxType; // 종류 (구매/판매, 수리, 재련, 요새 Gold, 요새 광물)
unsigned char m_cTax; // 세율
unsigned long m_dwTempTaxMoney; // 임시 세금
unsigned long m_dwTaxMoney; // 세금
unsigned char m_cTaxChangable; // 세율 변경 가능 여부
};
// 성의 광물 세금 데이터
struct CastleMineralInfoDB
{
unsigned long m_dwCastleID; // Castle ID
unsigned short m_wMineralID; // 광물 Item ID
unsigned short m_wAmount; // 양
unsigned char m_cFlag; // 누적 or 임시 체크 플래그
};
// 성 관련 오브젝트 DB 데이터
struct CastleObjectInfoDB
{
unsigned long m_dwCID;
unsigned long m_dwCastleID; // CastleID : 성 상징물, 성문, 뒷문, 가드, 근거리/원거리 수성병기
unsigned long m_dwOwnerID; // 근거리/원거리 수성병기의 소유자 CID
unsigned long m_dwHP; // HP
unsigned short m_wObjectType; // 성 오브젝트 타입 ( 성 상징물, 성문, 뒷문, 가드, 근거리/원거리 수성병기)
float m_fDefaultDir; // 성 오브젝트의 기본 방향
unsigned char m_cState; // 현재 오브젝트의 상태
unsigned char m_cSubState; // 현재 오브젝트의 서브 상태 (Use EMBLEM & GATE)
unsigned char m_cUpgradeStep; // 현재 오브젝트의 업그레이드 단계 (Except GUARD)
unsigned char m_cUpgradeType; // 성 상징물의 업그레이드 타입 (Only EMBLEM)
TIME m_RemainUpTime; // 각종 남은 시간 저장 변수
TIME m_LastUseTime; // 마지막 사용 시간
POS m_Pos; // 위치
};
// 요새 오브젝트 DB 데이터
struct CampInfoDB
{
unsigned long m_dwCampID; // CampID
unsigned long m_dwGID; // 소유 Guild ID
unsigned long m_dwHP; // HP
unsigned char m_cZone; // 존
unsigned char m_cChannel; // 채널 정보
unsigned short m_wObjectType; // 요새 오브젝트 타입 ( 요새, 채굴기, 상점, 월드웨폰 )
unsigned char m_cState; // 길드 요새 상태
unsigned char m_cSubState; // 길드 요새 서브 상태 ( 채굴기의 On/Off/Ready 상태 )
unsigned char m_cUpgradeStep; // 업그레이드 단계
TIME m_TimeValue; // 구축시까지 남은 시간
TIME m_LastUseTime; // 마지막으로 사용한 시간
char m_szRight[CampRight::MAX_RIGHT_NUM]; // 길드원들의 길드 요새 관리 권한
POS m_Pos; // 위치
unsigned char m_cMaterial; // 공성용 자재 갯수
unsigned char m_cSiegeCount; // 공성이 지나간 횟수
};
// 채굴기의 광물 정보 DB 데이터
struct CampMineralInfoDB
{
unsigned long m_dwCampID; // CampID
unsigned short m_wMineralID; // 광물 Item ID
unsigned short m_wAmount; // 양
unsigned char m_cFlag; // 누적 or 임시 체크 플래그
};
// 지력 정보 DB 데이터
struct FertilityInfoDB
{
unsigned long m_dwVeinColor; // 광맥 색상
unsigned long m_dwFertility; // 현재 지력
unsigned char m_cZone; // 존 번호
unsigned char m_cChannel; // 채널 번호
};
// 게임 시간 DB 데이터
struct GameTimeDB
{
unsigned char m_cGuildTime; // 길드 전쟁 시간 정보
unsigned char m_cRealmTime; // 국가 전쟁 시간 정보
unsigned char m_cSiegeTime; // 공성전 시간 정보
unsigned char m_cMiningTime; // 임시 채굴기 시간 정보
unsigned char m_cEnterTime; // 테섭용 신규존 진입제한 플래그
unsigned char m_cEventTime; // 이벤트 타임
};
// 길드 요새 상점 정보 DB 테이터
struct CampShopInfoDB
{
enum
{
MAX_CONTAINER_SIZE = 7995 // m_dwTotalSize + m_cItemNum + m_aryItemContainer = 8000
};
unsigned long m_dwCampID; // 길드 요새 ID
unsigned long m_dwTotalSize; // 아이템 사이즈 (아이템 버퍼 + 가격)
unsigned char m_cItemNum; // 아이템 갯수
unsigned char m_aryItemContainer[MAX_CONTAINER_SIZE]; // 판매중인 아이템 목록
unsigned long m_dwTempSafe; // 임시 금고
unsigned char m_cTax; // 세율
};
// 월드 웨폰 정보 DB 데이터
struct WorldWeaponInfoDB
{
unsigned char m_cZone; // 존 번호
unsigned char m_cChannel; // 채널 번호
unsigned char m_cKarRemainSiegeTime; // 카르테란트 월드 웨폰이 부서지고난 후 지나야할 공성 시간
unsigned char m_cMerRemainSiegeTime; // 메르카디아 월드 웨폰이 부서지고난 후 지나야할 공성 시간
};
// 국가 전쟁 석상 정보 DB 데이터
struct StatueInfoDB
{
unsigned long m_dwIndex; // 석상 인덱스 (존에 배치한 숫자만큼 존재)
unsigned char m_cChannel; // 채널
unsigned short m_wKID; // 현재 석상의 상태 (KID 로 상태 판별)
unsigned long m_dwLostHP; // 석상의 깍인 HP 정보
};
// 성 정보 (DBAgentServer -> GameServer)
// 가변 정보 : + CastleInfoDB
// + CastleTaxInfo * Castle::MAX_TAX_TYPE
// + CastleMineralInfo + CastleMineral * ( m_cAccumulatedNum + m_cTemporaryNum )
// + CastleObjectInfo * m_cCastleObjectNum
struct PktCastleInfo : public PktBase
{
bool m_bStartFlag; // 처음 정보인가?
unsigned char m_cCastleObjectNum; // 성 관련 오브젝트 수
unsigned short m_wSize; // 성 정보 크기
};
struct CastleTaxInfo
{
unsigned char m_cTaxType; // 종류 (구매/판매, 수리, 재련, 요새 Gold, 요새 광물)
unsigned char m_cTax; // 세율
unsigned long m_dwTempTaxMoney; // 임시 세금
unsigned long m_dwTaxMoney; // 세금
unsigned char m_cTaxChangable; // 세율 변경 가능 여부
};
struct CastleMineral
{
unsigned short m_wMineralID; // 광물 Item ID
unsigned short m_wAmount; // 광물 갯수
};
struct CastleMineralInfo
{
unsigned char m_cAccumulatedNum; // 누적 보관된 광물의 갯수
unsigned char m_cTemporaryNum; // 임시 보관된 광물의 갯수
unsigned short m_wSize; // 광물 정보 크기
};
struct CastleObjectInfo
{
unsigned long m_dwCID; // CID
unsigned long m_dwCastleID; // CastleID : 성 상징물, 성문, 뒷문, 가드, 근거리/원거리 수성병기
unsigned long m_dwOwnerID; // 근거리/원거리 수성 병기의 소유자 CID
unsigned char m_cNation; // 국가
unsigned long m_dwHP; // HP
unsigned short m_wObjectType; // 성 오브젝트 타입 ( 성 상징물, 성문, 뒷문, 가드, 근거리/원거리 수성병기)
float m_fDefaultDir; // 성 오브젝트의 기본 방향
unsigned char m_cState; // 현재 오브젝트의 상태
unsigned char m_cSubState; // 현재 오브젝트의 서브 상태 (Use EMBLEM & GATE)
unsigned char m_cUpgradeStep; // 현재 오브젝트의 업그레이드 단계 (Except GUARD)
unsigned char m_cUpgradeType; // 성 상징물의 업그레이드 타입 (Only EMBLEM)
POS m_Pos; // 위치
};
// 세금 이동 정보 패킷
// DBAgentServer -> GameServer -> Client : 임시 세금 -> 누적 세금으로 이동
// GameServer -> DBAgentServer -> DB : 임시 세금 정보 업데이트
typedef struct PktCastleTaxMove* LPPktCastleTaxMove;
struct PktCastleTaxMove : public PktBase
{
unsigned long m_dwCastleID; // 성 ID
unsigned long m_dwMoveTempMoney[ Castle::MAX_TAX_TYPE ]; // 누적 세금으로 이동한 임시 세금 액수, 업데이트 될 임시 세금 정보
unsigned long m_dwResultTaxMoney[ Castle::MAX_TAX_TYPE ]; // 임시 세금이 이동된 후의 누적 세금 액수
};
// 성의 광물 세금 정보 패킷
// 가변 정보 : + CastleMineral * m_cNum
typedef struct PktCastleMineralInfo* LPPktCastleMineralInfo;
struct PktCastleMineralInfo : public PktBase
{
unsigned long m_dwCastleID; // 성 ID
unsigned char m_cMineralType; // 광물 타입 (누적, 임시)
unsigned char m_cNum; // 광물 수
unsigned short m_wSize; // 광물 정보 크기
};
// 성의 공성 횟수 정보 패킷
typedef struct PktCastleSiegeCount* LPPktCastleSiegeCount;
struct PktCastleSiegeCount : public PktBase
{
unsigned long m_dwCastleID; // 성 ID
unsigned char m_cSiegeCount; // 공성 횟수 (임시 세금 -> 누적 세금)
unsigned char m_cInvincibleCount; // 남은 무적 공성 횟수
unsigned short m_wTotalSiegeCount; // 누적 공성 횟수
};
// 국가 전쟁 석상 정보 구조체
struct StatueInfo
{
unsigned long m_dwIndex;
unsigned short m_wKID;
unsigned long m_dwLostHP;
};
// 국가 전쟁 석상 디스플레이 정보 구조체
struct StatueDisplayInfo
{
unsigned long m_dwIndex;
unsigned long m_dwKID;
unsigned char m_cNation;
bool m_bSummoning;
bool m_bAttacked;
POS m_Pos;
};
// 국가 전쟁 석상 정보 패킷 (DBAgentServer <-> GameServer / GameServer -> Client)
// 가변 정보 :
// wSubCmd : CMD_INFO + StatueInfo * 석상 수
// : CMD_UPDATE_LOST_HP + StatueInfo
// : CMD_UPDATE_KID + StatueInfo
// : CMD_DISPLAY_INFO + StatueDisplayInfo * 석상 수 (클라이언트 처음 로그인시)
// + StatueDisplayInfo (석상 정보 변경시)
typedef struct PktStatueCmd* LPPktStatueCmd;
struct PktStatueCmd : public PktBase
{
enum SubCmd
{
CMD_INFO = 0, // DBAgentServer -> GameServer
CMD_UPDATE_LOST_HP = 1, // GameServer -> DBAgentServer
CMD_UPDATE_KID = 2, // GameServer -> DBAgentServer
CMD_DISPLAY_INFO = 3 // GameServer -> Client
};
enum Const
{
MAX_STATUE_NUM = 16
};
unsigned short m_wSubCmd;
unsigned short m_wSize; // INFO : 가변 버퍼 사이즈 / LOST_HP : sizeof(StatueInfo) / KID : sizeof(StatueInfo) / DISPLAY_INFO : 가변 버퍼 사이즈
unsigned long m_dwValue; // INFO : 석상 수 / LOST_HP : Channel / KID : Channel / DISPLAY_INFO : 석상 수
};
// 길드 요새 정보 (DBAgentServer -> GameServer)
// 가변 정보 : 채굴기 - CampInfoDB + MiningCampInfo + CampMineralInfo * (m_cAccumulatedNum + m_cTemporaryNum)
// 상점 - CampInfoDB + CampShopInfo + 아이템 버퍼
// 월드웨폰 -
struct PktCampInfo : public PktBase
{
bool m_bStartFlag; // 처음 정보인가?
unsigned long m_dwCID; // 요새의 CID
unsigned short m_wSize; // 요새 정보 크기
};
struct MiningCampInfo
{
unsigned char m_cAccumulatedNum; // 누적 보관된 광물의 갯수
unsigned char m_cTemporaryNum; // 임시 보관된 광물의 갯수
unsigned short m_wSize; // 광물 정보 크기
};
struct CampMineralInfo
{
unsigned short m_wMineralID; // 광물 Item ID
unsigned short m_wAmount; // 광물 갯수
};
struct CampShopInfo
{
unsigned long m_dwTempSafe; // 임시 금고
unsigned char m_cTax; // 세율
unsigned long m_dwBufferSize; // 아이템 버퍼 사이즈
unsigned char m_cItemNum; // 아이템 갯수
};
// 월드 웨폰 정보 전송 (DBAgentServer -> GameServer)
struct PktWorldWeaponInfo : public PktBase
{
unsigned char m_cKarRemainSiegeTime; // 카르테란트 국가의 월드 웨폰이 부서진후 지나야할 공성 시간
unsigned char m_cMerRemainSiegeTime; // 메르카디아 국가의 월드 웨폰이 부서진후 지나야할 공성 시간
};
// 지력 정보
// 가변 정보 (DBAgentServer -> GameServer) : + (dwVeinColor + dwFertility) * m_wNum
// 가변 정보 (GameServer -> DBAgentServer) : + ZoneChannelInfo + (dwVeinColor + dwFertility) * m_wNum
struct PktFertilityInfo : public PktBase
{
unsigned short m_wNum; // 광맥 갯수
unsigned short m_wSize; // 지력 정보 크기
};
// 길드 요새 상점 정보 (+ 아이템 버퍼)
struct PktCampShopInfo : public PktBase
{
unsigned long m_dwCampID; // 길드 요새 ID
CampShopInfo m_CampShopInfo; // 길드 요새 상점 정보
};
struct ZoneChannelInfo
{
unsigned char m_cZone;
unsigned char m_cChannel;
};
// 현재 누적된 채굴기 광물량 확인 패킷
// 가변 정보 : + CampMineralInfo * m_cNum
typedef struct PktMiningCampMineralInfo* LPPktMiningCampMineralInfo;
struct PktMiningCampMineralInfo : public PktBase
{
unsigned long m_dwCampID; // 채굴기 요새 ID
unsigned long m_dwRemainTime; // 남은 시간 (단위: 일)
unsigned char m_cState; // 현재 상태
unsigned char m_cMineralType; // 광물 타입 (누적, 임시)
unsigned char m_cNum; // 광물 수
unsigned short m_wSize; // 광물 정보 크기
};
// 채굴기 프로세스 실행 패킷
typedef struct PktProcessMining* LPPktProcessMining;
struct PktProcessMining : public PktBase
{
enum
{
TEMPORARY_PROCESS = 1,
ACCUMULATED_PROCESS = 2
};
unsigned long m_dwProcessType; // 임시 채굴 프로세스인지, 누적 채굴 프로세스인지
};
// 성 생성 (GameServer -> Client)
// 성의 광물 정보는 필요할때 서버에서 보내준다.
typedef struct PktCreateCastle* LPPktCreateCastle;
struct PktCreateCastle : public PktBase
{
unsigned long m_dwCastleID; // CastleID
unsigned char m_cNation; // 소유 국가
unsigned char m_cZone; // 존 번호
unsigned char m_cNameID; // 성 이름 ID
unsigned char m_cUpgradeStep; // 성 상징물 업그레이드 단계
unsigned char m_cInvincibleCount; // 무적 횟수
unsigned short m_wTotalSiegeCount; // 누적 공성 횟수
unsigned long m_dwTotalTaxMoney; // 누적 세금 회수량
float m_fPosX ; // 성의 위치
float m_fPosY ;
float m_fPosZ ;
unsigned short m_wItemID; // 업그레이드에 사용할 보석 아이템 ID
unsigned char m_cItemNum[Castle::EMBLEM_UPGRADE_JEWEL_POS_NUM]; // 업그레이드에 사용할 보석 아이템 갯수
CastleRight m_CastleRight; // 길드원들의 성 관리 권한
CastleTaxInfo m_CastleTax[Castle::MAX_TAX_TYPE]; // 성 세율/세금 정보
};
// 길드 요새 생성 (GameServer -> Client, GameServer -> DBAgentServer)
typedef struct PktCreateCamp* LPPktCreateCamp;
struct PktCreateCamp : public PktBase
{
enum Error
{
ERROR_EXIST_ANOTHER_WEAPON = 2, // 이미 월드 웨폰이 존재할 경우
};
unsigned long m_dwActorCID; // 요새 생성을 요청한 캐릭터의 CID
unsigned long m_dwCID; // CID
unsigned long m_dwCampID; // CampID
unsigned long m_dwGID; // 소유 Guild ID
unsigned long m_dwHP; // HP
unsigned short m_wObjectType; // 길드 요새 타입
unsigned char m_cZone; // 존 번호 (GameServer -> DBAgentServer 에서 사용)
unsigned char m_cChannel; // 채널 번호 (GameServer -> DBAgentServer 에서 사용)
unsigned char m_cState; // 길드 요새 상태
unsigned char m_cSubState; // 길드 요새 서브 상태
unsigned char m_cUpgradeStep; // 업그레이드 단계
unsigned char m_cNation; // 캠프 국적 (길드 국적 : 클라이언트에 길드 정보가 없을때를 위해서)
CampRight m_CampRight; // 길드 요새 관리 권한
POS m_Pos; // 위치
unsigned char m_cMaterial; // 공성용 자재 갯수
};
// 공성 병기 생성 (GameServer -> Client, GameServer -> DBAgentServer)
typedef struct PktCreateSiegeArms* LPPktCreateSiegeArms;
struct PktCreateSiegeArms : public PktBase
{
unsigned long m_dwCID; // CID (공성 병기 ID)
unsigned long m_dwOwnerID; // 공성 병기 주인 CID
unsigned short m_wObjectType; // 공성 병기 타입
unsigned char m_cNation; // 공성 병기 소유주의 국가
unsigned long m_dwHP; // HP
unsigned char m_cZone; // 존 번호 (GameServer -> DBAgentServer 에서 사용)
unsigned char m_cChannel; // 채널 번호 (GameServer -> DBAgentServer 에서 사용)
unsigned char m_cState; // 공성 병기 상태
unsigned char m_cUpgradeStep; // 공성 병기 업그레이드 단계
POS m_Pos; // 위치
};
// 길드 요새 관련 명령 패킷 ( Client <-> GameServer <-> DBAgentServer )
typedef struct PktCampCmd* LPPktCampCmd;
struct PktCampCmd : public PktBase
{
enum SubCmd
{
CAMP_NO_CMD = 0,
// 길드 요새 기본 명령
CAMP_BUILD = 1, // 길드 요새 구축 (사용 안함, 스타트킷 아이템으로 사용)
CAMP_BUILD_COMPLETE = 2, // 길드 요새 구축 완료
CAMP_CANCEL = 3, // 길드 요새 구축 해제
CAMP_CANCEL_COMPLETE = 4, // 길드 요새 구축 해제 완료
CAMP_UPGRADE = 5, // 길드 요새 업그레이드
CAMP_UPGRADE_COMPLETE = 6, // 길드 요새 업그레이드 완료
CAMP_REPAIR = 7, // 길드 요새 수리
CAMP_REPAIR_COMPLETE = 8, // 지지 수리 완료
CAMP_TO_STARTKIT = 9, // 스타트킷으로
CAMP_TO_STARTKIT_COMPLETE = 10, // 스타트킷으로 완료
CAMP_CHANGE_TYPE = 11, // 길드 요새 타입 변형
CAMP_CHANGE_COMPLETE = 12, // 길드 요새 타입 변형 완료
CAMP_DESTROY = 13, // 길드 요새 파괴시 / 7일간 캠프 미사용시 파괴
CAMP_CARE = 14, // 손질하기
CAMP_UPDATE_HP = 15, // HP 정보를 업데이트 (게임 서버의 HP 정보로 업데이트)
// 채굴기 전용 명령
MINING_CAMP_SHOW_MINERAL = 16, // 누적 광물 확인
MINING_CAMP_ON_OFF = 17, // 채굴기 켜기 / 끄기 ( dwValue1 : On / Off )
MINING_CAMP_GAIN_MINERAL = 18, // 광물 획득 ( dwValue1 : 광물 Index, dwValue2 : 획득량 )
// 상점 전용 명령
CAMP_SHOP_CHANGE_TAX = 19, // 세율 변경
CAMP_SHOP_GAIN_TAX = 20, // 수익금 획득
// 월드웨폰 전용 명령
WORLDWEAPON_CHARGE = 21, // 무기 장전
WORLDWEAPON_CHARGE_COMPLETE = 22, // 무기 장전 완료
WORLDWEAPON_FIRE = 23, // 무기 발사
WORLDWEAPON_FIRE_COMPLETE = 24, // 무기 발사 완료
CAMP_NOT_REBUILDTIME = 25 // 길드 요새 파괴 후 다시 구축할 수 있는 시간이 지나지 않았을 경우.
};
enum Error
{
FAIL_NOT_EXIST_GUILD = 2, // 존재 하지 않는 길드
FAIL_NOT_EXIST_CAMP = 3, // 존재 하지 않는 성
FAIL_NOT_CAMP = 4, // 진지가 아님
FAIL_CAMP_STATE = 5, // 길드 요새 상태가 이상함
FAIL_DIFFERENT_GUILD = 6, // 길드 아이디가 다름
FAIL_NOT_MASTER = 7, // 길드 마스터가 아님
FAIL_CAMP_RIGHT = 8, // 길드 요새 권한 없음
FAIL_NOT_ENOUGH_MATERIAL = 9, // 자재 부족
FAIL_DIFFERENT_GOLD = 10, // 클라이언트와 서버의 돈이 다름
FAIL_NOT_ENOUGH_GOLD = 11, // 길드에 돈이 부족
FAIL_NOT_MINING_CAMP = 12, // 채굴기가 아님 (채굴기로 캐스팅 실패)
FAIL_NOT_COMPLETE_STATE = 13, // 완료상태(보통상태)가 아닙니다.
FAIL_NOW_MINING = 14, // 채굴중입니다.
FAIL_UPGRADE_STEP = 15, // 업그레이드 단계가 부족합니다.
FAIL_NOT_ENOUGH_MINERAL = 16, // 광물수가 부족합니다.
FAIL_NOT_CAMP_SHOP = 17, // 길드 요새 상점이 아닙니다.
FAIL_NOT_ZERO_CUSTOMER = 18, // 입장객이 있을 때는 세율을 변경할 수 없습니다.
FAIL_TOO_MANY_TAX = 19, // 세율이 최대치를 초과하였습니다.
FAIL_NOT_WORLDWEAPON = 20, // 월드 웨폰이 아닙니다.
FAIL_NOT_EMPTY_WEAPON = 21, // 월드 웨폰의 무기가 비어 있지 않습니다. (장전중, 장전됨, 발사중)
FAIL_NOT_READY_WEAPON = 22, // 월드 웨폰의 무기가 준비 되어 있지 않습니다. (비어있음, 장전중, 발사중)
FAIL_NOW_CHARGING = 23, // 월드 웨폰 무기 장전중입니다.
FAIL_NOW_FIRING = 24, // 월드 웨폰 무기 발사중입니다.
FAIL_MAX_UPGRADE = 25, // 업그레이드 Max 입니다.
FAIL_HAS_MINERAL = 26, // 채굴기 타입을 변형하려 할때 광물이 남아 있을 경우
FAIL_HAS_ITEM = 27 // 상점 타입을 변형하려 할때 아이템이 남아 있을 경우
};
unsigned long m_dwCID; // Client -> GameServer : 보낸 사람 CID GameServer -> DBAgentServer : 보낸 사람 CID 혹은 0
// Client <- GameServer : 길드 요새 CID GameServer <- DBAgentServer : 길드 요새 CID
unsigned long m_dwCampID;
unsigned char m_cState;
unsigned long m_dwValue1;
unsigned long m_dwValue2;
unsigned char m_cSubCmd;
};
// 성 관련 명령 패킷 ( Client <-> GameServer <-> DBAgentServer )
typedef struct PktCastleCmd* LPPktCastleCmd;
struct PktCastleCmd : public PktBase
{
enum SubCmd
{
CASTLE_NO_CMD = 0,
// 상징물 관련 명령
CASTLE_SET_TAX = 1, // 세율 조정
// CASTLE_SET_RIGHT = 2, // 권한 설정 (따로 패킷 만들어서 보냄)
CASTLE_UPGRADE_EMBLEM = 3, // 상징물 업그레이드
CASTLE_UPGRADE_EMBLEM_COMPLETE = 4, // 상징물 업그레이드 완료
CASTLE_UPGRADE_ITEM_INFO = 5, // 성 상징물 업그레이드 보석 정보 (GameServer --> DBAgentServer)
CASTLE_UPDATE_EMBLEM = 6, // 상징물 부서짐
CASTLE_SUMMON_EMBLEM_COMPLETE = 7, // 상징물 소환 완료
CASTLE_CHANGE_MASTER = 8, // 성주 변경
CASTLE_TAKE_TAXMONEY = 9, // 세금 회수
CASTLE_LOSE_OWNERSHIP = 10, // 길드 파괴등으로 성주 없어짐
CASTLE_SHOW_MINERAL = 11, // 누적 광물 세금 정보 요청
CASTLE_GAIN_MINERAL = 12, // 광물 획득 ( dwValue1 : 광물ID, dwValue2 : 획득량 )
// 성문/뒷문 관련 명령
CASTLE_GATE_OPEN = 13, // 성문 열기
CASTLE_GATE_CLOSE = 14, // 성문 닫기
CASTLE_GATE_PROTECT = 15, // 성문 막기
CASTLE_GATE_PROTECT_CANCEL = 16, // 성문 막기 해제
CASTLE_GATE_PROTECT_INFO = 17, // 성문 막기 정보
CASTLE_UPGRADE_GATE = 18, // 성문 업그레이드
CASTLE_UPGRADE_GATE_COMPLETE = 19, // 성문 업그레이드 완료
CASTLE_REPAIR_GATE = 20, // 성문 수리
CASTLE_REPAIR_GATE_COMPLETE = 21, // 성문 수리 완료
CASTLE_RESTORE_GATE = 22, // 성문 복구
CASTLE_RESTORE_GATE_COMPLETE = 23, // 성문 복구 완료
CASTLE_DESTROY_GATE = 24, // 성문 파괴
CASTLE_BACKDOOR = 25, // 뒷문 사용
// 수성 병기 관련 명령
CASTLE_CREATE_ARMS = 26, // 수성 병기 개발
CASTLE_CREATE_ARMS_COMPLETE = 27, // 수성 병기 개발 완료
CASTLE_RIDE_ARMS = 28, // 수성 병기 탑승
CASTLE_GETOFF_ARMS = 29, // 수성 병기 내림
CASTLE_UPGRADE_ARMS = 30, // 수성 병기 업그레이드
CASTLE_UPGRADE_ARMS_COMPLETE = 31, // 수성 병기 업그레이드 완료
CASTLE_REPAIR_ARMS = 32, // 수성 병기 수리
CASTLE_REPAIR_ARMS_COMPLETE = 33, // 수성 병기 수리 완료
CASTLE_DESTROY_ARMS = 34, // 수성 병기 파괴
CASTLE_ARMS_CHANGE_MASTER = 35, // 수성 병기 성주 변경
// HP 업데이트
CASTLE_UPDATE_HP = 36, // HP 를 게임서버의 값으로 업데이트 (GameServer --> DBAgentServer)
// 성문 추가 기능 ( DBAgentServer -> GameServer )
CASTLE_GATE_FORCE_OPEN = 37, // 중계 서버가 성문을 강제로 열린 상태로 만든다.
CASTLE_GATE_FORCE_CLOSE = 38, // 중계 서버가 성문을 강제로 닫힌 상태로 만든다.
// 성 상징물 공격 받고 있다는 메세지 명령
CASTLE_EMBLEM_ATTACKED = 39, // 성 상징물 공격 받음
};
enum Const
{
DESTROY = 0, // 수성 병기 파괴
TO_NPC = 1, // 수성 병기를 병기 관리 NPC 로 ( 생산 비용 절반을 돌려줌 )
};
enum Error
{
FAIL_NOT_GUILD_MEMBER = 2, // 길드에 가입하지 않았습니다.
FAIL_NOT_EXIST_CASTLE = 3, // 존재 하지 않는 성
FAIL_DIFFERENT_GUILD = 4, // 길드 아이디가 다름
FAIL_NOT_EXIST_GUILD = 5, // 존재 하지 않는 길드
FAIL_CASTLE_RIGHT = 6, // 성 관련 권한이 없습니다.
FAIL_MAX_UPGRADE = 7, // 최대 업그레이드 상태임
FAIL_NOT_ENOUGH_JEWEL = 8, // 보석 갯수 부족
FAIL_JEWEL_KIND = 9, // 적절하지 않은 보석 종류
FAIL_CASTLE_OBJECT_STATE = 10, // 성 관련 오브젝트의 상태가 적절치 못할 경우
FAIL_DIFFERENT_GOLD = 11, // 클라이언트와 서버의 돈이 다름
FAIL_NOT_ENOUGH_GOLD = 12, // 금액이 부족할 경우
FAIL_ALREADY_RIDE = 13, // 병기에 탑승해 있음
FAIL_NOT_RIDE = 14, // 병기를 타고 있지 않음
FAIL_CHANGE_TAX = 15, // 세율을 변경할수 없음
FAIL_NOT_GUILD_MASTER = 16, // 길드 마스터가 아니다.
FAIL_REQUEST_TOO_MUCH_GOLD = 17, // 너무 많은 돈을 요청했습니다.
FAIL_NOT_ENOUGH_MINERAL = 18, // 너무 많은 수의 광물을 요청했습니다.
FAIL_HAS_ANOTHER_CASTLE_ARMS = 19, // 이미 다른 수성 병기를 가지고 있습니다.
FAIL_NOT_MY_CASTLE_ARMS = 20, // 자신의 수성 병기가 아닙니다.
FAIL_NOT_SIEGE_TIME = 21, // 수성 병기를 만들수 있는 시간이 아닙니다.
FAIL_HAS_ANOTHER_SIEGE_ARMS = 22, // 이미 다른 공성 병기를 가지고 있습니다.
NOT_LIMIT_LEVEL = 23, // 80 레벨 미만일 경우.
};
unsigned long m_dwCID; // 보낸 사람 CID
unsigned long m_dwCastleID; // 성 ID
unsigned long m_dwCastleObjectID; // 성 오브젝트 ID
unsigned long m_dwValue1;
unsigned long m_dwValue2;
unsigned char m_cState;
unsigned char m_cSubCmd;
};
// 성 관리 권한
typedef struct PktCastleRight* LPPktCastleRight;
struct PktCastleRight : public PktBase
{
enum eError
{
FAIL_NOT_EXIST_GUILD = 2, // 존재 하지 않는 길드
FAIL_NOT_EXIST_CASTLE = 3, // 존재 하지 않는 성
FAIL_DIFFERENT_GUILD = 4, // 길드 아이디가 다름
FAIL_NOT_MASTER = 5 // 길드 마스터가 아님
};
unsigned long m_dwCID; // 아이디 (C -> S : CID)
unsigned long m_dwCastleID;
CastleRight m_CastleRight; // 성 관리 권한
};
// 길드 요새 관리 권한
typedef struct PktCampRight* LPPktCampRight;
struct PktCampRight : public PktBase
{
enum eError
{
FAIL_NOT_EXIST_GUILD = 2, // 존재 하지 않는 길드
FAIL_NOT_EXIST_CAMP = 3, // 존재 하지 않는 길드 요새
FAIL_NOT_CAMP = 4, // 캠프가 아님
FAIL_DIFFERENT_GUILD = 5, // 길드 아이디가 다름
FAIL_CAMP_STATE = 6, // 길드 요새 상태가 이상함
FAIL_NOT_MASTER = 7 // 길드 마스터가 아님
};
unsigned long m_dwCID; // 아이디 (C -> S : CID)
unsigned long m_dwCampID;
CampRight m_CampRight; // 길드 요새 관리 권한
};
// 공성 오브젝트 자재 이동 패킷
typedef struct PktTakeMaterial* LPPktTakeMaterial;
struct PktTakeMaterial : public PktBase
{
enum SubCmd
{
SC_TAKE_IN = 1, // 길드 요새에 자재 넣기
SC_TAKE_OUT = 2 // 길드 요새에서 자재 꺼내기
};
enum eError
{
FAIL_ITEM_NUMBER = 2, // 갯수가 이상함
FAIL_NOT_EXIST_ITEMINFO = 3, // 존재하지 않는 아이템 정보 (자재 아이템 아이디 이상)
FAIL_OVER_STACK = 4, // 스택 갯수 초과
FAIL_NOT_EXIST_CAMP = 5, // 해당 요새가 존재 하지 않음
FAIL_CREATE_ITEM = 6, // 공성용 자재 생성 실패
FAIL_NOT_EXIST_ITEM = 7, // 공성용 자재가 없음
FAIL_CAMP_RIGHT = 8 // 권한 없음
};
unsigned long m_dwCID; // 행위자
unsigned long m_dwCampID; // 요새 아이디
unsigned char m_cSubCmd; // 넣기/빼기 커맨드
unsigned char m_cNum; // 갯수
Item::ItemPos m_Pos; // 아이템의 위치
};
// 성 업그레이드 보석 아이템 이동 패킷
typedef struct PktTakeCastleJewel* LPPktTakeCastleJewel;
struct PktTakeCastleJewel : public PktBase
{
enum SubCmd
{
SC_TAKE_IN = 1, // 성 상징물 업그레이드에 보석 넣기
SC_TAKE_OUT = 2 // 성 상징물 업그레이드에서 보석 꺼내기
};
enum eError
{
FAIL_NOT_EXIST_CASTLE = 2, // 존재 하지 않는 성
FAIL_NOT_EXIST_EMBLEM = 3, // 존재 하지 않는 성 상징물
FAIL_WRONG_JEWEL = 4, // 적절하지 못한 보석
FAIL_DIFFERENT_JEWEL = 5, // 다른 종류의 보석
FAIL_NOT_EXIST_ITEM_PROTOTYPE = 6, // 아이템 프로토 타입이 존재하지 않음
FAIL_OVER_STACK = 7, // 스택 오버 플러우
FAIL_NOT_EXIST_ITEM = 8, // 해당 위치에 보석 아이템이 존재하지 않음
FAIL_ITEM_NUMBER = 9, // 아이템 갯수가 이상함
FAIL_CREATE_ITEM = 10, // 보석 아이템 생성 실패
};
unsigned long m_dwCID; // 행위자
unsigned long m_dwCastleID; // 성 아이디
unsigned char m_cSubCmd; // 넣기/빼기 커맨드
unsigned short m_wItemID; // 보석 아이디
unsigned char m_cIndex; // 보석을 넣은 UI 상의 위치 (0 ~ 9)
unsigned char m_cNum; // 갯수
Item::ItemPos m_Pos; // 아이템의 위치
};
// 공성 병기 관련 명령 패킷 ( Client <-> GameServer <-> DBAgentServer )
typedef struct PktSiegeArmsCmd* LPPktSiegeArmsCmd;
struct PktSiegeArmsCmd : public PktBase
{
enum SubCmd
{
SIEGE_NO_CMD = 0,
SIEGE_CREATE_ARMS = 1, // 공성 병기 생성 (사용 안함, 스타트킷 아이템으로 사용)
SIEGE_CREATE_ARMS_COMPLETE = 2, // 공성 병기 생성 완료
SIEGE_CANCEL = 3, // 공성 병기 생성 취소 (바로됨)
SIEGE_RIDE_ARMS = 4, // 공성 병기 탑승
SIEGE_GETOFF_ARMS = 5, // 공성 병기 내림
SIEGE_REPAIR_ARMS = 6, // 공성 병기 수리
SIEGE_REPAIR_ARMS_COMPLETE = 7, // 공성 병기 수리 완료
SIEGE_TO_STARTKIT = 8, // 공성 병기를 스타트킷으로
SIEGE_TO_STARTKIT_COMPLETE = 9, // 공성 병기를 스타트킷으로 완료
SIEGE_DESTROY_ARMS = 10, // 공성 병기 파괴
// HP 업데이트
SIEGE_UPDATE_HP = 12, // HP 를 게임서버의 값으로 업데이트 (GameServer --> DBAgentServer)
};
enum Error
{
FAIL_NOT_EXIST_GUILD = 2, // 존재 하지 않는 길드
FAIL_NOT_EXIST_SIEGE_ARMS = 3, // 존재 하지 않는 공성 병기
FAIL_NOT_SIEGE_ARMS = 4, // 공성 병기가 아님
FAIL_NOT_OWNER = 5, // 병기 소유자가 아님
FAIL_SIEGE_ARMS_STATE = 6, // 공성 병기의 상태가 적절치 않음
FAIL_ALREADY_RIDE = 7, // 병기에 탑승해 있음
FAIL_NOT_RIDE = 8, // 병기를 타고 있지 않음
FAIL_RIDE_SIEGE_ARMS = 9, // 병기 탑승에 실패
FAIL_GET_OFF_SIEGE_ARMS = 10, // 병기 내리기 실패
FAIL_NOT_ENOUGH_MATERIAL = 11 // 자재 부족
};
unsigned long m_dwCID; // OwnerID 라고 보면된다.
unsigned long m_dwArmsID;
unsigned char m_cState;
unsigned long m_dwValue; // 탑승한 캐릭터 CID, 내린 캐릭터 CID, 수리시 목표 HP, 자재를 모두 돌려주는가?
unsigned char m_cSubCmd;
};
// 공성 오브젝트 브로드 캐스트
typedef struct PktSiegeBroadCast* LPPktSiegeBroadCast;
struct PktSiegeBroadCast : public PktBase
{
// CASTLE_TODO : 사용하지 않는 옛날 공성 오브젝트 브로드 캐스트 패킷
unsigned long m_dwCID;
unsigned long m_dwOwnerID; // 성, 길드 요새, 소유캐릭터 ID
unsigned long m_dwGID; // 길드 ID
unsigned long m_dwNowHP;
unsigned long m_dwMaxHP;
unsigned long m_dwRiderID[Siege::AIRSHIP_RIDER_NUM];
unsigned short m_wObjectType;
unsigned char m_cState;
unsigned char m_cSubState;
unsigned char m_cUpgradeStep;
unsigned char m_cUpgradeType;
float m_fDefaultDir;
CNetworkPos m_NetworkPos;
};
typedef struct PktSiegeBroadCast2nd* LPPktSiegeBroadCast2nd;
struct PktSiegeBroadCast2nd : public PktBase
{
// CASTLE_TODO : 사용하지 않는 옛날 공성 오브젝트 브로드 캐스트 패킷
};
typedef struct PktNewSiegeBroadCast* LPPktNewSiegeBroadCast;
struct PktNewSiegeBroadCast : public PktBase
{
unsigned long m_dwCID;
unsigned char m_cType;
};
// 게임 시간 패킷
struct TimeInfo
{
unsigned char m_cMonth;
unsigned char m_cDay;
unsigned char m_cHour;
unsigned char m_cMinute;
unsigned long m_dwTime; // DBAgentServer -> GameServer : Duration Minutes
// GameServer -> Client : Remain Seconds
};
struct GuildTimeInfo
{
bool m_bUpdated;
unsigned char m_cNowGuildTime;
TimeInfo m_TimeInfo;
};
struct RealmTimeInfo
{
bool m_bUpdated;
unsigned char m_cNowRealmTime;
TimeInfo m_TimeInfo;
};
struct SiegeTimeInfo
{
bool m_bUpdated;
unsigned char m_cNowSiegeTime;
TimeInfo m_TimeInfo;
};
struct EnterTimeInfo
{
bool m_bUpdated;
unsigned char m_cNowEnterTime;
TimeInfo m_TimeInfo;
};
struct EventTimeInfo
{
bool m_bUpdated;
unsigned char m_cNowEventTime;
TimeInfo m_TimeInfo;
};
struct CastleSiegeInfo
{
unsigned long m_dwCastleID;
bool m_bEnableSiege; // 현재 공성이 가능한가?
};
// 가변정보 : + CastleSiegeInfo * SiegeTimeInfo::m_cCastleNum
typedef struct PktGameTimeInfo* LPPktGameTimeInfo;
struct PktGameTimeInfo : public PktBase
{
unsigned char m_cType;
unsigned char m_cCastleNum;
unsigned short m_wSize;
GuildTimeInfo m_GuildTimeInfo;
RealmTimeInfo m_RealmTimeInfo;
SiegeTimeInfo m_SiegeTimeInfo;
EnterTimeInfo m_EnterTimeInfo;
EventTimeInfo m_EventTimeInfo;
};
// 스텔스 사용 가능 여부 패킷
typedef struct PktStealthInfo* LPPktStealthInfo;
struct PktStealthInfo : public PktBase
{
bool m_bUseStealth; // 스텔스를 사용할수 있는가?
};
// 성 정보 업데이트 ( DBAgentServer --> GameServer --> Client )
typedef struct PktCastleUpdate* LPPktCastleUpdate;
struct PktCastleUpdate : public PktBase
{
unsigned long m_dwCastleID; // CastleID
unsigned long m_dwGID; // 소유 Guild ID
unsigned short m_wTax; // 세율
unsigned long m_dwTaxMoney; // 세금 수입금
unsigned char m_cInvincibleDay; // 남은 무적 횟수
unsigned char m_cTaxMoneyRemainDay; // 수입금을 받기까지 남은 날 (GameServer -> Client)
CastleRight m_CastleRight; // 길드원들의 성 관리 권한
// char m_szCastleName[MAX_CASTLE_NAME_LEN]; // 성 이름
};
// 길드 요새 관련 메세지 패킷
typedef struct PktCampMessage* LPPktCampMessage;
struct PktCampMessage : public PktBase
{
enum { MAX_NAME_LEN = 16 };
enum
{
MSGCMD_ENCAMP_START = 0, // 길드 요새 구축 시작
MSGCMD_ENCAMPING, // 길드 요새 구축 중
MSGCMD_ENCAMP_END, // 길드 요새 구축 완료
MSGCMD_CANCEL_START, // 길드 요새 구축 취소
MSGCMD_CANCEL_END, // 길드 요새 구축 취소 완료
MSGCMD_REPAIR_START, // 길드 요새 수리
MSGCMD_REPAIR_END, // 길드 요새 수리 완료
MSGCMD_UPGRADE_START, // 길드 요새 업그레이드
MSGCMD_UPGRADE_END, // 길드 요새 업그레이드 완료
MSGCMD_SET_RIGHT, // 길드 요새 관리 권한 변경
MSGCMD_SELF_DESTROY_START, // 길드 요새 스스로 파괴 시작
MSGCMD_SELF_DESTROY_END, // 길드 요새 스스로 파괴 완료
MSGCMD_CHANGE_TYPE_START, // 길드 요새 타입 변형 시작
MSGCMD_CHANGE_TYPE_END, // 길드 요새 타입 변형 완료
MSGCMD_ATTACKED, // 길드 요새 공격 당함
MSGCMD_DESTROYED, // 길드 요새 파괴됨 (파괴 당함)
MSGCMD_DESTROY, // 길드 요새 파괴함 (파괴 함)
MSGCMD_MINING_END, // 채굴기 채굴 완료
MSGCMD_SHOP_GAIN_TAX, // 길드 요새 상점 세금 수익금 획득
MSGCMD_WEAPON_ENCAMP_START, // 월드 웨폰 구축 시작
MSGCMD_WEAPON_ENCAMPING, // 월드 웨폰 구축 중
MSGCMD_WEAPON_ENCAMP_END, // 월드 웨폰 구축 완료
MSGCMD_WEAPON_CANCEL_START, // 월드 웨폰 구축 취소
MSGCMD_WEAPON_CANCEL_END, // 월드 웨폰 구축 취소 완료
MSGCMD_WEAPON_REPAIR_START, // 월드 웨폰 수리
MSGCMD_WEAPON_REPAIR_END, // 월드 웨폰 수리 완료
MSGCMD_WEAPON_UPGRADE_START, // 월드 웨폰 업그레이드
MSGCMD_WEAPON_UPGRADE_END, // 월드 웨폰 업그레이드 완료
MSGCMD_WEAPON_SET_RIGHT, // 월드 웨폰 관리 권한 변경
MSGCMD_WEAPON_SELF_DESTROY_START, // 월드 웨폰 스스로 파괴 시작
MSGCMD_WEAPON_SELF_DESTROY_END, // 월드 웨폰 스스로 파괴 완료
MSGCMD_WEAPON_CHARGE_START, // 월드 웨폰 무기 장전 시작
MSGCMD_WEAPON_CHARGE_END, // 월드 웨폰 무기 장전 완료
MSGCMD_WEAPON_ATTACKED, // 월드 웨폰 공격 당함
MSGCMD_WEAPON_DESTROYED, // 월드 웨폰 파괴됨
MSGCMD_WEAPON_FIRE_WARNING, // 월드 웨폰 발사 경고
MSGCMD_TAKE_IN_MATERIAL, // 길드 요새에 자재 넣기
MSGCMD_TAKE_OUT_MATERIAL, // 길드 요새에서 자재 빼기
MSGCMD_GUILD_TIME_COMPLETE, // 길드 재정비 시간 완료.
MSGCMD_MAX_CMD
};
struct sRight
{
unsigned char m_cCampControl;
};
char m_szMasterName[MAX_NAME_LEN];
char m_szPCName[MAX_NAME_LEN];
char m_szGuildName[Guild::MAX_GUILD_NAME_LEN];
unsigned long m_dwCampID;
unsigned long m_dwGID;
unsigned char m_cZone;
unsigned char m_cMsgCmd;
unsigned char m_cRemainTime;
unsigned char m_cNation;
sRight m_Right;
bool m_bNotify;
int m_nValue1; // 명성치, 변형된 타입, 월드 웨폰 발사 X좌표, 월드웨폰을 파괴당한 국가, 공성 자재 이동 갯수
int m_nValue2; // 기존 타입, 월드 웨폰 발사 Z좌표, 공성 자재 최종 갯수
unsigned char m_cTimeChk; // 최대 256 분.
};
struct PktWarOnOff : public PktBase
{
enum Error
{
E_WAR_OFF = 2, // 전쟁 플래그를 Off 시킬수 없음
E_WAR_ON = 3, // 전쟁 플래그를 On 시킬수 없음
E_WAR_INSTANCE = 4, // 전쟁 플래그를 Instance 시킬수 없음
E_INVALID_TYPE = 5 // 존재하지 않는 전쟁 타입
};
unsigned long m_dwCID;
unsigned char m_cType; // GameTime::eTimeType
unsigned char m_cFlag; // Creature::WarFlag
};
// 국가전쟁 공헌훈장 포인트.
struct PktRealmPoint : public PktBase
{
enum
{
REALM_JOIN = 1, // 국가 전쟁에 참여 했을 경우.
REALM_OUT = 2 // 국가 전쟁에 미참여 했을 경우.
};
unsigned char m_cRealmPoint; // 공헌훈장 포인트.
unsigned long m_dwCID; // 캐릭터 CID.
unsigned char m_cType; // 참여, 미참여.
};
#pragma pack()
#endif // _CASTLE_PACKET_H_