fix(aflæsning): tipvogn skiftes til en tip-side AD må aflæsse fra
EDK 650 Unrealistic har kun allowAIDischarge på bagudtip; på venstre/højre/ kornluge åbnede AD aflæsningen, men intet løb ud (Chicken Food 2 786.712 l hvede ved Farma med plads; Disponibel Vogn 3 fuld af løg). CP-genstart logger kun ved ændring (v1.60.16.0).
This commit is contained in:
@@ -8,6 +8,9 @@ står i [docs/BRUGERMANUAL.md](docs/BRUGERMANUAL.md) (dansk) og [docs/USER_MANUA
|
||||
|
||||
## 1.60 — "Kræver handling" → flow, menuplacering, flow-vogne i guiden
|
||||
|
||||
- **1.60.16** Tipvogne skiftes under AD-aflæsning til en tip-side, AutoDrive må aflæsse fra (`allowAIDischarge`).
|
||||
Farmtech EDK 650 (Unrealistic) tillader kun bagudtip; stod den på venstre, højre eller kornluge, åbnede AD
|
||||
aflæsningen, men intet løb ud, og vognen holdt med fuldt læs. CP-genstartslisten logges kun, når den ændrer sig.
|
||||
- **1.60.15** Humle (HOPS, Dakota) behandles som vinafgrøde: aldrig slåafgrøde, og markmaskiner kører på rækkerne som ved druer.
|
||||
- **1.60.14** Afkobling ved redskabets egen parkering godtager 8 m (før 5 m): lange redskaber som en valse står
|
||||
med roden over 5 m inde i båsen, så afkoblingen fejlede med "stoppedAway".
|
||||
|
||||
@@ -110,7 +110,12 @@ function ADCpResume.save(adEnv)
|
||||
end
|
||||
xmlFile:save()
|
||||
xmlFile:delete()
|
||||
-- gemmes ved hver runs-gem (flere gange i minuttet): log kun når listen ændrer sig
|
||||
local signature = table.concat(ids, ",")
|
||||
if signature ~= ADCpResume.lastLogged then
|
||||
ADCpResume.lastLogged = signature
|
||||
Logging.info(ADCpResume.LOG_PREFIX .. "gemt: %d maskine(r) kører Courseplay", #ids)
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
-- AD Tip Side
|
||||
-- Tipvogne med flere tip-sider (fx Farmtech EDK 650 Unrealistic: bag / kornluge / venstre / højre) tillader kun
|
||||
-- AI-aflæsning (allowAIDischarge) på nogle af udløbene. Står vognen på en side uden, åbner AD aflæsningen ved
|
||||
-- målet, men intet løber ud — vognen holder med fuldt læs (in-game 29/9: Chicken Food 2 med 786.712 l hvede på
|
||||
-- højre side ved en Farma med 10 mio. l fri; Disponibel Vogn 3 fuld af løg). Når AD kører en vogn, skiftes den til
|
||||
-- en side, AI må aflæsse fra.
|
||||
|
||||
ADTipSide = {}
|
||||
ADTipSide.LOG_PREFIX = "ADSmartPickup: tip-side: "
|
||||
|
||||
-- ---- ren logik ----
|
||||
|
||||
-- sides = {{node = udløbsindeks}}, allowAI = {[udløbsindeks] = true}, current = nuværende side
|
||||
-- -> sideindeks der skal vælges, eller nil (nuværende er fin / ingen side tilladt / ukendt)
|
||||
function ADTipSide.choose(sides, allowAI, current)
|
||||
local currentSide = (sides or {})[current]
|
||||
if currentSide ~= nil and (allowAI or {})[currentSide.node] then return nil end
|
||||
for index, side in ipairs(sides or {}) do
|
||||
if (allowAI or {})[side.node] then return index end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- ---- spil ----
|
||||
|
||||
local warned = setmetatable({}, {__mode = "k"})
|
||||
|
||||
local function sidesOf(object)
|
||||
local spec = object.spec_trailer
|
||||
local dis = object.spec_dischargeable
|
||||
if spec == nil or dis == nil or spec.tipSides == nil or #spec.tipSides < 2 then return nil end
|
||||
local sides, allowAI = {}, {}
|
||||
for index, side in ipairs(spec.tipSides) do sides[index] = {node = side.dischargeNodeIndex} end
|
||||
for index, node in ipairs(dis.dischargeNodes or {}) do
|
||||
if node.allowAIDischarge then allowAI[index] = true end
|
||||
end
|
||||
return sides, allowAI, spec.preferedTipSideIndex
|
||||
end
|
||||
|
||||
-- Alle tipvogne bag traktoren: skift til en AI-tilladt side (kun mens vognen ikke tipper).
|
||||
function ADTipSide.ensure(vehicle)
|
||||
local children = vehicle.getChildVehicles ~= nil and vehicle:getChildVehicles() or {}
|
||||
for _, object in pairs(children) do
|
||||
if object ~= vehicle and object.setPreferedTipSide ~= nil then
|
||||
local sides, allowAI, current = sidesOf(object)
|
||||
local tipping = Trailer ~= nil and object.getTipState ~= nil and object:getTipState() ~= Trailer.TIPSTATE_CLOSED
|
||||
local index = sides ~= nil and not tipping and ADTipSide.choose(sides, allowAI, current) or nil
|
||||
if index ~= nil then
|
||||
object:setPreferedTipSide(index)
|
||||
if not warned[object] then
|
||||
warned[object] = true
|
||||
Logging.info(ADTipSide.LOG_PREFIX .. "'%s': tip-side %s -> %d (AutoDrive må kun aflæse fra den side)",
|
||||
tostring(object.getName ~= nil and object:getName() or "?"), tostring(current), index)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -426,6 +426,9 @@ function ADUnloadWait.getClaims(adEnv)
|
||||
return ADWaitPool.getClaims(adEnv)
|
||||
end
|
||||
|
||||
ADUnloadWait.TIP_CHECK_MS = 2000
|
||||
local tipChecked = setmetatable({}, {__mode = "k"})
|
||||
|
||||
function ADUnloadWait.install(adEnv)
|
||||
local task, autoDrive = adEnv.UnloadAtDestinationTask, adEnv.AutoDrive
|
||||
if isInstalled or task == nil or task.update == nil or autoDrive == nil or autoDrive.getSetting == nil then
|
||||
@@ -438,6 +441,15 @@ function ADUnloadWait.install(adEnv)
|
||||
local originalUpdate, originalFinished, originalGetSetting = task.update, task.finished, autoDrive.getSetting
|
||||
|
||||
task.update = function(self, dt)
|
||||
-- alle aflæsningsture (også udkørsel og tømning): tipvognen på en side AD må aflæsse fra (EDK 650, 29/9)
|
||||
if ADTipSide ~= nil and self.vehicle ~= nil then
|
||||
local now = g_time or 0
|
||||
if (tipChecked[self.vehicle] or -math.huge) + ADUnloadWait.TIP_CHECK_MS <= now then
|
||||
tipChecked[self.vehicle] = now
|
||||
local okTip, errTip = pcall(ADTipSide.ensure, self.vehicle)
|
||||
if not okTip then Logging.warning(ADUnloadWait.LOG_PREFIX .. "tip-side: %s", tostring(errTip)) end
|
||||
end
|
||||
end
|
||||
local ok, err = pcall(ADUnloadWait.beforeUpdate, adEnv, self, dt)
|
||||
if not ok then
|
||||
Logging.warning(ADUnloadWait.LOG_PREFIX .. "fejl i Wait-punkt-logik, AutoDrive fortsætter selv: %s", tostring(err))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.60.15.0</version>
|
||||
<version>1.60.16.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
@@ -31,6 +31,7 @@
|
||||
<sourceFile filename="adSources.lua"/>
|
||||
<sourceFile filename="adBuildings.lua"/>
|
||||
<sourceFile filename="adOutbound.lua"/>
|
||||
<sourceFile filename="adTipSide.lua"/>
|
||||
<sourceFile filename="adUnloadWait.lua"/>
|
||||
<sourceFile filename="adFieldModel.lua"/>
|
||||
<sourceFile filename="adFieldFleet.lua"/>
|
||||
|
||||
Reference in New Issue
Block a user