diff --git a/FS25_ADSmartPickup/adSupplyPlanner.lua b/FS25_ADSmartPickup/adSupplyPlanner.lua index 980aef1..91a7ea7 100644 --- a/FS25_ADSmartPickup/adSupplyPlanner.lua +++ b/FS25_ADSmartPickup/adSupplyPlanner.lua @@ -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 diff --git a/FS25_ADSmartPickup/adUnloadWait.lua b/FS25_ADSmartPickup/adUnloadWait.lua index eb72664..4b2eafe 100644 --- a/FS25_ADSmartPickup/adUnloadWait.lua +++ b/FS25_ADSmartPickup/adUnloadWait.lua @@ -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. diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 8cffa8a..662514d 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,12 +1,12 @@ masterdraco - 1.7.0.0 + 1.7.1.0 <en>AD Smart Pickup</en> - + icon.dds diff --git a/README.md b/README.md index f53765d..132421b 100644 --- a/README.md +++ b/README.md @@ -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). diff --git a/tests/test_adSmartPickup.lua b/tests/test_adSmartPickup.lua index 0c93555..5a22bbe 100644 --- a/tests/test_adSmartPickup.lua +++ b/tests/test_adSmartPickup.lua @@ -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) diff --git a/tests/test_adSupplyPlanner.lua b/tests/test_adSupplyPlanner.lua index 2ee2185..4a191df 100644 --- a/tests/test_adSupplyPlanner.lua +++ b/tests/test_adSupplyPlanner.lua @@ -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 = {}, {}