#pragma once
#pragma pattern_limit 1500000
#include <std/sys.pat>
struct header {
   u8 unk[3];
   bool flag;
   u8 unk2;   
   u32 amountOfItems;
};
enum ItemType :u32{
        Equipped = 0,
        CashEquiped = 1,
        Equip = 2,
        Etc = 3,
        Cash = 4,
        Warehouse = 5,
        GiftBox = 6
};
enum CharacterJob : u32 {
        NULL,
        Swordsman = 1,  /// 01   
        Mage,           /// 02
        Thief,          /// 03
        Scout,          /// 04
        Warrior,        /// 05
        Knight,         /// 06
        Priest,         /// 07
        Wizard,         /// 08
        Rogue,          /// 09
        Ninja,          /// 10
        Gunner,         /// 11
        Archer,         /// 12
        Berserker,      /// 13
        Pladin,         /// 14
        Saint,          /// 15
        Warlock,        /// 16
        Knave,          /// 17
        Assassin,       /// 18
        Gunslinger,     /// 19
        Ranger,         /// 20
        Juggernaut,     /// 21
        Temple_Knight,  /// 22
        Exorcist,       /// 23
        Necromancer,    /// 24
        Raider,         /// 25
        Nightstalker,   /// 26
        Sharpshooter,   /// 27
        Beast_Keeper,   /// 28
};
enum Slot : u32{};
enum Gender : u32{};
struct ElementalStats{
    u32 minFire;
    u32 minWater;
    u32 minDark;
    u32 minHoly;
    u32 maxFire;
    u32 maxWater;
    u32 maxDark;
    u32 maxHoly;
    u32 fire;
    u32 water;
    u32 dark;
    u32 holy;
    u32 fireResistance;
    u32 waterResistance;
    u32 darkResistance;
    u32 holyResistance;
};
struct AttributeStats{
    u32 Strength;
    u32 Dexterity;
    u32 Intelligence;
    u32 Vitality;
    u32 Luck;
    u32 Wisdom;
};
struct CraftMaterial{
    u32 firstId;
    u32 secondId;
    u32 thirdId;
    u32 fourthId;
    u32 firstAmount;
    u32 secondAmount;
    u32 thirdAmount;
    u32 fourthAmount;
};
struct ItemOptions{
    u32 available;
    u32 Ids[4];
};
struct ContainedItems{
    u16 firstId;
    u16 secondId;
    u16 thirdId;
    u16 fourthId;
    u16 fifthId;
    float firstChacne;
    float secondChance;
    float thirdChance;
    float fourthChance;
    float fifthChance;
};
struct Item {
    u32 Id;
    u32 IsDisabled;
    ItemType type;
    u8 unk[8];
    CharacterJob job1;
    CharacterJob job2;
    CharacterJob job3;
    CharacterJob job4;
    Slot slot1;
    Slot slot2;
    u8 unk2[4];
    u32 isCash;
    u8 unk3[4];
    u32 Price;
    u8 unk4[4];
    u32 maxAmount;
    u8 unk5[12];
    u32 maxLevelRequired;
    Gender gender;
    u32 unkWeaponSomething;
    u8 unk6[24];
    AttributeStats stats;
    ElementalStats elementalStats;
    u8 unk7[12];
    float Speed;
    float Jump;
    u32 defenseStat;
    u32 magicId;
    u8 unk8[8];
    u32 additionalHealthRecoveryVolume;
    u8 unk9[4];
    u32 additionalManaRecoveryVolume;
    u8 unk10[12];
    u32 additionalHealthPoints;
    u32 additionalManaPoints;
    bool isArrow;
    u8 unk11[7];
    u32 additionalEvasionRate;
    u32 hitRate;
    u32 chanceToHit;
    u32 magicalDamage;
    u32 criticalHitChance;
    u8 unk12[8];
    u32 minAttackDamage;
    u32 maxAttackDamage;
    u32 physicalDamage;
    CraftMaterial craftMaterial;
    u32 craftResultAmount;
    u8 unk13[4];
    u32 craftResultItem;
    u8 unk14[16];
    u32 frontWearItemIndex;
    u32 rearWearItemIndex;
    u32 sheetX;
    u32 sheetY;
    u32 sheetWidth;
    u32 sheetHeight;
    u32 sheetId;
    char name[20];
    char description[85];
    u8 unk15[175];
    u32 isEnchantable;
    u8 unk16[104];
    u32 setItems[5];
    u32 setId;
    ItemOptions options;
    u8 unk17[23];
    u8 petId;
    u8 unk18[20];
    u8 hitBoxScaling;
    u8 unk19[13];
    ContainedItems containedItems;
    u8 minLevelRequired;
    u8 unk20[3];
};
std::assert(sizeof(Item) == 932, "Struct isn't the right size");
header header @ 0x00;
Item items[header.amountOfItems] @0x09;