Files
rustkeep/.scratch/rustkeep-1.0/issues/08-event-trigger-system.md

33 lines
1.6 KiB
Markdown

# 08 — Event- und Trigger-System
Type: grilling
Status: open
Blocked by: 07
## Question
Welche Ereignisse meldet das Spiel, und wie hängen Quests und Effekte daran?
Quests sind Bedingung plus Belohnung als Daten; Script-Mods hängen sich später an dieselben Events.
Zu klären:
- Welche Events gibt es, und welche Daten trägt jedes? `enemy_killed`, `item_picked_up`, `floor_entered`,
`npc_talked`, `turn_started`, `damage_taken`, `player_died`.
- Wie werden Events benannt und für Modder erweiterbar gemacht — feste Liste oder auch namespaced IDs?
- Bedingungen: reines Zählen (töte 5 Ratten) oder auch Zustandsabfragen (habe 100 Gold, Level ≥ 3)?
Braucht es Verknüpfung mit UND/ODER?
- Wie wird ein Questfortschritt gespeichert und wie überlebt er das Deaktivieren des Quest-Mods?
- Reihenfolge und Rekursion: Was passiert, wenn eine Belohnung selbst ein Event auslöst?
- Ist das synchrone Aufrufe (Handler direkt ausführen) oder eine Warteschlange?
Ergebnis: Eventliste mit Nutzlast, Bedingungs-Grammatik, TOML-Beispiel für eine Quest.
## Vorgaben aus anderen Tickets
- **01**: Das **Bedingungsvokabular** für `condition` wurde hierher delegiert, damit Quests und
Modifikatoren dieselbe Grammatik benutzen statt zweier, die sich subtil unterscheiden.
- **07**: `Game` hält `quests: Vec<QuestProgress>` — die Form von `QuestProgress` entscheidet dieses
Ticket. Wesen werden über `enum CreatureRef { Player, Enemy(usize) }` adressiert, Mutationen laufen
durch den einen Eingang `Game::apply(action, source, target, reg)`. Ein Event-Handler, der etwas
bewirkt, geht durch dieselbe Tür.