fix(kæde): spillerens slukninger huskes, pause beskytter kun sin egen kæde, stoppede flows slippes og forældede nøgler glemmes

This commit is contained in:
2026-09-30 14:24:16 +02:00
parent 9c9c2badeb
commit 605c4e8d45
5 changed files with 131 additions and 37 deletions
+7 -10
View File
@@ -85,16 +85,11 @@ local function setProduction(data, key, isOn)
return ok
end
-- Spillerens slukninger er allerede lagt i state.userOff (ADChain.reconcile før planen): de tændes ikke igen.
-- Delvise data: intet slukkes (en rod der ikke kunne læses, ligner en rod der er slået fra).
function ADChainRun.toggleProductions(data, prod, needRecipes)
function ADChainRun.toggleProductions(data, prod)
local state = ADChain.state
local byChain = state.byChain
local overrides = ADChain.playerOverrides(data.recipes, needRecipes, state.userOff, data.partial == true)
state.userOff = overrides.userOff
for _, key in ipairs(overrides.added) do
byChain[key] = nil
log("spilleren slukkede %s — kæden tænder den ikke igen", key)
end
for _, key in ipairs(prod.enable or {}) do
if not state.userOff[key] and setProduction(data, key, true) then
byChain[key] = true
@@ -175,7 +170,8 @@ function ADChainRun.createFlows(adEnv, data, edges)
return count
end
-- Flows for rødder der er slået fra: flyt til en anden rod der stadig bruger kanten, ellers stop (slettes ikke).
-- Flows for rødder der er slået fra: flyt til en anden rod der stadig bruger kanten, ellers stop og slip (chain
-- ryddes, så spilleren kan starte flowet igen uden at kæden stopper det næste minut; det slettes ikke).
function ADChainRun.stopFlows(adEnv, chain, edges)
local changed = 0
local active = ADChain.activeRoots(chain, ADChain.state.paused)
@@ -188,7 +184,8 @@ function ADChainRun.stopFlows(adEnv, chain, edges)
else
local ok, err = pcall(ADRunsController.stopRun, adEnv, run.id)
if ok then
log("flow '%s' stoppet: kæden %s er slået fra", tostring(run.name), tostring(run.chain))
ADRunsController.updateRun(run.id, {chain = ""})
log("flow '%s' stoppet og sluppet af kæden: kæden %s er slået fra", tostring(run.name), tostring(run.chain))
changed = changed + 1
else
warn("flow '%s' kunne ikke stoppes: %s", tostring(run.name), tostring(err))
@@ -202,7 +199,7 @@ end
function ADChainRun.apply(adEnv, data, result)
local okFields, errFields = pcall(ADChainRun.switchFields, data, result.actions)
if not okFields then warn("markskift fejlede: %s", tostring(errFields)) end
local okProd, errProd = pcall(ADChainRun.toggleProductions, data, result.prod, result.chain.needRecipes)
local okProd, errProd = pcall(ADChainRun.toggleProductions, data, result.prod)
if not okProd then warn("mellemled fejlede: %s", tostring(errProd)) end
local okNew, created = pcall(ADChainRun.createFlows, adEnv, data, result.edges)
if not okNew then warn("nye flows fejlede: %s", tostring(created)) end