ModernUO/Projects/UOContent/Engines/Spawners
Kamron Batman c02909e2c8
feat(spawners): virtual OnTick; SpawnerDto carries the group flag (#2640)
## Summary

Two small additive changes a derived spawner needs.

- **`BaseSpawner.OnTick()` is now `virtual`.** A subclass that gates spawning on external state (time windows, event triggers) must gate *timer* spawns without gating the manual `Spawn()` API, and `OnTick` is the only place the two paths differ: it is the timer callback and `Spawn()` is both what it calls and what commands and scripts call. Cost: one virtual dispatch on the existing timer callback; no change to stock behaviour.
- **`group` in the JSON DTO.** `BaseSpawner.Group` (all dead, then respawn) is binary-persisted but was missing from `SpawnerDto`, so it did not survive export/import. Added to the abstract record after `spawnLocationIsHome`, assigned in `ApplyDto` after `InitSpawn` (which resets it), and exported by the three stock `ToDto` implementations.

## Test plan

- [x] A derived spawner overriding `OnTick` with a closed gate: `OnTick()` spawns nothing; manual `Spawn()` still spawns and does not pass through `OnTick`.
- [x] DTO round trip with `Group = true` carries `group` and restores it on `ToSpawner()`.
- [x] `UOContent.Tests` full suite green.
- [ ] CI
2026-09-12 16:33:57 -07:00
..
Commands refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
Json feat(spawners): virtual OnTick; SpawnerDto carries the group flag (#2640) 2026-09-12 16:33:57 -07:00
BaseSpawner.cs feat(spawners): virtual OnTick; SpawnerDto carries the group flag (#2640) 2026-09-12 16:33:57 -07:00
BaseSpawner.Dto.cs feat(spawners): virtual OnTick; SpawnerDto carries the group flag (#2640) 2026-09-12 16:33:57 -07:00
BaseSpawner.Entries.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
BaseSpawner.Hooks.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
BaseSpawner.Migrations.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
ProximitySpawner.cs refactor(spawners): replace DynamicJson with typed SpawnerDto records (#2505) 2026-06-25 23:24:45 -07:00
ProximitySpawner.Dto.cs feat(spawners): virtual OnTick; SpawnerDto carries the group flag (#2640) 2026-09-12 16:33:57 -07:00
RegionSpawner.cs refactor(spawners): replace DynamicJson with typed SpawnerDto records (#2505) 2026-06-25 23:24:45 -07:00
RegionSpawner.Dto.cs feat(spawners): virtual OnTick; SpawnerDto carries the group flag (#2640) 2026-09-12 16:33:57 -07:00
SectorSpawnCache.cs fix: Bumps deps. Updates copyrights (#2353) 2026-03-05 19:36:54 -08:00
Spawner.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
Spawner.Dto.cs feat(spawners): virtual OnTick; SpawnerDto carries the group flag (#2640) 2026-09-12 16:33:57 -07:00
SpawnerControllerGump.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
SpawnerEntry.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
SpawnerGump.cs fix(spawners): lock column in the spawner gump, read-only locked entries, aligned totals (#2635) 2026-09-11 20:30:02 -07:00
SpawnerJsonSerializer.cs refactor(spawners): replace DynamicJson with typed SpawnerDto records (#2505) 2026-06-25 23:24:45 -07:00
SpawnPositionState.cs fix: Bumps deps. Updates copyrights (#2353) 2026-03-05 19:36:54 -08:00
SpawnPropsGump.cs feat: Consolidates staff gump layouts (#2404) 2026-04-08 11:42:46 -06:00