feat(quests): Quests als Trigger mit Zaehler
Eine Quest IST ein Trigger mit count = N — kein zweiter Mechanismus. Gezaehlt wird erst ab start_quest, erledigte bleiben mit done = true stehen, und die Belohnung darf die naechste starten: das ist die Kette. - fuenfzehnte Registry, Trigger per serde(flatten) eingebettet - give_item als Aktion, damit eine Belohnung mehr als Erfahrung zahlt - QuestLog auf q, Fortschritt im Speicherstand, unbekannte IDs verworfen - eine Funktion entscheidet fuer alle Traeger, wann ein Trigger feuert Befund: Die Ordnungszahlen im Aktionskatalog widersprechen sich — vier Tickets zaehlten je vom eigenen Stand. Sie sind raus, CONTEXT.md fuehrt die Liste.
This commit is contained in:
@@ -19,6 +19,8 @@ shop = "core:blacksmith_stock"
|
||||
options = [
|
||||
{ text = "Zeig mir deine Waren.", actions = [ { action = "open_shop" } ] },
|
||||
{ text = "Was gibt es hier unten?" },
|
||||
{ text = "Hast du Arbeit für mich?",
|
||||
actions = [ { action = "start_quest", quest = "core:rattenplage" } ] },
|
||||
# Bedingte Option statt eines zweiten Dialogknotens — genau der Fall, fuer
|
||||
# den der Knotengraph angeblich noetig waere.
|
||||
{ text = "Diese Knochenklinge — kennst du sie?",
|
||||
|
||||
34
mods/core/quests.toml
Normal file
34
mods/core/quests.toml
Normal file
@@ -0,0 +1,34 @@
|
||||
# Quests (Ticket 08). Eine Quest **ist ein Trigger mit `count = N`** — kein
|
||||
# zweiter Mechanismus, dieselben Felder wie an Gegenstand, Modifikator oder
|
||||
# Gegner: `on`, `when`, `condition`, `actions`, `chance`.
|
||||
#
|
||||
# Gezaehlt wird ERST AB DEM START (`start_quest`). Alle Quests ab dem ersten Zug
|
||||
# mitlaufen zu lassen waere kuerzer und macht das Spiel kaputt: Eine Kette
|
||||
# "bring mir fuenf Schwaenze" -> "jetzt in den Keller" waere beim Betreten des
|
||||
# Kellers schon erfuellt, bevor sie jemand erwaehnt hat.
|
||||
|
||||
[[quests]]
|
||||
id = "rattenplage"
|
||||
name = "Rattenplage"
|
||||
description = "Borin zahlt für fünf Riesenratten."
|
||||
on = "creature_died"
|
||||
count = 5
|
||||
condition = [ { check = "has_tag", who = "target", value = "core:beast" } ]
|
||||
actions = [
|
||||
{ action = "give_item", item = "core:gold", count = 60 },
|
||||
{ action = "give_exp", amount = 25 },
|
||||
# Die Belohnung startet die naechste Quest — DAS ist die Kette, und sie
|
||||
# braucht keinen eigenen Begriff.
|
||||
{ action = "start_quest", quest = "core:tiefer_hinab" },
|
||||
]
|
||||
|
||||
# "Besitze N" braucht keine zweite Mechanik, sondern dieselbe Form: ein Ereignis,
|
||||
# eine Bedingung, count = 1.
|
||||
[[quests]]
|
||||
id = "tiefer_hinab"
|
||||
name = "Tiefer hinab"
|
||||
description = "Steig bis zur dritten Etage ab."
|
||||
on = "floor_entered"
|
||||
count = 1
|
||||
condition = [ { check = "attribute", who = "self", attribute = "level", at_least = 1 } ]
|
||||
actions = [ { action = "give_exp", amount = 40 } ]
|
||||
Reference in New Issue
Block a user