2014/3/8 土曜日

ライフルグレネード

Filed under: Arma一般 — gachopin @ 10:01:55

riflegrenade_89
独自の方法(小銃用アイテムとして定義)でARMA2で出来なかったライフルグレネードの表示が可能になりました。
CBAが必要になるので、次のバージョンでCBAが必須になるかもしれません。
このシステムを利用すればバイポッドの折りたたみも表現できるかも。
(ギアメニューで”見た目だけのライフルグレネード”のアイテムが表示されてしまう問題はありますが…)

*小銃てき弾用の照準機の資料/写真ありましたらお知らせください。

2014/3/1 土曜日

createunitのマルチプレイでの特徴

Filed under:   ─スクリプト編 — gachopin @ 10:46:08

実験でcreateunitの特徴が判明したので解説します。
シングルプレイと違い、動作が異なります。createunit arrayは初期状態ではグループに入っていないバグがあるけど、下記のようにバグを回避できます。

?createUnit
・OFPからの古い命令。「作成するクラス」にパラメータを付けて命令する。
・ユニットに対してスクリプトで命令することは不可能だが、イベントハンドラは例外的に可能。(イベントハンドラではスクリプトの引数を渡すことはできない)
マルチプレイでのユニットは一律「リモートで作成されたAI」として認識されるため、グループで分けることができない。

?createUnit Array
・Armaからの命令。「グループ」にパラメータを付けて命令する。
・ユニットに対してスクリプトで命令することができる。(つまり、ある条件化でユニットを消したり、増殖させたり、?で出来ないことができる)
マルチプレイでのユニットは個別に認識されるが、スクリプトの実行はcreateUnitしたマシン(基本的にはサーバー)で行われる。また、createunitで指定したグループにjoinしない(!)ので用意したスクリプトで改めてjoin命令を行う必要がある。

私が作成中のスクリプトは?を使っています。
?を使う利点
・ゾンビ増殖スクリプトのパラメータをゾンビに渡すことで、ミッションの流れに応じたゾンビの数をコントロールできる。
・ゾンビが倒れたあと、その数だけ増殖させるか選べる
・ある条件化、例えばプレーヤが特定のwaypointまで進んだ場合あるいはゾンビがプレーヤから離れすぎた場合等で、「あるオブジェクトに紐付けられたゾンビ集団」を一律で削除させたりできる。

3/2追記
サーバ側でcreateunit arrayしたユニットにスクリプトを適用すると、サーバ側だけに作用します。
パーティクルのエフェクト等、それぞれのクライアントに動作させる必要がある場合には次の方法を使います。
1.サーバ側での処理(isServer等を使う)
createunitしたユニットが_unitという名前の場合、createunitするマシンで以下を実行する
missionNamespace setVariable [“任意の識別名”,_unit];
publicVariable “任意の識別名”;

この処理で、_unitの存在を”任意の識別名”に紐付けて全クライアントに送信します。

2.クライアント側での処理(isPlayer等を使う)
クライアントごとに以下を実行する
“(上記で指定した)任意の識別名” addPublicVariableEventHandler {
_unit = _this select 1;
任意のスクリプト
};

この処理で、1.で送信した_unitの存在を受け取り、任意のスクリプトで動かすことができるようになります。

また、上記はdedicated serverで建てるときは正常に動きますが、個人でマルチプレイを立てるときは立てている本人がPublicVariableを受け取ることができません。
よって1.のスクリプト内に代替処理を入れる必要があります。
例)if(not isDedicated)then{任意のスクリプト};を使う

具体例はゾンビミッションの例を参考にしてください。

HTML convert time: 1.667 sec. Powered by WordPress ME