ArcZoneEvent_BuildFrom (sb.exe 0xC8ED20) builds ArcZoneEvent,
ArcZoneResourceEvent (0xC904F0) or ArcZoneStateEvent (0xC952E0); Python
read the base fields only for all three and had no save or JSON code.
Field names come from each class's ParseKeyword; trigger types and
state actions use the client name tables (0x176AF20, 0x176A40C).
Base event unknowns are the event-name hash, parent-name hash and
has-parent flag; the trigger action's third bool is has_items.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The inventory read when mobile_has_content is set overwrote one
attribute per field, never loaded its power action list and had no
save or JSON methods. InstanceInfo follows InstanceInfo_ctorFromStream
(sb.exe 0x674810); field names come from InstanceInfo::ParseKeyword
(0x66FA60). Power action entries (0x54F680) keep the item power action
id/arguments layout; their remaining fields are unknownN.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ArcHirelingInfo_ctorFromStream (sb.exe 0xC65A90) reads product, stock,
minion and service element lists that were created but never loaded,
and Hireling/Pet/Minion had no save or JSON methods. Sub-records follow
the client loaders (Product 0xC60E50, MinionElement 0xC63410,
ServiceElement 0xC64350); int32 values are read signed, product
prefix/suffix ids are hashed. Unnamed fields are numbered unknownN.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ShopKeeperInfo and MerchantInfo only had binary methods, so a zone
holding either type could not be unpacked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ArcPropInfo_ctorFromStream (sb.exe 0x680360) loads LIGHT_COLOR as four
floats (0x6BB2A0) and REGISTRY with ResStream_ReadInt32, reading the
registry name only when it is greater than zero.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>