fix: Wait-markører aldrig mål i forsynings-runs; kilde-advarsel forklarer hvad opslaget ser ved markøren (v1.12.20.0)
This commit is contained in:
@@ -191,7 +191,8 @@ function ADOutbound.buildPlanInput(adEnv, run, vehicle)
|
||||
for _, wayPointId in ipairs(run.sourceWayPointIds or {}) do
|
||||
local source = ADSources.identify(adEnv, wayPointId, farmId)
|
||||
if source == nil then
|
||||
warnOnce(adEnv, vehicle, "source:" .. tostring(wayPointId), string.format("run '%s': kilde-markør %s er ikke en fabrik, silo eller objektlager (inden for 40 m)", tostring(run.name), tostring(wayPointId)))
|
||||
local explanation = ADSources.explainMarker ~= nil and ADSources.explainMarker(adEnv, wayPointId, farmId) or "?"
|
||||
warnOnce(adEnv, vehicle, "source:" .. tostring(wayPointId), string.format("run '%s': kilde-markør %s er ikke en fabrik, silo, stald eller objektlager — %s", tostring(run.name), tostring(wayPointId), explanation))
|
||||
else
|
||||
clearWarning(vehicle, "source:" .. tostring(wayPointId))
|
||||
table.insert(sources, source)
|
||||
|
||||
@@ -143,10 +143,16 @@ function ADRunsController.getRunTargets(run)
|
||||
return run.targetWayPointId ~= nil and {run.targetWayPointId} or {}
|
||||
end
|
||||
|
||||
local function isWaitWayPoint(adEnv, wayPointId)
|
||||
local marker = adEnv.ADGraphManager.getMapMarkerByWayPointId ~= nil and adEnv.ADGraphManager:getMapMarkerByWayPointId(wayPointId) or nil
|
||||
return marker ~= nil and ADSupplyPlanner ~= nil and ADSupplyPlanner.isWaitMarker ~= nil and ADSupplyPlanner.isWaitMarker(marker)
|
||||
end
|
||||
|
||||
-- Wait-markører er ventepladser og aldrig mål, selv om de ligger inden for staldens trigger-rækkevidde.
|
||||
local function getTargetStations(adEnv, run, farmId)
|
||||
local stations = {}
|
||||
for _, wayPointId in ipairs(ADRunsController.getRunTargets(run)) do
|
||||
local station = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, wayPointId, farmId)
|
||||
local station = not isWaitWayPoint(adEnv, wayPointId) and ADSmartPickup.getUnloadStationAtWayPointId(adEnv, wayPointId, farmId) or nil
|
||||
if station ~= nil then
|
||||
table.insert(stations, {wayPointId = wayPointId, station = station})
|
||||
end
|
||||
@@ -861,7 +867,8 @@ end
|
||||
function ADRunsController.getTargetMarkers(adEnv, farmId)
|
||||
local entries = {}
|
||||
for _, marker in pairs(adEnv.ADGraphManager:getMapMarkers()) do
|
||||
local station = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, marker.id, farmId)
|
||||
local isWait = ADSupplyPlanner ~= nil and ADSupplyPlanner.isWaitMarker ~= nil and ADSupplyPlanner.isWaitMarker(marker)
|
||||
local station = not isWait and ADSmartPickup.getUnloadStationAtWayPointId(adEnv, marker.id, farmId) or nil
|
||||
local kind = station ~= nil and getTargetKind(station) or nil
|
||||
if kind ~= nil then
|
||||
table.insert(entries, {marker = marker, kind = kind})
|
||||
|
||||
@@ -156,6 +156,33 @@ function ADSources.identify(adEnv, wayPointId, farmId)
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Til advarslen "kilde-markør X er ikke …": hvad opslaget faktisk ser ved markøren.
|
||||
function ADSources.explainMarker(adEnv, wayPointId, farmId)
|
||||
local wayPoint = adEnv.ADGraphManager:getWayPointById(wayPointId)
|
||||
if wayPoint == nil then
|
||||
return "markøren har intet waypoint (slettet?)"
|
||||
end
|
||||
local station = ADSmartPickup.getLoadStationAtWayPointId(adEnv, wayPointId, farmId)
|
||||
if station == nil then
|
||||
local factory = findPlaceableNear(wayPoint, farmId, isProductionPoint)
|
||||
local storage = findPlaceableNear(wayPoint, farmId, isObjectStorage)
|
||||
if factory == nil and storage == nil then
|
||||
return "ingen læssestation ved markøren, og ingen fabrik/objektlager inden for 40 m"
|
||||
end
|
||||
return string.format("ingen læssestation ved markøren; nærmeste bygning: %s", getPlaceableName(factory or storage, "?"))
|
||||
end
|
||||
local placeable = station.owningPlaceable
|
||||
if placeable == nil then
|
||||
return "læssestation ved markøren uden bygning (owningPlaceable = nil)"
|
||||
end
|
||||
local kind = "ukendt bygningstype"
|
||||
if getProductionPoint(placeable) ~= nil then kind = "fabrik"
|
||||
elseif placeable.spec_silo ~= nil then kind = "silo"
|
||||
elseif placeable.getHusbandryFillLevel ~= nil then kind = "stald"
|
||||
elseif placeable.spec_objectStorage ~= nil then kind = "objektlager" end
|
||||
return string.format("læssestation ved markøren hører til '%s' (%s)", getPlaceableName(placeable, "?"), kind)
|
||||
end
|
||||
|
||||
local function isPalletVehicle(vehicle)
|
||||
return vehicle ~= nil and (vehicle.spec_pallet ~= nil or vehicle.isPallet == true)
|
||||
end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.12.19.0</version>
|
||||
<version>1.12.20.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
Reference in New Issue
Block a user