Files
fs25-adsmartpickup/README.md
T
masterdraco 8c76790ece feat: fyldeste kilde først for mælk/gylle/digestat (v1.5.0.0)
Lagervarer tømmes stadig mindst-fyldte-først; varer hvis tanke løber fulde og
stopper produktionen hentes fyldest-først (ADSupplyPlanner.FULLEST_FIRST_FILL_TYPES).
Strategien vises i loggen.

fix: en trigger foran næsen tæller aldrig som markørens egen (tolerance 2 -> 0).
Markør-drift i ensilage-rækken lod næste tanks rør (1,9 m foran) vinde.
Verificeret mod savegame: 40/40 siloer, 7/7 ensilage-tanke, 0 dropof.
2026-09-21 16:34:19 +02:00

62 lines
4.2 KiB
Markdown

# 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`).
## 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" + "Rotér mål: pålæsning" på køretøjet.
- **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: `luajit tests/test_adSupplyPlanner.lua && luajit tests/test_adSmartPickup.lua`
Byg: `cd FS25_ADSmartPickup && zip -qr ../FS25_ADSmartPickup.zip .`
Design/plan: `docs/superpowers/`