feat: kæder respekterer fabrikkens udgang (Fordel = intet flow, Sælg på mellemvare -> Behold)

This commit is contained in:
2026-09-30 22:01:42 +02:00
parent 21b48d7664
commit 1bda82a270
9 changed files with 120 additions and 14 deletions
+21
View File
@@ -281,6 +281,25 @@ function ADChainRun.applyFinalSales(data, chain, edges)
return changed
end
-- Mellemvarer der står på Sælg: næste led i kæden fik intet. Sættes til Behold (spawn/lager), så kædens flow henter
-- dem ved fabrikken; tages ud af soldByChain, så slutprodukt-logikken ikke sætter dem til salg igen.
function ADChainRun.keepIntermediates(data, edges)
if ProductionPoint == nil or ProductionPoint.OUTPUT_MODE == nil then return 0 end
local changed = 0
for _, item in ipairs(ADChainActions.soldIntermediates(edges)) do
local entry, fillIndex = (data.points or {})[item.key], data.fillIndex[item.fillType]
if entry ~= nil and entry.point ~= nil and fillIndex ~= nil and entry.point.setOutputDistributionMode ~= nil
and outputMode(entry.point, fillIndex) == ProductionPoint.OUTPUT_MODE.DIRECT_SELL then
entry.point:setOutputDistributionMode(fillIndex, ProductionPoint.OUTPUT_MODE.KEEP)
ADChain.state.soldByChain[item.key .. "|" .. item.fillType] = nil
changed = changed + 1
log("mellemvare %s i %s sælges ikke længere (næste led i kæden bruger den) -> Behold", tostring(item.fillType),
tostring(entry.buildingName or item.key))
end
end
return changed
end
-- 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)
@@ -326,6 +345,8 @@ function ADChainRun.apply(adEnv, data, result)
local okNew, created = pcall(ADChainRun.createFlows, adEnv, data, result.edges)
local okSell, sellErr = pcall(ADChainRun.applyFinalSales, data, result.chain, result.edges)
if not okSell then warn("slutprodukter fejlede: %s", tostring(sellErr)) end
local okKeep, keepErr = pcall(ADChainRun.keepIntermediates, data, result.edges)
if not okKeep then warn("mellemvarer fejlede: %s", tostring(keepErr)) end
if okMerge and mergedCount > 0 then created = (okNew and created or 0) + mergedCount end
if not okNew then warn("nye flows fejlede: %s", tostring(created)) end
-- delvise data: en rod der ikke kunne læses, må ikke få sine flows stoppet