ガオンッ!現象について
0053: $PLAYER_CHAR = create_player #NULL at 0.0 0.0 0.0 00A5: 0@ = create_car #PONY at 0.0 0.0 0.0 009A: 0@ = create_actor_pedtype 4 model #MALE01 at 0.0 0.0 0.0 0107: $99 = create_object #AD_FLATDOOR at 0.0 0.0 0.0 00A1: put_actor $PLAYER_ACTOR at 0.0 0.0 0.0 00AB: put_car 0@ at 0.0 0.0 0.0 01BC: put_object 0@ at 0@ 1@ 2@
上記のコードで人物車を作ると作った座標にあった人物車が消滅してしまいます。
従って、何も考えずポコポコポコポコ作っていると、他の処理で使用しているものを消してしまい不具合が出ることがあります。
指定した座標に作るのではなく、下記のコードのように作ってから指定した座標に置く方が良いと思います。
// 12@13@14@が作りたい座標 14@ += 100.0 0107: 16@ = create_object 18@ at 12@ 13@ 14@ 14@ -= 100.0 if 03CA: (check) object 16@ exists then ////////////set_obj_pos//////// 0A98: 12@ = object 16@ struct 000A: 12@ += 0x14 0A8D: 12@ = read_memory 12@ size 4 virtual_protect 0 000A: 12@ += 0x30 0A8C: write_memory 12@ size 4 value 12@ virtual_protect 0 000A: 12@ += 0x04 0A8C: write_memory 12@ size 4 value 13@ virtual_protect 0 000A: 12@ += 0x04 0A8C: write_memory 12@ size 4 value 14@ virtual_protect 0 ////////////set_obj_pos//////// end
作ったものの後始末について
下記のコードで作ったオブジェクトやマーカーは、後処理をせずにセーブしてしまうとずっと消えなくなってしまうようです。
0107: $99 = create_object #AD_FLATDOOR at 0.0 0.0 0.0 0167: 0@ = create_marker_at 0@ 1@ 2@ flags 0 2 0188: 0@ = create_marker_above_object 0@
オブジェクトの場合は用が済んだら下記のコードを実行するようにしましょう。
01C4: remove_references_to_object 0@ // This object will now disappear when the player looks away
マーカーの場合は毎フレーム下記のコードを実行し、フレーム毎にマーカーを作り直すのが良いでしょう。
if 075C: (check) marker 0@ enabled then 0164: disable_marker 0@ end
もしくはオブジェクトにつけず、人や車につけるようにしましょう。
なぜか人や車はリムーブリファレンスしなくても勝手に消えてくれるようです(するに越したことはありませんが)。
つけた対象が消滅すればマーカーも消えます(多分)。
リムーブリファレンスについて
01C2: remove_references_to_actor $PLAYER_ACTOR // Like turning an actor into a random pedestrian 01C3: remove_references_to_car 0@ // Like turning a car into any random car 01C4: remove_references_to_object 0@ // This object will now disappear when the player looks away
生成したオブジェクトなどにこれらのコードを実行することで、プレイヤーから離れると勝手に消えるようになります。
特にオブジェクトについてはセーブしても残ることがなくなります。
もし生成直後にリムーブリファレンスする場合、突然消えることを想定してスクリプトを作らなければなりません。
ミサイルなどをプレイヤーから離れたところに飛ばすには、毎フレーム存在するか確認して、存在しなくなったら同じ座標に作り直す必要があるかもしれません。
そんなことをするのは大変なので大抵はリムーブリファレンスせず飛ばしますが…
セーブするとオブジェクトが残ることを知らないのか、気にしてないのかは分かりませんが、大抵の人は知らないことだと思います。
※GTASAでは残ったりしないようにミッション中はセーブできないようになっています。