fix: påfyldningsmarkør ved stationens egne læssetriggere (langt sæt fik anden stations markør)
This commit is contained in:
@@ -8,6 +8,7 @@ står i [docs/BRUGERMANUAL.md](docs/BRUGERMANUAL.md) (dansk) og [docs/USER_MANUA
|
|||||||
|
|
||||||
## 1.62 — Kæder slås selv til
|
## 1.62 — Kæder slås selv til
|
||||||
|
|
||||||
|
- **1.62.3** Rettet: påfyldning ved købestation valgte en anden stations markør for lange sæt. AutoDrive vil have markøren togets længde + 3–13 m forbi triggeren, så Puma + Kinze 4900 ventede på frø ved "Market Price Liquid Fill Station" i stedet for "Buying Station Multifruit". Nu vælges den nærmeste markør ved stationens egne læssetriggere; P-, Connect- og Wait-markører springes over. Loggen skriver, hvor et tomt redskab fyldes.
|
||||||
- **1.62.2** Kæderne læser fabrikkernes udgange (Sælg / Fordel / Behold). **Fordel:** spillet leverer selv til gårdens fabrikker, så kæden opretter intet flow, og fanen Kæder viser *fordeles af spillet*. **Behold** (spawn eller lager): et flow henter varen ved fabrikken som hidtil. **Sælg på en mellemvare** betyder, at næste led i kæden intet får, så kæden sætter den til Behold og henter den.
|
- **1.62.2** Kæderne læser fabrikkernes udgange (Sælg / Fordel / Behold). **Fordel:** spillet leverer selv til gårdens fabrikker, så kæden opretter intet flow, og fanen Kæder viser *fordeles af spillet*. **Behold** (spawn eller lager): et flow henter varen ved fabrikken som hidtil. **Sælg på en mellemvare** betyder, at næste led i kæden intet får, så kæden sætter den til Behold og henter den.
|
||||||
- **1.62.1** Rettet: udkørsel fra objektlager (fx Sell Egg fra Æglageret) stoppede halvfuld med "spawner ikke … (30 s uden fremdrift)". Lageret deler samme vare i flere grupper (paller med forskellig fyldning), og moden talte kun den første gruppe — når en lille gruppe blev tom, så lageret ud til at vokse. Nu tælles alle grupper. Advarslen viser lager- og vogntal, hvis den alligevel opstår.
|
- **1.62.1** Rettet: udkørsel fra objektlager (fx Sell Egg fra Æglageret) stoppede halvfuld med "spawner ikke … (30 s uden fremdrift)". Lageret deler samme vare i flere grupper (paller med forskellig fyldning), og moden talte kun den første gruppe — når en lille gruppe blev tom, så lageret ud til at vokse. Nu tælles alle grupper. Advarslen viser lager- og vogntal, hvis den alligevel opstår.
|
||||||
- **1.62.0** **En kæde er noget du selv slår til:** tændte produktioner er ikke længere automatisk kæder (FS25 tænder nye produktioner som standard — 7 ensilagetårne gav 56 kæder og fik AIO-fabrikkens høproduktion tændt). Fanen **Kæder** har nederst *N tændte produktioner uden kæde* (foldet sammen); **[Kæde til]** gør en produktion til en kæde. En pauset kæde har **[Fjern]**. Ikke-valgte produktioner bruges stadig som kilde. Når en kæde fjernes, slettes dens tomme kædeflows (uden traktor), og mellemled kæden selv tændte slukkes igen. Rettet: kædens flowoversigt manglede traktorerne, så sammenlægning/oprydning kunne ramme et kædeflow med traktor. Udkørsel fra palleskur holder AutoDrive, mens moden tager paller ud.
|
- **1.62.0** **En kæde er noget du selv slår til:** tændte produktioner er ikke længere automatisk kæder (FS25 tænder nye produktioner som standard — 7 ensilagetårne gav 56 kæder og fik AIO-fabrikkens høproduktion tændt). Fanen **Kæder** har nederst *N tændte produktioner uden kæde* (foldet sammen); **[Kæde til]** gør en produktion til en kæde. En pauset kæde har **[Fjern]**. Ikke-valgte produktioner bruges stadig som kilde. Når en kæde fjernes, slettes dens tomme kædeflows (uden traktor), og mellemled kæden selv tændte slukkes igen. Rettet: kædens flowoversigt manglede traktorerne, så sammenlægning/oprydning kunne ramme et kædeflow med traktor. Udkørsel fra palleskur holder AutoDrive, mens moden tager paller ud.
|
||||||
|
|||||||
@@ -379,6 +379,10 @@ local function refillPlan(adEnv, fieldId, vehicle, role, x, z)
|
|||||||
if fillType == nil then return nil end
|
if fillType == nil then return nil end
|
||||||
local empty = ADCpBridge.getRefillLevel(vehicle, fillType) <= 0
|
local empty = ADCpBridge.getRefillLevel(vehicle, fillType) <= 0
|
||||||
local refillId = empty and ADFieldWork.findRefillMarker(adEnv, vehicle, fillType, x, z) or nil
|
local refillId = empty and ADFieldWork.findRefillMarker(adEnv, vehicle, fillType, x, z) or nil
|
||||||
|
if refillId ~= nil then
|
||||||
|
local marker = adEnv.ADGraphManager:getMapMarkerByWayPointId(refillId)
|
||||||
|
log(fieldId, "'%s' er tom: fyldes med %s ved %s", ADRuns.vehicleLabel(vehicle), fillTypeName(fillType), tostring(marker ~= nil and marker.name or refillId))
|
||||||
|
end
|
||||||
return {fillType = fillType, empty = empty, refillId = refillId}
|
return {fillType = fillType, empty = empty, refillId = refillId}
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -604,9 +608,64 @@ function ADFieldWork.buyingSupports(station, fillType)
|
|||||||
return ok and result == true
|
return ok and result == true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- AD-markøren ved stationen: AutoDrives eget opslag (30 m fra triggeren), ellers nærmeste ikke-Wait
|
-- Parkering, kobling og ventepladser er aldrig en læssemarkør.
|
||||||
-- markør inden for 40 m af bygningen ("Liquid Buy Station" står ved tanken, ikke ved triggeren).
|
local function isServiceMarker(marker)
|
||||||
|
local name = string.lower(tostring(marker.name or ""))
|
||||||
|
local group = string.lower(tostring(marker.group or ""))
|
||||||
|
return string.find(name, "^p ") ~= nil or string.find(name, "^connect ") ~= nil
|
||||||
|
or string.find(name, "%f[%a]wait%f[%A]") ~= nil or string.find(group, "%f[%a]wait%f[%A]") ~= nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- markers = {{id, name, group, x, z}}, points = triggerpositioner {{x, z}} -> id på nærmeste læssemarkør inden for
|
||||||
|
-- maxDistance m af en af triggerne, ellers nil.
|
||||||
|
function ADFieldWork.nearestStationMarker(markers, points, maxDistance)
|
||||||
|
local best, bestDistance = nil, maxDistance * maxDistance
|
||||||
|
for _, marker in ipairs(markers or {}) do
|
||||||
|
if not isServiceMarker(marker) then
|
||||||
|
for _, point in ipairs(points or {}) do
|
||||||
|
local d = (marker.x - point.x) ^ 2 + (marker.z - point.z) ^ 2
|
||||||
|
if d < bestDistance then best, bestDistance = marker.id, d end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return best
|
||||||
|
end
|
||||||
|
|
||||||
|
ADFieldWork.STATION_MARKER_M = 30
|
||||||
|
|
||||||
|
-- Stationens læssetriggere i verden (buying-/loading-station) -> {{x, z}}.
|
||||||
|
local function loadTriggerPoints(station)
|
||||||
|
local points = {}
|
||||||
|
for _, trigger in pairs(station.loadTriggers or {}) do
|
||||||
|
local node = trigger.triggerNode or trigger.aiNode
|
||||||
|
if node ~= nil then
|
||||||
|
local ok, x, _, z = pcall(getWorldTranslation, node)
|
||||||
|
if ok and x ~= nil then table.insert(points, {x = x, z = z}) end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return points
|
||||||
|
end
|
||||||
|
|
||||||
|
local function markerList(adEnv)
|
||||||
|
local list = {}
|
||||||
|
for _, marker in pairs(adEnv.ADGraphManager:getMapMarkers()) do
|
||||||
|
local wayPoint = adEnv.ADGraphManager:getWayPointById(marker.id)
|
||||||
|
if wayPoint ~= nil then
|
||||||
|
table.insert(list, {id = marker.id, name = marker.name, group = marker.group, x = wayPoint.x, z = wayPoint.z})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return list
|
||||||
|
end
|
||||||
|
|
||||||
|
-- AD-markøren ved stationen: først den nærmeste markør ved stationens EGNE læssetriggere (AutoDrives opslag vil have
|
||||||
|
-- markøren togets længde + 3..13 m forbi triggeren — et langt sæt fik så en anden stations markør: Puma + Kinze 4900
|
||||||
|
-- ventede på frø ved "Market Price Liquid Fill Station", in-game 30/9). Så AutoDrives opslag, ellers nærmeste
|
||||||
|
-- ikke-Wait markør inden for 40 m af bygningen ("Liquid Buy Station" står ved tanken, ikke ved triggeren).
|
||||||
local function markerAtStation(adEnv, vehicle, station, placeable)
|
local function markerAtStation(adEnv, vehicle, station, placeable)
|
||||||
|
local okOwn, ownId = pcall(function()
|
||||||
|
return ADFieldWork.nearestStationMarker(markerList(adEnv), loadTriggerPoints(station), ADFieldWork.STATION_MARKER_M)
|
||||||
|
end)
|
||||||
|
if okOwn and ownId ~= nil then return ownId end
|
||||||
local okAd, wayPointId = pcall(function() return adEnv.ADTriggerManager:getMarkerAtStation(station, vehicle, 30) end)
|
local okAd, wayPointId = pcall(function() return adEnv.ADTriggerManager:getMarkerAtStation(station, vehicle, 30) end)
|
||||||
if okAd and wayPointId ~= nil and wayPointId > 0 then return wayPointId end
|
if okAd and wayPointId ~= nil and wayPointId > 0 then return wayPointId end
|
||||||
local node = placeable ~= nil and placeable.rootNode or nil
|
local node = placeable ~= nil and placeable.rootNode or nil
|
||||||
|
|||||||
@@ -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.62.2.0</version>
|
<version>1.62.3.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
Reference in New Issue
Block a user