M1 — World & character persistence #3
Labels
No labels
alpha:wave-0
alpha:wave-1
alpha:wave-2
alpha:wave-3
area:assets
area:combat
area:ecology
area:infra
area:render
area:scripting
area:ui
area:world
enhancement
epic
migration
post-alpha
roadmap
tech-debt
type:bug
type:chore
type:design
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
marco/IsoMmo#3
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Make the world survive a server restart. Today
Worldstate is in-memory only, so a restart wipes every character's position. First step from "movement demo" to "MMO".Scope
Open questions
Definition of Done
Base DoD applies on top (tests green, whole solution builds, zero warnings, multi-platform preserved); the criteria below are the issue-specific delta.
Database.Migrate()applies cleanly on SQLite and Postgres.Done and merged to
main(commitffef976).The GameServer now owns a dual-provider EF store (
GameDbContext, SQLite dev / Postgres prod, both migration sets) for player positions. Position is loaded on connect, saved on disconnect and by a periodicPersistenceService(~15s) plus a shutdown flush — all off the tick loop.World.AddPlayertakes a start position;TryGetPositionexposes the current one.Verified: an integration test (
PlayerPosition_PersistsAcrossReconnect) plus a manual smoke test where a character moved, the server was restarted, and re-login placed the character back at its saved tile (not the origin). Whole solution builds zero-warning, 107 tests green, andIsoMmo.Shared(the wire contract) is untouched.