ホーム › フォーラム › TRI Gaming フォーラム › Arma3 スクリプト公開スレ
-
投稿者投稿
-
2016年12月21日 10:17 AM #177585POLPOXメンバー
あれーおかしいなあちゃんと動いたんだけどなあ。
もしよかったら原因とか教えてくれたら糧になるかも。スクリプトは粛清しておきました- この返信は7年、 10ヶ月前にPOLPOXが編集しました。
2017年4月2日 12:15 AM #209461Stealerメンバー友軍兵士の死に弔意を表し弔える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ハハ…良い奴だったよな…なんてクッサイ芝居をしながら、彼/彼女のいる虚空に向けて弔砲を撃ったりなんかするといいですね。ちなみに弔砲は偶数という決まりがあります。
まあ、次のゲームでまた会えますけどね。ゲームで本当に良かったです。- この返信は7年、 7ヶ月前にStealerが編集しました。理由: v0.02 空母の甲板上など高さのある場所での配置が可能
2017年4月9日 9:51 AM #211698Stealerメンバー移動中の車輌に制圧射撃をさせられるRun-and-Gunスクリプト
依頼品。防衛ミッションや敵の増援が来るようなシチュエーションにおいて、遠方から接近中に制圧射撃をしてくるようになります。
ガンナー席のある車輌にのみ対応しています。
テクニカルに乗った陽気な人達による賑やかし、軍の容赦ない弾幕などの表現にお使いください。
SP/MP対応。だいぶ派手目なサンプル付き。動画:
ArmA3 script – Run and Gun scriptつかいかた:
・適用したい車輌のinitに↓のコマンドを貼り付けます。_nul = [this,制圧射撃をやめる距離n(m)] execvm "scripts\run_and_gun.sqf" 制圧射撃をやめる距離n(m)はトリガの中心範囲からの直径です。 例:_nul = [this,200] execvm "scripts\run_and_gun.sqf"
(湧かせた車輌にも適用できます。thisにあたる変数の変更はご自分で。)
・トリガ
suppress_point
を範囲を決めて配置します。
このトリガの範囲内に入ると車輌は制圧射撃を始めます。
入ると無条件で発砲を始める為、車輌の目標から目視できる範囲に置くといい感じです。動作について:
・より効果的な制圧射撃を行うため、車輌は通常交戦距離に入るまで視認距離・視認精度が大幅に向上しますが、射撃精度は落ちます。
・制圧射撃はガンナー席の各武器をランダムに選択して発砲します。また、制圧中に使用した武装は一定間隔ごとに自動で補充されます。
・suppress_point から制圧射撃をやめるまでの距離n(m)以内(通常交戦距離)に入ると制圧射撃・自動補充は停止し、デフォルトの挙動に戻り、調整されたスキルも元に戻ります。
・直近に目標が見つかるまでは suppress_point に向けて制圧射撃をします。
・とりあえず動くようにしたのでフィードバックや要望くださいなかみ:
if (!isserver) exitwith {}; sleep ((random 3)+3); private ["_veh", "_wep", "_mag", "_skill", "_rearm","_stop_range","_cur_mag","_cur_mag_ammo_cnt"]; _veh = _this select 0; _stop_range = _this select 1; _wep = count (_veh weaponsturret [0]); _mag = _veh magazinesturret [0]; _skill = skill _veh; _rearm = 0; gunner _veh dowatch suppress_point; gunner _veh dotarget suppress_point; _veh setskill ["spotDistance", 1]; _veh setskill ["spotTime", 1]; _veh setskill ["aimingShake", .75]; _veh setskill ["aimingAccuracy", .35]; waituntil {_veh inarea suppress_point}; while {_veh distance suppress_point > _stop_range} do { if (!alive gunner _veh) exitwith {}; if (isnull (_veh findnearestenemy _veh)) then {gunner _veh dowatch suppress_point; gunner _veh dotarget suppress_point;}; _rearm = _rearm +1; _rnd_wep = floor (random _wep); for "_i" from 0 to ((floor(random 20))+25) do { _veh action ["useweapon",_veh,_veh turretUnit [0], _rnd_wep]; sleep .02; }; sleep random 3; if (_rearm > 20) then { //武装の自動補充 for "_i" from 0 to count _mag -1 do { _cur_mag = _mag select _i; _cur_mag_ammo_cnt = (getNumber(configfile >> "CfgMagazines" >> _cur_mag >> "count")); _veh addmagazineturret[_cur_mag,[0],_cur_mag_ammo_cnt]; sleep .2; _rearm = 0; //hint format ["-REARMING- current magazine:%1 ammo count:%2",_cur_mag, _cur_mag_ammo_cnt]; }; }; }; _veh setskill _skill;
2017年4月11日 9:16 PM #212225piacereゲストarma3
modles supplay drop
仮想弾薬をドロップした時に、マップにマーカーを付けるには、どうしたらよいでしょうか?
スモークは、出せるのですが、その位置もかなりammoboxから離れてしまいます。近くにドロップさせるには、どうしたらいいですか?arsenalも入れていますが。下記構文は大丈夫なのですが、スモークの位置からだいぶ離れてしまいます。
modles supply drop Smoke
//exsaple:reme modles supplay drop smoke and arsenal crate init in ther
[“AmmoboxInit”,[_this,true]] call BIS_fnc_arsenal;Signal = “SmokeShellYellow” createVehicle position _this;下記ではErrに成ってしまいます。
_markerstr = createMarker [“markername”,[_Xpos,_Ypos]];
_markerstr setMarkerShape “ICON”;
_markerstr setMarkerType “hd_dot”;modles supply drop crate init in ther…………..?
仮想弾薬箱にマップで分かる様にマップマーカーを付けたいのですが……?
どの様にすればいいのでしょうか…わかりません。
教えてください。よろしくお願いします。2017年4月12日 11:11 AM #212282tricoキーマスター> piacereさん
test.sqf
_obj = _this select 0; _objm = format ["%1", _obj]; _mark = createMarker [_objm, [getPos _obj select 0, getPos _obj select 1]]; _mark setMarkerType "mil_destroy"; _mark setMarkerColor "ColorWhite"; _mark setMarkerText "ARSENAL"; _smoke = "SmokeShellYellow" createVehicle (getPos _obj); [“AmmoboxInit”,[_obj,true]] call BIS_fnc_arsenal;
弾薬箱に上のスクリプトを
nul = [this] execVM "test.sqf";
で読み込ませてはいかがですか?2017年4月14日 9:51 AM #212669JFetch(ふぇっち)参加者*createVehicleコマンドの座標指定は、setPosやcreateMarkerコマンドの座標指定とは「ズレ」があります。
*なので、createVehicleのあとに生成したオブジェクトに対してsetPosをしてあげると他のマーカーやオブジェクトと座標を揃えることができます。
【弾薬箱のinit欄】(// ←後のコメントは消してね)["AmmoboxInit",[this,true]] call BIS_fnc_arsenal; // アーセナルをオブジェクト(弾薬箱)に追加する if (isServer) then { _smk="SmokeShellYellow" createVehicle (getPos this); // スモークの生成 _smk setPos (getPos this); // スモークの位置の変更 };
上記コードは投稿されたものを参考に説明用として書きました。
重要なのは「*印」のところなのでそこを参考にしてみてください。(オブジェクトを重ねて生成するとオブジェクトが壊れるため(車だと爆発)それを回避するために座標を自動的に修正しているのがズレの原因。)
- この返信は7年、 6ヶ月前にJFetch(ふぇっち)が編集しました。理由: init欄なのに_thisにしてた
- この返信は7年、 6ヶ月前にJFetch(ふぇっち)が編集しました。
- この返信は7年、 6ヶ月前にJFetch(ふぇっち)が編集しました。
2017年4月26日 3:56 PM #214252StealerメンバーTKゲリラの服装バリエーションを増やして湧かせるmixed_gurillagroupスクリプト
防衛シチュエーションなどに。CUPのTK勢力用なので要CUP MOD。
TKゲリラとTK反政府勢力のユニットをミックスして一つの部隊として湧かせる事によって服装や装備のバリエーションが増えます。
服装や装備をランダムに選ばせるよりクラス選んだほうが楽だと思っただけ
広く使われいてる既存の湧きスクリプトに変更を加えたものです。Mixed_GuerillaGroup_Spawn_Test.VR
つかいかた:
① エディタ上に湧きポイントのマーカを置きます。マーカの名前はenspwn_n (n=整数)
になります。
② 湧いた部隊の移動目標のマーカーを作ります。名前はなんでもいいです。
③ mixed_gurillagroup.sqf を開き、_spawnmkr =
の数値を先程置いたenspwn_n
の数と同じにします。
④ 湧かせるトリガなどに実行用の構文を書きます。nul = [グループの人数サイズ,陣営,部隊の移動目標マーカ] execvm "scripts\rnd_gurillagroup.sqf"; ie: nul = [7,RESISTANCE,"atkmkr"] execvm "scripts\mixed_gurillagroup.sqf";
※サンプルに同梱の死体処理スクリプトbury.sqfも一緒にscriptsフォルダに入れておいてください。
なかみ:
if (!isserver) exitWith {}; private ["_spawnmkr","_grpsize","_side","_ary","_inf_list","_createpos","_squadgroup","_wp"]; //エディタ上のスポーンさせたい所にマーカ enspwn_n (n=整数)を置き、下の_spawnmkr = に置いた数を書く _spawnmkr = 12; _grpsize = _this select 0; _side = _this select 1; _dest_mkr = _this select 2; _ary = []; _inf_list = [ "CUP_O_TK_INS_Soldier_MG", "CUP_O_TK_INS_Soldier_AT", "CUP_O_TK_INS_Soldier", "CUP_O_TK_INS_Soldier_AR", "CUP_O_TK_INS_Sniper", "CUP_O_TK_INS_Soldier_FNFAL", "CUP_I_TK_GUE_Soldier_TL", "CUP_I_TK_GUE_Soldier_MG", "CUP_I_TK_GUE_Sniper", "CUP_I_TK_GUE_Soldier_AT", "CUP_I_TK_GUE_Soldier_AK_47S", "CUP_I_TK_GUE_Commander", "CUP_I_TK_GUE_Soldier_AAT", "CUP_I_TK_GUE_Soldier", "CUP_O_TK_INS_Soldier", "CUP_O_TK_INS_Guerilla_Medic", "CUP_I_TK_GUE_Guerilla_Medic"]; for [{_i = 0}, {_i < _grpsize}, {_i = _i + 1}] do{ _ary set [_i,(_inf_list select (floor(random(count _inf_list))))]; sleep .25; }; _createpos = getmarkerpos (""+ "enspwn_" + (str ([1, _spawnmkr] call BIS_fnc_randomInt)) + ""); _squadgroup = creategroup (_side); sleep .2; _squadgroup = [_createpos, _side, _ary] call BIS_fnc_spawnGroup; sleep .2; _wp = _squadgroup addwaypoint [getMarkerPos _dest_mkr,20]; _squadgroup setCombatMode "RED"; _squadgroup setspeedmode "FULL"; _squadgroup AllowFleeing 0; _wp setWaypointType "SAD"; _wp setWaypointCombatMode "red"; _wp setWaypointBehaviour "AWARE"; _wp setWaypointSpeed "FULL"; _wp setWaypointFormation "LINE"; {_x addEventHandler ["killed", {handle = [_this select 0] execVM "scripts\bury.sqf"}]} forEach (units _squadgroup); { _x setskill ["aimingAccuracy",0.15]; _x setskill ["spotDistance",0.25]; _x setskill ["spotTime",0.65]; _x setskill ["courage",1]; _x setskill ["commanding",1]; _x setskill ["aimingShake",0.65]; _x setskill ["aimingSpeed",0.85]; }foreach (units _squadgroup); _squadgroup = GrpNull;
自分のミッション用に作ったので公開するほどのものではないのだけれど、
一応”違う陣営のランダムなクラスのユニットをミックスし、一つの部隊にして突進させる”ものなので、_aryの中身を変えれば他の用途にも使えるかと思いました。2017年4月27日 4:58 PM #214645piacereゲストtricotさん、ありがとうございます。返信大変遅くなり申し訳ありません。このプログラムをmodelsの中のクリエート(crate init)のcrate initに入れましたけど、たぶんターゲートが仮想なのでエラーが生じてしまいます。nul=[this]execVM”test.sqf”; 3line or 4line:にエラーメッセージが出ます。何度も試しましたがエーラーに成ってしまいます。
JFetch(ふぇっち)さん、ありがとうございます。返信大変遅くなり申し訳ありません。ふぇっちさんのプログラムも同様で、仮想ターゲートに対してやはりtricotさんと同じようにエラーが出てしまいます。ターゲットリンクが有る場合は、enpty markerをMP上に配置すれば表示されますが、対象が仮想弾薬箱なので、エラーが出てしまいます。objが仮想でない場合は、違うと思うのですが…?
下記ターゲットがMP上にenpty markerを配置すれば,(ellipse)楕円のsolidが表示されます。
enpty markerをMP上に対して設置したならば、出来ますが……仮想となると良くわかないのが現状です。
ダイレクトならば下記の様に出来るのですが。
例:test.sqf下記
enpty marker”Marker1″をマップに配置すれば、マップに表示されます。下記プログラム“Marker1” setMarkerShape “ellipse”;
“Marker1” setMarkerColor “Colorrede”;
“marker1” setmarkersize [100,100];
“marker1″ setmarkerbrush”solid”;下記の構成をダイレクトに変えれば出来ると思うのですが、x、y、zに対して(getpos obj)を使用すると出来なくなります。
“_mark”に対しては表示されます。が//に成っている構成が、ERRに成ってしまいます。
marker test nul=[]execvM”marker.sqf”;
REM:ammobxo object: control role description neme in _mark
this program not use backslash…..!
arry neme:You can use it for moving objects, you can not use it for virtual//_obj = _this select 0;
//_objm = format [“%1”, _obj];
//_mark = createMarker [_objm, [getPos _obj select 0, getPos _obj select 1]];
//this program for ran to daireket on neme objct use this in program
“_mark” setMarkerType “mil_destroy”;
“_mark” setMarkerSize [0.5,0.5];
“_mark” setMarkerColor “ColorWhite”;
“_mark” setMarkerText “ARSENAL”;
//”marker” setMarkerPos getMarkerPos “marker”
_smoke = “SmokeShellYellow” createVehicle getMarkerPos “_mark”;//(getPos _mark);2017年4月28日 6:44 AM #214903JFetch(ふぇっち)参加者2、3回読んでも「?」な状態でしたがスペルミスを考慮した所、
ModulesのSupports -> 「Supports Provider: Supply Drop」で
「ドロップされる弾薬箱に対してマップマーカー及びスモークを取り付けたい」と理解しましましたがお間違いないでしょうか。言語は英語を基準としますので、エディッタを日本語表記にしている場合は適当に訳して御覧ください。
【Supports Provider: Supply Drop (Virtual)】
(Virtual)無しの場合でもCrate initの所を一緒にすればいいです。
編集画面解説- Vehicle types: Supportで呼ぶヘリのクラスネームを記載する(複数可)
- Vehicle init: ヘリがスポーンした(湧いた)時に実行する処理(init欄に書くようなこと)
- Crate init: 弾薬箱がスポーンした(投下された)時に実行する処理
(残りはどんな効果があるかわからないので最低限なところだけ書きました。)
initとあるところで注意しないといけないのは、thisではなく、_thisとするところです。ご要望を含めた設定例
- Vehicle types: [“B_Heli_Transport_01_F”]
- Vehicle init:
- Crate init:
["AmmoboxInit",[_this,true]] call BIS_fnc_arsenal;[_this,"SmokeShellYellow"] execVM "supplyDropMarker.sqf"
(Crate init 他の例)
[_this] execVM "supplyDropMarker.sqf" // *スモークなし, マーカー自動作成 [_this,"SmokeShellYellow"] execVM "supplyDropMarker.sqf" // イエロースモーク, マーカー自動作成 [_this,"", "marker_1"] execVM "supplyDropMarker.sqf" // *スモークなし, marker_1と名前を付けたマーカーを使う
_this: マーカーを付けたいオブジェクトの名前(Variable Name)
“SmokeShellYellow”: スモークのクラスネーム(“”にするとスモーク無しになる)
“marker_1”: ドロップしたボックスにつけるマーカーの名前(Variable Name)弾薬箱の位置に好きなマーカーを使用する時
ミッションエディッタでMAP上に好きなマーカーを置いて、Alphaを0%にし、
そのマーカーの名前を上記例の3つ目のように指定するとそのマーカーが投下されたボックスの所に置かれます。supplyDropMarker.sqf
if !(isServer) exitWith {}; params ["_ammoBox", ["_smokeClass", "", [""]], ["_dropMrk", "", [""]]]; /* メイン処理 */ // 弾薬箱が地面に接地するまでマーカーの作成は保留する waitUntil { private "_pos"; _pos = getPos _ammoBox; sleep 3; getPos _ammoBox distance _pos < 1 }; // マーカーの設置 if (_dropMrk isEqualTo "") then { // 予めマーカーが用意されていなかった場合 for "_i" from 0 to 9 do { _dropMrk = format ["FDM_dropMarker_%1", random 10000]; if (markerType _dropMrk isEqualTo "") then {_i = 9}; }; _dropMrk = createMarker [_dropMrk, _ammoBox]; _dropMrk setMarkerShape "ICON"; _dropMrk setMarkerType "hd_objective"; _dropMrk setMarkerColor "ColorGreen"; _dropMrk setMarkerText "Dropped supply"; } else { // マーカーが用意されていた場合は移動させる _dropMrk setMarkerAlpha 1; _dropMrk setMarkerPos (getPos _ammoBox); }; // スモークの生成 //if !(isServer) exitWith {}; if !(_smokeClass isEqualTo "") then { private "_smoke"; _smoke = _smokeClass createVehicle (getPos _ammoBox); _smoke setPos (getPos _ammoBox); };
専用サーバー上でのcreateMarkerの挙動がわからないので、万が一、専用サーバー上でマーカーが作成されなかった場合は、
1行目のif !(isServer) exitWith {};
を削除して、// スモークの生成
直下のスラッシュ2個を削除してください。こんなかんじ
if !(isServer) exitWith {}; if !(_smokeClass isEqualTo "") then { private "_smoke"; _smoke = _smokeClass createVehicle (getPos _ammoBox); _smoke setPos (getPos _ammoBox); };
スモークやマーカーがズレるってのは、パラシュートが風で流されて、
最終的に接地した地点がドロップした地点とズレるって事だったんですね。2017年5月4日 11:08 PM #216679StealerメンバーAI砲撃ユニットにFiremissionさせるsimple_artyスクリプト
何かと面倒だった砲撃をモジュールなし、単一スクリプトのポン置きで実現させようと思って作った簡易スクリプトです。
実体が存在するユニット用です。
飾り用にも実用にもいけます。SP/Dedicatedで動くよArty_Test.Stratis.zip
テスト中に撮った参考にならない動画:ArmA3 Script – Simple AI Arty Scriptつかいかた:
トリガなどに発動条件となる以下の構文を書きます
[[砲撃ユニット1,砲撃ユニット2],散布界n,1基当りの発射数n,次弾装填完了からのディレイ,ターゲット名,"砲撃終了後のユニット乗員へのオプション"] execvm "scripts\simple_arty.sqf";
[砲撃ユニット1,砲撃ユニット2] []の中に砲撃させたい砲撃ユニット名を書きます。「,」で区切っていくつでも入ります。
散布界n (整数) 着弾のバラケ具合[m]。
1基当りの発射数n (整数) 1回のfiremissionではなく、1基当りの発射数です。-1と入力すると死ぬまで撃ち続けさせられます。
次弾装填完了からのディレイ (整数)次弾装填完了後、次のシーケンスまでの遅延[sec]です。0で装填完了と同時に次第即次弾を照準/発射します。ユニットによって発射間隔が違うので、ここで調整します。
ターゲット名 (Varible Name) ゲームロジックでもユニット名でも何でもいいです。ターゲットの名前です。
砲撃終了後のユニット乗員へのオプション(“オプション名”) Firemission終了後の砲撃ユニットの要員を消すかのオプションです。
"ALL" ドライバーとガンナーを消去する "DRIVER" ドライバーのみ消去する "GUNNER" ガンナーのみ消去する "false" 何もしない
例:
nul = [[arty_1,arty_2,arty_3],180,2,1,tgt,"false"] execvm "scripts\simple_arty.sqf";
なかみ:
if !(isserver) exitwith {}; private ["_arty_ary","_radius_init","_rounds_init","_tgt_init","_option_init"]; _arty_ary = _this select 0; _radius_init = _this select 1; _rounds_init = _this select 2; _delay_init = _this select 3; _tgt_init = _this select 4; _option_init = _this select 5; if (_rounds_init == -1) then {_rounds_init = 99999}; _ST_Arty = { params ["_unit","_dispertion","_round","_delay","_target","_option"]; _tgt = getposasl _target; sleep random 3; for "_i" from 0 to (_round -1) do { _unit setammo [currentweapon vehicle _unit, 999]; _tgtpos = [ (_tgt select 0) - _dispertion + (2 * random _dispertion), (_tgt select 1) - _dispertion + (2 * random _dispertion), 0]; _unit commandArtilleryFire [ _tgtpos, getArtilleryAmmo [_unit] select 0, 1]; if (_i != _round) then {waituntil {currentcommand _unit == ""};}; sleep _delay; }; switch (_option) do { case "ALL": { deletevehicle gunner _unit; deletevehicle driver _unit; }; case "DRIVER": { deletevehicle (driver _unit); }; case "GUNNER": { deletevehicle (gunner _unit); }; }; }; for "_i" from 0 to ((count _arty_ary) -1) do { [(_arty_ary select _i),_radius_init,_rounds_init,_delay_init,_tgt_init,_option_init] spawn _ST_Arty; };
2017年12月10日 2:10 PM #239988Tomo_82参加者みなさん、こんばんは。
パンテラ再浮上と冬パンテラ実装ということで、冬季作戦が捗りそうですね。さて本題ですが、冬ミッション用の降雪スクリプトを探しておりますが、鯖で使えるものが見つかりません。
当方にはスクリプトを記述するほどの知識もないので知識のある方に助言を貰いたく、ここに書き込んだ次第です。以前の冬ナルスで使用されていたものは公開されてますでしょうか?
公開が不可の場合はTS、TwitterでのDMをお待ちしてます。- この返信は6年、 10ヶ月前にTomo_82が編集しました。
2017年12月10日 3:53 PM #239998Tomo_82参加者自己解決しました。
お目汚し失礼しました。2017年12月31日 6:18 PM #240870TorpolMゲストAI/プレイヤーの弾薬を無限にするInfinite Magazineスクリプト
<概要>
敵のAIもずっと撃ち続けると弾薬がなくなって逃げてしまいます
このスクリプトではユニット/車両が弾薬を消費し
次の弾薬をリロードするとその弾薬を対象のユニット/車両に追加することで
弾切れ状態が起きないようにします<使用方法>
①対象のユニットのInit爛に以下の構文を追加するthis setVariable ["IfMag",1];
対象がグループの場合はグループリーダーのInit欄に以下の構文を追加する
execVM "InfiniteSupply.sqf";
②ミッションフォルダのInit.sqfに以下の構文を追加する
execVM "InfiniteSupply.sqf";
<その他>
エラーや質問などがあればここかTwitterにお願いします2018年5月4日 9:48 PM #248573Stealerメンバー3人組のAI歩兵ユニットを迫撃砲チームとして動かせるimmersive mortar unitスクリプト
3人組の歩兵ユニットのウェイポイント地点で実行させることで、FO(観測手)、ガンナー、ローダーの迫撃砲チームとして動かすことが出来るスクリプトです。
敵が襲撃してくるシチュエーションでこいつらを混ぜておくと、低強度のドンパチから一転、降り注ぐ砲弾が当たらないことを祈りながら親の仇が如くFOを血眼で探して狙撃する、マークスマンが輝くエモいシチュエーションが生まれること必至です。
immersiveを名乗るだけにアニメにこだわったので、ゴソゴソ組み立てているヤツ、双眼鏡でスケベしてるヤツを発見し、その生殺与奪を握る快感を没入と共に味わってもらえたら幸いmortar_unit_test.VR
参考動画:
ArmA3 Script – Immersive Mortar Unit動作:
・ウェイポイント到達
・観測手が双眼鏡に持ち替えて観測開始(双眼鏡はスクリプト実行時に自動付与されます)
・ガンナーが迫撃砲を組み立て(アクション)、展開、ローダーと共に着席(一人乗りの迫撃砲だった場合、ガンナーの補充要員として動作)
・砲撃開始
・規定弾数を撃ちきると迫撃砲を放棄し、突撃ユニットととして砲撃目標地点に攻める・FO無力化で砲撃精度が減少、ガンナー無力化でローダーが代わりに砲座に付き、装填速度減少する
オプション:
・FOが無力化されなかった場合、FOらしく諸元が徐々に修正され(発射ごとに散布範囲の2%)、砲撃の精度が上がって(最大50%)いく。修正値やスタック上限は調整/無効化が可能。
・砲撃タレットのクラスごとに出現位置が微妙に異なるので、ガンナー展開のアニメと重なったり離れすぎてるのが気になる方向けにY軸微調整(_spawnpoint_onfig)できる。詳細はスクリプト内参照。
つかいかた:
・3人グループを作り、init欄に以下のコマンドを貼る{_x disableAI "CHECKVISIBLE"} forEach (units this);
※意図しない戦闘を避け、砲撃に専念させるためにAIの視界情報をブロックします
・砲撃させたい地点に置いたウェイポイントのON ACT欄に以下の引数を入れたコマンドを入力します
nul = [FOになる人,ガンナーになる人,ローダーになる人, FOがいる場合の散布界(m), FOがいなくなった後の散布界(m), 規定の砲弾発射数(n), ターゲット(variable name), "迫撃砲タレットのクラスネーム"] execvm "scripts\mortar_unit.sqf";
例)
nul = [(units this select 0),(units this select 1),(units this select 2), 100, 180, 25, target1, "O_G_Mortar_01_F"] execvm "scripts\mortar_unit.sqf";
・FOになる人,ガンナーになる人,ローダーになる人
基本的に例文のままでOk・ターゲット
名前が付いてるものなら単なる目標地点として置いたGameLogicでも、おそらく予めAOに展開しているプレイヤーのCV車両でも、トリガに最初に入ったプレイヤーでもサーファーキャップでもなんでもOK2018年5月15日 6:10 PM #249004Stealerメンバー市街地での殲滅ミッションの製作と進行を補助する S&D Marker Manager スクリプト
セクターごとに置いたエリアマーカーの色の状態によって、クリア状況を検知するスクリプトです。
市街地等の入り組んだ地形での殲滅ミッション作成を補助します。
多少アーケードライクにはなりますが、市街地での殲滅ミッションで懸念される”最後の一匹”の捜索避けなどに役立つので、プレイヤー規模よりも大きな街での殲滅作戦の実現や、大きさを問わず効率よく市街戦ミッションを作りたい/回したい要望に応えられると思います。SandD_area_marker_sample.Altis
(サンプルミッション同梱)参考動画:
S&D Marker Manager Scriptうごき:
・ミッション開始と同時にユニット検知を開始します。
・設定した陣営の敵ユニットの有無のみを検知し、存在すれば赤、クリアすれば青になります。
・クリア状態のエリアに再び敵ユニットが侵入した場合、再び赤に戻ります。
・全てのエリアのクリアを検知したら、タスク完了用の値ST_eliminatedone
がtrueになります。これを検知するトリガを作れば、クリア条件としてセットが可能です。とくちょう:
トリガarea_e_
と マーカarea_
からなるコピペして連番のエリアを作っていけば、その分だけスクリプト側が勝手に検知します。
サンプルのように街の形状に沿ったり、街のエリアが分かれている場合でも柔軟にエリアの配置ができます。つかいかた:
(サンプルミッションから設定したエリア全てをコピーし、貼り付け先のミッションで増やしたり減らしたり調整するだけで全て対応できますが、連番で動くという仕様の説明になります)・サンプルミッションにコピペ用の素材を枠と一緒に用意したので、こちらを使う前提で説明します。
サンプルミッションの素材をコピーするか、基本用のトリガarea_e_
と マーカarea_
を用意し、コピーします。
※トリガはデフォルトではEASTが検知条件になっていますが、検知したい陣営が異なる場合は予め変えてからコピーしてください。
このトリガとマーカの大きさが検知範囲=エリアのグリッドになりますので、お好みの大きさに設定してください。・エリアとして設定したい場所に、先程コピーしたエリアとマーカをポンポンと置いていきます。
ペーストされた最初のモノがarea_e_1
とarea_1
になっているか、必ず確認してください。スクリプトはこの連番を検知して動作します。
あとは枠のマーカを適当に配置します。こちらは検知に影響されないから好きに置いてOK・同梱のinit.sqfをmission.sqmと同じフォルダに入れます。既にある場合、中身をコピペしてください。
・引数を設定します。
nul = [設定したエリアの数,検知したい陣営] execvm "scripts\mkrmanager.sqf";
設定したエリアの数:
コピペしたエリアの数です。最後にペーストしたエリアの連番を入力します。例:サンプルミッションでは14個のエリアでeastユニットを検知したいので
nul = [14,east] execvm "scripts\mkrmanager.sqf";
となります。・全エリアをクリアしたことを検知すると、
ST_eliminatedone
を出力します。
タスク完了用にこの値を検知するトリガをミッション側に置いたら設定完了です。・設定が全て完了したら、連番作製用に作ったコピー元の基本トリガとマーカは消してしまってOKです。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。