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>
|
||||
|
||||
@@ -442,6 +442,20 @@ ADRunsController.startRun(adEnv, sugar.id)
|
||||
check("C18 rigtig last -> målet", sugarVehicle.ad.stateModule.secondMarkerId, 77)
|
||||
ADUnloadWait = nil; ADLoadSwap = nil
|
||||
|
||||
-- C19: Wait-markører er aldrig mål — heller ikke når de står inden for 40 m af staldens trigger
|
||||
buildWorld()
|
||||
-- staldens station med bygning; Wait-markøren ligger i triggerens rækkevidde og "mangler mere" end 94
|
||||
local barnPlaceable = {getHusbandryFillLevel = function() return 0 end}
|
||||
unloadAt[94].owningPlaceable = barnPlaceable
|
||||
addMarker(400, "Cow Wait", "Cow Wait", 5005, 0); unloadAt[400] = {accepts = {[STRAW] = 300000, [TMR] = 300000}, levels = {}, owningPlaceable = barnPlaceable}
|
||||
local targetNames = {}
|
||||
for _, marker in ipairs(ADRunsController.getTargetMarkers(adEnv, 1)) do table.insert(targetNames, marker.name) end
|
||||
check("C19 Wait-markør ikke i mål-listen", table.concat(targetNames, ","):find("Cow Wait", 1, true), nil)
|
||||
local waitTargetRun = ADRunsController.createRun("Wait som mål")
|
||||
ADRunsController.updateRun(waitTargetRun.id, {targetWayPointIds = {94, 400}})
|
||||
local waitVehicle = makeVehicle("vehicleW", "W", {STRAW, TMR}, 20000, 5000, 0)
|
||||
check("C19 chooseTarget springer Wait over", ADRunsController.chooseTarget(adEnv, ADRuns.getRun(ADRunsController.store, waitTargetRun.id), waitVehicle), 94)
|
||||
|
||||
-- C-out: udkørsels-runs — oprettelse, kilder, produkter, validering, start, status
|
||||
local BASKET = 7
|
||||
FILL_TYPE_NAMES[BASKET] = "STRAW_BASKET"; FILL_TYPE_INDEX["STRAW_BASKET"] = BASKET
|
||||
|
||||
@@ -340,5 +340,12 @@ check("S14 bulk", products14[1].isPallet, false)
|
||||
check("S14 isPalletAt stald = bulk", ADSources.isPalletAt(source14, MILK), false)
|
||||
check("S14 kilde-markør i listen", ADRunsController ~= nil and true or true, true)
|
||||
|
||||
-- S15: forklaring af en markør til advarslen (hvad opslaget ser)
|
||||
check("S15 forklaring stald", ADSources.explainMarker(adEnv, 10, 1), "læssestation ved markøren hører til 'Kostald' (stald)")
|
||||
check("S15 forklaring ingen station", ADSources.explainMarker(adEnv, 4, 1), "ingen læssestation ved markøren, og ingen fabrik/objektlager inden for 40 m")
|
||||
loadAt[11] = {owningPlaceable = nil}
|
||||
wayPoints[11] = {id = 11, x = 2000, z = 2000}; table.insert(markers, {id = 11, markerIndex = #markers + 1, name = "løs", group = "g"})
|
||||
check("S15 station uden placeable", ADSources.explainMarker(adEnv, 11, 1), "læssestation ved markøren uden bygning (owningPlaceable = nil)")
|
||||
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user