forked from metin2/server
1
0
Fork 0
server/common/tables.h

1453 lines
29 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __INC_TABLES_H__
#define __INC_TABLES_H__
#include "length.h"
typedef DWORD 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,
// PCBANG_IP_LIST_BY_AUTH
HEADER_GD_PCBANG_REQUEST_IP_LIST = 111,
HEADER_GD_PCBANG_CLEAR_IP_LIST = 112,
HEADER_GD_PCBANG_INSERT_IP = 113,
// END_OF_PCBANG_IP_LIST_BY_AUTH
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,
// AUCTION
#ifdef __AUCTION__
HEADER_GD_GET_AUCTION_LIST = 135,
HEADER_GD_COMMAND_AUCTION = 136,
#endif
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,
#ifdef __AUCTION__
HEADER_DG_AUCTION_RESULT = 178,
#endif
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,
};
/* ----------------------------------------------
* table
* ----------------------------------------------
*/
/* game Server -> DB Server */
#pragma pack(1)
enum ERequestChargeType
{
ERequestCharge_Cash = 0,
ERequestCharge_Mileage,
};
typedef struct SRequestChargeCash
{
DWORD dwAID; // id(primary key) - Account Table
DWORD dwAmount;
ERequestChargeType eChargeType;
} TRequestChargeCash;
typedef struct SSimplePlayer
{
DWORD dwID;
char szName[CHARACTER_NAME_MAX_LEN + 1];
BYTE byJob;
BYTE byLevel;
DWORD dwPlayMinutes;
BYTE byST, byHT, byDX, byIQ;
WORD wMainPart;
BYTE bChangeName;
WORD wHairPart;
BYTE bDummy[4];
LONG x, y;
LONG lAddr;
WORD wPort;
BYTE skill_group;
} TSimplePlayer;
typedef struct SAccountTable
{
DWORD 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];
BYTE bEmpire;
TSimplePlayer players[PLAYER_PER_ACCOUNT];
} TAccountTable;
typedef struct SPacketDGCreateSuccess
{
BYTE bAccountCharacterIndex;
TSimplePlayer player;
} TPacketDGCreateSuccess;
typedef struct TPlayerItemAttribute
{
BYTE bType;
WORD sValue;
} TPlayerItemAttribute;
typedef struct SPlayerItem
{
DWORD id;
BYTE window;
WORD pos;
DWORD count;
DWORD vnum;
LONG alSockets[ITEM_SOCKET_MAX_NUM]; // ¼ÒÄϹøÈ£
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
DWORD owner;
} TPlayerItem;
typedef struct SQuickslot
{
BYTE type;
BYTE pos;
} TQuickslot;
typedef struct SPlayerSkill
{
BYTE bMasterType;
BYTE bLevel;
time_t tNextRead;
} TPlayerSkill;
struct THorseInfo
{
BYTE bLevel;
BYTE bRiding;
WORD sStamina;
WORD sHealth;
DWORD dwHorseHealthDropTime;
};
typedef struct SPlayerTable
{
DWORD id;
char name[CHARACTER_NAME_MAX_LEN + 1];
char ip[IP_ADDRESS_LENGTH + 1];
WORD job;
BYTE voice;
BYTE level;
BYTE level_step;
WORD st, ht, dx, iq;
DWORD exp;
INT gold;
BYTE dir;
INT x, y, z;
INT lMapIndex;
LONG lExitX, lExitY;
LONG lExitMapIndex;
WORD hp;
WORD sp;
WORD sRandomHP;
WORD sRandomSP;
DWORD playtime;
WORD stat_point;
WORD skill_point;
WORD sub_skill_point;
WORD horse_skill_point;
TPlayerSkill skills[SKILL_MAX_NUM];
TQuickslot quickslot[QUICKSLOT_MAX_NUM];
BYTE part_base;
WORD parts[PART_MAX_NUM];
WORD stamina;
BYTE skill_group;
LONG lAlignment;
char szMobile[MOBILE_MAX_LEN + 1];
WORD stat_reset_count;
THorseInfo horse;
DWORD logoff_interval;
DWORD aiPremiumTimes[PREMIUM_MAX_NUM];
} TPlayerTable;
typedef struct SMobSkillLevel
{
DWORD dwVnum;
BYTE bLevel;
} TMobSkillLevel;
typedef struct SEntityTable
{
DWORD dwVnum;
} TEntityTable;
typedef struct SMobTable : public SEntityTable
{
char szName[CHARACTER_NAME_MAX_LEN + 1];
char szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
BYTE bType; // Monster, NPC
BYTE bRank; // PAWN, KNIGHT, KING
BYTE bBattleType; // MELEE, etc..
BYTE bLevel; // Level
BYTE bSize;
DWORD dwGoldMin;
DWORD dwGoldMax;
DWORD dwExp;
DWORD dwMaxHP;
BYTE bRegenCycle;
BYTE bRegenPercent;
WORD wDef;
DWORD dwAIFlag;
DWORD dwRaceFlag;
DWORD dwImmuneFlag;
BYTE bStr, bDex, bCon, bInt;
DWORD dwDamageRange[2];
WORD sAttackSpeed;
WORD sMovingSpeed;
BYTE bAggresiveHPPct;
WORD wAggressiveSight;
WORD wAttackRange;
char cEnchants[MOB_ENCHANTS_MAX_NUM];
char cResists[MOB_RESISTS_MAX_NUM];
DWORD dwResurrectionVnum;
DWORD dwDropItemVnum;
BYTE bMountCapacity;
BYTE bOnClickType;
BYTE bEmpire;
char szFolder[64 + 1];
float fDamMultiply;
DWORD dwSummonVnum;
DWORD dwDrainSP;
DWORD dwMobColor;
DWORD dwPolymorphItemVnum;
TMobSkillLevel Skills[MOB_SKILL_MAX_NUM];
BYTE bBerserkPoint;
BYTE bStoneSkinPoint;
BYTE bGodSpeedPoint;
BYTE bDeathBlowPoint;
BYTE bRevivePoint;
} TMobTable;
typedef struct SSkillTable
{
DWORD dwVnum;
char szName[32 + 1];
BYTE bType;
BYTE bMaxLevel;
DWORD 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];
DWORD dwFlag;
DWORD dwAffectFlag;
// Data for secondary skill
char szPointOn2[64];
char szPointPoly2[100 + 1];
char szDurationPoly2[100 + 1];
DWORD dwAffectFlag2;
// Data for grand master point
char szPointOn3[64];
char szPointPoly3[100 + 1];
char szDurationPoly3[100 + 1];
BYTE bLevelStep;
BYTE bLevelLimit;
DWORD preSkillVnum;
BYTE preSkillLevel;
LONG lMaxHit;
char szSplashAroundDamageAdjustPoly[100 + 1];
BYTE bSkillAttrType;
DWORD dwTargetRange;
} TSkillTable;
typedef struct SShopItemTable
{
DWORD vnum;
BYTE count;
TItemPos pos; // PC »óÁ¡¿¡¸¸ ÀÌ¿ë
DWORD price; // PC, shop_table_ex.txt »óÁ¡¿¡¸¸ ÀÌ¿ë
BYTE display_pos; // PC, shop_table_ex.txt »óÁ¡¿¡¸¸ ÀÌ¿ë, º¸ÀÏ À§Ä¡.
} TShopItemTable;
typedef struct SShopTable
{
DWORD dwVnum;
DWORD dwNPCVnum;
BYTE byItemCount;
TShopItemTable items[SHOP_HOST_ITEM_MAX_NUM];
} TShopTable;
#define QUEST_NAME_MAX_LEN 32
#define QUEST_STATE_MAX_LEN 64
typedef struct SQuestTable
{
DWORD dwPID;
char szName[QUEST_NAME_MAX_LEN + 1];
char szState[QUEST_STATE_MAX_LEN + 1];
LONG lValue;
} TQuestTable;
typedef struct SItemLimit
{
BYTE bType;
LONG lValue;
} TItemLimit;
typedef struct SItemApply
{
BYTE bType;
LONG lValue;
} TItemApply;
typedef struct SItemTable : public SEntityTable
{
DWORD dwVnumRange;
char szName[ITEM_NAME_MAX_LEN + 1];
char szLocaleName[ITEM_NAME_MAX_LEN + 1];
BYTE bType;
BYTE bSubType;
BYTE bWeight;
BYTE bSize;
DWORD dwAntiFlags;
DWORD dwFlags;
DWORD dwWearFlags;
DWORD dwImmuneFlag;
DWORD dwGold;
DWORD dwShopBuyPrice;
TItemLimit aLimits[ITEM_LIMIT_MAX_NUM];
TItemApply aApplies[ITEM_APPLY_MAX_NUM];
LONG alValues[ITEM_VALUES_MAX_NUM];
LONG alSockets[ITEM_SOCKET_MAX_NUM];
DWORD dwRefinedVnum;
WORD wRefineSet;
BYTE bAlterToMagicItemPct;
BYTE bSpecular;
BYTE bGainSocketPct;
WORD 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];
DWORD dwApplyIndex;
DWORD dwProb;
LONG lValues[5];
BYTE 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
{
DWORD account_id;
DWORD player_id;
BYTE account_index; /* account ¿¡¼­ÀÇ À§Ä¡ */
} TPlayerLoadPacket;
typedef struct SPlayerCreatePacket
{
char login[LOGIN_MAX_LEN + 1];
char passwd[PASSWD_MAX_LEN + 1];
DWORD account_id;
BYTE account_index;
TPlayerTable player_table;
} TPlayerCreatePacket;
typedef struct SPlayerDeletePacket
{
char login[LOGIN_MAX_LEN + 1];
DWORD player_id;
BYTE 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
{
DWORD dwCount;
} TPlayerCountPacket;
#define SAFEBOX_MAX_NUM 135
#define SAFEBOX_PASSWORD_MAX_LEN 6
typedef struct SSafeboxTable
{
DWORD dwID;
BYTE bSize;
DWORD dwGold;
WORD wItemCount;
} TSafeboxTable;
typedef struct SSafeboxChangeSizePacket
{
DWORD dwID;
BYTE bSize;
} TSafeboxChangeSizePacket;
typedef struct SSafeboxLoadPacket
{
DWORD dwID;
char szLogin[LOGIN_MAX_LEN + 1];
char szPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
} TSafeboxLoadPacket;
typedef struct SSafeboxChangePasswordPacket
{
DWORD dwID;
char szOldPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
char szNewPassword[SAFEBOX_PASSWORD_MAX_LEN + 1];
} TSafeboxChangePasswordPacket;
typedef struct SSafeboxChangePasswordPacketAnswer
{
BYTE flag;
} TSafeboxChangePasswordPacketAnswer;
typedef struct SEmpireSelectPacket
{
DWORD dwAccountID;
BYTE bEmpire;
} TEmpireSelectPacket;
typedef struct SPacketGDSetup
{
char szPublicIP[16]; // Public IP which listen to users
BYTE bChannel; // ä³Î
WORD wListenPort; // Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇÏ´Â Æ÷Æ® ¹øÈ£
WORD wP2PPort; // ¼­¹ö³¢¸® ¿¬°á ½ÃÅ°´Â P2P Æ÷Æ® ¹øÈ£
LONG alMaps[32];
DWORD dwLoginCount;
BYTE bAuthServer;
} TPacketGDSetup;
typedef struct SPacketDGMapLocations
{
BYTE bCount;
} TPacketDGMapLocations;
typedef struct SMapLocation
{
LONG alMaps[32];
char szHost[MAX_HOST_LENGTH + 1];
WORD wPort;
} TMapLocation;
typedef struct SPacketDGP2P
{
char szHost[MAX_HOST_LENGTH + 1];
WORD wPort;
BYTE bChannel;
} TPacketDGP2P;
typedef struct SPacketGDDirectEnter
{
char login[LOGIN_MAX_LEN + 1];
char passwd[PASSWD_MAX_LEN + 1];
BYTE index;
} TPacketGDDirectEnter;
typedef struct SPacketDGDirectEnter
{
TAccountTable accountTable;
TPlayerTable playerTable;
} TPacketDGDirectEnter;
typedef struct SPacketGuildSkillUpdate
{
DWORD guild_id;
DWORD amount;
BYTE skill_levels[12];
BYTE skill_point;
BYTE save;
} TPacketGuildSkillUpdate;
typedef struct SPacketGuildExpUpdate
{
DWORD guild_id;
DWORD amount;
} TPacketGuildExpUpdate;
typedef struct SPacketGuildChangeMemberData
{
DWORD guild_id;
DWORD pid;
DWORD offer;
BYTE level;
BYTE grade;
} TPacketGuildChangeMemberData;
typedef struct SPacketDGLoginAlready
{
char szLogin[LOGIN_MAX_LEN + 1];
} TPacketDGLoginAlready;
typedef struct TPacketAffectElement
{
DWORD dwType;
BYTE bApplyOn;
LONG lApplyValue;
DWORD dwFlag;
LONG lDuration;
LONG lSPCost;
} TPacketAffectElement;
typedef struct SPacketGDAddAffect
{
DWORD dwPID;
TPacketAffectElement elem;
} TPacketGDAddAffect;
typedef struct SPacketGDRemoveAffect
{
DWORD dwPID;
DWORD dwType;
BYTE bApplyOn;
} TPacketGDRemoveAffect;
typedef struct SPacketGDHighscore
{
DWORD dwPID;
LONG lValue;
char cDir;
char szBoard[21];
} TPacketGDHighscore;
typedef struct SPacketPartyCreate
{
DWORD dwLeaderPID;
} TPacketPartyCreate;
typedef struct SPacketPartyDelete
{
DWORD dwLeaderPID;
} TPacketPartyDelete;
typedef struct SPacketPartyAdd
{
DWORD dwLeaderPID;
DWORD dwPID;
BYTE bState;
} TPacketPartyAdd;
typedef struct SPacketPartyRemove
{
DWORD dwLeaderPID;
DWORD dwPID;
} TPacketPartyRemove;
typedef struct SPacketPartyStateChange
{
DWORD dwLeaderPID;
DWORD dwPID;
BYTE bRole;
BYTE bFlag;
} TPacketPartyStateChange;
typedef struct SPacketPartySetMemberLevel
{
DWORD dwLeaderPID;
DWORD dwPID;
BYTE bLevel;
} TPacketPartySetMemberLevel;
typedef struct SPacketGDBoot
{
DWORD dwItemIDRange[2];
char szIP[16];
} TPacketGDBoot;
typedef struct SPacketGuild
{
DWORD dwGuild;
DWORD dwInfo;
} TPacketGuild;
typedef struct SPacketGDGuildAddMember
{
DWORD dwPID;
DWORD dwGuild;
BYTE bGrade;
} TPacketGDGuildAddMember;
typedef struct SPacketDGGuildMember
{
DWORD dwPID;
DWORD dwGuild;
BYTE bGrade;
BYTE isGeneral;
BYTE bJob;
BYTE bLevel;
DWORD dwOffer;
char szName[CHARACTER_NAME_MAX_LEN + 1];
} TPacketDGGuildMember;
typedef struct SPacketGuildWar
{
BYTE bType;
BYTE bWar;
DWORD dwGuildFrom;
DWORD dwGuildTo;
LONG lWarPrice;
LONG lInitialScore;
} TPacketGuildWar;
// Game -> DB : »ó´ëÀû º¯È­°ª
// DB -> Game : ÅäÅ»µÈ ÃÖÁ¾°ª
typedef struct SPacketGuildWarScore
{
DWORD dwGuildGainPoint;
DWORD dwGuildOpponent;
LONG lScore;
LONG lBetScore;
} TPacketGuildWarScore;
typedef struct SRefineMaterial
{
DWORD vnum;
DWORD count;
} TRefineMaterial;
typedef struct SRefineTable
{
//DWORD src_vnum;
//DWORD result_vnum;
DWORD id;
BYTE material_count;
DWORD cost; // ¼Ò¿ä ºñ¿ë
DWORD prob; // È®·ü
TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
} TRefineTable;
typedef struct SBanwordTable
{
char szWord[BANWORD_MAX_LEN + 1];
} TBanwordTable;
typedef struct SPacketGDChangeName
{
DWORD pid;
char name[CHARACTER_NAME_MAX_LEN + 1];
} TPacketGDChangeName;
typedef struct SPacketDGChangeName
{
DWORD pid;
char name[CHARACTER_NAME_MAX_LEN + 1];
} TPacketDGChangeName;
typedef struct SPacketGuildLadder
{
DWORD dwGuild;
LONG lLadderPoint;
LONG lWin;
LONG lDraw;
LONG lLoss;
} TPacketGuildLadder;
typedef struct SPacketGuildLadderPoint
{
DWORD dwGuild;
LONG 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
{
DWORD dwGuild;
DWORD dwSkillVnum;
DWORD dwCooltime;
} TPacketGuildUseSkill;
typedef struct SPacketGuildSkillUsableChange
{
DWORD dwGuild;
DWORD dwSkillVnum;
BYTE bUsable;
} TPacketGuildSkillUsableChange;
typedef struct SPacketGDLoginKey
{
DWORD dwAccountID;
DWORD dwLoginKey;
} TPacketGDLoginKey;
typedef struct SPacketGDAuthLogin
{
DWORD dwID;
DWORD dwLoginKey;
char szLogin[LOGIN_MAX_LEN + 1];
char szSocialID[SOCIAL_ID_MAX_LEN + 1];
DWORD adwClientKey[4];
BYTE bBillType;
DWORD dwBillID;
DWORD iPremiumTimes[PREMIUM_MAX_NUM];
} TPacketGDAuthLogin;
typedef struct SPacketGDLoginByKey
{
char szLogin[LOGIN_MAX_LEN + 1];
DWORD dwLoginKey;
DWORD adwClientKey[4];
char szIP[MAX_HOST_LENGTH + 1];
} TPacketGDLoginByKey;
/**
* @version 05/06/08 Bang2ni - Áö¼Ó½Ã°£ Ãß°¡
*/
typedef struct SPacketGiveGuildPriv
{
BYTE type;
DWORD value;
DWORD guild_id;
time_t duration_sec; ///< Áö¼Ó½Ã°£
} TPacketGiveGuildPriv;
typedef struct SPacketGiveEmpirePriv
{
BYTE type;
DWORD value;
BYTE empire;
time_t duration_sec;
} TPacketGiveEmpirePriv;
typedef struct SPacketGiveCharacterPriv
{
BYTE type;
DWORD value;
DWORD pid;
} TPacketGiveCharacterPriv;
typedef struct SPacketRemoveGuildPriv
{
BYTE type;
DWORD guild_id;
} TPacketRemoveGuildPriv;
typedef struct SPacketRemoveEmpirePriv
{
BYTE type;
BYTE empire;
} TPacketRemoveEmpirePriv;
typedef struct SPacketDGChangeCharacterPriv
{
BYTE type;
DWORD value;
DWORD pid;
BYTE bLog;
} TPacketDGChangeCharacterPriv;
/**
* @version 05/06/08 Bang2ni - Áö¼Ó½Ã°£ Ãß°¡
*/
typedef struct SPacketDGChangeGuildPriv
{
BYTE type;
DWORD value;
DWORD guild_id;
BYTE bLog;
time_t end_time_sec; ///< Áö¼Ó½Ã°£
} TPacketDGChangeGuildPriv;
typedef struct SPacketDGChangeEmpirePriv
{
BYTE type;
DWORD value;
BYTE empire;
BYTE bLog;
time_t end_time_sec;
} TPacketDGChangeEmpirePriv;
typedef struct SPacketMoneyLog
{
BYTE type;
DWORD vnum;
INT gold;
} TPacketMoneyLog;
typedef struct SPacketGDGuildMoney
{
DWORD dwGuild;
INT iGold;
} TPacketGDGuildMoney;
typedef struct SPacketDGGuildMoneyChange
{
DWORD dwGuild;
INT iTotalGold;
} TPacketDGGuildMoneyChange;
typedef struct SPacketDGGuildMoneyWithdraw
{
DWORD dwGuild;
INT iChangeGold;
} TPacketDGGuildMoneyWithdraw;
typedef struct SPacketGDGuildMoneyWithdrawGiveReply
{
DWORD dwGuild;
INT iChangeGold;
BYTE bGiveSuccess;
} TPacketGDGuildMoneyWithdrawGiveReply;
typedef struct SPacketSetEventFlag
{
char szFlagName[EVENT_FLAG_NAME_MAX_LEN + 1];
LONG lValue;
} TPacketSetEventFlag;
typedef struct SPacketBillingLogin
{
DWORD dwLoginKey;
BYTE bLogin;
} TPacketBillingLogin;
typedef struct SPacketBillingRepair
{
DWORD dwLoginKey;
char szLogin[LOGIN_MAX_LEN + 1];
char szHost[MAX_HOST_LENGTH + 1];
} TPacketBillingRepair;
typedef struct SPacketBillingExpire
{
char szLogin[LOGIN_MAX_LEN + 1];
BYTE bBillType;
DWORD dwRemainSeconds;
} TPacketBillingExpire;
typedef struct SPacketLoginOnSetup
{
DWORD dwID;
char szLogin[LOGIN_MAX_LEN + 1];
char szSocialID[SOCIAL_ID_MAX_LEN + 1];
char szHost[MAX_HOST_LENGTH + 1];
DWORD dwLoginKey;
DWORD adwClientKey[4];
} TPacketLoginOnSetup;
typedef struct SPacketGDCreateObject
{
DWORD dwVnum;
DWORD dwLandID;
INT lMapIndex;
INT x, y;
float xRot;
float yRot;
float zRot;
} TPacketGDCreateObject;
typedef struct SPacketGDHammerOfTor
{
DWORD key;
DWORD delay;
} TPacketGDHammerOfTor;
typedef struct SPacketGDVCard
{
DWORD 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
{
DWORD dwID;
DWORD dwGuildFrom;
DWORD dwGuildTo;
DWORD dwTime;
BYTE bType;
LONG lWarPrice;
LONG lInitialScore;
bool bStarted;
DWORD dwBetFrom;
DWORD dwBetTo;
LONG lPowerFrom;
LONG lPowerTo;
LONG lHandicap;
} TGuildWarReserve;
typedef struct
{
DWORD dwWarID;
char szLogin[LOGIN_MAX_LEN + 1];
DWORD dwGold;
DWORD dwGuild;
} TPacketGDGuildWarBet;
// Marriage
typedef struct
{
DWORD dwPID1;
DWORD dwPID2;
time_t tMarryTime;
char szName1[CHARACTER_NAME_MAX_LEN + 1];
char szName2[CHARACTER_NAME_MAX_LEN + 1];
} TPacketMarriageAdd;
typedef struct
{
DWORD dwPID1;
DWORD dwPID2;
INT iLovePoint;
BYTE byMarried;
} TPacketMarriageUpdate;
typedef struct
{
DWORD dwPID1;
DWORD dwPID2;
} TPacketMarriageRemove;
typedef struct
{
DWORD dwPID1;
DWORD dwPID2;
} TPacketWeddingRequest;
typedef struct
{
DWORD dwPID1;
DWORD dwPID2;
DWORD dwMapIndex;
} TPacketWeddingReady;
typedef struct
{
DWORD dwPID1;
DWORD dwPID2;
} TPacketWeddingStart;
typedef struct
{
DWORD dwPID1;
DWORD dwPID2;
} TPacketWeddingEnd;
/// °³ÀλóÁ¡ °¡°ÝÁ¤º¸ÀÇ Çì´õ. °¡º¯ ÆÐŶÀ¸·Î ÀÌ µÚ¿¡ byCount ¸¸Å­ÀÇ TItemPriceInfo °¡ ¿Â´Ù.
typedef struct SPacketMyshopPricelistHeader
{
DWORD dwOwnerID; ///< °¡°ÝÁ¤º¸¸¦ °¡Áø Ç÷¹À̾î ID
BYTE byCount; ///< °¡°ÝÁ¤º¸ °¹¼ö
} TPacketMyshopPricelistHeader;
/// °³ÀλóÁ¡ÀÇ ´ÜÀÏ ¾ÆÀÌÅÛ¿¡ ´ëÇÑ °¡°ÝÁ¤º¸
typedef struct SItemPriceInfo
{
DWORD dwVnum; ///< ¾ÆÀÌÅÛ vnum
DWORD dwPrice; ///< °¡°Ý
} TItemPriceInfo;
/// °³ÀλóÁ¡ ¾ÆÀÌÅÛ °¡°ÝÁ¤º¸ ¸®½ºÆ® Å×À̺í
typedef struct SItemPriceListTable
{
DWORD dwOwnerID; ///< °¡°ÝÁ¤º¸¸¦ °¡Áø Ç÷¹À̾î ID
BYTE byCount; ///< °¡°ÝÁ¤º¸ ¸®½ºÆ®ÀÇ °¹¼ö
TItemPriceInfo aPriceInfo[SHOP_PRICELIST_MAX_NUM]; ///< °¡°ÝÁ¤º¸ ¸®½ºÆ®
} TItemPriceListTable;
typedef struct
{
char szName[CHARACTER_NAME_MAX_LEN + 1];
LONG lDuration;
} TPacketBlockChat;
// PCBANG_IP_LIST
typedef struct SPacketPCBangIP
{
DWORD id;
DWORD ip;
} TPacketPCBangIP;
// END_OF_PCBANG_IP_LIST
//ADMIN_MANAGER
typedef struct TAdminInfo
{
DWORD m_ID; //°íÀ¯ID
char m_szAccount[32]; //°èÁ¤
char m_szName[32]; //ij¸¯ÅÍÀ̸§
char m_szContactIP[16]; //Á¢±Ù¾ÆÀÌÇÇ
char m_szServerIP[16]; //¼­¹ö¾ÆÀÌÇÇ
DWORD 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
{
DWORD pid[4]; // ±ºÁÖÀÇ PID
int64_t money[4]; // ±ºÁÖÀÇ º°°³ µ·
char name[4][32]; // ±ºÁÖÀÇ À̸§
char date[4][32]; // ±ºÁÖ µî·Ï ³¯Â¥
} MonarchInfo;
typedef struct TMonarchElectionInfo
{
DWORD pid; // ÅõÇ¥ ÇÑ»ç¶÷ PID
DWORD selectedpid; // ÅõÇ¥ ´çÇÑ PID ( ±ºÁÖ Âü°¡ÀÚ )
char date[32]; // ÅõÇ¥ ³¯Â¥
} MonarchElectionInfo;
// ±ºÁÖ Ã⸶ÀÚ
typedef struct tMonarchCandidacy
{
DWORD pid;
char name[32];
char date[32];
} MonarchCandidacy;
typedef struct tChangeMonarchLord
{
BYTE bEmpire;
DWORD dwPID;
} TPacketChangeMonarchLord;
typedef struct tChangeMonarchLordACK
{
BYTE bEmpire;
DWORD dwPID;
char szName[32];
char szDate[32];
} TPacketChangeMonarchLordACK;
// Block Country Ip
typedef struct tBlockCountryIp
{
DWORD ip_from;
DWORD ip_to;
} TPacketBlockCountryIp;
enum EBlockExceptionCommand
{
BLOCK_EXCEPTION_CMD_ADD = 1,
BLOCK_EXCEPTION_CMD_DEL = 2,
};
// Block Exception Account
typedef struct tBlockException
{
BYTE cmd; // 1 == add, 2 == delete
char login[LOGIN_MAX_LEN + 1];
}TPacketBlockException;
typedef struct tChangeGuildMaster
{
DWORD dwGuildID;
DWORD idFrom;
DWORD idTo;
} TPacketChangeGuildMaster;
typedef struct tItemIDRange
{
DWORD dwMin;
DWORD dwMax;
DWORD dwUsableItemIDMin;
} TItemIDRangeTable;
typedef struct tUpdateHorseName
{
DWORD dwPlayerID;
char szHorseName[CHARACTER_NAME_MAX_LEN + 1];
} TPacketUpdateHorseName;
typedef struct tDC
{
char login[LOGIN_MAX_LEN + 1];
} TPacketDC;
typedef struct tNeedLoginLogInfo
{
DWORD dwPlayerID;
} TPacketNeedLoginLogInfo;
//µ¶ÀÏ ¼±¹° ¾Ë¸² ±â´É Å×½ºÆ®¿ë ÆÐŶ Á¤º¸
typedef struct tItemAwardInformer
{
char login[LOGIN_MAX_LEN + 1];
char command[20]; //¸í·É¾î
DWORD vnum; //¾ÆÀÌÅÛ
} TPacketItemAwardInfromer;
// ¼±¹° ¾Ë¸² ±â´É »èÁ¦¿ë ÆÐŶ Á¤º¸
typedef struct tDeleteAwardID
{
DWORD dwID;
} TPacketDeleteAwardID;
typedef struct SChannelStatus
{
WORD nPort;
BYTE bStatus;
} TChannelStatus;
#pragma pack()
#endif