FS25_ADSmartPickup

AutoDrive-tillæg til Farming Simulator 25 med to funktioner oven på Pickup&Deliver:

1. Vare-bevidst mappe-rotation (én vare valgt)

Når pålæsningsmål roteres i en AD-mappe, køres der direkte til den silo i mappen, der har den valgte vare — mindst fyldte først (mælk/gylle: fyldeste først) — i stedet for at prøve markørerne én efter én.

2. Behovsstyret forsyning (flere varer valgt)

Én traktor holder alle input i en produktion fyldt — fx hø, græs, ensilage og sukkerroer til en TMR-blander — i stedet for én traktor pr. vare.

  1. Aflæsningsmål = produktionens markør.
  2. Multi-vælg ingredienserne i AutoDrives vare-dropdown.
  3. Start Pickup&Deliver. Loop-tælleren virker som normalt (N læs → parkér, 0 = uendeligt).

Pr. tur læses målets lager; den ingrediens der mangler mest (relativt til kapacitet) hentes fra en silo hvor som helst på kortet (eget lager før nabo-lån, mindst fyldte først). Ingredienser uden plads i målet (< 1000 l fri) eller uden kilde springes over. Mens AD kører viser HUD'en kun turens vare (AutoDrive ville ellers selv rotere vare ved triggeren); når AD stopper, gendannes hele listen. Slå fra ved at vælge en anden enkelt vare.

"Mest brug for" defineres i ADSupplyPlanner.scoreNeed (adSupplyPlanner.lua).

Fabriksstyret (v1.6): målet er et produktionspunkt

Er aflæsningsmålet en fabrik (produktionspunkt), erstattes ingredienslisten af inputs fra fabrikkens ønskede produktioner — slår du fx TMR til i en AIO-fabrik, begynder traktoren at hente ensilage/hø/halm/roer/mineralfoder af sig selv; slår du den fra, holder den op. Dit multi-valg er kun tændknappen (og det gendannes ved stop). Listen genudledes hver tur, begrænset til det vognen kan bære.

  • Ønsket produktion = tændt, ELLER slukket af kortet med status "mangler input" (Dakotas ExtendedProductionPoint slår produktioner fra automatisk, når de løber tør — dem skal vi netop fodre). Manuelt slukket = ikke ønsket.
  • Prioritet = tid til tom: lager / (Σ amount × cyclesPerMinute) over ønskede produktioner — den vare der løber tør først hentes først, uanset relativ fyldning. Loggen viser forbrug og minutter.
  • Fabrik uden ønskede produktioner, eller inputs vognen ikke kan bære → dit multi-valg som hidtil.

Kilder: en fabriks inputs stjæles aldrig (v1.6.1)

En fabriks læssestation udleverer også dens inputs (halm i en TMR-fabrik). Sådan en vare hentes aldrig derfra — kun fabrikkens outputs og rigtige siloer er kilder. Gælder både mappe-logik og behovsstyring. Varer der både er input og output (kæde) må hentes.

Stalde som mål (v1.6.1)

Kostald m.fl. svarer selv for niveau/kapacitet (getHusbandryFillLevel/Capacity), så halm+TMR til en stald rangeres korrekt, selv om staldens aflæsningsstation kun "kender" foder.

Wait-punkter: rest-læs ved fuld stald (v1.7)

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. 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 — eller er mindst halvt tomt (kæmpe vogne kan aldrig tømme hele resten i en lille stald) — kører den tilbage og læsser af. Derefter normal tur.
  4. Wait-punkterne SKAL være forbundet til vejnettet både fra målets udkørsel og tilbage til målet. Modden tjekker ruten begge veje før den omdirigerer; uden rute prøves næste punkt (AutoDrive ville ellers vise "cannot reach" og slukke sig selv).

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).

Opsætning med flere stalde: én traktor (eller flere) pr. stald med Rotér mål: kun pålæsning. Brug IKKE "pålæsning og aflæsning": AutoDrive vælger næste pålæsning FØR den roterer aflæsningsmålet, så behovet ville blive regnet for den forkerte stald. Pålæsningsmarkøren må ikke være fast på en fabrik ("kun aflæsning") — så kalder AutoDrive aldrig modden, og alt valgt læsses dér.

v1.8 — Runs i ESC-menuen

Et run er en navngivet opskrift: mål + varer + Wait-pulje + ture, samt en liste traktorer der skal køre den. I stedet for at sætte AutoDrive op manuelt på hver traktor, defineres run'et ét sted og startes/stoppes samlet for alle traktorer i det.

Oprettelse: ESC → fanen "Smart Pickup" → "+ Nyt run". Runs vælges i Run-selectoren øverst; "Omdøb" og "Slet run" findes som knapper nederst sammen med Start/Stop.

Felter:

  • Mål — dropdown med aflæsningsmål (markører med aflæsningsstation, fx en stald eller fabrik).
  • Varer — Auto (følger målets behov, som ved almindelig behovsstyret forsyning) eller Vælg (afkrydsning af bestemte varer).
  • Wait-pulje — hvilken Wait-mappe rest-læs skal vente i ("Alle (nærmeste ledige)" eller en navngivet pulje som fx "Cow Wait").
  • Ture — loop-tælleren (0–99, 0 = uendeligt), som normalt i AutoDrives Pickup&Deliver.
  • Traktorer — rækker med Ja/Nej (er traktoren med i run'et), kapacitet og et ✔/✖-ikon. En ✖-traktor springes over ved Start, med en grund vist ved siden af (fx "ingen vogn", "vognen kan ikke bære run'ets varer", "for langt fra vejnettet" eller "intet mål"). Sættes en traktor til Nej (fjernet fra run'et), rører det IKKE dens AutoDrive-vareliste — run'ets varer forbliver valgt i traktorens AD-vareliste (synlig/redigerbar i AD's eget HUD) indtil de ændres dér manuelt.

Start/Stop: "Start run" sætter AutoDrive op på hver ✔-traktor: mode Pickup&Deliver, målmarkør, nærmeste pålæsningsmarkør som start, run'ets varer valgt, run'ets tur-tæller, mapper ("Brug mapper") slået til, og rotation sat til "kun pålæsning" (bemærk: "Brug mapper" er en global AutoDrive-indstilling og slås til for hele spillet, ikke kun run'ets traktorer). Dette overskriver traktorens hidtidige manuelle AutoDrive-indstillinger. "Stop run" stopper AutoDrive på hver traktor i run'et (medlemskabet i run'et bevares, så det kan startes igen). Traktorer der ikke er del af noget run, kører som før — bortset fra at "Brug mapper" kan være blevet slået til globalt af et run.

Wait-puljer-afsnittet nederst på siden viser hver Wait-mappe skrivebeskyttet: antal punkter og hvilken traktor der holder hvor.

Gemning: Runs gemmes i savegameN/ADSmartPickup_runs.xml (ved gem og ved Start/Stop). De genstartes ikke automatisk ved indlæsning af et savegame — kør "Start run" igen efter load, hvis traktorerne skal køre videre.

v1.9 — læs-bytte fra Wait

Venter en traktor ved et Wait-punkt med en vare målet er fuldt af, mens målet samtidig mangler en anden vare på traktorens liste (run eller AD's multi-valg) — kan der ellers gå i hårdknude: alle traktorer venter med den ene vare, mens ingen henter den anden. Hvert 5. sekund tjekkes derfor:

  1. Er der en anden vare i listen, målet mangler et fuldt læs af (og som kan hentes fra en silo)? Ellers venter traktoren som hidtil.
  2. Findes en ren lager-silo (ikke stald, ikke fabrik, og ikke målet selv) med en aflæsningsstation ved en AD-markør, der tager varen og har fri plads ≥ resten, samt vejnet både til siloen og videre fra siloen til målet? Siloer der allerede har varen foretrækkes, ellers den nærmeste.
  3. Findes en silo: Wait-punktet frigives, traktoren kører derhen og læsser resten af. Når vognen er tom, henter næste tur den vare målet mangler.
  4. Findes ingen egnet silo: traktoren bliver ved Wait-punktet (som før v1.9).

Loglinjer: '<navn>' bytter læs: N l STRAW tilbage i <markør> (markør n), målet mangler FORAGE ved bytte, og én gang pr. venteperiode '<navn>' venter med N l STRAW, og målet mangler FORAGE — ingen silo med plads og vejnet til/fra tager resten, så den bliver ved Wait-punktet når ingen silo findes.

Kræver at traktoren har begge varer i sin liste (run's varer eller AD's multi-valg) — kun én vare valgt betyder ingen bytte-mulighed, og traktoren venter som hidtil. Wait-logikken gælder desuden kun mens aflæsningsopgaven peger på AD's rigtige aflæsningsmål, så en silo-omvej (fx efter et bytte) aldrig fejlagtigt bliver opfattet som et fuldt mål.

v1.12 — Udkørsel af produkter

Et run har nu en retning: Forsyning (som hidtil) eller Udkørsel. ESC-fanen har tre under-faner: Oversigt · Forsyning · Udkørsel.

Et udkørsels-run består af:

  • Kilder (én eller flere AD-markører): en fabrik (produktionspunkt, dens outputs), en silo (spec_silo, dens indhold) eller et objektlager (palle-/ballelager som HVF- pakkens; paller tages ud automatisk). Kilden genkendes inden for 40 m af markøren.
  • Varer med politik pr. vare: Fra · Lager · Salg · Salg, ellers lager. Bulk-varer kræver tipvogn/tank; pallevarer kræver Universal Autoload på vognen.
  • Regler: Sælg fra (% af årets toppris, standard 90), Kør til lager over (% fyldning i kilden, standard 80), Saml op på én tur (opsamlingsrunde).
  • Wait-pulje og traktorer som i forsynings-runs.

Turvurdering (før hver pålæsning, og hvert 5. sekund mens traktoren holder):

  1. Salg: en vare med Salg-politik, hvis bedst betalende nåelige salgssted giver mindst tærsklen af årets toppris — kører uanset mængde. Højeste pris-% først. Toppris = stationens grundpris nu × (årets højeste periodefaktor ÷ nuværende). Stor efterspørgsel giver > 100 %.
  2. Lager: en vare med Lager-politik, når der er et fuldt læs eller kildens lager er over tærsklen — til nærmeste silo med plads til hele læsset og vejnet begge veje (aldrig en kilde, fabrik eller stald). Mest fyldte kilde først.
  3. Ingen tur → traktoren holder ved et ledigt Wait-punkt (run'ets pulje) og prøver igen. Loggen viser hvorfor: holder ved Wait 3: SUGAR 78 % af top (kræver 90), lager 41 %.

Opsamlingsrunde: tipvogn = samme vare fra flere kilder efter tur til vognen er fuld (næste kilde kun ved ≥ 10 % fri plads); autoload-vogn = flere pallevarer med samme mål på én tur.

Objektlager: markøren skal stå så vognens autoload-zone dækker lagerets spawn-område (som når man læsser manuelt). Moden beder lageret spawne én palle ad gangen og venter til UAL har taget den, så der aldrig ligger paller tilbage. Sidder lageret fast (kendt spilfejl), afsluttes læsningen efter 30 s med det der er. Ved en autoload-kilde uden fremdrift i 15 s køres der med det der er ("uanset mængde").

Advarsler på skærmen: kan intet salgssted nås (vejnet), eller findes ingen silo med plads, vises en rød AutoDrive-notifikation ('MT635' kan ikke nå salgssted 'Grain Elevator' for SUGAR – tjek vejnettet), samme tekst i AD's notifikations-historik, i log.txt (WARN) og i run'ets status. Traktoren holder ved Wait og kører selv når vejen er koblet på. Advarslen gentages først når traktor, station eller vare ændrer sig.

Prisregel (v1.12.1, metode fra Distribution Redux): pris-% = nuværende periodes faktor ÷ årets højeste faktor i spillets faste sæsonkurve (samme data som prisgrafen) × stationens egen afvigelse (effektiv pris ÷ stationens grundpris nu). Sværhedsgraden falder ud; flade kurver (top/bund < 1,02) regnes som 100 %; stor efterspørgsel giver > 100 %.

Reserve (v1.12.1): før salg fratrækkes det gårdens egne fabrikker og stalde skal bruge det næste døgn (forbrug × 24 t minus det de allerede har, højst deres fri plads; fabrikker = ønskede produktioners inputs, stalde = foder/halm/vand-rate). Der sælges kun når et helt læs kan tages uden at røre reserven. Loggen/UI'et siger fx SUGARBEET: 196.0k reserveret til TMR-fabrik. Lager-politik rører ikke reserven (varen bliver på gården).

Paller til lager (v1.12.1): Lager-mål for pallevarer = nærmeste objektlager (palleskur) der tager varen og har plads; AutoDrive læsser UAL-vognen af dér.

Tætte siloer (AutoDrive-indstilling): AutoDrive tipper ved den første aflæsningstrigger inden for sin globale "Max trigger distance" (standard 25 m). Står siloerne tættere end det, kan nabosiloen få læsset — sæt AD-indstillingen til 10 m. Moden advarer i loggen første gang et lagermål har en anden aflæsningsmarkør inden for afstanden.

Fanen Lagre (v1.12.1): gårdens beholdning pr. bygning (fabrikker med ▸ ved outputs, stalde, palleskure som antal paller, siloer), opdateret hvert sekund.

Opsætning: Udkørsel-fanen → Nyt run → afkryds kilder → sæt politik pr. vare → Ja på traktorer → Start. AD-tilstand pr. traktor: PickupAndDeliver, 1./2. markør = første kilde (pladsholder, sættes pr. tur), rotation "kun pålæsning". Runs gemmes i ADSmartPickup_runs.xml version 2; ældre filer læses som forsynings-runs.

Fælles

  • Wrapper ADMultipleTargetsManager.getNextPickup (via den globale FS25_AutoDrive-tabel); rører ikke AutoDrive-zip'en.
  • Siloens eget lager rangeres før nabo-lån (udvidelses-siloer deler lager inden for storageRadius).
  • Intet fund, intet behov eller fejl i et spil-API → AutoDrives originale rotation. Valg logges som ADSmartPickup: i log.txt.
  • Kræver i AutoDrive: "Brug mapper" (global AutoDrive-indstilling, gælder hele spillet) + "Rotér mål: pålæsning" på køretøjet (pr. køretøj).
  • Markør ↔ silo (v1.3): markøren er dér hvor trækkerens næse stopper; vognen holder et vogntog bagved. Markørens silo er derfor nærmeste trigger bag næsen set i ankomstretningen (forrige waypoint), højst 2 m foran. I tætte rækker (15 m mellem siloerne) er nabosiloens trigger ellers nærmere end markørens egen. Ingen trigger bag næsen/ukendt retning → nærmeste trigger som før.
  • Kildestrategi (v1.5): lagervarer hentes fra den mindst fyldte silo først (rester ryddes, siloer frigives). Varer hvis tanke løber fulde — mælk, gylle, digestat — hentes fra den fyldeste kilde først, så produktionen ikke går i stå. Listen er ADSupplyPlanner.FULLEST_FIRST_FILL_TYPES (adSupplyPlanner.lua); tilføj fx MANURE = true hvis møddinger også skal tømmes fyldest-først. Loggen viser den brugte strategi. En trigger foran næsen tæller aldrig som markørens egen (v1.5).
  • Spor-regel (v1.4): triggeren skal ligge i trækkerens spor (højst 6 m til siden). En tank med aflæsningsbane på den ene side og pålæsningsbane på den anden giver ellers to markører til samme tank, og "Dropof"-markøren kunne vinde. Kendes retningen, men ligger intet i sporet (kurve ind til markøren), accepteres kun en trigger inden for 12 m.
  • Kun fremme ved markøren (v1.4): rotationen skjules først når målet er nået — undervejs ruller vognen gennem nabosiloers triggere, og dér skal AutoDrive køre videre ved tom trigger.
  • Sikkerhedsventil (v1.4): 30 s ved markøren uden at vognen fyldes → grebet slippes (advarsel i log), og AutoDrive kører videre som med almindelig rotation.
  • Står og læsser (v1.2): med rotation + mapper afslutter AutoDrive normalt pålæsningen i det øjeblik markøren nås (læsning skal være startet på vej ind, ellers kører den tom videre). Når moden har valgt siloen, ser AutoDrive under LoadAtDestinationTask.update rotationen som slået fra for netop det køretøj, så den holder ved markøren og læsser som uden rotation. Løber kilden tør, slippes grebet og turen fortsætter med det der er i vognen.

Begrænsninger: AD læsser fuld vogn — er der mindre plads i målet end ét læs, venter traktoren ved aflæsning. Målet skal være en placeable med aflæsningstrigger (ikke en blandevogn).

Test: for t in tests/test_*.lua; do luajit $t | tail -1; done Byg: cd FS25_ADSmartPickup && zip -qr ../FS25_ADSmartPickup.zip . Design/plan: docs/superpowers/

S
Description
FS25 AutoDrive-tillæg: vare-bevidst mappe-rotation
Readme 13 MiB
v1.60.14.0 Latest
2026-09-29 21:41:55 +02:00
Languages
Lua 97.3%
Python 2.7%