Cheat EngineのAdd Fileについて
Cheat EngineのCTには外部ファイルを追加することができます。外部ファイルとはluaが記述されたテキストファイル、mp3ファイルなどです。例として下記のCTを見てみましょう。ゲーム名は「ELDEN RING」です。
eldenring.CT
https://opencheattables.org/viewtopic.php?p=1103#p1103
サイトが閉鎖されたみたいです。
下記のリンクを右クリックから「名前を付けてリンク先を保存」を選択しダウンロードしてください。
https://dl.dropboxusercontent.com/s/0fdap7i9fgddwl2/eldenring.CT
[ENABLE]セクションのonEnable()、collectWeaponNames()などはすべて外部ファイルに定義されています。Cheat EngineのメニューにあるTableをクリックすると以下のようにファイルが添付されています。
.luaファイルにはこのCTで使われている関数がluaで定義されています。このように機能ごとにファイルを分けることによって可読性が良くなったり、編集しやすくなるなどの利点があります。ただ単にテキストファイルを追加しただけでは関数を使うことができません。コンパイルする必要があるのです。どのようにしてコンパイルするのか、下記画像のloadTableFiles関数に注目してください。
tFileListには全部で8つのファイル名が記載されており、それらをすべてコンパイルします。
処理の流れとしては、findTableFile(name)でtFileListのTableFileオブジェクトを作成後、StringStreamオブジェクトにコピー、StringStreamオブジェクトをStringListに変換、Forループで1つずつloadString関数を使ってコンパイル。
これで外部ファイルの関数が使えるようになります。
loadString関数の仕様については下記サイトをご参照ください。
http://www.rtpro.yamaha.co.jp/RT/docs/lua/tutorial/library.html#loadstring
サンプルコード
Forループを使わず単一ファイルをコンパイルする場合のコードは以下の通り。
function loadTableCode(n) local t = findTableFile(n) if t ~= nil then local s = t.Stream local c = readStringLocal(s.Memory,s.Size) loadstring(c)() end end loadTableCode('TestFunc.lua') testFunc() testFunc2()
Cheat EngineメインウインドウのMemory ViewからCtrl + LでLua Engineを起動して上記のコードを貼り付ける。続いて、下記のコードを記載したTestFunc.luaというファイルを作成。
function testFunc() print("Hello World!") end function testFunc2() print("Hello World 2!") end
Cheat EngineのメニューからTable → Add fileでTestFunc.luaを追加。
この状態でLua Engineの右端にあるExcuteボタンをクリックし、OutputウインドウにHello Worldが表示されれば成功です。