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:
41
docs/FALUKANT_TRANSPORT_RAID_DAEMON.md
Normal file
41
docs/FALUKANT_TRANSPORT_RAID_DAEMON.md
Normal 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**.
|
||||
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user