fix(pulje): flow-vogne holdes altid af deres flow (også stoppet), stoppet flow-traktor kun ledig solo; markredskaber kun bag traktorer (butikskategori tractors*, ikke lastbil/Unimog); præcis venteårsag i loggen (v1.54.0.0)
This commit is contained in:
@@ -35,6 +35,19 @@ function ADPool.powerOk(tractorHp, neededHp)
|
||||
return tractorHp >= neededHp
|
||||
end
|
||||
|
||||
-- Butikskategori: markredskaber kun bag traktorer (tractorsS/M/L …) — ikke lastbil/Unimog, læssere o.l.
|
||||
-- Tømmevogne må alle trække. Ukendt kategori tillades (intet må gå i stå på manglende data).
|
||||
ADPool.ANY_PULLER_ROLES = {unloader = true}
|
||||
|
||||
function ADPool.categoryOk(category, role)
|
||||
if category == nil or ADPool.ANY_PULLER_ROLES[role] then return true end
|
||||
return tostring(category):lower():find("^tractors") ~= nil
|
||||
end
|
||||
|
||||
local function suits(tractor, implement, role)
|
||||
return ADPool.powerOk(tractor.hp, implement.neededHp) and ADPool.categoryOk(tractor.category, role)
|
||||
end
|
||||
|
||||
-- Markøren "Connect <parkering>" for en parkering (navneregel).
|
||||
function ADPool.connectFor(parkName, markers)
|
||||
if type(parkName) ~= "string" then return nil end
|
||||
@@ -147,7 +160,7 @@ function ADPool.pairFor(role, fieldX, fieldZ, implements, tractors, blocked, acc
|
||||
end)
|
||||
local weakest = nil
|
||||
for _, implement in ipairs(candidates) do
|
||||
local tractor = nearest(free, implement.x, implement.z, function(t) return ADPool.powerOk(t.hp, implement.neededHp) end)
|
||||
local tractor = nearest(free, implement.x, implement.z, function(t) return suits(t, implement, role) end)
|
||||
if tractor ~= nil then return {implement = implement, tractor = tractor} end
|
||||
if weakest == nil or (implement.neededHp or 0) < (weakest.neededHp or 0) then weakest = implement end
|
||||
end
|
||||
@@ -162,7 +175,7 @@ function ADPool.pairAll(role, implements, tractors, blocked)
|
||||
for _, implement in ipairs(implements or {}) do
|
||||
if hasRole(implement, role) and not blocked[implement.id] then
|
||||
local tractor = nearest(tractors or {}, implement.x, implement.z, function(t)
|
||||
return not used[t.id] and not blocked[t.id] and not t.offNetwork and ADPool.powerOk(t.hp, implement.neededHp)
|
||||
return not used[t.id] and not blocked[t.id] and not t.offNetwork and suits(t, implement, role)
|
||||
end)
|
||||
if tractor ~= nil then
|
||||
used[tractor.id] = true
|
||||
@@ -298,6 +311,13 @@ function ADPool.readTractorHp(vehicle)
|
||||
return item ~= nil and item.specs ~= nil and ADPool.numberOf(item.specs.power) or nil
|
||||
end
|
||||
|
||||
-- Butikskategori (fx "TRACTORSM", "TRUCKS") eller nil.
|
||||
local function categoryOf(vehicle)
|
||||
if g_storeManager == nil or vehicle.configFileName == nil then return nil end
|
||||
local item = g_storeManager:getItemByXMLFilename(vehicle.configFileName)
|
||||
return item ~= nil and item.categoryName or nil
|
||||
end
|
||||
|
||||
-- Varer og samlet kapacitet i redskabets fyldenheder (tømmevogne).
|
||||
function ADPool.cargoOf(vehicle)
|
||||
local carries, capacity = {}, 0
|
||||
@@ -367,7 +387,7 @@ function ADPool.collect(adEnv, isBusy)
|
||||
-- uden for AD-vejnettet: den kan ikke køre ud efter redskabet (ville sende redskaber i karantæne)
|
||||
local networkDistance = ADFieldWork.distanceToNetwork(adEnv, x, z)
|
||||
table.insert(tractors, {id = id, vehicle = vehicle, name = ADRuns.vehicleLabel(vehicle), x = x, z = z,
|
||||
hp = tractorHpOf(vehicle), parkId = park.id,
|
||||
hp = tractorHpOf(vehicle), category = categoryOf(vehicle), parkId = park.id,
|
||||
offNetwork = networkDistance ~= nil and networkDistance > ADFieldWork.MAX_OFF_NETWORK})
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user