diff options
| author | historia <[not public]> | 2026-09-16 21:35:55 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-09-16 21:35:55 -0400 |
| commit | fea2cc6839ec3ee17940a2dea69622dc6f4deabf (patch) | |
| tree | 9d893525ca20d2cc920e9e866f84f71b605d8ae9 /internal/admin/server.go | |
| parent | 35ddd0ad2215760bb1d3dc7724480f179ea33fa6 (diff) | |
| download | thehouseoficarus-fea2cc6839ec3ee17940a2dea69622dc6f4deabf.tar.gz | |
fix: unify crafting ingredient resolution; fix superheat alternatives, quantity gates, and dropped combine byproducts
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) { |
