メインコンテンツへスキップ

コードフレームワーク

上限とエラー

プロジェクトの上限と、表示される可能性のあるメッセージおよびその対処です。

上限

上限値
ソースのサイズ8 MiB
コンパイル後のゲームのサイズ16 MiB
ファイル数1000
フレームワーク数64
シナリオファイル数512
フレームワークあたりのコンテンツプリセット数512
ゲームあたりのコンテンツプリセット数2048
フレームワークあたりのアクション数96
ゲームあたりのアクション数192
フレームワークあたりのレジャー関数数64
フレームワークあたりのフレーム数1 から 16
ゲームあたりのフレーム数128
フレームワークあたりのセクション数64
入力の選択肢数2 から 128
プロジェクトごとの作成済みアクションステップ数512
アクションごとのステップ数64
シナリオごとのステップ数32
シナリオごとのレジャー確認数32
ステップごとの期待される書き込み数64

上の行はソースの上限です。Fabled はソースを 1 つのゲームにもコンパイルします。準備を始める前に、そのコンパイル後のゲームを 16 MiB 未満にする必要があります。

ゲームを準備するとき、サーバーが同じ上限をもう一度確認します。その判定が最終結果です。

エラーと対処

各行はメッセージの一部を引用しています。The Forge のメッセージには、ファイル、行、関係する名前が加わる場合があります。

メッセージ原因対処
Project contains undeclared source files: rules/extra.ts.どこからも参照されていないファイルがあります。メッセージには最大5件のパスと、残りのファイル数が表示されます。ツリーのファイルを、マニフェストとスキーマと見比べます。レジャー関数を削除してもそのルールファイルは残るので、そのファイルも削除します。
Missing or misplaced project source.列挙されたパスにファイルがないか、ファイルが誤ったフォルダにあります。パスを修正するか、ファイルを追加します。
Unrecognized key(s) in objectJSON ファイルが、形式に存在しないフィールドを使っています。フィールドを削除するか、綴りを直します。
Input name is hidden, so it must declare a defaultValue.hidden の入力にデフォルトがありません。defaultValue を追加するか、入力を表示します。
must be one of its optionsデフォルトが選択肢のリストにありません。選択肢のいずれかをデフォルトにします。
Parameter max_hp 99 is not between 1 and 40.シナリオまたはプリセットが、入力の範囲を外れています。値または範囲を変更します。
is not assigned to any sectionセクションがありますが、どのセクションにも入っていない入力があります。入力をセクションに追加します。
Duplicate semantic identity or source path.2 つの項目が ID またはソースファイルを共有しています。それぞれに固有の ID とファイルを付けます。
Invalid child Framework constraint子スロットが、ゲームの外のフレームワークを指しています。このゲームにあるフレームワークの ID を使います。
Ledger function must target an existing scalar field.フィールドが、コンストラクタの返すものではありません。コンストラクタからそのフィールドを返すか、名前を直します。
must define the required 'name' valueコンストラクタが name を返していません。name という文字列のフィールドを返します。
The entry framework must be a character constructor.マニフェストのエントリーフレームワークがキャラクターではありません。entryFramework をキャラクターのフレームワークに向けます。
while loops are not allowedルールが、終わらない可能性のあるループを使っています。for of を使います。
is a host global and not part of the TypeScript subsetルールが Math などのグローバルを使っています。math.min などのホスト呼び出しを使います。
import is not allowedルールがコードをインポートしています。ロジックをルールファイルの中に書きます。
must return a value on every reachable path戻り値の型を持つ関数に、return のない経路があります。すべての経路で値を返すか、void を宣言します。
is not declared on this schemaアクションが、コンストラクタの返さないフィールドに書き込んでいます。コンストラクタからそのフィールドを返すか、名前を直します。
FRAME_BINDING_UNKNOWNフレームが、存在しないフィールドにバインドしています。宣言済みのフィールドにバインドします。
ACTION_MISSINGボタンが、存在しないアクションのエイリアスを指定しています。エイリアスを宣言するか、名前を直します。
Expected ordered writesアクションが expectedWrites と異なる内容を書き込みました。ルールまたは期待する書き込みを修正します。
Constructor output does not match its scenario.expectedValues が、コンストラクタの返す値と異なります。シナリオまたはコンストラクタを修正します。
SCENARIO_COVERAGE_MISSINGアクションにシナリオのステップがありません。アクションに少なくとも 1 つのステップを追加してください。
is a non-writable state fieldアクションが、レジャー関数で導き出される値を書き込んでいます。保存されるフィールドに書き込み、残りはレジャー関数に導き出させてください。
Action accesses require literal keys on self.アクションが、コードに書かれた文字列ではなく、値でフィールドを指定しています。フィールド名を引用符で囲んで書きます。フィールドごとにアクションを 1 つ使います。
functions but only the actionアクションのファイルが 2 つの関数をエクスポートしています。アクションファイルごとに関数を 1 つエクスポートするか、ファイルをアクション間で共有します。補助関数には export を付けません。
the step expects it to be refused withステップは拒否を期待していますが、アクションは拒否されませんでした。expectedRefusal を削除するか、オファーが拒否するように直します。
Add expectedRefusalリストのステップは拒否されましたが、そのことが書かれていません。コードを指定した expectedRefusal を追加し、書き込みは書きません。
Every ledger function needs an executable scenario.どのシナリオの ledger リストにも、そのレジャー関数のエントリがありません。関数 ID、currentValue、期待する結果を持つ ledger エントリを追加します。
effectful action helpers are not supported補助関数が ledger.set または ledger.add で書き込んでいます。補助関数に値を返させ、書き込みはアクションで行います。
is not a writable state fieldfields の一覧に、保存されていないフィールド、たとえばレジャー関数が導出するフィールドが含まれています。コンストラクターが返す保存フィールドだけを列挙します。
is not satisfied: roll.missingシナリオが記録されたロールなしで roll メソッドを使っているか、プリセットが使っています。ロールできるのはサーバーだけです。シナリオでは、値ごとに 1 つのスロットを持つ poolRolls を追加します。プリセットは roll を使えないので、プリセット用に別のメソッドをプールに与えてください。
The roll dice must be one group such asroll のダイスが "3d6" のような 1 つのグループになっていません。たとえば 3d6x5 です。ダイスは 1 つのグループで書き、倍率は multiplier キーに入れてください。
outside the min/max of inputダイスが、入力で許可されていない合計を出す可能性があります。入力の min と max を広げるか、ダイスを変えます。
give exactly one roll per input.roll の count が、プールの入力の数と違っています。count を入力の数に合わせます。
must offer exactly the methods of pool方式を選ぶ入力の選択肢が、プールの方式と一致していません。選択肢を方式名とちょうど同じにします。
Required形式に必要なキーがありません。「問題」パネルには JSON の一覧が表示されます。一覧のパスを読みます。パスが足りないキーを示すので、そのキーを追加します。
Expected number, received stringスキーマのキーの型が違います。「問題」パネルには JSON のリストが表示されます。リストの path を読みます。inputs、max_hp、min のように、キーを示しています。その値を直します。

The Forge は、ファイルごとの問題を「問題」に一覧表示します。ルールの問題には、行と列も示されます。コンストラクタの不一致では、最初の差分が列挙され、末尾に省略された件数が示されます。列挙された分を直して、もう一度検証してください。

サーバーが再度検証します