fix: Wait-pulje = mapper med 'Wait' i navnet, ikke markørnavne (v1.7.1.0)

Savegame viste eksisterende mark-ventepladser 'F91 Wait', 'F108 Wait' m.fl. i
mark-mapperne — de ville være røget i puljen med navne-reglen. Brugerens nye
punkter ligger i mappen 'Cow Wait' (6 markører med samme navn) -> mappen afgør.
Log viser markørnummer, da navne kan være ens.
This commit is contained in:
2026-09-22 21:28:00 +02:00
parent 39fccefa40
commit a4a761fabc
6 changed files with 25 additions and 22 deletions
+6 -7
View File
@@ -122,14 +122,13 @@ function ADSupplyPlanner.fullLoadFits(freeSpace, loadCapacity)
return freeSpace >= loadCapacity return freeSpace >= loadCapacity
end end
-- Wait-punkter: markører med ordet "Wait" i navnet (uanset store/små) eller i mappen "Wait". -- Wait-punkter: alle markører i en MAPPE med ordet "Wait" i navnet (uanset store/små),
-- Her venter en traktor med rest-læs, til der igen er plads i målet. -- fx mappen "Cow Wait". Her venter en traktor med rest-læs, til der igen er plads i
-- målet. Markørens eget navn tæller ikke — spillerens mark-ventepladser ("F91 Wait")
-- ligger i mark-mapperne og hører ikke til puljen.
function ADSupplyPlanner.isWaitMarker(marker) function ADSupplyPlanner.isWaitMarker(marker)
if marker.group == "Wait" then local group = string.lower(tostring(marker.group or ""))
return true return string.find(group, "%f[%a]wait%f[%A]") ~= nil
end
local name = string.lower(tostring(marker.name or ""))
return string.find(name, "%f[%a]wait%f[%A]") ~= nil
end end
-- candidates: {{marker, x, z}}; claims: {[marker.id] = køretøj}. Nærmeste punkt der er -- candidates: {{marker, x, z}}; claims: {[marker.id] = køretøj}. Nærmeste punkt der er
+3 -3
View File
@@ -2,7 +2,7 @@
-- Holder en traktor med rest-læs ved en fuld stald AutoDrive i dag stille ved -- Holder en traktor med rest-læs ved en fuld stald AutoDrive i dag stille ved
-- aflæsningspunktet "til den er tømt på en eller anden måde" — og spærrer for -- aflæsningspunktet "til den er tømt på en eller anden måde" — og spærrer for
-- de næste i køen. Her omdirigeres den i stedet til nærmeste ledige Wait-punkt -- de næste i køen. Her omdirigeres den i stedet til nærmeste ledige Wait-punkt
-- (markør med ordet "Wait" i navnet eller i mappen "Wait"), og når målet igen -- (markør i en mappe med ordet "Wait" i navnet, fx "Cow Wait"), og når målet igen
-- har plads til HELE resten, sendes den tilbage og læsser af. -- har plads til HELE resten, sendes den tilbage og læsser af.
-- --
-- Kun den aktuelle aflæsningsopgaves destination ændres; AutoDrives mål, -- Kun den aktuelle aflæsningsopgaves destination ændres; AutoDrives mål,
@@ -94,7 +94,7 @@ local function startWaiting(adEnv, task)
if candidate == nil then if candidate == nil then
if not warnedNoWaitPoint[vehicle] then if not warnedNoWaitPoint[vehicle] then
warnedNoWaitPoint[vehicle] = true warnedNoWaitPoint[vehicle] = true
Logging.warning(ADUnloadWait.LOG_PREFIX .. "'%s' har %.0f l rest, og målet er fuldt — intet ledigt Wait-punkt (markør med 'Wait' i navnet), så AutoDrive venter ved målet", tostring(vehicle:getName()), rest) Logging.warning(ADUnloadWait.LOG_PREFIX .. "'%s' har %.0f l rest, og målet er fuldt — intet ledigt Wait-punkt (markør i en mappe med 'Wait' i navnet), så AutoDrive venter ved målet", tostring(vehicle:getName()), rest)
end end
return return
end end
@@ -103,7 +103,7 @@ local function startWaiting(adEnv, task)
waits[vehicle] = {task = task, homeDestinationID = task.destinationID, waitMarker = candidate.marker, fillType = fillType, rest = rest} waits[vehicle] = {task = task, homeDestinationID = task.destinationID, waitMarker = candidate.marker, fillType = fillType, rest = rest}
redirect(task, candidate.marker.id) redirect(task, candidate.marker.id)
local fillTypeName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType) local fillTypeName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType)
Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' venter ved %s: %.0f l %s rest, målet har kun %.0f l fri", tostring(vehicle:getName()), tostring(candidate.marker.name), rest, tostring(fillTypeName), free) Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' venter ved %s (markør %s): %.0f l %s rest, målet har kun %.0f l fri", tostring(vehicle:getName()), tostring(candidate.marker.name), tostring(candidate.marker.markerIndex or candidate.marker.id), rest, tostring(fillTypeName), free)
end end
-- Ventende køretøj: er der nu plads til hele resten, køres tilbage til målet. -- Ventende køretøj: er der nu plads til hele resten, køres tilbage til målet.
+2 -2
View File
@@ -1,12 +1,12 @@
<?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.7.0.0</version> <version>1.7.1.0</version>
<title> <title>
<en>AD Smart Pickup</en> <en>AD Smart Pickup</en>
</title> </title>
<description> <description>
<en><![CDATA[AutoDrive-tillæg: når pålæsningsmål roteres i en mappe, køres der direkte til den silo i mappen, der har den valgte vare (mindst fyldte først), i stedet for at prøve markørerne én efter én. Vælges FLERE varer i AutoDrive, ses de som ingredienser til aflæsningsmålet (fx en TMR-blander): én traktor henter pr. tur den vare målet mangler mest, fra en silo hvor som helst på kortet. Er målet en fabrik, følger listen automatisk fabrikkens tændte produktioner (tid-til-tom først). Rest-læs ved fuldt mål venter ved nærmeste ledige "Wait"-markør til der er plads. Kræver FS25_AutoDrive med "Brug mapper" + "Rotér mål: pålæsning".]]></en> <en><![CDATA[AutoDrive-tillæg: når pålæsningsmål roteres i en mappe, køres der direkte til den silo i mappen, der har den valgte vare (mindst fyldte først), i stedet for at prøve markørerne én efter én. Vælges FLERE varer i AutoDrive, ses de som ingredienser til aflæsningsmålet (fx en TMR-blander): én traktor henter pr. tur den vare målet mangler mest, fra en silo hvor som helst på kortet. Er målet en fabrik, følger listen automatisk fabrikkens tændte produktioner (tid-til-tom først). Rest-læs ved fuldt mål venter ved nærmeste ledige markør i en "Wait"-mappe til der er plads. Kræver FS25_AutoDrive med "Brug mapper" + "Rotér mål: pålæsning".]]></en>
</description> </description>
<iconFilename>icon.dds</iconFilename> <iconFilename>icon.dds</iconFilename>
<multiplayer supported="true"/> <multiplayer supported="true"/>
+4 -2
View File
@@ -54,8 +54,9 @@ stald rangeres korrekt, selv om staldens aflæsningsstation kun "kender" foder.
AutoDrive holder ellers en traktor med rest-læs stille ved aflæsningspunktet, til den er tømt — og AutoDrive holder ellers en traktor med rest-læs stille ved aflæsningspunktet, til den er tømt — og
spærrer for de næste i køen. Med Wait-punkter: spærrer for de næste i køen. Med Wait-punkter:
1. Sæt markører med ordet **`Wait`** i navnet (fx `Wait 1`, `Cow Wait 2`) eller i en mappe kaldet 1. Læg markører i en **mappe med ordet `Wait` i navnet** (fx mappen `Cow Wait`) — så mange du har
`Wait` — så mange du har plads til; de er en fælles pulje for alle traktorer. plads til; de er en fælles pulje for alle traktorer. Markørernes egne navne er ligegyldige, så
dine mark-ventepladser ("F91 Wait" i mark-mapperne) rører den ikke.
2. Kan målet ikke tage mere af vognens vare, kører traktoren til det **nærmeste ledige** Wait-punkt 2. Kan målet ikke tage mere af vognens vare, kører traktoren til det **nærmeste ledige** Wait-punkt
(modden holder styr på reservationer) og venter dér. (modden holder styr på reservationer) og venter dér.
3. Når målet igen har plads til **hele** resten, kører den tilbage og læsser af. Derefter normal tur. 3. Når målet igen har plads til **hele** resten, kører den tilbage og læsser af. Derefter normal tur.
@@ -63,6 +64,7 @@ spærrer for de næste i køen. Med Wait-punkter:
Kun den aktuelle aflæsningsopgaves destination ændres — mål, rotation og loop-tæller røres ikke. Kun den aktuelle aflæsningsopgaves destination ændres — mål, rotation og loop-tæller røres ikke.
Ventende traktorer ser rotationen som slået fra, så AutoDrive ikke kører videre fra Wait-punktet. Ventende traktorer ser rotationen som slået fra, så AutoDrive ikke kører videre fra Wait-punktet.
Ingen ledige Wait-punkter → AutoDrive venter ved målet som i dag (én advarsel i loggen). Ingen ledige Wait-punkter → AutoDrive venter ved målet som i dag (én advarsel i loggen).
Seks markører må gerne hedde det samme (fx `Cow Wait`); loggen viser markørnummeret.
**Læs der passer, foretrækkes (v1.7):** ved valg af næste tur går varer, hvor et fuldt læs kan komme af **Læs der passer, foretrækkes (v1.7):** ved valg af næste tur går varer, hvor et fuldt læs kan komme af
i målet, forud; passer intet fuldt læs, tages den mest trængende alligevel (og Wait-punktet bruges). i målet, forud; passer intet fuldt læs, tages den mest trængende alligevel (og Wait-punktet bruges).
+2 -2
View File
@@ -441,8 +441,8 @@ local function buildWaitWorld()
} }
unloadStations[1].targetStorages = nil unloadStations[1].targetStorages = nil
unloadStations[1].owningPlaceable = barn2 unloadStations[1].owningPlaceable = barn2
addMarker(40, "Wait 1", "Cow Food", 5100, 0) addMarker(40, "Wait 1", "Cow Wait", 5100, 0)
addMarker(41, "Wait 2", "Cow Food", 5300, 0) addMarker(41, "Wait 2", "Cow Wait", 5300, 0)
end end
-- traktor der holder ved stalden (markør 30) med rest-læs halm på vognen -- traktor der holder ved stalden (markør 30) med rest-læs halm på vognen
local function makeUnloadingVehicle(name, node, x, restStraw) local function makeUnloadingVehicle(name, node, x, restStraw)
+8 -6
View File
@@ -138,12 +138,14 @@ local noneFit = ADSupplyPlanner.rankNeeds({
check("passer intet -> mest trængende først", noneFit[1].fillType, STRAW) check("passer intet -> mest trængende først", noneFit[1].fillType, STRAW)
check("uden læs-størrelse -> som før", ADSupplyPlanner.rankNeeds({{fillType = STRAW, level = 40000, capacity = 50000}})[1].fits, nil) check("uden læs-størrelse -> som før", ADSupplyPlanner.rankNeeds({{fillType = STRAW, level = 40000, capacity = 50000}})[1].fits, nil)
-- Wait-punkter: navn med ordet "Wait" (uanset store/små) eller mappen "Wait" -- Wait-punkter: MAPPEN har ordet "Wait" (uanset store/små); markørnavnet er ligegyldigt.
check("'Cow 1 Food Wait' er wait-punkt", ADSupplyPlanner.isWaitMarker({name = "Cow 1 Food Wait", group = "Cow Food"}), true) -- (Brugeren har mark-ventepladser som "F91 Wait" i mark-mapperne — de må ikke ryge i puljen.)
check("'wait 3' er wait-punkt", ADSupplyPlanner.isWaitMarker({name = "wait 3", group = "Andet"}), true) check("mappen 'Cow Wait' tæller", ADSupplyPlanner.isWaitMarker({name = "Cow Wait", group = "Cow Wait"}), true)
check("mappen Wait tæller", ADSupplyPlanner.isWaitMarker({name = "P2", group = "Wait"}), true) check("mappen 'Wait' tæller", ADSupplyPlanner.isWaitMarker({name = "P2", group = "Wait"}), true)
check("'Waiter' er ikke wait-punkt", ADSupplyPlanner.isWaitMarker({name = "Waiter", group = "X"}), false) check("mappen 'wait stalde' tæller", ADSupplyPlanner.isWaitMarker({name = "3", group = "wait stalde"}), true)
check("'Cow 1 Food' er ikke wait-punkt", ADSupplyPlanner.isWaitMarker({name = "Cow 1 Food", group = "Cow Food"}), false) check("mark-venteplads i mark-mappe tæller IKKE", ADSupplyPlanner.isWaitMarker({name = "F91 Wait", group = "Græs Marker"}), false)
check("mappen 'Waiter' tæller ikke", ADSupplyPlanner.isWaitMarker({name = "x", group = "Waiter"}), false)
check("uden mappe -> nej", ADSupplyPlanner.isWaitMarker({name = "Wait 1"}), false)
-- nærmeste ledige wait-punkt; candidates = {{marker, x, z}}, claims = {[markerId] = vehicle} -- nærmeste ledige wait-punkt; candidates = {{marker, x, z}}, claims = {[markerId] = vehicle}
local V1, V2 = {}, {} local V1, V2 = {}, {}