Compare commits

..

2 commits

Author SHA1 Message Date
d70041f064
chore: hexpat for baseitemdata 2024-09-18 10:42:21 +02:00
209cc3d8f5
docs: example usage scripts 2024-09-17 06:00:40 +02:00
3 changed files with 191 additions and 1 deletions

View file

@ -4,3 +4,11 @@ This is a continuation and rewrite of the original Project Infinity for Wonderki
## Important notes for developers
* Avoid using statements with TcpSession, AuthSession or any type that inherits Session outside the session itself.
# Scripts example usage
**split_dat_file.ps1**
``.\scripts\split_dat_file.ps1 .\wk-data\baseitemdata_clean.dat 932 9``
**dexor_binary_file.ps1**
``.\scripts\dexor_binary_file.ps1 .\wk-data\baseitemdata.dat .\wk-data\baseitemdata_clean.dat 0xc5``

View file

@ -1,2 +1,2 @@
#!sh
#!pwsh
docker build --platform linux/arm64,linux/amd64 -f Continuity.AuthServer/Dockerfile -t continuity-auth .

View file

@ -0,0 +1,182 @@
#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;