「arma3」タグアーカイブ

【game】Arma3スクリプト未整理の書

sc20170724192804その都度調べるのに疲れてしまたので、乱暴にメモしていきます。検証してないので嘘も混じってます。まったくの未整理です。その都度、修正・追記していきます(多分、相当長くなる)

しょうが無いね。

EXILE MODサーバ用で調べてるだけですので、他用途では参考程度に。質問はコメントに(気分屋なので返信する保証は無いけどねッ)

ボヘミア公式:言語仕様 大分類

文法メモ(独特ですがJavaScript風?)

private _val; 変数定義は不要。局所用はスコープ忘れず

_val = [“000″,”111″,”222”]; よく利用する配列(文字・数値・オブジェクトなんでも入ります)何重入れ子もOK

if(true) then{}else{}; 例外無く最後は”;”で締める。if文は忘れっぽい

swicth(_ass)do{ case “hole”: { };} でもswitchの最後は要らない

{   }forEach(_objs); forEachは良く使う(中身は”_x”に入る)

_trg setTriggerStatements [“true”,””,””]; オブジェクト(_trg)への操作はこんな感じで書きます。先頭にオブジェクト

コメント

他の主要な言語系(CやJava等)と同じ。//、/* */

コマンドリファレンス(複雑怪奇)

https://community.bistudio.com/wiki/Category:Scripting_Commands_Arma_3

https://community.bistudio.com/wiki/Category:Arma_3:_Functions

古いモノも含まれてるので注意です(BIS_から始まるもの:関数)コマンド名は動詞が先にくるものが多い。isServerとかCreateVehiceとか。

ファイルパスのデミリタ

”/”でも”¥”でも良いようだが、公式では”¥”で書かれてるようなので、統一しておいた方が良いようです。つまりはWindows向けっぽく。これでもLinuxで動作します。

スクリプトの初期化実行順序(但し、処理待ちせず並列で動作するので注意)

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

スクリプト並列処理の諸注意

多くのタスクが並列で動作するため、タイミングによっては動作しなくなる場面があります。切り分けが難しく、現在でもsleep()などでタイミングを取ってるスクリプトが多くあります。

デバッグログRPT出力公式

diag_log format [“%1, %2”, player, time];

_arr = [1, “foo”, player, “bar”]; diag_log _arr; 配列変数を渡しても展開して出力

時間を取得する

waitUntil {time > 0}; ミッションが始まるまで待機。timeはミッションスタートからの秒数

serverTime サーバとクライアントで同期されてるミッション開始からの秒数。但し、開始時5分間はその保証が無い。

diag_tickTime 1/1000秒

_now = date; 戻り値は[year, month, day, hour, minute]

フレームレートを取得する

diag_fps 平均フレームレート

diag_fpsMin 最小フレームレート

Description.extの書き方(各種定義・サウンド等)決まり事が沢山あるので要注意

https://resources.bisimulations.com/wiki/Description.ext

ファイルを探す場所(外部スクリプトやメディアファイルなど)

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

サウンド

Description.extで定義して、その名前(クラス名)を指定して鳴らす。又は、Arma3本体内蔵サウンド。ファイル形式は、ogg(オープンソース)かwss(ボヘミア独自)ミッションファイルがデカくなるので多用は難しい。

通常再生の他、3D効果(SFX/SGX)、バックグラウンド(Music)などがある。

SFXサウンド(未検証)

トリガーを絡めないと再生できない。基本的にはリピート再生。止める場合はトリガー削除でOK。エラーが頻発バグがあるため、$NONE$で回避する必要アリ(サウンド設定の類はDescription.extで細かく指定)

private “_trigger”; _trigger = createTrigger [“EmptyDetector”, position player]; _trigger setTriggerStatements [“true”, “”, “”]; _trigger setSoundEffect [“$NONE$”, “”, “”, “サウンドを指定”];

Arma3本体内蔵の効果音(これだけじゃないはず)

https://community.bistudio.com/wiki/Arma_3:_SoundFiles

検索用:playsound3d、say3D

オブジェクトから音をループで再生(もっとスマートな方法がありそう)

https://steamcommunity.com/sharedfiles/filedetails/?id=772764361

文字列の結合

“ass”+”hole” まぁ・・今風スクリプト言語っぽい

ランダムでオブジェクトを選ぶ(戻り値は要素)

selectRandom [“あ”,”ほ”,”の坂田”] 便利です

BIS_fnc_selectRandomというモノもあるが、推奨されてない。こちらはArray(要素1)で戻る

オブジェクトの生成

createVehicleで生成する。車両やAIでも、あらゆる物体は何でもコレです。違和感感じますがしょうが無いね(静的オブジェクトだけは別)Arma3固有の機能が有る状態で生成されます(武器クレイトとか)

静的オブジェクトは別で生成

シンプルオブジェクトは、MAPと同じ様に振る舞うモノで、処理速度が速い。createSimpleObjectで生成。あの忌まわしい物理演算が働きません(重要)。hideSelectionで対象選択も出来なく出来る。

物理演算について

Arma3はNVidiaのPhysXのみ対応なので、IntelビデオやAMD Radeonでは恩恵を得られません。残念ッ!!ちなみに、GeForceとRadeon2枚刺しすると、PhysXが無効になるよ。NVidiaが意地悪をしてる性だよ。ヒドイね

座標系について(要は海面基準かどうか)

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

MAPの左下が、[0,0]になってる。ゲーム中のGPSで表示されるのは、10m単位(桁に注意)

MAPのサイズを知る

_size = worldSize; //8192 (単位はメートル)

MAPの名前を知る

_name = worldName;

ロケーション関連種類

nearestLocations [player, allLocationTypes, 500]; 近場のロケーションを得る(リスト)

createLocation [className, position, sizeX, sizeY] ロケーションの作成

MAP上のランドマークリストを得る(市町村の場所)

_locations = (nearestLocations [_spawnCenter, [“NameVillage”,”NameCity”, “NameCityCapital”], _maxDistance]); ロケーションタイプの指定で対象を変更

ある場所から平坦っぽい場所を得る公式

イベント発生地や安全に車両を沸かせたい場合に便利

findSafePosを利用する方法

_tempPosition = [_pos,0,_maxDist,15,_inWater,20,0] call BIS_fnc_findSafePos;

isFlatEmptyを利用する方法

position isFlatEmpty [minDistance, mode, maxGradient, maxGradientRadius, overLandOrWater, shoreLine, ignoreObject]

ある場所から最も近い建物を調べる(リスト)

_buildings = _selectedPlayer nearObjects [“building”, 20];

ある場所から最も近い道路を調べる(リスト)

_nearRoads = _position nearRoads 500;

ある場所から最も近いオブジェクトを調べる(リスト)

nearestObjects [_position,[“Land_UWreck_MV22_F”],750])

_list = player nearEntities [[“Car”, “Motorcycle”, “Tank”], 50];

オブジェクト間の距離を測る(distance/distance2D)

2次元平面での直線距離か、高度も入れた最短距離かで選びます。

_meters = position player distance nearestLocation [position player, “hill”];

ある場所が水・海の中かを調べる(bool)

_isOverWater = surfaceIsWater _position;

マップマーカー関連マーカー

_marker = createMarker [format [“%1”, _locationName],_spawnPosition];
_marker setMarkerShape “Icon”;
_marker setMarkerSize [3,3];
_marker setMarkerType “mil_dot”; マーカー種類
_marker setMarkerBrush “Solid”;
_marker setMarkerText _markerName;
_marker setMarkerColor _markerColour;
_marker setMarkerAlpha 0.5;

トリガーの動作

20170724221714_1イベント条件判断には、トリガーを利用する事になりますが、イマイチ良く分からない場合。

Arma3を英語モードにして、条件の可否を確認すると分かり易いです。

英語モードにすると、引数やらが公式リファレンスと同じ表記になるため。

トリガーの作成(詳しくはリファレンス)

デフォルト値を保有してるので全て指定する必要無し。

private _trg = createTrigger [“EmptyDetector”, _pos,true];
_trg setSoundEffect [“$NONE$”,””,””,””]; エフェクト類
_trg setTriggerActivation [“NONE”,”PRESENT”,true]; 対象
_trg setTriggerStatements [“true”,””,””]; 条件式や動作スクリプト

設定ファイル(config)から読み出す(Arma2時代とは違う所)

_header = getMissionConfig “Header”

_respawnDelay = getMissionConfigValue [“respawnDelay”,0]

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

20170723203716_1暑さと、仕事が忙しくて、ほとんど作業が捗ってません・・。

(;´Д`)

1PCで、ARMA3サーバ+クライアントを動かすと、CPU負荷率はほぼ100%にひっつきます。

よって、想像を超えた暖房器具になってんです。一時期は、PCを窓の外!?に置いて作業してたくらいです。

20170720214433_1ちょこちょこと弄っては改修してます。

この場面は、EXILE鯖缶なら誰しもが通る道、「缶詰整理作業」の様子(これも地獄の作業)

私は、これをやりたくなくて、別な方法(手抜きとも言う)でやってたんですが、やっぱスタンダードな方法でやり直してます。

ちなみに、この缶詰の名前は。。

「because arma」(;´Д`)・・・・

20170723205252_1テストプレーもしてます。

こんな・・とか。
20170723205821_1こんな。
20170723210624_1ニワトリさんの前で、FRIEDとか。


sc20170723211814公式ランチャーでは、EXILEサーバだけで、ざっと5000を越えてます

ヽ(;゚д゚)ノ!?

ほとんどが海外ですけども。

しかしながら、プレーヤーがインしてるサーバは、10%程度なんですよね。

sc20170723203530どうせ、サーバをあげるなら、過疎でも・・オリジナリティのあるモノに仕上げたいので、もうちょい粘って構築します。

やっぱ自分でプレーしていてもオモロイ出来にしないと。

アリモノだけじゃなくて、アドオンの改造にも手を入れてます。

ゾンビは今の所いないんですが、導入するか、悩んでます。

sc20170723224614

・・と考えながらも、沸いたアイデアは実現しようとすぐさま作業に入ってまいます。

(;^ω^)

ペンディングリスト(作業予定)が凄い事になってます。

あぅ、GIMP使いづらいよ・・。

sc20170724001812ARMA3のスクリプトは正直良く分かりません。

公式サイトはあるんですが、イマイチ。サンプルも皆無。

ほとんど情報が無いので、他の人が作ったスクリプトを見ながら、言語仕様を覚えていくという感じです。

乱数(random)は、単純に乱数を作る他、偏らせる事も出来るみたい。オモロイですな。

トリガー(createTrigger)でスクリプトを走らせる事ができます。EDENで適当に作って中身コードを見れば良いな・・と思っていたんですが、バイナリ?で生成されてんですね・・。

うむむ・・(;´Д`)

書いては、動作確認の繰り返しですな・・。

【GAME】ARMA3 EXILEの新マップMALDENの旅84

sc20170719192418新MAPの「MALDEN」を見たことが無かったので、ちょっくら旅に出てみました。

ランチャーで検索してみると、JYNXとKongari#3の文字が。

JYNXがTanoaからMaldenマップに変更されたようです。

Kongari#3も新サーバとして追加のようです。ただ、まだロックが掛かってます。近日公開なのかな。

20170719192643_1JYNXサーバにお邪魔しました。

結構小さなマップ(4Km四方位?)で、スポーン3箇所、トレーダーは北端のようです。

このマップは、ARMA2時代のモノで、Arma3向けに作られた公式の無料マップ。

インしてるプレーヤーは5-6人のようです。

さーて、PvPしましょうか(;^ω^)

20170719192720_1とりあえず、南端からスタート。
20170719192953_1最初の武器は、ヴァーミン(SMG)ですか。
20170719193157_1空中に浮いた沸きアイテム。

EXILEにはMALDEN用設定が無いので、ゼロから構築しなければなりません。

こういうのはしょうが無いんです。鯖缶に報告すると、感謝されますよ。

20170719193319_1なんとなく、Altisに似たような雰囲気です。

島中央に山があるため、地平線はありませんが、Tanoaよりも遠くを見通せます。
20170719193428_1AK107を発見ッ!

m9( ゚д゚)

EXILEデフォの沸きっぽいなぁ・・と思っていた所だったので、ラッキー。

20170719193850_1早速、パトロールと遭遇。

1体は倒しましたが、どこからかリターンがある・・。

わからへん・・。
20170719194120_1車と武器が手に入るチャンスでもあります。

探せども、分からない。
20170719194350_1・・と。

ギリーを着た奴が車に近づいてきた。近場にイベントも無いし、確実に・・

プレーヤーです。PvPのチャーンス到来!

m9っ`Д´) バーストモードで乱射!!

・・・ま、とっさの事で、ゼロイン合ってないというオチでした。残念

20170719200307_1JYNXは前サーバもそうでしたが、ごった盛りのようで。

タブレットから車両を出したりできちゃいます。
20170719201211_1南東部の発電所付近。

ドアが開いてるので誰かが居た形跡があります。

慎重に索敵しながら移動します。
20170719201445_1ちょっと暗くて見えませんが、拠点を見つけました。

半島の先っちょなので、移動の便が悪い場所です。

・・という事は、ヘリを所有してる可能性が高い。ガチ勢か、鯖缶か。

20170719201733_1テントを発見。

集めた物資は、これに格納しておこう。
20170719201813_1装甲ブチ抜きM320を見つける。


20170719202307_1武器名忘れたが、6.5mmライフルに変えて、ここでログアウト。

しかし、この朝焼けの海岸線、美しいですなぁ・・。

さっき言ってた拠点が薄っすら見えます。