A new tool called pfu plus a pair of wrapper scripts. This enables us to proactively upgrade all player files as part of a release. It works by loading the game world, simulating logging in each char and then executing a list of tasks on the char before saving it.
A grep reveals that on the host, all existing pfiles are either v3 or v4.
Explicit Upgrades
Right now there's only one task - one that emulates reset_char() which previously was always run on login even if the Char didn't need it, and this is largely about resetting & recalculating any attributes that can be modified by item & spell effects.
All pfiles are being upgrade to v5.
Implicit Upgrades
As well as the explicit tasks, there are several updates that pfu will make to existing pfiles simply by saving them:
Unique Objects: Any objects a char owns that has been flagged UNIQUE gets its "ExtF" bits updated to set that bit.
Adds empty pronouns.
Removes Info_ finger fields that we ditched last year.
Removes NewsRead field.
Some chars got a new bit in their ExtraBits, we must've added a new one at some point a long time ago.
Reformats LastLoginAt to use our standard format (we've had 3 different formats!). Keeps whatever the timestamp was where possible.
A new tool called
pfu
plus a pair of wrapper scripts. This enables us to proactively upgrade all player files as part of a release. It works by loading the game world, simulating logging in each char and then executing a list of tasks on the char before saving it.A grep reveals that on the host, all existing pfiles are either v3 or v4.
Explicit Upgrades
reset_char()
which previously was always run on login even if the Char didn't need it, and this is largely about resetting & recalculating any attributes that can be modified by item & spell effects.Implicit Upgrades
As well as the explicit tasks, there are several updates that pfu will make to existing pfiles simply by saving them:
Info_
finger fields that we ditched last year.NewsRead
field.ExtraBits
, we must've added a new one at some point a long time ago.LastLoginAt
to use our standard format (we've had 3 different formats!). Keeps whatever the timestamp was where possible.