ホーム › フォーラム › TRI Gaming フォーラム › Arma3 スクリプト公開スレ
-
投稿者投稿
-
2016年3月9日 10:19 PM #102372michy_REV19キーマスター
.. 、 ,_
 ̄\_/ ̄ ̄\/ ̄ ゴゴゴゴゴゴ・・・
___/ ̄へ√⌒l⌒´ ̄ ̄\_
´ / \どうも皆様こんにちは、みっちーでございます。
僭越ながら今回も製作したスクリプトを公開させていただきます。
Reinforcement Group Teleporting Script by michy
(Download from Dropbox)今回は、増援ユニットをグループごとテレポートさせるスクリプトを製作いたしました。
ミッションで増援を出したいとき、遠くの基地からWaypointを使って自走させると、移動中にAIが途中で事故ったり迷子になったりと、なかなかうまくいかないことがあります。
かといって目標地点の近くに「沸かせる」と、動作が重くなるだけでなく、リアリティを損なってしまいます。
また、最近はあまり発生していないようですが、以前createunitコマンドで増援を生成した際に動作が非常に重くなり、サーバーが停止してしまう現象が多々発生していました。(最近は停止することは少なくなりましたが…)このスクリプトは、増援ユニットをミッション開始時から配置し、トリガーと連動して”ある程度ユニットに近い位置”にテレポートさせることで、上記のような問題を解決することを目的としています。
特徴としましては、マルチプレイヤーミッションに対応していることはもちろん、車輛を含むグループにも対応しています。
さらに、テレポート後にWaypointを1つスキップする機能も備えていますので、テレポートした後の場所でもWaypointを使用することが出来ます。
また、増援のユニットについてエディタ上から諸設定が可能なことも利点です。使い方
0.ファイル配置
ミッションフォルダ内にscripts
フォルダを作成し、その中にrfGroupTeleport.sqf
ファイルをコピーしてください。1.ユニット
エディタ上でテレポートさせたいグループのリーダーユニットのinit欄にgroupname= group this;
と記述してください。
groupname
はグローバル変数ですので、他と被らないよう任意の名称を付けてください。2.マーカー
エディタ上でテレポートさせたい場所にインビジブルマーカーを設置し、name欄に記述したマーカー名をメモしておいてください。3.トリガー
エディタ上でトリガーを設置し、任意の条件を設定してください。
最後に、On.Act欄に_rf = [groupname,markername] execVM "scripts\rfGroupTeleport.sqf";
と記述してください。
アレイ([]のこと)のgroupname
には1で設定したグループの名称が、markername
には2で設定したマーカーの名称が入ります。4.作動後の挙動
トリガーがアクティヴェートされると、スクリプトはリーダーの座標とマーカーの座標を取得し、グループの各ユニットははリーダーを中心に、”元の隊形(リーダーとの相対座標)を維持した状態”でマーカーの位置にテレポートします。また、テレポート後に現在のWaypointを1つスキップします。以上になります。
テストではCreateUnitコマンドを使用した時よりも軽快に動作することを確認しました。
Shouw/Hideモジュールを使用すると、グループに車輛を含んでいる場合にうまく作動しないので、こちらを使用していただくことにより、確実な動作が可能です。CreateUnitsコマンド、Shouw/Hideモジュールを使用した時より動作が重くなることは無いはずですので、もしよければ使ってみてください!!
- この返信は8年、 7ヶ月前にmichy_REV19が編集しました。理由: 推敲
- この返信は8年、 7ヶ月前にmichy_REV19が編集しました。理由: URL更新
2016年3月10日 7:43 PM #102494michy_REV19キーマスター.. 、 ,_
 ̄\_/ ̄ ̄\/ ̄ ゴゴゴゴゴゴ・・・
___/ ̄へ√⌒l⌒´ ̄ ̄\_
´ / \どうも皆様こんにちは、みっちーでございます。
昨晩公開したスクリプトを早速改良いたしましたので、報告させていただきます。(バグってたわけじゃないよ!!!)
Reinforcement Group Teleporting Script by michy v1.1
(Download from Dropbox)更新内容としましては、ユニットの高度を指定できるようになりました。デフォルトでは0.5m(AGL)に設定しています。
On.Act欄への記述_rf = [groupname,markername,0.5] execVM "scripts\rfGroupTeleport.sqf";
中のアレイ([])の第3要素で高度(m)を指定出来ます。2016年3月17日 9:41 PM #103163michy_REV19キーマスター.. 、 ,_
 ̄\_/ ̄ ̄\/ ̄ ゴゴゴゴゴゴ・・・
___/ ̄へ√⌒l⌒´ ̄ ̄\_
´ / \どうも皆様こんにちは、みっちーでございます。
僭越ながら今回も製作したスクリプトを公開させていただきます。
Branch Divided Gear Script by michy
(Download from Dropbox)今回は、ギアスクリプトを改良いたしました。
既存のギアスクリプトをユニットに適用するには、エディタ上のユニット設定画面でスクリプトの呼び出しをする必要がありました。このスクリプトは、init.sqfファイルにて呼び出すことで、”プレイアブル”ユニットのクラスネームを取得して、各ユニットに自動的にギアスクリプトを適用させることが出来ます。
いちいちユニットの設定画面を開く必要が無く、あらかじめクラスネームを用意しておけば多少の変更にも柔軟に対応できるという利点があります。ただ、EDENエディタでは直接Arsenalが使用できますし、ユニットをコピペしていた方々にとってはあまりメリットは無いと思います。
自己満です。興味があればどうぞ!2016年6月13日 12:38 AM #116726StealerメンバーようやくA3をプレイできそうなので、手始めにスクリプトをいくつかA3用に書き直しました。
公開するスクリプトのサンプルファイルは補足がない限り、バニラ及びDedicatedサーバ下のMPでも動作する前提で作っています。Battle Damage Assessment(戦闘損害評価)スクリプト
その昔、某氏の要望で作ったもの。
ミッション終了時、戦闘のハイライトとなった場所を中心にカメラが回転し、
開始時の自軍のユニット数からの単純な差し引きで損害(死傷者)を計上・表示し、その率によってSSSからF-までの18段階で戦闘指揮の評価をするスクリプトです。
現verでは自陣営の損害を計上するのみですが、これをたたき台に要望によって表示項目を増やしていきます。AARにどうぞ。
https://www.dropbox.com/s/12cor1vf8pykz44/BDA_Sample_A3.Stratis.7z?dl=0使い方:
①mission.sqmと同階層に BDA_A3 フォルダを置く
②init.sqfにコマンドを記入:
["評価したい陣営"] execVM "BDA\BDA_main.sqf";
評価したい陣営 には陣営の頭文字を大文字で入れます。
W:West (BLUFOR)
E:East (OPFOR)
I:Resistance (Independent)
C:Civilian (Civilian)
例)["W"] execVM "BDA\BDA_main.sqf"
また、BDA起動時のBGMはデフォルトの曲ですが、カスタムBGMを使用したい場合、
オプションパラメータとしてクラス名(descrption.extにてCfgMusicで定義したもの)を記入すれば変更可能です:
[“評価したい陣営”,”BGMのクラス名”] execVM “BDA\BDA_main.sqf”
例)["W","customBGM"] execVM "BDA\BDA_main.sqf</blockquote>
③GameLogicに次の名前を付けて配置する:
BDA_camobj
BDA起動時、このロジックを中心にカメラが回転します。ミッションの象徴となった場所に置くといいです。④BDA起動トリガを設置:
BDA_report = true;
BDA_reportがtrueになった時点でBDAが起動、評価画面が表示された後、ミッションが終了します。
なかみ:
BDA_main.sqf
//initに記述した変数にBGMの変更があるかを判断し、なければデフォルト、あれば使用するようにパラメータを渡す準備をする _music = " "; _choosemusic = _this select 1; if (isnil ("_choosemusic")) then {_music = "Track07_ActionDark"} else {_music = _choosemusic}; //ミッション開始時、各クライアントでBDA表示用スクリプトを起動しておく [_music]execVM "BDA_A3\BDA_client.sqf"; //ここから先はサーバのみでの処理 if !(isServer) exitwith {}; //変数の定義 _side1 は[]内の要素0番目(=1番目) BDA_param_start1 は整数を宣言 _side1 = _this select 0; BDA_param_start1 = 0; BDA_report = false; BDA_compcalc = false; //switch構文で _side1 に入った文字を識別、計上する陣営を設定する switch (_side1) do { case "W": { BDA_param_side1 = West; }; case "E": { BDA_param_side1 = East; }; case "I": { BDA_param_side1 = Resistance; }; case "C": { BDA_param_side1 = Civilian; }; }; //ミッション開始時の陣営の総数を計上 BDA_param_start1 = ((BDA_param_side1) countSide allunits); //BDA起動(ミッション終了)トリガが立つまで待つ waituntil {BDA_report}; //ミッション終了時の陣営の総数を計上 BDA_param_end1 = ((BDA_param_side1) countSide allunits); //陣営の生き残りの兵士の内、負傷者(3割以上ダメージを受けた者)の数を計上 BDA_param_w1 = {(getdammage _x >= 0.3) && side _x == BDA_param_side1} count allunits; //sleepは「一呼吸」の感覚で意識的に処理の間に挟むと誤動作防止になる。0secと0.1secはサーバにとって天と地ほどの差がある。 sleep .2; //計上した変数を各クライアントに配信 publicVariable "BDA_param_start1"; publicVariable "BDA_param_end1"; publicVariable "BDA_param_w1"; //各クライアントで既に待機している計上終了トリガ BDA_compcalc を配信 BDA_compcalc = true; publicVariable "BDA_compcalc";
BDA_cliant.sqf
//「ここより先はクライアント処理のみ」を示すおまじない if (!local player) exitwith {}; BDA_compcalc = false; //ここから先は BDA_main の計上終了トリガを待つ waituntil {BDA_compcalc}; //変数をこのスクリプトのみで使う宣言(BDAと関係ない、同じ名前を用いた変数への干渉を防ぐため) private ["_commrank","_KIA1","_loss1","_msg1"]; //_commrank は文字列を宣言 _commrank = " "; _music = _this select 0; //BDA_mainの処理よりサーバから配信されたミッション開始時のユニット数を取得、終了時のユニットと計上する _KIA1 = BDA_param_start1 - BDA_param_end1; _loss1 = floor (100 - ((BDA_param_end1 / BDA_param_start1)*100)); //損害を百分率の割合によって評価する if (_loss1 == 0) then {_commrank = "SSS";}; if ((_loss1 >= 1) && (_loss1 <= 5)) then {_commrank = "S+";}; if ((_loss1 >= 6) && (_loss1 <= 10)) then {_commrank = "S";}; if ((_loss1 >= 11) && (_loss1 <= 13)) then {_commrank = "A+";}; if ((_loss1 >= 14) && (_loss1 <= 17)) then {_commrank = "A";}; if ((_loss1 >= 18) && (_loss1 <= 20)) then {_commrank = "A-";}; if ((_loss1 >= 21) && (_loss1 <= 23)) then {_commrank = "B+";}; if ((_loss1 >= 24) && (_loss1 <= 27)) then {_commrank = "B";}; if ((_loss1 >= 28) && (_loss1 <= 30)) then {_commrank = "B-";}; if ((_loss1 >= 31) && (_loss1 <= 33)) then {_commrank = "C+";}; if ((_loss1 >= 34) && (_loss1 <= 37)) then {_commrank = "C";}; if ((_loss1 >= 38) && (_loss1 <= 40)) then {_commrank = "C-";}; if ((_loss1 >= 41) && (_loss1 <= 43)) then {_commrank = "D+";}; if ((_loss1 >= 44) && (_loss1 <= 47)) then {_commrank = "D";}; if ((_loss1 >= 48) && (_loss1 <= 50)) then {_commrank = "D-";}; if ((_loss1 >= 51) && (_loss1 <= 53)) then {_commrank = "E+";}; if ((_loss1 >= 54) && (_loss1 <= 57)) then {_commrank = "E";}; if ((_loss1 >= 58) && (_loss1 <= 60)) then {_commrank = "E-";}; if (_loss1 >= 61) then {_commrank = "F-";}; playmusic _music; //カメラスクリプト起動 [] exec "BDA_A3\BDA_cam.sqs"; sleep 1; //メッセージ表示 _msg1 = "<t align='centre' size='1.8 font='puristaLight' color='#ffffff'>" + '--Mission Completed--'+ "<br/>" +"</t>" // + 'Battle Damage Assessment'+ "<br/>" +"<br/>" +"<t align='left' size='1.4 font='puristaLight' color='#ffffff'>" + 'Battle Damage Assessment'+ "<br/>" +"</t>" +"<t align='left' size='1' font='puristaLight' color='#ffffff'>" +' Resources: ' +str BDA_param_start1+ "<br/>" +' Remains: ' +str BDA_param_end1+ "<br/>" +' Wounded: ' +str BDA_param_w1+ "<br/>" +' KIA: ' +str _KIA1+ "<br/>" + "<br/>" +' Damage: ' +str _loss1+ '%'+ "<br/>" + "<br/>" + "<br/>" + "<br/>" +"</t>" +"<t align='center' size='1.25' font='puristaLight' color='#ffffff'>" + 'Commander Rank: ' +_commrank +"</t>"; [_msg1,0,0.1,50,5] call bis_fnc_dynamictext; sleep 10; //ミッション強制終了 endMission "END1";
BDA_cam.sqs
_camera1 = "camera" camCreate [0,0,0] _camera1 cameraEffect ["Internal","BACK"] _camera1 camSetTarget BDA_camobj _camera1 camSetRelPos [-200,-200,100] _camera1 camCommit 0 _camera1 camSetRelPos [200,-50,15] _camera1 camCommit 70 @(camCommitted _camera1) _camera1 cameraEffect ["TERMINATE","BACK"] camDestroy _camera1
処理自体は簡単なスクリプトですが、スクリプト本体に動作の仕組みを説明をコメントアウトで添えています。
私自身、不慣れなプログラム作りと英語ソースに体当たりでなんとか習得した経緯があるため、学びたい誰かのお役に立てれば幸いです 😉過去の遺物を改良しつつ、また楽しいミッション作りをしていきたいです。
2016年6月13日 2:46 AM #116729StealerメンバーRadioChatter Script
概要:
任意のユニットから無線通信のおしゃべり効果音を不定期に再生させる雰囲気スクリプト。だいたい15m以内くらいの範囲に聞こえます。
使用用途は様々ですが、基地を作る際の景観用や、潜入作戦で敵の警備兵に適用したりすれば通信の音を情報源に使えたりしますね。Radiochatter_Script_Sample_A3.Stratis.7z
使い方:
①Scripts,Soundsフォルダ、Description.extファイルを使いたいミッションのmission.sqmと同階層にコピペ
②以下のコマンドを喋らせたい任意のユニットのinit欄にコピペする。
_nul = [this] execVM "scripts\radiochatter.sqf";
2016年6月14日 6:48 AM #116742StealerメンバーどこでもLZ デイジーカッタートリガー
Tanoaが公開されましたね。リゾートの皮を被った鬱蒼としたジャングルが、不気味な口を開けて誘っています。
さて、ここで問題になるのは、ミッション作成者の悩みの一つである、ヘリボーン作戦に都合の良いLZの確保。
平坦で障害物の無いLZとして最適な場所は、マップでも限られた数しかありません。
しかし、トリガーを使えば、好きな範囲の障害物をあらかじめ切り倒すことで、ジャングルのどこでもLZにすることが可能です。まずはトリガに名前をつけます。Condにはtrue、on Act欄には以下のように書きます。
例) {_x setDamage 1} forEach nearestObjects [トリガ名,[],範囲]
トリガ名にはトリガの名前を、範囲はメートルで記入します。早い話が、トリガの範囲内のオブジェクトを全て破壊する事で平地にします。
トリガの範囲と同じ値をセットするとエディタ上で分かりやすいです。私はこのトリガを思いついた時から、デイジーカッタートリガと呼んでいます。
ベトナム戦争時、アメリカ軍は急ごしらえのLZ作る際、同名の巨大爆弾で周りを吹っ飛ばしていた事からです。核と間違われるほどの威力だったとか。ということで、こうしたエディットのマメ知識も公開していきましょう。
2016年7月2日 8:49 PM #121433Stealerメンバー追記:
先ほど某氏より
「森の中に基地を作りたいので、範囲内の木を倒すのでなく完全に消し去りたい」との依頼があり、色々試した結果方法を編み出せたので記載します。こういった要望の場合、マップ固有のオブジェクトでHouse属性のある建造物の削除は簡単ですが、
それに属さないもの、とりわけ木やパイプ等のobjectにはclassnameの取得(typeof)が難しいモノがあります。
こういったモノを手っ取り早く削除するには、IDを使った方法が良い…と思います(現時点では。)1.objectのIDを表示する
マップ固有のobjectにはIDが振られており、それを特定することで削除が可能です。
ID表示の方法はエディタツールの”ID”ボタンを押すか、Tools > Debug consoleを開いて以下のコマンドを打ちます。
do3DENAction "ToggleMapIDs"
この状態でマップを拡大していくと、白抜きに黒字の数字がたくさん出てくると思います。これがIDです。
これで消したいobjectのIDをひたすらメモります。めんどくさいです。
ここでは3本の木、1441,1440,1439を消すとします。2.消したい範囲の直近にGame Logicを作る。
Variable name: log1
Cond: True
On act: {((position log1) nearestObject _x) hideobjectglobal true} foreach [1441,1440,1439];
[]には先程メモったIDを”,”で区切って入れていきます
Classnameが存在する場合はもっと簡単ですが…めんどくさいので後で書きます。
とりあえず以上の方法まで。2016年7月4日 4:24 AM #121831Stealerメンバー車輌のタレット情報を取得するShow Turretスクリプト
A3にはConfig Browserがエディタに搭載され、知りたい情報へのアクセスが以前よりとても簡単になりました。
しかし検索機能が無いので、知りたい情報へたどり着くのも一苦労です。
そしてエディタ諸兄がわざわざこのブラウザでアクセスしたい情報といえば、兵器が使用しているタレットパスや弾のクラスじゃないかと思います(個人的な経験から)。
しかもそのブラウザにも肝心のタレット情報が一切無かったりします。ので、私は不便なブラウザの使用を思考停止的にやめ、タレット情報を取得しクリップボードへコピーするモノを作ったので、ついでに公開します。
※パスがややこしい兵器固有の搭載武器、及びコマンダーシートの武器には対応してません。自分に必要な部分だけ作ったので、需要があったら完成させます。
あと他に方法があったら消します。だって不便だったんだもん。つかいかた
①mission.sqmと同階層にscriptsフォルダを作成します②その中にテキストファイルを作り、showturret.sqfという名前で保存します
③以下のなかみを貼り付けます↓
_p = vehicle player; _type = typeof _p; _mags_d = _p magazinesTurret [-1]; _mags_g = _p magazinesTurret [0]; _weps_d = _p weaponsTurret [-1]; _weps_g = _p weaponsTurret [0]; hint format ["TYPE: %1\n\nMAGAZINES(DRIVER)[-1]:\n%2\n\nMAGAZINES(GUNNER)[0]:\n%3\n\nWEAPONS(DRIVER)[-1]:\n%4\n\nWEAPONS(GUNNER)[0]:\n%5\n\nDATA COPIED TO CLIPBOARD",_type,_mags_d,_mags_g,_weps_d,_weps_g]; copytoclipboard ("Type: " + str _type + " Magazinesturret[-1]: " + str _mags_d + " Magazinesturret[0]: " + str _mags_g + " Weponesturret[-1]: " + str _weps_d + " weaponesturret[0]: " + str _weps_g);
④プレイヤーユニットのinit欄に、以下を書き込みます↓
this addaction ["let me see","scripts\showturret.sqf"];
⑤情報を知りたい車輌に乗り込むか、プレイヤーに指定した兵器でアクションを実行します。するとクリップボードにこんな感じで情報が保存されます。これはZU-23-4の場合です↓
Type: "CUP_O_ZSU23_TK" Magazinesturret[-1]: [] Magazinesturret[0]: ["CUP_2000Rnd_23mm_AZP23_M"] Weponesturret[-1]: [] weaponesturret[0]: ["CUP_Vacannon_AZP23_veh"]
web版のConfig Browserには必要な情報が普通に書いてあったりするのは知ってます。
しかし調べてもあったりなかったりするので、ものぐさな私はこれを貼っつけたミッションに車輌を出現させて飛行機や兵器のタレット情報を取得してます…2016年7月21日 4:05 PM #126946匿名無効Hello.
I made a hostage rescue (人質救出) mission template for you:
Here is a link to explain how to use it. https://forums.bistudio.com/topic/192837-i-made-an-all-in-one-hostage-rescue-template-for-missionmakers/
Here is a link to the scripting (must be server-side only, so use in initServer.sqf): http://pastebin.com/Y4c5b9Zv
2016年7月21日 6:23 PM #126981RoomyメンバーIs that compatible with ACE 3?
2016年7月21日 7:13 PM #126992tricoキーマスターnice script, sixtyfour
ACE対応、AIユニットをドラッグできるようにするスクリプト (by Yomo)
addDragging.sqf
//Carry _action1 = ["carry", "Carry", "", {[(_this select 1), (_this select 0)] call ace_dragging_fnc_startCarry; (_this select 1) sideChat "Carrying";}, {(alive (_this select 0)) and (vehicle (_this select 0) == (_this select 0)) and ((_this select 0) getVariable ['isDragging', False])}] call ace_interact_menu_fnc_createAction; ["b_soldier_unarmed_f", 0, ["ACE_MainActions"], _action1] call ace_interact_menu_fnc_addActionToClass; //Drag _action2 = ["drag", "Drag", "", {[(_this select 1), (_this select 0)] call ace_dragging_fnc_startDrag; (_this select 1) sideChat "Dragging";}, {(alive (_this select 0)) and (vehicle (_this select 0) == (_this select 0)) and ((_this select 0) getVariable ['isDragging', False])}] call ace_interact_menu_fnc_createAction; ["b_soldier_unarmed_f", 0, ["ACE_MainActions"], _action2] call ace_interact_menu_fnc_addActionToClass; //Load _action3 = ["load", "Load", "\z\ace\addons\medical\UI\icons\medical_cross.paa", {[(_this select 1), (_this select 0)] call ace_common_fnc_loadPerson; (_this select 1) sideChat "Load Person";}, {(alive (_this select 0)) and (vehicle (_this select 0) == (_this select 0)) and ((_this select 0) getVariable ['isDragging', False])}] call ace_interact_menu_fnc_createAction; ["b_soldier_unarmed_f", 0, ["ACE_MainActions"], _action3] call ace_interact_menu_fnc_addActionToClass; //UnLoad _action4 = ["unload", "Unload", "\z\ace\addons\medical\UI\icons\medical_cross.paa", {[[(_this select 0)], "ace_common_fnc_unloadPersonLocal", (_this select 0), false] call ace_common_fnc_execRemoteFnc; (_this select 1) sideChat "Unload Person";}, {(alive (_this select 0)) and (vehicle (_this select 0) != (_this select 0)) and ((_this select 0) getVariable ['isDragging', False])}] call ace_interact_menu_fnc_createAction; ["b_soldier_unarmed_f", 0, ["ACE_MainActions"], _action4] call ace_interact_menu_fnc_addActionToClass;
init.sqfに以下を書く
execVM "scripts\addDragging.sqf";
人質ユニット (b_soldier_unarmed_f) に以下を書く
this setVariable ["isDragging", true, true];
2016年9月4日 3:48 AM #141004michy_REV19キーマスター.. 、 ,_
 ̄\_/ ̄ ̄\/ ̄ ゴゴゴゴゴゴ・・・
___/ ̄へ√⌒l⌒´ ̄ ̄\_
´ / \どうも皆様こんにちは、ミッション製作がなかなか始まらないことに定評のあるみっちーでございます。
僭越ながら今回も製作したスクリプトを公開させていただきます。
Copy Classname Script by michy
(Download from Dropbox)実は数月前に完成して一部の方にはお渡ししてテストしていたのですが、問題なさそうだったので公開することにしました。
前置きはさておき、名前の通りクラスネームの取得を補助するスクリプトです。
新しい勢力を使ってミッションを作成するとき、一番楽しくかつ面倒なのがギア/アーセナルの作成だと思います。
ArsenalのExport機能やデバッグコンソール、他のスクリプトなどが使用されているかと思いますが、その多くは1つずつコピーしてメモ帳に貼り付けして…といったもので、沢山のアイテムを使用したい時は骨の折れる作業です。このスクリプトの特徴は
・Arsenalを開いた状態でコピーできる
・クラスネームを連続して配列形式で取得できる
・Arsenalから取り出せる全てのアイテムに対応(右タブの数量系アイテム以外)
といった点です。
取得対象が変更されたことをトリガーにクラスネームが配列に追加され、配列がクリップボードに保存されます。
このため、Arsenal上でコピーしたいアイテムをどんどんクリック(選択)していけば、それらすべてが配列形式でコピーされます。
極端な話、ライフルのクラスをを全て取得したいと思ったら、↓キーを押しっぱなしにすれば数十秒で取得できます。使い方はユニットのinit欄に以下を記述するだけ。全部入りArsenalのアクションも自動的に追加されます。
_nul = [] execVM "copyWpns.sqf";
あとはミッションを開始して、Select Data Typeで取得対象を選択してからポチポチするだけです。
リストプレビュー機能、リストクリア機能、全裸機能なども備えています。現状、マガジン/グレネード/爆薬/Misc Itemの数モノに関しては未対応で、てバックパックの中身をコピーする機能で代用しています。
後3種に関してはそれほど種類が多く無いため問題ないかと思いますが、マガジンに関してはConfigから自動的に取得できるように改良中です。感想叱咤激励罵倒恐喝喝天晴受け付けてます。
2016/09/12 追記
v1.1へ更新
ライフル/ランチャー/ハンドガンで使用可能な全てのマガジンを取得する機能を追加しました。
アンダーバレルグレネードには対応していないのと、モード切替のあとに銃をEmptyにする必要があります。- この返信は8年、 1ヶ月前にmichy_REV19が編集しました。理由: 更新
2016年12月20日 8:35 PM #177413StealerメンバーSet Suit Language To Spawned AI Character
湧かせたAIユニットに選択した言語の中からバリエーションをランダムに選択して割り当てます。
MODで追加された兵士は設定された所属勢力に関係なくデフォルトが英語になっていたりするので、湧かせるとチェダキやタキスタンゲリラが英語を喋って萎えたので作りました。
同梱の湧きスクリプトは必須ではないので、各自用意した湧きスクリプトに組み込んで使用してください。
湧かせたグループに対して使用する単機能スクリプトです。使い方
要素0: 対象(人物) _x 要素1: 言語 "ENG": 英語(アメリカ英語) "PER": ペルシャ語 (CSAT兵の言語) "GRE": ギリシャ語 "ENGB": ブリングリッシュ "ENGFRE": タノア語 "CHI": 中国語 "FRE": フランス語 ---MODで追加された言語の対応--- "RU": ロシア語 CUP追加 "TK": パシュトゥーン語(タキスタン語) ※バリエーション無し CUP追加
例
if !(isserver) exitwith {}; private ["_person","_language","_num","_options","_selected","_voice","_vanilla"]; _person = _this select 0; _language = _this select 1; _vanilla = false; _voice = ""; switch (_language) do { case "ENG": {_num = 12; _vanilla = true}; case "ENGB": {_num = 5; _vanilla = true}; case "ENGFRE": {_num = 3; _vanilla = true}; case "PER": {_num = 3; _vanilla = true}; case "CHI": {_num = 3; _vanilla = true}; case "FRE": {_num = 4; _vanilla = true}; case "GRE": {_num = 6; _vanilla = true}; case "RU": {_num = 5}; case "TK": {_num = 1}; }; _options = [1, _num] call BIS_fnc_randomInt; _selected = str ([_options] call BIS_fnc_selectRandom); if (_vanilla) then {_voice = ("" + "Male0"+ _selected + _language + "");} else {_voice = ("" + "CUP_D_Male0"+ _selected + "_" + _language + "");}; sleep .2; [_person, _voice] remoteExecCall ["setSpeaker", 0]; //オプション: 声の抑揚(ピッチ) 一度に湧かせるユニットがそれほどの数でない場合適用(通信負荷軽減) //[_person, (0.9 + random 0.2)] remoteExecCall ["setPitch", 0];
v0.01ではとりあえずのリリースですが、配置済みのMODユニットに対する煩雑な言語変更を緩和する為に一括適用する更新も需要があればします。
(早く修正されてレガシーになるといいね)16/12/22
v0.02 – edited by POLPOX(動作確認部のみ)
・対応言語追加
・消し忘れの変数/宣言の削除
・抑揚オプション追加- この返信は7年、 10ヶ月前にStealerが編集しました。理由: v0.02
2016年12月20日 9:20 PM #177422POLPOXメンバー2016年12月20日 10:05 PM #177430Stealerメンバー湧かせたロシア語圏ユニットが英語喋りやがって萎えたので、作ってたミッション放り出して欲しい機能だけ付けた急造品だったので修正助かりま。
editedのクレジット付けて上げ直しときまーす。追記:
あと添削してもらって悪いけど、これそのまま適用したら動作してなくて修正が二度手間になってるので、PMなり飛ばしてもらって編集・動作確認してからのリリース出来る流れを作れると助かります。 -
投稿者投稿
- このトピックに返信するにはログインが必要です。