Stellaris

Stellaris

Not enough ratings
[Stellaris3.6.1]Variablesのお話とset_nameの不思議な挙動について
By fatal_errorjp
自作Mod「艦隊番号を振り直せ」( https://steamproxy.net/sharedfiles/filedetails/?id=2920402460 )作成時、set_nameの謎の挙動の検証で滅茶苦茶大変だったので、なにがどうだったかをメモとして残しておきます

ちなみに、サンプルコードには一部綺麗ではないコードが混ざっています
set_variable_to_random_valueとかcheck_variable_arithmeticの存在を
このガイド書くために情報をまとめていてから初めて気がついたので
それを書けば早いって場面で使ってないんですよね…
   
Award
Favorite
Favorited
Unfavorite
1. Variablesについて
国家や艦隊などに、Mod用のオリジナルのパラメータを追加したい場合に
活用できる機能として、StellarisにはVariablesという機能が用意されています。

プログラム言語でいう変数値にあたるようなものですね。
詳細については英語Wiki[stellaris.paradoxwikis.com]を見て貰うのが一番なのですが、
それだとガイドにならないのでここに使い方を簡単にまとめておきます。
1-1. Effectで利用できるVariables
とりあえず先に表から。

Effect名
説明
記述例
set_variable
現在のスコープに、whichで指定した変数名をセットする
set_variable = { which = <string> value = <float>/<variable>/<scope.variable>/trigger:<trigger> }
clear_variable
現在のスコープから指定した変数名を消去する
clear_variable = <string>
change_variable
value値を加算する
change_variable = { which = <string> value = <float>/<variable>/<scope.variable>/trigger:<trigger> }
subtract_variable
value値で減算する
subtract_variable = { which = <string> value = <float>/<variable>/<scope.variable>/trigger:<trigger> }
multiply_variable
value値をかける
multiply_variable = { which = <string> value = <float>/<variable>/<scope.variable>/trigger:<trigger> }
divide_variable
value値で割る
divide_variable = { which = <string> value = <float>/<variable>/<scope.variable>/trigger:<trigger> }
modulo_variable
value値で割ったときの余りを計算する
modulo_variable = { which = <string> value = <float>/<variable>/<scope.variable>/trigger:<trigger> }
set_variable_to_random_value
指定範囲内のランダムな数値を変数に格納する
set_variable_to_random_value = { which = <string> min = -100 max = 100 rounded = yes/no }
export_modifier_to_variable
現在のスコープに適用されている補正値を、指定した変数名に格納する
export_modifier_to_variable = { modifier = pop_growth_speed_reduction variable = <string> }
export_trigger_value_to_variable
trigger式の値を、指定した変数名に格納する(num_popsの場合なら、pop数を変数に入れる)
export_trigger_value_to_variable = { trigger = <trigger名> (num_buildingsなど) parameters = { type = building_clone_army_clone_vat disabled = no } (optional: 必要に応じて指定した<trigger名>の"{}"の中身を記述する variable = <string> (格納先の変数名) rounded = yes (default: no) }
export_resource_stockpile_to_variable
エネルギーなどの国家のリソースの備蓄を指定した変数名に格納する
export_resource_stockpile_to_variable = { resource = energy variable = <string> }
export_resource_income_to_variable
エネルギーなどの国家の月次収入の値を指定した変数名に格納する
export_resource_income_to_variable = { resource = energy variable = <string> }
get_galaxy_setup_value
ゲーム開始時の設定内容を指定した変数名に格納する
get_galaxy_setup_value = { which = <string> setting = <string> scale_by = <float> (optional: 数値の分だけ乗算する) } 利用可能なsettingの値: num_empires num_advanced_empires num_fallen_empires num_marauder_empires mid_game_year end_game_year victory_year num_guaranteed_colonies num_gateways num_wormhole_pairs num_hyperlanes habitable_worlds_scale primitive_worlds_scale crisis_strength_scale tech_costs_scale
1-2. Triggerで利用できるVariables
Trigger名
説明
記述例
is_variable_set
現在のスコープに対象の変数名が存在するかどうかをチェックする
is_variable_set = <string>
check_variable
変数の値をチェックする
check_variable = { which = <variable> value >=< <float>/<variable>/<scope.variable>/trigger:<trigger> }
check_variable_arithmetic
変数の値をチェックする(計算した上で、最終的な計算結果と比較できる)
check_variable_arithmetic = { which = <variable> add/subtract/multiply/divide/modulo = <float>/<variable>/<scope.variable>/trigger:<trigger> (note: this line can be repeated as many times as desired) value <=> <float>/<variable>/<scope.variable>/trigger:<trigger> (the value to compare against) }
1-3. Variableの使用例
実際の使用例をいくつか紹介します。
1-3-1. 使用例1
以下は、私の自作Mod「ロボットPOPを統合したい」のコードの一部です。
このコードは毎月初めに呼び出され、3~12POPをfromfromの種族へと変換します。

# robot_integration\events\robot_integration_events.txtのコードの一部を抜粋 # 各惑星毎の処理 # root:planet 対象の惑星 # from:country 対象の国家 # fromfrom:統合化後のspecies planet_event = { id = robot_integration.3 hide_window = yes is_triggered_only = yes trigger = { any_owned_species = { has_citizenship_type = { type = citizenship_robot_integration country = from } } } immediate = { # 統合化させるPOP数を設定する random_list = { 1 = { set_variable = { which = robot_integration_counter value = 3 } } 1 = { set_variable = { which = robot_integration_counter value = 6 } } 1 = { set_variable = { which = robot_integration_counter value = 12 } } } # 統合化させるPOP数だけ統合処理を実施する while = { count = robot_integration_counter limit = { any_owned_pop = { has_citizenship_type = { type = citizenship_robot_integration country = from } } } random_owned_pop = { limit = { has_citizenship_type = { type = citizenship_robot_integration country = from } } change_species = fromfrom } } clear_variable = robot_integration_counter } }

random_listの部分で、robot_integration_counterという名前の変数をセットしています。
この変数をwhileのcountに指定することで、指定の回数分のPOPを変換しているというわけです。
※Ver3.6からはrandom_listではなく、set_variable_to_random_valueでランダム値を発行できるようになったので、こちらのコードはそれに直してもいいかもしれません。
1-3-2. 使用例2
以下は、私の自作Mod「帝国マップを見やすくしたい」のコードの一部です。

# custom_map_mode\common\scripted_effects\custom_map_mode_scripted_effects.txtのコードの一部を抜粋 ################################################# # 帝国マップ用のパラメータ(custom_map_country_number)を付与する # custom_map_country_numberは0~124までの数字を各国に順番につけていく。 # 125を越える場合は0に戻る。 # SCOPE: COUNTRY ################################################# custom_map_mode_add_country_number = { if = { limit = { not = { is_variable_set = custom_map_country_number } } set_variable = { which = custom_map_country_number value = -1 } ordered_country = { limit = { custom_map_mode_is_target_country = yes is_variable_set = custom_map_country_number check_variable = { which = custom_map_country_number value >= 0 } } order_by = custom_map_country_number prev = { set_variable = { which = custom_map_country_number value = prev.custom_map_country_number } } } change_variable = { which = custom_map_country_number value = 1 } modulo_variable = { which = custom_map_country_number value = 125 } } }

# custom_map_mode\common\map_modes\custom_map_modes.txtのコードの一部を抜粋 ########################################################### # 帝国マップ ########################################################### custom_map_empire_mode = { icon = "GFX_map_mode_default" enable_terra_incognita = yes can_change_point_of_view = no color = { value = rgb { 255 255 255 0 } condition = { check_variable = { which = custom_map_country_number value = 0 } } hardcoded_tooltip = country } color = { value = rgb { 0 0 255 0 } condition = { check_variable = { which = custom_map_country_number value = 1 } } hardcoded_tooltip = country } ...(省略) color = { value = rgb { 255 192 255 0 } condition = { check_variable = { which = custom_map_country_number value = 123 } } hardcoded_tooltip = country } color = { value = rgb { 255 255 192 0 } condition = { check_variable = { which = custom_map_country_number value = 124 } } hardcoded_tooltip = country } color = { value = country condition = { always = yes } hardcoded_tooltip = country } }

custom_map_mode_add_country_numberは、
新規の帝国が作成されたタイミングで呼び出されます。
この処理では、各国にcustom_map_country_numberという変数が付与され、
値は常に最後に作成された国の番号+1が付与されることがわかります。
※125を越える場合は0に戻ると書いてあるけど、
 今見ると125以上の場合が考慮された作りになってないな…

付与された変数「custom_map_country_number」は、
Mod固有のマップモード「custom_map_empire_mode」の
check_variableの部分で使われており、
国家の色を「custom_map_country_number」の値にて
出し分けていることがわかるかと思います。
1-3-3. 使用例3
以下は、私の自作Mod「ゲーム設定を確認したい」のコードの一部です。

# show_settings\events\show_settings_events.txtのコードの一部を抜粋 # 状況レポートにゲーム設定を表示する country_event = { id = show_settings.1 hide_window = yes is_triggered_only = yes trigger = { is_ai = no } immediate = { #...(省略) # ミッドゲーム開始年 get_galaxy_setup_value = { which = setup_value_mid_game_year setting = mid_game_year } change_variable = { which = setup_value_mid_game_year value = 2200 } # エンドゲーム開始年 get_galaxy_setup_value = { which = setup_value_end_game_year setting = end_game_year } change_variable = { which = setup_value_end_game_year value = 2200 } # 勝利年 get_galaxy_setup_value = { which = setup_value_victory_year setting = victory_year } change_variable = { which = setup_value_victory_year value = 2200 } #...(省略) #### # 状況レポートの追加 #### begin_event_chain = { event_chain = show_settings_game_start_chain target = root } } }

# show_settings\localisation\show_settings_l_japanese.ymlコードの一部を抜粋 l_japanese: #...(省略) SHOW_SETTING_12:0 "§L$FE_MID_GAME$§!§W: [This.setup_value_mid_game_year]§!\n" SHOW_SETTING_13:0 "§L$FE_END_GAME$§!§W: [This.setup_value_end_game_year]§!\n" SHOW_SETTING_14:0 "§L$FE_VICTORY$§!§W: [This.setup_value_victory_year]§!\n" #...(省略)

get_galaxy_setup_valueというEffectを利用すると
ゲーム開始時の設定の一部をVariablesの変数に格納することが可能です。

ミッドゲーム開始年やエンドゲーム開始年は、実際に取れる値は
ゲーム開始時から○年後という数字のため、get_galaxy_setup_valueで値を取得した後、
change_variableでゲーム開始年である2200を足すようにしています。

また、変数値は画面に表示することも可能です。
ローカライズ定義で [スコープ.変数名]と記載することで呼び出せます。
例では「show_settings_l_japanese.yml」にて、
[This.setup_value_mid_game_year]などと記載しているのがわかると思います。
2. set_nameについて
さて、本題です。
Variablesの値を惑星や艦隊の名前として使えたら嬉しいですよね。
例えばアウトライナーの上から順番に艦隊名をリネームできたら最高だと思いませんか。

リネーム用のEffectがあります。
これを使えばできそうですよね。

Effect名
説明
記述例
set_name
以下のスコープの名称を変更します。
・country
・planet
・ship
・fleet
・leader
・army
・system
・pop faction

"[]"で囲まれたブラケットコマンドは利用できません。
(ブラケットは展開されず、書いたまま出力されます。)
set_name = <key>
set_name
以下のスコープの名称を変更します。
・country
・planet
・ship
・fleet
・leader
・army
・system
・pop faction

"[]"で囲まれたブラケットコマンドを利用する場合はこちらを利用してください。
set_name = { key = <string> variable_string = <Bracket Commands> (例: "[This.GetName]" 複数のブラケットコマンドがある場合は何回でも記述可能。) }

でも実はこれ…一部不思議な挙動をすることがあります。
とりあえず使い方の例を見てみましょう。
2-1. テスト1 一番簡単な使い方
テスト用に国家名を変更するイベントを作って見ました。

# events\test_events.txt namespace = test # test1 # 一番簡単なset_nameの例 country_event = { id = test.1 hide_window = yes is_triggered_only = yes trigger = {} immediate = { set_name = SET_TEST_NAME_1 } }
# localisation\test_l_japanese.yml l_japanese: SET_TEST_NAME_1:0 "名称変更テスト1"

変更したい国家の外交画面を表示した上で、コンソールコマンドでこのイベントを呼び出してみましょう。
event test.1




国家名が「名称変更テスト1」に変更しましたね。
これがset_nameの一番簡単な使い方になります。
2-2. テスト2 ブラケット使用(駄目な例)
ブラケットコマンドを使うと、現状の国家名を使い回して、元の国家名の前後に名前を追加する等と言った対応が可能です。
例えば、[This.GetName]は、国家名そのものを表します。
先ほどのファイルに、以下の記述を追加します。

# events\test_events.txt追加コード # test2 # ブラケットコマンドを利用する場合(駄目な例) country_event = { id = test.2 hide_window = yes is_triggered_only = yes trigger = {} immediate = { set_name = SET_TEST_NAME_2 } }
#localisation\test_l_japanese.yml追加コード SET_TEST_NAME_2:0 "名称変更テスト2[This.GetName]"

変更したい国家の外交画面を表示した上で、コンソールコマンドでこのイベントを呼び出してみましょう。
event test.2




おや…上手くいきませんね?
2-3. テスト3 ブラケット使用(正しい例)
set_nameでブラケットコマンドを使う場合は、variable_stringに対象のブラケットコマンドを指定する必要があります。
先ほどのファイルに、以下の記述を追加します。

# events\test_events.txt追加コード # test3 # ブラケットコマンドを利用する場合(正しい例) country_event = { id = test.3 hide_window = yes is_triggered_only = yes trigger = {} immediate = { set_name = { key = "SET_TEST_NAME_3" variable_string = "[This.GetName]" } } }
#localisation\test_l_japanese.yml追加コード SET_TEST_NAME_3:0 "名称変更テスト3[This.GetName]"

変更したい国家の外交画面を表示した上で、コンソールコマンドでこのイベントを呼び出してみましょう。
event test.3




今度は上手く変更できました。
元の名前「名称変更テスト2This.GetName」の手前に「名称変更テスト3」という名前が挿入されています。

ちなみに複数のブラケットコマンドを同時に指定することも可能です。
その場合は、以下のように必要な数だけvariable_stringを記載するようにしてください。
set_name = { key = <key> variable_string = "<command1>" variable_string = "<command2>" variable_string = "<command3>" ... }
2-4. テスト4 Variables使用(駄目な例)
さて、このブラケットコマンドの書き方を利用して、変数値を呼び出してみましょう。
理屈の上ではset_variableでセットした変数をブラケットコマンドで呼び出せるはずです。
先ほどのファイルに、以下の記述を追加します。

# events\test_events.txt追加コード # test4 # 変数を指定する(何故か駄目な例) country_event = { id = test.4 hide_window = yes is_triggered_only = yes trigger = {} immediate = { set_variable = { which = rename_num value = 1 } set_name = { key = "SET_TEST_NAME_4" variable_string = "[This.rename_num]" } } }
#localisation\test_l_japanese.yml追加コード SET_TEST_NAME_4:0 "名称変更テスト4[This.rename_num]"

変更したい国家の外交画面を表示した上で、コンソールコマンドでこのイベントを呼び出してみましょう。
event test.4




呼び出せたけど…なにかおかしいですね。
set_variableで1をセットしたので、国家名は「名称変更テスト4」ではなく「名称変更テスト41」になるのが正しいはずです。

エラーログを見てみましょう。
エラーログは「C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\logs\error.log」にあります。
[14:13:43][game_text.cpp:1075]: Unknown property `rename_numPersistent` in text: rename_numPersistent]

rename_numPersistentとは一体なんだ…?
テストコードのset_nameで指定したのはrename_numであって後ろにPersistentをつけた別の変数ではないはず…?
2-5. Persistentの謎
Persistent、謎ですよね
これについて調べていくと、1つヒントとなるものがありました。

Stellarisはゲーム開始時にMod参考用のドキュメントを生成してくれます。
「C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\logs\script_documentation」以下に格納されている「localizations.log」には、ブラケットコマンドとして表現できる一覧が羅列されています。

Countryスコープで使えるブラケットコマンドの一覧は以下の通りです。

--Country-- Promotions: Capital Ruler Heir Species Federation Properties GetName GetNamePersistent GetAdj GetAdjective GetAdjPersistent GetAdjectivePersistent GetSpeciesName GetSpeciesNamePersistent GetSpeciesAdj GetSpeciesAdjPersistent GetSpeciesNamePlural GetSpeciesNamePluralPersistent GetSpeciesClass GetSpeciesClassPlural GetAllianceName GetAllianceNamePersistent GetRulerName GetRulerNamePersistent GetRulerTitle GetRulerTitlePersistent GetHeirName GetHeirTitle GetPersonalityName GetSpeciesNameInsult GetSpeciesNamePluralInsult GetSpeciesNameCompliment GetSpeciesNamePluralCompliment GetSpeciesSpawnName GetSpeciesSpawnNamePlural GetSpeciesOrganName GetSpeciesOrganNamePlural GetSpeciesMouthName GetSpeciesHandName GetSpeciesHandNamePlural GetSpeciesEarName GetSpeciesEarNamePlural GetSpeciesToothName GetSpeciesToothNamePlural GetSpeciesFossilName GetSpeciesFossilNamePlural GetSpeciesRemnantName GetSpeciesRemnantNamePlural GetRandomSpeciesSound GetHomeWorldName GetHomeWorldNamePersistent GetLastLostRelic GetLastReceivedRelic GetGovernmentName GetRealName GetCountryType GetOriginName

ところどころでPersistent付きのブラケットコマンドが見えますね。
このことから、set_nameのvariable_stringにGetNameと指定した場合は、実際はGetNameではなくてGetNamePersistentが呼び出せるのではないかという仮説を建てました。
どうしてそういう動きをするのかの説明は書いていないし内部コードもわからないので謎ですが、そういう動きをしていそうな気がします。
2-6. テスト5 Variables使用(何故か上手くいく例)
仮説を実証するために、先ほどのファイルに、以下の記述を追加します。

# events\test_events.txt追加コード # test5 # 変数を指定する(何故か上手くいく例) country_event = { id = test.5 hide_window = yes is_triggered_only = yes trigger = {} immediate = { set_variable = { which = rename_numPersistent value = 1 } set_name = { key = "SET_TEST_NAME_5" variable_string = "[This.rename_num]" } } }
#localisation\test_l_japanese.yml追加コード SET_TEST_NAME_5:0 "名称変更テスト5[This.rename_num]"

set_variableではPersistent付きの変数を指定して、set_nameのvariable_stringからはPersistentの記述を外しました。
変更したい国家の外交画面を表示した上で、コンソールコマンドでこのイベントを呼び出してみましょう。
event test.5




上手くいきました。しっかりとset_variableでセットした1という変数名で名称変更ができています。
エラーログにもエラーメッセージは出ていません。
2-7. テスト6 scripted_effectsにコードを移動する(駄目な例)
コードを他のイベントでも使い回したい場合は、scripted_effectsに記述して呼び出すような作りにすることがあります。

set_name周りはさて、このブラケットコマンドの書き方を利用して、変数値を呼び出してみましょう。
理屈の上ではset_variableでセットした変数をブラケットコマンドで呼び出せるはずです。
先ほどのファイルに、以下の記述を追加します。

# events\test_events.txt追加コード # test6 # scripted_effectsに記述する(駄目な例) country_event = { id = test.6 hide_window = yes is_triggered_only = yes trigger = {} immediate = { test_effect_6 = yes } }
# common\scripted_effects\test_scripted_effects.txt test_effect_6 = { set_variable = { which = rename_numPersistent value = 1 } set_name = { key = "SET_TEST_NAME_6" variable_string = "[This.rename_num]" } }
#localisation\test_l_japanese.yml追加コード SET_TEST_NAME_6:0 "名称変更テスト6[This.rename_num]"

この状態でゲームを起動するとエラーログが表示されます。
[16:37:29][metascript.cpp:204]: Invalid macro entry in test_effect_6: his.rename_num

なんでやねん
2-8. テスト7 scripted_effectsにコードを移動する(正しい例)
ブラケットコマンドをscripted_effectsで記述する場合は、「\\」でエスケープしてあげる必要があるようです。
ということでtest6は削除して改めてコードを追加しましょう。

# events\test_events.txt追加コード # test7 # scripted_effectsに記述する(正しい例) country_event = { id = test.7 hide_window = yes is_triggered_only = yes trigger = {} immediate = { test_effect_7 = yes } }
# common\scripted_effects\test_scripted_effects.txt test_effect_7 = { set_variable = { which = rename_numPersistent value = 1 } set_name = { key = "SET_TEST_NAME_7" variable_string = "\\[This.rename_num]" } }
#localisation\test_l_japanese.yml追加コード SET_TEST_NAME_7:0 "名称変更テスト7[This.rename_num]"

変更したい国家の外交画面を表示した上で、コンソールコマンドでこのイベントを呼び出してみましょう。
event test.7




上手く動きました。エラーメッセージもありません。
2-8. テスト8 scripted_locを利用する
変数の値をそのまま使うのではなく、変数の値で分岐して別のテキストを出力したい場合があります。
その場合は、scripted_locを利用すると表現が可能です。
例えば変数に応じたテキストカラーを指定できたら面白いですよね。
次のテストコードを追加してください。

# events\test_events.txt追加コード # test8 # scripted_locを利用する例 country_event = { id = test.8 hide_window = yes is_triggered_only = yes trigger = {} immediate = { if = { limit = { is_variable_set = rename_numPersistent } change_variable = { which = rename_numPersistent value = 1 } modulo_variable = { which = rename_numPersistent value = 7 } } else = { set_variable = { which = rename_numPersistent value = 0 } } set_name = { key = "SET_TEST_NAME_8" variable_string = "[This.rename_num]" variable_string = "[This.GetTestColor]" } } }
# common\scripted_loc\test_scripted_loc.txt defined_text = { name = GetTestColor text = { trigger = { check_variable = { which = rename_numPersistent value = 1 } } localization_key = GET_TEST_COLOR_1 } text = { trigger = { check_variable = { which = rename_numPersistent value = 2 } } localization_key = GET_TEST_COLOR_2 } text = { trigger = { check_variable = { which = rename_numPersistent value = 3 } } localization_key = GET_TEST_COLOR_3 } text = { trigger = { check_variable = { which = rename_numPersistent value = 4 } } localization_key = GET_TEST_COLOR_4 } text = { trigger = { check_variable = { which = rename_numPersistent value = 5 } } localization_key = GET_TEST_COLOR_5 } text = { trigger = { check_variable = { which = rename_numPersistent value = 6 } } localization_key = GET_TEST_COLOR_6 } default = GET_TEST_COLOR_0 }
#localisation\test_l_japanese.yml追加コード SET_TEST_NAME_8:0 "[This.GetTestColor]名称変更テスト8[This.rename_num]§!" GET_TEST_COLOR_0:0 "§W" GET_TEST_COLOR_1:0 "§R" GET_TEST_COLOR_2:0 "§G" GET_TEST_COLOR_3:0 "§B" GET_TEST_COLOR_4:0 "§H" GET_TEST_COLOR_5:0 "§M" GET_TEST_COLOR_6:0 "§Y"

このイベントは、呼び出される度にrename_numの変数を0→1→2…と変更します。
6までいくと0に戻ります。
test_scripted_locでこの変数に応じた色を指定しており、0なら白、1なら赤、2なら緑…などと変化します。

変更したい国家の外交画面を表示した上で、コンソールコマンドでこのイベントを呼び出してみましょう。
event test.7










エラーログも出ておらず、scripted_loc周りについてはPersistentは意識しなくて良いようです。
謎ですね…。
(追記)Persistentは不要だった
ここまでPersistentとかいう謎仕様と戦いながらコードを書いてきましたが、
実はPersistentを使わなくても良いということに気がついたので追記します。

今までのコードに、次のテストコードを追加してください。

# events\test_events.txt追加コード # test9 # Persistentなど不要! country_event = { id = test.9 hide_window = yes is_triggered_only = yes trigger = {} immediate = { if = { limit = { is_variable_set = rename_num } change_variable = { which = rename_num value = 1 } modulo_variable = { which = rename_num value = 7 } } else = { set_variable = { which = rename_num value = 0 } } set_name = { key = "SET_TEST_NAME_9" variable_string = "[This.GetTest9]" variable_string = "[This.GetTestColor]" } } }
# common\scripted_loc\test_scripted_loc.txt defined_text = { name = GetTest9 value = This.rename_num }
#localisation\test_l_japanese.yml追加コード SET_TEST_NAME_9:0 "[This.GetTestColor]名称変更テスト9[This.GetTest9]§!"

そう、実はscripted_locからVariablesの値を直接呼び出して記述することができるみたいです。
テストコードを実行して動作確認してみましょう。
これで解決ですね!
event test.9

以上です。
1 Comments
fatal_errorjp  [author] 10 Feb, 2023 @ 3:31am 
ガイド最下部に「(追記)Persistentは不要だった」を追加
set_name辺りの仕組みはにわかには厳しいね…