Framework in codice
Limiti ed errori
I limiti di un progetto e i messaggi che puoi vedere, con le loro soluzioni.
Limiti
| Limite | Valore |
|---|---|
| Dimensione del sorgente | 8 MiB |
| Dimensione del gioco compilato | 16 MiB |
| File | 1000 |
| Frameworks | 64 |
| File di scenario | 512 |
| Preset di contenuto per Framework | 512 |
| Preset di contenuto per Gioco | 2048 |
| Azioni per Framework | 96 |
| Azioni per Gioco | 192 |
| Funzioni del registro per Framework | 64 |
| Frame per Framework | Da 1 a 16 |
| Frame per Gioco | 128 |
| Sezioni per Framework | 64 |
| Opzioni di input | Da 2 a 128 |
| Passaggi di azione creati per progetto | 512 |
| Passaggi per azione | 64 |
| Passaggi per scenario | 32 |
| Controlli del registro per scenario | 32 |
| Scritture attese per passaggio | 64 |
Le righe sopra limitano il tuo sorgente. Fabled compila anche il tuo sorgente in un solo gioco, e questo gioco compilato deve restare sotto i 16 MiB prima di poter essere preparato.
Il server ricontrolla gli stessi limiti quando prepari un gioco e il suo verdetto è definitivo.
Errori e soluzioni
Ogni riga cita una parte di un messaggio. Il messaggio in The Forge può aggiungere il file, la riga o i nomi coinvolti.
| Messaggio | Causa | Soluzione |
|---|---|---|
| Project contains undeclared source files: rules/extra.ts. | Esistono file a cui nulla fa riferimento. Il messaggio elenca fino a cinque percorsi e indica il numero di file rimanenti. | Confronta i file dell'albero con il manifesto e gli schemi. Eliminare una funzione del registro lascia il suo file di regole, quindi elimina anche quel file. |
| Missing or misplaced project source. | Un percorso elencato non ha un file, oppure il file è nella cartella sbagliata. | Correggi il percorso o aggiungi il file. |
| Unrecognized key(s) in object | Un file JSON usa un campo che il formato non ha. | Rimuovi il campo o correggine l'ortografia. |
| Input name is hidden, so it must declare a defaultValue. | Un input nascosto non ha un valore predefinito. | Aggiungi un defaultValue, oppure mostra l'input. |
| must be one of its options | Un valore predefinito non è nell'elenco delle opzioni. | Usa una delle opzioni come valore predefinito. |
| Parameter max_hp 99 is not between 1 and 40. | Uno scenario o un preset viola i limiti di un input. | Cambia il valore o i limiti. |
| is not assigned to any section | Esistono sezioni, ma un input non è in nessuna. | Aggiungi l'input a una sezione. |
| Duplicate semantic identity or source path. | Due elementi condividono un id o un file sorgente. | Dai a ciascuno il proprio id e il proprio file. |
| Invalid child Framework constraint | Uno slot figlio punta a un Framework fuori dal gioco. | Usa l'id di un Framework di questo gioco. |
| Ledger function must target an existing scalar field. | Il campo non è tra quelli che il costruttore restituisce. | Restituisci il campo dal costruttore, oppure correggi il nome. |
| must define the required 'name' value | Un costruttore non restituisce un nome. | Restituisci un campo di testo chiamato name. |
| The entry framework must be a character constructor. | Il Framework di ingresso del manifest non è un personaggio. | Fai puntare entryFramework a un Framework di personaggio. |
| while loops are not allowed | Una regola usa un ciclo che potrebbe non finire. | Usa for of. |
| is a host global and not part of the TypeScript subset | Una regola usa Math o un altro oggetto globale. | Usa le chiamate dell'host, come math.min. |
| import is not allowed | Una regola importa codice. | Metti la logica nel file di regole stesso. |
| must return a value on every reachable path | Una funzione con un tipo di ritorno ha un percorso senza return. | Restituisci un valore su ogni percorso, oppure dichiara void. |
| is not declared on this schema | Un'azione scrive un campo che il costruttore non restituisce. | Restituisci il campo dal costruttore, oppure correggi il nome. |
| FRAME_BINDING_UNKNOWN | Un Frame collega un campo che non esiste. | Collega un campo dichiarato. |
| ACTION_MISSING | Un pulsante indica un alias di azione che non esiste. | Dichiara l'alias, oppure correggi il nome. |
| Expected ordered writes | Un'azione ha scritto qualcosa di diverso da expectedWrites. | Correggi la regola o le scritture attese. |
| Constructor output does not match its scenario. | expectedValues è diverso da ciò che il costruttore restituisce. | Correggi lo scenario o il costruttore. |
| SCENARIO_COVERAGE_MISSING | Un'azione non ha passi di scenario. | Aggiungi almeno un passo per l'azione. |
| is a non-writable state field | Un'azione scrive un valore che una funzione del registro ricava. | Scrivi un campo salvato e lascia che la funzione del registro ricavi il resto. |
| Action accesses require literal keys on self. | Un'azione indica un campo con un valore invece che con una stringa scritta nel codice. | Scrivi il nome del campo tra virgolette. Usa un'azione per ogni campo. |
| functions but only the action | Un file di azione esporta due funzioni. | Esporta una funzione per file di azione, oppure condividi il file tra azioni. Lascia le funzioni di supporto senza export. |
| the step expects it to be refused with | Un passo si aspetta un rifiuto, ma l'azione non è stata rifiutata. | Rimuovi expectedRefusal, oppure correggi l'offerta perché rifiuti. |
| Add expectedRefusal | Un passo su elenco è stato rifiutato, ma non lo dichiara. | Aggiungi expectedRefusal con il codice e nessuna scrittura. |
| Every ledger function needs an executable scenario. | Una funzione del registro non ha alcuna voce nell'elenco ledger di nessuno scenario. | Aggiungi una voce ledger con l'id della funzione, un currentValue e il risultato atteso. |
| effectful action helpers are not supported | Una funzione di supporto scrive con ledger.set o ledger.add. | Fai restituire il valore alla funzione di supporto e scrivilo nell'azione. |
| is not a writable state field | Un elenco fields indica un campo che non è memorizzato, come uno derivato da una funzione del registro. | Elenca solo campi memorizzati che il costruttore restituisce. |
| is not satisfied: roll.missing | Uno scenario usa il metodo roll senza tiri registrati, o lo usa un preset, e solo il server può tirare. | In uno scenario, aggiungi poolRolls con uno slot per punteggio. Un preset non può usare roll, quindi dai al pool un altro metodo per i preset. |
| The roll dice must be one group such as | I dadi di roll non sono un solo gruppo come "3d6", per esempio 3d6x5. | Scrivi un solo gruppo di dadi e metti il moltiplicatore nella chiave multiplier. |
| outside the min/max of input | I dadi possono dare un totale che un input non ammette. | Allarga min e max degli input, oppure cambia i dadi. |
| give exactly one roll per input. | Il count di roll è diverso dal numero di input della riserva. | Imposta count al numero di input. |
| must offer exactly the methods of pool | Le opzioni dell'input che sceglie il metodo sono diverse dai metodi della riserva. | Usa come opzioni i nomi dei metodi, né più né meno. |
| Required | Manca una chiave di cui il formato ha bisogno. Il pannello Problemi mostra un elenco JSON. | Leggi il percorso nell'elenco. Indica la chiave mancante. Aggiungila. |
| Expected number, received string | Una chiave dello schema ha il tipo sbagliato. Il pannello Problemi mostra un elenco JSON. | Leggi il path nell'elenco. Indica la chiave, per esempio inputs, max_hp, min. Correggi quel valore. |
The Forge elenca i problemi di ogni file nel pannello Problemi. Un problema di regola indica anche la riga e la colonna. Se il costruttore non corrisponde, il messaggio elenca le prime differenze e finisce con il numero di quelle omesse. Correggi quelle elencate e verifica di nuovo.

