【GAME】ARMA3 EXILE MODサーバの旅その38

2018年1月2日プライベートarma3,exile,mod,server

追記:MAPオブジェ最終

。゚(゚´Д`゚)゚。

もう、牛歩状態ですわ。

着実に進んでる事は確かですけんども。

ここで、新たな新事実に触れてしまいます。

サーバ起動直後にインした時の様子です。

道路に面して設置したはずの看板が、明後日の方向を向いてます。

ですが、待ってると数秒後に、設置した方向に向くではないですか。

これは、initServer.sqfにエクスポートした、1000を超える全てのオブジェクトがそんな風に挙動してるんです。

スクリプト上では、createVehicle後すぐに、方向を設定してるはずなのですが、こんなにも遅延するんです。

何を”新事実”と言ってるかというとですね。

設置したオブジェクト同士の衝突判定”の事です。

インした時に、不可思議な場所に移動してたり、どっかに飛んでいたりするじゃないですか。これですよ。サーバ起動直後(initServer.sqf実行後)は、オブジェクト同士が重なってる可能性が大な訳です。

まだ、テストしてませんが、exile_3den.pboの吐き出したコードに、”sleep”を入れてこの遅延を吸収したら・・と思ってます。

但し、数千オブジェクトを1個づつウェイトを入れる訳ですから、initServer.sqfが終わるまで相当の時間が掛かります。

正しくは、スクリプト実行は終わってるが、画面に反映されるまで時間が掛かる。しかも、プレーヤーはその未反映状態でもインできる

看板(Land_billboard_F)を使って、画像を入れ込んでみました。

色々とできそうです。

なんで、マリオなのって?

別に意味ありません。

(;´∀`)

看板などにテクスチャーを割り当てるのはネット上にコードは沢山ありますが、私が欲しかったのは、簡単設置の方法なのです。そのままEDENで設置したいのです。

簡単にカスタム看板を設置する方法+1

普段通りにEDENで看板を設置します。exile_3den.pboで吐き出したinitServer.sqfのリストから、看板部分のリストとコードをコピペして、initPlayerLocal.sqfにコピーします。

して、コード内を以下のように少しばかり弄ります。赤字の部分に画像を書けばOKです。テスクチャなので、2のべき乗サイズでないとダメなようです(jpegかpaa)

ついでに、もう一個おまけで、3Dサウンド(SFX)の入れ方。配置したオブジェクトから音を鳴らしたい時とか(ここではラジオのオブジェクト)

private _vehicles = [
[“Land_Billboard_F", [6083.9, 5575.39, 306.37], [-0.953857, 0.300263, 0], [0, 0, 1], true],
[“Radio_Old", [6075.83, 5625.32, 304.345], [-0.329086, -0.944272, -0.00734195], [0.00962411, -0.0111285, 0.999892], true]
];
{
    private _vehicle = (_x select 0) createVehicleLocal [0,0,0];
    _vehicle allowDamage false;
    _vehicle setPosWorld (_x select 1);
    _vehicle setVectorDirAndUp [_x select 2, _x select 3];
    //_vehicle enableSimulationGlobal (_x select 4);
    //_vehicle setVariable [“ExileIsLocked", -1, true];

//ここからオブジェを判断して処理
   
    if (_vehicle isKindOf “Land_Billboard_F“) then
    {
        _vehicle setObjectTexture [0,"media\mario.jpg“];
    };
    if (_vehicle isKindOf “Radio_Old“) then
    {
        private _trg = createTrigger [“EmptyDetector", _x select 1];//,false];
        //_trg setTriggerActivation [“NONE","NOT PRESENT",false];
        _trg setTriggerStatements [“true","",""];
        _trg setSoundEffect [“$NONE$","","","Radio“];
    };
}
forEach _vehicles;

リスト内の、Radio_Oldという部分です。

トリガーを作って、それにSFXサウンドを割り当てます。”Radio”という部分。

音声ファイルは、description.extで定義する必要があります。

class CfgSFX{
    sounds[]={Radio};
    class Radio{
        sound0[]={“radio01.ogg",db-10, 1.0, 1000, 0.2, 0, 15, 30};
        sounds[]={“sound0"};
        empty[] = {“", 0, 0, 0, 0, 0, 0, 0};
    }
};

シンプルな様で、決まり事が沢山あります。1ファイルだけでも、ここまで書かないとダメなようです。

太字の部分が、ファイルと、3Dサウンドのための設定です(音量・距離2つ・ピッチ・減衰値など)

initServer.spfの方は、ループ部分に以下を追加しておけば、重複オブジェクト置きも回避できます(赤字が追記部分)

{
    //**add
    switch (_x select 0) do{
    case “Land_Billboard_F";
    case “Radio_Old":{}; ←最後はこんな書き方
    default{

        private _vehicle = (_x select 0) createVehicle (_x select 1);
        _vehicle allowDamage false;
        _vehicle setPosWorld (_x select 1);
        _vehicle setVectorDirAndUp [_x select 2, _x select 3];
        _vehicle enableSimulationGlobal (_x select 4);
        _vehicle setVariable [“ExileIsLocked", -1, true];
       
        if (_vehicle isKindOf “Exile_RussianRouletteChair") then
        {
            ExileRouletteChairs pushBack _vehicle;
            ExileRouletteChairPositions pushBack [_x select 1, getDir _vehicle];
        };

    };
    };
}
forEach _vehicles;

EDENで設定すると簡単だけども、スクリプトから書くと、とってもメンドイ。

ちなみに、initPlayerLocal.sqfは、速攻で実行解釈されるようで、initServer.sqfよりも、まるで速い(各プレーヤーローカルで実行されるので、マルチの際は実行結果が異なる場合があるので注意)

オブジェクトぶっ飛びについて、コメントにて、ゆきひとさんからヒントを頂きました。

EDEN上で、属性を開くと「シミュレーションを有効」(日本語UIの場合)がありますが、これが、エクスポート対象項目となってます。

スクリプトでは、enableSimulationGlobalに渡されるBool値です。

確かこの項目は、オブジェクト衝突判定処理を行うかどうかだったような気がします。OFFにすると、(当然ですが)PCへの負荷が激減すると公式には書かれてます。

これをOFFにすると、物体は見えるが触れない幽霊のようなシロモノになってしまいます。

なので、こんな、オブジェクトの上に置きたいオブジェクトなどに、これを適用するとベストです。

ちなみに、このPopTabsは、吹っ飛んでました。

(;´∀`)

備忘録。

トレーダーのアニメーションですが、EXILEフォーラム上に一覧があったのでご紹介。

Vehicle Trader Animation

ドイツ語で、Google翻訳もあまり頼りになりませんが・・。使えそうなアニメーションが一覧で並んでるので便利です。

アニメーションは複数登録可能です(連続再生)

追記:細かく大量作業

トレーダーの場所を細かく変更してしまったので、関連する設定を更新します。

mission.sqmだけでなく、Occupation側のBlacklistも更新しとかないといけません。

(DMSはMAPマークから読み取ってくれる)

300m以内には近づかないようにしてますが、持ってる銃器によっては撃ってきそうな距離かも・・しれない。

(;^ω^)

追記:何度かテストプレー

うんやー高みから見下ろす、この感じ、様になりますねぇ。

(;^ω^)


まぁ・・こうなりますけども。

(;´Д`)

AI強すぎねーか?

俺が下手すぎなのか?

実をいうと、セスナ機を湧かせておりましたッ!?

しかしながら、ほとんどの場合、物理演算が処理を終わらせようとしてなくて、確実にサーバ負荷の要因となっておりました。

おもろい仕込みとして考えてただけに、残念・・w

(;´∀`)

バニラでは結構コメントになってるアイテムが結構あります。

この辺はそのまんまだったので、ちょいと調べる。

H_HelmetO_ViperSP_hex_F

とか、これ凄そう。

メタルギアとかに出てきそうな風貌です。

(;・∀・)

追記:xm8_server_info.html備忘

タブレットのメニューにある、サーバ説明画面。

ここでは、HTMLで書ける印象ですが、俗に言うHTMLタグのほとんどが利用できません。

<H1-4><P><HR><BR><IMG><B>位のようです。

公式サイト解説

追記:細かいMAP修正

面倒臭いSimpleObject周辺をやっつけます。

MAPオブジェクトとしての武器や装備品系は、そのまま配置できず、「Because Arma缶」に変換してから微調整しなければなりません。

しかも、移動する度に角度はリセットされ、オブジェクトによって位置がさまざま、結果は画面上にはリアル表示されないので、”想像しながら”の連続微調整となります。

これが、面倒くさく億劫になってしまう。

(;´Д`)

初めて作業される方へ

メニューのEXILEから「Run Sanity Check」を行い(exile_3den.pboによる機能メニュー)

上記に該当されるオブジェクトが存在するかをチェックします(オブジェクトクラス名のみが表示されるので、分からなくなったら武器・装備系を探す)

オブジェクトを選択して、「Convert into Simple Object」をクリックして、BecauseArma缶に変換します(オブジェクトに缶詰が追加されます)

※オブジェクトは、ただ見えてるだけで触れません。実態は缶詰の方です。変換の際、画面上から消える場合があります。一度保存して、エディタを終了して起動すると、表示されてる場合があります

位置・高さを変更するとリセットされてしまうため、先に位置・高さを合わせます。法面スナップ機能がONだと微調整できないため、編集メニューから、”画面位置合わせの切替”をOFFにする事をおすすめします。

その都度、テンキーの”0”を押して、プレビュー表示を確認します(「Exile」>「Synchronize Simple Object」)

”高さ”と”場所”を決めたら、回転機能で、希望の”角度”を調整します。

プレビュー表示を繰り返して、適切な調整値を見つけます。

この時点で、位置や高さを変更したい場合は、また上手順に戻っての繰り返しです(回転値がリセットされるため)

武器系はやりやすいですが、ヘルメットやバックパックなどは、形状的に難しいです。

追記:MAPオブジェ最終

つ・・疲れた・・。

こちらのWASTE DUMPトレーダーさんで、作業予定としてリストアップしてたMAP系作業が完了しました。

リスクの無い(バグ出ない)作業となると、ついつい凝ってしまうもんです。

MAPオブジェの配置のこだわり・・w、トレーダーの顔や色、服装までも吟味しながら、アニメも選択します。

WASTE DUMPっぽいんじゃないでしょうか。。

(;´∀`)

2018年1月2日プライベートarma3,exile,mod,server

Posted by nabe