diff options
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 + } + } + } +} |
