ScenarioModは、C/C++ 言語としてのメインの文法とは別に、「L」というLuaの「画用紙」のような空間を持っています。
「ScnearioMod」側からこの画用紙に書き込むこともできますし、外部のファイル(lua形式)からこの画用紙に書き込むこともできます。
このことを理解しておけば、ScenarioMod側と、Lua側で連携したコードでも、その挙動をよく理解できるようになります。
それでは、以下のようなことを行います。
一気に全部やると、理解が難しいので、最初の2つだけみてみましょう。
void Lという画用紙の理解() { // ①番目。 try { LUA::Do_コマンド("my_var = 3"); // 画用紙に書き込み実行 } catch (...) { } // ②番目。 try { LUA::Do_ファイル("Test1.lua"); // Test1.luaの内容を画用紙に書き込み実行。 } catch(...) { } } void カスタム::On_起動時() { Lという画用紙の理解(); }
そして、以下のように対象となるluaファイルを「天翔記フォルダ」に用意します。
-- L画用紙からの読み書き my_var = my_var + 10 -- dprintという関数は、普通のluaにはない。 -- printと同じ挙動だが、表示先が「ModDebugger」である。 dprint("luaからModdebuggerに表示:") dprint(my_var)
理解できますか?
ScenarioModとLuaで、「同じ画用紙」を相手に読み書きしているからこそ、
「13」という値となるのです。
それでは続きです。
void Lという画用紙の理解() { // ①番目。 try { LUA::Do_コマンド("my_var = 3"); // 画用紙に書き込み実行 } catch (...) { } // ②番目。 try { LUA::Do_ファイル("Test1.lua"); // Test1.luaの内容を画用紙に書き込み実行。 } catch(...) { } // ③番目。 int import_var = 0; try { // 画用紙からの読み込み。 // Lの画用紙の数値は全て「実数」として取り扱われるため、整数が欲しいなら、整数へと落とす。 import_var = (int)LUA::Get_グローバル数値("my_var"); デバッグ出力 << "ScenarioModからModDebuggerに表示" << endl; デバッグ出力 << import_var << endl; } catch (...) { } } void カスタム::On_起動時() { Lという画用紙の理解(); }
さて、4番目を実装してみましょう。
新たに、以下のような、luaファイルを「天翔記フォルダ」に用意します。
-- 関数を定義する。 -- このファイルを実行した際は、「関数の定義が画用紙に書かれる」だけ。 -- 関数の中身は、my_plusを呼ばない限り実行されない。 function my_plus( x ) ret_var = my_var + x -- my_var と x が足される dprint(ret_var) -- ModDebuggerに表示 end
最後の5番目の実装です。
void Lという画用紙の理解() { // ①番目。 try { LUA::Do_コマンド("my_var = 3"); // 画用紙に書き込み実行 } catch (...) { } // ②番目。 try { LUA::Do_ファイル("Test1.lua"); // Test1.luaの内容を画用紙に書き込み実行。 } catch(...) { } // ③番目。 int import_var = 0; try { // 画用紙からの読み込み。 // Lの画用紙の数値は全て「実数」として取り扱われるため、整数が欲しいなら、整数へと落とす。 import_var = (int)LUA::Get_グローバル数値("my_var"); デバッグ出力 << "ScenarioModからModDebuggerに表示" << endl; デバッグ出力 << import_var << endl; } catch (...) { } // ⑤番目。 try { LUA::Do_ファイル("Test2.lua"); // Test2.luaの内容を画用紙に書き込み実行。 LUA::Do_コマンド("my_plus(100)"); // 文字列を画用紙に書き込み実行 } catch(...) { } } void カスタム::On_起動時() { Lという画用紙の理解(); }
さて、画用紙に書かれた内容は、最終的にどうなものだったのでしょうか?
以下のようになったのです。
my_var = 3 my_var = my_var + 10 dprint("luaからModdebuggerに表示:") dprint(my_var) function my_plus( x ) ret_var = my_var + x dprint(ret_var) end my_plus(100)