-
Notifications
You must be signed in to change notification settings - Fork 20
PyPoE 101: Updating specifications for new leagues
When the Contents.ggpk
are live, you can use snosme's dat viewer to read it from the update servers.
- Put the patch version accordingly and click import
- In the left side explorer you will see all the game files. The subfolders are the localized game files.
When exporting data, you will see an error looking like this:
This means that our specifications don't match the tables in the game files. In this case it was the incursion rooms, so we browse the IncursionRooms.dat
in the dat viewer, which displays the table:
Then we need to go into PyPoE\poe\file\specification\data\stable.py
and find 'IncursionRooms.dat': File()
which contains the following fields:
'IncursionRooms.dat': File(
fields=(
Field(
name='Id',
type='ref|string',
unique=True,
),
Field(
name='Name',
type='ref|string',
),
Field(
name='Tier',
type='int',
),
Field(
name='MinLevel',
type='int',
),
Field(
name='RoomUpgrade_IncursionRoomsKey',
type='ref|generic',
key='IncursionRooms.dat',
),
Field(
name='ModsKey',
type='ulong',
key='Mods.dat',
),
Field(
name='PresentARMFile',
type='ref|string',
file_path=True,
file_ext='.arm',
),
Field(
name='IntId',
type='int',
unique=True,
),
Field(
name='IncursionArchitectKey',
type='ulong',
key='IncursionArchitect.dat',
),
Field(
name='PastARMFile',
type='ref|string',
file_path=True,
file_ext='.arm',
),
Field(
name='TSIFile',
type='ref|string',
file_path=True,
file_ext='.tsi',
),
Field(
name='UIIcon',
type='ref|string',
),
Field(
name='FlavourText',
type='ref|string',
),
Field(
name='Description',
type='ref|string',
),
Field(
name='AchievementItemsKeys',
type='ref|list|ulong',
key='AchievementItems.dat',
),
Field(
name='Unknown0',
type='int',
),
Field(
name='Unknown1',
type='int',
),
Field(
name='RoomUpgradeFrom_IncursionRoomsKey',
type='ref|generic',
key='IncursionRooms.dat',
),
),
),
And according to the dat viewer, there are 8 bytes of unidentified data at the end of the fields, so we add them accordingly:
'IncursionRooms.dat': File(
fields=(
Field(
name='Id',
type='ref|string',
unique=True,
),
Field(
name='Name',
type='ref|string',
),
Field(
name='Tier',
type='int',
),
Field(
name='MinLevel',
type='int',
),
Field(
name='RoomUpgrade_IncursionRoomsKey',
type='ref|generic',
key='IncursionRooms.dat',
),
Field(
name='ModsKey',
type='ulong',
key='Mods.dat',
),
Field(
name='PresentARMFile',
type='ref|string',
file_path=True,
file_ext='.arm',
),
Field(
name='IntId',
type='int',
unique=True,
),
Field(
name='IncursionArchitectKey',
type='ulong',
key='IncursionArchitect.dat',
),
Field(
name='PastARMFile',
type='ref|string',
file_path=True,
file_ext='.arm',
),
Field(
name='TSIFile',
type='ref|string',
file_path=True,
file_ext='.tsi',
),
Field(
name='UIIcon',
type='ref|string',
),
Field(
name='FlavourText',
type='ref|string',
),
Field(
name='Description',
type='ref|string',
),
Field(
name='AchievementItemsKeys',
type='ref|list|ulong',
key='AchievementItems.dat',
),
Field(
name='Unknown0',
type='int',
),
Field(
name='Unknown1',
type='int',
),
Field(
name='RoomUpgradeFrom_IncursionRoomsKey',
type='ref|generic',
key='IncursionRooms.dat',
),
Field(
name='Unknown2',
type='byte',
),
Field(
name='Unknown3',
type='byte',
),
Field(
name='Unknown4',
type='byte',
),
Field(
name='Unknown5',
type='byte',
),
Field(
name='Unknown6',
type='byte',
),
Field(
name='Unknown7',
type='byte',
),
Field(
name='Unknown8',
type='byte',
),
Field(
name='Unknown9',
type='byte',
),
),
),
You should be good to go.
Other errors might show up if other related data changes.
Keep in mind that new columns might be added in between existing ones or old ones removed. They need to be in order and casted correctly.
Credits: snosme - dat viewer
Project Path of Exile Wiki