fix(scene): persist scene only after the client actually moves

The user's save was bricked by teleporting to entry 100000304: the client
offers it in the map but NREs in AdventurePhase._EnterStep1_InitializeMapInfo
while loading, and the server had already saved that scene - every login
then replayed the broken scene (stuck on the train-window loading screen).

- loadScene no longer calls SavePersistent; SceneEntityMove's 5s cadence
  persists the scene only once the client walks in it (the existing arena
  guard already kept challenge scenes out of the save)
- reset persistent to entry 102020107 (proven walkable in the 01:00/01:38
  sessions)
This commit is contained in:
CAtlas0784 committed 2026-10-07 02:39:41 +07:00
1 parent ebf313256f
commit 768baeb62a
3 files changed
+28 -8

No files matched your search

+4 -1
View File
@@ -842,11 +842,14 @@ func loadScene(s *Session, entryID uint32, isEnterScene bool, teleportID *uint32
sceneInfo.EntityGroupList = append(sceneInfo.EntityGroupList, playerGroup)
if isEnterScene {
// in-memory only: the scene is persisted by SceneEntityMove once the
// client actually moves. Saving here would brick the save when the
// client cannot load the destination (e.g. entry 100000304) - every
// login would then NRE in AdventurePhase on the same broken scene.
player.Scene.EntryID = entryID
player.Scene.FloorID = floorID
player.Scene.PlaneID = planeID
player.Position = jsonPos
player.SavePersistent()
if err := s.Send(&goproto.EnterSceneByServerScNotify{
Scene: sceneInfo,