chore: v1.12.0.0 — udkørsel af produkter (README, byg)

This commit is contained in:
2026-09-23 10:03:07 +02:00
parent 337db16178
commit d8d2ff3c3e
+48 -1
View File
@@ -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) 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. 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 ## Fælles
- Wrapper `ADMultipleTargetsManager.getNextPickup` (via den globale `FS25_AutoDrive`-tabel); rører ikke AutoDrive-zip'en. - 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 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). 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 .` Byg: `cd FS25_ADSmartPickup && zip -qr ../FS25_ADSmartPickup.zip .`
Design/plan: `docs/superpowers/` Design/plan: `docs/superpowers/`