Çözüldü K Envater Slot Atlama Sorunu

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

melihalbayrak

Geliştirici
Geliştirici
Yardımsever Üye
Usta Üye
Mesaj
1.246
Çözümler
81
Beğeni
673
Puan
1.109
K envater sistemi ekledim fakat saçma bir problem ile karşılaştım. Kırık zırh parçası itemini aldığımda item yükseltme bölümünün 1. slotuna gelmiyor bir önceki bölümün yani kitap envateri bölümünün 3. sayfasının 4. satırından başlıyor fotoğrafta görüldüğü gibi. Bu sorun sanırım ilk itemlerin envantere ekleme kodlarında bir karışıklık var ama çözemedim gitti. hangi item olursa olsun 3. sayfanın 4. satırına geliyor atlayarak. lengt.h kısmında bir sorun var yani öyle düşünüyorum çünkü belt sistemini eklemeden önce 2. sayfanın son satırına geliyordu item. Belt sistemini geri ekledikten sonra 3. sayfanın 4. satırına atmaya başladı çözemedim gitti.

Ekran görüntüsü 2021-05-12 192746.jpg
 
Çözüm
AnyDesk ile bağlanıp sorunu inceledim. Client ve server tarafındaki değerlerin uyumsuz olduğu için böyle bir sorun meydana gelmiş. Bunun haricinde kodlarda biraz düzenleme yaptık. K envanter sisteminin kodlama yapısından dolayı veritabanında kayıtlı olan eski itemleri kaldırdık.
Konudan anladığım kadarıyla belti aktif ettikten sonra bu kayma sorunu oluştu demişsiniz. Her envanterin başlangıç ve bitiş pos değerleri var. Bunları yeni değerlerle güncellerseniz sorun çözülür sanki
 
Konudan anladığım kadarıyla belti aktif ettikten sonra bu kayma sorunu oluştu demişsiniz. Her envanterin başlangıç ve bitiş pos değerleri var. Bunları yeni değerlerle güncellerseniz sorun çözülür sanki
Şimdi belti tekrar kaldırdım. Kayma sorunu belt ile alakalı değilmiş. bu start ve end kodları lenght.h içinde ama bunları ne olarak ayarlasam sorun düzelmedi. Bu görüntü benim ayarladığım şekil ve kod içinde verdiğim ise sistemin eklenme şekli.

C++:
// Arat
    OPENID_AUTHKEY_LEN = 32,

    SHOP_TAB_NAME_MAX = 32,
    SHOP_TAB_COUNT_MAX = 3,

// Altına Ekle
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    SKILL_BOOK_INVENTORY_MAX_NUM    = 135,
    UPGRADE_ITEMS_INVENTORY_MAX_NUM    = 135,
    STONE_INVENTORY_MAX_NUM    = 135,
    BOX_INVENTORY_MAX_NUM    = 135,
    EFSUN_INVENTORY_MAX_NUM    = 135,
    CICEK_INVENTORY_MAX_NUM    = 135,
#endif

// Arat
enum EWindows
{
    RESERVED_WINDOW,
    INVENTORY,
    EQUIPMENT,
    SAFEBOX,
    MALL,
    DRAGON_SOUL_INVENTORY,
    BELT_INVENTORY,

// Altına Ekle
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    SKILL_BOOK_INVENTORY,
    UPGRADE_ITEMS_INVENTORY,
    STONE_INVENTORY,
    BOX_INVENTORY,
    EFSUN_INVENTORY,
    CICEK_INVENTORY,
#endif

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

// Altına Ekle
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    SKILL_BOOK_INVENTORY_SLOT_START    = BELT_INVENTORY_SLOT_END,
    SKILL_BOOK_INVENTORY_SLOT_END = SKILL_BOOK_INVENTORY_SLOT_START + SKILL_BOOK_INVENTORY_MAX_NUM,
  
    UPGRADE_ITEMS_INVENTORY_SLOT_START = SKILL_BOOK_INVENTORY_SLOT_END,
    UPGRADE_ITEMS_INVENTORY_SLOT_END = UPGRADE_ITEMS_INVENTORY_SLOT_START + UPGRADE_ITEMS_INVENTORY_MAX_NUM,
  
    STONE_INVENTORY_SLOT_START = UPGRADE_ITEMS_INVENTORY_SLOT_END,
    STONE_INVENTORY_SLOT_END = STONE_INVENTORY_SLOT_START + STONE_INVENTORY_MAX_NUM,
  
    BOX_INVENTORY_SLOT_START = STONE_INVENTORY_SLOT_END,
    BOX_INVENTORY_SLOT_END = BOX_INVENTORY_SLOT_START + BOX_INVENTORY_MAX_NUM,
  
    EFSUN_INVENTORY_SLOT_START = BOX_INVENTORY_SLOT_END,
    EFSUN_INVENTORY_SLOT_END = EFSUN_INVENTORY_SLOT_START + EFSUN_INVENTORY_MAX_NUM,
  
    CICEK_INVENTORY_SLOT_START = EFSUN_INVENTORY_SLOT_END,
    CICEK_INVENTORY_SLOT_END = CICEK_INVENTORY_SLOT_START + CICEK_INVENTORY_MAX_NUM,
#endif

// Arat
    INVENTORY_AND_EQUIP_SLOT_MAX = BELT_INVENTORY_SLOT_END,

// Değiştir (https://prnt.sc/qaqfsc)
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    INVENTORY_AND_EQUIP_SLOT_MAX = CICEK_INVENTORY_SLOT_END,
#else
    INVENTORY_AND_EQUIP_SLOT_MAX = BELT_INVENTORY_SLOT_END,
#endif

// Arat
    bool IsValidItemPosition() const
    {
        switch (window_type)
        {
        case RESERVED_WINDOW:
            return false;
        case INVENTORY:
        case EQUIPMENT:
        case BELT_INVENTORY:

// Altına Ekle
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
        case SKILL_BOOK_INVENTORY:
        case UPGRADE_ITEMS_INVENTORY:
        case STONE_INVENTORY:
        case BOX_INVENTORY:
        case EFSUN_INVENTORY:
        case CICEK_INVENTORY:
#endif

// Arat
    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;
    }

// Altına Ekle
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    bool IsSkillBookInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= SKILL_BOOK_INVENTORY_SLOT_START && cell < SKILL_BOOK_INVENTORY_SLOT_END);
    }
    bool IsUpgradeItemsInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= UPGRADE_ITEMS_INVENTORY_SLOT_START && cell < UPGRADE_ITEMS_INVENTORY_SLOT_END);
    }
    bool IsStoneInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= STONE_INVENTORY_SLOT_START && cell < STONE_INVENTORY_SLOT_END);
    }
    bool IsBoxInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= BOX_INVENTORY_SLOT_START && cell < BOX_INVENTORY_SLOT_END);
    }
    bool IsEfsunInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= EFSUN_INVENTORY_SLOT_START && cell < EFSUN_INVENTORY_SLOT_END);
    }
    bool IsCicekInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= CICEK_INVENTORY_SLOT_START && cell < CICEK_INVENTORY_SLOT_END);
    }
#endif

Ekran görüntüsü 2021-05-12 221802.jpg

LENGT.H:
#ifndef __INC_METIN_II_LENGTH_H__
#define __INC_METIN_II_LENGTH_H__

#include "service.h"
#define WORD_MAX 0xffff
enum EMisc
{
    MAX_HOST_LENGTH            = 15,
    IP_ADDRESS_LENGTH        = 15,
    LOGIN_MAX_LEN            = 30,
    PASSWD_MAX_LEN            = 16,
    PLAYER_PER_ACCOUNT        = 4,
    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,
    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    = 120,
    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,
    MAX_AMOUNT_OF_MALL_BONUS    = 20,
    WEAR_MAX_NUM                = 32,
    GOLD_MAX    = 2000000000,
    SHOP_TAB_NAME_MAX    = 32,
    SHOP_TAB_COUNT_MAX    = 3,
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    SKILL_BOOK_INVENTORY_MAX_NUM    = 135,
    UPGRADE_ITEMS_INVENTORY_MAX_NUM    = 135,
    STONE_INVENTORY_MAX_NUM    = 135,
    BOX_INVENTORY_MAX_NUM    = 135,
    EFSUN_INVENTORY_MAX_NUM    = 135,
    CICEK_INVENTORY_MAX_NUM    = 135,
#endif
};

#ifdef ENABLE_SWITCHBOT
enum SwitchbotValues
{
    SWITCHBOT_SLOT_COUNT = 5,
    SWITCHBOT_ALTERNATIVE_COUNT = 2,
    //1 = Switching Item
    //2 = Yang
    SWITCHBOT_PRICE_TYPE = 1,
    //Amount Swtichting Items the Yang-Price
    SWITCHBOT_PRICE_AMOUNT = 1,
};

const DWORD c_arSwitchingItems[3] =
{
    39028,
    71084,
    76014,
};
#endif

enum EWearPositions
{
    WEAR_BODY,
    WEAR_HEAD,
    WEAR_FOOTS,
    WEAR_WRIST,
    WEAR_WEAPON,
    WEAR_NECK,
    WEAR_EAR,
    WEAR_UNIQUE1,
    WEAR_UNIQUE2,
    WEAR_ARROW,
    WEAR_SHIELD,
    WEAR_ABILITY1,
    WEAR_ABILITY2,
    WEAR_ABILITY3,
    WEAR_ABILITY4,
    WEAR_ABILITY5,
    WEAR_ABILITY6,
    WEAR_ABILITY7,
    WEAR_ABILITY8,
    WEAR_COSTUME_BODY,
    WEAR_COSTUME_HAIR,
    WEAR_RING1,
    WEAR_RING2,
    WEAR_MAX = 32
};

enum ESex
{
    SEX_MALE,
    SEX_FEMALE
};

#ifdef ENABLE_EXTEND_INVEN_SYSTEM
enum EInventory
{
    /* you can change */
    INVENTORY_OPEN_PAGE_COUNT = 2,
    INVENTORY_OPEN_KEY_VNUM = 72319,
    INVENTORY_OPEN_KEY_VNUM2 = 72320,
    INVENTORY_START_DELETE_VNUM = INVENTORY_OPEN_KEY_VNUM, // start deleting from a tradeable item
    INVENTORY_NEED_KEY_START = 2,
    INVENTORY_NEED_KEY_INCREASE = 3, // Increase the number of keys in each 3 stages. you can change
    /* end */
    INVENTORY_WIDTH = 5,
    INVENTORY_HEIGHT = 9,
    // INVENTORY_PAGE_SIZE = INVENTORY_WIDTH*INVENTORY_HEIGHT,
    // INVENTORY_PAGE_COUNT = INVENTORY_MAX_NUM / INVENTORY_PAGE_SIZE,
    INVENTORY_OPEN_PAGE_SIZE = INVENTORY_OPEN_PAGE_COUNT*INVENTORY_PAGE_SIZE,
    INVENTORY_LOCKED_PAGE_COUNT = INVENTORY_PAGE_COUNT-INVENTORY_OPEN_PAGE_COUNT,
    INVENTORY_LOCK_COVER_COUNT = INVENTORY_LOCKED_PAGE_COUNT*INVENTORY_HEIGHT
};
#endif

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,
    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),
};

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,

    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_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,
    APPLY_MAX_HP,
    APPLY_MAX_SP,
    APPLY_CON,
    APPLY_INT,
    APPLY_STR,
    APPLY_DEX,
    APPLY_ATT_SPEED,
    APPLY_MOV_SPEED,
    APPLY_CAST_SPEED,
    APPLY_HP_REGEN,
    APPLY_SP_REGEN,
    APPLY_POISON_PCT,
    APPLY_STUN_PCT,
    APPLY_SLOW_PCT,
    APPLY_CRITICAL_PCT,
    APPLY_PENETRATE_PCT,
    APPLY_ATTBONUS_HUMAN,
    APPLY_ATTBONUS_ANIMAL,
    APPLY_ATTBONUS_ORC,
    APPLY_ATTBONUS_MILGYO,
    APPLY_ATTBONUS_UNDEAD,
    APPLY_ATTBONUS_DEVIL,
    APPLY_STEAL_HP,
    APPLY_STEAL_SP,
    APPLY_MANA_BURN_PCT,
    APPLY_DAMAGE_SP_RECOVER,
    APPLY_BLOCK,
    APPLY_DODGE,
    APPLY_RESIST_SWORD,
    APPLY_RESIST_TWOHAND,
    APPLY_RESIST_DAGGER,
    APPLY_RESIST_BELL,
    APPLY_RESIST_FAN,
    APPLY_RESIST_BOW,
    APPLY_RESIST_FIRE,
    APPLY_RESIST_ELEC,
    APPLY_RESIST_MAGIC,
    APPLY_RESIST_WIND,
    APPLY_REFLECT_MELEE,
    APPLY_REFLECT_CURSE,
    APPLY_POISON_REDUCE,
    APPLY_KILL_SP_RECOVER,
    APPLY_EXP_DOUBLE_BONUS,
    APPLY_GOLD_DOUBLE_BONUS,
    APPLY_ITEM_DROP_BONUS,
    APPLY_POTION_BONUS,
    APPLY_KILL_HP_RECOVER,
    APPLY_IMMUNE_STUN,
    APPLY_IMMUNE_SLOW,
    APPLY_IMMUNE_FALL,
    APPLY_SKILL,
    APPLY_BOW_DISTANCE,
    APPLY_ATT_GRADE_BONUS,
    APPLY_DEF_GRADE_BONUS,
    APPLY_MAGIC_ATT_GRADE,
    APPLY_MAGIC_DEF_GRADE,
    APPLY_CURSE_PCT,
    APPLY_MAX_STAMINA,
    APPLY_ATTBONUS_WARRIOR,
    APPLY_ATTBONUS_ASSASSIN,
    APPLY_ATTBONUS_SURA,
    APPLY_ATTBONUS_SHAMAN,
    APPLY_ATTBONUS_MONSTER,
    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_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,
    MAX_APPLY_NUM,
};

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,
#ifdef ENABLE_SWITCHBOT
    SWITCHBOT,
#endif
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    SKILL_BOOK_INVENTORY,
    UPGRADE_ITEMS_INVENTORY,
    STONE_INVENTORY,
    BOX_INVENTORY,
    EFSUN_INVENTORY,
    CICEK_INVENTORY,
#endif
    GROUND
};

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,
    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,
    MOB_RESISTS_MAX_NUM
};

enum
{
    SKILL_ATTR_TYPE_NORMAL = 1,
    SKILL_ATTR_TYPE_MELEE,
    SKILL_ATTR_TYPE_RANGE,
    SKILL_ATTR_TYPE_MAGIC
};

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,
    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,
};

#if defined(BL_PRIVATESHOP_SEARCH_SYSTEM)
enum EPrivateShopSearchState
{
    SHOP_SEARCH_OFF,
    SHOP_SEARCH_LOOKING,
    SHOP_SEARCH_TRADING,
    SHOP_SEARCH_INDEX = 61000,
};
#endif

#include "item_length.h"

enum EMisc2
{
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    SKILL_BOOK_INVENTORY_SLOT_START    = INVENTORY_MAX_NUM + WEAR_MAX_NUM,
    SKILL_BOOK_INVENTORY_SLOT_END = SKILL_BOOK_INVENTORY_SLOT_START + SKILL_BOOK_INVENTORY_MAX_NUM,
   
    UPGRADE_ITEMS_INVENTORY_SLOT_START = SKILL_BOOK_INVENTORY_SLOT_END,
    UPGRADE_ITEMS_INVENTORY_SLOT_END = UPGRADE_ITEMS_INVENTORY_SLOT_START + UPGRADE_ITEMS_INVENTORY_MAX_NUM,
   
    STONE_INVENTORY_SLOT_START = UPGRADE_ITEMS_INVENTORY_SLOT_END,
    STONE_INVENTORY_SLOT_END = STONE_INVENTORY_SLOT_START + STONE_INVENTORY_MAX_NUM,
   
    BOX_INVENTORY_SLOT_START = STONE_INVENTORY_SLOT_END,
    BOX_INVENTORY_SLOT_END = BOX_INVENTORY_SLOT_START + BOX_INVENTORY_MAX_NUM,
   
    EFSUN_INVENTORY_SLOT_START = BOX_INVENTORY_SLOT_END,
    EFSUN_INVENTORY_SLOT_END = EFSUN_INVENTORY_SLOT_START + EFSUN_INVENTORY_MAX_NUM,
   
    CICEK_INVENTORY_SLOT_START = EFSUN_INVENTORY_SLOT_END,
    CICEK_INVENTORY_SLOT_END = CICEK_INVENTORY_SLOT_START + CICEK_INVENTORY_MAX_NUM,

    INVENTORY_AND_EQUIP_SLOT_MAX = CICEK_INVENTORY_SLOT_END,
#endif
};

#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:
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
        case SKILL_BOOK_INVENTORY:
        case UPGRADE_ITEMS_INVENTORY:
        case STONE_INVENTORY:
        case BOX_INVENTORY:
        case EFSUN_INVENTORY:
        case CICEK_INVENTORY:
#endif
            return cell < INVENTORY_AND_EQUIP_SLOT_MAX;
        case SAFEBOX:
        case MALL:
            return false;
#ifdef ENABLE_SWITCHBOT
        case SWITCHBOT:
            return cell < SWITCHBOT_SLOT_COUNT;
#endif
        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);
    }

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

#ifdef ENABLE_SWITCHBOT
    bool IsSwitchbotPosition() const
    {
        return SWITCHBOT == window_type && cell < SWITCHBOT_SLOT_COUNT;
    }
#endif

#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    bool IsSkillBookInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= SKILL_BOOK_INVENTORY_SLOT_START && cell < SKILL_BOOK_INVENTORY_SLOT_END);
    }
    bool IsUpgradeItemsInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= UPGRADE_ITEMS_INVENTORY_SLOT_START && cell < UPGRADE_ITEMS_INVENTORY_SLOT_END);
    }
    bool IsStoneInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= STONE_INVENTORY_SLOT_START && cell < STONE_INVENTORY_SLOT_END);
    }
    bool IsBoxInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= BOX_INVENTORY_SLOT_START && cell < BOX_INVENTORY_SLOT_END);
    }
    bool IsEfsunInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= EFSUN_INVENTORY_SLOT_START && cell < EFSUN_INVENTORY_SLOT_END);
    }
    bool IsCicekInventoryPosition() const
    {
        return ((INVENTORY == window_type) && cell >= CICEK_INVENTORY_SLOT_START && cell < CICEK_INVENTORY_SLOT_END);
    }
#endif

    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);

typedef enum
{
    SHOP_COIN_TYPE_GOLD,
    SHOP_COIN_TYPE_SECONDARY_COIN,
} EShopCoinType;

#pragma pack(pop)
#endif
 
Tanımlamalar doğru sanki. Acaba client tarafında mı bir hata var?
 
Tanımlamalar doğru sanki. Acaba client tarafında mı bir hata var?
Client ise bu şekilde.

ANLATIM:
// Arat
#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

// De?tir
#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;
#endif

// De?tirlen blo?n alt?a Ekle
#ifdef WJ_SPLIT_INVENTORY_SYSTEM
    const DWORD c_Skill_Book_Inventory_Slot_Start = c_Belt_Inventory_Slot_End;
    const DWORD c_Skill_Book_Inventory_Slot_Count = 135;
    const DWORD c_Skill_Book_Inventory_Slot_End = c_Skill_Book_Inventory_Slot_Start + c_Skill_Book_Inventory_Slot_Count;
    
    const DWORD c_Upgrade_Items_Inventory_Slot_Start = c_Skill_Book_Inventory_Slot_End;
    const DWORD c_Upgrade_Items_Inventory_Slot_Count = 135;
    const DWORD c_Upgrade_Items_Inventory_Slot_End = c_Upgrade_Items_Inventory_Slot_Start + c_Upgrade_Items_Inventory_Slot_Count;
    
    const DWORD c_Stone_Inventory_Slot_Start = c_Upgrade_Items_Inventory_Slot_End;
    const DWORD c_Stone_Inventory_Slot_Count = 135;
    const DWORD c_Stone_Inventory_Slot_End = c_Stone_Inventory_Slot_Start + c_Stone_Inventory_Slot_Count;
    
    const DWORD c_Box_Inventory_Slot_Start = c_Stone_Inventory_Slot_End;
    const DWORD c_Box_Inventory_Slot_Count = 135;
    const DWORD c_Box_Inventory_Slot_End = c_Box_Inventory_Slot_Start + c_Box_Inventory_Slot_Count;
    
    const DWORD c_Efsun_Inventory_Slot_Start = c_Box_Inventory_Slot_End;
    const DWORD c_Efsun_Inventory_Slot_Count = 135;
    const DWORD c_Efsun_Inventory_Slot_End = c_Efsun_Inventory_Slot_Start + c_Efsun_Inventory_Slot_Count;
    
    const DWORD c_Cicek_Inventory_Slot_Start = c_Efsun_Inventory_Slot_End;
    const DWORD c_Cicek_Inventory_Slot_Count = 135;
    const DWORD c_Cicek_Inventory_Slot_End = c_Cicek_Inventory_Slot_Start + c_Cicek_Inventory_Slot_Count;
    
    const DWORD c_Inventory_Count    = c_Cicek_Inventory_Slot_End;
#endif

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

// Alt?a Ekle
#ifdef WJ_SPLIT_INVENTORY_SYSTEM
    SLOT_TYPE_SKILL_BOOK_INVENTORY,
    SLOT_TYPE_UPGRADE_ITEMS_INVENTORY,
    SLOT_TYPE_STONE_INVENTORY,
    SLOT_TYPE_BOX_INVENTORY,
    SLOT_TYPE_EFSUN_INVENTORY,
    SLOT_TYPE_CICEK_INVENTORY,
#endif

// Arat
enum EWindows
{
    RESERVED_WINDOW,
    INVENTORY,                // 기본 인벤토리. (45칸 짜리가 2페이지 존재 = 90칸)
    EQUIPMENT,
    SAFEBOX,
    MALL,
    DRAGON_SOUL_INVENTORY,
    GROUND,                    // NOTE: 2013년 2월5일 현재까지 unused.. 왜 있는거지???
    BELT_INVENTORY,

// Ekle
#ifdef WJ_SPLIT_INVENTORY_SYSTEM
    SKILL_BOOK_INVENTORY,
    UPGRADE_ITEMS_INVENTORY,
    STONE_INVENTORY,
    BOX_INVENTORY,
    EFSUN_INVENTORY,
    CICEK_INVENTORY,
#endif

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

// Ekle
#ifdef WJ_SPLIT_INVENTORY_SYSTEM
    bool IsSkillBookInventoryCell()
    {
        bool bResult = c_Skill_Book_Inventory_Slot_Start <= cell && c_Skill_Book_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsUpgradeItemsInventoryCell()
    {
        bool bResult = c_Upgrade_Items_Inventory_Slot_Start <= cell && c_Upgrade_Items_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsStoneInventoryCell()
    {
        bool bResult = c_Stone_Inventory_Slot_Start <= cell && c_Stone_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsBoxInventoryCell()
    {
        bool bResult = c_Box_Inventory_Slot_Start <= cell && c_Box_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsEfsunInventoryCell()
    {
        bool bResult = c_Efsun_Inventory_Slot_Start <= cell && c_Efsun_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsCicekInventoryCell()
    {
        bool bResult = c_Cicek_Inventory_Slot_Start <= cell && c_Cicek_Inventory_Slot_End > cell;
        return bResult;
    }
#endif

Gametype.h:
#pragma once
#include "../GameLib/ItemData.h"
#include "Locale_inc.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;

#ifdef ENABLE_EXTEND_INVEN_SYSTEM
const DWORD INVENTORY_OPEN_KEY_VNUM = 72319;
const DWORD INVENTORY_OPEN_KEY_VNUM2 = 72320;
const DWORD c_Inventory_Open_Page_Count = 2;
const DWORD c_Inventory_Locked_Page_Count = c_Inventory_Page_Count-c_Inventory_Open_Page_Count;
const DWORD c_Inventory_Need_Key_Start = 2;
const DWORD c_Inventory_Need_Key_Increase = 3;
#endif

const DWORD c_Equipment_Body    = c_Equipment_Start + 0;
const DWORD c_Equipment_Head    = c_Equipment_Start + 1;
const DWORD c_Equipment_Shoes    = c_Equipment_Start + 2;
const DWORD c_Equipment_Wrist    = c_Equipment_Start + 3;
const DWORD c_Equipment_Weapon    = c_Equipment_Start + 4;
const DWORD c_Equipment_Neck    = c_Equipment_Start + 5;
const DWORD c_Equipment_Ear        = c_Equipment_Start + 6;
const DWORD c_Equipment_Unique1    = c_Equipment_Start + 7;
const DWORD c_Equipment_Unique2    = c_Equipment_Start + 8;
const DWORD c_Equipment_Arrow    = c_Equipment_Start + 9;
const DWORD c_Equipment_Shield    = c_Equipment_Start + 10;

#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
    const DWORD c_New_Equipment_Start = c_Equipment_Start + 21;
    const DWORD c_New_Equipment_Count = 3;
    const DWORD c_Equipment_Ring1 = c_New_Equipment_Start + 0;
    const DWORD c_Equipment_Ring2 = c_New_Equipment_Start + 1;
    const DWORD c_Equipment_Belt  = c_New_Equipment_Start + 2;
#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,
    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 + 19;
    const DWORD    c_Costume_Slot_Body        = c_Costume_Slot_Start + 0;
    const DWORD    c_Costume_Slot_Hair        = c_Costume_Slot_Start + 1;
    const DWORD c_Costume_Slot_Count    = 2;
    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;
#endif

#ifdef WJ_SPLIT_INVENTORY_SYSTEM
    const DWORD c_Skill_Book_Inventory_Slot_Start = c_Belt_Inventory_Slot_End;
    const DWORD c_Skill_Book_Inventory_Slot_Count = 135;
    const DWORD c_Skill_Book_Inventory_Slot_End = c_Skill_Book_Inventory_Slot_Start + c_Skill_Book_Inventory_Slot_Count;
    
    const DWORD c_Upgrade_Items_Inventory_Slot_Start = c_Skill_Book_Inventory_Slot_End;
    const DWORD c_Upgrade_Items_Inventory_Slot_Count = 135;
    const DWORD c_Upgrade_Items_Inventory_Slot_End = c_Upgrade_Items_Inventory_Slot_Start + c_Upgrade_Items_Inventory_Slot_Count;
    
    const DWORD c_Stone_Inventory_Slot_Start = c_Upgrade_Items_Inventory_Slot_End;
    const DWORD c_Stone_Inventory_Slot_Count = 135;
    const DWORD c_Stone_Inventory_Slot_End = c_Stone_Inventory_Slot_Start + c_Stone_Inventory_Slot_Count;
    
    const DWORD c_Box_Inventory_Slot_Start = c_Stone_Inventory_Slot_End;
    const DWORD c_Box_Inventory_Slot_Count = 135;
    const DWORD c_Box_Inventory_Slot_End = c_Box_Inventory_Slot_Start + c_Box_Inventory_Slot_Count;
    
    const DWORD c_Efsun_Inventory_Slot_Start = c_Box_Inventory_Slot_End;
    const DWORD c_Efsun_Inventory_Slot_Count = 135;
    const DWORD c_Efsun_Inventory_Slot_End = c_Efsun_Inventory_Slot_Start + c_Efsun_Inventory_Slot_Count;
    
    const DWORD c_Cicek_Inventory_Slot_Start = c_Efsun_Inventory_Slot_End;
    const DWORD c_Cicek_Inventory_Slot_Count = 135;
    const DWORD c_Cicek_Inventory_Slot_End = c_Cicek_Inventory_Slot_Start + c_Cicek_Inventory_Slot_Count;
    
    const DWORD c_Inventory_Count    = c_Cicek_Inventory_Slot_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;

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_SWITCHBOT
    SLOT_TYPE_SWITCHBOT,
#endif
#ifdef WJ_SPLIT_INVENTORY_SYSTEM
    SLOT_TYPE_SKILL_BOOK_INVENTORY,
    SLOT_TYPE_UPGRADE_ITEMS_INVENTORY,
    SLOT_TYPE_STONE_INVENTORY,
    SLOT_TYPE_BOX_INVENTORY,
    SLOT_TYPE_EFSUN_INVENTORY,
    SLOT_TYPE_CICEK_INVENTORY,
#endif
    SLOT_TYPE_MAX,
};

enum EWindows
{
    RESERVED_WINDOW,
    INVENTORY,
    EQUIPMENT,
    SAFEBOX,
    MALL,
    DRAGON_SOUL_INVENTORY,
    BELT_INVENTORY,
#ifdef ENABLE_SWITCHBOT
    SWITCHBOT,
#endif
#ifdef WJ_SPLIT_INVENTORY_SYSTEM
    SKILL_BOOK_INVENTORY,
    UPGRADE_ITEMS_INVENTORY,
    STONE_INVENTORY,
    BOX_INVENTORY,
    EFSUN_INVENTORY,
    CICEK_INVENTORY,
#endif
    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

#ifdef ENABLE_SWITCHBOT
enum ESwitchbotValues
{
    SWITCHBOT_SLOT_COUNT = 5,
    SWITCHBOT_ALTERNATIVE_COUNT = 2,
    MAX_NORM_ATTR_NUM = 5,
};

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,
    ATTRIBUTE_SET_MAX_NUM,
};

#endif

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 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_SWITCHBOT
        case SWITCHBOT:
            return cell < SWITCHBOT_SLOT_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:
            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

#ifdef WJ_SPLIT_INVENTORY_SYSTEM
    bool IsSkillBookInventoryCell()
    {
        bool bResult = c_Skill_Book_Inventory_Slot_Start <= cell && c_Skill_Book_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsUpgradeItemsInventoryCell()
    {
        bool bResult = c_Upgrade_Items_Inventory_Slot_Start <= cell && c_Upgrade_Items_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsStoneInventoryCell()
    {
        bool bResult = c_Stone_Inventory_Slot_Start <= cell && c_Stone_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsBoxInventoryCell()
    {
        bool bResult = c_Box_Inventory_Slot_Start <= cell && c_Box_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsEfsunInventoryCell()
    {
        bool bResult = c_Efsun_Inventory_Slot_Start <= cell && c_Efsun_Inventory_Slot_End > cell;
        return bResult;
    }
    
    bool IsCicekInventoryCell()
    {
        bool bResult = c_Cicek_Inventory_Slot_Start <= cell && c_Cicek_Inventory_Slot_End > cell;
        return bResult;
    }
#endif

    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;
#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,
    ITEM_ATTRIBUTE_SLOT_MAX_NUM = 7,
};

#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;

#if defined(BL_PRIVATESHOP_SEARCH_SYSTEM)
struct ShopSearchData
{
    TShopItemData item;
    std::string name;
    DWORD dwShopPID;
};
#endif

#pragma pack(pop)

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

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

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

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

void SetGuildSymbolPath(const char * c_szPathName);
const char * GetGuildSymbolFileName(DWORD dwGuildID);
BYTE SlotTypeToInvenType(BYTE bSlotType);
 
SKILL_BOOK_INVENTORY_SLOT_START buna kaç değeri atanmış bi kontrol eder misiniz?
 
Hayır SLOT_START değerini diyorum. Müsaitseniz Anydesk ile beraber bakalım mı sorununuza?
 
AnyDesk ile bağlanıp sorunu inceledim. Client ve server tarafındaki değerlerin uyumsuz olduğu için böyle bir sorun meydana gelmiş. Bunun haricinde kodlarda biraz düzenleme yaptık. K envanter sisteminin kodlama yapısından dolayı veritabanında kayıtlı olan eski itemleri kaldırdık.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst