Files
yourpart-daemon/docs/FALUKANT_TRANSPORT_RAID_DAEMON.md

42 lines
1.8 KiB
Markdown

# Falukant: Transportüberfälle & Wachen (Daemon)
## Migration
`migrations/008_falukant_transport_raid.sql`:
- `falukant_data.transport.guard_count` (Standard `0`)
- Eintrag `falukant_type.underground.tr = 'raid_transport'`
## Code
| Komponente | Datei |
|------------|--------|
| Tick (ca. 60 s) | `src/worker/falukant_transport_raid.rs``run_tick` |
| Aufruf | `src/worker/underground.rs` (`UndergroundWorker::tick`, vor den 1-Tage-Jobs) |
| SQL | `src/worker/sql.rs` (`QUERY_RAID_*`) |
## Logik (V1)
1. Offene Untergrundaufträge `raid_transport` mit `result IS NULL` (ohne 24h-Wartezeit).
2. Parameter: `regionId`, `bandSize` (JSON, auch `region_id` / `band_size`).
3. Region muss `falukant_type.region.id IN (4,5)` und `label_tr <> 'town'` erfüllen.
4. Kandidaten-Transporte: noch unterwegs, `size >= 2`, Fracht, Route berührt die Region (`source` oder `target`), **nicht** vom Auftraggeber.
5. Begegnung: Zufall mit von Bandengröße und Ladungsgröße abhängiger Wahrscheinlichkeit.
6. Kampf: `raidPower` vs. `guardPower` (Wachen aus `transport.guard_count`) → `repelled` | `partial_success` | `major_success`.
7. Beute: Anteil der Menge, **nie** die volle Ladung; zusätzlicher Verlust beim Abtransport ins Lager (`lostDueToStorage`).
8. Einlagerung: bevorzugt Niederlassung **in derselben Region**, sonst erste Branch-ID des Users.
9. Opfer: reduzierte `reputation`, verkleinerte Transportmenge.
## Events
| Event | Empfänger |
|-------|-----------|
| `falukantTransportRaid` | Opfer (`reason`: `transport_raided`) |
| `falukantUndergroundUpdate` | Auftraggeber (`raid_*`) |
| `falukantUpdateStatus` | beide |
| `falukantBranchUpdate` | beide |
## Backend / UI
Projektseitig: API für `raid_transport`, `guardCount` am Transport, Formularfilter für Regionen. Dieses Dokument beschreibt nur den **Daemon**.