SA:MPのサーバを立ち上げての初プレイ。初めに気づく事は「乗り物がない・・・」ということです。 確かに乗り物は設置されていません。これはMTA:VCとは違い、SA:MPは管理人が多くの事柄を細かく設定 できるもので、乗り物もサーバの管理人が設置しなければいけないものとなっています。
車の設置に使用する関数はありますが、設置に必要な引数として主にXYZ座標の指定があります。そう、普段ゲームをしているだけではゲーム内の何処がどういう値の座標なんか知るわけないですし、「/save」コマンドでいちいち現在の座標を記録して設置していくのも面倒です。
そこで今回はもっと直感的に設置できるコマンドを作りましょう。
CreateVehicleは指定した座標、アングルに乗り物を設置するものです。この関数は SA:MP Ver0.2からの実装なので、それ以前のサーバで運営している人は注意してください。
ではサーバに実装していきましょう。チャットウィンドウで「/set xxx」と入力したらxxx番目のIDでランダムカラーな乗り物を自分が今いる場所に設置します。文字入力後にコールバックされるOnPlayerCommandText内に記述してくださいね。乗り物一覧とIDはこちら。
コードを簡単に解説していくと、2~8行目は入力されたコマンドの引数を変数名idに取得。 それ以降のコードは自分のキャラの座標を取得して、そこにランダムカラーな乗り物を設置。自分は乗り物の上に移動しています。
設置はできますが、これはあくまで動的な設置であり、このポイントで設置しても問題がなかったかを調べるものです。今回の設置で満足してしまってはいけません。サーバを再起動したとき全て消えます。次は設置した座標データを記録するようにしましょう。
さて、ここからが肝心なわけですが、関数一覧を見てもファイル関係はいまいち馴染めず・・。初めはfblockread関数とfblockwrite関数を使用して作っていたのですが、どうもこれはあらかじめ決まっているバイト数をいじくるもののようで、私には扱いきれなかったので他を探していたらfread、fwrite関数という私にやさしい関数があったのでそれを作って書くことに。
fread関数は文字を一行だけ読み込むというものですから、ループで全て読み込ませて、新しく書き込みたい 文字列と同じ変数に入れて、fwriteで書き直しています。コードに書かれている「set.txt」はSA:MPサーバを設置しているフォルダ内にあるscriptfilesフォルダの中に作って置いてください。
さて、実際に作ったコマンドを使用してみましょう。
コマンド入力中・・・、車のリストを確認しつつIDも入力します。(クリックで画像拡大)
設置完了のメッセージとともに車が現れます。こういう形で設置できるととても楽ですよね?
さて、次にサーバ内のscriptfilesフォルダに入れておいた「set.txt」を見てみましょう。

1KBとちゃんと書き込まれた後があります。中を見ると・・・
という表記がきちんとありました。設置場所を直感的に操作して最後にset.txtのデータを車を設置したいゲームモードの.pwnファイル内にあるOnGameModeInit内に入れれば完成です。
それでは存分に設置場所に悩んで下さい。