Add transport raid functionality to Falukant daemon: Introduced falukant_transport_raid module with SQL queries for managing transport raids, including candidate transports and user reputation updates. Updated documentation to reflect new WebSocket events and integrated the module into the UndergroundWorker for seamless processing of transport-related events.

This commit is contained in:
Torsten Schulz (local)
2026-03-23 14:25:21 +01:00
parent df143e2531
commit 3b25f8c3a0
7 changed files with 677 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
# 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**.

View File

@@ -190,6 +190,18 @@ Konkrete Routen stehen im **YourPart3**-Backend; das Frontend sollte eine zentra
---
### Transportüberfälle (`raid_transport`)
| Event | Payload (Auszug) |
|-------|-------------------|
| `falukantTransportRaid` | `user_id` (Opfer), `reason`: `transport_raided` |
| `falukantUndergroundUpdate` | `user_id` (Auftraggeber), `reason`: `raid_repelled`, `raid_success`, `raid_partial_success`, `raid_loot_stored` |
| `falukantUpdateStatus` / `falukantBranchUpdate` | beide Seiten nach Überfall |
Daemon: `src/worker/falukant_transport_raid.rs`, Doku: `docs/FALUKANT_TRANSPORT_RAID_DAEMON.md`.
---
## 6. Bezug zum Code (YpDaemon)
- Worker: `src/worker/falukant_family.rs`