diff --git a/README.md b/README.md index a1f6f74..85da420 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,53 @@ vare valgt betyder ingen bytte-mulighed, og traktoren venter som hidtil. Wait-lo 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. + +**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. @@ -174,6 +221,6 @@ aldrig fejlagtigt bliver opfattet som et fuldt mål. 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` +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/`