#pragma once #pragma pattern_limit 1500000 #include enum SkillType: u32{ _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30 }; struct header { u8 unk[3]; bool flag; u8 unk2; u32 amountOfItems; }; 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 SkillSourceEntity : u32{ Player, Pet, Mob, Debuff, //Most likely Debuff/Buff Types }; enum SkillBuffType : u32{ None, Positive, Negative }; struct MagicData{ u32 Id; u8 unk[24]; u32 IsPassive; SkillBuffType unk2; SkillType skillType; SkillSourceEntity unk3; CharacterJob requiredJob; u32 unk4[3]; char name[20]; char description[291+52]; padding[169]; u32 appliesToSkillId; padding[8]; u32 minLevelOfApplicableSkill; padding[20]; u32 unk5; u32 requiredItemType; u32 unk6; u32 maxLevel; padding[600]; u32 duration[50]; padding[400]; padding[7800]; u32 physicalDamageMultiplier[50]; padding[2400]; u32 manaCost[50]; padding[0x5244-2600-7800-200-600-600-4-24-4-4-1-7-4-12-20-255-12-2-283-12]; }; std::print(std::format("{}",0x5244)); std::print(std::format("{}",sizeof(MagicData))); std::assert(sizeof(MagicData) == 0x5244, "Struct isn't the right size"); header header @ 0x00; MagicData items[header.amountOfItems] @0x09;