4.7 KiB
4.7 KiB
Validator — プレイせずに MOD を検査する
Validator は、実行中のゲームのすべての MOD——マニフェスト、データファイル、シナリオ、シーンパッチ、C# ソース——を読み、壊れているか怪しいものを報告します。誰も宣言していないアイテム・シーン・背景への参照、不明なシナリオコマンド、誤ったパラメーター、不足した依存関係。ゲームが始まるたびにバックグラウンドで走り、レポートを書くので、タイプミスはプレイヤーがその行に到達する前に見つかります。
検査するのはファイルに見えるものだけです。Validator はゲームをプレイしません: 受け入れられたシナリオでも、作者の意図どおりに動くとは限らず、実行時に id を組み立てるコードは追えません。
誤りとその修正
プレイヤーに狼の肉を与えるシナリオの行。アイテム id にタイプミスがあります:
scene: home_kitchen
priority: 0
---
action item.add id=food/wolf_meet count=1
end
次に Cthangover を起動すると、レポートにこれが入ります:
{
"severity": "error",
"code": "REF_NOT_FOUND",
"message": "item 'food/wolf_meet' is referenced but never declared",
"mod": "cthangover_game",
"file": "scenarios/doc_validator_demo.scenario",
"line": 4,
"suggestion": "declare item 'food/wolf_meet' or fix the reference",
"related": null
}
MOD、ファイル、行が誤りを指し示します。food/wolf_meat に直せば問題は消え、概要のエラー数がひとつ減ります(この実行では 18 から 17 へ)。
実行のしかたとレポートの読み方
- それを含むゲームに入ると(Cthangover は開発者ツールと一緒に同梱します)、MOD の読み込みのあとで自動的に始まり、バックグラウンドスレッドで走ります。ゲームは止まりません。
- ログには一巡ごとに一行入ります:
validator: started, 33 mod(s) queued、そのあとにエラー・警告・情報の合計。 - レポートは
user://validation/report.json(ゲームのユーザーデータフォルダー)に書かれます。概要、バージョンとチェックサム付きの検査済み MOD、そして問題の一覧が入ります。
問題ごとに:
severity—error(壊れている)、warning(おそらく誤り)、info(見ておく価値がある。たとえばどこからも参照されないアイテム);code— 問題の種類。たとえばREF_NOT_FOUND、JSON_PARSE_ERROR、SCHEMA_MISSING_FIELD、SCHEMA_UNKNOWN_PARAM、DECL_UNUSED、DYNAMIC_KEY;mod、file、line— どこを直すか;suggestion— 何をすればいいか。
DYNAMIC_KEY の情報は、キーが実行時に組み立てられるため Validator が検査できないことを意味します。エラーではありません。
何を検査するか
検査は三つのフェーズで走ります:
- スキーマ —
manifest.jsonに文字列のidとversionがある; JSON ファイルが解釈できる。 - 契約 — 各 MOD が何を宣言し、何を参照するか: あらゆる種類のエンティティ(キャラクター、アイテム、クエスト、スキル、レシピ、行動、そしてスキーマが記述した種類)、シナリオのコマンドと行動とそのパラメーター、シーンパッチ、C# コードが読み書きするプロパティ。
- 突き合わせ — すべての参照に宣言がある、
dependsが他の MOD から使うものを覆っている、誰にも使われない宣言の一覧。
シナリオの行動とパラメーターは、MOD が同梱するスキーマに対して(Schemas を参照)、コマンドパレットと同じ規則で検査されます。
設定
Modマネージャーのこの MOD の設定タブで:
- Enabled、Run on start — 一巡を止める;
- Parse C#、Parse GDScript(既定ではオフ、遅い)、Parse scenarios — どのソースを読むか;
- Write report、Report path —
report.jsonの行き先; - Block mods on error — 設定にはありますが、現行バージョンでは何も変わりません: MOD が止められることはありません。
うまくいかないとき
- レポートがない。 一巡が終わる前にゲームが閉じられた(Cthangover では 30 秒ほど)か、Write report がオフです。
DYNAMIC_KEYの行が多い。 キーを組み立てるコードでは普通のことです。情報扱いです。