Code-Frameworks
Limits und Fehler
Die Limits eines Projekts und die Meldungen, die du sehen kannst, mit ihren Lösungen.
Limits
| Limit | Wert |
|---|---|
| Größe des Quellcodes | 8 MiB |
| Größe des kompilierten Spiels | 16 MiB |
| Dateien | 1000 |
| Frameworks | 64 |
| Szenario-Dateien | 512 |
| Inhalts-Presets pro Framework | 512 |
| Inhalts-Presets pro Spiel | 2048 |
| Aktionen pro Framework | 96 |
| Aktionen pro Spiel | 192 |
| Ledger-Funktionen pro Framework | 64 |
| Frames pro Framework | 1 bis 16 |
| Frames pro Spiel | 128 |
| Abschnitte pro Framework | 64 |
| Eingabe-Optionen | 2 bis 128 |
| Selbst geschriebene Aktionsschritte pro Projekt | 512 |
| Schritte pro Aktion | 64 |
| Schritte pro Szenario | 32 |
| Ledger-Prüfungen pro Szenario | 32 |
| Erwartete Schreibvorgänge pro Schritt | 64 |
Die Zeilen oben begrenzen deinen Quellcode. Fabled kompiliert deinen Quellcode außerdem zu einem Spiel, und dieses kompilierte Spiel muss unter 16 MiB bleiben, bevor es vorbereitet werden kann.
Der Server prüft dieselben Limits erneut, wenn du ein Spiel vorbereitest, und sein Urteil ist endgültig.
Fehler und Lösungen
Jede Zeile zitiert einen Teil einer Meldung. Die Meldung in The Forge kann die Datei, die Zeile oder die beteiligten Namen ergänzen.
| Meldung | Ursache | Lösung |
|---|---|---|
| Project contains undeclared source files: rules/extra.ts. | Es gibt Dateien, auf die nichts verweist. Die Meldung nennt bis zu fünf Pfade und die Anzahl der übrigen Dateien. | Vergleiche die Dateien des Baums mit dem Manifest und den Schemas. Wenn du eine Ledger-Funktion löschst, bleibt ihre Regeldatei zurück, lösche also auch diese Datei. |
| Missing or misplaced project source. | Ein aufgelisteter Pfad hat keine Datei, oder die Datei liegt im falschen Ordner. | Korrigiere den Pfad oder füge die Datei hinzu. |
| Unrecognized key(s) in object | Eine JSON-Datei nutzt ein Feld, das das Format nicht hat. | Entferne das Feld oder korrigiere seine Schreibweise. |
| Input name is hidden, so it must declare a defaultValue. | Eine versteckte Eingabe hat keinen Standardwert. | Füge einen defaultValue hinzu oder zeige die Eingabe. |
| must be one of its options | Ein Standardwert steht nicht in der Optionsliste. | Nutze eine der Optionen als Standardwert. |
| Parameter max_hp 99 is not between 1 and 40. | Ein Szenario oder Preset verletzt die Grenzen einer Eingabe. | Ändere den Wert oder die Grenzen. |
| is not assigned to any section | Es gibt Abschnitte, aber eine Eingabe steht in keinem. | Füge die Eingabe zu einem Abschnitt hinzu. |
| Duplicate semantic identity or source path. | Zwei Elemente teilen sich eine ID oder eine Quelldatei. | Gib jedem eine eigene ID und Datei. |
| Invalid child Framework constraint | Ein untergeordneter Platz zeigt auf ein Framework außerhalb des Spiels. | Nutze die ID eines Frameworks in diesem Spiel. |
| Ledger function must target an existing scalar field. | Das Feld gehört nicht zu denen, die der Konstruktor zurückgibt. | Gib das Feld im Konstruktor zurück oder korrigiere den Namen. |
| must define the required 'name' value | Ein Konstruktor gibt keinen name zurück. | Gib ein Text-Feld namens name zurück. |
| The entry framework must be a character constructor. | Das Einstiegs-Framework des Manifests ist kein Charakter. | Lass entryFramework auf ein Charakter-Framework zeigen. |
| while loops are not allowed | Eine Regel nutzt eine Schleife, die vielleicht nie endet. | Nutze for of. |
| is a host global and not part of the TypeScript subset | Eine Regel nutzt Math oder ein anderes Global. | Nutze die Host-Aufrufe, zum Beispiel math.min. |
| import is not allowed | Eine Regel importiert Code. | Lege die Logik in die Regeldatei selbst. |
| must return a value on every reachable path | Eine Funktion mit Rückgabetyp hat einen Pfad ohne return. | Gib auf jedem Pfad einen Wert zurück oder deklariere void. |
| is not declared on this schema | Eine Aktion schreibt ein Feld, das der Konstruktor nicht zurückgibt. | Gib das Feld im Konstruktor zurück oder korrigiere den Namen. |
| FRAME_BINDING_UNKNOWN | Ein Frame bindet ein Feld, das nicht existiert. | Binde ein deklariertes Feld. |
| ACTION_MISSING | Eine Schaltfläche nennt einen Aktions-Alias, den es nicht gibt. | Deklariere den Alias oder korrigiere den Namen. |
| Expected ordered writes | Eine Aktion hat etwas anderes geschrieben als in expectedWrites steht. | Korrigiere die Regel oder die erwarteten Schreibvorgänge. |
| Constructor output does not match its scenario. | expectedValues weicht von dem ab, was der Konstruktor zurückgibt. | Korrigiere das Szenario oder den Konstruktor. |
| SCENARIO_COVERAGE_MISSING | Eine Aktion hat keinen Szenario-Schritt. | Füge mindestens einen Schritt für die Aktion hinzu. |
| is a non-writable state field | Eine Aktion schreibt einen Wert, den eine Ledger-Funktion ableitet. | Schreibe ein gespeichertes Feld und lass die Ledger-Funktion den Rest ableiten. |
| Action accesses require literal keys on self. | Eine Aktion nennt ein Feld über einen Wert statt über einen im Code ausgeschriebenen Text. | Schreibe den Feldnamen in Anführungszeichen. Nutze eine Aktion pro Feld. |
| functions but only the action | Eine Aktionsdatei exportiert zwei Funktionen. | Exportiere eine Funktion pro Aktionsdatei oder teile die Datei zwischen Aktionen. Lasse Hilfsfunktionen ohne export. |
| the step expects it to be refused with | Ein Schritt erwartet eine Ablehnung, aber die Aktion wurde nicht abgelehnt. | Entferne expectedRefusal oder korrigiere das Angebot, damit es ablehnt. |
| Add expectedRefusal | Ein Listen-Schritt wurde abgelehnt, sagt das aber nicht. | Füge expectedRefusal mit dem Code hinzu, und keine Schreibvorgänge. |
| Every ledger function needs an executable scenario. | Eine Ledger-Funktion hat keinen Eintrag in der Ledger-Liste eines Szenarios. | Füge einen Ledger-Eintrag mit der Funktions-ID, einem currentValue und dem erwarteten Ergebnis hinzu. |
| effectful action helpers are not supported | Eine Hilfsfunktion schreibt mit ledger.set oder ledger.add. | Lasse die Hilfsfunktion den Wert zurückgeben und schreibe ihn in der Aktion. |
| is not a writable state field | Eine fields-Liste nennt ein Feld, das nicht gespeichert ist, zum Beispiel eines, das eine Ledger-Funktion ableitet. | Liste nur gespeicherte Felder auf, die der Konstruktor zurückgibt. |
| is not satisfied: roll.missing | Ein Szenario verwendet die Methode roll ohne aufgezeichnete Würfe, oder ein Preset verwendet sie, und nur der Server kann würfeln. | Füge im Szenario poolRolls mit einem Slot pro Wert hinzu. Ein Preset kann roll nicht verwenden, gib dem Pool für Presets also eine andere Methode. |
| The roll dice must be one group such as | Die Würfel von roll sind keine einzelne Gruppe wie "3d6", zum Beispiel 3d6x5. | Schreibe eine Würfelgruppe und setze einen Multiplikator in den Schlüssel multiplier. |
| outside the min/max of input | Die Würfel können eine Summe ergeben, die eine Eingabe nicht erlaubt. | Erweitere min und max der Eingaben oder ändere die Würfel. |
| give exactly one roll per input. | count von roll weicht von der Anzahl der Eingaben im Pool ab. | Setze count auf die Anzahl der Eingaben. |
| must offer exactly the methods of pool | Die Optionen der Eingabe, die die Methode wählt, weichen von den Methoden des Pools ab. | Mache die Methodennamen zu den Optionen, nicht mehr und nicht weniger. |
| Required | Ein Schlüssel, den das Format braucht, fehlt. Der Bereich Probleme zeigt eine JSON-Liste. | Lies den Pfad in der Liste. Er nennt den fehlenden Schlüssel. Füge ihn hinzu. |
| Expected number, received string | Ein Schema-Schlüssel hat den falschen Typ. Der Bereich Probleme zeigt eine JSON-Liste. | Lies den path in der Liste. Er nennt den Schlüssel, zum Beispiel inputs, max_hp, min. Korrigiere diesen Wert. |
The Forge listet Probleme für jede Datei unter Probleme auf. Ein Regelproblem nennt auch Zeile und Spalte. Bei einem Konstruktor-Fehler stehen die ersten Unterschiede in der Meldung, am Ende steht, wie viele weitere ausgelassen wurden. Behebe die genannten und prüfe erneut.

