変数・関数・データ型
ワールドロジックのルールは、変数で値を記憶して計算します。スコア・残り試行回数・クエストの段階などの値に使います。関数は、複数のルールが共有するアクションのまとまりです。enum とデータ型は、値を決まった形にまとめます。
| 機能 | 動作 | 使う type |
|---|---|---|
| 変数 | 値を記憶します。 | アクション「変数を設定」(set_var)・条件「比較」(compare)・式 {名前} |
| 関数 | 他のアクションから呼ばれたときだけ実行されるルールです。 | トリガー「関数」(function)・呼び出しアクション 5 種 |
| enum | 決まった値のうち 1 つだけを持つ型です。 | 変数・データ型のフィールドの型 |
| データ型 | 複数のフィールドからなる型です(クラスに似ています)。 | 変数の型 |
| 内容 | どこで |
|---|---|
| 変数・enum・データ型ウィンドウ | ワールドロジックパネル左上の「変数」ボタン |
| 変数を設定・比較・関数の type | ワールドロジックパネルの「アクションを追加」・「条件を追加」・トリガー type メニューの「変数 · 関数」グループ、またはロジックグラフのノードを追加ウィンドウ |
クイックスタート
Section titled “クイックスタート”プレイヤーごとにスコアを数え、10 点になったらタイトルを表示します。
- ワールドロジックパネルの「変数」を押します。
- 「変数」タブで「変数を追加」を押します。
- 名前
score、型int、範囲「プレイヤー」、初期値0にします。 - 「適用」を押します(Ctrl+Z で 1 段階)。
- スコアを与えるルールに、アクション「変数を設定」を追加します。変数
score、計算add、値1にします。 - 同じルールに、アクション「分岐(もし)」を追加します。左
{score}、比較>=、右10にします。 - ロジックグラフで、「真なら」行の黄色のピンを空いている場所にドロップします。新しい「関数」ルール(
func_1)が作成されます。 - その関数ルールに、アクション「画面タイトル」を追加します。
「変数」タブの 1 行が変数 1 つです。
| 欄 | 意味 |
|---|---|
| 名前 | 式の中では {名前} として使います。 |
| 型 | 基本型・enum・データ型のいずれか |
| 範囲 | グローバル(シーン 1 つに値 1 つ)・プレイヤー(プレイヤーごとに値 1 つ) |
| 初期値 | 空の場合は型のゼロ値です。 |
| 型 | 値の例 | 初期値(空のとき) |
|---|---|---|
bool | true・false | false |
int | 3 | 0 |
float | 2.5 | 0 |
string | こんにちは | 空の文字列 |
player | プレイヤー名 | 空の文字列 |
actor | アクター id | 空の文字列 |
position | x y z(空白で区切る) | 0 0 0 |
| enum | その enum の値の 1 つ | 最初の値 |
| データ型 | フィールドごとの値(下記) | フィールドごとの初期値 |
値はすべて文字列として保存されます。数値は小数第 3 位まで使います。
宣言していない名前も使えます。その名前はグローバルの文字列変数になります。条件「フラグ」・アクション「フラグを設定」と同じ保存領域を使います。宣言は、型・プレイヤー範囲・初期値が必要なときに行います。
値の欄(「変数を設定」の値、「比較」の左・右など)には式を書きます。
{名前}をその値に置き換えます。- 残った文字列が数値と
+-*/%()だけなら計算します(例:{score} * 2 + 1)。 - そうでなければ、置き換えた文字列をそのまま使います(例:
{player} さん、ようこそ)。
- 0 での割り算は 0 です。
- 不明な名前は空の文字列になります。
名前を探す順序は、ローカル変数(関数の引数・{index})→ プレイヤー別変数 → グローバル変数 → 特別な名前です。
| 特別な名前 | 値 |
|---|---|
{player} | トリガーした人の名前 |
{player_x}・{player_y}・{player_z} | トリガーした人の位置 |
{player_pos} | トリガーした人の位置 x y z |
{time} | シーン開始からの経過秒数 |
{random} | 0〜1 のランダムな数 |
{index} | 「繰り返し」の中での現在の番号(0, 1, 2 …) |
アクション「変数を設定」(set_var)の欄です。
| 欄 | 値 | 意味 |
|---|---|---|
| 変数 | 名前 | データ型の変数なら、hero.hp のようにフィールドまで書きます。 |
| 範囲 | auto・global・player・local | auto = 宣言どおり。宣言がない場合は、同じ名前のローカル変数があればローカル、なければグローバル。local = この実行の中だけ |
| 計算 | 下の表 | |
| 値 | 式 |
| 計算 | 意味 |
|---|---|
set | 値で置き換えます。 |
add・sub・mul・div・mod | 足し算・引き算・掛け算・割り算・余り。0 で割ると 0 です。 |
min・max | 現在の値と比べて小さい方・大きい方 |
append | 文字列を後ろに付け足します。 |
toggle | true ↔ false を反転します(値は使いません)。 |
現在の値が数値でない場合、数値計算では 0 とみなします。
条件「比較」(compare)とアクション「分岐(もし)」は、左・比較・右の欄で比較します。
| 比較 | 意味 |
|---|---|
==・!= | 両方が数値なら数値として、そうでなければ文字列として比較します(大文字・小文字を区別)。 |
<・<=・>・>= | 数値だけを比較します。数値でなければ偽です。 |
contains | 左の文字列に右の文字列が含まれる |
starts_with | 左の文字列が右の文字列で始まる |
関数は、トリガーが「関数」であるルールです。自動では起きません。呼び出しアクションが名前で呼んだときだけ実行されます。
| 「関数」トリガーの欄 | 意味 |
|---|---|
| 関数名 | 呼ぶときに使う名前です。 |
| 引数名 | カンマで区切った名前(例: amount, target)。呼ぶときに渡した値がローカル変数 {amount} になります。 |
- 関数は、呼び出し元のトリガーした人を引き継ぎます。
- 関数ルールの条件が偽の場合、その関数だけをスキップします。
- 関数ルールでは、フィルター(1 回のみ・クールダウン・権限)は使われません。
呼び出しアクション
Section titled “呼び出しアクション”| アクション | type | 欄 | 動作 |
|---|---|---|---|
| 関数を呼ぶ | call | 関数・引数(名前=式, …) | 関数を実行し、終わったら次のアクションへ |
| 順番に(シーケンス) | sequence | 関数(カンマ区切り) | 複数の関数を順に実行。前の関数が終わってから次の関数 |
| 分岐(もし) | branch | 左・比較・右・真なら・偽なら | 比較して関数を 1 つ呼ぶ。該当する側が空なら何もしない |
| 繰り返し | repeat | 回数(1〜100)・関数 | 関数を回数分だけ順に実行。{index} = 0, 1, 2 … |
| プレイヤーごと | for_each_player | 受け取る人・関数 | 受け取る人ごとに、その人をトリガーした人として関数を順に実行 |
- 呼んだ関数が「待機」に達すると、呼び出し元も一緒に待ちます。関数が終わってから次のアクションへ進みます。
- 関数が関数を呼ぶ深さは 16 までです。超えると打ち切ってエラーを記録します(再帰ループ)。
- 引数の式は呼び出し時に計算します。
0.9.11 以降: 呼び出し欄 1 つには関数を 1 つだけ書きます。複数の関数を書くと検査エラーになります。順に呼ぶには「順番に(シーケンス)」を使います。同じ名前の関数ルールが 2 つ以上ある場合も検査エラーになります。
関数とシグナルの違い
Section titled “関数とシグナルの違い”| 関数 | シグナル | |
|---|---|---|
| 呼び出すアクション | 関数を呼ぶ・順番に・分岐・繰り返し・プレイヤーごと | シグナルを送信 |
| 受け取る側 | その名前の「関数」ルール 1 つ | その名前の「シグナルを受けたとき」ルールすべて(ブロードキャスト) |
| 待機 | 関数が終わるまで待つ(wait を含む) | 待たない |
| グラフ | 黄色の関数ピン — ピン 1 つに線 1 本 | シグナルピン — 受け取るルールすべてに線 |
0.9.11 以降: 「変数」ウィンドウが 3 つのタブ(変数・enum・データ型)に変わりました。
「enum」タブで「enum を追加」を押します。
| 欄 | 例 |
|---|---|
| 名前 | Job |
| 値(カンマ区切り) | warrior, mage, archer |
- 変数・データ型のフィールドの型として選べます。
- その型の変数の初期値は、指定した初期値、なければ最初の値です。
- enum にない初期値や「変数を設定」の値は、検査で注意が出ます。
「データ型」タブで「データ型を追加」を押し、「フィールドを追加」でフィールドを追加します。
| 欄 | 例 |
|---|---|
| データ型名 | Hero |
| フィールド名・フィールドの型・初期値 | hp・int・20 / job・Job / gold・int |
フィールドの型は、基本型・enum・他のデータ型です。
データ型の変数は、フィールドごとの値に展開されます。変数 hero(型 Hero)は次のように使います。
| 使う場所 | 例 |
|---|---|
| 式 | {hero.hp}・{hero.job} |
| 「変数を設定」の変数欄 | hero.hp |
| 「比較」の左 | {hero.job} |
| 入れ子のデータ型 | {hero.stats.str} |
- 範囲は変数の宣言に従います。
hero全体に「変数を設定」すると検査エラーになります。フィールドを指定します。- データ型の変数の初期値は、フィールドごとに(データ型タブで)指定します。変数の行の初期値は使われません。
「適用」を押すと検査し、問題を通知で表示します。
| 種類 | 内容 |
|---|---|
| エラー | 命名ルール(英字で始まり、英字・数字・_)・名前の重複(基本型・enum・データ型の間)・値のない enum・フィールドのないデータ型・存在しない型・自分自身を含むデータ型(ループ)・データ型全体への「変数を設定」・重複した変数宣言 |
| 注意 | enum にない初期値・enum にない「変数を設定」の値・データ型の変数の行の初期値 |
関数側の検査は次のとおりです。
| 種類 | 内容 |
|---|---|
| エラー | 存在しない関数名・同じ名前の関数ルール・呼び出し欄 1 つに複数の関数 |
| 注意 | 呼び出しアクションのない関数・関数ルールでオンにしたフィルター |
「ワールドロジック 変数・enum・データ型」ウィンドウのボタンです。
| ボタン | 動作 |
|---|---|
| 変数を追加・enum を追加・データ型を追加 | 新しい行を追加します。 |
| フィールドを追加 | データ型にフィールドを追加します。 |
| 削除(ゴミ箱) | その行・フィールドを削除します。 |
| 適用 | 3 つのタブをまとめて保存します。元に戻すは 1 段階です。 |
| 閉じる | 保存せずに閉じます。 |
ショートカット
Section titled “ショートカット”| キー | 動作 |
|---|---|
| Esc | ウィンドウを閉じる(適用していない内容は破棄) |
| Ctrl+Z | 「適用」を元に戻す |
ヒント / 注意
Section titled “ヒント / 注意”- 「適用」を押すまでは何も保存されません。
- プレイ中の変数の値は、プレイのワールドロジック履歴(「変数名 = 値」の行)で確認できます。
- サーバープラグインも同じルールで変数・関数を実行する必要があります。サーバー側の対応状況は、サーバープラグインのバージョンを確認してください。
- サーバーでは、データ型の変数は展開した名前(
hero.hpなど)で保存されます。