fix(markarbejde): højst én maskine sendt ud hvert 10. sekund på tværs af markerne — 6 kørte fra parkeringen samtidig efter Start alle; marksilo-navn uden dobbelt F-nummer (v1.42.2.0)
This commit is contained in:
@@ -89,6 +89,19 @@ function ADFieldJobs.shouldResume(s)
|
||||
return type(s.distance) == "number" and s.distance <= ADFieldJobs.RESUME_NEAR_M
|
||||
end
|
||||
|
||||
-- Højst én maskine sendt ud pr. DISPATCH_GAP_MS på tværs af alle marker (in-game 27/9: 6 maskiner kørte fra
|
||||
-- parkeringen i samme sekund efter Start alle).
|
||||
ADFieldJobs.DISPATCH_GAP_MS = 10000
|
||||
function ADFieldJobs.mayDispatch(now, lastAt)
|
||||
return lastAt == nil or now - lastAt >= ADFieldJobs.DISPATCH_GAP_MS
|
||||
end
|
||||
|
||||
function ADFieldJobs.assignmentCount()
|
||||
local count = 0
|
||||
for _ in pairs(ADFieldJobs.state.assignments) do count = count + 1 end
|
||||
return count
|
||||
end
|
||||
|
||||
-- Beslutning for én mark. assignments = sæt på marken ({phase, stage, helper}); kun sæt på det aktuelle
|
||||
-- trin tæller (en aflæsningsvogn på vej hjem fra høsten forstyrrer ikke kultiveringen).
|
||||
-- env = {raining = bool}: vejrfølsomme trin (høst/slå/vend/riv/hø) sendes ikke ud i regn.
|
||||
@@ -366,7 +379,11 @@ local function stepField(adEnv, info, env)
|
||||
ADFieldJobs.note(info.id, {reason = {key = key}})
|
||||
end
|
||||
elseif decision.action == "dispatch" then
|
||||
-- én udsendelse ad gangen på tværs af markerne: marken prøver igen ved næste tick
|
||||
if not ADFieldJobs.mayDispatch(ADFieldJobs.now, ADFieldJobs.lastDispatchAt) then return end
|
||||
local before = ADFieldJobs.assignmentCount()
|
||||
ADFieldWork.dispatch(adEnv, field, info, decision)
|
||||
if ADFieldJobs.assignmentCount() > before then ADFieldJobs.lastDispatchAt = ADFieldJobs.now end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -167,7 +167,10 @@ function ADFieldSilos.collectBuildings(adEnv)
|
||||
if not seen[building.id] and not ADFieldSiloConfig.hasStore(ADFieldSilos.config, building.id) and not nearStore(stores, x, z) then
|
||||
seen[building.id] = true
|
||||
-- marknummeret først: navnet skæres af i fanen, og mange siloer hedder ens ("Farma 500 …")
|
||||
table.insert(silos, {id = building.id, name = string.format("F%s %s", tostring(info.id), tostring(building.name)), markerId = firstMarker(building, "load"),
|
||||
-- marknummeret først (medmindre navnet allerede starter med det, fx "F22 marksilo")
|
||||
local siloName = tostring(building.name)
|
||||
if not siloName:match("^F" .. tostring(info.id) .. "%f[%D]") then siloName = string.format("F%s %s", tostring(info.id), siloName) end
|
||||
table.insert(silos, {id = building.id, name = siloName, markerId = firstMarker(building, "load"),
|
||||
x = x, z = z, stock = siloStock(building.placeable)})
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.42.1.0</version>
|
||||
<version>1.42.2.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
@@ -151,5 +151,12 @@ check("SR lige ved sit huskede waypoint -> ja", ADFieldJobs.shouldResume({distan
|
||||
check("SR langt fra waypointet og ingen mark -> nej", ADFieldJobs.shouldResume({distance = 850}), false)
|
||||
check("SR ukendt afstand og ingen mark -> nej", ADFieldJobs.shouldResume({}), false)
|
||||
|
||||
|
||||
-- mayDispatch: markarbejdet sender højst én maskine ud pr. DISPATCH_GAP_MS på tværs af alle marker
|
||||
-- (in-game 27/9: 6 maskiner kørte fra parkeringen i samme sekund efter Start alle)
|
||||
check("MD første udsendelse", ADFieldJobs.mayDispatch(5000, nil), true)
|
||||
check("MD for tæt på forrige", ADFieldJobs.mayDispatch(5000 + ADFieldJobs.DISPATCH_GAP_MS - 1, 5000), false)
|
||||
check("MD efter mellemrummet", ADFieldJobs.mayDispatch(5000 + ADFieldJobs.DISPATCH_GAP_MS, 5000), true)
|
||||
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user