feat(handel): NPC-Registry, Dialog, Laden und Stapelregel
Vierzehnte Registry: NPCs sind keine Wesen — kein Kampfzustand, keine Initiative, keine Attribute. Ihre Antwortliste ist flach; was erst nach einer Antwort erscheint, ist eine Option mit einer Bedingung. - open_shop als elfte Aktion (game/ setzt eine Absicht, die UI schiebt) - Talk/Choose/Buy/Sell, Talk wirkt auf das eigene Feld wie PickUp - Preisspanne statt Goldkonto beim Haendler, Charisma in der Preisfunktion - Warenkorb einmal bei der Etagenerzeugung gezogen - Stapelregel aus Ticket 07 endlich gebaut: 50-120 Gold war 120 Eintraege - Dialog- und Shop-Screen, NPC-Symbol im Grid
This commit is contained in:
@@ -86,3 +86,18 @@ entries = [
|
||||
{ item = "core:gold", weight = 10, count = "50-120" },
|
||||
{ item = "core:health_potion", weight = 6, count = "2-4" },
|
||||
]
|
||||
|
||||
# --- Laden ----------------------------------------------------------------
|
||||
# Der Warenkorb wird EINMAL bei der Erzeugung der Etage gezogen. Kein Gold in
|
||||
# der Tabelle: Der Haendler verkauft Waren, er verschenkt keine Waehrung.
|
||||
|
||||
[[loot_tables]]
|
||||
id = "blacksmith_stock"
|
||||
rolls = "2-4"
|
||||
entries = [
|
||||
{ item = "core:health_potion", guaranteed = true, count = "3-5" },
|
||||
{ item = "core:iron_sword", weight = 5, affixes = "core:weapon_affixes" },
|
||||
{ item = "core:leather_cap", weight = 5, affixes = "core:armor_affixes" },
|
||||
{ item = "core:thorn_mail", weight = 2, affixes = "core:armor_affixes" },
|
||||
{ item = "core:bone_blade", weight = 1, affixes = "core:weapon_affixes" },
|
||||
]
|
||||
|
||||
27
mods/core/npcs.toml
Normal file
27
mods/core/npcs.toml
Normal file
@@ -0,0 +1,27 @@
|
||||
# NPCs — die vierzehnte Registry (M4).
|
||||
#
|
||||
# Ein NPC ist kein Wesen: Er hat keine Attribute, keine Initiative und keinen
|
||||
# Kampfzustand. Ihn in `creatures` zu pressen hiesse, jedem Gegner ein leeres
|
||||
# `options`-Feld und jedem Haendler leere Grundwerte zu geben.
|
||||
#
|
||||
# Die Antwortliste ist FLACH, kein Knotengraph: Was erst nach einer Antwort
|
||||
# erscheint, ist eine Option mit einer Bedingung. Ein Graph braeuchte Knoten-IDs,
|
||||
# einen Zeiger auf den aktuellen Knoten im Speicherstand und eine Kreispruefung
|
||||
# beim Laden — fuer einen Haendler mit vier Saetzen.
|
||||
|
||||
[[npcs]]
|
||||
id = "blacksmith"
|
||||
name = "Borin"
|
||||
symbol = "B"
|
||||
color = "yellow"
|
||||
greeting = "Stahl kostet. Rede oder kauf."
|
||||
shop = "core:blacksmith_stock"
|
||||
options = [
|
||||
{ text = "Zeig mir deine Waren.", actions = [ { action = "open_shop" } ] },
|
||||
{ text = "Was gibt es hier unten?" },
|
||||
# Bedingte Option statt eines zweiten Dialogknotens — genau der Fall, fuer
|
||||
# den der Knotengraph angeblich noetig waere.
|
||||
{ text = "Diese Knochenklinge — kennst du sie?",
|
||||
condition = [ { check = "has_item", item = "core:bone_blade" } ] },
|
||||
{ text = "Nichts weiter." },
|
||||
]
|
||||
@@ -36,6 +36,9 @@ layout = """
|
||||
[[prefabs]]
|
||||
id = "market"
|
||||
tags = ["core:merchant"]
|
||||
# Der i-te `n`-Platz bekommt den i-ten Eintrag. Anders als bei `e` nennt das
|
||||
# Prefab den NPC: Ein Schmied skaliert nicht mit der Tiefe.
|
||||
npcs = ["core:blacksmith"]
|
||||
layout = """
|
||||
####+####
|
||||
#.......#
|
||||
|
||||
Reference in New Issue
Block a user