CLEOで追加されたOpcodeです。
0A8C~0AB0はCLEO 2で、0A92~0ABA, 0ABD~0ABFはCLEO 3で追加されました。
0ABB, 0ABC, 0AC0~0AEFは有志による次期バージョンであるCLEO 4で追加されました。
CLEO 4は3までとは別の人が作っているので一部で互換性の問題も報告されていますが、アップデートで解消していくそうです。
CLEOがインストールされていればmain.scmなどでも使用できると思いますが、インストールされていない環境も考慮して.csなどでのみ使うのがよいでしょう。
- メモリ書き込み
- メモリ読み込み
- 加算
- 減算
- 乗算
- 除算
- CPedポインタ(アドレス)取得
- CVehicleポインタ(アドレス)取得
- CObjectポインタ(アドレス)取得
- カレントディレクトリ変更
- ファイルを開く
- ファイルを閉じる
- ファイルサイズ取得
- ファイル読み込み
- ファイル書き込み
- 自スレッドのポインタ(アドレス)取得
- 偽の時にサブルーチンへ飛ぶ
- 偽の時にサブルーチンから返る
- DLL読み込み
- DLL解放
- DLL内の関数のポインタ(アドレス)取得
- 関数コール(__cdecl/__stdcall、戻り値なし)
- 関数コール(__thiscall、戻り値なし)
- 関数コール(__cdecl/__stdcall、戻り値あり)
- 関数コール(__thiscall、戻り値あり)
- バージョンが1.0か
- ファイルが存在するか
- MP3読み込み
- MP3再生
- MP3解放
- MP3の長さ取得
- キーが押されているか
- ファイルからスレッド作成
- カスタムスレッド終了
- カスタムミッション開始
- スレッド内容をセーブする
- 特定のスレッドのポインタ(アドレス)取得
- SCM関数呼び出し
- SCM関数リターン
- CLEO変数代入
- CLEO変数取得
- 人に最も近い人・車のハンドル取得
- ターゲットマーカーの位置取得
- 車のギア数を取得
- 車の現在のギアを取得
- MP3の再生状態を取得
- 特定の名前のカスタムスレッドを終了
- MP3の音量を取得
- MP3の音量を設定
- 車のサイレンが鳴っているか
- 車のエンジンが掛かっているか
- 車のエンジンの状態を変更
- MP3をループさせる
- 位置情報を持ったMP3読み込み
- 位置情報を持ったMP3の位置設定
- 位置情報を持ったMP3をオブジェクトにくっつける
- 位置情報を持ったMP3を人にくっつける
- 位置情報を持ったMP3を車にくっつける
- ラベルのアドレスを取得
- 変数のアドレスを取得
- メモリ領域を確保
- メモリ領域を開放
- テキストボックスを表示
- テキストを表示
- 字幕を表示
- 字幕を表示(優先)
- テキストボックス表示(書式指定可能)
- テキストを表示(書式指定可能)
- 字幕を表示(書式指定可能)
- 字幕を表示(優先)(書式指定可能)
- プレイヤーが狙っている人を取得
- sprintf
- sscanf
- fseek
- feof
- fgets
- fputs
- fprintf
- fscanf
- 車の名前(GXTキー)を取得
- 入力された文字列をチェック
- チートのように車を出現させる
- GXTキーから文字列を取得
- ダイナミックGXTにキーを追加
- ダイナミックGXTからキーを削除
- 座標近くの人をランダムに取得
- 座標近くの車をランダムに取得
- 座標近くのオブジェクトをランダムに取得
- ディレクトリが存在するか
- ディレクトリを作成
- _findfirst
- _findnext
- _findclose
- FPUのスタックをポップ
- CPedポインタ(アドレス)からハンドルを取得
- CVehicleポインタ(アドレス)からハンドルを取得
- CObjectポインタ(アドレス)からハンドルを取得
- 浮動小数点数を文字列に変換
- 指数計算
- 対数計算
メモリ書き込み
0A8C: write_memory 0xC0BC15 size 1 value 1 virtual_protect 0
0xC0BC15 書き込むアドレス。
size 書き込むサイズ。1、2、4バイトのいずれか。
value 書き込む値。整数、浮動小数点数の即値及び変数を指定可能。
virtual_protect ページの保護を変更するか。1で変更すると実行領域にも書き込めるようになる。
メモリ読み込み
0A8D: $result = read_memory 1@ size 4 virtual_protect 0
$result 代入する変数。整数、浮動小数点数の変数。
1@ 読み込むアドレス。
size 読み込むサイズ。1、2、4バイトのいずれか。
virtual_protect ページの保護を変更するか。1で変更すると読み取り禁止領域からも読み取れるようになる。
加算
0A8E: 4@ = 5@ + 6@ // int
4@ 演算結果を代入する変数。
5@ 6@ 引数。整数のみ。変更されない。
減算
0A8F: $var = 0@(1@,2i) - 1 // int
$var 演算結果を代入する変数。
0@(1@,2i) 1 引数。整数のみ。変更されない。
乗算
0A90: $var(0@,10i) = 100 * 1@ // int
$var(0@,10i) 演算結果を代入する変数。
100 1@ 引数。整数のみ。変更されない。
除算
0A91: $div = 1 / 5 // int
$div 演算結果を代入する変数。
1 5 引数。整数のみ。変更されない。
CPedポインタ(アドレス)取得
0A96: $ActorStruct = actor $PLAYER_ACTOR struct
$ActorStruct ポインタを代入する変数。
$PLAYER_ACTOR 人のハンドル。
CVehicleポインタ(アドレス)取得
0A97: $CarStruct = car $MyCar struct
$CarStruct ポインタを代入する変数。
$MyCar 車のハンドル。
CObjectポインタ(アドレス)取得
0A98: $ObjectStruct = object 0@ struct
$ObjectStruct ポインタを代入する変数。
0@ 物のハンドル。
カレントディレクトリ変更
0A99: chdir 0
ファイル関係で使うカレントディレクトリを変更する。
0 GTA_SA.EXEのあるディレクトリ。
1 GTA San Andreas User Filesディレクトリ。(セーブデータ、設定ファイルがある。)
ファイルを開く
0A9A: $hFILE = open_file "settings.ini" mode 0x72 // IF and SET
Cランタイム ライブラリの関数。$hFILE = fopen("settings.ini", "r"); 相当。
https://ja.cppreference.com/w/c/io/fopen
ファイルパスが相対パスの場合は0A99で設定されたディレクトリからのパスになる。
CLEO 3の場合、モードは数値(文字コード)でしか指定できない("r"なら0x72、"rb"なら0x6272、等)
CLEO 4の場合は文字列・数値どちらでも可。
ifの中で使うと開くのに成功すると真を、失敗すると偽を返す。
ファイルを閉じる
0A9B: close_file $hFILE
Cランタイム ライブラリの関数。fclose($hFILE); 相当。
https://ja.cppreference.com/w/c/io/fclose
ファイルサイズ取得
0A9C: 0@ = file $hFILE size
0@ ファイルサイズ(バイト単位)を代入する変数。
$hFILE 0A9Aで取得したファイルハンドル。
ファイル読み込み
0A9D: read_file $hFILE size 2 to $150
Cランタイム ライブラリの関数。fread($150, 2, 1, $hFILE); 相当。
https://ja.cppreference.com/w/c/io/fread
読み込むバイト数が4バイトを超えた場合は、複数の変数にまたがって格納される。
ファイル書き込み
0A9E: write_file $hFILE size 128 from 0@
Cランタイム ライブラリの関数。fwrite(0@, 128, 1, $hFILE); 相当。
https://ja.cppreference.com/w/c/io/fwrite
書き込むバイト数が4バイトを超えた場合は、複数の変数にまたがって書き込まれる。
この場合は0@~31@の内容が書き込まれる。
自スレッドのポインタ(アドレス)取得
0A9F: 0@ = current_thread_pointer
0@ スレッドのポインタを代入する変数。
偽の時にサブルーチンへ飛ぶ
0AA0: gosub_if_false @CREATE_NEW_ACTOR
@CREATE_NEW_ACTOR サブルーチンのハンドル
004D(jf)のgosub版。
偽の時にサブルーチンから返る
0AA1: return_if_false
004Dのreturn版。
DLL読み込み
0AA2: $hLIB = load_library "CLEO\version.dll" // IF and SET
$hLIB 開いたライブラリのハンドルを代入する変数。
"CLEO\version.dll" 開くライブラリのパス。相対パスの場合は0A99で設定されたディレクトリからのパスになる。
ifの中で使うと開くのに成功すると真を、失敗すると偽を返す。
読み込んだあとCLEOの処理の前にDllMain(DLL_PROCESS_ATTACH)が呼ばれる。
.cleo、.asiも.dllと中身は同じ。.asiは起動した時点で読み込まれるのでこのコードでは読まないのが賢明。
DLL解放
0AA3: free_library $hLIB
$hLIB 0AA2で取得したハンドル。
解放する直前CLEOの処理の前にDllMain(DLL_PROCESS_DETACH)が呼ばれる。
DLL内の関数のポインタ(アドレス)取得
0AA4: $hPROC = get_proc_address "GetVersion" library $hLIB // IF and SET
$hPROC 関数のポインタを代入する変数。
"GetVersion" 関数の名前。
$hLIB 0AA2で取得したハンドル。
取得するには当然ながらDLL側で関数に__declspec(dllexport)が指定されていないといけない。
取得した関数は0AA5、0AA6、0AA7、0AA8で呼び出せる。
関数コール(__cdecl/__stdcall、戻り値なし)
0AA5: call_function $hPROC num_params 1 pop 1 $param
$hPROC 関数ポインタ。
num_params pushする引数の数。
pop popする引数の数。__cdeclならpushと同数、__stdcallなら0。
$param pushする引数。この場合は1つ。
関数コール(__thiscall、戻り値なし)
0AA6: call_method $Destroy struct $CarStruct num_params 0 pop 0
$Destroy 関数ポインタ。
$CarStruct ecxに格納するクラスのポインタ。
num_params pushする引数の数。
pop popする引数の数。__thiscallでは0。
pushする引数はこの場合無いが、ある場合はコードの最後に続けて書く。
関数コール(__cdecl/__stdcall、戻り値あり)
0AA7: call_function_return 0x569660 num_params 2 pop 2 $COORD_Y $COORD_X $GROUND
0x569660 関数ポインタ。
num_params pushする引数の数。
pop popする引数の数。__cdeclならpushと同数、__stdcallなら0。
$COORD_X $COORD_Y pushする引数。2つ以上の場合は本来とは逆の順番で指定する点に注意(x, y ではなく y, x)。これは0AA5~0AA8のいずれも同様。
$GROUND 戻り値(eax)を代入する変数。
関数コール(__thiscall、戻り値あり)
0AA8: call_method_return 0x4048E0 struct 0xB74494 num_params 1 pop 0 $MyCar 0@
0x4048E0 関数ポインタ。
0xB74494 ecxに格納するクラスのポインタ。
num_params pushする引数の数。
pop popする引数の数。__thiscallでは0。
$MyCar pushする引数。この場合は1つ。
0@ 戻り値(eax)を代入する変数。
バージョンが1.0か
0AA9: is_game_version_original
1.0の場合は真、それ以外の場合は偽を返す。
ファイルが存在するか
0AAB: file_exists "CLEO\version.dll"
"CLEO\version.dll" 確認するファイルのパス。相対パスの場合は0A99で設定されたディレクトリからのパスになる。
存在する場合は真、存在しない場合は偽を返す。
MP3読み込み
0AAC: $hMP3 = load_mp3 "CLEO\playlist\01.mp3"
$hMP3 読み込んだMP3のハンドルを格納する変数。
"CLEO\playlist\01.mp3" 読み込むMP3のパス。相対パスの場合は0A99で設定されたディレクトリからのパスになる。
環境によってはフリーズしたり順延が発生することがある。
MP3再生
0AAD: set_mp3 $hMP3 perform_action 1
$hMP3 0AACで取得したハンドル。
perform_action 状態を指定
0 停止
1 再生
2 一時停止
3 続行
MP3解放
0AAE: release_mp3 $hMP3
$hMP3 0AACで取得したハンドル。
MP3の長さ取得
0AAF: 0@ = get_mp3_length $hMP3
0@ MP3の長さ(秒・整数)を代入する変数。
$hMP3 0AACで取得したハンドル。
キーが押されているか
0AB0: is_key_pressed 0x73
0x73 仮想キーコード。
押されている場合は真、押されていない場合は偽が返る。
https://learn.microsoft.com/ja-jp/windows/win32/inputdev/virtual-key-codes
ファイルからスレッド作成
0A92: create_custom_thread "ShowTextBox.s"
"ShowTextBox.s" コンパイル済みファイル。.csと同フォーマット。パスは CLEO\ からの相対パス。
コードの後ろに引数を続けて書くと順に0@、1@へ代入される。
カスタムスレッド終了
0A93: end_custom_thread
004Eの.cs版。CLEOでは通常とは別の領域にスレッドを置いているため004Eを実行してはならない。
カスタムミッション開始
0A94: start_custom_mission "missions\CustomMission1"
"missions\CustomMission1" コンパイル済みファイル。.csと同フォーマットだが拡張子は.cmにする。パスは CLEO\ からの相対パス。
この例だと CLEO\missions\CustomMission1.cm が読み込まれる。
スレッド内容をセーブする
0A95: enable_thread_saving
セーブ時にスレッドの状態も保存されるようになるが、たまにセーブデータをロードできなくなる。
特定のスレッドのポインタ(アドレス)取得
0AAA: 0@ = get_script_struct_named 'OTB'
0@ スレッドのポインタを代入する変数。見つからない場合はNULL(0)が代入される。
'OTB' スレッド名。03A4で設定されたもの。
SCM関数呼び出し
0AB1: call_scm_func @GetSQR 1 10 $result
@GetSQR 関数のラベル。
1 引数の数。
10 引数。この場合は1つ。
$result 戻り値を代入する変数。複数指定可。呼び出し先の0AB2と数が一致する必要アリ。
gosubの拡張版。
関数を呼び出す際に現在のローカル変数は全て別の場所に退避され、その上で与えた引数が先頭から呼び出し先の0@, 1@...へと代入される。
SCM関数リターン
0AB2: ret 1 0@
1 戻り値の数。不要なら0。
0@ 戻り値。この場合は1つ。0AB1での戻り値を代入する変数と数が一致する必要アリ。
returnの拡張版。
関数呼び出し時に退避されていたローカル変数を全て元に戻し、その上で戻り値が0AB1で指定した変数へと返される。
CLEO変数代入
0AB3: cleo_shared_var 0 = 10
0 CLEO変数のインデックス。0~999。
10 代入する値。
CLEO変数はゲーム中に実行されている全てのスレッドで共通。
スクリプト間でのデータ共有に使用できるが、特に自作でないスクリプトとの番号被りに注意。
CLEO変数取得
0AB4: 0@ = cleo_shared_var 0
0@ 値を代入する変数。
0 CLEO変数のインデックス。0~999。
人に最も近い人・車のハンドル取得
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@
$PLAYER_ACTOR 中心となる人のハンドル。
0@ 最も近い車のハンドルを代入する変数。存在しない場合は-1。
1@ 最も近い人のハンドルを代入する変数。存在しない場合は-1。
ターゲットマーカーの位置取得
0AB6: get_target_blip_coords_to 0@ 1@ 2@ // IF and SET
0@ 1@ 2@ ターゲットマーカーの座標を代入する変数。
ifの中で使うとターゲットマーカーが設定されていると真を、設定されていないと偽を返す。
ターゲットマーカーとは、マップ上を右クリックでつけられる黒丸に赤十字のアイコンのこと。
車のギア数を取得
0AB7: get_vehicle $CAR number_of_gears_to 10@
$CAR 車のハンドル。
10@ ギア数を代入する変数。
handling.cfgのTransmissionData.nNumberOfGearsの値が代入される。
車の現在のギアを取得
0AB8: get_vehicle $CAR current_gear_to 11@
$CAR 車のハンドル。
11@ ギア段階を代入する変数。
MP3の再生状態を取得
0AB9: get_mp3 $hMP3 state_to 7@
$hMP3 0AACで取得したハンドル。
7@ 再生状態を代入する変数。
1 再生中
2 一時停止中
-1 停止中
特定の名前のカスタムスレッドを終了
0ABA: end_custom_thread_named 'BENZIN'
'BENZIN' 終了するカスタムスレッドの名前。03A4で設定したもの。
MP3の音量を取得
0ABB: 0@ = audiostream $hMP3 volume
0@ 音量が格納される変数。
$hMP3 0AACで取得したハンドル。
MP3の音量を設定
0ABC: set_audiostream $hMP3 volume 0@
$hMP3 0AACで取得したハンドル。
0@ 設定する音量。
車のサイレンが鳴っているか
0ABD: vehicle 0@ siren_on
0@ 車のハンドル。
車のエンジンが掛かっているか
0ABE: vehicle 0@ engine_on
0@ 車のハンドル。
車のエンジンの状態を変更
0ABF: set_vehicle 0@ engine_state_to 0
0@ 車のハンドル。
0 0でエンジンオフ、1でエンジンオン。
MP3をループさせる
0AC0: audiostream $hMP3 loop 1
$hMP3 0AACで取得したハンドル。
位置情報を持ったMP3読み込み
0AC1: $hMP3 = load_audiostream_with_3d_support "sample.mp3" //IF and SET
$hMP3 読み込んだMP3のハンドルを格納する変数。
"sample.mp3" 読み込むMP3のパス。相対パスの場合は0A99で設定されたディレクトリからのパスになる。
環境によってはフリーズしたり順延が発生することがある。
ifの中で使うと開くのに成功すると真を、失敗すると偽を返す。
位置情報を持ったMP3の位置設定
0AC2: set_3d_audiostream $hMP3 position 0@ 1@ 2@
$hMP3 0AC1で取得したハンドル。
0@ 1@ 2@ 設定する座標。
位置情報を持ったMP3をオブジェクトにくっつける
0AC3: link_3d_audiostream $hMP3 to_object $object
$hMP3 0AC1で取得したハンドル。
$object くっつけるオブジェクトのハンドル。
位置情報を持ったMP3を人にくっつける
0AC4: link_3d_audiostream $hMP3 to_actor $actor
$hMP3 0AC1で取得したハンドル。
$actor くっつける人のハンドル。
位置情報を持ったMP3を車にくっつける
0AC5: link_3d_audiostream $hMP3 to_vehicle $car
$hMP3 0AC1で取得したハンドル。
$car くっつける車のハンドル。
ラベルのアドレスを取得
0AC6: 0@ = label @label pointer
0@ アドレスを格納する変数。
@label ポインタを取得したいラベル。
以下の処理と全く同じ結果を1行で得られる。
0A9F: 0@ = current_thread_pointer 000A: 0@ += 0x10 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 000E: 0@ -= @label
変数のアドレスを取得
0AC7: 0@ = var 1@ pointer
0@ アドレスを格納する変数。
1@ ポインタを取得したい変数。
変数が0@の場合は
0A9F: 0@ = current_thread_pointer 000A: 0@ += 0x3C
とまったく同じ。
変数が$0の場合は
0006: 0@ = 0xA49960
とまったく同じ。
メモリ領域を確保
0AC8: 0@ = allocate_memory_size 260
0@ 確保したメモリのアドレスを格納する変数。
260 確保するメモリのサイズ。バイト単位。
メモリ領域を開放
0AC9: free_allocated_memory 0@
0@ 0AC8で取得したアドレス。
テキストボックスを表示
0ACA: show_text_box 0@v
0@v 表示する文字列。文字列、文字列変数、アドレスのいずれか。
03E5の文字列指定版。
テキストを表示
0ACB: show_styled_text 0@v time 1000 style 1
0@v 表示する文字列。文字列、文字列変数、アドレスのいずれか。
1000 表示する時間(ms)。
1 表示するスタイル。0~6。
00BAの文字列指定版。
字幕を表示
0ACC: show_text_lowpriority 0x969110 time 100
0x969110 文字列のアドレス。文字列、文字列変数、アドレスのいずれか。
100 表示する時間(ms)。
00BBの文字列指定版。
字幕を表示(優先)
0ACD: show_text_highpriority 0x969110 time 100
0x969110 文字列のアドレス。文字列、文字列変数、アドレスのいずれか。
100 表示する時間(ms)。
00BCの文字列指定版。
テキストボックス表示(書式指定可能)
0ACE: show_formatted_text_box "This is %.4X opcode" 0x0ACE
"This is %.4X opcode" 書式文字列。
0x0ACE パラメータ。可変数。
0ACAのフォーマット可能版。
書式指定子について: http://msdn.microsoft.com/ja-jp/library/75w45ekt(VS.80).aspx
テキストを表示(書式指定可能)
0ACF: show_formatted_styled_text "This is %.4X opcode" time 2000 style 1 0x0ACF
"This is %.4X opcode" 書式文字列。
2000 表示する時間。ミリ秒単位。
1 表示するスタイル。0~6。
0x0ACF パラメータ。可変数。
0ACBのフォーマット可能版。
字幕を表示(書式指定可能)
0AD0: show_formatted_text_lowpriority "This is %.4X opcode" time 2000 0x0AD0
"This is %.4X opcode" 書式文字列。
2000 表示する時間。ミリ秒単位。
0x0AD0 パラメータ。可変数。
0ACCのフォーマット可能版。
字幕を表示(優先)(書式指定可能)
0AD1: show_formatted_text_highpriority "This is %.4X opcode" time 2000 0x0AD1
"This is %.4X opcode" 書式文字列。
2000 表示する時間。ミリ秒単位。
0x0AD1 パラメータ。可変数。
0ACDのフォーマット可能版。
プレイヤーが狙っている人を取得
0AD2: $actor = player $PLAYER_CHAR targeted_actor //IF and SET
$actor 人のハンドルが格納される変数。
$PLAYER_CHAR プレイヤーのハンドル。
ifの中で使うと狙っていると真を、狙っていないと偽を返す。
sprintf
0AD3: 0@v = string_format "%d + %d = %d" 2 2 4
Cランタイム ライブラリの関数。sprintf(0@v, "%d + %d = %d", 2, 2, 4);相当。
https://ja.cppreference.com/w/c/io/fprintf
sscanf
0AD4: 4@ = scan_string 0@v format "%d + %d = %d" 5@ 6@ 7@ // IF and SET
Cランタイム ライブラリの関数。4@ = sscanf(0@v, "%d + %d = %d", 5@, 6@, 7@);相当。
https://ja.cppreference.com/w/c/io/fscanf
fseek
0AD5: file $hFile seek 0x10 from_origin 1 //IF and SET
Cランタイム ライブラリの関数。fseek($hFile, 0x10, SEEK_CUR);相当。
https://ja.cppreference.com/w/c/io/fseek
SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2
feof
0AD6: end_of_file $hFile reached
Cランタイム ライブラリの関数。feof($hFile);相当。
https://ja.cppreference.com/w/c/io/feof
fgets
0AD7: read_string_from_file $hFile to 0@v size 15 // IF and SET
Cランタイム ライブラリの関数。fgets(0@v, 15, $hFile);相当。
https://ja.cppreference.com/w/c/io/fgets
fputs
0AD8: write_string_in_file $hFile from 0@v //IF and SET
Cランタイム ライブラリの関数。fputs(0@v, $hFile);相当。
https://ja.cppreference.com/w/c/io/fputs
fprintf
0AD9: write_formatted_text "CLEO version: %d.%d.%d.%d" in_file $hFile 4 0 0 1
Cランタイム ライブラリの関数。fprintf($hFile, "CLEO version: %d.%d.%d.%d", 4, 0, 0, 1);相当。
https://ja.cppreference.com/w/c/io/fprintf
fscanf
0ADA: 0@ = scan_file $hFile format "CLEO version: %d.%d.%d.%d" 0@ 1@ 2@ 3@ //IF and SET
Cランタイム ライブラリの関数。fscanf($hFile, "CLEO version: %d.%d.%d.%d", 0@, 1@, 2@, 3@);相当。
https://ja.cppreference.com/w/c/io/fscanf
車の名前(GXTキー)を取得
0ADB: 0@v = vehicle_model #LANDSTAL name
0@v GXTキーが格納される変数。
#LANDSTAL キーを取得したい車のモデルID。
入力された文字列をチェック
0ADC: test_cheat "BLOWUP"
"BLOWUP" 比較する文字列
キーボードからBLOWUPと入力されていれば真を、されていなければ偽を返す。
加えて、真の場合は自動的にキーバッファの先頭がクリアされループを防ぐ。
チートのように車を出現させる
0ADD: spawn_car_with_model #RHINO like_a_cheat
#RHINO 出現させる車のモデルID。
CJの目の前に出現する。
手軽だがハンドルも何も返ってこないので、「出現させて終わり」でないなら以下のように0AA7で直接 0x43A0B0 を呼び出した方が良い。
(0ADDも内部では同じ関数を呼び出している)
0AA7: call_function_return 0x43A0B0 num_params 1 pop 1 #RHINO 0@ 0AEB: 1@ = vehicle_struct 0@ handle
GXTキーから文字列を取得
0ADE: 0@ = text_by_GXT_entry 0@v
0@ 文字列のアドレスが格納される変数。
0@v GXTキー。
ダイナミックGXTにキーを追加
0ADF: add_dynamic_GXT_entry '_TEST' text "Test string"
'_TEST' GXTキー。
"Test string" 対応させる文字列。
.fxtと同じことがスクリプト内でできる。
ダイナミックGXTからキーを削除
0AE0: remove_dynamic_GXT_entry '_TEST'
'_TEST' GXTキー。
座標近くの人をランダムに取得
0AE1: $actor = random_actor_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 pass_deads 1
$actor 人のハンドルが格納される変数。
0@ 1@ 2@ 座標。
in_radius 探索範囲(半径)。
find_next 0で完全ランダムに取得。 1ですでに取得したものは無視する。
pass_deads 0で死んだ人も取得。 1だと無視する。
座標近くの車をランダムに取得
0AE2: $car = random_vehicle_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 pass_wrecked 1
$car 車のハンドルが格納される変数。
0@ 1@ 2@ 座標。
in_radius 探索範囲(半径)。
find_next 0で完全ランダムに取得。 1ですでに取得したものは無視する。
pass_wrecked 0で壊れた車も取得。 1だと無視する。
座標近くのオブジェクトをランダムに取得
0AE3: $object = random_object_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 //IF and SET
$object オブジェクトのハンドルが格納される変数。
0@ 1@ 2@ 座標。
in_radius 探索範囲(半径)。
find_next 0で完全ランダムに取得。 1ですでに取得したものは無視する。
ディレクトリが存在するか
0AE4: directory_exist "CLEO\CLEO_INI"
"CLEO\CLEO_INI" 確認するディレクトリのパス。相対パスの場合は0A99で設定されたディレクトリからのパスになる。
存在する場合は真、存在しない場合は偽を返す。
ディレクトリを作成
0AE5: create_directory "CLEO\CLEO_INI" //IF and SET
"CLEO\CLEO_INI" 作成するディレクトリのパス。相対パスの場合は0A99で設定されたディレクトリからのパスになる。
ifの中で使うと作成するのに成功すると真を、失敗すると偽を返す。
_findfirst
0AE6: 0@ = find_first_file "CLEO\*.cs" get_filename_to 1@v //IF and SET
Cランタイム ライブラリの関数。0@ = _findfirst("CLEO\*.cs", 1@v);相当。
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/findfirst-functions?view=msvc-170
_findnext
0AE7: 1@v = find_next_file 0@ //IF and SET
Cランタイム ライブラリの関数。0@ = _findnext(0@, 1@v);相当。
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/findnext-functions?view=msvc-170
_findclose
0AE8: find_close 0@
Cランタイム ライブラリの関数。0@ = _findclose(0@);相当。
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/findclose?view=msvc-170
FPUのスタックをポップ
0AE9: pop_float 0@
0@ ポップしたfloat値を格納する変数。
戻り値がfloatかdoubleの関数に対して0AA5、0AA6を実行した後に一度呼び出すと戻り値を取得できる。
CPedポインタ(アドレス)からハンドルを取得
0AEA: $actor = actor_struct $ped_struct handle
$actor 人のハンドルを格納する変数。
$ped_struct 人のアドレス。
CVehicleポインタ(アドレス)からハンドルを取得
0AEB: $car = car_struct $vehicle_struct handle
$car 車のハンドルを格納する変数。
$vehicle_struct 車のアドレス。
CObjectポインタ(アドレス)からハンドルを取得
0AEC: $object = object_struct $object_struct handle
$object オブジェクトのハンドルを格納する変数。
$object_struct オブジェクトのアドレス。
浮動小数点数を文字列に変換
0AED: 0@v = float 0@ to_string_format "%.15g"
0@v 文字列を格納する変数。
0@ 変換する浮動小数点数。
"%.15g" 書式指定子。
http://msdn.microsoft.com/ja-jp/library/dwhawy9k(VS.80).aspx
指数計算
0AEE: 0@ = 2.0 pow 0.5 //all floats
0@ 結果が格納される変数。
2.0 底。
0.5 指数。
対数計算
0AEF: 0@ = log 10.0 base 2.718281828459045 //all floats
0@ 結果が格納される変数。
10.0 真数。
2.718281828459045 底。