ModernUO/Projects
Kamron Batman 107ca3c1c0 fix: stop items from insta-decaying when eligibility is restored without a move
A GM flipping Movable (or Visible) back on for a long-frozen item registered
it with a deadline computed from its stale LastMoved, so the scheduler
deleted it on the next tick. The old save-time decay sweep had the same
semantics but hid them behind the save cadence.

Introduce DecayResetTime (CompactInfo-backed, persisted as delta minutes
under a new SaveFlag with an Item version bump): the decay countdown now
runs from the later of LastMoved and DecayResetTime. RestartDecay() stamps
it only when the item can decay and the stamp extends the deadline, so hot
paths with a fresh LastMoved allocate nothing.

- Movable/Visible/Spawner setters restart the countdown instead of
  registering a stale deadline
- The region-refusal retry in DecayScheduler restarts the countdown without
  rewriting LastMoved, which is reserved for actual moves
- A raw Map assignment (e.g. props) now counts as a move: it stamps
  LastMoved and enrolls/withdraws the item, closing the gap where an item
  moved out of Map.Internal via the setter never decayed

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 10:42:24 -07:00
..
Application fix: Bumps dependencies. (#2531) 2026-07-14 15:17:55 -07:00
BuildTool fix: Require only runtime packages on Linux, and check ICU and tzdata the way the runtime does (#2561) 2026-08-07 15:03:08 -07:00
Logger fix: Bumps dependencies. (#2531) 2026-07-14 15:17:55 -07:00
Server fix: stop items from insta-decaying when eligibility is restored without a move 2026-08-22 10:42:24 -07:00
Server.Tests fix: stop items from insta-decaying when eligibility is restored without a move 2026-08-22 10:42:24 -07:00
UOContent fix: Fixes PlayerConstructed stacking/BODs (#2579) 2026-08-14 17:14:38 -07:00
UOContent.Tests feat: make the blocklist and manual allowlist opt-in; cut the ban subsystem's on-loop cost (#2577) 2026-08-13 23:22:35 -07:00