1463 lines
30 KiB
C
1463 lines
30 KiB
C
#pragma once
|
|
#include "length.h"
|
|
|
|
typedef uint32_t IDENT;
|
|
|
|
/**
|
|
* @version 05/06/10 Bang2ni - Myshop Pricelist 관련 패킷 HEADER_XX_MYSHOP_PRICELIST_XXX 추가
|
|
*/
|
|
enum
|
|
{
|
|
HEADER_GD_LOGIN = 1,
|
|
HEADER_GD_LOGOUT = 2,
|
|
|
|
HEADER_GD_PLAYER_LOAD = 3,
|
|
HEADER_GD_PLAYER_SAVE = 4,
|
|
HEADER_GD_PLAYER_CREATE = 5,
|
|
HEADER_GD_PLAYER_DELETE = 6,
|
|
|
|
HEADER_GD_LOGIN_KEY = 7,
|
|
// 8 empty
|
|
HEADER_GD_BOOT = 9,
|
|
HEADER_GD_PLAYER_COUNT = 10,
|
|
HEADER_GD_QUEST_SAVE = 11,
|
|
HEADER_GD_SAFEBOX_LOAD = 12,
|
|
HEADER_GD_SAFEBOX_SAVE = 13,
|
|
HEADER_GD_SAFEBOX_CHANGE_SIZE = 14,
|
|
HEADER_GD_EMPIRE_SELECT = 15,
|
|
|
|
HEADER_GD_SAFEBOX_CHANGE_PASSWORD = 16,
|
|
HEADER_GD_SAFEBOX_CHANGE_PASSWORD_SECOND = 17, // Not really a packet, used internal
|
|
HEADER_GD_DIRECT_ENTER = 18,
|
|
|
|
HEADER_GD_GUILD_SKILL_UPDATE = 19,
|
|
HEADER_GD_GUILD_EXP_UPDATE = 20,
|
|
HEADER_GD_GUILD_ADD_MEMBER = 21,
|
|
HEADER_GD_GUILD_REMOVE_MEMBER = 22,
|
|
HEADER_GD_GUILD_CHANGE_GRADE = 23,
|
|
HEADER_GD_GUILD_CHANGE_MEMBER_DATA = 24,
|
|
HEADER_GD_GUILD_DISBAND = 25,
|
|
HEADER_GD_GUILD_WAR = 26,
|
|
HEADER_GD_GUILD_WAR_SCORE = 27,
|
|
HEADER_GD_GUILD_CREATE = 28,
|
|
|
|
HEADER_GD_ITEM_SAVE = 30,
|
|
HEADER_GD_ITEM_DESTROY = 31,
|
|
|
|
HEADER_GD_ADD_AFFECT = 32,
|
|
HEADER_GD_REMOVE_AFFECT = 33,
|
|
|
|
HEADER_GD_HIGHSCORE_REGISTER = 34,
|
|
HEADER_GD_ITEM_FLUSH = 35,
|
|
|
|
HEADER_GD_PARTY_CREATE = 36,
|
|
HEADER_GD_PARTY_DELETE = 37,
|
|
HEADER_GD_PARTY_ADD = 38,
|
|
HEADER_GD_PARTY_REMOVE = 39,
|
|
HEADER_GD_PARTY_STATE_CHANGE = 40,
|
|
HEADER_GD_PARTY_HEAL_USE = 41,
|
|
|
|
HEADER_GD_FLUSH_CACHE = 42,
|
|
HEADER_GD_RELOAD_PROTO = 43,
|
|
|
|
HEADER_GD_CHANGE_NAME = 44,
|
|
HEADER_GD_SMS = 45,
|
|
|
|
HEADER_GD_GUILD_CHANGE_LADDER_POINT = 46,
|
|
HEADER_GD_GUILD_USE_SKILL = 47,
|
|
|
|
HEADER_GD_REQUEST_EMPIRE_PRIV = 48,
|
|
HEADER_GD_REQUEST_GUILD_PRIV = 49,
|
|
|
|
HEADER_GD_MONEY_LOG = 50,
|
|
|
|
HEADER_GD_GUILD_DEPOSIT_MONEY = 51,
|
|
HEADER_GD_GUILD_WITHDRAW_MONEY = 52,
|
|
HEADER_GD_GUILD_WITHDRAW_MONEY_GIVE_REPLY = 53,
|
|
|
|
HEADER_GD_REQUEST_CHARACTER_PRIV = 54,
|
|
|
|
HEADER_GD_SET_EVENT_FLAG = 55,
|
|
|
|
HEADER_GD_PARTY_SET_MEMBER_LEVEL = 56,
|
|
|
|
HEADER_GD_GUILD_WAR_BET = 57,
|
|
|
|
HEADER_GD_CREATE_OBJECT = 60,
|
|
HEADER_GD_DELETE_OBJECT = 61,
|
|
HEADER_GD_UPDATE_LAND = 62,
|
|
|
|
HEADER_GD_MARRIAGE_ADD = 70,
|
|
HEADER_GD_MARRIAGE_UPDATE = 71,
|
|
HEADER_GD_MARRIAGE_REMOVE = 72,
|
|
|
|
HEADER_GD_WEDDING_REQUEST = 73,
|
|
HEADER_GD_WEDDING_READY = 74,
|
|
HEADER_GD_WEDDING_END = 75,
|
|
|
|
HEADER_GD_AUTH_LOGIN = 100,
|
|
HEADER_GD_LOGIN_BY_KEY = 101,
|
|
HEADER_GD_BILLING_EXPIRE = 104,
|
|
HEADER_GD_VCARD = 105,
|
|
HEADER_GD_BILLING_CHECK = 106,
|
|
HEADER_GD_MALL_LOAD = 107,
|
|
|
|
HEADER_GD_MYSHOP_PRICELIST_UPDATE = 108, ///< 가격정보 갱신 요청
|
|
HEADER_GD_MYSHOP_PRICELIST_REQ = 109, ///< 가격정보 리스트 요청
|
|
|
|
HEADER_GD_BLOCK_CHAT = 110,
|
|
|
|
HEADER_GD_HAMMER_OF_TOR = 114,
|
|
HEADER_GD_RELOAD_ADMIN = 115, ///<운영자 정보 요청
|
|
HEADER_GD_BREAK_MARRIAGE = 116, ///< 결혼 파기
|
|
HEADER_GD_ELECT_MONARCH = 117, ///< 군주 투표
|
|
HEADER_GD_CANDIDACY = 118, ///< 군주 등록
|
|
HEADER_GD_ADD_MONARCH_MONEY = 119, ///< 군주 돈 증가
|
|
HEADER_GD_TAKE_MONARCH_MONEY = 120, ///< 군주 돈 감소
|
|
HEADER_GD_COME_TO_VOTE = 121, ///< 표결
|
|
HEADER_GD_RMCANDIDACY = 122, ///< 후보 제거 (운영자)
|
|
HEADER_GD_SETMONARCH = 123, ///<군주설정 (운영자)
|
|
HEADER_GD_RMMONARCH = 124, ///<군주삭제
|
|
HEADER_GD_DEC_MONARCH_MONEY = 125,
|
|
|
|
HEADER_GD_CHANGE_MONARCH_LORD = 126,
|
|
HEADER_GD_BLOCK_COUNTRY_IP = 127, // 광대역 IP-Block
|
|
HEADER_GD_BLOCK_EXCEPTION = 128, // 광대역 IP-Block 예외
|
|
|
|
HEADER_GD_REQ_CHANGE_GUILD_MASTER = 129,
|
|
|
|
HEADER_GD_REQ_SPARE_ITEM_ID_RANGE = 130,
|
|
|
|
HEADER_GD_UPDATE_HORSE_NAME = 131,
|
|
HEADER_GD_REQ_HORSE_NAME = 132,
|
|
|
|
HEADER_GD_DC = 133, // Login Key를 지움
|
|
|
|
HEADER_GD_VALID_LOGOUT = 134,
|
|
|
|
HEADER_GD_REQUEST_CHARGE_CASH = 137,
|
|
|
|
HEADER_GD_DELETE_AWARDID = 138, // delete gift notify icon
|
|
|
|
HEADER_GD_UPDATE_CHANNELSTATUS = 139,
|
|
HEADER_GD_REQUEST_CHANNELSTATUS = 140,
|
|
|
|
HEADER_GD_SETUP = 0xff,
|
|
|
|
///////////////////////////////////////////////
|
|
HEADER_DG_NOTICE = 1,
|
|
|
|
HEADER_DG_LOGIN_SUCCESS = 30,
|
|
HEADER_DG_LOGIN_NOT_EXIST = 31,
|
|
HEADER_DG_LOGIN_WRONG_PASSWD = 33,
|
|
HEADER_DG_LOGIN_ALREADY = 34,
|
|
|
|
HEADER_DG_PLAYER_LOAD_SUCCESS = 35,
|
|
HEADER_DG_PLAYER_LOAD_FAILED = 36,
|
|
HEADER_DG_PLAYER_CREATE_SUCCESS = 37,
|
|
HEADER_DG_PLAYER_CREATE_ALREADY = 38,
|
|
HEADER_DG_PLAYER_CREATE_FAILED = 39,
|
|
HEADER_DG_PLAYER_DELETE_SUCCESS = 40,
|
|
HEADER_DG_PLAYER_DELETE_FAILED = 41,
|
|
|
|
HEADER_DG_ITEM_LOAD = 42,
|
|
|
|
HEADER_DG_BOOT = 43,
|
|
HEADER_DG_QUEST_LOAD = 44,
|
|
|
|
HEADER_DG_SAFEBOX_LOAD = 45,
|
|
HEADER_DG_SAFEBOX_CHANGE_SIZE = 46,
|
|
HEADER_DG_SAFEBOX_WRONG_PASSWORD = 47,
|
|
HEADER_DG_SAFEBOX_CHANGE_PASSWORD_ANSWER = 48,
|
|
|
|
HEADER_DG_EMPIRE_SELECT = 49,
|
|
|
|
HEADER_DG_AFFECT_LOAD = 50,
|
|
HEADER_DG_MALL_LOAD = 51,
|
|
|
|
HEADER_DG_DIRECT_ENTER = 55,
|
|
|
|
HEADER_DG_GUILD_SKILL_UPDATE = 56,
|
|
HEADER_DG_GUILD_SKILL_RECHARGE = 57,
|
|
HEADER_DG_GUILD_EXP_UPDATE = 58,
|
|
|
|
HEADER_DG_PARTY_CREATE = 59,
|
|
HEADER_DG_PARTY_DELETE = 60,
|
|
HEADER_DG_PARTY_ADD = 61,
|
|
HEADER_DG_PARTY_REMOVE = 62,
|
|
HEADER_DG_PARTY_STATE_CHANGE = 63,
|
|
HEADER_DG_PARTY_HEAL_USE = 64,
|
|
HEADER_DG_PARTY_SET_MEMBER_LEVEL = 65,
|
|
|
|
HEADER_DG_TIME = 90,
|
|
HEADER_DG_ITEM_ID_RANGE = 91,
|
|
|
|
HEADER_DG_GUILD_ADD_MEMBER = 92,
|
|
HEADER_DG_GUILD_REMOVE_MEMBER = 93,
|
|
HEADER_DG_GUILD_CHANGE_GRADE = 94,
|
|
HEADER_DG_GUILD_CHANGE_MEMBER_DATA = 95,
|
|
HEADER_DG_GUILD_DISBAND = 96,
|
|
HEADER_DG_GUILD_WAR = 97,
|
|
HEADER_DG_GUILD_WAR_SCORE = 98,
|
|
HEADER_DG_GUILD_TIME_UPDATE = 99,
|
|
HEADER_DG_GUILD_LOAD = 100,
|
|
HEADER_DG_GUILD_LADDER = 101,
|
|
HEADER_DG_GUILD_SKILL_USABLE_CHANGE = 102,
|
|
HEADER_DG_GUILD_MONEY_CHANGE = 103,
|
|
HEADER_DG_GUILD_WITHDRAW_MONEY_GIVE = 104,
|
|
|
|
HEADER_DG_SET_EVENT_FLAG = 105,
|
|
|
|
HEADER_DG_GUILD_WAR_RESERVE_ADD = 106,
|
|
HEADER_DG_GUILD_WAR_RESERVE_DEL = 107,
|
|
HEADER_DG_GUILD_WAR_BET = 108,
|
|
|
|
HEADER_DG_RELOAD_PROTO = 120,
|
|
HEADER_DG_CHANGE_NAME = 121,
|
|
|
|
HEADER_DG_AUTH_LOGIN = 122,
|
|
|
|
HEADER_DG_CHANGE_EMPIRE_PRIV = 124,
|
|
HEADER_DG_CHANGE_GUILD_PRIV = 125,
|
|
|
|
HEADER_DG_MONEY_LOG = 126,
|
|
|
|
HEADER_DG_CHANGE_CHARACTER_PRIV = 127,
|
|
|
|
HEADER_DG_BILLING_REPAIR = 128,
|
|
HEADER_DG_BILLING_EXPIRE = 129,
|
|
HEADER_DG_BILLING_LOGIN = 130,
|
|
HEADER_DG_VCARD = 131,
|
|
HEADER_DG_BILLING_CHECK = 132,
|
|
|
|
HEADER_DG_CREATE_OBJECT = 140,
|
|
HEADER_DG_DELETE_OBJECT = 141,
|
|
HEADER_DG_UPDATE_LAND = 142,
|
|
|
|
HEADER_DG_MARRIAGE_ADD = 150,
|
|
HEADER_DG_MARRIAGE_UPDATE = 151,
|
|
HEADER_DG_MARRIAGE_REMOVE = 152,
|
|
|
|
HEADER_DG_WEDDING_REQUEST = 153,
|
|
HEADER_DG_WEDDING_READY = 154,
|
|
HEADER_DG_WEDDING_START = 155,
|
|
HEADER_DG_WEDDING_END = 156,
|
|
|
|
HEADER_DG_MYSHOP_PRICELIST_RES = 157, ///< 가격정보 리스트 응답
|
|
HEADER_DG_RELOAD_ADMIN = 158, ///< 운영자 정보 리로드
|
|
HEADER_DG_BREAK_MARRIAGE = 159, ///< 결혼 파기
|
|
HEADER_DG_ELECT_MONARCH = 160, ///< 군주 투표
|
|
HEADER_DG_CANDIDACY = 161, ///< 군주 등록
|
|
HEADER_DG_ADD_MONARCH_MONEY = 162, ///< 군주 돈 증가
|
|
HEADER_DG_TAKE_MONARCH_MONEY = 163, ///< 군주 돈 감소
|
|
HEADER_DG_COME_TO_VOTE = 164, ///< 표결
|
|
HEADER_DG_RMCANDIDACY = 165, ///< 후보 제거 (운영자)
|
|
HEADER_DG_SETMONARCH = 166, ///<군주설정 (운영자)
|
|
HEADER_DG_RMMONARCH = 167, ///<군주삭제
|
|
HEADER_DG_DEC_MONARCH_MONEY = 168,
|
|
|
|
HEADER_DG_CHANGE_MONARCH_LORD_ACK = 169,
|
|
HEADER_DG_UPDATE_MONARCH_INFO = 170,
|
|
HEADER_DG_BLOCK_COUNTRY_IP = 171, // 광대역 IP-Block
|
|
HEADER_DG_BLOCK_EXCEPTION = 172, // 광대역 IP-Block 예외 account
|
|
|
|
HEADER_DG_ACK_CHANGE_GUILD_MASTER = 173,
|
|
|
|
HEADER_DG_ACK_SPARE_ITEM_ID_RANGE = 174,
|
|
|
|
HEADER_DG_UPDATE_HORSE_NAME = 175,
|
|
HEADER_DG_ACK_HORSE_NAME = 176,
|
|
|
|
HEADER_DG_NEED_LOGIN_LOG = 177,
|
|
|
|
HEADER_DG_RESULT_CHARGE_CASH = 179,
|
|
HEADER_DG_ITEMAWARD_INFORMER = 180, //gift notify
|
|
HEADER_DG_RESPOND_CHANNELSTATUS = 181,
|
|
|
|
HEADER_DG_MAP_LOCATIONS = 0xfe,
|
|
HEADER_DG_P2P = 0xff,
|
|
|
|
HEADER_GP_CONFIRM_PASSPOD = 1,
|
|
HEADER_PG_CONFIRM_PASSPOD = 2,
|
|
|
|
};
|
|
|
|
enum E_PASSPOD
|
|
{
|
|
E_PASSPOD_SUCCESS = 0,
|
|
E_PASSPOD_FAILED_PASSPOD_ERROR,
|
|
E_PASSPOD_FAILED_USER_NOT_FOUND,
|
|
E_PASSPOD_FAILED_SYSTEM_NOT_FOUND,
|
|
E_PASSPOD_FAILED_TOKEN_DISABLED,
|
|
E_PASSPOD_FAILED_EMPTY,
|
|
};
|
|
|
|
|
|
typedef struct SRequestConfirmPasspod
|
|
{
|
|
int32_t pid;
|
|
char passpod[MAX_PASSPOD + 1];
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
|
|
} RequestConfirmPasspod;
|
|
|
|
typedef struct SResultConfirmPasspod
|
|
{
|
|
int32_t pid;
|
|
int32_t ret_code;
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
} ResultConfirmPasspod;
|
|
/* ----------------------------------------------
|
|
* table
|
|
* ----------------------------------------------
|
|
*/
|
|
|
|
/* game Server -> DB Server */
|
|
#pragma pack(1)
|
|
enum ERequestChargeType
|
|
{
|
|
ERequestCharge_Cash = 0,
|
|
ERequestCharge_Mileage,
|
|
};
|
|
|
|
typedef struct SRequestChargeCash
|
|
{
|
|
uint32_t dwAID; // id(primary key) - Account Table
|
|
uint32_t dwAmount;
|
|
ERequestChargeType eChargeType;
|
|
|
|
} TRequestChargeCash;
|
|
|
|
typedef struct SSimplePlayer
|
|
{
|
|
uint32_t dwID;
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
uint8_t byJob;
|
|
uint8_t byLevel;
|
|
uint32_t dwPlayMinutes;
|
|
uint8_t byST, byHT, byDX, byIQ;
|
|
uint16_t wMainPart;
|
|
uint8_t bChangeName;
|
|
uint16_t wHairPart;
|
|
uint8_t bDummy[4];
|
|
int32_t x, y;
|
|
uint32_t lAddr;
|
|
uint16_t wPort;
|
|
uint8_t skill_group;
|
|
} TSimplePlayer;
|
|
|
|
typedef struct SAccountTable
|
|
{
|
|
uint32_t id;
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
char passwd[PASSWD_MAX_LEN + 1];
|
|
char social_id[SOCIAL_ID_MAX_LEN + 1];
|
|
char status[ACCOUNT_STATUS_MAX_LEN + 1];
|
|
uint8_t bEmpire;
|
|
TSimplePlayer players[PLAYER_PER_ACCOUNT];
|
|
} TAccountTable;
|
|
|
|
typedef struct SPacketDGCreateSuccess
|
|
{
|
|
uint8_t bAccountCharacterIndex;
|
|
TSimplePlayer player;
|
|
} TPacketDGCreateSuccess;
|
|
|
|
typedef struct TPlayerItemAttribute
|
|
{
|
|
uint8_t bType;
|
|
int16_t sValue;
|
|
} TPlayerItemAttribute;
|
|
|
|
typedef struct SPlayerItem
|
|
{
|
|
uint32_t id;
|
|
uint8_t window;
|
|
uint16_t pos;
|
|
uint32_t count;
|
|
|
|
uint32_t vnum;
|
|
int32_t alSockets[ITEM_SOCKET_MAX_NUM]; // 소켓번호
|
|
|
|
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
|
|
|
|
uint32_t owner;
|
|
} TPlayerItem;
|
|
|
|
typedef struct SQuickslot
|
|
{
|
|
uint8_t type;
|
|
uint8_t pos;
|
|
} TQuickslot;
|
|
|
|
typedef struct SPlayerSkill
|
|
{
|
|
uint8_t bMasterType;
|
|
uint8_t bLevel;
|
|
time_t tNextRead;
|
|
} TPlayerSkill;
|
|
|
|
struct THorseInfo
|
|
{
|
|
uint8_t bLevel;
|
|
uint8_t bRiding;
|
|
int16_t sStamina;
|
|
int16_t sHealth;
|
|
uint32_t dwHorseHealthDropTime;
|
|
};
|
|
|
|
typedef struct SPlayerTable
|
|
{
|
|
uint32_t id;
|
|
|
|
char name[CHARACTER_NAME_MAX_LEN + 1];
|
|
char ip[IP_ADDRESS_LENGTH + 1];
|
|
|
|
uint16_t job;
|
|
uint8_t voice;
|
|
|
|
uint8_t level;
|
|
uint8_t level_step;
|
|
int16_t st, ht, dx, iq;
|
|
|
|
uint32_t exp;
|
|
INT gold;
|
|
|
|
uint8_t dir;
|
|
INT x, y, z;
|
|
INT lMapIndex;
|
|
|
|
int32_t lExitX, lExitY;
|
|
int32_t lExitMapIndex;
|
|
|
|
// int16_t hp;
|
|
// int16_t sp;
|
|
|
|
// int16_t sRandomHP;
|
|
// int16_t sRandomSP;
|
|
|
|
// Fix
|
|
int32_t hp;
|
|
int32_t sp;
|
|
|
|
int32_t sRandomHP;
|
|
int32_t sRandomSP;
|
|
|
|
int32_t playtime;
|
|
|
|
int16_t stat_point;
|
|
int16_t skill_point;
|
|
int16_t sub_skill_point;
|
|
int16_t horse_skill_point;
|
|
|
|
TPlayerSkill skills[SKILL_MAX_NUM];
|
|
|
|
TQuickslot quickslot[QUICKSLOT_MAX_NUM];
|
|
|
|
uint8_t part_base;
|
|
uint16_t parts[PART_MAX_NUM];
|
|
|
|
int16_t stamina;
|
|
|
|
uint8_t skill_group;
|
|
int32_t lAlignment;
|
|
char szMobile[MOBILE_MAX_LEN + 1];
|
|
|
|
int16_t stat_reset_count;
|
|
|
|
THorseInfo horse;
|
|
|
|
uint32_t logoff_interval;
|
|
|
|
int32_t aiPremiumTimes[PREMIUM_MAX_NUM];
|
|
} TPlayerTable;
|
|
|
|
typedef struct SMobSkillLevel
|
|
{
|
|
uint32_t dwVnum;
|
|
uint8_t bLevel;
|
|
} TMobSkillLevel;
|
|
|
|
typedef struct SEntityTable
|
|
{
|
|
uint32_t dwVnum;
|
|
} TEntityTable;
|
|
|
|
typedef struct SMobTable : public SEntityTable
|
|
{
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
|
|
|
|
uint8_t bType; // Monster, NPC
|
|
uint8_t bRank; // PAWN, KNIGHT, KING
|
|
uint8_t bBattleType; // MELEE, etc..
|
|
uint8_t bLevel; // Level
|
|
uint8_t bSize;
|
|
|
|
uint32_t dwGoldMin;
|
|
uint32_t dwGoldMax;
|
|
uint32_t dwExp;
|
|
uint32_t dwMaxHP;
|
|
uint8_t bRegenCycle;
|
|
uint8_t bRegenPercent;
|
|
uint16_t wDef;
|
|
|
|
uint32_t dwAIFlag;
|
|
uint32_t dwRaceFlag;
|
|
uint32_t dwImmuneFlag;
|
|
|
|
uint8_t bStr, bDex, bCon, bInt;
|
|
uint32_t dwDamageRange[2];
|
|
|
|
int16_t sAttackSpeed;
|
|
int16_t sMovingSpeed;
|
|
uint8_t bAggresiveHPPct;
|
|
uint16_t wAggressiveSight;
|
|
uint16_t wAttackRange;
|
|
|
|
char cEnchants[MOB_ENCHANTS_MAX_NUM];
|
|
char cResists[MOB_RESISTS_MAX_NUM];
|
|
|
|
uint32_t dwResurrectionVnum;
|
|
uint32_t dwDropItemVnum;
|
|
|
|
uint8_t bMountCapacity;
|
|
uint8_t bOnClickType;
|
|
|
|
uint8_t bEmpire;
|
|
char szFolder[64 + 1];
|
|
|
|
float fDamMultiply;
|
|
|
|
uint32_t dwSummonVnum;
|
|
uint32_t dwDrainSP;
|
|
uint32_t dwMobColor;
|
|
uint32_t dwPolymorphItemVnum;
|
|
|
|
TMobSkillLevel Skills[MOB_SKILL_MAX_NUM];
|
|
|
|
uint8_t bBerserkPoint;
|
|
uint8_t bStoneSkinPoint;
|
|
uint8_t bGodSpeedPoint;
|
|
uint8_t bDeathBlowPoint;
|
|
uint8_t bRevivePoint;
|
|
} TMobTable;
|
|
|
|
typedef struct SSkillTable
|
|
{
|
|
uint32_t dwVnum;
|
|
char szName[32 + 1];
|
|
uint8_t bType;
|
|
uint8_t bMaxLevel;
|
|
uint32_t dwSplashRange;
|
|
|
|
char szPointOn[64];
|
|
char szPointPoly[100 + 1];
|
|
char szSPCostPoly[100 + 1];
|
|
char szDurationPoly[100 + 1];
|
|
char szDurationSPCostPoly[100 + 1];
|
|
char szCooldownPoly[100 + 1];
|
|
char szMasterBonusPoly[100 + 1];
|
|
//char szAttackGradePoly[100 + 1];
|
|
char szGrandMasterAddSPCostPoly[100 + 1];
|
|
uint32_t dwFlag;
|
|
uint32_t dwAffectFlag;
|
|
|
|
// Data for secondary skill
|
|
char szPointOn2[64];
|
|
char szPointPoly2[100 + 1];
|
|
char szDurationPoly2[100 + 1];
|
|
uint32_t dwAffectFlag2;
|
|
|
|
// Data for grand master point
|
|
char szPointOn3[64];
|
|
char szPointPoly3[100 + 1];
|
|
char szDurationPoly3[100 + 1];
|
|
|
|
uint8_t bLevelStep;
|
|
uint8_t bLevelLimit;
|
|
uint32_t preSkillVnum;
|
|
uint8_t preSkillLevel;
|
|
|
|
int32_t lMaxHit;
|
|
char szSplashAroundDamageAdjustPoly[100 + 1];
|
|
|
|
uint8_t bSkillAttrType;
|
|
|
|
uint32_t dwTargetRange;
|
|
} TSkillTable;
|
|
|
|
typedef struct SShopItemTable
|
|
{
|
|
uint32_t vnum;
|
|
uint8_t count;
|
|
|
|
TItemPos pos; // PC 상점에만 이용
|
|
uint32_t price; // PC, shop_table_ex.txt 상점에만 이용
|
|
uint8_t display_pos; // PC, shop_table_ex.txt 상점에만 이용, 보일 위치.
|
|
} TShopItemTable;
|
|
|
|
typedef struct SShopTable
|
|
{
|
|
uint32_t dwVnum;
|
|
uint32_t dwNPCVnum;
|
|
|
|
uint8_t byItemCount;
|
|
TShopItemTable items[SHOP_HOST_ITEM_MAX_NUM];
|
|
} TShopTable;
|
|
|
|
#define QUEST_NAME_MAX_LEN 32
|
|
#define QUEST_STATE_MAX_LEN 64
|
|
|
|
typedef struct SQuestTable
|
|
{
|
|
uint32_t dwPID;
|
|
char szName[QUEST_NAME_MAX_LEN + 1];
|
|
char szState[QUEST_STATE_MAX_LEN + 1];
|
|
int32_t lValue;
|
|
} TQuestTable;
|
|
|
|
typedef struct SItemLimit
|
|
{
|
|
uint8_t bType;
|
|
int32_t lValue;
|
|
} TItemLimit;
|
|
|
|
typedef struct SItemApply
|
|
{
|
|
uint8_t bType;
|
|
int32_t lValue;
|
|
} TItemApply;
|
|
|
|
typedef struct SItemTable : public SEntityTable
|
|
{
|
|
uint32_t dwVnumRange;
|
|
char szName[ITEM_NAME_MAX_LEN + 1];
|
|
char szLocaleName[ITEM_NAME_MAX_LEN + 1];
|
|
uint8_t bType;
|
|
uint8_t bSubType;
|
|
|
|
uint8_t bWeight;
|
|
uint8_t bSize;
|
|
|
|
uint32_t dwAntiFlags;
|
|
uint32_t dwFlags;
|
|
uint32_t dwWearFlags;
|
|
uint32_t dwImmuneFlag;
|
|
|
|
uint32_t dwGold;
|
|
uint32_t dwShopBuyPrice;
|
|
|
|
TItemLimit aLimits[ITEM_LIMIT_MAX_NUM];
|
|
TItemApply aApplies[ITEM_APPLY_MAX_NUM];
|
|
int32_t alValues[ITEM_VALUES_MAX_NUM];
|
|
int32_t alSockets[ITEM_SOCKET_MAX_NUM];
|
|
uint32_t dwRefinedVnum;
|
|
uint16_t wRefineSet;
|
|
uint8_t bAlterToMagicItemPct;
|
|
uint8_t bSpecular;
|
|
uint8_t bGainSocketPct;
|
|
|
|
int16_t sAddonType; // 기본 속성
|
|
|
|
// 아래 limit flag들은 realtime에 체크 할 일이 많고, 아이템 VNUM당 고정된 값인데,
|
|
// 현재 구조대로 매번 아이템마다 필요한 경우에 LIMIT_MAX_NUM까지 루프돌면서 체크하는 부하가 커서 미리 저장 해 둠.
|
|
char cLimitRealTimeFirstUseIndex; // 아이템 limit 필드값 중에서 LIMIT_REAL_TIME_FIRST_USE 플래그의 위치 (없으면 -1)
|
|
char cLimitTimerBasedOnWearIndex; // 아이템 limit 필드값 중에서 LIMIT_TIMER_BASED_ON_WEAR 플래그의 위치 (없으면 -1)
|
|
|
|
} TItemTable;
|
|
|
|
struct TItemAttrTable
|
|
{
|
|
TItemAttrTable() :
|
|
dwApplyIndex(0),
|
|
dwProb(0)
|
|
{
|
|
szApply[0] = 0;
|
|
memset(&lValues, 0, sizeof(lValues));
|
|
memset(&bMaxLevelBySet, 0, sizeof(bMaxLevelBySet));
|
|
}
|
|
|
|
char szApply[APPLY_NAME_MAX_LEN + 1];
|
|
uint32_t dwApplyIndex;
|
|
uint32_t dwProb;
|
|
int32_t lValues[5];
|
|
uint8_t bMaxLevelBySet[ATTRIBUTE_SET_MAX_NUM];
|
|
};
|
|
|
|
typedef struct SConnectTable
|
|
{
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
IDENT ident;
|
|
} TConnectTable;
|
|
|
|
typedef struct SLoginPacket
|
|
{
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
char passwd[PASSWD_MAX_LEN + 1];
|
|
} TLoginPacket;
|
|
|
|
typedef struct SPlayerLoadPacket
|
|
{
|
|
uint32_t account_id;
|
|
uint32_t player_id;
|
|
uint8_t account_index; /* account 에서의 위치 */
|
|
} TPlayerLoadPacket;
|
|
|
|
typedef struct SPlayerCreatePacket
|
|
{
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
char passwd[PASSWD_MAX_LEN + 1];
|
|
uint32_t account_id;
|
|
uint8_t account_index;
|
|
TPlayerTable player_table;
|
|
} TPlayerCreatePacket;
|
|
|
|
typedef struct SPlayerDeletePacket
|
|
{
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
uint32_t player_id;
|
|
uint8_t account_index;
|
|
//char name[CHARACTER_NAME_MAX_LEN + 1];
|
|
char private_code[8];
|
|
} TPlayerDeletePacket;
|
|
|
|
typedef struct SLogoutPacket
|
|
{
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
char passwd[PASSWD_MAX_LEN + 1];
|
|
} TLogoutPacket;
|
|
|
|
typedef struct SPlayerCountPacket
|
|
{
|
|
uint32_t dwCount;
|
|
} TPlayerCountPacket;
|
|
|
|
#define SAFEBOX_MAX_NUM 135
|
|
#define SAFEBOX_PASSWORD_MAX_LEN 6
|
|
|
|
typedef struct SSafeboxTable
|
|
{
|
|
uint32_t dwID;
|
|
uint8_t bSize;
|
|
uint32_t dwGold;
|
|
uint16_t wItemCount;
|
|
} TSafeboxTable;
|
|
|
|
typedef struct SSafeboxChangeSizePacket
|
|
{
|
|
uint32_t dwID;
|
|
uint8_t bSize;
|
|
} TSafeboxChangeSizePacket;
|
|
|
|
typedef struct SSafeboxLoadPacket
|
|
{
|
|
uint32_t dwID;
|
|
char szLogin[LOGIN_MAX_LEN + 1];
|
|
char szPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
|
|
} TSafeboxLoadPacket;
|
|
|
|
typedef struct SSafeboxChangePasswordPacket
|
|
{
|
|
uint32_t dwID;
|
|
char szOldPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
|
|
char szNewPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
|
|
} TSafeboxChangePasswordPacket;
|
|
|
|
typedef struct SSafeboxChangePasswordPacketAnswer
|
|
{
|
|
uint8_t flag;
|
|
} TSafeboxChangePasswordPacketAnswer;
|
|
|
|
typedef struct SEmpireSelectPacket
|
|
{
|
|
uint32_t dwAccountID;
|
|
uint8_t bEmpire;
|
|
} TEmpireSelectPacket;
|
|
|
|
typedef struct SPacketGDSetup
|
|
{
|
|
char szPublicIP[16]; // Public IP which listen to users
|
|
uint8_t bChannel; // 채널
|
|
uint16_t wListenPort; // 클라이언트가 접속하는 포트 번호
|
|
uint16_t wP2PPort; // 서버끼리 연결 시키는 P2P 포트 번호
|
|
int32_t alMaps[32];
|
|
uint32_t dwLoginCount;
|
|
uint8_t bAuthServer;
|
|
} TPacketGDSetup;
|
|
|
|
typedef struct SPacketDGMapLocations
|
|
{
|
|
uint8_t bCount;
|
|
} TPacketDGMapLocations;
|
|
|
|
typedef struct SMapLocation
|
|
{
|
|
int32_t alMaps[32];
|
|
char szHost[MAX_HOST_LENGTH + 1];
|
|
uint16_t wPort;
|
|
} TMapLocation;
|
|
|
|
typedef struct SPacketDGP2P
|
|
{
|
|
char szHost[MAX_HOST_LENGTH + 1];
|
|
uint16_t wPort;
|
|
uint8_t bChannel;
|
|
} TPacketDGP2P;
|
|
|
|
typedef struct SPacketGDDirectEnter
|
|
{
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
char passwd[PASSWD_MAX_LEN + 1];
|
|
uint8_t index;
|
|
} TPacketGDDirectEnter;
|
|
|
|
typedef struct SPacketDGDirectEnter
|
|
{
|
|
TAccountTable accountTable;
|
|
TPlayerTable playerTable;
|
|
} TPacketDGDirectEnter;
|
|
|
|
typedef struct SPacketGuildSkillUpdate
|
|
{
|
|
uint32_t guild_id;
|
|
int32_t amount;
|
|
uint8_t skill_levels[12];
|
|
uint8_t skill_point;
|
|
uint8_t save;
|
|
} TPacketGuildSkillUpdate;
|
|
|
|
typedef struct SPacketGuildExpUpdate
|
|
{
|
|
uint32_t guild_id;
|
|
int32_t amount;
|
|
} TPacketGuildExpUpdate;
|
|
|
|
typedef struct SPacketGuildChangeMemberData
|
|
{
|
|
uint32_t guild_id;
|
|
uint32_t pid;
|
|
uint32_t offer;
|
|
uint8_t level;
|
|
uint8_t grade;
|
|
} TPacketGuildChangeMemberData;
|
|
|
|
|
|
typedef struct SPacketDGLoginAlready
|
|
{
|
|
char szLogin[LOGIN_MAX_LEN + 1];
|
|
} TPacketDGLoginAlready;
|
|
|
|
typedef struct TPacketAffectElement
|
|
{
|
|
uint32_t dwType;
|
|
uint8_t bApplyOn;
|
|
int32_t lApplyValue;
|
|
uint32_t dwFlag;
|
|
int32_t lDuration;
|
|
int32_t lSPCost;
|
|
} TPacketAffectElement;
|
|
|
|
typedef struct SPacketGDAddAffect
|
|
{
|
|
uint32_t dwPID;
|
|
TPacketAffectElement elem;
|
|
} TPacketGDAddAffect;
|
|
|
|
typedef struct SPacketGDRemoveAffect
|
|
{
|
|
uint32_t dwPID;
|
|
uint32_t dwType;
|
|
uint8_t bApplyOn;
|
|
} TPacketGDRemoveAffect;
|
|
|
|
typedef struct SPacketGDHighscore
|
|
{
|
|
uint32_t dwPID;
|
|
int32_t lValue;
|
|
char cDir;
|
|
char szBoard[21];
|
|
} TPacketGDHighscore;
|
|
|
|
typedef struct SPacketPartyCreate
|
|
{
|
|
uint32_t dwLeaderPID;
|
|
} TPacketPartyCreate;
|
|
|
|
typedef struct SPacketPartyDelete
|
|
{
|
|
uint32_t dwLeaderPID;
|
|
} TPacketPartyDelete;
|
|
|
|
typedef struct SPacketPartyAdd
|
|
{
|
|
uint32_t dwLeaderPID;
|
|
uint32_t dwPID;
|
|
uint8_t bState;
|
|
} TPacketPartyAdd;
|
|
|
|
typedef struct SPacketPartyRemove
|
|
{
|
|
uint32_t dwLeaderPID;
|
|
uint32_t dwPID;
|
|
} TPacketPartyRemove;
|
|
|
|
typedef struct SPacketPartyStateChange
|
|
{
|
|
uint32_t dwLeaderPID;
|
|
uint32_t dwPID;
|
|
uint8_t bRole;
|
|
uint8_t bFlag;
|
|
} TPacketPartyStateChange;
|
|
|
|
typedef struct SPacketPartySetMemberLevel
|
|
{
|
|
uint32_t dwLeaderPID;
|
|
uint32_t dwPID;
|
|
uint8_t bLevel;
|
|
} TPacketPartySetMemberLevel;
|
|
|
|
typedef struct SPacketGDBoot
|
|
{
|
|
uint32_t dwItemIDRange[2];
|
|
char szIP[16];
|
|
} TPacketGDBoot;
|
|
|
|
typedef struct SPacketGuild
|
|
{
|
|
uint32_t dwGuild;
|
|
uint32_t dwInfo;
|
|
} TPacketGuild;
|
|
|
|
typedef struct SPacketGDGuildAddMember
|
|
{
|
|
uint32_t dwPID;
|
|
uint32_t dwGuild;
|
|
uint8_t bGrade;
|
|
} TPacketGDGuildAddMember;
|
|
|
|
typedef struct SPacketDGGuildMember
|
|
{
|
|
uint32_t dwPID;
|
|
uint32_t dwGuild;
|
|
uint8_t bGrade;
|
|
uint8_t isGeneral;
|
|
uint8_t bJob;
|
|
uint8_t bLevel;
|
|
uint32_t dwOffer;
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
} TPacketDGGuildMember;
|
|
|
|
typedef struct SPacketGuildWar
|
|
{
|
|
uint8_t bType;
|
|
uint8_t bWar;
|
|
uint32_t dwGuildFrom;
|
|
uint32_t dwGuildTo;
|
|
int32_t lWarPrice;
|
|
int32_t lInitialScore;
|
|
} TPacketGuildWar;
|
|
|
|
// Game -> DB : 상대적 변화값
|
|
// DB -> Game : 토탈된 최종값
|
|
typedef struct SPacketGuildWarScore
|
|
{
|
|
uint32_t dwGuildGainPoint;
|
|
uint32_t dwGuildOpponent;
|
|
int32_t lScore;
|
|
int32_t lBetScore;
|
|
} TPacketGuildWarScore;
|
|
|
|
typedef struct SRefineMaterial
|
|
{
|
|
uint32_t vnum;
|
|
int32_t count;
|
|
} TRefineMaterial;
|
|
|
|
typedef struct SRefineTable
|
|
{
|
|
//uint32_t src_vnum;
|
|
//uint32_t result_vnum;
|
|
uint32_t id;
|
|
uint8_t material_count;
|
|
int32_t cost; // 소요 비용
|
|
int32_t prob; // 확률
|
|
TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
|
|
} TRefineTable;
|
|
|
|
typedef struct SBanwordTable
|
|
{
|
|
char szWord[BANWORD_MAX_LEN + 1];
|
|
} TBanwordTable;
|
|
|
|
typedef struct SPacketGDChangeName
|
|
{
|
|
uint32_t pid;
|
|
char name[CHARACTER_NAME_MAX_LEN + 1];
|
|
} TPacketGDChangeName;
|
|
|
|
typedef struct SPacketDGChangeName
|
|
{
|
|
uint32_t pid;
|
|
char name[CHARACTER_NAME_MAX_LEN + 1];
|
|
} TPacketDGChangeName;
|
|
|
|
typedef struct SPacketGuildLadder
|
|
{
|
|
uint32_t dwGuild;
|
|
int32_t lLadderPoint;
|
|
int32_t lWin;
|
|
int32_t lDraw;
|
|
int32_t lLoss;
|
|
} TPacketGuildLadder;
|
|
|
|
typedef struct SPacketGuildLadderPoint
|
|
{
|
|
uint32_t dwGuild;
|
|
int32_t lChange;
|
|
} TPacketGuildLadderPoint;
|
|
|
|
typedef struct SPacketGDSMS
|
|
{
|
|
char szFrom[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szTo[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szMobile[MOBILE_MAX_LEN + 1];
|
|
char szMsg[SMS_MAX_LEN + 1];
|
|
} TPacketGDSMS;
|
|
|
|
typedef struct SPacketGuildUseSkill
|
|
{
|
|
uint32_t dwGuild;
|
|
uint32_t dwSkillVnum;
|
|
uint32_t dwCooltime;
|
|
} TPacketGuildUseSkill;
|
|
|
|
typedef struct SPacketGuildSkillUsableChange
|
|
{
|
|
uint32_t dwGuild;
|
|
uint32_t dwSkillVnum;
|
|
uint8_t bUsable;
|
|
} TPacketGuildSkillUsableChange;
|
|
|
|
typedef struct SPacketGDLoginKey
|
|
{
|
|
uint32_t dwAccountID;
|
|
uint32_t dwLoginKey;
|
|
} TPacketGDLoginKey;
|
|
|
|
typedef struct SPacketGDAuthLogin
|
|
{
|
|
uint32_t dwID;
|
|
uint32_t dwLoginKey;
|
|
char szLogin[LOGIN_MAX_LEN + 1];
|
|
char szSocialID[SOCIAL_ID_MAX_LEN + 1];
|
|
uint32_t adwClientKey[4];
|
|
uint8_t bBillType;
|
|
uint32_t dwBillID;
|
|
int32_t iPremiumTimes[PREMIUM_MAX_NUM];
|
|
} TPacketGDAuthLogin;
|
|
|
|
typedef struct SPacketGDLoginByKey
|
|
{
|
|
char szLogin[LOGIN_MAX_LEN + 1];
|
|
uint32_t dwLoginKey;
|
|
uint32_t adwClientKey[4];
|
|
char szIP[MAX_HOST_LENGTH + 1];
|
|
} TPacketGDLoginByKey;
|
|
|
|
/**
|
|
* @version 05/06/08 Bang2ni - 지속시간 추가
|
|
*/
|
|
typedef struct SPacketGiveGuildPriv
|
|
{
|
|
uint8_t type;
|
|
int32_t value;
|
|
uint32_t guild_id;
|
|
time_t duration_sec; ///< 지속시간
|
|
} TPacketGiveGuildPriv;
|
|
typedef struct SPacketGiveEmpirePriv
|
|
{
|
|
uint8_t type;
|
|
int32_t value;
|
|
uint8_t empire;
|
|
time_t duration_sec;
|
|
} TPacketGiveEmpirePriv;
|
|
typedef struct SPacketGiveCharacterPriv
|
|
{
|
|
uint8_t type;
|
|
int32_t value;
|
|
uint32_t pid;
|
|
} TPacketGiveCharacterPriv;
|
|
typedef struct SPacketRemoveGuildPriv
|
|
{
|
|
uint8_t type;
|
|
uint32_t guild_id;
|
|
} TPacketRemoveGuildPriv;
|
|
typedef struct SPacketRemoveEmpirePriv
|
|
{
|
|
uint8_t type;
|
|
uint8_t empire;
|
|
} TPacketRemoveEmpirePriv;
|
|
|
|
typedef struct SPacketDGChangeCharacterPriv
|
|
{
|
|
uint8_t type;
|
|
int32_t value;
|
|
uint32_t pid;
|
|
uint8_t bLog;
|
|
} TPacketDGChangeCharacterPriv;
|
|
|
|
/**
|
|
* @version 05/06/08 Bang2ni - 지속시간 추가
|
|
*/
|
|
typedef struct SPacketDGChangeGuildPriv
|
|
{
|
|
uint8_t type;
|
|
int32_t value;
|
|
uint32_t guild_id;
|
|
uint8_t bLog;
|
|
time_t end_time_sec; ///< 지속시간
|
|
} TPacketDGChangeGuildPriv;
|
|
|
|
typedef struct SPacketDGChangeEmpirePriv
|
|
{
|
|
uint8_t type;
|
|
int32_t value;
|
|
uint8_t empire;
|
|
uint8_t bLog;
|
|
time_t end_time_sec;
|
|
} TPacketDGChangeEmpirePriv;
|
|
|
|
typedef struct SPacketMoneyLog
|
|
{
|
|
uint8_t type;
|
|
uint32_t vnum;
|
|
INT gold;
|
|
} TPacketMoneyLog;
|
|
|
|
typedef struct SPacketGDGuildMoney
|
|
{
|
|
uint32_t dwGuild;
|
|
INT iGold;
|
|
} TPacketGDGuildMoney;
|
|
|
|
typedef struct SPacketDGGuildMoneyChange
|
|
{
|
|
uint32_t dwGuild;
|
|
INT iTotalGold;
|
|
} TPacketDGGuildMoneyChange;
|
|
|
|
typedef struct SPacketDGGuildMoneyWithdraw
|
|
{
|
|
uint32_t dwGuild;
|
|
INT iChangeGold;
|
|
} TPacketDGGuildMoneyWithdraw;
|
|
|
|
typedef struct SPacketGDGuildMoneyWithdrawGiveReply
|
|
{
|
|
uint32_t dwGuild;
|
|
INT iChangeGold;
|
|
uint8_t bGiveSuccess;
|
|
} TPacketGDGuildMoneyWithdrawGiveReply;
|
|
|
|
typedef struct SPacketSetEventFlag
|
|
{
|
|
char szFlagName[EVENT_FLAG_NAME_MAX_LEN + 1];
|
|
int32_t lValue;
|
|
} TPacketSetEventFlag;
|
|
|
|
typedef struct SPacketBillingLogin
|
|
{
|
|
uint32_t dwLoginKey;
|
|
uint8_t bLogin;
|
|
} TPacketBillingLogin;
|
|
|
|
typedef struct SPacketBillingRepair
|
|
{
|
|
uint32_t dwLoginKey;
|
|
char szLogin[LOGIN_MAX_LEN + 1];
|
|
char szHost[MAX_HOST_LENGTH + 1];
|
|
} TPacketBillingRepair;
|
|
|
|
typedef struct SPacketBillingExpire
|
|
{
|
|
char szLogin[LOGIN_MAX_LEN + 1];
|
|
uint8_t bBillType;
|
|
uint32_t dwRemainSeconds;
|
|
} TPacketBillingExpire;
|
|
|
|
typedef struct SPacketLoginOnSetup
|
|
{
|
|
uint32_t dwID;
|
|
char szLogin[LOGIN_MAX_LEN + 1];
|
|
char szSocialID[SOCIAL_ID_MAX_LEN + 1];
|
|
char szHost[MAX_HOST_LENGTH + 1];
|
|
uint32_t dwLoginKey;
|
|
uint32_t adwClientKey[4];
|
|
} TPacketLoginOnSetup;
|
|
|
|
typedef struct SPacketGDCreateObject
|
|
{
|
|
uint32_t dwVnum;
|
|
uint32_t dwLandID;
|
|
INT lMapIndex;
|
|
INT x, y;
|
|
float xRot;
|
|
float yRot;
|
|
float zRot;
|
|
} TPacketGDCreateObject;
|
|
|
|
typedef struct SPacketGDHammerOfTor
|
|
{
|
|
uint32_t key;
|
|
uint32_t delay;
|
|
} TPacketGDHammerOfTor;
|
|
|
|
typedef struct SPacketGDVCard
|
|
{
|
|
uint32_t dwID;
|
|
char szSellCharacter[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szSellAccount[LOGIN_MAX_LEN + 1];
|
|
char szBuyCharacter[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szBuyAccount[LOGIN_MAX_LEN + 1];
|
|
} TPacketGDVCard;
|
|
|
|
typedef struct SGuildReserve
|
|
{
|
|
uint32_t dwID;
|
|
uint32_t dwGuildFrom;
|
|
uint32_t dwGuildTo;
|
|
uint32_t dwTime;
|
|
uint8_t bType;
|
|
int32_t lWarPrice;
|
|
int32_t lInitialScore;
|
|
bool bStarted;
|
|
uint32_t dwBetFrom;
|
|
uint32_t dwBetTo;
|
|
int32_t lPowerFrom;
|
|
int32_t lPowerTo;
|
|
int32_t lHandicap;
|
|
} TGuildWarReserve;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t dwWarID;
|
|
char szLogin[LOGIN_MAX_LEN + 1];
|
|
uint32_t dwGold;
|
|
uint32_t dwGuild;
|
|
} TPacketGDGuildWarBet;
|
|
|
|
// Marriage
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t dwPID1;
|
|
uint32_t dwPID2;
|
|
time_t tMarryTime;
|
|
char szName1[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szName2[CHARACTER_NAME_MAX_LEN + 1];
|
|
} TPacketMarriageAdd;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t dwPID1;
|
|
uint32_t dwPID2;
|
|
INT iLovePoint;
|
|
uint8_t byMarried;
|
|
} TPacketMarriageUpdate;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t dwPID1;
|
|
uint32_t dwPID2;
|
|
} TPacketMarriageRemove;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t dwPID1;
|
|
uint32_t dwPID2;
|
|
} TPacketWeddingRequest;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t dwPID1;
|
|
uint32_t dwPID2;
|
|
uint32_t dwMapIndex;
|
|
} TPacketWeddingReady;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t dwPID1;
|
|
uint32_t dwPID2;
|
|
} TPacketWeddingStart;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t dwPID1;
|
|
uint32_t dwPID2;
|
|
} TPacketWeddingEnd;
|
|
|
|
/// 개인상점 가격정보의 헤더. 가변 패킷으로 이 뒤에 byCount 만큼의 TItemPriceInfo 가 온다.
|
|
typedef struct SPacketMyshopPricelistHeader
|
|
{
|
|
uint32_t dwOwnerID; ///< 가격정보를 가진 플레이어 ID
|
|
uint8_t byCount; ///< 가격정보 갯수
|
|
} TPacketMyshopPricelistHeader;
|
|
|
|
/// 개인상점의 단일 아이템에 대한 가격정보
|
|
typedef struct SItemPriceInfo
|
|
{
|
|
uint32_t dwVnum; ///< 아이템 vnum
|
|
uint32_t dwPrice; ///< 가격
|
|
} TItemPriceInfo;
|
|
|
|
/// 개인상점 아이템 가격정보 리스트 테이블
|
|
typedef struct SItemPriceListTable
|
|
{
|
|
uint32_t dwOwnerID; ///< 가격정보를 가진 플레이어 ID
|
|
uint8_t byCount; ///< 가격정보 리스트의 갯수
|
|
|
|
TItemPriceInfo aPriceInfo[SHOP_PRICELIST_MAX_NUM]; ///< 가격정보 리스트
|
|
} TItemPriceListTable;
|
|
|
|
typedef struct
|
|
{
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
int32_t lDuration;
|
|
} TPacketBlockChat;
|
|
|
|
//ADMIN_MANAGER
|
|
typedef struct TAdminInfo
|
|
{
|
|
int32_t m_ID; //고유ID
|
|
char m_szAccount[32]; //계정
|
|
char m_szName[32]; //캐릭터이름
|
|
char m_szContactIP[16]; //접근아이피
|
|
char m_szServerIP[16]; //서버아이피
|
|
int32_t m_Authority; //권한
|
|
} tAdminInfo;
|
|
//END_ADMIN_MANAGER
|
|
|
|
//BOOT_LOCALIZATION
|
|
struct tLocale
|
|
{
|
|
char szValue[32];
|
|
char szKey[32];
|
|
};
|
|
//BOOT_LOCALIZATION
|
|
|
|
//RELOAD_ADMIN
|
|
typedef struct SPacketReloadAdmin
|
|
{
|
|
char szIP[16];
|
|
} TPacketReloadAdmin;
|
|
//END_RELOAD_ADMIN
|
|
|
|
typedef struct TMonarchInfo
|
|
{
|
|
uint32_t pid[4]; // 군주의 PID
|
|
int64_t money[4]; // 군주의 별개 돈
|
|
char name[4][32]; // 군주의 이름
|
|
char date[4][32]; // 군주 등록 날짜
|
|
} MonarchInfo;
|
|
|
|
typedef struct TMonarchElectionInfo
|
|
{
|
|
uint32_t pid; // 투표 한사람 PID
|
|
uint32_t selectedpid; // 투표 당한 PID ( 군주 참가자 )
|
|
char date[32]; // 투표 날짜
|
|
} MonarchElectionInfo;
|
|
|
|
// 군주 출마자
|
|
typedef struct tMonarchCandidacy
|
|
{
|
|
uint32_t pid;
|
|
char name[32];
|
|
char date[32];
|
|
} MonarchCandidacy;
|
|
|
|
typedef struct tChangeMonarchLord
|
|
{
|
|
uint8_t bEmpire;
|
|
uint32_t dwPID;
|
|
} TPacketChangeMonarchLord;
|
|
|
|
typedef struct tChangeMonarchLordACK
|
|
{
|
|
uint8_t bEmpire;
|
|
uint32_t dwPID;
|
|
char szName[32];
|
|
char szDate[32];
|
|
} TPacketChangeMonarchLordACK;
|
|
|
|
// Block Country Ip
|
|
typedef struct tBlockCountryIp
|
|
{
|
|
uint32_t ip_from;
|
|
uint32_t ip_to;
|
|
} TPacketBlockCountryIp;
|
|
|
|
enum EBlockExceptionCommand
|
|
{
|
|
BLOCK_EXCEPTION_CMD_ADD = 1,
|
|
BLOCK_EXCEPTION_CMD_DEL = 2,
|
|
};
|
|
|
|
// Block Exception Account
|
|
typedef struct tBlockException
|
|
{
|
|
uint8_t cmd; // 1 == add, 2 == delete
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
}TPacketBlockException;
|
|
|
|
typedef struct tChangeGuildMaster
|
|
{
|
|
uint32_t dwGuildID;
|
|
uint32_t idFrom;
|
|
uint32_t idTo;
|
|
} TPacketChangeGuildMaster;
|
|
|
|
typedef struct tItemIDRange
|
|
{
|
|
uint32_t dwMin;
|
|
uint32_t dwMax;
|
|
uint32_t dwUsableItemIDMin;
|
|
} TItemIDRangeTable;
|
|
|
|
typedef struct tUpdateHorseName
|
|
{
|
|
uint32_t dwPlayerID;
|
|
char szHorseName[CHARACTER_NAME_MAX_LEN + 1];
|
|
} TPacketUpdateHorseName;
|
|
|
|
typedef struct tDC
|
|
{
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
} TPacketDC;
|
|
|
|
typedef struct tNeedLoginLogInfo
|
|
{
|
|
uint32_t dwPlayerID;
|
|
} TPacketNeedLoginLogInfo;
|
|
|
|
//독일 선물 알림 기능 테스트용 패킷 정보
|
|
typedef struct tItemAwardInformer
|
|
{
|
|
char login[LOGIN_MAX_LEN + 1];
|
|
char command[20]; //명령어
|
|
uint32_t vnum; //아이템
|
|
} TPacketItemAwardInfromer;
|
|
// 선물 알림 기능 삭제용 패킷 정보
|
|
typedef struct tDeleteAwardID
|
|
{
|
|
uint32_t dwID;
|
|
} TPacketDeleteAwardID;
|
|
|
|
typedef struct SChannelStatus
|
|
{
|
|
int16_t nPort;
|
|
uint8_t bStatus;
|
|
} TChannelStatus;
|
|
|
|
#pragma pack()
|