返信先: Arma3 スクリプト公開スレ
ホーム › フォーラム › TRI Gaming フォーラム › Arma3 スクリプト公開スレ › 返信先: Arma3 スクリプト公開スレ
2017年4月2日 12:15 AM
#209461
メンバー
友軍兵士の死に弔意を表し弔えるTAPSスクリプト
Coopという戦いの場で発生する、ある意味では華でもある”損害”に焦点を当てた、勇敢に戦った末犠牲となった仲間を弔えるスクリプトです。
友軍勢力に損害が出る度、リアルタイムで墓が生成されます。ミッションから生還したらラッパの演奏(中心オブジェクトに付与されたアクションメニュー)で弔えます。
お墓のタイプは5種類(Triサーバーアドオン群に準拠)から出撃/帰還するベースに置いておいて、湿っぽいシメにどうぞ。
動画:
ArmA3 – TAPS Script for MP
動作デモ/確認用セクション付き。
SP/MPで動作します。また、ACE環境下での使用を前提としていますが、ACEなしでも動きます。
その場合スクリプト内の数値を変更する必要があるので、grave_yard.sqfを読んで下さい。
Triサーバアドオン群が入っていない環境の場合、お墓の候補はバニラ3種類からの選考になります。
つかいかた:
grave_yard.sqfを参考にしてください。デモも同梱してあります。
なかみ:
/*
TAPS script by Stealer v0.02
grave_point と名付けたオブジェクトの周りに友軍が殺傷された分だけ墓が生成されます。
同梱のtaps.sqfと併用して使い、ミッション終了間際等に戦死者を弔えます。
※ACE環境下用に制作しています。ACEなしの場合は挙動が変わりますので下の本体部分の数値を確認・変更してください
・init.sqfに下の構文を貼り付ける:
nul = [適用したい勢力,お墓のタイプ] execvm "scripts\grave_yard.sqf";
例: nul = [WEST,"Land_Tombstone_03_F"] execVM "scripts\grave_yard.sqf";
適用したい勢力 = WEST EAST GUER CIV など
お墓のタイプ = "クラスネーム"
お墓は選べる5種類
"Land_Grave_soldier_F" 文字入り墓碑
"Land_Tombstone_03_F" R.I.P.の文字入り墓
"Land_Grave_dirt_F" 土を盛っただけの十字架付きの墓
"GraveCross1" ドッグタグ付き簡易十字架 ※要CUP MOD
"PRAA_statics_bodybag" みんな大好きボディバッグ ※要PRAA MOD
※のMODは17/4/2現在Triサーバに入っているものです
・grave_point と名付けたオブジェクトに下の構文を貼り付ける:
this addaction ["TAPS for Honor The Fallen","scripts\taps.sqf"];
・grave_point オブジェクトの向きをエディタ上で変えることによって、生成されるお墓の向きを調整できます。
お墓はオブジェクトの背面(180°)から正面を向いて生成されます。一部オブジェクトはこの通りではありませんので一度テストで確認してください。
・空母の甲板上など、地表から離れた場所(地表から1m以上)にオブジェクトを置いた場合は挙動が変わり、grave_point の15m半径(デフォルト)に墓が生成されます。
半径を変更したい場合は _rad の数値を変更してください。
※この場合生成される位置は完全ランダムになり墓の配置にマージンを取りませんので、狭い半径に多く生成すると重なり合うなどして配置が歪になる場合があります。
*/
//本体
if (isserver) then
{
sleep 10;
private ["_pos","_dir","_opt","_side","_type","_rnd_x","_rnd_y","_posX","_posY","_rad"];
_pos = grave_point;
_pos2 = getpos _pos select 2;
_dir = getdir _pos;
_side = _this select 0;
_type = _this select 1;
_rad = 15; //地表から離れた場所に生成される場合の半径n
deathcount = 0;
{_ehst = _x addmpeventhandler ["mpkilled",{deathcount = deathcount + 1}];} foreach (allunits select {side _x == _side});
while {true} do
{
waituntil {deathcount >= 2}; //ACE抜きで使いたい時はここを1にしてください
deathcount = deathcount -2; //ここも-1に
_grave = _type createvehicle [(position _pos select 0), (position _pos select 1), 0];
if (_pos2 >= 1) then
{
sleep .2;
_rnd_x = (floor(random 2));
_rnd_y = (floor(random 2));
_posX = (floor(random _rad));
_posY = (floor(random _rad));
if ((_rnd_x) == 1) then {_posX = (-1*(_posX))};
if ((_rnd_y) == 1) then {_posY = (-1*(_posY))};
_grave setpos [(position _grave select 0) - (_posX), (position _grave select 1) - (_posY), (getpos _pos select 2)];
};
_grave setdir _dir;
sleep .5;
};
};
//テスト用セクション
//以下のセクションのコメントアウトを外し、上の本体部分をコメントアウトすると grave_point 付近に _num 基分のお墓を生成します。
//お墓はオブジェクトの周りの空いた土地を使用し、円形に拡がっていく習性を持っています。
//配置済みのオブジェクトやその場にいる人を避けて配置されますが、間に進入可能な家などがあると壁を抜け家の中に作ってしまいますので、開けた場所が望ましいです。
//生成される向きの確認や、予定しているミッションの人数規模によって生成されるお墓がどれくらいの領域を使用するか確認できます。
/*
if (isserver) then
{
private ["_pos","_dir","_opt","_side","_type","_rnd_x","_rnd_y","_posX","_posY","_rad"];
_pos = grave_point;
_pos2 = getpos _pos select 2;
_dir = getdir _pos;
_side = _this select 0;
_type = _this select 1;
_rad = 15;
_num = 30; //_num に指定したn基分の墓を生成します
sleep 1;
while {_num >= 0} do
{
_num = _num -1;
_grave = _type createvehicle [(position _pos select 0), (position _pos select 1), 0];
if (_pos2 >= 1) then
{
sleep .02;
_rnd_x = (floor(random 2));
_rnd_y = (floor(random 2));
_posX = (floor(random _rad));
_posY = (floor(random _rad));
if ((_rnd_x) == 1) then {_posX = (-1*(_posX))};
if ((_rnd_y) == 1) then {_posY = (-1*(_posY))};
_grave setpos [(position _grave select 0) - (_posX), (position _grave select 1) - (_posY), (getpos _pos select 2)];
};
_grave setdir _dir;
sleep .1;
};
};
*/
TAPSとは戦死者の葬儀の際に送り出す為のラッパの演奏です。映画なんかで見たことあるかも。
あいつ死んじまったよwwwギャハハwwハハ…良い奴だったよな…なんてクッサイ芝居をしながら、彼/彼女のいる虚空に向けて弔砲を撃ったりなんかするといいですね。ちなみに弔砲は偶数という決まりがあります。
まあ、次のゲームでまた会えますけどね。ゲームで本当に良かったです。
-
この返信は9年、 4ヶ月前に
Stealerが編集しました。理由: v0.02 空母の甲板上など高さのある場所での配置が可能