diff --git a/build-image.ps1 b/build-image.ps1 index 2b6c1e0..19a796b 100644 --- a/build-image.ps1 +++ b/build-image.ps1 @@ -1,2 +1,2 @@ -#!sh +#!pwsh docker build --platform linux/arm64,linux/amd64 -f Continuity.AuthServer/Dockerfile -t continuity-auth . diff --git a/hex-patterns/baseitemdata.hexpat b/hex-patterns/baseitemdata.hexpat new file mode 100644 index 0000000..cbfbafc --- /dev/null +++ b/hex-patterns/baseitemdata.hexpat @@ -0,0 +1,182 @@ +#pragma once +#pragma pattern_limit 1500000 +#include +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; \ No newline at end of file