feat: advarsel når et lagermål har en nabo-aflæsningsmarkør inden for AD's 'Max trigger distance' (v1.12.13.0)
This commit is contained in:
@@ -339,6 +339,36 @@ local function applyTrip(adEnv, vehicle, run, trip, sourcesById)
|
|||||||
Logging.info(ADOutbound.LOG_PREFIX .. "'%s' udkørsel: %s fra %s → %s (%s)", tostring(vehicle:getName()), table.concat(names, "+"), table.concat(sourceNames, ", "), tostring(trip.targetName), why)
|
Logging.info(ADOutbound.LOG_PREFIX .. "'%s' udkørsel: %s fra %s → %s (%s)", tostring(vehicle:getName()), table.concat(names, "+"), table.concat(sourceNames, ", "), tostring(trip.targetName), why)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Lagermål i en tæt silorække: AutoDrive tipper ved den FØRSTE aflæsningstrigger inden for sin
|
||||||
|
-- globale "Max trigger distance" (standard 25 m) — nabosiloen kan så få læsset. Kan ikke sættes pr.
|
||||||
|
-- køretøj, så der advares én gang pr. mål, og brugeren sætter AD-indstillingen til 10 m.
|
||||||
|
local warnedTriggerDistance = {}
|
||||||
|
local function warnDenseSilosOnce(adEnv, vehicle, trip)
|
||||||
|
if trip.kind ~= "store" or adEnv.AutoDrive.getSetting == nil or warnedTriggerDistance[trip.targetWayPointId] then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local ok, distance = pcall(adEnv.AutoDrive.getSetting, "maxTriggerDistance")
|
||||||
|
if not ok or type(distance) ~= "number" or distance <= 10 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local target = adEnv.ADGraphManager:getWayPointById(trip.targetWayPointId)
|
||||||
|
if target == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local farmId = ADSmartPickup.getFarmId(vehicle)
|
||||||
|
for _, marker in pairs(adEnv.ADGraphManager:getMapMarkers()) do
|
||||||
|
if marker.id ~= trip.targetWayPointId then
|
||||||
|
local wayPoint = adEnv.ADGraphManager:getWayPointById(marker.id)
|
||||||
|
local dx, dz = wayPoint ~= nil and (wayPoint.x - target.x) or math.huge, wayPoint ~= nil and (wayPoint.z - target.z) or math.huge
|
||||||
|
if dx * dx + dz * dz <= distance * distance and ADSmartPickup.getUnloadStationAtWayPointId(adEnv, marker.id, farmId) ~= nil then
|
||||||
|
warnedTriggerDistance[trip.targetWayPointId] = true
|
||||||
|
Logging.warning(ADOutbound.LOG_PREFIX .. "'%s': målet %s har en anden aflæsningsmarkør (%s) inden for AutoDrives 'Max trigger distance' (%d m) — AutoDrive kan tippe ved nabosiloen; sæt AD-indstillingen til 10 m", tostring(vehicle:getName()), tostring(trip.targetName), tostring(marker.name), distance)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function releaseHold(vehicle)
|
local function releaseHold(vehicle)
|
||||||
if holds[vehicle] ~= nil then
|
if holds[vehicle] ~= nil then
|
||||||
ADWaitPool.releaseVehicle(vehicle)
|
ADWaitPool.releaseVehicle(vehicle)
|
||||||
@@ -397,6 +427,7 @@ function ADOutbound.choosePickup(adEnv, vehicle)
|
|||||||
releaseHold(vehicle)
|
releaseHold(vehicle)
|
||||||
runStatus.warning = nil
|
runStatus.warning = nil
|
||||||
applyTrip(adEnv, vehicle, run, trip, sourcesById)
|
applyTrip(adEnv, vehicle, run, trip, sourcesById)
|
||||||
|
pcall(warnDenseSilosOnce, adEnv, vehicle, trip)
|
||||||
-- Prisgrundlaget logges, så det kan holdes op mod spillets Priser-menu (I5 i review).
|
-- Prisgrundlaget logges, så det kan holdes op mod spillets Priser-menu (I5 i review).
|
||||||
if trip.kind == "sell" then
|
if trip.kind == "sell" then
|
||||||
for _, product in ipairs(input.products) do
|
for _, product in ipairs(input.products) do
|
||||||
|
|||||||
@@ -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.12.12.0</version>
|
<version>1.12.13.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -197,6 +197,11 @@ rører ikke reserven (varen bliver på gården).
|
|||||||
**Paller til lager (v1.12.1):** Lager-mål for pallevarer = nærmeste objektlager (palleskur) der tager
|
**Paller til lager (v1.12.1):** Lager-mål for pallevarer = nærmeste objektlager (palleskur) der tager
|
||||||
varen og har plads; AutoDrive læsser UAL-vognen af dér.
|
varen og har plads; AutoDrive læsser UAL-vognen af dér.
|
||||||
|
|
||||||
|
**Tætte siloer (AutoDrive-indstilling):** AutoDrive tipper ved den første aflæsningstrigger inden for sin
|
||||||
|
globale "Max trigger distance" (standard 25 m). Står siloerne tættere end det, kan nabosiloen få læsset —
|
||||||
|
sæt AD-indstillingen til **10 m**. Moden advarer i loggen første gang et lagermål har en anden
|
||||||
|
aflæsningsmarkør inden for afstanden.
|
||||||
|
|
||||||
**Fanen Lagre (v1.12.1):** gårdens beholdning pr. bygning (fabrikker med ▸ ved outputs, stalde,
|
**Fanen Lagre (v1.12.1):** gårdens beholdning pr. bygning (fabrikker med ▸ ved outputs, stalde,
|
||||||
palleskure som antal paller, siloer), opdateret hvert sekund.
|
palleskure som antal paller, siloer), opdateret hvert sekund.
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,8 @@ ADLoadSwap = {findDumpMarker = function() return dumpMarker, "ingen silo" end}
|
|||||||
local runs = {}
|
local runs = {}
|
||||||
ADRunsController = {getRunForVehicle = function(vehicle) return runs[vehicle] end}
|
ADRunsController = {getRunForVehicle = function(vehicle) return runs[vehicle] end}
|
||||||
local activePickupCalls = {}
|
local activePickupCalls = {}
|
||||||
ADSmartPickup = {getFarmId = function(v) return v.farmId end, setActivePickup = function(vehicle, choice) table.insert(activePickupCalls, choice) end}
|
ADSmartPickup = {getFarmId = function(v) return v.farmId end, setActivePickup = function(vehicle, choice) table.insert(activePickupCalls, choice) end,
|
||||||
|
getUnloadStationAtWayPointId = function(_, id) for _, m in ipairs(markers) do if m.id == id and (m.group == "silo" or m.group == "selling") then return {name = m.name} end end end}
|
||||||
|
|
||||||
local mSugar = addMarker(1, "Suger Load", "Pickup points", 0, 0)
|
local mSugar = addMarker(1, "Suger Load", "Pickup points", 0, 0)
|
||||||
local mSilo = addMarker(2, "silo 4", "silo", 50, 0)
|
local mSilo = addMarker(2, "silo 4", "silo", 50, 0)
|
||||||
@@ -468,6 +469,30 @@ v21b.rootNode = {x = 195, z = 0}
|
|||||||
ADOutbound.beforeUnloadUpdate(adEnv, {vehicle = v21b, destinationID = 10, trailers = v21b.trailers}, 16)
|
ADOutbound.beforeUnloadUpdate(adEnv, {vehicle = v21b, destinationID = 10, trailers = v21b.trailers}, 16)
|
||||||
check("O21 tipvogn: ingen stropper", v21b.trailers[1].beltsActive, nil)
|
check("O21 tipvogn: ingen stropper", v21b.trailers[1].beltsActive, nil)
|
||||||
|
|
||||||
|
-- O22: lagermål med en anden silo-markør inden for AD's globale trigger-afstand -> advarsel én gang
|
||||||
|
-- (AD tipper ved første trigger inden for afstanden; 10 m løser det når siloer står tæt)
|
||||||
|
local triggerDistance = 25
|
||||||
|
adEnv.AutoDrive.getSetting = function(name) if name == "maxTriggerDistance" then return triggerDistance end end
|
||||||
|
local v22 = newVehicle("Tip2", 0, 0, 20000)
|
||||||
|
runs[v22] = outboundRun(24, {1}, {{fillType = "SUGAR", policy = "store"}})
|
||||||
|
products[1] = {{fillType = SUGAR, name = "SUGAR", available = 170000, level = 170000, capacity = 180000, isPallet = false}}
|
||||||
|
dumpMarker = mStore -- silo 6 (x=60); silo 4 (x=50) står 10 m derfra
|
||||||
|
logLines = {}
|
||||||
|
ADOutbound.choosePickup(adEnv, v22)
|
||||||
|
check("O22 lager-tur", ADOutbound.getTripFor(v22) ~= nil and ADOutbound.getTripFor(v22).kind, "store")
|
||||||
|
check("O22 advarsel om trigger-afstand", lastLog("Max trigger distance") ~= nil, true)
|
||||||
|
logLines = {}
|
||||||
|
ADOutbound.choosePickup(adEnv, v22)
|
||||||
|
check("O22 kun én gang", lastLog("Max trigger distance"), nil)
|
||||||
|
triggerDistance = 10
|
||||||
|
local v22b = newVehicle("Tip3", 0, 0, 20000)
|
||||||
|
runs[v22b] = outboundRun(25, {1}, {{fillType = "SUGAR", policy = "store"}})
|
||||||
|
logLines = {}
|
||||||
|
ADOutbound.choosePickup(adEnv, v22b)
|
||||||
|
check("O22 ved 10 m ingen advarsel", lastLog("Max trigger distance"), nil)
|
||||||
|
adEnv.AutoDrive.getSetting = nil
|
||||||
|
products[1] = {{fillType = SUGAR, name = "SUGAR", available = 5000, level = 5000, capacity = 180000, isPallet = false}}
|
||||||
|
|
||||||
-- O10: install wrapper: fejl i hook stopper ikke AD
|
-- O10: install wrapper: fejl i hook stopper ikke AD
|
||||||
local calls = {}
|
local calls = {}
|
||||||
adEnv.LoadAtDestinationTask.update = function(self, dt) calls.update = (calls.update or 0) + 1 end
|
adEnv.LoadAtDestinationTask.update = function(self, dt) calls.update = (calls.update or 0) + 1 end
|
||||||
|
|||||||
Reference in New Issue
Block a user