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
end
-- Wait-punkter: markører med ordet "Wait" i navnet (uanset store/små) eller i mappen "Wait".
-- Her venter en traktor med rest-læs, til der igen er plads i målet.
-- Wait-punkter: alle markører i en MAPPE med ordet "Wait" i navnet (uanset store/små),
-- 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)
if marker.group == "Wait" then
return true
end
local name = string.lower(tostring(marker.name or ""))
return string.find(name, "%f[%a]wait%f[%A]") ~= nil
local group = string.lower(tostring(marker.group or ""))
return string.find(group, "%f[%a]wait%f[%A]") ~= nil
end
-- 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
-- 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
-- (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.
--
-- Kun den aktuelle aflæsningsopgaves destination ændres; AutoDrives mål,
@@ -94,7 +94,7 @@ local function startWaiting(adEnv, task)
if candidate == nil then
if not warnedNoWaitPoint[vehicle] then
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
return
end
@@ -103,7 +103,7 @@ local function startWaiting(adEnv, task)
waits[vehicle] = {task = task, homeDestinationID = task.destinationID, waitMarker = candidate.marker, fillType = fillType, rest = rest}
redirect(task, candidate.marker.id)
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
-- 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"?>
<modDesc descVersion="107">
<author>masterdraco</author>
<version>1.7.0.0</version>
<version>1.7.1.0</version>
<title>
<en>AD Smart Pickup</en>
</title>
<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>
<iconFilename>icon.dds</iconFilename>
<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
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
`Wait` — så mange du har plads til; de er en fælles pulje for alle traktorer.
1. Læg markører i en **mappe med ordet `Wait` i navnet** (fx mappen `Cow Wait`) — så mange du har
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
(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.
@@ -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.
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).
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
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].owningPlaceable = barn2
addMarker(40, "Wait 1", "Cow Food", 5100, 0)
addMarker(41, "Wait 2", "Cow Food", 5300, 0)
addMarker(40, "Wait 1", "Cow Wait", 5100, 0)
addMarker(41, "Wait 2", "Cow Wait", 5300, 0)
end
-- traktor der holder ved stalden (markør 30) med rest-læs halm på vognen
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("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"
check("'Cow 1 Food Wait' er wait-punkt", ADSupplyPlanner.isWaitMarker({name = "Cow 1 Food Wait", group = "Cow Food"}), true)
check("'wait 3' er wait-punkt", ADSupplyPlanner.isWaitMarker({name = "wait 3", group = "Andet"}), 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("'Cow 1 Food' er ikke wait-punkt", ADSupplyPlanner.isWaitMarker({name = "Cow 1 Food", group = "Cow Food"}), false)
-- Wait-punkter: MAPPEN har ordet "Wait" (uanset store/små); markørnavnet er ligegyldigt.
-- (Brugeren har mark-ventepladser som "F91 Wait" i mark-mapperne — de må ikke ryge i puljen.)
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 stalde' tæller", ADSupplyPlanner.isWaitMarker({name = "3", group = "wait stalde"}), true)
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}
local V1, V2 = {}, {}