Synchronize dependency output handoff
This commit is contained in:
@@ -29,6 +29,11 @@ verwenden in ATM10 `alltheores:gold_plate`. Ihre lokalen Deployer-, Chute- und
|
|||||||
Vault-Puffer werden durch Factory Gauges versorgt; der globale Keep-Stock fuellt
|
Vault-Puffer werden durch Factory Gauges versorgt; der globale Keep-Stock fuellt
|
||||||
verbrauchte Cogwheels und Iron Nuggets parallel wieder auf.
|
verbrauchte Cogwheels und Iron Nuggets parallel wieder auf.
|
||||||
|
|
||||||
|
V1.3.2 synchronisiert Vorauftrag und Hauptauftrag explizit: Das erzeugte Material
|
||||||
|
wird erst freigegeben, nachdem der Vorauftrag seine Ankunft registriert hat. So
|
||||||
|
kann ein nachfolgender Auftrag den neuen Bestand nicht mehr im selben Tick
|
||||||
|
wegnehmen und dadurch einen falschen Retry oder Fehler ausloesen.
|
||||||
|
|
||||||
## Create-Fabrik: Peripherie erkennen
|
## Create-Fabrik: Peripherie erkennen
|
||||||
|
|
||||||
Das rein lesende Diagnoseprogramm herunterladen und starten:
|
Das rein lesende Diagnoseprogramm herunterladen und starten:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
-- ATM10 Create factory scheduler V1
|
-- ATM10 Create factory scheduler V1
|
||||||
-- Persistent jobs, dependency planning, progress-aware retries and diagnostics.
|
-- Persistent jobs, dependency planning, progress-aware retries and diagnostics.
|
||||||
|
|
||||||
local VERSION = "1.3.1"
|
local VERSION = "1.3.2"
|
||||||
local REFRESH_SECONDS = 1
|
local REFRESH_SECONDS = 1
|
||||||
local CONFIRM_SECONDS = 6
|
local CONFIRM_SECONDS = 6
|
||||||
local DRAIN_SECONDS = 60
|
local DRAIN_SECONDS = 60
|
||||||
@@ -97,7 +97,7 @@ local RECIPES = {
|
|||||||
output = "create:railway_casing", outputCount = 64, targetCount = 64,
|
output = "create:railway_casing", outputCount = 64, targetCount = 64,
|
||||||
},
|
},
|
||||||
precision_mechanism = {
|
precision_mechanism = {
|
||||||
label = "16 GOLD SHEETS -> PRECISION", station = "precisionmechanism", address = "precisionmechanism",
|
label = "16 GOLD PLATES -> PRECISION", station = "precisionmechanism", address = "precisionmechanism",
|
||||||
input = "alltheores:gold_plate", inputCount = 16,
|
input = "alltheores:gold_plate", inputCount = 16,
|
||||||
outputs = { "create:precision_mechanism" }, completion = "activity",
|
outputs = { "create:precision_mechanism" }, completion = "activity",
|
||||||
},
|
},
|
||||||
@@ -443,6 +443,33 @@ end
|
|||||||
|
|
||||||
local newJob
|
local newJob
|
||||||
|
|
||||||
|
local function dependencyReleased(job)
|
||||||
|
if not job.dependencyJobId then return true end
|
||||||
|
local dependency = findJobById(job.dependencyJobId)
|
||||||
|
if not dependency then
|
||||||
|
job.dependencyJobId, job.waitingFor = nil, nil
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
if dependency.status == "FAILED" or dependency.status == "CANCELLED" then
|
||||||
|
failJob(job, "Vorauftrag #" .. dependency.id .. " fuer "
|
||||||
|
.. prettyItemName(job.waitingFor or "Input") .. " ist " .. dependency.status)
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- The parent may consume the result as soon as the child has registered its
|
||||||
|
-- complete arrival. Waiting for the whole drain timer is unnecessary, but
|
||||||
|
-- releasing it before this point makes the parent hide the child's output.
|
||||||
|
local target = math.max(1, dependency.targetCount or 1)
|
||||||
|
local registered = (dependency.progress or 0) >= target
|
||||||
|
if dependency.status ~= "DONE" and not registered then
|
||||||
|
job.status, job.activeStation = "WAITING_INPUT", nil
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
job.dependencyJobId, job.waitingFor, job.lastDependencyLog = nil, nil, nil
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
local function waitForDependency(job, item, required)
|
local function waitForDependency(job, item, required)
|
||||||
local producerId = PRODUCER_BY_ITEM[item]
|
local producerId = PRODUCER_BY_ITEM[item]
|
||||||
if not producerId or producerId == job.recipeId then
|
if not producerId or producerId == job.recipeId then
|
||||||
@@ -480,6 +507,7 @@ end
|
|||||||
|
|
||||||
local function dispatchNormal(job, missingOutput)
|
local function dispatchNormal(job, missingOutput)
|
||||||
local recipe = RECIPES[job.recipeId]
|
local recipe = RECIPES[job.recipeId]
|
||||||
|
if not dependencyReleased(job) then return false end
|
||||||
local selectedStation = chooseStation(recipe, job)
|
local selectedStation = chooseStation(recipe, job)
|
||||||
if not selectedStation then job.status = "WAITING" return false end
|
if not selectedStation then job.status = "WAITING" return false end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user