fix(flows): flow startet igen under tømning/hjemtur afbryder hjemturen og kører videre med vognen — før tømte den i op til 10 min ved forkert mål, satte vognen af og kørte i garage (v1.52.1.0)
This commit is contained in:
@@ -111,6 +111,8 @@ end
|
|||||||
|
|
||||||
local waiting = setmetatable({}, {__mode = "k"}) -- traktor -> runId (venter på sin vogn)
|
local waiting = setmetatable({}, {__mode = "k"}) -- traktor -> runId (venter på sin vogn)
|
||||||
local fetching = setmetatable({}, {__mode = "k"}) -- traktor -> runId (henter sin vogn)
|
local fetching = setmetatable({}, {__mode = "k"}) -- traktor -> runId (henter sin vogn)
|
||||||
|
local emptying = setmetatable({}, {__mode = "k"}) -- traktor -> {stage, since, fillType, runName}
|
||||||
|
local homing = setmetatable({}, {__mode = "k"}) -- traktor -> true (flowets hjemtur: vogn af, traktor hjem)
|
||||||
local missingCount = {} -- runId -> tjek i træk
|
local missingCount = {} -- runId -> tjek i træk
|
||||||
local seenBuildings = {} -- bygnings-id'er set i denne session
|
local seenBuildings = {} -- bygnings-id'er set i denne session
|
||||||
local rememberTimer, buildingTimer = 0, 0
|
local rememberTimer, buildingTimer = 0, 0
|
||||||
@@ -190,6 +192,13 @@ local function guessFor(adEnv, run, vehicle, tractorId)
|
|||||||
return wagonId
|
return wagonId
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Flowet startes igen mens traktoren tømmer/kører hjem efter et stop: afbryd, så den kører videre med sin vogn.
|
||||||
|
-- Puljens egen hjemtur (fra markarbejde) røres ikke — der sidder et andet redskab bagpå.
|
||||||
|
-- s = {emptying, flowHoming, poolReturning} -> true = afbryd
|
||||||
|
function ADFlowWagons.abortHomeTripOnStart(s)
|
||||||
|
return s.emptying == true or s.flowHoming == true
|
||||||
|
end
|
||||||
|
|
||||||
-- Lånt ud af puljen: markarbejde, marksilo-lån, på hjemtur eller Courseplay kører den.
|
-- Lånt ud af puljen: markarbejde, marksilo-lån, på hjemtur eller Courseplay kører den.
|
||||||
function ADFlowWagons.isPoolBusy(vehicle, tractorId)
|
function ADFlowWagons.isPoolBusy(vehicle, tractorId)
|
||||||
return (ADFieldJobs ~= nil and ADFieldJobs.state.assignments[tractorId] ~= nil)
|
return (ADFieldJobs ~= nil and ADFieldJobs.state.assignments[tractorId] ~= nil)
|
||||||
@@ -203,6 +212,15 @@ end
|
|||||||
function ADFlowWagons.beforeStart(adEnv, run, vehicle)
|
function ADFlowWagons.beforeStart(adEnv, run, vehicle)
|
||||||
local tractorId = ADRunsController.getVehicleId(vehicle)
|
local tractorId = ADRunsController.getVehicleId(vehicle)
|
||||||
if fetching[vehicle] ~= nil then return true, {vehicle = vehicle, ok = true, reason = "fetchingWagon"} end
|
if fetching[vehicle] ~= nil then return true, {vehicle = vehicle, ok = true, reason = "fetchingWagon"} end
|
||||||
|
if ADFlowWagons.abortHomeTripOnStart({emptying = emptying[vehicle] ~= nil, flowHoming = homing[vehicle] ~= nil}) then
|
||||||
|
Logging.info(ADFlowWagons.LOG_PREFIX .. "flow '%s': '%s' startet igen — tømning/hjemtur afbrudt, kører videre med vognen",
|
||||||
|
tostring(run.name), tostring(ADRuns.vehicleLabel(vehicle)))
|
||||||
|
emptying[vehicle] = nil
|
||||||
|
if homing[vehicle] ~= nil then
|
||||||
|
homing[vehicle] = nil
|
||||||
|
ADHitch.cancel(vehicle)
|
||||||
|
end
|
||||||
|
end
|
||||||
local wagonId = (run.wagons or {})[tractorId]
|
local wagonId = (run.wagons or {})[tractorId]
|
||||||
if wagonId == nil and #ADHitch.rearImplementsOf(vehicle) == 0 then
|
if wagonId == nil and #ADHitch.rearImplementsOf(vehicle) == 0 then
|
||||||
wagonId = guessFor(adEnv, run, vehicle, tractorId)
|
wagonId = guessFor(adEnv, run, vehicle, tractorId)
|
||||||
@@ -259,7 +277,6 @@ function ADFlowWagons.beforeStart(adEnv, run, vehicle)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Stop/slet/bygning væk: vognen tømmes (flowets mål, ellers silo/egen fabrik), sættes på plads, traktoren hjem.
|
-- Stop/slet/bygning væk: vognen tømmes (flowets mål, ellers silo/egen fabrik), sættes på plads, traktoren hjem.
|
||||||
local emptying = setmetatable({}, {__mode = "k"}) -- traktor -> {stage, since, fillType, runName}
|
|
||||||
local nowMs = 0
|
local nowMs = 0
|
||||||
|
|
||||||
local function cargoOf(adEnv, vehicle)
|
local function cargoOf(adEnv, vehicle)
|
||||||
@@ -280,8 +297,10 @@ end
|
|||||||
|
|
||||||
local function goHome(adEnv, vehicle)
|
local function goHome(adEnv, vehicle)
|
||||||
emptying[vehicle] = nil
|
emptying[vehicle] = nil
|
||||||
local okHome, pooled = pcall(ADHitch.returnHome, adEnv, vehicle)
|
homing[vehicle] = true
|
||||||
|
local okHome, pooled = pcall(ADHitch.returnHome, adEnv, vehicle, function(tractor) homing[tractor] = nil end)
|
||||||
if not (okHome and pooled) then
|
if not (okHome and pooled) then
|
||||||
|
homing[vehicle] = nil
|
||||||
local park = ADFieldWork.parkMarkerId(adEnv, vehicle)
|
local park = ADFieldWork.parkMarkerId(adEnv, vehicle)
|
||||||
if park ~= nil then pcall(ADFieldWork.startAd, adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, park, nil) end
|
if park ~= nil then pcall(ADFieldWork.startAd, adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, park, nil) end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<modDesc descVersion="107">
|
<modDesc descVersion="107">
|
||||||
<author>masterdraco</author>
|
<author>masterdraco</author>
|
||||||
<version>1.52.0.0</version>
|
<version>1.52.1.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -76,5 +76,11 @@ check("tøm: målet tog det hele -> hjem", W.emptyStep("target", {cargo = 0}), "
|
|||||||
check("tøm: silo tog det -> hjem", W.emptyStep("dump", {cargo = 0}), "home")
|
check("tøm: silo tog det -> hjem", W.emptyStep("dump", {cargo = 0}), "home")
|
||||||
check("tøm: silo kunne ikke -> giv op, hjem", W.emptyStep("dump", {cargo = 2000}), "giveUp")
|
check("tøm: silo kunne ikke -> giv op, hjem", W.emptyStep("dump", {cargo = 2000}), "giveUp")
|
||||||
check("tøm: for længe -> giv op", W.emptyStep("target", {cargo = 5000, adActive = true, elapsedMs = W.EMPTY_TIMEOUT_MS}), "giveUp")
|
check("tøm: for længe -> giv op", W.emptyStep("target", {cargo = 5000, adActive = true, elapsedMs = W.EMPTY_TIMEOUT_MS}), "giveUp")
|
||||||
|
-- flowet startes igen mens traktoren tømmer/kører hjem fra et stop: hjemturen afbrydes, den kører videre med vognen
|
||||||
|
-- (in-game 29/9: Stop+Start med 1 s mellemrum -> tømning ved forkert mål i 10 min, vogn sat af, traktor i garage)
|
||||||
|
check("genstart: tømmer -> afbryd", W.abortHomeTripOnStart({emptying = true}), true)
|
||||||
|
check("genstart: flowets hjemtur -> afbryd", W.abortHomeTripOnStart({flowHoming = true}), true)
|
||||||
|
check("genstart: puljens hjemtur (markarbejde) -> rør ikke", W.abortHomeTripOnStart({poolReturning = true}), false)
|
||||||
|
check("genstart: intet i gang", W.abortHomeTripOnStart({}), false)
|
||||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||||
os.exit(failures == 0 and 0 or 1)
|
os.exit(failures == 0 and 0 or 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user