aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/admin/server.go')
-rw-r--r--internal/admin/server.go9
1 files changed, 9 insertions, 0 deletions
diff --git a/internal/admin/server.go b/internal/admin/server.go
index 6ad20f5..17835db 100644
--- a/internal/admin/server.go
+++ b/internal/admin/server.go
@@ -20,6 +20,7 @@ import (
"net"
"net/http"
"path/filepath"
+ "os"
"strconv"
"strings"
"time"
@@ -120,6 +121,8 @@ func NewServer(cfg *config.Config, useTLS bool, accountStore *player.AccountStor
apiMux.HandleFunc("/api/room-dirs/rename", s.handleRenameRoomDir)
apiMux.HandleFunc("/api/room-dirs/create", s.handleCreateRoomDir)
apiMux.HandleFunc("/api/rooms/link", s.handleRoomLink)
+ apiMux.HandleFunc("/api/rooms/insert", s.handleRoomInsert)
+ apiMux.HandleFunc("/api/rooms/remove", s.handleRoomRemove)
apiMux.HandleFunc("/api/rooms/move", s.handleRoomMove)
apiMux.HandleFunc("/api/rooms/rename", s.handleRoomRename)
apiMux.HandleFunc("/api/rooms", s.handleRooms)
@@ -619,6 +622,12 @@ func (s *AdminServer) rebuildAfterUndo(change *ChangeDesc) {
if idStr := strings.TrimSuffix(name, ".yaml"); idStr != name {
if id, err := strconv.Atoi(idStr); err == nil && id > 0 {
s.world.ClearRoomState(id)
+ // If the room file is now gone (true after undo-of-create and
+ // redo-of-delete), drop any in-memory mob instances for it so
+ // they don't keep ticking against a room that no longer exists.
+ if _, statErr := os.Stat(p); os.IsNotExist(statErr) && s.mobStore != nil {
+ s.mobStore.RemoveMobsInRoom(id)
+ }
}
}
}