Drop nullable DTO types in favor of WhenWritingDefault + sentinels (ModernUO avoids
nullable). guid/location/map/count/minDelay/maxDelay/entries are mandatory (force-written
via [JsonIgnore(Never)]); optional fields omit at their default. spawnPositionMode/
maxSpawnAttempts map their non-CLR-default "omit" value onto the default in ToDto.
Reintroduce compact homeRange: ToDto writes homeRange (the radius) only when SpawnBounds is
EXACTLY what that radius reconstructs (square, centered, standard z/depth) so the round-trip
is lossless; otherwise it writes spawnBounds. homeRange uses a -1 "absent" sentinel and a
ShouldSerialize(hr >= 0) since 0 is a valid radius WhenWritingDefault cannot emit.
JsonPropertyOrder preserves the on-disk field order.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>