0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TyranoScriptで動的に生成したシナリオを実行してみる

Last updated at Posted at 2023-09-19

概要

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$"]

あとは普段と同じようにシナリオを実行するだけです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?