fix(markarbejde): forkert vare hældes kun ud som lille rest (≤10 %, ≤2000 l); fuld sprøjte/spreder bruges ikke til en anden opgave (100.000 l gødning blev hældt ud) (v1.32.4.0)
This commit is contained in:
@@ -93,7 +93,9 @@ end
|
||||
local function sprayerNames(object)
|
||||
local unitIndex = object:getSprayerFillUnitIndex()
|
||||
local filledName = nil
|
||||
if (object:getFillUnitFillLevel(unitIndex) or 0) > 0 then
|
||||
local level = object:getFillUnitFillLevel(unitIndex) or 0
|
||||
local capacity = object.getFillUnitCapacity ~= nil and (object:getFillUnitCapacity(unitIndex) or 0) or 0
|
||||
if level > 0 then
|
||||
filledName = g_fillTypeManager:getFillTypeNameByIndex(object:getFillUnitFillType(unitIndex))
|
||||
end
|
||||
local supported = {}
|
||||
@@ -104,17 +106,29 @@ local function sprayerNames(object)
|
||||
if name ~= nil then supported[name] = true end
|
||||
end
|
||||
end
|
||||
return filledName, supported
|
||||
return filledName, supported, level, capacity
|
||||
end
|
||||
|
||||
local function sprayRole(object)
|
||||
if object.spec_sprayer == nil or object.getSprayerFillUnitIndex == nil then return nil end
|
||||
local ok, role, roles, filledRole = pcall(function()
|
||||
local filledName, supported = sprayerNames(object)
|
||||
return ADCpBridge.sprayRolesFor(filledName, supported)
|
||||
local ok, role, roles, filledRole, wrongFillDumpable = pcall(function()
|
||||
local filledName, supported, level, capacity = sprayerNames(object)
|
||||
local r, rs, fr = ADCpBridge.sprayRolesFor(filledName, supported)
|
||||
return r, rs, fr, ADCpBridge.isDumpable(level, capacity)
|
||||
end)
|
||||
if not ok then return nil end
|
||||
return role, roles, filledRole
|
||||
return role, roles, filledRole, wrongFillDumpable
|
||||
end
|
||||
|
||||
-- Må en forkert vare hældes ud? Kun en lille rest: højst 10 % af tanken og aldrig over 2.000 l
|
||||
-- (in-game 26/9: 100.000 l flydende gødning og 4.000 l sprøjtemiddel blev hældt ud for at skifte opgave).
|
||||
ADCpBridge.MAX_DUMP_LITERS = 2000
|
||||
ADCpBridge.MAX_DUMP_SHARE = 0.10
|
||||
function ADCpBridge.isDumpable(level, capacity)
|
||||
level = level or 0
|
||||
if level <= 0 then return true end
|
||||
if level > ADCpBridge.MAX_DUMP_LITERS then return false end
|
||||
return capacity == nil or capacity <= 0 or level <= capacity * ADCpBridge.MAX_DUMP_SHARE
|
||||
end
|
||||
|
||||
-- Tøm sprøjten/sprederen for en vare der ikke hører til opgaven (kalk på, skal gøde). FS25 kan ikke
|
||||
@@ -124,10 +138,10 @@ function ADCpBridge.emptySprayerIfWrong(vehicle, role)
|
||||
for _, object in ipairs(collect(vehicle)) do
|
||||
if object.spec_sprayer ~= nil and object.getSprayerFillUnitIndex ~= nil then
|
||||
pcall(function()
|
||||
local filledName = sprayerNames(object)
|
||||
local filledName, _, level, capacity = sprayerNames(object)
|
||||
if filledName == nil or ADCpBridge.sprayRoleForFillType(filledName) == role then return end
|
||||
if not ADCpBridge.isDumpable(level, capacity) then return end
|
||||
local unit = object:getSprayerFillUnitIndex()
|
||||
local level = object:getFillUnitFillLevel(unit) or 0
|
||||
object:addFillUnitFillLevel(object:getOwnerFarmId(), unit, -level, object:getFillUnitFillType(unit), ToolType.UNDEFINED, nil)
|
||||
liters, name = liters + level, filledName
|
||||
end)
|
||||
@@ -142,7 +156,7 @@ function ADCpBridge.getSpecs(vehicle)
|
||||
for _, name in ipairs(ADCpBridge.SPECS) do
|
||||
if object[name] ~= nil then specs[name] = true end
|
||||
end
|
||||
if specs.sprayRole == nil then specs.sprayRole, specs.sprayRoles, specs.filledRole = sprayRole(object) end
|
||||
if specs.sprayRole == nil then specs.sprayRole, specs.sprayRoles, specs.filledRole, specs.dumpable = sprayRole(object) end
|
||||
end
|
||||
if vehicle.getCanStartCpCombineUnloader ~= nil then
|
||||
local ok, can = pcall(vehicle.getCanStartCpCombineUnloader, vehicle)
|
||||
|
||||
@@ -50,7 +50,10 @@ local function sortCandidates(candidates, role, x, z, requiredWidth, accept)
|
||||
local dx, dz = candidate.x - x, candidate.z - z
|
||||
-- spreder med en anden vare på skal tømmes først: kun hvis ingen anden kan
|
||||
local wrongFill = candidate.filledRole ~= nil and candidate.filledRole ~= role
|
||||
table.insert(usable, {candidate = candidate, distance = dx * dx + dz * dz, wrongFill = wrongFill})
|
||||
-- fuld af en anden vare: bruges slet ikke til denne opgave (resten hældes kun ud når den er lille)
|
||||
if not (wrongFill and candidate.dumpable == false) then
|
||||
table.insert(usable, {candidate = candidate, distance = dx * dx + dz * dz, wrongFill = wrongFill})
|
||||
end
|
||||
elseif widthReason == nil then
|
||||
widthReason, widthArgs = reason, args
|
||||
end
|
||||
|
||||
@@ -129,7 +129,7 @@ function ADFieldWork.getRigs(adEnv)
|
||||
controlled = isControlledByPlayer(vehicle),
|
||||
width = ADCpBridge.getWorkWidth(vehicle), x = x, z = z,
|
||||
-- tom spreder kan flere ting (gødning og kalk): alle dens roller
|
||||
roles = specs.sprayRoles, filledRole = specs.filledRole,
|
||||
roles = specs.sprayRoles, filledRole = specs.filledRole, dumpable = specs.dumpable,
|
||||
}
|
||||
if role == "harvester" then rig.fruits = ADCpBridge.getHarvestFruits(vehicle) or {} end
|
||||
if role == "seeder" then
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.32.3.0</version>
|
||||
<version>1.32.4.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
@@ -82,6 +82,12 @@ check("SR2 med kalk kan stadig gøde (efter tømning)", r2 and r2.fertilizer, tr
|
||||
check("SR2 fyldets rolle", f2, "limer")
|
||||
check("SR2 ukrudtssprøjte", (ADCpBridge.sprayRolesFor(nil, {HERBICIDE = true, WATER = true})), "weeder")
|
||||
check("SR2 vandvogn er ingen sprøjte", (ADCpBridge.sprayRolesFor(nil, {WATER = true})), nil)
|
||||
-- SR3: kun en lille rest må hældes ud (100.000 l gødning blev hældt ud in-game 26/9)
|
||||
check("SR3 tom", ADCpBridge.isDumpable(0, 4000), true)
|
||||
check("SR3 lille rest 300 af 4000", ADCpBridge.isDumpable(300, 4000), true)
|
||||
check("SR3 halv tank 2000 af 4000", ADCpBridge.isDumpable(2000, 4000), false)
|
||||
check("SR3 100000 l aldrig", ADCpBridge.isDumpable(100000, 1000000), false)
|
||||
check("SR3 over 2000 l aldrig", ADCpBridge.isDumpable(2500, 100000), false)
|
||||
|
||||
-- HF: høsterens afgrøder fra skærebordet (liste eller opslag); finsnitter tager ingen
|
||||
local list = ADCpBridge.harvestFruitSet({fruitTypes = {3, 5}})
|
||||
|
||||
@@ -104,6 +104,10 @@ check("FLS tom spreder tager kalkning", F.pick({spreaders[2]}, "limer", 0, 0) an
|
||||
check("FLS gødskning: tom før nærmere med kalk på", F.pick(spreaders, "fertilizer", 0, 0).id, "tom")
|
||||
check("FLS kun kalk-sprederen: bruges (tømmes)", F.pick({spreaders[1]}, "fertilizer", 0, 0).id, "kalk")
|
||||
check("FLS kalkning: den med kalk på foretrækkes", F.pick(spreaders, "limer", 0, 0).id, "kalk")
|
||||
-- FLS2: fuld af en anden vare (ikke dumpable) bruges slet ikke til opgaven
|
||||
local fullOther = {id = "fuld", role = "fertilizer", roles = {fertilizer = true, weeder = true}, filledRole = "fertilizer", dumpable = false, enabled = true, x = 0, z = 0, width = 30}
|
||||
check("FLS2 fuld gødningssprøjte bruges ikke til ukrudt", F.pick({fullOther}, "weeder", 0, 0), nil)
|
||||
check("FLS2 men gerne til gødning", F.pick({fullOther}, "fertilizer", 0, 0).id, "fuld")
|
||||
|
||||
-- FLD: faste maskiner pr. mark
|
||||
local sprayA = {id = "sprøjte", role = "fertilizer"}
|
||||
|
||||
Reference in New Issue
Block a user