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

1.6 KiB

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.