2017/2/15 水曜日

ドアの開け方、閉め方

Filed under:   ─スクリプト編 — gachopin @ 22:51:51

ドアのアニメの名称の調べ方
hint format [“%1″,configProperties [configFile >> “CfgVehicles” >> typeOf(nearestBuilding getpos this) >> “AnimationSources”]];

↑でドアアニメの名前が”Door_1_source”だったときの開き方
(nearestBuilding getpos this) animateSource [“Door_1_source”,1]

2017/1/7 土曜日

クラス継承(+上書き)の話

Filed under: Armaアドオン製作支援,―config編 — gachopin @ 11:27:22

普通のアドオン作成では行わないconfig作成の応用編。
クラスを上書きして元のクラスを書き換えてしまうconfigの書き方について解説します。
けっこう複雑です。(そして、海外のサイトにもろくに解説が無い)
基本的なクラス継承はBISのwikiをご参照ください。

今回の目的:rhsusf_c_weaponsで定義されている5.56mmライフル用スコープを89式小銃に装備可能にすること。

光学照準器を装着するクラスは、cfgweapons⇒武器クラス⇒class WeaponSlotsInfo⇒class CowsSlotで定義します。
rhsusf_c_weaponsのcfgweaponsでm4のベースクラス(rhs_weap_m4_Base)を見てみると、以下のような記述があります。
class WeaponSlotsInfo
{
mass = 60;
allowedSlots[] = {901};
class UnderBarrelSlot: rhs_western_rifle_underbarrel_slot{};
class CowsSlot: rhs_western_rifle_scopes_slot_short{};
class PointerSlot: rhs_western_rifle_laser_slot_top{};
class MuzzleSlot: rhs_western_rifle_muzzle_slot{};
class GripodSlot: rhs_western_rifle_gripod_slot{};
};
光学照準機の定義はrhs_western_rifle_scopes_slot_shortを継承していることが分かります。
このクラスの親クラス(asdg_OpticRail1913_short)を見るとshortとlongに分かれており、longはスコープマウントが長いものに装着するスコープが定義されていることがわかります。つまり、スコープマウントが短い89式はshortを継承すればよい。
ただ、そのまま継承すると定義が上書きされてgac_JSDFのスコープが装着できなくなってしまうので、追記が必要です。

まずclass CfgPatchesで置き換え元のクラスを書き出します。
例) requiredAddons[] = {“rhsusf_c_weapons”,”gac_JSDF_weapon”};
次にRHSのスコープ定義を記述します。ただし、89式のスコープ定義を継承可能にするため記述を工夫します。

class asdg_OpticRail1913_short;
class rhs_western_rifle_scopes_slot_short: asdg_OpticRail1913_short
{
class compatibleItems; ←継承用に書いておく
};

最後にcfgweaponsのクラスに以下のように追記します。継承関係が分かりやすいよう、親クラスも載せておきます。
class Tavor_base_F; ←BISの銃
class gac_JSDF_W_R_Type89_base: Tavor_base_F ←BISの銃を継承した89式の親クラス
{
class WeaponSlotsInfo; ←継承用に書いておく
};
class gac_JSDF_W_R_Type89 : gac_JSDF_W_R_Type89_base {
class WeaponSlotsInfo: WeaponSlotsInfo ←Type89_baseのweaponslotsinfoを継承
{
class CowsSlot: rhs_western_rifle_scopes_slot_short ←上書き対称のCowsSlot
{
gac_optic_JGSDF_Dotsight = 1; ←継承しつつ、新たに89式小銃用スコープも定義
};
};
89式小銃の折り畳み銃床については最初からスコープがマウントしてある定義がしてあるためか、RHSのスコープが装着できません。おそらくRHSのスコープごとに【装着済みのクラス】を定義してあげないと装備できないと思います。(未確認)

2014/4/19 土曜日

砲撃支援スクリプト

Filed under: Arma一般,  ─スクリプト編 — gachopin @ 19:23:19

砲撃支援スクリプトを組みました。
多数のオプション項目付き。
arty_script.utes
22:30更新 dedicated serverで完璧に動きます

常にグループのリーダーが砲撃支援を行える権限委譲バージョン(テスト中)
arty_script_leader.utes

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{任意のスクリプト};を使う

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

2014/2/26 水曜日

zombieスクリプトの応用サンプル

Filed under: Arma一般,  ─スクリプト編 — gachopin @ 1:28:37

namalskのゾンビ楽しいです。
OFPの頃はよくゾンビミッションで遊んでいました。昔の再現したいなぁ。
MODの改造は禁止されてるのでスクリプトで工夫してより楽しくしていきます。

zombies

とりあえず400人出してみた。
生身のindipendent一人に対し、同じグループにcreateunitでゾンビを加えます。ゾンビを呼ぶスクリプトを動かしたらこの生贄はsetdamage 1しないとゾンビスクリプトがバグります。
これで144人の制限が解ける。

追記:スクリプト付きミッションをUPしました。

zombie_test.utes

上記スクリプトの使い方
・scripts\dontrun.sqfを実行するとプレーヤは走れなくなります。
・トリガー、グループの基本となるユニット1名(生身の人間)がセットで動作します。
・生身の人間は島のどこへ置いてもOK。(ゾンビの生成場所はトリガーに依存します)
・各トリガー、グループの追加、名前変更可能。
・scripts\zombie_create.sqfのパラメータについては、init.sqfを参照してください。
・上記sqfで生成場所(gamelogicまたはオブジェクトの名)、出現範囲グループ生成頻度無限か有限か生成数生成ユニットタイプ強さ死体削除までの時間を定義。
強さを1にすると頭を撃たない限り倒せなくなります。selectionのHEADに当たったかを認識してスクリプトで殺す設定。
・オブジェクト名 setVariable [“create”,1]; で生成
・オブジェクト名 setVariable [“create”,-1]; で全ゾンビ(殺して)削除
上記以外のパラメータにすると生成を保留します

3/2 上記ファイルを更新
バグFIX、頭を撃つと血しぶきが上がるエフェクト追加

2014/2/19 水曜日

マーカースクリプト

Filed under:   ─スクリプト編 — gachopin @ 10:14:47

ACE2でチームのマーカーが廃止(?)されたようなので、似たようなものを自作しました。
ACE無くても動きます。
download

スクリプトでトリガーを置くためのメモ

Filed under:   ─スクリプト編 — gachopin @ 0:34:37

ARMA2/3用のメモ

スクリプトだけでトリガーを作るのに、けっこうクセがあります。
注意するポイント
1.トリガーを指定の場所に作ってもtriggerAttachVehicleしないと動かない
2.setTriggerActivationの1つ目の引数は文字列じゃないと認識しない(side player等はダメ、”WEST”等。)
一度習得してしまえばミッションでトリガーを置く面倒から開放されます。
下記の例ではプレーヤの周囲半径200mの友軍を検出して_unitsに格納しています。
例)
init.sqf ←呼び出し元
[player,200,side player] execVM “trigger.sqf”;

trigger.sqf
_p = _this select 0;
_radius = _this select 1;
_side = _this select 2;

_trg=createTrigger[“EmptyDetector”,getPos _p];
_trg triggerAttachVehicle [_p];
_trg setTriggerArea[_radius,_radius,0,false];

if(_side == WEST)then{_trg setTriggerActivation [“WEST”, “PRESENT”, true];};
_units = list _trg;

2013/7/19 金曜日

ARMA3アドオン作製備忘録

Filed under: Armaアドオン製作支援 — gachopin @ 13:18:52

ARMA3のアドオン作製を調べることは、BIforumで外人が試みた足跡を辿る旅に繋がります。
これ!というベストなリンク集がないので、ここにメモしておきます。

エディットリンク
http://community.bistudio.com/wiki/Category:Arma_3:_Editing


https://community.bistudio.com/wiki/Arma_3_Cars_Config_Guidlines

人物
http://community.bistudio.com/wiki/Arma_3_Modding_Characters
http://forums.bistudio.com/showthread.php?148650-Old-stlye-US-Army-BDU
カスタムヘルメット
http://forums.bistudio.com/showthread.php?147988-Helmet-Addons&p=2318293&viewfull=1#post2318293
ベストのコンフィグ
http://forums.bistudio.com/showthread.php?148130-Arma3-Characters-Modding-Tutorial&p=2322957&viewfull=1#post2322957

武器
http://community.bistudio.com/wiki/Arma_3_Weapon_Config_Guidelines
武器の作例(ファイルはarmaholicのリンクがまだ生きている)
http://forums.bistudio.com/showthread.php?151659-M16A4-Example
武器、武器のアクセサリはautocenterをきちんと定義しないとずれる。

コリメーター
・viewLOD(0LOD?)のpropatiesにforcenotalphaを設定する。値は1。
コリメーター説明の訳
・pilotviewLODにてダットサイトのガラス部分の一番内側部分をコピーして延長し、
3mくらいに伸ばした円柱をつくる その真ん中にダットサイトの光点テクスチャをつけた四角を用意し
face properiesでlighting&shadowsをPositionsにする
Enable ShadowはOFFにする
円柱にはとても透明度の高いテクスチャを用意して貼るか、
#(argb,8,8,3)color(0,0,0,0.01,co)と書いておく
Facesはmove topにしておく。=透明度の優先度を最高にする
その後照準機の面全体を再び選んでmove topにする
照準機がガラス面を持っていたら、そこから更にガラスだけ選んでmovetopにする

http://community.bistudio.com/wiki/Arma_3_Weapon_Collimator_Sights
#(argb,8,8,3)color(1,0,0,1,co) – collimator mark will be visible always;
#(argb,8,8,3)color(1,0,0,0.99,co) – will work fine.

all in one config(古いか?)
http://forums.bistudio.com/showthread.php?150548-AllInOne-config-from-A3

2012/11/6 火曜日

乗れる椅子

Filed under: Armaアドオン製作支援,  ─スクリプト編 — gachopin @ 0:01:59

現在、ACE2で乗れる椅子(乗り物扱い)を召喚すると、ジェリ缶が一緒に出ます。
ジェリ缶を消すよりは、普通の椅子を乗れるようにしてしまおうということで、
マルチプレイ対応の椅子スクリプトを作成しました。
seat.utes.zip
プレーヤ側のユニットと椅子のinitにそれぞれ1文を追加する必要あり。詳しくは上記ミッションを参照してください。応用すればどこでも座る場所を確保できます。
(椅子と当たり判定の衝突を最小限にするために座るとき兵士を40cmほど浮かせてますが、それでも複数人で遊ぶときは少しずれてしまいます。attachtoを使えばずれなくなりますが、そこまでは未実施。)

ところでACE2環境下でremoveallweaponsでエラーが出るミッションがあるそうで、もし代替するならこの1文でどうぞ。(もしエラーが出れば、の話ですが}
{this removeweapon _x} forEach weapons this;{this removemagazine _x} forEach magazines this;

2012/8/19 日曜日

建物を作ろう 上級者編 その? 廃墟の表現(BISの廃墟の流用法)

Filed under: Armaアドオン製作支援,  ─house編 — gachopin @ 14:08:02

今回のファイルはこちら

建物を作った後、廃墟のモデルを用意するのは面倒なものです。
そこで、最も簡単に廃墟に置き換わる方法を解説します。
弄るのはconfig.cppだけ。
Houseの継承の部分を少し書き換えて、DestructionEffectsを利用できるようにします。
class HouseBase;
class House: HouseBase
{
   class DestructionEffects;
};

あとは建物のクラスに以下を追記します。

 class DestructionEffects: DestructionEffects
 {
   class Ruin1
   {
   smulation = “ruin”;
   type = “3dモデルのパス“;
   position = “”;
   intensity = 1;
   interval = 1;
   lifeTime = 1;
   };
 };

BISのモデルを流用して3dモデルのパスの部分に書けば、それだけでOKです。
CfgPatchesのrequiredAddonsにCABuildingsを追記しましょう。
(廃墟モデルを自作する場合は廃墟のクラスを別に作成する必要があります)

d6
こんな感じ。

では、作った建物と似た大きさのBISの廃墟はどうやって探せばよいか?

→CABuildingsの廃墟ビューワ―を作ってみたのでご覧あれ。
d5
Flagの位置に廃墟が出て、W、Sで切り替わります。
Flagの近くに作成中の建物を置いたりして、似たような大きさの廃墟を探してみるのがよいかと。
p3d名の一部をメモって、test.txtで検索すると便利と思います。


補足:
ミッションフォルダの中のExtract_Class_Model.plは、config.cppの中からクラス名とp3dのパスをミッション中のスクリプトで使う形に加工してtest.txtに出力するperlのスクリプトです。perlはこういうとき便利ですねぇ。
多分Cabuilding2でも動くと思うので、改造はご自由に。

廃墟ビューワーはこちら

次ページへ »

HTML convert time: 1.665 sec. Powered by WordPress ME