Files
servuo-plugins/patches/README.md
Claude 2c51bc720c Phase 0: fix runtime script compilation
ScriptCompiler.Compile() runs `dotnet build Scripts/Scripts.csproj -c Release`
with no Platform, so MSBuild defaults to AnyCPU. Scripts.csproj gated both
OutputPath and DefineConstants on Configuration|Platform == Release|x64, so
under the server's own build the DLL landed in Scripts/bin/Release/ (while the
core loads Scripts.dll from the base directory) and TRACE;NEWTIMERS;ServUO went
undefined (XmlSpawner compiled its non-ServUO branches).

Compile() also never checks the build's exit code before Assembly.LoadFrom, so
the failure was silent and the stale DLL reloaded. Runtime script compilation
had had no effect since 2026-05-30.

Condition both property groups on Configuration alone. Server.csproj is left
alone: nothing under Server/ uses those symbols, and giving it OutputPath=..\
would make the boot-time build try to overwrite the running ServUO.exe.

Verified end-to-end: a plain boot now logs "Core: Compiling scripts... / Build
succeeded." and loads 206208 items, 42771 mobiles.

Also adds the implementation plan, the measured performance budget, the test
scaffolding used to produce it (seeder + probe, both default-off), and the
record of shard repairs that had to precede any of this.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 04:34:18 -05:00

1.6 KiB

patches

Unified diffs against stock ServUO 57.4 for files the bridge must modify rather than add. Anything that can be shipped as a whole file belongs in overlay/ instead.

Apply from the server root:

git apply --check patches/<name>.patch   # dry run
git apply         patches/<name>.patch

Current

Patch Phase File Why
(none yet)

Planned

Patch Phase File Why
playervendor-sale-event 7 Server/EventSink.cs Declare PlayerVendorSale, InvokePlayerVendorSale, PlayerVendorSaleEventArgs { Buyer, Vendor, Owner, Item, Price, Commission }.
playervendor-sale-event 7 Scripts/Gumps/PlayerVendorGumps.cs One InvokePlayerVendorSale call after the HoldGold += at line 96, where the sale commits.

Player-vendor purchases raise no EventSink. ValidVendorPurchase / ValidVendorSell cover NPC vendors only. The commit point is PlayerVendorBuyGump.OnResponse, and it is the only place where buyer, vendor owner, price, and commission are all in scope — which is exactly what cheat detection needs. See docs/PLAN.md §6.

Note on Scripts.csproj

Phase 0 modifies an existing file but ships as a whole-file overlay (overlay/Scripts/Scripts.csproj) because the file is small, we own it operationally, and a copy is less fragile than a diff against a project file. Revisit if it starts drifting from upstream.

Note on shard repairs

The deletions and edits described in docs/SHARD_PREREQS.md are one-time repairs to a specific broken install, not part of the bridge. They are not shipped here.