aboutsummaryrefslogtreecommitdiff
path: root/internal/world/mob.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/world/mob.go')
-rw-r--r--internal/world/mob.go24
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
+ }
+ }
+ }
+}