diff options
| author | historia <[not public]> | 2026-09-15 15:35:52 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-09-15 15:35:52 -0400 |
| commit | 0b0b25222b3131ada79ff78c28eb8bf07d977deb (patch) | |
| tree | 2ceaef5203595044f66a8f00064cd8e017f8f48d /internal/world/mob.go | |
| parent | 396c3facb8287b9a34076cae8f3d7b300d366d99 (diff) | |
| download | thehouseoficarus-0b0b25222b3131ada79ff78c28eb8bf07d977deb.tar.gz | |
feat: single-owner game state, transactional lifecycle, durable money on server stop
Diffstat (limited to 'internal/world/mob.go')
| -rw-r--r-- | internal/world/mob.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/internal/world/mob.go b/internal/world/mob.go index f33b2f9..a794bdd 100644 --- a/internal/world/mob.go +++ b/internal/world/mob.go @@ -722,3 +722,27 @@ func (s *MobStore) SeedMobs(roomID int, entries []RoomMob) { s.instances[instID] = inst } } + +// RekeyRooms remaps every live mob instance's RoomID and HomeRoomID per +// idMap (oldID -> newID), including wander rooms. Uses delete-all-then- +// set-all so a swap cannot clobber an entry mid-rekey. +func (s *MobStore) RekeyRooms(idMap map[int]int) { + if len(idMap) == 0 { + return + } + s.mu.Lock() + defer s.mu.Unlock() + for _, inst := range s.instances { + if newID, ok := idMap[inst.RoomID]; ok && newID != inst.RoomID { + inst.RoomID = newID + } + if newID, ok := idMap[inst.HomeRoomID]; ok && newID != inst.HomeRoomID { + inst.HomeRoomID = newID + } + for i, room := range inst.WanderRooms { + if newID, ok := idMap[room]; ok && newID != room { + inst.WanderRooms[i] = newID + } + } + } +} |
