diff options
Diffstat (limited to 'internal/admin/server.go')
| -rw-r--r-- | internal/admin/server.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/internal/admin/server.go b/internal/admin/server.go index 2c8681a..12d090d 100644 --- a/internal/admin/server.go +++ b/internal/admin/server.go @@ -720,6 +720,13 @@ func (s *AdminServer) rebuildAfterUndo(change *ChangeDesc) { if s.mobStore != nil { s.mobStore.RemoveMobsInRoom(id) } + // The room no longer exists, so its cached casino games + // (tables/machines) must be evicted like the direct-delete + // API does: outstanding wagers are refunded through the + // wired game callback before the cache entries drop. + if s.evictRoom != nil { + s.evictRoom(id) + } } } } @@ -728,6 +735,17 @@ func (s *AdminServer) rebuildAfterUndo(change *ChangeDesc) { for _, p := range changeFiles(change) { s.invalidateEntityCacheForPath(p) } + + // Course definitions changed on disk (create/update/delete via undo or + // redo): the runtime course index must reload, exactly like the course + // API handlers do, or gameplay keeps traversing the stale course. + for _, p := range changeFiles(change) { + if rel, err := filepath.Rel(filepath.Join(s.dataDir, "courses"), p); err == nil && + !strings.HasPrefix(rel, "..") && rel != "." { + s.reloadCoursesIfWired() + break + } + } } func (s *AdminServer) invalidateEntityCaches(entityType string) { |
