fix: løst stationsopslag (40 m, uanset retning) for stalde og fabrikker — mælketank ved siden af markøren genkendes (v1.12.21.0)
This commit is contained in:
@@ -168,6 +168,26 @@ function ADSmartPickup.getUnloadStationAtWayPointId(adEnv, wayPointId, farmId)
|
|||||||
return wayPoint ~= nil and getUnloadStationAtMarker(adEnv, wayPoint, farmId) or nil
|
return wayPoint ~= nil and getUnloadStationAtMarker(adEnv, wayPoint, farmId) or nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Løst opslag: nærmeste læssestation inden for maxDistance, uanset køreretning og "bag næsen".
|
||||||
|
-- Til stalde og fabrikker (mælketank ved siden af markøren); siloer skal bruge det strenge
|
||||||
|
-- opslag, ellers rammes nabosiloen i tætte rækker.
|
||||||
|
function ADSmartPickup.getLoadStationNearWayPointId(adEnv, wayPointId, farmId, maxDistance)
|
||||||
|
local wayPoint = adEnv.ADGraphManager:getWayPointById(wayPointId)
|
||||||
|
if wayPoint == nil then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
local best, bestDistance = nil, maxDistance or ADSmartPickup.MAX_MARKER_TO_TRIGGER_DISTANCE
|
||||||
|
for _, station in pairs(g_currentMission.storageSystem:getLoadingStations()) do
|
||||||
|
if g_currentMission.accessHandler:canFarmAccess(farmId, station) then
|
||||||
|
local closest = getDistancesToTriggers(station.loadTriggers, LOAD_TRIGGER_NODE_FIELDS, wayPoint, nil)
|
||||||
|
if closest < bestDistance then
|
||||||
|
best, bestDistance = station, closest
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return best
|
||||||
|
end
|
||||||
|
|
||||||
-- Siloens EGET indhold. Udvidelses-siloer (isExtension) deler lager med naboer
|
-- Siloens EGET indhold. Udvidelses-siloer (isExtension) deler lager med naboer
|
||||||
-- inden for storageRadius, så stationens niveau er en nabo-sum — eget lager er
|
-- inden for storageRadius, så stationens niveau er en nabo-sum — eget lager er
|
||||||
-- det tal spilleren ser på siloen og giver en præcis "mindst først"-rangering.
|
-- det tal spilleren ser på siloen og giver en præcis "mindst først"-rangering.
|
||||||
|
|||||||
@@ -141,6 +141,19 @@ function ADSources.identify(adEnv, wayPointId, farmId)
|
|||||||
if placeable ~= nil and placeable.getHusbandryFillLevel ~= nil then
|
if placeable ~= nil and placeable.getHusbandryFillLevel ~= nil then
|
||||||
return {kind = "husbandry", placeable = placeable, station = station, wayPointId = wayPointId, name = getPlaceableName(placeable, markerName)}
|
return {kind = "husbandry", placeable = placeable, station = station, wayPointId = wayPointId, name = getPlaceableName(placeable, markerName)}
|
||||||
end
|
end
|
||||||
|
-- Det strenge opslag (trigger bag næsen) passer til silorækker; en mælketank eller fabrik ligger
|
||||||
|
-- ofte ved siden af markøren. Løst opslag inden for 40 m — men aldrig for siloer.
|
||||||
|
if placeable == nil and ADSmartPickup.getLoadStationNearWayPointId ~= nil then
|
||||||
|
local loose = ADSmartPickup.getLoadStationNearWayPointId(adEnv, wayPointId, farmId, ADSources.MAX_DISTANCE)
|
||||||
|
local loosePlaceable = loose ~= nil and loose.owningPlaceable or nil
|
||||||
|
if loosePlaceable ~= nil and loosePlaceable.spec_silo == nil then
|
||||||
|
if getProductionPoint(loosePlaceable) ~= nil then
|
||||||
|
return {kind = "factory", placeable = loosePlaceable, station = loose, wayPointId = wayPointId, name = getPlaceableName(loosePlaceable, markerName)}
|
||||||
|
elseif loosePlaceable.getHusbandryFillLevel ~= nil then
|
||||||
|
return {kind = "husbandry", placeable = loosePlaceable, station = loose, wayPointId = wayPointId, name = getPlaceableName(loosePlaceable, markerName)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
-- Rene pallefabrikker (halmvarer, bageri ...) har ingen læssestation: find dem på afstand
|
-- Rene pallefabrikker (halmvarer, bageri ...) har ingen læssestation: find dem på afstand
|
||||||
-- til pallespawneren; dernæst objektlagre.
|
-- til pallespawneren; dernæst objektlagre.
|
||||||
local factory = findPlaceableNear(wayPoint, farmId, isProductionPoint)
|
local factory = findPlaceableNear(wayPoint, farmId, isProductionPoint)
|
||||||
@@ -164,6 +177,10 @@ function ADSources.explainMarker(adEnv, wayPointId, farmId)
|
|||||||
end
|
end
|
||||||
local station = ADSmartPickup.getLoadStationAtWayPointId(adEnv, wayPointId, farmId)
|
local station = ADSmartPickup.getLoadStationAtWayPointId(adEnv, wayPointId, farmId)
|
||||||
if station == nil then
|
if station == nil then
|
||||||
|
local loose = ADSmartPickup.getLoadStationNearWayPointId ~= nil and ADSmartPickup.getLoadStationNearWayPointId(adEnv, wayPointId, farmId, ADSources.MAX_DISTANCE) or nil
|
||||||
|
if loose ~= nil and loose.owningPlaceable ~= nil and loose.owningPlaceable.spec_silo ~= nil then
|
||||||
|
return string.format("nærmeste læssestation inden for 40 m er en silo ('%s'), som kræver at markøren står i køresporet med triggeren bag næsen", getPlaceableName(loose.owningPlaceable, "?"))
|
||||||
|
end
|
||||||
local factory = findPlaceableNear(wayPoint, farmId, isProductionPoint)
|
local factory = findPlaceableNear(wayPoint, farmId, isProductionPoint)
|
||||||
local storage = findPlaceableNear(wayPoint, farmId, isObjectStorage)
|
local storage = findPlaceableNear(wayPoint, farmId, isObjectStorage)
|
||||||
if factory == nil and storage == nil then
|
if factory == nil and storage == nil then
|
||||||
|
|||||||
@@ -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.20.0</version>
|
<version>1.12.21.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -1097,6 +1097,15 @@ check("W15 kører hjem", orphanTask.destinationID, 30)
|
|||||||
check("W15 AD's mål gendannet", orphan.ad.stateModule.secondMarkerId, 30)
|
check("W15 AD's mål gendannet", orphan.ad.stateModule.secondMarkerId, 30)
|
||||||
testVehicles = {}
|
testVehicles = {}
|
||||||
|
|
||||||
|
-- N1: løst opslag (stald/fabrik): nærmeste læssestation inden for maxDistance, uanset retning og "bag næsen"
|
||||||
|
-- (in-game 23/9: mælketankens trigger lå ved siden af markøren, 20+ m væk -> "ingen læssestation")
|
||||||
|
resetWorld()
|
||||||
|
addMarker(1, "cow 1 milk", "Milk", 0, 0, -30, 0) -- kører mod +x; tanken ligger 25 m til siden
|
||||||
|
table.insert(stations, makeStation(101, 0, 25, {[WHEAT] = 1}))
|
||||||
|
check("N1 strengt opslag finder intet", ADSmartPickup.getLoadStationAtWayPointId(FS25_AutoDrive, 1, 1), nil)
|
||||||
|
check("N1 løst opslag finder tanken", ADSmartPickup.getLoadStationNearWayPointId(FS25_AutoDrive, 1, 1, 40), stations[1])
|
||||||
|
check("N1 uden for afstanden -> nil", ADSmartPickup.getLoadStationNearWayPointId(FS25_AutoDrive, 1, 1, 20), nil)
|
||||||
|
|
||||||
-- X: udkørsel koblet på getNextPickup-wrap'en og Wait-logikken
|
-- X: udkørsel koblet på getNextPickup-wrap'en og Wait-logikken
|
||||||
resetWorld()
|
resetWorld()
|
||||||
addMarker(1, "Suger Load", "Pickup points", 0, 0); table.insert(stations, makeStation(101, 0, 15, {[WHEAT] = 1000}))
|
addMarker(1, "Suger Load", "Pickup points", 0, 0); table.insert(stations, makeStation(101, 0, 15, {[WHEAT] = 1000}))
|
||||||
|
|||||||
@@ -347,5 +347,17 @@ 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"})
|
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)")
|
check("S15 station uden placeable", ADSources.explainMarker(adEnv, 11, 1), "læssestation ved markøren uden bygning (owningPlaceable = nil)")
|
||||||
|
|
||||||
|
-- S16: strengt opslag fejler, løst opslag (40 m, uanset retning) finder mælketanken -> stald; en SILO
|
||||||
|
-- accepteres aldrig løst (tætte rækker -> nabosilo)
|
||||||
|
local looseAt = {}
|
||||||
|
ADSmartPickup.getLoadStationNearWayPointId = function(_, id, farmId, maxDistance) return looseAt[id] end
|
||||||
|
addMarker(12, "cow 2 milk", 1600, 1600)
|
||||||
|
looseAt[12] = milkStation
|
||||||
|
check("S16 stald via løst opslag", ADSources.identify(adEnv, 12, 1).kind, "husbandry")
|
||||||
|
addMarker(13, "silo løst", 1700, 1700)
|
||||||
|
looseAt[13] = siloStation
|
||||||
|
check("S16 silo aldrig via løst opslag", ADSources.identify(adEnv, 13, 1), nil)
|
||||||
|
check("S16 forklaring nævner den løse station", ADSources.explainMarker(adEnv, 13, 1):find("silo", 1, true) ~= nil, true)
|
||||||
|
|
||||||
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