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>
1082 lines
36 KiB
C++
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_
|