概要
TyranoScriptで動的に生成したシナリオを実行することに成功したので、その方法を共有します。
できること
JavaScript側で生成したシナリオを、通常のシナリオと同じように実行できるようになります。
コード
まずはコードから
[iscript]
// 仮想シナリオを構築
let scenario = "";
scenario += "Hello World[l][r]\n";
scenario += "仮想シナリオのテストです[p]\n";
// 仮想シナリオをキャッシュに格納
const scenario_name = "$TestScenario$";
let parsed_scenario = TYRANO.kag.parser.parseScenario(scenario);
TYRANO.kag.cache_scenario[`./data/scenario/${scenario_name}`] = parsed_scenario;
[endscript]
; 仮想シナリオをコール
[jump storage="$TestScenario$"]
解説
Tyranoのシナリオキャッシュについて
Tyranoには1度ロードしたシナリオをキャッシュする機能があります。
この記事では、自前で生成した偽のキャッシュを読み込ませることで、ファイルとして存在しないシナリオを実行しています。
シナリオ生成部分
// 仮想シナリオを構築
let scenario = "";
scenario += "Hello World[l][r]\n";
scenario += "仮想シナリオのテストです[p]\n";
変数にシナリオを書き込んでいます。
ここを編集することで、より複雑なシナリオを生成することもできます。
偽キャッシュ生成部分
// 仮想シナリオをキャッシュに格納
const scenario_name = "$TestScenario$";
let parsed_scenario = TYRANO.kag.parser.parseScenario(scenario);
TYRANO.kag.cache_scenario[`./data/scenario/${scenario_name}`] = parsed_scenario;
Tyrano側の関数で生成したシナリオデータを読み込み、キャッシュに格納しています。
このとき、キーは./data/scenario/
の後にシナリオ名が続く形にしてください。
また、当たり前ですが実在するシナリオとパスが被ると、実在するシナリオの代わりに動的生成したシナリオが実行される場合があるので、絶対に被らないような名前にしてください。
シナリオ実行部分
; 仮想シナリオをコール
[jump storage="$TestScenario$"]
あとは普段と同じようにシナリオを実行するだけです。