ModernUO/Projects/Server.Tests/Tests
Kamron Batman 2b845b0d8d fix: stop stack merges and splits from laundering PlayerConstructed
PlayerConstructed is per-instance provenance, and #2574 put it on every
crafted item -- including potions, arrows and other stackables. Stack
operations were written when no item carried provenance of any kind, so they
treated two piles of the same graphic as interchangeable.

Merging keeps the receiving stack's value. Dropping bought potions onto a
crafted stack made the whole pile count as crafted; the reverse order erased
it. Which happened was decided by drag direction alone. CanStackWith now
compares PlayerConstructed, so the two never merge into one indistinguishable
pile.

Splitting rebuilds one half in Mobile.LiftItemDupe, which copies a fixed list
of fields rather than going through Dupe/CopyProperties -- PlayerConstructed
was not on that list, so dragging part of a pile off stripped the new half.
Note that [IgnoreDupe] does not govern this path; it only applies to Dupe().
LiftItemDupe now copies the flag, so a split cannot produce halves that
disagree about what they are.

Refusing to merge is the whole fix: a stack has nowhere to record provenance,
so the only coherent behaviour is to keep the two piles apart. Paths that
genuinely virtualize an item -- pouring a potion keg, for one -- rebuild it
without the flag, and the result is simply treated as not crafted.

Adds 7 tests: both merge directions, the matching case, split copying, and the
split/re-merge round trip.
2026-08-13 19:10:31 -07:00
..
Buffers fix: Harden Advanced Search: crash-safety, autosave, correct results & worker fixes (#2543) 2026-07-21 07:51:06 -07:00
Client fix: Fixes flaky tests, formatting, and sequential testing. (#2168) 2025-04-30 16:42:38 -07:00
Collections chore: Use var everywhere (#2294) 2025-12-27 16:47:28 -08:00
Console fix(console): stop headless servers from pegging a CPU core (#2535) 2026-07-16 18:52:43 -07:00
Geometry chore: Use var everywhere (#2294) 2025-12-27 16:47:28 -08:00
Items fix: stop stack merges and splits from laundering PlayerConstructed 2026-08-13 19:10:31 -07:00
Json fix(json): Rectangle3DConverter loses a z-level on write (#2506) 2026-06-25 23:42:49 -07:00
Localization fix: Fixes flaky tests, formatting, and sequential testing. (#2168) 2025-04-30 16:42:38 -07:00
Maps perf(saves): eliminate world-save freeze bottlenecks (~9.5x faster freeze) (#2525) 2026-07-16 22:53:28 -07:00
Network perf: Sleep the event loop when idle. Fixes networking micro-stalls. Adds event loop instrumentation. (#2559) 2026-08-09 13:24:59 -07:00
PropertyList feat(network): allowlist false-positive IPs, escalate on behavior (#2556) 2026-07-30 23:12:17 -07:00
Serialization perf(saves): eliminate world-save freeze bottlenecks (~9.5x faster freeze) (#2525) 2026-07-16 22:53:28 -07:00
Text chore: Code Cleanup (#1239) 2022-11-10 22:49:25 -08:00
Timer chore: Use var everywhere (#2294) 2025-12-27 16:47:28 -08:00
Utility chore: Fixes flaky tests (#2386) 2026-03-22 10:54:12 -07:00
World chore: Use var everywhere (#2294) 2025-12-27 16:47:28 -08:00
SerialTests.cs fix: Adds ISpanFormattable support to Serial (#1065) 2022-06-14 18:39:46 -07:00