0.7.0 — Inventory feature & hardening batch
Inventory feature & hardening release closing the #213–#245 batch
Security & reliability (core contract v14)
- Item registry & native hash filter (#242/#245): once a server registers its item
catalog (items.json), the core rejects any unregistered item hash before allocating —
killing cheat-spawned items and hash-spam memory exhaustion at the native boundary. Opt-in:
without a catalog the previous behaviour is unchanged. - Atomic weight/slot limits (#213) enforced under the same lock as the mutation (no
check-then-act race), plus busy/locked container flags (#240/#224) with a 30 s crash
failsafe. - Persistence hardening (#240/#244): per-container serialization + a busy flag around
every load/save closes the item-loss window in the async gap; each save runs in one SQL
transaction. - Quantity sanity cap (#243): a negative int cast to
uintis rejected instead of
minting ~4 billion items. Rejections now surface a reason (InvResult); the classic
bool/void APIs stay source-compatible.
Inventory features (core contract v15)
- Atomic batch primitive (#233): one all-or-nothing takes+gives transaction — the
foundation for crafting (#223), atomic trades (#225) and theInventoryTransaction
unit-of-work scope. - Unique item instances + metadata (#214): weapons/keys/bags as server-generated u64
instances (the id doubles as the serial), with aninventory_instancestable; the core
owns the atomic location truth, metadata lives in C#/DB. - Category filters (#218), change events (#220), and nested containers (#216).
Gameplay & security layer (flash-core)
- Container access pipeline (#224/#238/#239): session → rate-limit → distance → ACL/keys
for every player-driven interaction, blocking remote-looting and macro-spam; violations
raiseflashfw:invViolation(flag-and-log, no auto-ban). - Audit logging (#227), loot tables (#228), ground drops in a memory-only band
(#221/#219), duplication alerts (#241), and opt-in state-bag sync (#215). - Lazy item decay (#222) for unique items, container sessions (#236, server half),
and DX helpers: rejection messages (#235), snapshot queries (#231), a fluent container
builder (#230), category[ItemHandler]s with metadata injection (#232), and a
/dumpitemsconstants generator (#234).
Not applicable: #226 (no slot/stack model to consolidate), #229 (a split is already the
atomic move).
Compatibility: Core contract v15 · FXServer artifact 31689 (Windows) · Flash.Sdk 0.7.0 (NuGet).
Install: download flash-payload-0.7.0.zip, then ./install-flash.ps1 -ServerDir <FXServer> -PayloadDir <extracted>. Resource devs: dotnet add package Flash.Sdk --version 0.7.0.
Full details in CHANGELOG.md.