noisiv 1
noisiv
Manwe Work 1
Manwe Work
romegames 1
romegames
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Bvural41 1
Bvural41
NovaLst 1
NovaLst
bikral 1
bikral
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Cevaplandı ELDİVEN SİSTEMİ

  • Konuyu başlatan Konuyu başlatan TREmreAta
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 7
  • Görüntüleme Görüntüleme 753

TREmreAta

Web Developer
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
TM Üye
Katılım
22 Eki 2019
Konular
120
Mesajlar
556
Çözüm
23
Online süresi
1mo 26d
Reaksiyon Skoru
150
Altın Konu
1
TM Yaşı
6 Yıl 7 Ay 23 Gün
Başarım Puanı
131
MmoLira
6,363
DevLira
12
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

https://forum.turkmmo.com/konu/3832...stirilmis-server-files-tum-dosyalar-sizlerle/ filesten eldiven sistemini söktüm eklemeyi yaptım eksik bir şey yok ama itemi takınca envanterde gözükmüyor rubinum envanter sistemi kullanıyorum uiinventoryden gerekli eklemeleri yaptım eklemeyi
Kod:
self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), itemCount)
şekilde yapınca hiç gözükmüyor ama
Kod:
self.wndEquip.SetItemSlot(item.EQUIPMENT_GLOVE, getItemVNum(item.EQUIPMENT_GLOVE), 0)
bu şekilde ekleyince envanterin 25. slotunda ne varsa o gözüküyor itemin yerinde
 
EmreAta Merhaba, Ribunum envanteri hiç kullanmadım. Fakat normal'de GameType.h 'den Wear olarak slot açıyoruz. GameType.h'de yapacağımız işlem çok önemli burada verilen sayı değerleri sizin EWearPositions'daki sıranıza göre alınıyor.

Buraya GameType.h ve Common/length.h dosyanızı bırakır mısınız.
 
[CODE title="length.h"]#ifndef __INC_METIN_II_LENGTH_H__
#define __INC_METIN_II_LENGTH_H__

#include "CommonDefines.h"

#define WORD_MAX 0xffff#ifndef __INC_METIN_II_LENGTH_H__
#define __INC_METIN_II_LENGTH_H__

#include "CommonDefines.h"

#define WORD_MAX 0xffff
enum EMisc
{
MAX_HOST_LENGTH = 15,
IP_ADDRESS_LENGTH = 15,
LOGIN_MAX_LEN = 30,
PASSWD_MAX_LEN = 16,
#ifdef ENABLE_PLAYER_PER_ACCOUNT5
PLAYER_PER_ACCOUNT = 5,
#else
PLAYER_PER_ACCOUNT = 4,
#endif
ACCOUNT_STATUS_MAX_LEN = 8,
CHARACTER_NAME_MAX_LEN = 24,
SHOP_SIGN_MAX_LEN = 32,
INVENTORY_PAGE_COLUMN = 5, // 5 (default)
INVENTORY_PAGE_ROW = 9, // 9 (default)
INVENTORY_PAGE_SIZE = INVENTORY_PAGE_COLUMN * INVENTORY_PAGE_ROW,
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
INVENTORY_PAGE_COUNT = 4, // 2 (default)
#else
INVENTORY_PAGE_COUNT = 2, // 2 (default)
#endif
INVENTORY_MAX_NUM = INVENTORY_PAGE_SIZE * INVENTORY_PAGE_COUNT, // 90 (default)
ABILITY_MAX_NUM = 50,
EMPIRE_MAX_NUM = 4,
BANWORD_MAX_LEN = 24,
SMS_MAX_LEN = 80,
MOBILE_MAX_LEN = 32,
SOCIAL_ID_MAX_LEN = 18,

GUILD_NAME_MAX_LEN = 12,

SHOP_HOST_ITEM_MAX_NUM = 40,
SHOP_GUEST_ITEM_MAX_NUM = 18,

SHOP_PRICELIST_MAX_NUM = 40,

CHAT_MAX_LEN = 512,

QUICKSLOT_MAX_NUM = 36,

JOURNAL_MAX_NUM = 2,

QUERY_MAX_LEN = 8192,

FILE_MAX_LEN = 128,

PLAYER_EXP_TABLE_MAX = 120,
PLAYER_MAX_LEVEL_CONST = 250,

GUILD_MAX_LEVEL = 20,
MOB_MAX_LEVEL = 100,

ATTRIBUTE_MAX_VALUE = 20,
CHARACTER_PATH_MAX_NUM = 64,
SKILL_MAX_NUM = 255,
SKILLBOOK_DELAY_MIN = 64800,
SKILLBOOK_DELAY_MAX = 108000,
SKILL_MAX_LEVEL = 40,

APPLY_NAME_MAX_LEN = 32,
EVENT_FLAG_NAME_MAX_LEN = 32,

MOB_SKILL_MAX_NUM = 5,

POINT_MAX_NUM = 255,
DRAGON_SOUL_BOX_SIZE = 32,
DRAGON_SOUL_BOX_COLUMN_NUM = 8,
DRAGON_SOUL_BOX_ROW_NUM = DRAGON_SOUL_BOX_SIZE / DRAGON_SOUL_BOX_COLUMN_NUM,
DRAGON_SOUL_REFINE_GRID_SIZE = 15,
MAX_AMOUNT_OF_MALL_BONUS = 20,

WEAR_MAX_NUM = 32,


#ifdef __ENABLE_NEW_OFFLINESHOP__
OFFLINE_SHOP_NAME_MAX_LEN = 40 + CHARACTER_NAME_MAX_LEN + 1,
OFFLINESHOP_DURATION_MAX_MINUTES = 8 * 24 * 60,
OFFLINESHOP_MAX_SEARCH_RESULT = 250,
OFFLINESHOP_SECONDS_PER_SEARCH = 15,
//*new check about auction offers
OFFLINESHOP_SECONDS_PER_OFFER = 7,
#ifdef __ENABLE_CHEQUE_SYSTEM__
YANG_PER_CHEQUE = 100000000,
#endif
#endif

//LIMIT_GOLD
GOLD_MAX = 2000000000,

MAX_PASSPOD = 8,


//END_LIMIT_GOLD

OPENID_AUTHKEY_LEN = 32,

SHOP_TAB_NAME_MAX = 32,
SHOP_TAB_COUNT_MAX = 3,

BELT_INVENTORY_SLOT_WIDTH = 4,
BELT_INVENTORY_SLOT_HEIGHT = 4,

BELT_INVENTORY_SLOT_COUNT = BELT_INVENTORY_SLOT_WIDTH * BELT_INVENTORY_SLOT_HEIGHT,

#ifdef ENABLE_SPECIAL_STORAGE
SPECIAL_INVENTORY_PAGE_COUNT = 4,
SPECIAL_INVENTORY_PAGE_SIZE = 45,
SPECIAL_INVENTORY_MAX_NUM = SPECIAL_INVENTORY_PAGE_SIZE * SPECIAL_INVENTORY_PAGE_COUNT,
#endif

};

enum EMatrixCard
{
MATRIX_CODE_MAX_LEN = 192,
MATRIX_ANSWER_MAX_LEN = 8,
};

enum EWearPositions
{
WEAR_BODY, // 0
WEAR_HEAD, // 1
WEAR_FOOTS, // 2
WEAR_WRIST, // 3
WEAR_WEAPON, // 4
WEAR_NECK, // 5
WEAR_EAR, // 6
WEAR_UNIQUE1, // 7
WEAR_UNIQUE2, // 8
WEAR_ARROW, // 9
WEAR_SHIELD, // 10
WEAR_ABILITY1, // 11
WEAR_ABILITY2, // 12
WEAR_ABILITY3, // 13
WEAR_ABILITY4, // 14
WEAR_ABILITY5, // 15
WEAR_ABILITY6, // 16
WEAR_ABILITY7, // 17
WEAR_ABILITY8, // 18
WEAR_COSTUME_BODY, // 19
WEAR_COSTUME_HAIR, // 20

#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
WEAR_COSTUME_MOUNT,//21
#endif
#ifdef ENABLE_ACCE_SYSTEM
WEAR_COSTUME_ACCE,//22
#endif
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
WEAR_COSTUME_WEAPON,//23
#endif
#ifdef __AURA_SYSTEM__
WEAR_COSTUME_AURA,//24
#endif

WEAR_RING1,//25
WEAR_RING2,//26
WEAR_BELT,//27
#ifdef ENABLE_PENDANT_SYSTEM
WEAR_PENDANT,//28
#endif
WEAR_GLOVE, //29
WEAR_MAX = 32 //
};

enum EDragonSoulDeckType
{
DRAGON_SOUL_DECK_0,
DRAGON_SOUL_DECK_1,
DRAGON_SOUL_DECK_MAX_NUM = 2,

DRAGON_SOUL_DECK_RESERVED_MAX_NUM = 3,
};

enum ESex
{
SEX_MALE,
SEX_FEMALE
};

enum EDirection
{
DIR_NORTH,
DIR_NORTHEAST,
DIR_EAST,
DIR_SOUTHEAST,
DIR_SOUTH,
DIR_SOUTHWEST,
DIR_WEST,
DIR_NORTHWEST,
DIR_MAX_NUM
};

#define ABILITY_MAX_LEVEL 10

enum EAbilityDifficulty
{
DIFFICULTY_EASY,
DIFFICULTY_NORMAL,
DIFFICULTY_HARD,
DIFFICULTY_VERY_HARD,
DIFFICULTY_NUM_TYPES
};

enum EAbilityCategory
{
CATEGORY_PHYSICAL,
CATEGORY_MENTAL,
CATEGORY_ATTRIBUTE,
CATEGORY_NUM_TYPES
};

enum EJobs
{
JOB_WARRIOR,
JOB_ASSASSIN,
JOB_SURA,
JOB_SHAMAN,
#ifdef ENABLE_WOLFMAN_CHARACTER
JOB_WOLFMAN,
#endif
JOB_MAX_NUM
};

enum ESkillGroups
{
SKILL_GROUP_MAX_NUM = 2,
};

enum ERaceFlags
{
RACE_FLAG_ANIMAL = (1 << 0),
RACE_FLAG_UNDEAD = (1 << 1),
RACE_FLAG_DEVIL = (1 << 2),
RACE_FLAG_HUMAN = (1 << 3),
RACE_FLAG_ORC = (1 << 4),
RACE_FLAG_MILGYO = (1 << 5),
RACE_FLAG_INSECT = (1 << 6),
RACE_FLAG_FIRE = (1 << 7),
RACE_FLAG_ICE = (1 << 8),
RACE_FLAG_DESERT = (1 << 9),
RACE_FLAG_TREE = (1 << 10),
RACE_FLAG_ATT_ELEC = (1 << 11),
RACE_FLAG_ATT_FIRE = (1 << 12),
RACE_FLAG_ATT_ICE = (1 << 13),
RACE_FLAG_ATT_WIND = (1 << 14),
RACE_FLAG_ATT_EARTH = (1 << 15),
RACE_FLAG_ATT_DARK = (1 << 16),
RACE_FLAG_ATT_CZ = (1 << 17),
};

enum ELoads
{
LOAD_NONE,
LOAD_LIGHT,
LOAD_NORMAL,
LOAD_HEAVY,
LOAD_MASSIVE
};

enum
{
QUICKSLOT_TYPE_NONE,
QUICKSLOT_TYPE_ITEM,
QUICKSLOT_TYPE_SKILL,
QUICKSLOT_TYPE_COMMAND,
QUICKSLOT_TYPE_MAX_NUM,
};

enum EParts
{
PART_MAIN,
PART_WEAPON,
PART_HEAD,
PART_HAIR,
#ifdef ENABLE_ACCE_SYSTEM
PART_ACCE,
#endif
#ifdef __AURA_SYSTEM__
PART_AURA,
#endif
PART_MAX_NUM,
PART_WEAPON_SUB,
};

enum EChatType
{
CHAT_TYPE_TALKING,
CHAT_TYPE_INFO,
CHAT_TYPE_NOTICE,
CHAT_TYPE_PARTY,
CHAT_TYPE_GUILD,
CHAT_TYPE_COMMAND,
CHAT_TYPE_SHOUT,
CHAT_TYPE_WHISPER,
CHAT_TYPE_BIG_NOTICE,
CHAT_TYPE_MONARCH_NOTICE,
#ifdef ENABLE_DICE_SYSTEM
CHAT_TYPE_DICE_INFO, //11
#endif
CHAT_TYPE_MAX_NUM
};

enum EWhisperType
{
WHISPER_TYPE_NORMAL = 0,
WHISPER_TYPE_NOT_EXIST = 1,
WHISPER_TYPE_TARGET_BLOCKED = 2,
WHISPER_TYPE_SENDER_BLOCKED = 3,
WHISPER_TYPE_ERROR = 4,
WHISPER_TYPE_GM = 5,
WHISPER_TYPE_SYSTEM = 0xFF
};

enum ECharacterPosition
{
POSITION_GENERAL,
POSITION_BATTLE,
POSITION_DYING,
POSITION_SITTING_CHAIR,
POSITION_SITTING_GROUND,
POSITION_INTRO,
POSITION_MAX_NUM
};

enum EGMLevels
{
GM_PLAYER,
GM_LOW_WIZARD,
GM_WIZARD,
GM_HIGH_WIZARD,
GM_GOD,
GM_IMPLEMENTOR,
GM_DISABLE,
};

enum EMobRank
{
MOB_RANK_PAWN,
MOB_RANK_S_PAWN,
MOB_RANK_KNIGHT,
MOB_RANK_S_KNIGHT,
MOB_RANK_BOSS,
MOB_RANK_KING,
MOB_RANK_MAX_NUM
};

enum ECharType
{
CHAR_TYPE_MONSTER,
CHAR_TYPE_NPC,
CHAR_TYPE_STONE,
CHAR_TYPE_WARP,
CHAR_TYPE_DOOR,
CHAR_TYPE_BUILDING,
CHAR_TYPE_PC,
CHAR_TYPE_POLYMORPH_PC,
CHAR_TYPE_HORSE,
CHAR_TYPE_GOTO
};

enum EBattleType
{
BATTLE_TYPE_MELEE,
BATTLE_TYPE_RANGE,
BATTLE_TYPE_MAGIC,
BATTLE_TYPE_SPECIAL,
BATTLE_TYPE_POWER,
BATTLE_TYPE_TANKER,
BATTLE_TYPE_SUPER_POWER,
BATTLE_TYPE_SUPER_TANKER,
BATTLE_TYPE_MAX_NUM
};

enum EApplyTypes
{
APPLY_NONE, // 0
APPLY_MAX_HP, // 1
APPLY_MAX_SP, // 2
APPLY_CON, // 3
APPLY_INT, // 4
APPLY_STR, // 5
APPLY_DEX, // 6
APPLY_ATT_SPEED, // 7
APPLY_MOV_SPEED, // 8
APPLY_CAST_SPEED, // 9
APPLY_HP_REGEN, // 10
APPLY_SP_REGEN, // 11
APPLY_POISON_PCT, // 12
APPLY_STUN_PCT, // 13
APPLY_SLOW_PCT, // 14
APPLY_CRITICAL_PCT, // 15
APPLY_PENETRATE_PCT, // 16
APPLY_ATTBONUS_HUMAN, // 17
APPLY_ATTBONUS_ANIMAL, // 18
APPLY_ATTBONUS_ORC, // 19
APPLY_ATTBONUS_MILGYO, // 20
APPLY_ATTBONUS_UNDEAD, // 21
APPLY_ATTBONUS_DEVIL, // 22
APPLY_STEAL_HP, // 23
APPLY_STEAL_SP, // 24
APPLY_MANA_BURN_PCT, // 25
APPLY_DAMAGE_SP_RECOVER, // 26
APPLY_BLOCK, // 27
APPLY_DODGE, // 28
APPLY_RESIST_SWORD, // 29
APPLY_RESIST_TWOHAND, // 30
APPLY_RESIST_DAGGER, // 31
APPLY_RESIST_BELL, // 32
APPLY_RESIST_FAN, // 33
APPLY_RESIST_BOW, // 34
APPLY_RESIST_FIRE, // 35
APPLY_RESIST_ELEC, // 36
APPLY_RESIST_MAGIC, // 37
APPLY_RESIST_WIND, // 38
APPLY_REFLECT_MELEE, // 39
APPLY_REFLECT_CURSE, // 40
APPLY_POISON_REDUCE, // 41
APPLY_KILL_SP_RECOVER, // 42
APPLY_EXP_DOUBLE_BONUS, // 43
APPLY_GOLD_DOUBLE_BONUS, // 44
APPLY_ITEM_DROP_BONUS, // 45
APPLY_POTION_BONUS, // 46
APPLY_KILL_HP_RECOVER, // 47
APPLY_IMMUNE_STUN, // 48
APPLY_IMMUNE_SLOW, // 49
APPLY_IMMUNE_FALL, // 50
APPLY_SKILL, // 51
APPLY_BOW_DISTANCE, // 52
APPLY_ATT_GRADE_BONUS, // 53
APPLY_DEF_GRADE_BONUS, // 54
APPLY_MAGIC_ATT_GRADE, // 55
APPLY_MAGIC_DEF_GRADE, // 56
APPLY_CURSE_PCT, // 57
APPLY_MAX_STAMINA, // 58
APPLY_ATTBONUS_WARRIOR, // 59
APPLY_ATTBONUS_ASSASSIN, // 60
APPLY_ATTBONUS_SURA, // 61
APPLY_ATTBONUS_SHAMAN, // 62
APPLY_ATTBONUS_MONSTER, // 63
APPLY_MALL_ATTBONUS,
APPLY_MALL_DEFBONUS,
APPLY_MALL_EXPBONUS,
APPLY_MALL_ITEMBONUS,
APPLY_MALL_GOLDBONUS,
APPLY_MAX_HP_PCT,
APPLY_MAX_SP_PCT,
APPLY_SKILL_DAMAGE_BONUS,
APPLY_NORMAL_HIT_DAMAGE_BONUS,
APPLY_SKILL_DEFEND_BONUS,
APPLY_NORMAL_HIT_DEFEND_BONUS,
APPLY_PC_BANG_EXP_BONUS,
APPLY_PC_BANG_DROP_BONUS,

APPLY_EXTRACT_HP_PCT,

APPLY_RESIST_WARRIOR,
APPLY_RESIST_ASSASSIN,
APPLY_RESIST_SURA,
APPLY_RESIST_SHAMAN,
APPLY_ENERGY,
APPLY_DEF_GRADE,
APPLY_COSTUME_ATTR_BONUS,
APPLY_MAGIC_ATTBONUS_PER,
APPLY_MELEE_MAGIC_ATTBONUS_PER,

APPLY_RESIST_ICE,
APPLY_RESIST_EARTH,
APPLY_RESIST_DARK,

APPLY_ANTI_CRITICAL_PCT,
APPLY_ANTI_PENETRATE_PCT,

#ifdef ENABLE_WOLFMAN_CHARACTER
APPLY_BLEEDING_REDUCE,
APPLY_BLEEDING_PCT,
APPLY_ATTBONUS_WOLFMAN,
APPLY_RESIST_WOLFMAN,
APPLY_RESIST_CLAW,
#endif

#ifdef ENABLE_ACCE_SYSTEM
APPLY_ACCEDRAIN_RATE,
#endif

#ifdef ENABLE_MAGIC_REDUCTION_SYSTEM
APPLY_RESIST_MAGIC_REDUCTION, //98
#endif
#ifdef ENABLE_PENDANT_SYSTEM
APPLY_MOUNT,
APPLY_ENCHANT_FIRE,
APPLY_ENCHANT_ICE,
APPLY_ENCHANT_EARTH,
APPLY_ENCHANT_DARK,
APPLY_ENCHANT_WIND,
APPLY_ENCHANT_ELECT,
APPLY_RESIST_HUMAN,
APPLY_ATTBONUS_SWORD,
APPLY_ATTBONUS_TWOHAND,
APPLY_ATTBONUS_DAGGER,
APPLY_ATTBONUS_BELL,
APPLY_ATTBONUS_FAN,
APPLY_ATTBONUS_BOW,
#ifdef ENABLE_WOLFMAN_CHARACTER
APPLY_ATTBONUS_CLAW,
#endif
APPLY_ATTBONUS_CZ,
APPLY_ATTBONUS_DESERT,
APPLY_ATTBONUS_INSECT,
#endif
#ifdef ENABLE_EXTRA_APPLY_BONUS
APPLY_ATTBONUS_STONE,
APPLY_ATTBONUS_BOSS,
APPLY_ATTBONUS_ELEMENTS,
APPLY_ENCHANT_ELEMENTS,
APPLY_ATTBONUS_CHARACTERS,
APPLY_ENCHANT_CHARACTERS,
APPLY_ATTBONUS_RAZADOR,
APPLY_ATTBONUS_NEMERE,
APPLY_ATTBONUS_LUCIFER,
APPLY_ATTBONUS_BLUE_DRAGON,
APPLY_ATTBONUS_RED_DRAGON,
APPLY_ATTBONUS_AZRAEL,
#endif
#ifdef ENABLE_GLOVE_SYSTEM
APPLY_RANDOM,
#endif
MAX_APPLY_NUM = 130,
};

enum EOnClickEvents
{
ON_CLICK_NONE,
ON_CLICK_SHOP,
ON_CLICK_TALK,
ON_CLICK_MAX_NUM
};

enum EOnIdleEvents
{
ON_IDLE_NONE,
ON_IDLE_GENERAL,
ON_IDLE_MAX_NUM
};

enum EWindows
{
RESERVED_WINDOW,
INVENTORY,
EQUIPMENT,
SAFEBOX,
MALL,
DRAGON_SOUL_INVENTORY,
#ifdef ENABLE_SPECIAL_STORAGE
UPGRADE_INVENTORY,
BOOK_INVENTORY,
STONE_INVENTORY,
CHEST_INVENTORY,
#endif
#ifdef __AURA_SYSTEM__
AURA_REFINE,
#endif
BELT_INVENTORY,
GROUND,
#ifdef __ENABLE_NEW_OFFLINESHOP__
NEW_OFFSHOP,
SHOP_SAFEBOX,
#endif
};

enum EMobSizes
{
MOBSIZE_RESERVED,
MOBSIZE_SMALL,
MOBSIZE_MEDIUM,
MOBSIZE_BIG
};

enum EAIFlags
{
AIFLAG_AGGRESSIVE = (1 << 0),
AIFLAG_NOMOVE = (1 << 1),
AIFLAG_COWARD = (1 << 2),
AIFLAG_NOATTACKSHINSU = (1 << 3),
AIFLAG_NOATTACKJINNO = (1 << 4),
AIFLAG_NOATTACKCHUNJO = (1 << 5),
AIFLAG_ATTACKMOB = (1 << 6),
AIFLAG_BERSERK = (1 << 7),
AIFLAG_STONESKIN = (1 << 8),
AIFLAG_GODSPEED = (1 << 9),
AIFLAG_DEATHBLOW = (1 << 10),
AIFLAG_REVIVE = (1 << 11),
};

enum EMobStatType
{
MOB_STATTYPE_POWER,
MOB_STATTYPE_TANKER,
MOB_STATTYPE_SUPER_POWER,
MOB_STATTYPE_SUPER_TANKER,
MOB_STATTYPE_RANGE,
MOB_STATTYPE_MAGIC,
MOB_STATTYPE_MAX_NUM
};

enum EImmuneFlags
{
IMMUNE_STUN = (1 << 0),
IMMUNE_SLOW = (1 << 1),
IMMUNE_FALL = (1 << 2),
IMMUNE_CURSE = (1 << 3),
IMMUNE_POISON = (1 << 4),
IMMUNE_TERROR = (1 << 5),
IMMUNE_REFLECT = (1 << 6),
};

enum EMobEnchants
{
MOB_ENCHANT_CURSE,
MOB_ENCHANT_SLOW,
MOB_ENCHANT_POISON,
MOB_ENCHANT_STUN,
MOB_ENCHANT_CRITICAL,
MOB_ENCHANT_PENETRATE,
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
MOB_ENCHANT_BLEEDING,
#endif
MOB_ENCHANTS_MAX_NUM
};

enum EMobResists
{
MOB_RESIST_SWORD,
MOB_RESIST_TWOHAND,
MOB_RESIST_DAGGER,
MOB_RESIST_BELL,
MOB_RESIST_FAN,
MOB_RESIST_BOW,
MOB_RESIST_FIRE,
MOB_RESIST_ELECT,
MOB_RESIST_MAGIC,
MOB_RESIST_WIND,
MOB_RESIST_POISON,
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_CLAW_AS_DAGGER)
MOB_RESIST_CLAW,
#endif
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
MOB_RESIST_BLEEDING,
#endif
MOB_RESISTS_MAX_NUM
};

enum
{
SKILL_ATTR_TYPE_NORMAL = 1,
SKILL_ATTR_TYPE_MELEE,
SKILL_ATTR_TYPE_RANGE,
SKILL_ATTR_TYPE_MAGIC
/*
SKILL_ATTR_TYPE_FIRE,
SKILL_ATTR_TYPE_ICE,
SKILL_ATTR_TYPE_ELEC,
SKILL_ATTR_TYPE_DARK,
*/
};

enum
{
SKILL_NORMAL,
SKILL_MASTER,
SKILL_GRAND_MASTER,
SKILL_PERFECT_MASTER,
};

enum EGuildWarType
{
GUILD_WAR_TYPE_FIELD,
GUILD_WAR_TYPE_BATTLE,
GUILD_WAR_TYPE_FLAG,
GUILD_WAR_TYPE_MAX_NUM
};

enum EGuildWarState
{
GUILD_WAR_NONE,
GUILD_WAR_SEND_DECLARE,
GUILD_WAR_REFUSE,
GUILD_WAR_RECV_DECLARE,
GUILD_WAR_WAIT_START,
GUILD_WAR_CANCEL,
GUILD_WAR_ON_WAR,
GUILD_WAR_END,
GUILD_WAR_OVER,
GUILD_WAR_RESERVE,

GUILD_WAR_DURATION = 30 * 60,
GUILD_WAR_WIN_POINT = 1000,
GUILD_WAR_LADDER_HALF_PENALTY_TIME = 12 * 60 * 60,
};

enum EAttributeSet
{
ATTRIBUTE_SET_WEAPON,
ATTRIBUTE_SET_BODY,
ATTRIBUTE_SET_WRIST,
ATTRIBUTE_SET_FOOTS,
ATTRIBUTE_SET_NECK,
ATTRIBUTE_SET_HEAD,
ATTRIBUTE_SET_SHIELD,
ATTRIBUTE_SET_EAR,
#ifdef ENABLE_ITEM_ATTR_COSTUME
ATTRIBUTE_SET_COSTUME_BODY,
ATTRIBUTE_SET_COSTUME_HAIR,
#if defined(ENABLE_ITEM_ATTR_COSTUME) && defined(ENABLE_WEAPON_COSTUME_SYSTEM)
ATTRIBUTE_SET_COSTUME_WEAPON,
#endif
#endif
#ifdef ENABLE_PENDANT_SYSTEM
ATTRIBUTE_SET_PENDANT,
#endif
ATTRIBUTE_SET_MAX_NUM
};

enum EPrivType
{
PRIV_NONE,
PRIV_ITEM_DROP,
PRIV_GOLD_DROP,
PRIV_GOLD10_DROP,
PRIV_EXP_PCT,
MAX_PRIV_NUM,
};

enum EMoneyLogType
{
MONEY_LOG_RESERVED,
MONEY_LOG_MONSTER,
MONEY_LOG_SHOP,
MONEY_LOG_REFINE,
MONEY_LOG_QUEST,
MONEY_LOG_GUILD,
MONEY_LOG_MISC,
MONEY_LOG_MONSTER_KILL,
MONEY_LOG_DROP,
MONEY_LOG_TYPE_MAX_NUM,
};

enum EPremiumTypes
{
PREMIUM_EXP,
PREMIUM_ITEM,
PREMIUM_SAFEBOX,
PREMIUM_AUTOLOOT,
PREMIUM_FISH_MIND,
PREMIUM_MARRIAGE_FAST,
PREMIUM_GOLD,
PREMIUM_MAX_NUM = 9
};

enum SPECIAL_EFFECT
{
SE_NONE,

SE_HPUP_RED,
SE_SPUP_BLUE,
SE_SPEEDUP_GREEN,
SE_DXUP_PURPLE,
SE_CRITICAL,
SE_PENETRATE,
SE_BLOCK,
SE_DODGE,
SE_CHINA_FIREWORK,
SE_SPIN_TOP,
SE_SUCCESS,
SE_FAIL,
SE_FR_SUCCESS,
SE_LEVELUP_ON_14_FOR_GERMANY,
SE_LEVELUP_UNDER_15_FOR_GERMANY,
SE_PERCENT_DAMAGE1,
SE_PERCENT_DAMAGE2,
SE_PERCENT_DAMAGE3,

SE_AUTO_HPUP,
SE_AUTO_SPUP,

SE_EQUIP_RAMADAN_RING,
SE_EQUIP_HALLOWEEN_CANDY,
SE_EQUIP_HAPPINESS_RING,
SE_EQUIP_LOVE_PENDANT,

#ifdef ENABLE_ACCE_SYSTEM
SE_EFFECT_ACCE_SUCCEDED,
SE_EFFECT_ACCE_EQUIP,
#endif
#ifdef ENABLE_AGGREGATE_MONSTER_EFFECT
SE_AGGREGATE_MONSTER_EFFECT,
#endif
#ifdef ENABLE_UPGRADE_EFFECT
SE_UPSUCCESS,
SE_UPFAILED,
#endif
#ifdef ENABLE_DUEL_EFFECT
SE_PVP_WIN,
SE_PVP_OPEN1,
SE_PVP_OPEN2,
SE_PVP_BEGIN1,
SE_PVP_BEGIN2,
#endif
};

enum ETeenFlags
{
TEENFLAG_NONE = 0,
TEENFLAG_1HOUR,
TEENFLAG_2HOUR,
TEENFLAG_3HOUR,
TEENFLAG_4HOUR,
TEENFLAG_5HOUR,
};

#include "item_length.h"






enum EDragonSoulRefineWindowSize
{
DRAGON_SOUL_REFINE_GRID_MAX = 15,
};

enum EMisc2
{
DRAGON_SOUL_EQUIP_SLOT_START = INVENTORY_MAX_NUM + WEAR_MAX_NUM,
DRAGON_SOUL_EQUIP_SLOT_END = DRAGON_SOUL_EQUIP_SLOT_START + (DS_SLOT_MAX * DRAGON_SOUL_DECK_MAX_NUM),
DRAGON_SOUL_EQUIP_RESERVED_SLOT_END = DRAGON_SOUL_EQUIP_SLOT_END + (DS_SLOT_MAX * DRAGON_SOUL_DECK_RESERVED_MAX_NUM),

BELT_INVENTORY_SLOT_START = DRAGON_SOUL_EQUIP_RESERVED_SLOT_END,
BELT_INVENTORY_SLOT_END = BELT_INVENTORY_SLOT_START + BELT_INVENTORY_SLOT_COUNT,

INVENTORY_AND_EQUIP_SLOT_MAX = BELT_INVENTORY_SLOT_END,
};

#pragma pack(push, 1)

typedef struct SItemPos
{
BYTE window_type;
WORD cell;
SItemPos()
{
window_type = INVENTORY;
cell = WORD_MAX;
}

SItemPos(BYTE _window_type, WORD _cell)
{
window_type = _window_type;
cell = _cell;
}

bool IsValidItemPosition() const
{
switch (window_type)
{
case RESERVED_WINDOW:
return false;
case INVENTORY:
case EQUIPMENT:
case BELT_INVENTORY:
return cell < INVENTORY_AND_EQUIP_SLOT_MAX;
case DRAGON_SOUL_INVENTORY:
return cell < (DRAGON_SOUL_INVENTORY_MAX_NUM);
#ifdef ENABLE_SPECIAL_STORAGE
case UPGRADE_INVENTORY:
case BOOK_INVENTORY:
case STONE_INVENTORY:
case CHEST_INVENTORY:
return cell < (SPECIAL_INVENTORY_MAX_NUM);
#endif
case SAFEBOX:
case MALL:
return false;
default:
return false;
}
return false;
}

bool IsEquipPosition() const
{
return ((INVENTORY == window_type || EQUIPMENT == window_type) && cell >= INVENTORY_MAX_NUM && cell < INVENTORY_MAX_NUM + WEAR_MAX_NUM)
|| IsDragonSoulEquipPosition();
}

bool IsDragonSoulEquipPosition() const
{
return (window_type == INVENTORY) && (DRAGON_SOUL_EQUIP_SLOT_START <= cell) && (DRAGON_SOUL_EQUIP_SLOT_END > cell);
}

bool IsBeltInventoryPosition() const
{
return (BELT_INVENTORY_SLOT_START <= cell) && (BELT_INVENTORY_SLOT_END > cell);
}

bool IsDefaultInventoryPosition() const
{
return INVENTORY == window_type && cell < INVENTORY_MAX_NUM;
}

bool operator==(const struct SItemPos& rhs) const
{
return (window_type == rhs.window_type) && (cell == rhs.cell);
}
bool operator<(const struct SItemPos& rhs) const
{
return (window_type < rhs.window_type) || ((window_type == rhs.window_type) && (cell < rhs.cell));
}
bool operator!=(const struct SItemPos& rhs) const
{
return (window_type != rhs.window_type) || (cell != rhs.cell);
}
} TItemPos;

const TItemPos NPOS(RESERVED_WINDOW, WORD_MAX);

typedef struct SItemPosEx
{
TItemPos pos;
int id{ 0 };
} TItemPosEx;

typedef enum
{
SHOP_COIN_TYPE_GOLD, // DEFAULT VALUE
SHOP_COIN_TYPE_SECONDARY_COIN,
} EShopCoinType;


#ifdef __AURA_SYSTEM__
typedef struct SAuraRefineInfo
{
BYTE bAuraRefineInfoLevel;
BYTE bAuraRefineInfoExpPercent;
} TAuraRefineInfo;

enum EAuraMisc
{
AURA_MAX_LEVEL = 250,
AURA_REFINE_MAX_DISTANCE = 1000,
};

enum EAuraWindowType
{
AURA_WINDOW_TYPE_ABSORB,
AURA_WINDOW_TYPE_GROWTH,
AURA_WINDOW_TYPE_EVOLVE,
AURA_WINDOW_TYPE_MAX,
};

enum EAuraSlotType
{
AURA_SLOT_MAIN,
AURA_SLOT_SUB,
AURA_SLOT_RESULT,
AURA_SLOT_MAX
};

enum EAuraGradeType
{
AURA_GRADE_NONE,
AURA_GRADE_ORDINARY,
AURA_GRADE_SIMPLE,
AURA_GRADE_NOBLE,
AURA_GRADE_SPARKLING,
AURA_GRADE_MAGNIFICENT,
AURA_GRADE_RADIANT,
AURA_GRADE_MAX_NUM,
};
enum EAuraRefineInfoType
{
AURA_REFINE_INFO_STEP,
AURA_REFINE_INFO_LEVEL_MIN,
AURA_REFINE_INFO_LEVEL_MAX,
AURA_REFINE_INFO_NEED_EXP,
AURA_REFINE_INFO_MATERIAL_VNUM,
AURA_REFINE_INFO_MATERIAL_COUNT,
AURA_REFINE_INFO_NEED_GOLD,
AURA_REFINE_INFO_EVOLVE_PCT,
AURA_REFINE_INFO_MAX
};

enum ERefineInfoType
{
AURA_REFINE_INFO_SLOT_CURRENT,
AURA_REFINE_INFO_SLOT_NEXT,
AURA_REFINE_INFO_SLOT_EVOLVED,
AURA_REFINE_INFO_SLOT_MAX
};
#endif

#pragma pack(pop)

#endif

enum EMisc
{
MAX_HOST_LENGTH = 15,
IP_ADDRESS_LENGTH = 15,
LOGIN_MAX_LEN = 30,
PASSWD_MAX_LEN = 16,
#ifdef ENABLE_PLAYER_PER_ACCOUNT5
PLAYER_PER_ACCOUNT = 5,
#else
PLAYER_PER_ACCOUNT = 4,
#endif
ACCOUNT_STATUS_MAX_LEN = 8,
CHARACTER_NAME_MAX_LEN = 24,
SHOP_SIGN_MAX_LEN = 32,
INVENTORY_PAGE_COLUMN = 5, // 5 (default)
INVENTORY_PAGE_ROW = 9, // 9 (default)
INVENTORY_PAGE_SIZE = INVENTORY_PAGE_COLUMN * INVENTORY_PAGE_ROW,
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
INVENTORY_PAGE_COUNT = 4, // 2 (default)
#else
INVENTORY_PAGE_COUNT = 2, // 2 (default)
#endif
INVENTORY_MAX_NUM = INVENTORY_PAGE_SIZE * INVENTORY_PAGE_COUNT, // 90 (default)
ABILITY_MAX_NUM = 50,
EMPIRE_MAX_NUM = 4,
BANWORD_MAX_LEN = 24,
SMS_MAX_LEN = 80,
MOBILE_MAX_LEN = 32,
SOCIAL_ID_MAX_LEN = 18,

GUILD_NAME_MAX_LEN = 12,

SHOP_HOST_ITEM_MAX_NUM = 40,
SHOP_GUEST_ITEM_MAX_NUM = 18,

SHOP_PRICELIST_MAX_NUM = 40,

CHAT_MAX_LEN = 512,

QUICKSLOT_MAX_NUM = 36,

JOURNAL_MAX_NUM = 2,

QUERY_MAX_LEN = 8192,

FILE_MAX_LEN = 128,

PLAYER_EXP_TABLE_MAX = 120,
PLAYER_MAX_LEVEL_CONST = 250,

GUILD_MAX_LEVEL = 20,
MOB_MAX_LEVEL = 100,

ATTRIBUTE_MAX_VALUE = 20,
CHARACTER_PATH_MAX_NUM = 64,
SKILL_MAX_NUM = 255,
SKILLBOOK_DELAY_MIN = 64800,
SKILLBOOK_DELAY_MAX = 108000,
SKILL_MAX_LEVEL = 40,

APPLY_NAME_MAX_LEN = 32,
EVENT_FLAG_NAME_MAX_LEN = 32,

MOB_SKILL_MAX_NUM = 5,

POINT_MAX_NUM = 255,
DRAGON_SOUL_BOX_SIZE = 32,
DRAGON_SOUL_BOX_COLUMN_NUM = 8,
DRAGON_SOUL_BOX_ROW_NUM = DRAGON_SOUL_BOX_SIZE / DRAGON_SOUL_BOX_COLUMN_NUM,
DRAGON_SOUL_REFINE_GRID_SIZE = 15,
MAX_AMOUNT_OF_MALL_BONUS = 20,

WEAR_MAX_NUM = 32,


#ifdef __ENABLE_NEW_OFFLINESHOP__
OFFLINE_SHOP_NAME_MAX_LEN = 40 + CHARACTER_NAME_MAX_LEN + 1,
OFFLINESHOP_DURATION_MAX_MINUTES = 8 * 24 * 60,
OFFLINESHOP_MAX_SEARCH_RESULT = 250,
OFFLINESHOP_SECONDS_PER_SEARCH = 15,
//*new check about auction offers
OFFLINESHOP_SECONDS_PER_OFFER = 7,
#ifdef __ENABLE_CHEQUE_SYSTEM__
YANG_PER_CHEQUE = 100000000,
#endif
#endif

//LIMIT_GOLD
GOLD_MAX = 2000000000,

MAX_PASSPOD = 8,


//END_LIMIT_GOLD

OPENID_AUTHKEY_LEN = 32,

SHOP_TAB_NAME_MAX = 32,
SHOP_TAB_COUNT_MAX = 3,

BELT_INVENTORY_SLOT_WIDTH = 4,
BELT_INVENTORY_SLOT_HEIGHT = 4,

BELT_INVENTORY_SLOT_COUNT = BELT_INVENTORY_SLOT_WIDTH * BELT_INVENTORY_SLOT_HEIGHT,

#ifdef ENABLE_SPECIAL_STORAGE
SPECIAL_INVENTORY_PAGE_COUNT = 4,
SPECIAL_INVENTORY_PAGE_SIZE = 45,
SPECIAL_INVENTORY_MAX_NUM = SPECIAL_INVENTORY_PAGE_SIZE * SPECIAL_INVENTORY_PAGE_COUNT,
#endif

};

enum EMatrixCard
{
MATRIX_CODE_MAX_LEN = 192,
MATRIX_ANSWER_MAX_LEN = 8,
};

enum EWearPositions
{
WEAR_BODY, // 0
WEAR_HEAD, // 1
WEAR_FOOTS, // 2
WEAR_WRIST, // 3
WEAR_WEAPON, // 4
WEAR_NECK, // 5
WEAR_EAR, // 6
WEAR_UNIQUE1, // 7
WEAR_UNIQUE2, // 8
WEAR_ARROW, // 9
WEAR_SHIELD, // 10
WEAR_ABILITY1, // 11
WEAR_ABILITY2, // 12
WEAR_ABILITY3, // 13
WEAR_ABILITY4, // 14
WEAR_ABILITY5, // 15
WEAR_ABILITY6, // 16
WEAR_ABILITY7, // 17
WEAR_ABILITY8, // 18
WEAR_COSTUME_BODY, // 19
WEAR_COSTUME_HAIR, // 20

#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
WEAR_COSTUME_MOUNT,//21
#endif
#ifdef ENABLE_ACCE_SYSTEM
WEAR_COSTUME_ACCE,//22
#endif
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
WEAR_COSTUME_WEAPON,//23
#endif
#ifdef __AURA_SYSTEM__
WEAR_COSTUME_AURA,//24
#endif

WEAR_RING1,//25
WEAR_RING2,//26
WEAR_BELT,//27
#ifdef ENABLE_PENDANT_SYSTEM
WEAR_PENDANT,//28
#endif
WEAR_GLOVE, //29
WEAR_MAX = 32 //
};

enum EDragonSoulDeckType
{
DRAGON_SOUL_DECK_0,
DRAGON_SOUL_DECK_1,
DRAGON_SOUL_DECK_MAX_NUM = 2,

DRAGON_SOUL_DECK_RESERVED_MAX_NUM = 3,
};

enum ESex
{
SEX_MALE,
SEX_FEMALE
};

enum EDirection
{
DIR_NORTH,
DIR_NORTHEAST,
DIR_EAST,
DIR_SOUTHEAST,
DIR_SOUTH,
DIR_SOUTHWEST,
DIR_WEST,
DIR_NORTHWEST,
DIR_MAX_NUM
};

#define ABILITY_MAX_LEVEL 10

enum EAbilityDifficulty
{
DIFFICULTY_EASY,
DIFFICULTY_NORMAL,
DIFFICULTY_HARD,
DIFFICULTY_VERY_HARD,
DIFFICULTY_NUM_TYPES
};

enum EAbilityCategory
{
CATEGORY_PHYSICAL,
CATEGORY_MENTAL,
CATEGORY_ATTRIBUTE,
CATEGORY_NUM_TYPES
};

enum EJobs
{
JOB_WARRIOR,
JOB_ASSASSIN,
JOB_SURA,
JOB_SHAMAN,
#ifdef ENABLE_WOLFMAN_CHARACTER
JOB_WOLFMAN,
#endif
JOB_MAX_NUM
};

enum ESkillGroups
{
SKILL_GROUP_MAX_NUM = 2,
};

enum ERaceFlags
{
RACE_FLAG_ANIMAL = (1 << 0),
RACE_FLAG_UNDEAD = (1 << 1),
RACE_FLAG_DEVIL = (1 << 2),
RACE_FLAG_HUMAN = (1 << 3),
RACE_FLAG_ORC = (1 << 4),
RACE_FLAG_MILGYO = (1 << 5),
RACE_FLAG_INSECT = (1 << 6),
RACE_FLAG_FIRE = (1 << 7),
RACE_FLAG_ICE = (1 << 8),
RACE_FLAG_DESERT = (1 << 9),
RACE_FLAG_TREE = (1 << 10),
RACE_FLAG_ATT_ELEC = (1 << 11),
RACE_FLAG_ATT_FIRE = (1 << 12),
RACE_FLAG_ATT_ICE = (1 << 13),
RACE_FLAG_ATT_WIND = (1 << 14),
RACE_FLAG_ATT_EARTH = (1 << 15),
RACE_FLAG_ATT_DARK = (1 << 16),
RACE_FLAG_ATT_CZ = (1 << 17),
};

enum ELoads
{
LOAD_NONE,
LOAD_LIGHT,
LOAD_NORMAL,
LOAD_HEAVY,
LOAD_MASSIVE
};

enum
{
QUICKSLOT_TYPE_NONE,
QUICKSLOT_TYPE_ITEM,
QUICKSLOT_TYPE_SKILL,
QUICKSLOT_TYPE_COMMAND,
QUICKSLOT_TYPE_MAX_NUM,
};

enum EParts
{
PART_MAIN,
PART_WEAPON,
PART_HEAD,
PART_HAIR,
#ifdef ENABLE_ACCE_SYSTEM
PART_ACCE,
#endif
#ifdef __AURA_SYSTEM__
PART_AURA,
#endif
PART_MAX_NUM,
PART_WEAPON_SUB,
};

enum EChatType
{
CHAT_TYPE_TALKING,
CHAT_TYPE_INFO,
CHAT_TYPE_NOTICE,
CHAT_TYPE_PARTY,
CHAT_TYPE_GUILD,
CHAT_TYPE_COMMAND,
CHAT_TYPE_SHOUT,
CHAT_TYPE_WHISPER,
CHAT_TYPE_BIG_NOTICE,
CHAT_TYPE_MONARCH_NOTICE,
#ifdef ENABLE_DICE_SYSTEM
CHAT_TYPE_DICE_INFO, //11
#endif
CHAT_TYPE_MAX_NUM
};

enum EWhisperType
{
WHISPER_TYPE_NORMAL = 0,
WHISPER_TYPE_NOT_EXIST = 1,
WHISPER_TYPE_TARGET_BLOCKED = 2,
WHISPER_TYPE_SENDER_BLOCKED = 3,
WHISPER_TYPE_ERROR = 4,
WHISPER_TYPE_GM = 5,
WHISPER_TYPE_SYSTEM = 0xFF
};

enum ECharacterPosition
{
POSITION_GENERAL,
POSITION_BATTLE,
POSITION_DYING,
POSITION_SITTING_CHAIR,
POSITION_SITTING_GROUND,
POSITION_INTRO,
POSITION_MAX_NUM
};

enum EGMLevels
{
GM_PLAYER,
GM_LOW_WIZARD,
GM_WIZARD,
GM_HIGH_WIZARD,
GM_GOD,
GM_IMPLEMENTOR,
GM_DISABLE,
};

enum EMobRank
{
MOB_RANK_PAWN,
MOB_RANK_S_PAWN,
MOB_RANK_KNIGHT,
MOB_RANK_S_KNIGHT,
MOB_RANK_BOSS,
MOB_RANK_KING,
MOB_RANK_MAX_NUM
};

enum ECharType
{
CHAR_TYPE_MONSTER,
CHAR_TYPE_NPC,
CHAR_TYPE_STONE,
CHAR_TYPE_WARP,
CHAR_TYPE_DOOR,
CHAR_TYPE_BUILDING,
CHAR_TYPE_PC,
CHAR_TYPE_POLYMORPH_PC,
CHAR_TYPE_HORSE,
CHAR_TYPE_GOTO
};

enum EBattleType
{
BATTLE_TYPE_MELEE,
BATTLE_TYPE_RANGE,
BATTLE_TYPE_MAGIC,
BATTLE_TYPE_SPECIAL,
BATTLE_TYPE_POWER,
BATTLE_TYPE_TANKER,
BATTLE_TYPE_SUPER_POWER,
BATTLE_TYPE_SUPER_TANKER,
BATTLE_TYPE_MAX_NUM
};

enum EApplyTypes
{
APPLY_NONE, // 0
APPLY_MAX_HP, // 1
APPLY_MAX_SP, // 2
APPLY_CON, // 3
APPLY_INT, // 4
APPLY_STR, // 5
APPLY_DEX, // 6
APPLY_ATT_SPEED, // 7
APPLY_MOV_SPEED, // 8
APPLY_CAST_SPEED, // 9
APPLY_HP_REGEN, // 10
APPLY_SP_REGEN, // 11
APPLY_POISON_PCT, // 12
APPLY_STUN_PCT, // 13
APPLY_SLOW_PCT, // 14
APPLY_CRITICAL_PCT, // 15
APPLY_PENETRATE_PCT, // 16
APPLY_ATTBONUS_HUMAN, // 17
APPLY_ATTBONUS_ANIMAL, // 18
APPLY_ATTBONUS_ORC, // 19
APPLY_ATTBONUS_MILGYO, // 20
APPLY_ATTBONUS_UNDEAD, // 21
APPLY_ATTBONUS_DEVIL, // 22
APPLY_STEAL_HP, // 23
APPLY_STEAL_SP, // 24
APPLY_MANA_BURN_PCT, // 25
APPLY_DAMAGE_SP_RECOVER, // 26
APPLY_BLOCK, // 27
APPLY_DODGE, // 28
APPLY_RESIST_SWORD, // 29
APPLY_RESIST_TWOHAND, // 30
APPLY_RESIST_DAGGER, // 31
APPLY_RESIST_BELL, // 32
APPLY_RESIST_FAN, // 33
APPLY_RESIST_BOW, // 34
APPLY_RESIST_FIRE, // 35
APPLY_RESIST_ELEC, // 36
APPLY_RESIST_MAGIC, // 37
APPLY_RESIST_WIND, // 38
APPLY_REFLECT_MELEE, // 39
APPLY_REFLECT_CURSE, // 40
APPLY_POISON_REDUCE, // 41
APPLY_KILL_SP_RECOVER, // 42
APPLY_EXP_DOUBLE_BONUS, // 43
APPLY_GOLD_DOUBLE_BONUS, // 44
APPLY_ITEM_DROP_BONUS, // 45
APPLY_POTION_BONUS, // 46
APPLY_KILL_HP_RECOVER, // 47
APPLY_IMMUNE_STUN, // 48
APPLY_IMMUNE_SLOW, // 49
APPLY_IMMUNE_FALL, // 50
APPLY_SKILL, // 51
APPLY_BOW_DISTANCE, // 52
APPLY_ATT_GRADE_BONUS, // 53
APPLY_DEF_GRADE_BONUS, // 54
APPLY_MAGIC_ATT_GRADE, // 55
APPLY_MAGIC_DEF_GRADE, // 56
APPLY_CURSE_PCT, // 57
APPLY_MAX_STAMINA, // 58
APPLY_ATTBONUS_WARRIOR, // 59
APPLY_ATTBONUS_ASSASSIN, // 60
APPLY_ATTBONUS_SURA, // 61
APPLY_ATTBONUS_SHAMAN, // 62
APPLY_ATTBONUS_MONSTER, // 63
APPLY_MALL_ATTBONUS,
APPLY_MALL_DEFBONUS,
APPLY_MALL_EXPBONUS,
APPLY_MALL_ITEMBONUS,
APPLY_MALL_GOLDBONUS,
APPLY_MAX_HP_PCT,
APPLY_MAX_SP_PCT,
APPLY_SKILL_DAMAGE_BONUS,
APPLY_NORMAL_HIT_DAMAGE_BONUS,
APPLY_SKILL_DEFEND_BONUS,
APPLY_NORMAL_HIT_DEFEND_BONUS,
APPLY_PC_BANG_EXP_BONUS,
APPLY_PC_BANG_DROP_BONUS,

APPLY_EXTRACT_HP_PCT,

APPLY_RESIST_WARRIOR,
APPLY_RESIST_ASSASSIN,
APPLY_RESIST_SURA,
APPLY_RESIST_SHAMAN,
APPLY_ENERGY,
APPLY_DEF_GRADE,
APPLY_COSTUME_ATTR_BONUS,
APPLY_MAGIC_ATTBONUS_PER,
APPLY_MELEE_MAGIC_ATTBONUS_PER,

APPLY_RESIST_ICE,
APPLY_RESIST_EARTH,
APPLY_RESIST_DARK,

APPLY_ANTI_CRITICAL_PCT,
APPLY_ANTI_PENETRATE_PCT,

#ifdef ENABLE_WOLFMAN_CHARACTER
APPLY_BLEEDING_REDUCE,
APPLY_BLEEDING_PCT,
APPLY_ATTBONUS_WOLFMAN,
APPLY_RESIST_WOLFMAN,
APPLY_RESIST_CLAW,
#endif

#ifdef ENABLE_ACCE_SYSTEM
APPLY_ACCEDRAIN_RATE,
#endif

#ifdef ENABLE_MAGIC_REDUCTION_SYSTEM
APPLY_RESIST_MAGIC_REDUCTION, //98
#endif
#ifdef ENABLE_PENDANT_SYSTEM
APPLY_MOUNT,
APPLY_ENCHANT_FIRE,
APPLY_ENCHANT_ICE,
APPLY_ENCHANT_EARTH,
APPLY_ENCHANT_DARK,
APPLY_ENCHANT_WIND,
APPLY_ENCHANT_ELECT,
APPLY_RESIST_HUMAN,
APPLY_ATTBONUS_SWORD,
APPLY_ATTBONUS_TWOHAND,
APPLY_ATTBONUS_DAGGER,
APPLY_ATTBONUS_BELL,
APPLY_ATTBONUS_FAN,
APPLY_ATTBONUS_BOW,
#ifdef ENABLE_WOLFMAN_CHARACTER
APPLY_ATTBONUS_CLAW,
#endif
APPLY_ATTBONUS_CZ,
APPLY_ATTBONUS_DESERT,
APPLY_ATTBONUS_INSECT,
#endif
#ifdef ENABLE_EXTRA_APPLY_BONUS
APPLY_ATTBONUS_STONE,
APPLY_ATTBONUS_BOSS,
APPLY_ATTBONUS_ELEMENTS,
APPLY_ENCHANT_ELEMENTS,
APPLY_ATTBONUS_CHARACTERS,
APPLY_ENCHANT_CHARACTERS,
APPLY_ATTBONUS_RAZADOR,
APPLY_ATTBONUS_NEMERE,
APPLY_ATTBONUS_LUCIFER,
APPLY_ATTBONUS_BLUE_DRAGON,
APPLY_ATTBONUS_RED_DRAGON,
APPLY_ATTBONUS_AZRAEL,
#endif
#ifdef ENABLE_GLOVE_SYSTEM
APPLY_RANDOM,
#endif
MAX_APPLY_NUM = 130,
};

enum EOnClickEvents
{
ON_CLICK_NONE,
ON_CLICK_SHOP,
ON_CLICK_TALK,
ON_CLICK_MAX_NUM
};

enum EOnIdleEvents
{
ON_IDLE_NONE,
ON_IDLE_GENERAL,
ON_IDLE_MAX_NUM
};

enum EWindows
{
RESERVED_WINDOW,
INVENTORY,
EQUIPMENT,
SAFEBOX,
MALL,
DRAGON_SOUL_INVENTORY,
#ifdef ENABLE_SPECIAL_STORAGE
UPGRADE_INVENTORY,
BOOK_INVENTORY,
STONE_INVENTORY,
CHEST_INVENTORY,
#endif
#ifdef __AURA_SYSTEM__
AURA_REFINE,
#endif
BELT_INVENTORY,
GROUND,
#ifdef __ENABLE_NEW_OFFLINESHOP__
NEW_OFFSHOP,
SHOP_SAFEBOX,
#endif
};

enum EMobSizes
{
MOBSIZE_RESERVED,
MOBSIZE_SMALL,
MOBSIZE_MEDIUM,
MOBSIZE_BIG
};

enum EAIFlags
{
AIFLAG_AGGRESSIVE = (1 << 0),
AIFLAG_NOMOVE = (1 << 1),
AIFLAG_COWARD = (1 << 2),
AIFLAG_NOATTACKSHINSU = (1 << 3),
AIFLAG_NOATTACKJINNO = (1 << 4),
AIFLAG_NOATTACKCHUNJO = (1 << 5),
AIFLAG_ATTACKMOB = (1 << 6),
AIFLAG_BERSERK = (1 << 7),
AIFLAG_STONESKIN = (1 << 8),
AIFLAG_GODSPEED = (1 << 9),
AIFLAG_DEATHBLOW = (1 << 10),
AIFLAG_REVIVE = (1 << 11),
};

enum EMobStatType
{
MOB_STATTYPE_POWER,
MOB_STATTYPE_TANKER,
MOB_STATTYPE_SUPER_POWER,
MOB_STATTYPE_SUPER_TANKER,
MOB_STATTYPE_RANGE,
MOB_STATTYPE_MAGIC,
MOB_STATTYPE_MAX_NUM
};

enum EImmuneFlags
{
IMMUNE_STUN = (1 << 0),
IMMUNE_SLOW = (1 << 1),
IMMUNE_FALL = (1 << 2),
IMMUNE_CURSE = (1 << 3),
IMMUNE_POISON = (1 << 4),
IMMUNE_TERROR = (1 << 5),
IMMUNE_REFLECT = (1 << 6),
};

enum EMobEnchants
{
MOB_ENCHANT_CURSE,
MOB_ENCHANT_SLOW,
MOB_ENCHANT_POISON,
MOB_ENCHANT_STUN,
MOB_ENCHANT_CRITICAL,
MOB_ENCHANT_PENETRATE,
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
MOB_ENCHANT_BLEEDING,
#endif
MOB_ENCHANTS_MAX_NUM
};

enum EMobResists
{
MOB_RESIST_SWORD,
MOB_RESIST_TWOHAND,
MOB_RESIST_DAGGER,
MOB_RESIST_BELL,
MOB_RESIST_FAN,
MOB_RESIST_BOW,
MOB_RESIST_FIRE,
MOB_RESIST_ELECT,
MOB_RESIST_MAGIC,
MOB_RESIST_WIND,
MOB_RESIST_POISON,
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_CLAW_AS_DAGGER)
MOB_RESIST_CLAW,
#endif
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
MOB_RESIST_BLEEDING,
#endif
MOB_RESISTS_MAX_NUM
};

enum
{
SKILL_ATTR_TYPE_NORMAL = 1,
SKILL_ATTR_TYPE_MELEE,
SKILL_ATTR_TYPE_RANGE,
SKILL_ATTR_TYPE_MAGIC
/*
SKILL_ATTR_TYPE_FIRE,
SKILL_ATTR_TYPE_ICE,
SKILL_ATTR_TYPE_ELEC,
SKILL_ATTR_TYPE_DARK,
*/
};

enum
{
SKILL_NORMAL,
SKILL_MASTER,
SKILL_GRAND_MASTER,
SKILL_PERFECT_MASTER,
};

enum EGuildWarType
{
GUILD_WAR_TYPE_FIELD,
GUILD_WAR_TYPE_BATTLE,
GUILD_WAR_TYPE_FLAG,
GUILD_WAR_TYPE_MAX_NUM
};

enum EGuildWarState
{
GUILD_WAR_NONE,
GUILD_WAR_SEND_DECLARE,
GUILD_WAR_REFUSE,
GUILD_WAR_RECV_DECLARE,
GUILD_WAR_WAIT_START,
GUILD_WAR_CANCEL,
GUILD_WAR_ON_WAR,
GUILD_WAR_END,
GUILD_WAR_OVER,
GUILD_WAR_RESERVE,

GUILD_WAR_DURATION = 30 * 60,
GUILD_WAR_WIN_POINT = 1000,
GUILD_WAR_LADDER_HALF_PENALTY_TIME = 12 * 60 * 60,
};

enum EAttributeSet
{
ATTRIBUTE_SET_WEAPON,
ATTRIBUTE_SET_BODY,
ATTRIBUTE_SET_WRIST,
ATTRIBUTE_SET_FOOTS,
ATTRIBUTE_SET_NECK,
ATTRIBUTE_SET_HEAD,
ATTRIBUTE_SET_SHIELD,
ATTRIBUTE_SET_EAR,
#ifdef ENABLE_ITEM_ATTR_COSTUME
ATTRIBUTE_SET_COSTUME_BODY,
ATTRIBUTE_SET_COSTUME_HAIR,
#if defined(ENABLE_ITEM_ATTR_COSTUME) && defined(ENABLE_WEAPON_COSTUME_SYSTEM)
ATTRIBUTE_SET_COSTUME_WEAPON,
#endif
#endif
#ifdef ENABLE_PENDANT_SYSTEM
ATTRIBUTE_SET_PENDANT,
#endif
ATTRIBUTE_SET_MAX_NUM
};

enum EPrivType
{
PRIV_NONE,
PRIV_ITEM_DROP,
PRIV_GOLD_DROP,
PRIV_GOLD10_DROP,
PRIV_EXP_PCT,
MAX_PRIV_NUM,
};

enum EMoneyLogType
{
MONEY_LOG_RESERVED,
MONEY_LOG_MONSTER,
MONEY_LOG_SHOP,
MONEY_LOG_REFINE,
MONEY_LOG_QUEST,
MONEY_LOG_GUILD,
MONEY_LOG_MISC,
MONEY_LOG_MONSTER_KILL,
MONEY_LOG_DROP,
MONEY_LOG_TYPE_MAX_NUM,
};

enum EPremiumTypes
{
PREMIUM_EXP,
PREMIUM_ITEM,
PREMIUM_SAFEBOX,
PREMIUM_AUTOLOOT,
PREMIUM_FISH_MIND,
PREMIUM_MARRIAGE_FAST,
PREMIUM_GOLD,
PREMIUM_MAX_NUM = 9
};

enum SPECIAL_EFFECT
{
SE_NONE,

SE_HPUP_RED,
SE_SPUP_BLUE,
SE_SPEEDUP_GREEN,
SE_DXUP_PURPLE,
SE_CRITICAL,
SE_PENETRATE,
SE_BLOCK,
SE_DODGE,
SE_CHINA_FIREWORK,
SE_SPIN_TOP,
SE_SUCCESS,
SE_FAIL,
SE_FR_SUCCESS,
SE_LEVELUP_ON_14_FOR_GERMANY,
SE_LEVELUP_UNDER_15_FOR_GERMANY,
SE_PERCENT_DAMAGE1,
SE_PERCENT_DAMAGE2,
SE_PERCENT_DAMAGE3,

SE_AUTO_HPUP,
SE_AUTO_SPUP,

SE_EQUIP_RAMADAN_RING,
SE_EQUIP_HALLOWEEN_CANDY,
SE_EQUIP_HAPPINESS_RING,
SE_EQUIP_LOVE_PENDANT,

#ifdef ENABLE_ACCE_SYSTEM
SE_EFFECT_ACCE_SUCCEDED,
SE_EFFECT_ACCE_EQUIP,
#endif
#ifdef ENABLE_AGGREGATE_MONSTER_EFFECT
SE_AGGREGATE_MONSTER_EFFECT,
#endif
#ifdef ENABLE_UPGRADE_EFFECT
SE_UPSUCCESS,
SE_UPFAILED,
#endif
#ifdef ENABLE_DUEL_EFFECT
SE_PVP_WIN,
SE_PVP_OPEN1,
SE_PVP_OPEN2,
SE_PVP_BEGIN1,
SE_PVP_BEGIN2,
#endif
};

enum ETeenFlags
{
TEENFLAG_NONE = 0,
TEENFLAG_1HOUR,
TEENFLAG_2HOUR,
TEENFLAG_3HOUR,
TEENFLAG_4HOUR,
TEENFLAG_5HOUR,
};

#include "item_length.h"






enum EDragonSoulRefineWindowSize
{
DRAGON_SOUL_REFINE_GRID_MAX = 15,
};

enum EMisc2
{
DRAGON_SOUL_EQUIP_SLOT_START = INVENTORY_MAX_NUM + WEAR_MAX_NUM,
DRAGON_SOUL_EQUIP_SLOT_END = DRAGON_SOUL_EQUIP_SLOT_START + (DS_SLOT_MAX * DRAGON_SOUL_DECK_MAX_NUM),
DRAGON_SOUL_EQUIP_RESERVED_SLOT_END = DRAGON_SOUL_EQUIP_SLOT_END + (DS_SLOT_MAX * DRAGON_SOUL_DECK_RESERVED_MAX_NUM),

BELT_INVENTORY_SLOT_START = DRAGON_SOUL_EQUIP_RESERVED_SLOT_END,
BELT_INVENTORY_SLOT_END = BELT_INVENTORY_SLOT_START + BELT_INVENTORY_SLOT_COUNT,

INVENTORY_AND_EQUIP_SLOT_MAX = BELT_INVENTORY_SLOT_END,
};

#pragma pack(push, 1)

typedef struct SItemPos
{
BYTE window_type;
WORD cell;
SItemPos()
{
window_type = INVENTORY;
cell = WORD_MAX;
}

SItemPos(BYTE _window_type, WORD _cell)
{
window_type = _window_type;
cell = _cell;
}

bool IsValidItemPosition() const
{
switch (window_type)
{
case RESERVED_WINDOW:
return false;
case INVENTORY:
case EQUIPMENT:
case BELT_INVENTORY:
return cell < INVENTORY_AND_EQUIP_SLOT_MAX;
case DRAGON_SOUL_INVENTORY:
return cell < (DRAGON_SOUL_INVENTORY_MAX_NUM);
#ifdef ENABLE_SPECIAL_STORAGE
case UPGRADE_INVENTORY:
case BOOK_INVENTORY:
case STONE_INVENTORY:
case CHEST_INVENTORY:
return cell < (SPECIAL_INVENTORY_MAX_NUM);
#endif
case SAFEBOX:
case MALL:
return false;
default:
return false;
}
return false;
}

bool IsEquipPosition() const
{
return ((INVENTORY == window_type || EQUIPMENT == window_type) && cell >= INVENTORY_MAX_NUM && cell < INVENTORY_MAX_NUM + WEAR_MAX_NUM)
|| IsDragonSoulEquipPosition();
}

bool IsDragonSoulEquipPosition() const
{
return (window_type == INVENTORY) && (DRAGON_SOUL_EQUIP_SLOT_START <= cell) && (DRAGON_SOUL_EQUIP_SLOT_END > cell);
}

bool IsBeltInventoryPosition() const
{
return (BELT_INVENTORY_SLOT_START <= cell) && (BELT_INVENTORY_SLOT_END > cell);
}

bool IsDefaultInventoryPosition() const
{
return INVENTORY == window_type && cell < INVENTORY_MAX_NUM;
}

bool operator==(const struct SItemPos& rhs) const
{
return (window_type == rhs.window_type) && (cell == rhs.cell);
}
bool operator<(const struct SItemPos& rhs) const
{
return (window_type < rhs.window_type) || ((window_type == rhs.window_type) && (cell < rhs.cell));
}
bool operator!=(const struct SItemPos& rhs) const
{
return (window_type != rhs.window_type) || (cell != rhs.cell);
}
} TItemPos;

const TItemPos NPOS(RESERVED_WINDOW, WORD_MAX);

typedef struct SItemPosEx
{
TItemPos pos;
int id{ 0 };
} TItemPosEx;

typedef enum
{
SHOP_COIN_TYPE_GOLD, // DEFAULT VALUE
SHOP_COIN_TYPE_SECONDARY_COIN,
} EShopCoinType;


#ifdef __AURA_SYSTEM__
typedef struct SAuraRefineInfo
{
BYTE bAuraRefineInfoLevel;
BYTE bAuraRefineInfoExpPercent;
} TAuraRefineInfo;

enum EAuraMisc
{
AURA_MAX_LEVEL = 250,
AURA_REFINE_MAX_DISTANCE = 1000,
};

enum EAuraWindowType
{
AURA_WINDOW_TYPE_ABSORB,
AURA_WINDOW_TYPE_GROWTH,
AURA_WINDOW_TYPE_EVOLVE,
AURA_WINDOW_TYPE_MAX,
};

enum EAuraSlotType
{
AURA_SLOT_MAIN,
AURA_SLOT_SUB,
AURA_SLOT_RESULT,
AURA_SLOT_MAX
};

enum EAuraGradeType
{
AURA_GRADE_NONE,
AURA_GRADE_ORDINARY,
AURA_GRADE_SIMPLE,
AURA_GRADE_NOBLE,
AURA_GRADE_SPARKLING,
AURA_GRADE_MAGNIFICENT,
AURA_GRADE_RADIANT,
AURA_GRADE_MAX_NUM,
};
enum EAuraRefineInfoType
{
AURA_REFINE_INFO_STEP,
AURA_REFINE_INFO_LEVEL_MIN,
AURA_REFINE_INFO_LEVEL_MAX,
AURA_REFINE_INFO_NEED_EXP,
AURA_REFINE_INFO_MATERIAL_VNUM,
AURA_REFINE_INFO_MATERIAL_COUNT,
AURA_REFINE_INFO_NEED_GOLD,
AURA_REFINE_INFO_EVOLVE_PCT,
AURA_REFINE_INFO_MAX
};

enum ERefineInfoType
{
AURA_REFINE_INFO_SLOT_CURRENT,
AURA_REFINE_INFO_SLOT_NEXT,
AURA_REFINE_INFO_SLOT_EVOLVED,
AURA_REFINE_INFO_SLOT_MAX
};
#endif

#pragma pack(pop)

#endif
#ifndef __INC_METIN_II_LENGTH_H__
#define __INC_METIN_II_LENGTH_H__

#include "CommonDefines.h"

#define WORD_MAX 0xffff
enum EMisc
{
MAX_HOST_LENGTH = 15,
IP_ADDRESS_LENGTH = 15,
LOGIN_MAX_LEN = 30,
PASSWD_MAX_LEN = 16,
#ifdef ENABLE_PLAYER_PER_ACCOUNT5
PLAYER_PER_ACCOUNT = 5,
#else
PLAYER_PER_ACCOUNT = 4,
#endif
ACCOUNT_STATUS_MAX_LEN = 8,
CHARACTER_NAME_MAX_LEN = 24,
SHOP_SIGN_MAX_LEN = 32,
INVENTORY_PAGE_COLUMN = 5, // 5 (default)
INVENTORY_PAGE_ROW = 9, // 9 (default)
INVENTORY_PAGE_SIZE = INVENTORY_PAGE_COLUMN * INVENTORY_PAGE_ROW,
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
INVENTORY_PAGE_COUNT = 4, // 2 (default)
#else
INVENTORY_PAGE_COUNT = 2, // 2 (default)
#endif
INVENTORY_MAX_NUM = INVENTORY_PAGE_SIZE * INVENTORY_PAGE_COUNT, // 90 (default)
ABILITY_MAX_NUM = 50,
EMPIRE_MAX_NUM = 4,
BANWORD_MAX_LEN = 24,
SMS_MAX_LEN = 80,
MOBILE_MAX_LEN = 32,
SOCIAL_ID_MAX_LEN = 18,

GUILD_NAME_MAX_LEN = 12,

SHOP_HOST_ITEM_MAX_NUM = 40,
SHOP_GUEST_ITEM_MAX_NUM = 18,

SHOP_PRICELIST_MAX_NUM = 40,

CHAT_MAX_LEN = 512,

QUICKSLOT_MAX_NUM = 36,

JOURNAL_MAX_NUM = 2,

QUERY_MAX_LEN = 8192,

FILE_MAX_LEN = 128,

PLAYER_EXP_TABLE_MAX = 120,
PLAYER_MAX_LEVEL_CONST = 250,

GUILD_MAX_LEVEL = 20,
MOB_MAX_LEVEL = 100,

ATTRIBUTE_MAX_VALUE = 20,
CHARACTER_PATH_MAX_NUM = 64,
SKILL_MAX_NUM = 255,
SKILLBOOK_DELAY_MIN = 64800,
SKILLBOOK_DELAY_MAX = 108000,
SKILL_MAX_LEVEL = 40,

APPLY_NAME_MAX_LEN = 32,
EVENT_FLAG_NAME_MAX_LEN = 32,

MOB_SKILL_MAX_NUM = 5,

POINT_MAX_NUM = 255,
DRAGON_SOUL_BOX_SIZE = 32,
DRAGON_SOUL_BOX_COLUMN_NUM = 8,
DRAGON_SOUL_BOX_ROW_NUM = DRAGON_SOUL_BOX_SIZE / DRAGON_SOUL_BOX_COLUMN_NUM,
DRAGON_SOUL_REFINE_GRID_SIZE = 15,
MAX_AMOUNT_OF_MALL_BONUS = 20,

WEAR_MAX_NUM = 32,


#ifdef __ENABLE_NEW_OFFLINESHOP__
OFFLINE_SHOP_NAME_MAX_LEN = 40 + CHARACTER_NAME_MAX_LEN + 1,
OFFLINESHOP_DURATION_MAX_MINUTES = 8 * 24 * 60,
OFFLINESHOP_MAX_SEARCH_RESULT = 250,
OFFLINESHOP_SECONDS_PER_SEARCH = 15,
//*new check about auction offers
OFFLINESHOP_SECONDS_PER_OFFER = 7,
#ifdef __ENABLE_CHEQUE_SYSTEM__
YANG_PER_CHEQUE = 100000000,
#endif
#endif

//LIMIT_GOLD
GOLD_MAX = 2000000000,

MAX_PASSPOD = 8,


//END_LIMIT_GOLD

OPENID_AUTHKEY_LEN = 32,

SHOP_TAB_NAME_MAX = 32,
SHOP_TAB_COUNT_MAX = 3,

BELT_INVENTORY_SLOT_WIDTH = 4,
BELT_INVENTORY_SLOT_HEIGHT = 4,

BELT_INVENTORY_SLOT_COUNT = BELT_INVENTORY_SLOT_WIDTH * BELT_INVENTORY_SLOT_HEIGHT,

#ifdef ENABLE_SPECIAL_STORAGE
SPECIAL_INVENTORY_PAGE_COUNT = 4,
SPECIAL_INVENTORY_PAGE_SIZE = 45,
SPECIAL_INVENTORY_MAX_NUM = SPECIAL_INVENTORY_PAGE_SIZE * SPECIAL_INVENTORY_PAGE_COUNT,
#endif

};

enum EMatrixCard
{
MATRIX_CODE_MAX_LEN = 192,
MATRIX_ANSWER_MAX_LEN = 8,
};

enum EWearPositions
{
WEAR_BODY, // 0
WEAR_HEAD, // 1
WEAR_FOOTS, // 2
WEAR_WRIST, // 3
WEAR_WEAPON, // 4
WEAR_NECK, // 5
WEAR_EAR, // 6
WEAR_UNIQUE1, // 7
WEAR_UNIQUE2, // 8
WEAR_ARROW, // 9
WEAR_SHIELD, // 10
WEAR_ABILITY1, // 11
WEAR_ABILITY2, // 12
WEAR_ABILITY3, // 13
WEAR_ABILITY4, // 14
WEAR_ABILITY5, // 15
WEAR_ABILITY6, // 16
WEAR_ABILITY7, // 17
WEAR_ABILITY8, // 18
WEAR_COSTUME_BODY, // 19
WEAR_COSTUME_HAIR, // 20

#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
WEAR_COSTUME_MOUNT,//21
#endif
#ifdef ENABLE_ACCE_SYSTEM
WEAR_COSTUME_ACCE,//22
#endif
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
WEAR_COSTUME_WEAPON,//23
#endif
#ifdef __AURA_SYSTEM__
WEAR_COSTUME_AURA,//24
#endif

WEAR_RING1,//25
WEAR_RING2,//26
WEAR_BELT,//27
#ifdef ENABLE_PENDANT_SYSTEM
WEAR_PENDANT,//28
#endif
WEAR_GLOVE, //29
WEAR_MAX = 32 //
};

enum EDragonSoulDeckType
{
DRAGON_SOUL_DECK_0,
DRAGON_SOUL_DECK_1,
DRAGON_SOUL_DECK_MAX_NUM = 2,

DRAGON_SOUL_DECK_RESERVED_MAX_NUM = 3,
};

enum ESex
{
SEX_MALE,
SEX_FEMALE
};

enum EDirection
{
DIR_NORTH,
DIR_NORTHEAST,
DIR_EAST,
DIR_SOUTHEAST,
DIR_SOUTH,
DIR_SOUTHWEST,
DIR_WEST,
DIR_NORTHWEST,
DIR_MAX_NUM
};

#define ABILITY_MAX_LEVEL 10

enum EAbilityDifficulty
{
DIFFICULTY_EASY,
DIFFICULTY_NORMAL,
DIFFICULTY_HARD,
DIFFICULTY_VERY_HARD,
DIFFICULTY_NUM_TYPES
};

enum EAbilityCategory
{
CATEGORY_PHYSICAL,
CATEGORY_MENTAL,
CATEGORY_ATTRIBUTE,
CATEGORY_NUM_TYPES
};

enum EJobs
{
JOB_WARRIOR,
JOB_ASSASSIN,
JOB_SURA,
JOB_SHAMAN,
#ifdef ENABLE_WOLFMAN_CHARACTER
JOB_WOLFMAN,
#endif
JOB_MAX_NUM
};

enum ESkillGroups
{
SKILL_GROUP_MAX_NUM = 2,
};

enum ERaceFlags
{
RACE_FLAG_ANIMAL = (1 << 0),
RACE_FLAG_UNDEAD = (1 << 1),
RACE_FLAG_DEVIL = (1 << 2),
RACE_FLAG_HUMAN = (1 << 3),
RACE_FLAG_ORC = (1 << 4),
RACE_FLAG_MILGYO = (1 << 5),
RACE_FLAG_INSECT = (1 << 6),
RACE_FLAG_FIRE = (1 << 7),
RACE_FLAG_ICE = (1 << 8),
RACE_FLAG_DESERT = (1 << 9),
RACE_FLAG_TREE = (1 << 10),
RACE_FLAG_ATT_ELEC = (1 << 11),
RACE_FLAG_ATT_FIRE = (1 << 12),
RACE_FLAG_ATT_ICE = (1 << 13),
RACE_FLAG_ATT_WIND = (1 << 14),
RACE_FLAG_ATT_EARTH = (1 << 15),
RACE_FLAG_ATT_DARK = (1 << 16),
RACE_FLAG_ATT_CZ = (1 << 17),
};

enum ELoads
{
LOAD_NONE,
LOAD_LIGHT,
LOAD_NORMAL,
LOAD_HEAVY,
LOAD_MASSIVE
};

enum
{
QUICKSLOT_TYPE_NONE,
QUICKSLOT_TYPE_ITEM,
QUICKSLOT_TYPE_SKILL,
QUICKSLOT_TYPE_COMMAND,
QUICKSLOT_TYPE_MAX_NUM,
};

enum EParts
{
PART_MAIN,
PART_WEAPON,
PART_HEAD,
PART_HAIR,
#ifdef ENABLE_ACCE_SYSTEM
PART_ACCE,
#endif
#ifdef __AURA_SYSTEM__
PART_AURA,
#endif
PART_MAX_NUM,
PART_WEAPON_SUB,
};

enum EChatType
{
CHAT_TYPE_TALKING,
CHAT_TYPE_INFO,
CHAT_TYPE_NOTICE,
CHAT_TYPE_PARTY,
CHAT_TYPE_GUILD,
CHAT_TYPE_COMMAND,
CHAT_TYPE_SHOUT,
CHAT_TYPE_WHISPER,
CHAT_TYPE_BIG_NOTICE,
CHAT_TYPE_MONARCH_NOTICE,
#ifdef ENABLE_DICE_SYSTEM
CHAT_TYPE_DICE_INFO, //11
#endif
CHAT_TYPE_MAX_NUM
};

enum EWhisperType
{
WHISPER_TYPE_NORMAL = 0,
WHISPER_TYPE_NOT_EXIST = 1,
WHISPER_TYPE_TARGET_BLOCKED = 2,
WHISPER_TYPE_SENDER_BLOCKED = 3,
WHISPER_TYPE_ERROR = 4,
WHISPER_TYPE_GM = 5,
WHISPER_TYPE_SYSTEM = 0xFF
};

enum ECharacterPosition
{
POSITION_GENERAL,
POSITION_BATTLE,
POSITION_DYING,
POSITION_SITTING_CHAIR,
POSITION_SITTING_GROUND,
POSITION_INTRO,
POSITION_MAX_NUM
};

enum EGMLevels
{
GM_PLAYER,
GM_LOW_WIZARD,
GM_WIZARD,
GM_HIGH_WIZARD,
GM_GOD,
GM_IMPLEMENTOR,
GM_DISABLE,
};

enum EMobRank
{
MOB_RANK_PAWN,
MOB_RANK_S_PAWN,
MOB_RANK_KNIGHT,
MOB_RANK_S_KNIGHT,
MOB_RANK_BOSS,
MOB_RANK_KING,
MOB_RANK_MAX_NUM
};

enum ECharType
{
CHAR_TYPE_MONSTER,
CHAR_TYPE_NPC,
CHAR_TYPE_STONE,
CHAR_TYPE_WARP,
CHAR_TYPE_DOOR,
CHAR_TYPE_BUILDING,
CHAR_TYPE_PC,
CHAR_TYPE_POLYMORPH_PC,
CHAR_TYPE_HORSE,
CHAR_TYPE_GOTO
};

enum EBattleType
{
BATTLE_TYPE_MELEE,
BATTLE_TYPE_RANGE,
BATTLE_TYPE_MAGIC,
BATTLE_TYPE_SPECIAL,
BATTLE_TYPE_POWER,
BATTLE_TYPE_TANKER,
BATTLE_TYPE_SUPER_POWER,
BATTLE_TYPE_SUPER_TANKER,
BATTLE_TYPE_MAX_NUM
};

enum EApplyTypes
{
APPLY_NONE, // 0
APPLY_MAX_HP, // 1
APPLY_MAX_SP, // 2
APPLY_CON, // 3
APPLY_INT, // 4
APPLY_STR, // 5
APPLY_DEX, // 6
APPLY_ATT_SPEED, // 7
APPLY_MOV_SPEED, // 8
APPLY_CAST_SPEED, // 9
APPLY_HP_REGEN, // 10
APPLY_SP_REGEN, // 11
APPLY_POISON_PCT, // 12
APPLY_STUN_PCT, // 13
APPLY_SLOW_PCT, // 14
APPLY_CRITICAL_PCT, // 15
APPLY_PENETRATE_PCT, // 16
APPLY_ATTBONUS_HUMAN, // 17
APPLY_ATTBONUS_ANIMAL, // 18
APPLY_ATTBONUS_ORC, // 19
APPLY_ATTBONUS_MILGYO, // 20
APPLY_ATTBONUS_UNDEAD, // 21
APPLY_ATTBONUS_DEVIL, // 22
APPLY_STEAL_HP, // 23
APPLY_STEAL_SP, // 24
APPLY_MANA_BURN_PCT, // 25
APPLY_DAMAGE_SP_RECOVER, // 26
APPLY_BLOCK, // 27
APPLY_DODGE, // 28
APPLY_RESIST_SWORD, // 29
APPLY_RESIST_TWOHAND, // 30
APPLY_RESIST_DAGGER, // 31
APPLY_RESIST_BELL, // 32
APPLY_RESIST_FAN, // 33
APPLY_RESIST_BOW, // 34
APPLY_RESIST_FIRE, // 35
APPLY_RESIST_ELEC, // 36
APPLY_RESIST_MAGIC, // 37
APPLY_RESIST_WIND, // 38
APPLY_REFLECT_MELEE, // 39
APPLY_REFLECT_CURSE, // 40
APPLY_POISON_REDUCE, // 41
APPLY_KILL_SP_RECOVER, // 42
APPLY_EXP_DOUBLE_BONUS, // 43
APPLY_GOLD_DOUBLE_BONUS, // 44
APPLY_ITEM_DROP_BONUS, // 45
APPLY_POTION_BONUS, // 46
APPLY_KILL_HP_RECOVER, // 47
APPLY_IMMUNE_STUN, // 48
APPLY_IMMUNE_SLOW, // 49
APPLY_IMMUNE_FALL, // 50
APPLY_SKILL, // 51
APPLY_BOW_DISTANCE, // 52
APPLY_ATT_GRADE_BONUS, // 53
APPLY_DEF_GRADE_BONUS, // 54
APPLY_MAGIC_ATT_GRADE, // 55
APPLY_MAGIC_DEF_GRADE, // 56
APPLY_CURSE_PCT, // 57
APPLY_MAX_STAMINA, // 58
APPLY_ATTBONUS_WARRIOR, // 59
APPLY_ATTBONUS_ASSASSIN, // 60
APPLY_ATTBONUS_SURA, // 61
APPLY_ATTBONUS_SHAMAN, // 62
APPLY_ATTBONUS_MONSTER, // 63
APPLY_MALL_ATTBONUS,
APPLY_MALL_DEFBONUS,
APPLY_MALL_EXPBONUS,
APPLY_MALL_ITEMBONUS,
APPLY_MALL_GOLDBONUS,
APPLY_MAX_HP_PCT,
APPLY_MAX_SP_PCT,
APPLY_SKILL_DAMAGE_BONUS,
APPLY_NORMAL_HIT_DAMAGE_BONUS,
APPLY_SKILL_DEFEND_BONUS,
APPLY_NORMAL_HIT_DEFEND_BONUS,
APPLY_PC_BANG_EXP_BONUS,
APPLY_PC_BANG_DROP_BONUS,

APPLY_EXTRACT_HP_PCT,

APPLY_RESIST_WARRIOR,
APPLY_RESIST_ASSASSIN,
APPLY_RESIST_SURA,
APPLY_RESIST_SHAMAN,
APPLY_ENERGY,
APPLY_DEF_GRADE,
APPLY_COSTUME_ATTR_BONUS,
APPLY_MAGIC_ATTBONUS_PER,
APPLY_MELEE_MAGIC_ATTBONUS_PER,

APPLY_RESIST_ICE,
APPLY_RESIST_EARTH,
APPLY_RESIST_DARK,

APPLY_ANTI_CRITICAL_PCT,
APPLY_ANTI_PENETRATE_PCT,

#ifdef ENABLE_WOLFMAN_CHARACTER
APPLY_BLEEDING_REDUCE,
APPLY_BLEEDING_PCT,
APPLY_ATTBONUS_WOLFMAN,
APPLY_RESIST_WOLFMAN,
APPLY_RESIST_CLAW,
#endif

#ifdef ENABLE_ACCE_SYSTEM
APPLY_ACCEDRAIN_RATE,
#endif

#ifdef ENABLE_MAGIC_REDUCTION_SYSTEM
APPLY_RESIST_MAGIC_REDUCTION, //98
#endif
#ifdef ENABLE_PENDANT_SYSTEM
APPLY_MOUNT,
APPLY_ENCHANT_FIRE,
APPLY_ENCHANT_ICE,
APPLY_ENCHANT_EARTH,
APPLY_ENCHANT_DARK,
APPLY_ENCHANT_WIND,
APPLY_ENCHANT_ELECT,
APPLY_RESIST_HUMAN,
APPLY_ATTBONUS_SWORD,
APPLY_ATTBONUS_TWOHAND,
APPLY_ATTBONUS_DAGGER,
APPLY_ATTBONUS_BELL,
APPLY_ATTBONUS_FAN,
APPLY_ATTBONUS_BOW,
#ifdef ENABLE_WOLFMAN_CHARACTER
APPLY_ATTBONUS_CLAW,
#endif
APPLY_ATTBONUS_CZ,
APPLY_ATTBONUS_DESERT,
APPLY_ATTBONUS_INSECT,
#endif
#ifdef ENABLE_EXTRA_APPLY_BONUS
APPLY_ATTBONUS_STONE,
APPLY_ATTBONUS_BOSS,
APPLY_ATTBONUS_ELEMENTS,
APPLY_ENCHANT_ELEMENTS,
APPLY_ATTBONUS_CHARACTERS,
APPLY_ENCHANT_CHARACTERS,
APPLY_ATTBONUS_RAZADOR,
APPLY_ATTBONUS_NEMERE,
APPLY_ATTBONUS_LUCIFER,
APPLY_ATTBONUS_BLUE_DRAGON,
APPLY_ATTBONUS_RED_DRAGON,
APPLY_ATTBONUS_AZRAEL,
#endif
#ifdef ENABLE_GLOVE_SYSTEM
APPLY_RANDOM,
#endif
MAX_APPLY_NUM = 130,
};

enum EOnClickEvents
{
ON_CLICK_NONE,
ON_CLICK_SHOP,
ON_CLICK_TALK,
ON_CLICK_MAX_NUM
};

enum EOnIdleEvents
{
ON_IDLE_NONE,
ON_IDLE_GENERAL,
ON_IDLE_MAX_NUM
};

enum EWindows
{
RESERVED_WINDOW,
INVENTORY,
EQUIPMENT,
SAFEBOX,
MALL,
DRAGON_SOUL_INVENTORY,
#ifdef ENABLE_SPECIAL_STORAGE
UPGRADE_INVENTORY,
BOOK_INVENTORY,
STONE_INVENTORY,
CHEST_INVENTORY,
#endif
#ifdef __AURA_SYSTEM__
AURA_REFINE,
#endif
BELT_INVENTORY,
GROUND,
#ifdef __ENABLE_NEW_OFFLINESHOP__
NEW_OFFSHOP,
SHOP_SAFEBOX,
#endif
};

enum EMobSizes
{
MOBSIZE_RESERVED,
MOBSIZE_SMALL,
MOBSIZE_MEDIUM,
MOBSIZE_BIG
};

enum EAIFlags
{
AIFLAG_AGGRESSIVE = (1 << 0),
AIFLAG_NOMOVE = (1 << 1),
AIFLAG_COWARD = (1 << 2),
AIFLAG_NOATTACKSHINSU = (1 << 3),
AIFLAG_NOATTACKJINNO = (1 << 4),
AIFLAG_NOATTACKCHUNJO = (1 << 5),
AIFLAG_ATTACKMOB = (1 << 6),
AIFLAG_BERSERK = (1 << 7),
AIFLAG_STONESKIN = (1 << 8),
AIFLAG_GODSPEED = (1 << 9),
AIFLAG_DEATHBLOW = (1 << 10),
AIFLAG_REVIVE = (1 << 11),
};

enum EMobStatType
{
MOB_STATTYPE_POWER,
MOB_STATTYPE_TANKER,
MOB_STATTYPE_SUPER_POWER,
MOB_STATTYPE_SUPER_TANKER,
MOB_STATTYPE_RANGE,
MOB_STATTYPE_MAGIC,
MOB_STATTYPE_MAX_NUM
};

enum EImmuneFlags
{
IMMUNE_STUN = (1 << 0),
IMMUNE_SLOW = (1 << 1),
IMMUNE_FALL = (1 << 2),
IMMUNE_CURSE = (1 << 3),
IMMUNE_POISON = (1 << 4),
IMMUNE_TERROR = (1 << 5),
IMMUNE_REFLECT = (1 << 6),
};

enum EMobEnchants
{
MOB_ENCHANT_CURSE,
MOB_ENCHANT_SLOW,
MOB_ENCHANT_POISON,
MOB_ENCHANT_STUN,
MOB_ENCHANT_CRITICAL,
MOB_ENCHANT_PENETRATE,
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
MOB_ENCHANT_BLEEDING,
#endif
MOB_ENCHANTS_MAX_NUM
};

enum EMobResists
{
MOB_RESIST_SWORD,
MOB_RESIST_TWOHAND,
MOB_RESIST_DAGGER,
MOB_RESIST_BELL,
MOB_RESIST_FAN,
MOB_RESIST_BOW,
MOB_RESIST_FIRE,
MOB_RESIST_ELECT,
MOB_RESIST_MAGIC,
MOB_RESIST_WIND,
MOB_RESIST_POISON,
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_CLAW_AS_DAGGER)
MOB_RESIST_CLAW,
#endif
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
MOB_RESIST_BLEEDING,
#endif
MOB_RESISTS_MAX_NUM
};

enum
{
SKILL_ATTR_TYPE_NORMAL = 1,
SKILL_ATTR_TYPE_MELEE,
SKILL_ATTR_TYPE_RANGE,
SKILL_ATTR_TYPE_MAGIC
/*
SKILL_ATTR_TYPE_FIRE,
SKILL_ATTR_TYPE_ICE,
SKILL_ATTR_TYPE_ELEC,
SKILL_ATTR_TYPE_DARK,
*/
};

enum
{
SKILL_NORMAL,
SKILL_MASTER,
SKILL_GRAND_MASTER,
SKILL_PERFECT_MASTER,
};

enum EGuildWarType
{
GUILD_WAR_TYPE_FIELD,
GUILD_WAR_TYPE_BATTLE,
GUILD_WAR_TYPE_FLAG,
GUILD_WAR_TYPE_MAX_NUM
};

enum EGuildWarState
{
GUILD_WAR_NONE,
GUILD_WAR_SEND_DECLARE,
GUILD_WAR_REFUSE,
GUILD_WAR_RECV_DECLARE,
GUILD_WAR_WAIT_START,
GUILD_WAR_CANCEL,
GUILD_WAR_ON_WAR,
GUILD_WAR_END,
GUILD_WAR_OVER,
GUILD_WAR_RESERVE,

GUILD_WAR_DURATION = 30 * 60,
GUILD_WAR_WIN_POINT = 1000,
GUILD_WAR_LADDER_HALF_PENALTY_TIME = 12 * 60 * 60,
};

enum EAttributeSet
{
ATTRIBUTE_SET_WEAPON,
ATTRIBUTE_SET_BODY,
ATTRIBUTE_SET_WRIST,
ATTRIBUTE_SET_FOOTS,
ATTRIBUTE_SET_NECK,
ATTRIBUTE_SET_HEAD,
ATTRIBUTE_SET_SHIELD,
ATTRIBUTE_SET_EAR,
#ifdef ENABLE_ITEM_ATTR_COSTUME
ATTRIBUTE_SET_COSTUME_BODY,
ATTRIBUTE_SET_COSTUME_HAIR,
#if defined(ENABLE_ITEM_ATTR_COSTUME) && defined(ENABLE_WEAPON_COSTUME_SYSTEM)
ATTRIBUTE_SET_COSTUME_WEAPON,
#endif
#endif
#ifdef ENABLE_PENDANT_SYSTEM
ATTRIBUTE_SET_PENDANT,
#endif
ATTRIBUTE_SET_MAX_NUM
};

enum EPrivType
{
PRIV_NONE,
PRIV_ITEM_DROP,
PRIV_GOLD_DROP,
PRIV_GOLD10_DROP,
PRIV_EXP_PCT,
MAX_PRIV_NUM,
};

enum EMoneyLogType
{
MONEY_LOG_RESERVED,
MONEY_LOG_MONSTER,
MONEY_LOG_SHOP,
MONEY_LOG_REFINE,
MONEY_LOG_QUEST,
MONEY_LOG_GUILD,
MONEY_LOG_MISC,
MONEY_LOG_MONSTER_KILL,
MONEY_LOG_DROP,
MONEY_LOG_TYPE_MAX_NUM,
};

enum EPremiumTypes
{
PREMIUM_EXP,
PREMIUM_ITEM,
PREMIUM_SAFEBOX,
PREMIUM_AUTOLOOT,
PREMIUM_FISH_MIND,
PREMIUM_MARRIAGE_FAST,
PREMIUM_GOLD,
PREMIUM_MAX_NUM = 9
};

enum SPECIAL_EFFECT
{
SE_NONE,

SE_HPUP_RED,
SE_SPUP_BLUE,
SE_SPEEDUP_GREEN,
SE_DXUP_PURPLE,
SE_CRITICAL,
SE_PENETRATE,
SE_BLOCK,
SE_DODGE,
SE_CHINA_FIREWORK,
SE_SPIN_TOP,
SE_SUCCESS,
SE_FAIL,
SE_FR_SUCCESS,
SE_LEVELUP_ON_14_FOR_GERMANY,
SE_LEVELUP_UNDER_15_FOR_GERMANY,
SE_PERCENT_DAMAGE1,
SE_PERCENT_DAMAGE2,
SE_PERCENT_DAMAGE3,

SE_AUTO_HPUP,
SE_AUTO_SPUP,

SE_EQUIP_RAMADAN_RING,
SE_EQUIP_HALLOWEEN_CANDY,
SE_EQUIP_HAPPINESS_RING,
SE_EQUIP_LOVE_PENDANT,

#ifdef ENABLE_ACCE_SYSTEM
SE_EFFECT_ACCE_SUCCEDED,
SE_EFFECT_ACCE_EQUIP,
#endif
#ifdef ENABLE_AGGREGATE_MONSTER_EFFECT
SE_AGGREGATE_MONSTER_EFFECT,
#endif
#ifdef ENABLE_UPGRADE_EFFECT
SE_UPSUCCESS,
SE_UPFAILED,
#endif
#ifdef ENABLE_DUEL_EFFECT
SE_PVP_WIN,
SE_PVP_OPEN1,
SE_PVP_OPEN2,
SE_PVP_BEGIN1,
SE_PVP_BEGIN2,
#endif
};

enum ETeenFlags
{
TEENFLAG_NONE = 0,
TEENFLAG_1HOUR,
TEENFLAG_2HOUR,
TEENFLAG_3HOUR,
TEENFLAG_4HOUR,
TEENFLAG_5HOUR,
};

#include "item_length.h"






enum EDragonSoulRefineWindowSize
{
DRAGON_SOUL_REFINE_GRID_MAX = 15,
};

enum EMisc2
{
DRAGON_SOUL_EQUIP_SLOT_START = INVENTORY_MAX_NUM + WEAR_MAX_NUM,
DRAGON_SOUL_EQUIP_SLOT_END = DRAGON_SOUL_EQUIP_SLOT_START + (DS_SLOT_MAX * DRAGON_SOUL_DECK_MAX_NUM),
DRAGON_SOUL_EQUIP_RESERVED_SLOT_END = DRAGON_SOUL_EQUIP_SLOT_END + (DS_SLOT_MAX * DRAGON_SOUL_DECK_RESERVED_MAX_NUM),

BELT_INVENTORY_SLOT_START = DRAGON_SOUL_EQUIP_RESERVED_SLOT_END,
BELT_INVENTORY_SLOT_END = BELT_INVENTORY_SLOT_START + BELT_INVENTORY_SLOT_COUNT,

INVENTORY_AND_EQUIP_SLOT_MAX = BELT_INVENTORY_SLOT_END,
};

#pragma pack(push, 1)

typedef struct SItemPos
{
BYTE window_type;
WORD cell;
SItemPos()
{
window_type = INVENTORY;
cell = WORD_MAX;
}

SItemPos(BYTE _window_type, WORD _cell)
{
window_type = _window_type;
cell = _cell;
}

bool IsValidItemPosition() const
{
switch (window_type)
{
case RESERVED_WINDOW:
return false;
case INVENTORY:
case EQUIPMENT:
case BELT_INVENTORY:
return cell < INVENTORY_AND_EQUIP_SLOT_MAX;
case DRAGON_SOUL_INVENTORY:
return cell < (DRAGON_SOUL_INVENTORY_MAX_NUM);
#ifdef ENABLE_SPECIAL_STORAGE
case UPGRADE_INVENTORY:
case BOOK_INVENTORY:
case STONE_INVENTORY:
case CHEST_INVENTORY:
return cell < (SPECIAL_INVENTORY_MAX_NUM);
#endif
case SAFEBOX:
case MALL:
return false;
default:
return false;
}
return false;
}

bool IsEquipPosition() const
{
return ((INVENTORY == window_type || EQUIPMENT == window_type) && cell >= INVENTORY_MAX_NUM && cell < INVENTORY_MAX_NUM + WEAR_MAX_NUM)
|| IsDragonSoulEquipPosition();
}

bool IsDragonSoulEquipPosition() const
{
return (window_type == INVENTORY) && (DRAGON_SOUL_EQUIP_SLOT_START <= cell) && (DRAGON_SOUL_EQUIP_SLOT_END > cell);
}

bool IsBeltInventoryPosition() const
{
return (BELT_INVENTORY_SLOT_START <= cell) && (BELT_INVENTORY_SLOT_END > cell);
}

bool IsDefaultInventoryPosition() const
{
return INVENTORY == window_type && cell < INVENTORY_MAX_NUM;
}

bool operator==(const struct SItemPos& rhs) const
{
return (window_type == rhs.window_type) && (cell == rhs.cell);
}
bool operator<(const struct SItemPos& rhs) const
{
return (window_type < rhs.window_type) || ((window_type == rhs.window_type) && (cell < rhs.cell));
}
bool operator!=(const struct SItemPos& rhs) const
{
return (window_type != rhs.window_type) || (cell != rhs.cell);
}
} TItemPos;

const TItemPos NPOS(RESERVED_WINDOW, WORD_MAX);

typedef struct SItemPosEx
{
TItemPos pos;
int id{ 0 };
} TItemPosEx;

typedef enum
{
SHOP_COIN_TYPE_GOLD, // DEFAULT VALUE
SHOP_COIN_TYPE_SECONDARY_COIN,
} EShopCoinType;


#ifdef __AURA_SYSTEM__
typedef struct SAuraRefineInfo
{
BYTE bAuraRefineInfoLevel;
BYTE bAuraRefineInfoExpPercent;
} TAuraRefineInfo;

enum EAuraMisc
{
AURA_MAX_LEVEL = 250,
AURA_REFINE_MAX_DISTANCE = 1000,
};

enum EAuraWindowType
{
AURA_WINDOW_TYPE_ABSORB,
AURA_WINDOW_TYPE_GROWTH,
AURA_WINDOW_TYPE_EVOLVE,
AURA_WINDOW_TYPE_MAX,
};

enum EAuraSlotType
{
AURA_SLOT_MAIN,
AURA_SLOT_SUB,
AURA_SLOT_RESULT,
AURA_SLOT_MAX
};

enum EAuraGradeType
{
AURA_GRADE_NONE,
AURA_GRADE_ORDINARY,
AURA_GRADE_SIMPLE,
AURA_GRADE_NOBLE,
AURA_GRADE_SPARKLING,
AURA_GRADE_MAGNIFICENT,
AURA_GRADE_RADIANT,
AURA_GRADE_MAX_NUM,
};
enum EAuraRefineInfoType
{
AURA_REFINE_INFO_STEP,
AURA_REFINE_INFO_LEVEL_MIN,
AURA_REFINE_INFO_LEVEL_MAX,
AURA_REFINE_INFO_NEED_EXP,
AURA_REFINE_INFO_MATERIAL_VNUM,
AURA_REFINE_INFO_MATERIAL_COUNT,
AURA_REFINE_INFO_NEED_GOLD,
AURA_REFINE_INFO_EVOLVE_PCT,
AURA_REFINE_INFO_MAX
};

enum ERefineInfoType
{
AURA_REFINE_INFO_SLOT_CURRENT,
AURA_REFINE_INFO_SLOT_NEXT,
AURA_REFINE_INFO_SLOT_EVOLVED,
AURA_REFINE_INFO_SLOT_MAX
};
#endif

#pragma pack(pop)

#endif
[/CODE]

[CODE title="gametype.h"]#pragma once
#include "../GameLib/ItemData.h"

struct SAffects
{
enum
{
AFFECT_MAX_NUM = 32,
};

SAffects() : dwAffects(0) {}
SAffects(const DWORD & c_rAffects)
{
__SetAffects(c_rAffects);
}
int operator = (const DWORD & c_rAffects)
{
__SetAffects(c_rAffects);
}

BOOL IsAffect(BYTE byIndex)
{
return dwAffects & (1 << byIndex);
}

void __SetAffects(const DWORD & c_rAffects)
{
dwAffects = c_rAffects;
}

DWORD dwAffects;
};

extern std::string g_strGuildSymbolPathName;

const DWORD c_Name_Max_Length = 64;
const DWORD c_FileName_Max_Length = 128;
const DWORD c_Short_Name_Max_Length = 32;

const DWORD c_Inventory_Page_Column = 5;
const DWORD c_Inventory_Page_Row = 9;
const DWORD c_Inventory_Page_Size = c_Inventory_Page_Column*c_Inventory_Page_Row; // x*y
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
const DWORD c_Inventory_Page_Count = 4;
#else
const DWORD c_Inventory_Page_Count = 2;
#endif
const DWORD c_ItemSlot_Count = c_Inventory_Page_Size * c_Inventory_Page_Count;
const DWORD c_Equipment_Count = 12;

const DWORD c_Equipment_Start = c_ItemSlot_Count;

const DWORD c_Equipment_Body = c_Equipment_Start + CItemData::WEAR_BODY;
const DWORD c_Equipment_Head = c_Equipment_Start + CItemData::WEAR_HEAD;
const DWORD c_Equipment_Shoes = c_Equipment_Start + CItemData::WEAR_FOOTS;
const DWORD c_Equipment_Wrist = c_Equipment_Start + CItemData::WEAR_WRIST;
const DWORD c_Equipment_Weapon = c_Equipment_Start + CItemData::WEAR_WEAPON;
const DWORD c_Equipment_Neck = c_Equipment_Start + CItemData::WEAR_NECK;
const DWORD c_Equipment_Ear = c_Equipment_Start + CItemData::WEAR_EAR;
const DWORD c_Equipment_Unique1 = c_Equipment_Start + CItemData::WEAR_UNIQUE1;
const DWORD c_Equipment_Unique2 = c_Equipment_Start + CItemData::WEAR_UNIQUE2;
const DWORD c_Equipment_Arrow = c_Equipment_Start + CItemData::WEAR_ARROW;
const DWORD c_Equipment_Shield = c_Equipment_Start + CItemData::WEAR_SHIELD;

#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
const DWORD c_New_Equipment_Start = c_Equipment_Start + CItemData::WEAR_RING1;
const DWORD c_New_Equipment_Count = 4;
const DWORD c_Equipment_Ring1 = c_Equipment_Start + CItemData::WEAR_RING1;
const DWORD c_Equipment_Ring2 = c_Equipment_Start + CItemData::WEAR_RING2;
const DWORD c_Equipment_Belt = c_Equipment_Start + CItemData::WEAR_BELT;
#ifdef ENABLE_PENDANT_SYSTEM
const DWORD c_Equipment_Pendant = c_Equipment_Start + CItemData::WEAR_PENDANT;
#endif
#ifdef ENABLE_GLOVE_SYSTEM
const DWORD c_Equipment_Glove = c_Equipment_Start + CItemData::WEAR_GLOVE;
#endif
#endif

enum EDragonSoulDeckType
{
DS_DECK_1,
DS_DECK_2,
DS_DECK_MAX_NUM = 2,
};

enum EDragonSoulGradeTypes
{
DRAGON_SOUL_GRADE_NORMAL,
DRAGON_SOUL_GRADE_BRILLIANT,
DRAGON_SOUL_GRADE_RARE,
DRAGON_SOUL_GRADE_ANCIENT,
DRAGON_SOUL_GRADE_LEGENDARY,
#ifdef ENABLE_DS_GRADE_MYTH
DRAGON_SOUL_GRADE_MYTH,
#endif
DRAGON_SOUL_GRADE_MAX,
};

enum EDragonSoulStepTypes
{
DRAGON_SOUL_STEP_LOWEST,
DRAGON_SOUL_STEP_LOW,
DRAGON_SOUL_STEP_MID,
DRAGON_SOUL_STEP_HIGH,
DRAGON_SOUL_STEP_HIGHEST,
DRAGON_SOUL_STEP_MAX,
};

#ifdef ENABLE_COSTUME_SYSTEM
const DWORD c_Costume_Slot_Start = c_Equipment_Start + CItemData::WEAR_COSTUME_BODY;
const DWORD c_Costume_Slot_Body = c_Costume_Slot_Start + CItemData::COSTUME_BODY;
const DWORD c_Costume_Slot_Hair = c_Costume_Slot_Start + CItemData::COSTUME_HAIR;
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
const DWORD c_Costume_Slot_Mount = c_Costume_Slot_Start + CItemData::COSTUME_MOUNT;
#endif
#ifdef ENABLE_ACCE_SYSTEM
const DWORD c_Costume_Slot_Acce = c_Costume_Slot_Start + CItemData::COSTUME_ACCE;
#endif
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
const DWORD c_Costume_Slot_Weapon = c_Costume_Slot_Start + CItemData::COSTUME_WEAPON; // c_Costume_Slot_End + 1;
#endif
#ifdef ENABLE_AURA_SYSTEM
const DWORD c_Costume_Slot_Aura = c_Costume_Slot_Start + CItemData::COSTUME_AURA;
#endif
#if defined(ENABLE_WEAPON_COSTUME_SYSTEM) || defined(ENABLE_ACCE_SYSTEM)
const DWORD c_Costume_Slot_Count = 6;
#elif defined(ENABLE_MOUNT_COSTUME_SYSTEM)
const DWORD c_Costume_Slot_Count = 3;
#else
const DWORD c_Costume_Slot_Count = 2;
#endif

const DWORD c_Costume_Slot_End = c_Costume_Slot_Start + c_Costume_Slot_Count;




#endif


const DWORD c_Wear_Max = 32;
const DWORD c_DragonSoul_Equip_Start = c_ItemSlot_Count + c_Wear_Max;
const DWORD c_DragonSoul_Equip_Slot_Max = 6;
const DWORD c_DragonSoul_Equip_End = c_DragonSoul_Equip_Start + c_DragonSoul_Equip_Slot_Max * DS_DECK_MAX_NUM;

const DWORD c_DragonSoul_Equip_Reserved_Count = c_DragonSoul_Equip_Slot_Max * 3;

#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
const DWORD c_Belt_Inventory_Slot_Start = c_DragonSoul_Equip_End + c_DragonSoul_Equip_Reserved_Count;
const DWORD c_Belt_Inventory_Width = 4;
const DWORD c_Belt_Inventory_Height= 4;
const DWORD c_Belt_Inventory_Slot_Count = c_Belt_Inventory_Width * c_Belt_Inventory_Height;
const DWORD c_Belt_Inventory_Slot_End = c_Belt_Inventory_Slot_Start + c_Belt_Inventory_Slot_Count;

const DWORD c_Inventory_Count = c_Belt_Inventory_Slot_End;
#else
const DWORD c_Inventory_Count = c_DragonSoul_Equip_End;
#endif

const DWORD c_DragonSoul_Inventory_Start = 0;
const DWORD c_DragonSoul_Inventory_Box_Size = 32;
const DWORD c_DragonSoul_Inventory_Count = CItemData::DS_SLOT_NUM_TYPES * DRAGON_SOUL_GRADE_MAX * c_DragonSoul_Inventory_Box_Size;
const DWORD c_DragonSoul_Inventory_End = c_DragonSoul_Inventory_Start + c_DragonSoul_Inventory_Count;

#ifdef ENABLE_SPECIAL_STORAGE
const DWORD c_Special_Inventory_Page_Size = 5 * 9;
const DWORD c_Special_Inventory_Page_Count = 4;
const DWORD c_Special_ItemSlot_Count = c_Special_Inventory_Page_Size * c_Special_Inventory_Page_Count;

#endif
enum ESlotType
{
SLOT_TYPE_NONE,
SLOT_TYPE_INVENTORY,
SLOT_TYPE_SKILL,
SLOT_TYPE_EMOTION,
SLOT_TYPE_SHOP,
SLOT_TYPE_EXCHANGE_OWNER,
SLOT_TYPE_EXCHANGE_TARGET,
SLOT_TYPE_QUICK_SLOT,
SLOT_TYPE_SAFEBOX,
SLOT_TYPE_PRIVATE_SHOP,
SLOT_TYPE_MALL,
SLOT_TYPE_DRAGON_SOUL_INVENTORY,
#ifdef ENABLE_SPECIAL_STORAGE
SLOT_TYPE_UPGRADE_INVENTORY,
SLOT_TYPE_BOOK_INVENTORY,
SLOT_TYPE_STONE_INVENTORY,
SLOT_TYPE_CHEST_INVENTORY,
#endif
#ifdef ENABLE_AURA_SYSTEM
SLOT_TYPE_AURA,
#endif
SLOT_TYPE_MAX,
};

#ifdef ENABLE_AURA_SYSTEM
const BYTE c_AuraMaxLevel = 250;

enum EAuraRefineInfoSlot
{
AURA_REFINE_INFO_SLOT_CURRENT,
AURA_REFINE_INFO_SLOT_NEXT,
AURA_REFINE_INFO_SLOT_EVOLVED,
AURA_REFINE_INFO_SLOT_MAX
};

enum EAuraWindowType
{
AURA_WINDOW_TYPE_ABSORB,
AURA_WINDOW_TYPE_GROWTH,
AURA_WINDOW_TYPE_EVOLVE,
AURA_WINDOW_TYPE_MAX,
};

enum EAuraSlotType
{
AURA_SLOT_MAIN,
AURA_SLOT_SUB,
AURA_SLOT_RESULT,
AURA_SLOT_MAX
};

enum EAuraRefineInfoType
{
AURA_REFINE_INFO_STEP,
AURA_REFINE_INFO_LEVEL_MIN,
AURA_REFINE_INFO_LEVEL_MAX,
AURA_REFINE_INFO_NEED_EXP,
AURA_REFINE_INFO_MATERIAL_VNUM,
AURA_REFINE_INFO_MATERIAL_COUNT,
AURA_REFINE_INFO_NEED_GOLD,
AURA_REFINE_INFO_EVOLVE_PCT,
AURA_REFINE_INFO_MAX
};
#endif

enum EWindows
{
RESERVED_WINDOW,
INVENTORY,
EQUIPMENT,
SAFEBOX,
MALL,
DRAGON_SOUL_INVENTORY,
#ifdef ENABLE_SPECIAL_STORAGE
UPGRADE_INVENTORY,
BOOK_INVENTORY,
STONE_INVENTORY,
CHEST_INVENTORY,
#endif
#ifdef ENABLE_AURA_SYSTEM
AURA_REFINE,
#endif
BELT_INVENTORY,
GROUND,

WINDOW_TYPE_MAX,
};

enum EDSInventoryMaxNum
{
DS_INVENTORY_MAX_NUM = c_DragonSoul_Inventory_Count,
DS_REFINE_WINDOW_MAX_NUM = 15,
};

#pragma pack (push, 1)
#define WORD_MAX 0xffff

typedef struct SItemPos
{
BYTE window_type;
WORD cell;
SItemPos ()
{
window_type = INVENTORY;
cell = WORD_MAX;
}
SItemPos (BYTE _window_type, WORD _cell)
{
window_type = _window_type;
cell = _cell;
}

// int operator=(const int _cell)
// {
//window_type = INVENTORY;
// cell = _cell;
// return cell;
// }
bool IsValidCell()
{
switch (window_type)
{
case INVENTORY:
return cell < c_Inventory_Count;
break;
case EQUIPMENT:
return cell < c_DragonSoul_Equip_End;
break;
case DRAGON_SOUL_INVENTORY:
return cell < (DS_INVENTORY_MAX_NUM);
break;
#ifdef ENABLE_SPECIAL_STORAGE
case UPGRADE_INVENTORY:
return cell < c_Special_ItemSlot_Count;
break;
case BOOK_INVENTORY:
return cell < c_Special_ItemSlot_Count;
break;
case STONE_INVENTORY:
return cell < c_Special_ItemSlot_Count;
break;
case CHEST_INVENTORY:
return cell < c_Special_ItemSlot_Count;
break;
#endif
default:
return false;
}
}
bool IsEquipCell()
{
switch (window_type)
{
case INVENTORY:
case EQUIPMENT:
return (c_Equipment_Start + c_Wear_Max > cell) && (c_Equipment_Start <= cell);
break;

case BELT_INVENTORY:
case DRAGON_SOUL_INVENTORY:
#ifdef ENABLE_SPECIAL_STORAGE
case UPGRADE_INVENTORY:
case BOOK_INVENTORY:
case STONE_INVENTORY:
case CHEST_INVENTORY:
#endif
return false;
break;

default:
return false;
}
}

#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
bool IsBeltInventoryCell()
{
bool bResult = c_Belt_Inventory_Slot_Start <= cell && c_Belt_Inventory_Slot_End > cell;
return bResult;
}
#endif

bool IsNPOS()
{
return (window_type == RESERVED_WINDOW && cell == WORD_MAX);
}
bool operator==(const struct SItemPos& rhs) const
{
return (window_type == rhs.window_type) && (cell == rhs.cell);
}
bool operator!=(const struct SItemPos& rhs) const
{
return (window_type != rhs.window_type) || (cell != rhs.cell);
}
bool operator<(const struct SItemPos& rhs) const
{
return (window_type < rhs.window_type) || ((window_type == rhs.window_type) && (cell < rhs.cell));
}
} TItemPos;
const TItemPos NPOS(RESERVED_WINDOW, WORD_MAX);
#pragma pack(pop)

const DWORD c_QuickBar_Line_Count = 3;
const DWORD c_QuickBar_Slot_Count = 12;

const float c_Idle_WaitTime = 5.0f;

const int c_Monster_Race_Start_Number = 6;
const int c_Monster_Model_Start_Number = 20001;

const float c_fAttack_Delay_Time = 0.2f;
const float c_fHit_Delay_Time = 0.1f;
const float c_fCrash_Wave_Time = 0.2f;
const float c_fCrash_Wave_Distance = 3.0f;

const float c_fHeight_Step_Distance = 50.0f;

enum
{
DISTANCE_TYPE_FOUR_WAY,
DISTANCE_TYPE_EIGHT_WAY,
DISTANCE_TYPE_ONE_WAY,
DISTANCE_TYPE_MAX_NUM,
};

const float c_fMagic_Script_Version = 1.0f;
const float c_fSkill_Script_Version = 1.0f;
const float c_fMagicSoundInformation_Version = 1.0f;
const float c_fBattleCommand_Script_Version = 1.0f;
const float c_fEmotionCommand_Script_Version = 1.0f;
const float c_fActive_Script_Version = 1.0f;
const float c_fPassive_Script_Version = 1.0f;

// Used by PushMove
const float c_fWalkDistance = 175.0f;
const float c_fRunDistance = 310.0f;

#define FILE_MAX_LEN 128

enum
{
ITEM_SOCKET_SLOT_MAX_NUM = 3,
// refactored attribute slot begin
ITEM_ATTRIBUTE_SLOT_NORM_NUM = 5,
ITEM_ATTRIBUTE_SLOT_RARE_NUM = 2,

ITEM_ATTRIBUTE_SLOT_NORM_START = 0,
ITEM_ATTRIBUTE_SLOT_NORM_END = ITEM_ATTRIBUTE_SLOT_NORM_START + ITEM_ATTRIBUTE_SLOT_NORM_NUM,

ITEM_ATTRIBUTE_SLOT_RARE_START = ITEM_ATTRIBUTE_SLOT_NORM_END,
ITEM_ATTRIBUTE_SLOT_RARE_END = ITEM_ATTRIBUTE_SLOT_RARE_START + ITEM_ATTRIBUTE_SLOT_RARE_NUM,

ITEM_ATTRIBUTE_SLOT_MAX_NUM = ITEM_ATTRIBUTE_SLOT_RARE_END, // 7
// refactored attribute slot end
};

#pragma pack(push)
#pragma pack(1)

typedef struct SQuickSlot
{
BYTE Type;
BYTE Position;
} TQuickSlot;

typedef struct TPlayerItemAttribute
{
BYTE bType;
short sValue;
} TPlayerItemAttribute;

typedef struct packet_item
{
DWORD vnum;
BYTE count;
DWORD flags;
DWORD anti_flags;
long alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
} TItemData;

typedef struct packet_shop_item
{
DWORD vnum;
DWORD price;
BYTE count;
BYTE display_pos;
long alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
} TShopItemData;

#pragma pack(pop)

inline float GetSqrtDistance(int ix1, int iy1, int ix2, int iy2) // By sqrt
{
float dx, dy;

dx = float(ix1 - ix2);
dy = float(iy1 - iy2);

return sqrtf(dx*dx + dy*dy);
}

// DEFAULT_FONT
void DefaultFont_Startup();
void DefaultFont_Cleanup();
void DefaultFont_SetName(const char * c_szFontName);
CResource* DefaultFont_GetResource();
CResource* DefaultItalicFont_GetResource();
// END_OF_DEFAULT_FONT

void SetGuildSymbolPath(const char * c_szPathName);
const char * GetGuildSymbolFileName(DWORD dwGuildID);
BYTE SlotTypeToInvenType(BYTE bSlotType);
#ifdef ENABLE_DETAILS_INTERFACE
BYTE ApplyTypeToPointType(BYTE bApplyType);
#endif
#ifdef ENABLE_AURA_SYSTEM
int* GetAuraRefineInfo(BYTE bLevel);
#endif[/CODE]
 
GameLib/ItemData.h gönderir misin. komple gönderme WEAR_BODY içinde olan enum'u gönderin.
 
GameLib/ItemData.h gönderir misin. komple gönderme WEAR_BODY içinde olan enum'u gönderin.
Kod:
enum EWearPositions
        {
            WEAR_BODY,          // 0
            WEAR_HEAD,          // 1
            WEAR_FOOTS,         // 2
            WEAR_WRIST,         // 3
            WEAR_WEAPON,        // 4
            WEAR_NECK,          // 5
            WEAR_EAR,           // 6
            WEAR_UNIQUE1,       // 7
            WEAR_UNIQUE2,       // 8
            WEAR_ARROW,         // 9
            WEAR_SHIELD,        // 10

            WEAR_ABILITY1,  // 11
            WEAR_ABILITY2,  // 12
            WEAR_ABILITY3,  // 13
            WEAR_ABILITY4,  // 14
            WEAR_ABILITY5,  // 15
            WEAR_ABILITY6,  // 16
            WEAR_ABILITY7,  // 17
            WEAR_ABILITY8,  // 18
            WEAR_COSTUME_BODY,    // 19
            WEAR_COSTUME_HAIR,    // 20
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
            WEAR_COSTUME_MOUNT,// 21
#endif
#ifdef ENABLE_ACCE_SYSTEM
            WEAR_COSTUME_ACCE,// 22
#endif
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
            WEAR_COSTUME_WEAPON,// 23
#endif
#ifdef ENABLE_AURA_SYSTEM
            WEAR_COSTUME_AURA,// 24
#endif
            WEAR_RING1,// 25
            WEAR_RING2,// 26
            WEAR_BELT,// 27

#ifdef ENABLE_PENDANT_SYSTEM
            WEAR_PENDANT,// 28
#endif
#ifdef ENABLE_GLOVE_SYSTEM
            WEAR_GLOVE,//29
#endif
            WEAR_MAX_NUM = 32,
        };
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst