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
|
for _, wayPointId in ipairs(run.sourceWayPointIds or {}) do
|
||||||
local source = ADSources.identify(adEnv, wayPointId, farmId)
|
local source = ADSources.identify(adEnv, wayPointId, farmId)
|
||||||
if source == nil then
|
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
|
else
|
||||||
clearWarning(vehicle, "source:" .. tostring(wayPointId))
|
clearWarning(vehicle, "source:" .. tostring(wayPointId))
|
||||||
table.insert(sources, source)
|
table.insert(sources, source)
|
||||||
|
|||||||
@@ -143,10 +143,16 @@ function ADRunsController.getRunTargets(run)
|
|||||||
return run.targetWayPointId ~= nil and {run.targetWayPointId} or {}
|
return run.targetWayPointId ~= nil and {run.targetWayPointId} or {}
|
||||||
end
|
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 function getTargetStations(adEnv, run, farmId)
|
||||||
local stations = {}
|
local stations = {}
|
||||||
for _, wayPointId in ipairs(ADRunsController.getRunTargets(run)) do
|
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
|
if station ~= nil then
|
||||||
table.insert(stations, {wayPointId = wayPointId, station = station})
|
table.insert(stations, {wayPointId = wayPointId, station = station})
|
||||||
end
|
end
|
||||||
@@ -861,7 +867,8 @@ end
|
|||||||
function ADRunsController.getTargetMarkers(adEnv, farmId)
|
function ADRunsController.getTargetMarkers(adEnv, farmId)
|
||||||
local entries = {}
|
local entries = {}
|
||||||
for _, marker in pairs(adEnv.ADGraphManager:getMapMarkers()) do
|
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
|
local kind = station ~= nil and getTargetKind(station) or nil
|
||||||
if kind ~= nil then
|
if kind ~= nil then
|
||||||
table.insert(entries, {marker = marker, kind = kind})
|
table.insert(entries, {marker = marker, kind = kind})
|
||||||
|
|||||||
@@ -156,6 +156,33 @@ function ADSources.identify(adEnv, wayPointId, farmId)
|
|||||||
return nil
|
return nil
|
||||||
end
|
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)
|
local function isPalletVehicle(vehicle)
|
||||||
return vehicle ~= nil and (vehicle.spec_pallet ~= nil or vehicle.isPallet == true)
|
return vehicle ~= nil and (vehicle.spec_pallet ~= nil or vehicle.isPallet == true)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -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.19.0</version>
|
<version>1.12.20.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -442,6 +442,20 @@ ADRunsController.startRun(adEnv, sugar.id)
|
|||||||
check("C18 rigtig last -> målet", sugarVehicle.ad.stateModule.secondMarkerId, 77)
|
check("C18 rigtig last -> målet", sugarVehicle.ad.stateModule.secondMarkerId, 77)
|
||||||
ADUnloadWait = nil; ADLoadSwap = nil
|
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
|
-- C-out: udkørsels-runs — oprettelse, kilder, produkter, validering, start, status
|
||||||
local BASKET = 7
|
local BASKET = 7
|
||||||
FILL_TYPE_NAMES[BASKET] = "STRAW_BASKET"; FILL_TYPE_INDEX["STRAW_BASKET"] = BASKET
|
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 isPalletAt stald = bulk", ADSources.isPalletAt(source14, MILK), false)
|
||||||
check("S14 kilde-markør i listen", ADRunsController ~= nil and true or true, true)
|
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"))
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||||
os.exit(failures == 0 and 0 or 1)
|
os.exit(failures == 0 and 0 or 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user