Code-Frameworks
Regelwerk-Tabellen
Halte feste Regeldaten in einer Tabelle und lies sie in deinen Regeln oder nutze sie als Auswahl einer Eingabe.
Was eine Tabelle ist
Eine Regelwerk-Tabelle sind feste Daten, die deine Regeln lesen, zum Beispiel ein Bonus für jede Berufung. Sie gehört nicht zum Spielzustand, und Spieler ändern sie nie. Wer eine Zeile ändert, erzeugt eine neue Version deines Spiels, wie bei jeder anderen Änderung an der Quelle.
Eine Tabelle deklarieren
Eine Tabelle ist eine JSON-Datei in tables/. Liste sie im Manifest auf.
"tables": ["tables/callings.json"]- Zeile 10 Die Pfade der Tabellendateien.
{
"id": "callings",
"name": "Callings",
"columns": [
{ "key": "calling", "label": "Calling", "type": "string" },
{ "key": "bonus", "label": "Watch bonus", "type": "number" }
],
"rows": [
{ "calling": "Guard", "bonus": 30 },
{ "calling": "Scout", "bonus": 10 }
]
}- Zeilen 4-7 Die Spalten. Jede hat einen key, ein label und einen Typ: string, number oder boolean.
- Zeilen 8-11 Die Zeilen. Jede Zeile gibt für jede Spalte einen Wert an, und nichts sonst.
Ein Framework listet die ids der Tabellen auf, die es liest.
"tables": ["callings"]- Zeile 22 Das Framework darf die Tabelle callings lesen.
| Limit | Wert |
|---|---|
| Spalten pro Tabelle | 64 |
| Zeilen pro Tabelle | 1000 |
| Tabellen pro Framework | 64 |
| Tabellen pro Spiel | 128 |
Eine Tabelle in einer Regel lesen
table.find nimmt die Tabellen-id, die Spalten zum Abgleich mit den gesuchten Werten und die Spalten für das Ergebnis, jeweils mit einem Standardwert. Es gibt die Spalten zurück, die du nennst, aus der ersten Zeile, deren Abgleich-Spalten alle gleich deinen Werten sind. Passt keine Zeile, gibt es deine Standardwerte zurück.
export function construct(
name: string,
max_hp: number,
calling: string,
): { name: string; max_hp: number; hp: number; calling: string; watch: number } {
const row = table.find("callings", { calling: calling }, { bonus: 0 });
const bonus: number = row.bonus;
return {
name: name,
max_hp: max_hp,
hp: max_hp,
calling: calling,
watch: 20 + bonus,
};
}- Zeile 6 Suche den Bonus für die Berufung. Der Standardwert ist 0.
- Zeile 7 Lies eine Spalte des Ergebnisses. Der Typ kommt aus der Tabelle, also ist kein Cast nötig.
- Zeile 13 Nutze den Bonus in einem Startwert.
Die Tabellen-id ist ein String, der im Code steht, und das Framework muss die Tabelle auflisten. Jede Spalte, die du nennst, muss existieren, und nur die genannten Spalten kommen zurück. Ein Konstruktor liest eine Tabelle auf diese Weise. Die Werte zum Abgleichen müssen eine Variable, ein Feld oder ein Literal sein, kein berechneter Wert.
Diese Fehler fängt die Prüfung des Projekts ab:
const row = table.find("callings", { calling: calling }, { boost: 0 });has no column 'boost'which manifest.tables does not declare const row = table.find("callings", { calling: calling + "!" }, { bonus: 0 });table.find match values must be a variable, a field or a literalEine Tabelle als Auswahl nutzen
Eine Text-Eingabe kann ihre Auswahl aus einer Spalte einer Tabelle nehmen. Die Auswahl besteht aus den verschiedenen Werten der Spalte, in der Reihenfolge der Zeilen.
"calling": {
"label": "Calling",
"optionsFrom": { "table": "callings", "column": "calling" },
"defaultValue": "Guard"
}- Zeile 11 Der Assistent bietet die Werte der Spalte calling an.
- Zeile 12 Der Standardwert muss eine der Optionen sein.
is not one of this Framework's tablesEine Aktions-Eingabe vom Typ text kann dasselbe mit einem optionsFrom-Eintrag in der Deklaration der Aktion tun. Eine Quelle muss mindestens 2 Optionen bieten.

