33 lines
1.6 KiB
Markdown
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.
|