Hikayeler

Reklam vermek için turkmmo@gmail.com

ELDİVEN SİSTEMİ

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
Online süresi
1ay 26g
Reaksiyon Skoru
150
Altın Konu
1
Başarım Puanı
131
TM Yaşı
6 Yıl 6 Ay 2 Gün
MmoLira
6,348
DevLira
12

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. 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.
 
length.h:
#ifndef __INC_METIN_II_LENGTH_H__
[HASH=1]#define[/HASH] __INC_METIN_II_LENGTH_H__

[HASH=2388]#include[/HASH] "CommonDefines.h"

[HASH=1]#define[/HASH] WORD_MAX 0xffff#ifndef __INC_METIN_II_LENGTH_H__
[HASH=1]#define[/HASH] __INC_METIN_II_LENGTH_H__

[HASH=2388]#include[/HASH] "CommonDefines.h"

[HASH=1]#define[/HASH] WORD_MAX 0xffff
enum EMisc
{
    MAX_HOST_LENGTH = 15,
    IP_ADDRESS_LENGTH = 15,
    LOGIN_MAX_LEN = 30,
    PASSWD_MAX_LEN = 16,
[HASH=2]#ifdef[/HASH] ENABLE_PLAYER_PER_ACCOUNT5
    PLAYER_PER_ACCOUNT = 5,
[HASH=2311]#else[/HASH]
    PLAYER_PER_ACCOUNT = 4,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_EXTEND_INVEN_SYSTEM
    INVENTORY_PAGE_COUNT = 4, // 2 (default)
[HASH=2311]#else[/HASH]
    INVENTORY_PAGE_COUNT = 2, // 2 (default)
[HASH=3]#endif[/HASH]
    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,


[HASH=2]#ifdef[/HASH] __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,
[HASH=2]#ifdef[/HASH] __ENABLE_CHEQUE_SYSTEM__
    YANG_PER_CHEQUE = 100000000,
[HASH=3]#endif[/HASH]
[HASH=3]#endif[/HASH]

    //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,

[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]

};

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

[HASH=2]#ifdef[/HASH] ENABLE_MOUNT_COSTUME_SYSTEM
    WEAR_COSTUME_MOUNT,//21
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    WEAR_COSTUME_ACCE,//22
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_WEAPON_COSTUME_SYSTEM
    WEAR_COSTUME_WEAPON,//23
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    WEAR_COSTUME_AURA,//24
[HASH=3]#endif[/HASH]

    WEAR_RING1,//25
    WEAR_RING2,//26
    WEAR_BELT,//27
[HASH=2]#ifdef[/HASH] ENABLE_PENDANT_SYSTEM
    WEAR_PENDANT,//28
[HASH=3]#endif[/HASH]
    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
};

[HASH=1]#define[/HASH] 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,
[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
    JOB_WOLFMAN,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    PART_ACCE,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    PART_AURA,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_DICE_SYSTEM
    CHAT_TYPE_DICE_INFO, //11
[HASH=3]#endif[/HASH]
    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,

[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
    APPLY_BLEEDING_REDUCE,
    APPLY_BLEEDING_PCT,
    APPLY_ATTBONUS_WOLFMAN,
    APPLY_RESIST_WOLFMAN,
    APPLY_RESIST_CLAW,
[HASH=3]#endif[/HASH]

[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    APPLY_ACCEDRAIN_RATE,
[HASH=3]#endif[/HASH]

[HASH=2]#ifdef[/HASH] ENABLE_MAGIC_REDUCTION_SYSTEM
    APPLY_RESIST_MAGIC_REDUCTION,    //98
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] 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,
[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
        APPLY_ATTBONUS_CLAW,
[HASH=3]#endif[/HASH]
        APPLY_ATTBONUS_CZ,
        APPLY_ATTBONUS_DESERT,
        APPLY_ATTBONUS_INSECT,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_GLOVE_SYSTEM
        APPLY_RANDOM,
[HASH=3]#endif[/HASH]       
    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,
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
    UPGRADE_INVENTORY,
    BOOK_INVENTORY,
    STONE_INVENTORY,
    CHEST_INVENTORY,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    AURA_REFINE,
[HASH=3]#endif[/HASH]
    BELT_INVENTORY,
    GROUND,
[HASH=2]#ifdef[/HASH] __ENABLE_NEW_OFFLINESHOP__
    NEW_OFFSHOP,
    SHOP_SAFEBOX,
[HASH=3]#endif[/HASH]
};

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,
[HASH=3]#endif[/HASH]
    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,
[HASH=3]#endif[/HASH]
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
    MOB_RESIST_BLEEDING,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_PENDANT_SYSTEM
    ATTRIBUTE_SET_PENDANT,
[HASH=3]#endif[/HASH]
    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,

[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    SE_EFFECT_ACCE_SUCCEDED,
    SE_EFFECT_ACCE_EQUIP,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_AGGREGATE_MONSTER_EFFECT
    SE_AGGREGATE_MONSTER_EFFECT,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_UPGRADE_EFFECT
    SE_UPSUCCESS,
    SE_UPFAILED,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_DUEL_EFFECT
    SE_PVP_WIN,
    SE_PVP_OPEN1,
    SE_PVP_OPEN2,
    SE_PVP_BEGIN1,
    SE_PVP_BEGIN2,
[HASH=3]#endif[/HASH]
};

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

[HASH=2388]#include[/HASH] "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,
};

[HASH=3375]#pragma[/HASH] 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);
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
        case UPGRADE_INVENTORY:
        case BOOK_INVENTORY:
        case STONE_INVENTORY:
        case CHEST_INVENTORY:
            return cell < (SPECIAL_INVENTORY_MAX_NUM);
[HASH=3]#endif[/HASH]
        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;


[HASH=2]#ifdef[/HASH] __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
};
[HASH=3]#endif[/HASH]

[HASH=3375]#pragma[/HASH] pack(pop)

[HASH=3]#endif[/HASH]

enum EMisc
{
    MAX_HOST_LENGTH = 15,
    IP_ADDRESS_LENGTH = 15,
    LOGIN_MAX_LEN = 30,
    PASSWD_MAX_LEN = 16,
[HASH=2]#ifdef[/HASH] ENABLE_PLAYER_PER_ACCOUNT5
    PLAYER_PER_ACCOUNT = 5,
[HASH=2311]#else[/HASH]
    PLAYER_PER_ACCOUNT = 4,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_EXTEND_INVEN_SYSTEM
    INVENTORY_PAGE_COUNT = 4, // 2 (default)
[HASH=2311]#else[/HASH]
    INVENTORY_PAGE_COUNT = 2, // 2 (default)
[HASH=3]#endif[/HASH]
    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,


[HASH=2]#ifdef[/HASH] __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,
[HASH=2]#ifdef[/HASH] __ENABLE_CHEQUE_SYSTEM__
    YANG_PER_CHEQUE = 100000000,
[HASH=3]#endif[/HASH]
[HASH=3]#endif[/HASH]

    //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,

[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]

};

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

[HASH=2]#ifdef[/HASH] ENABLE_MOUNT_COSTUME_SYSTEM
    WEAR_COSTUME_MOUNT,//21
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    WEAR_COSTUME_ACCE,//22
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_WEAPON_COSTUME_SYSTEM
    WEAR_COSTUME_WEAPON,//23
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    WEAR_COSTUME_AURA,//24
[HASH=3]#endif[/HASH]

    WEAR_RING1,//25
    WEAR_RING2,//26
    WEAR_BELT,//27
[HASH=2]#ifdef[/HASH] ENABLE_PENDANT_SYSTEM
    WEAR_PENDANT,//28
[HASH=3]#endif[/HASH]
    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
};

[HASH=1]#define[/HASH] 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,
[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
    JOB_WOLFMAN,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    PART_ACCE,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    PART_AURA,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_DICE_SYSTEM
    CHAT_TYPE_DICE_INFO, //11
[HASH=3]#endif[/HASH]
    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,

[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
    APPLY_BLEEDING_REDUCE,
    APPLY_BLEEDING_PCT,
    APPLY_ATTBONUS_WOLFMAN,
    APPLY_RESIST_WOLFMAN,
    APPLY_RESIST_CLAW,
[HASH=3]#endif[/HASH]

[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    APPLY_ACCEDRAIN_RATE,
[HASH=3]#endif[/HASH]

[HASH=2]#ifdef[/HASH] ENABLE_MAGIC_REDUCTION_SYSTEM
    APPLY_RESIST_MAGIC_REDUCTION,    //98
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] 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,
[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
        APPLY_ATTBONUS_CLAW,
[HASH=3]#endif[/HASH]
        APPLY_ATTBONUS_CZ,
        APPLY_ATTBONUS_DESERT,
        APPLY_ATTBONUS_INSECT,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_GLOVE_SYSTEM
        APPLY_RANDOM,
[HASH=3]#endif[/HASH]       
    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,
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
    UPGRADE_INVENTORY,
    BOOK_INVENTORY,
    STONE_INVENTORY,
    CHEST_INVENTORY,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    AURA_REFINE,
[HASH=3]#endif[/HASH]
    BELT_INVENTORY,
    GROUND,
[HASH=2]#ifdef[/HASH] __ENABLE_NEW_OFFLINESHOP__
    NEW_OFFSHOP,
    SHOP_SAFEBOX,
[HASH=3]#endif[/HASH]
};

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,
[HASH=3]#endif[/HASH]
    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,
[HASH=3]#endif[/HASH]
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
    MOB_RESIST_BLEEDING,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_PENDANT_SYSTEM
    ATTRIBUTE_SET_PENDANT,
[HASH=3]#endif[/HASH]
    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,

[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    SE_EFFECT_ACCE_SUCCEDED,
    SE_EFFECT_ACCE_EQUIP,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_AGGREGATE_MONSTER_EFFECT
    SE_AGGREGATE_MONSTER_EFFECT,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_UPGRADE_EFFECT
    SE_UPSUCCESS,
    SE_UPFAILED,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_DUEL_EFFECT
    SE_PVP_WIN,
    SE_PVP_OPEN1,
    SE_PVP_OPEN2,
    SE_PVP_BEGIN1,
    SE_PVP_BEGIN2,
[HASH=3]#endif[/HASH]
};

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

[HASH=2388]#include[/HASH] "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,
};

[HASH=3375]#pragma[/HASH] 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);
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
        case UPGRADE_INVENTORY:
        case BOOK_INVENTORY:
        case STONE_INVENTORY:
        case CHEST_INVENTORY:
            return cell < (SPECIAL_INVENTORY_MAX_NUM);
[HASH=3]#endif[/HASH]
        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;


[HASH=2]#ifdef[/HASH] __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
};
[HASH=3]#endif[/HASH]

[HASH=3375]#pragma[/HASH] pack(pop)

[HASH=3]#endif[/HASH]
[HASH=2389]#ifndef[/HASH] __INC_METIN_II_LENGTH_H__
[HASH=1]#define[/HASH] __INC_METIN_II_LENGTH_H__

[HASH=2388]#include[/HASH] "CommonDefines.h"

[HASH=1]#define[/HASH] WORD_MAX 0xffff
enum EMisc
{
    MAX_HOST_LENGTH = 15,
    IP_ADDRESS_LENGTH = 15,
    LOGIN_MAX_LEN = 30,
    PASSWD_MAX_LEN = 16,
[HASH=2]#ifdef[/HASH] ENABLE_PLAYER_PER_ACCOUNT5
    PLAYER_PER_ACCOUNT = 5,
[HASH=2311]#else[/HASH]
    PLAYER_PER_ACCOUNT = 4,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_EXTEND_INVEN_SYSTEM
    INVENTORY_PAGE_COUNT = 4, // 2 (default)
[HASH=2311]#else[/HASH]
    INVENTORY_PAGE_COUNT = 2, // 2 (default)
[HASH=3]#endif[/HASH]
    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,


[HASH=2]#ifdef[/HASH] __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,
[HASH=2]#ifdef[/HASH] __ENABLE_CHEQUE_SYSTEM__
    YANG_PER_CHEQUE = 100000000,
[HASH=3]#endif[/HASH]
[HASH=3]#endif[/HASH]

    //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,

[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]

};

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

[HASH=2]#ifdef[/HASH] ENABLE_MOUNT_COSTUME_SYSTEM
    WEAR_COSTUME_MOUNT,//21
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    WEAR_COSTUME_ACCE,//22
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_WEAPON_COSTUME_SYSTEM
    WEAR_COSTUME_WEAPON,//23
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    WEAR_COSTUME_AURA,//24
[HASH=3]#endif[/HASH]

    WEAR_RING1,//25
    WEAR_RING2,//26
    WEAR_BELT,//27
[HASH=2]#ifdef[/HASH] ENABLE_PENDANT_SYSTEM
    WEAR_PENDANT,//28
[HASH=3]#endif[/HASH]
    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
};

[HASH=1]#define[/HASH] 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,
[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
    JOB_WOLFMAN,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    PART_ACCE,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    PART_AURA,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] ENABLE_DICE_SYSTEM
    CHAT_TYPE_DICE_INFO, //11
[HASH=3]#endif[/HASH]
    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,

[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
    APPLY_BLEEDING_REDUCE,
    APPLY_BLEEDING_PCT,
    APPLY_ATTBONUS_WOLFMAN,
    APPLY_RESIST_WOLFMAN,
    APPLY_RESIST_CLAW,
[HASH=3]#endif[/HASH]

[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    APPLY_ACCEDRAIN_RATE,
[HASH=3]#endif[/HASH]

[HASH=2]#ifdef[/HASH] ENABLE_MAGIC_REDUCTION_SYSTEM
    APPLY_RESIST_MAGIC_REDUCTION,    //98
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] 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,
[HASH=2]#ifdef[/HASH] ENABLE_WOLFMAN_CHARACTER
        APPLY_ATTBONUS_CLAW,
[HASH=3]#endif[/HASH]
        APPLY_ATTBONUS_CZ,
        APPLY_ATTBONUS_DESERT,
        APPLY_ATTBONUS_INSECT,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_GLOVE_SYSTEM
        APPLY_RANDOM,
[HASH=3]#endif[/HASH]       
    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,
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
    UPGRADE_INVENTORY,
    BOOK_INVENTORY,
    STONE_INVENTORY,
    CHEST_INVENTORY,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] __AURA_SYSTEM__
    AURA_REFINE,
[HASH=3]#endif[/HASH]
    BELT_INVENTORY,
    GROUND,
[HASH=2]#ifdef[/HASH] __ENABLE_NEW_OFFLINESHOP__
    NEW_OFFSHOP,
    SHOP_SAFEBOX,
[HASH=3]#endif[/HASH]
};

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,
[HASH=3]#endif[/HASH]
    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,
[HASH=3]#endif[/HASH]
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
    MOB_RESIST_BLEEDING,
[HASH=3]#endif[/HASH]
    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,
[HASH=2]#ifdef[/HASH] 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,
[HASH=3]#endif[/HASH]
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_PENDANT_SYSTEM
    ATTRIBUTE_SET_PENDANT,
[HASH=3]#endif[/HASH]
    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,

[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    SE_EFFECT_ACCE_SUCCEDED,
    SE_EFFECT_ACCE_EQUIP,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_AGGREGATE_MONSTER_EFFECT
    SE_AGGREGATE_MONSTER_EFFECT,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_UPGRADE_EFFECT
    SE_UPSUCCESS,
    SE_UPFAILED,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_DUEL_EFFECT
    SE_PVP_WIN,
    SE_PVP_OPEN1,
    SE_PVP_OPEN2,
    SE_PVP_BEGIN1,
    SE_PVP_BEGIN2,
[HASH=3]#endif[/HASH]
};

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

[HASH=2388]#include[/HASH] "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,
};

[HASH=3375]#pragma[/HASH] 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);
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
        case UPGRADE_INVENTORY:
        case BOOK_INVENTORY:
        case STONE_INVENTORY:
        case CHEST_INVENTORY:
            return cell < (SPECIAL_INVENTORY_MAX_NUM);
[HASH=3]#endif[/HASH]
        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;


[HASH=2]#ifdef[/HASH] __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
};
[HASH=3]#endif[/HASH]

[HASH=3375]#pragma[/HASH] pack(pop)

[HASH=3]#endif[/HASH]

gametype.h:
#pragma once
[HASH=2388]#include[/HASH] "../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
[HASH=2]#ifdef[/HASH] ENABLE_EXTEND_INVEN_SYSTEM
const DWORD c_Inventory_Page_Count = 4;
[HASH=2311]#else[/HASH]
const DWORD c_Inventory_Page_Count = 2;
[HASH=3]#endif[/HASH]
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;

[HASH=2]#ifdef[/HASH] 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;
[HASH=2]#ifdef[/HASH] ENABLE_PENDANT_SYSTEM
    const DWORD c_Equipment_Pendant = c_Equipment_Start + CItemData::WEAR_PENDANT;
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_GLOVE_SYSTEM
    const DWORD c_Equipment_Glove    = c_Equipment_Start + CItemData::WEAR_GLOVE;
[HASH=3]#endif[/HASH]   
[HASH=3]#endif[/HASH]

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,
[HASH=2]#ifdef[/HASH] ENABLE_DS_GRADE_MYTH
    DRAGON_SOUL_GRADE_MYTH,
[HASH=3]#endif[/HASH]
    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,
};

[HASH=2]#ifdef[/HASH] 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;
[HASH=2]#ifdef[/HASH] ENABLE_MOUNT_COSTUME_SYSTEM
    const DWORD    c_Costume_Slot_Mount    = c_Costume_Slot_Start + CItemData::COSTUME_MOUNT;
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_ACCE_SYSTEM
    const DWORD    c_Costume_Slot_Acce        = c_Costume_Slot_Start + CItemData::COSTUME_ACCE;
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_WEAPON_COSTUME_SYSTEM
    const DWORD    c_Costume_Slot_Weapon = c_Costume_Slot_Start + CItemData::COSTUME_WEAPON; // c_Costume_Slot_End + 1;
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_AURA_SYSTEM
    const DWORD c_Costume_Slot_Aura        = c_Costume_Slot_Start + CItemData::COSTUME_AURA;
[HASH=3]#endif[/HASH]
#if defined(ENABLE_WEAPON_COSTUME_SYSTEM) || defined(ENABLE_ACCE_SYSTEM)
    const DWORD c_Costume_Slot_Count    = 6;
[HASH=95973]#elif[/HASH] defined(ENABLE_MOUNT_COSTUME_SYSTEM)
    const DWORD c_Costume_Slot_Count    = 3;
[HASH=2311]#else[/HASH]
    const DWORD c_Costume_Slot_Count    = 2;
[HASH=3]#endif[/HASH]

    const DWORD c_Costume_Slot_End        = c_Costume_Slot_Start + c_Costume_Slot_Count;




[HASH=3]#endif[/HASH]


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;

[HASH=2]#ifdef[/HASH] 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;
[HASH=2311]#else[/HASH]
    const DWORD c_Inventory_Count    = c_DragonSoul_Equip_End;
[HASH=3]#endif[/HASH]

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;

[HASH=2]#ifdef[/HASH] 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;

[HASH=3]#endif[/HASH]
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,
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
    SLOT_TYPE_UPGRADE_INVENTORY,
    SLOT_TYPE_BOOK_INVENTORY,
    SLOT_TYPE_STONE_INVENTORY,
    SLOT_TYPE_CHEST_INVENTORY,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_AURA_SYSTEM
    SLOT_TYPE_AURA,
[HASH=3]#endif[/HASH]
    SLOT_TYPE_MAX,
};

[HASH=2]#ifdef[/HASH] 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
};
[HASH=3]#endif[/HASH]

enum EWindows
{
    RESERVED_WINDOW,
    INVENTORY,
    EQUIPMENT,
    SAFEBOX,
    MALL,
    DRAGON_SOUL_INVENTORY,
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
    UPGRADE_INVENTORY,
    BOOK_INVENTORY,
    STONE_INVENTORY,
    CHEST_INVENTORY,
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_AURA_SYSTEM
    AURA_REFINE,
[HASH=3]#endif[/HASH]
    BELT_INVENTORY,
    GROUND,

    WINDOW_TYPE_MAX,
};

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

[HASH=3375]#pragma[/HASH] pack (push, 1)
[HASH=1]#define[/HASH] 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;
[HASH=2]#ifdef[/HASH] 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;
[HASH=3]#endif[/HASH]
        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:
[HASH=2]#ifdef[/HASH] ENABLE_SPECIAL_STORAGE
        case UPGRADE_INVENTORY:
        case BOOK_INVENTORY:
        case STONE_INVENTORY:
        case CHEST_INVENTORY:
[HASH=3]#endif[/HASH]
            return false;
            break;

        default:
            return false;
        }
    }

[HASH=2]#ifdef[/HASH] ENABLE_NEW_EQUIPMENT_SYSTEM
    bool IsBeltInventoryCell()
    {
        bool bResult = c_Belt_Inventory_Slot_Start <= cell && c_Belt_Inventory_Slot_End > cell;
        return bResult;
    }
[HASH=3]#endif[/HASH]

    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);
[HASH=3375]#pragma[/HASH] 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;

[HASH=1]#define[/HASH] 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
};

[HASH=3375]#pragma[/HASH] pack(push)
[HASH=3375]#pragma[/HASH] 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;

[HASH=3375]#pragma[/HASH] 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);
[HASH=2]#ifdef[/HASH] ENABLE_DETAILS_INTERFACE
BYTE ApplyTypeToPointType(BYTE bApplyType);
[HASH=3]#endif[/HASH]
[HASH=2]#ifdef[/HASH] ENABLE_AURA_SYSTEM
int* GetAuraRefineInfo(BYTE bLevel);
[HASH=3]#endif[/HASH]
 
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 : 1, Üye: 0, Misafir: 1)

Geri
Üst