【GAME】ARMA3 EXILE MODサーバの旅その49
追記:今度こそマジで最終デバッグ
追記:{}地獄から這い出た
追記:動作確認の旅
まだ、Arma3スクリプトの闇に紛れ込んでおります。。
(;´Д`)
ただ、体感的に分かってきました。
公開するので、汚いコードは見せたくありません。出来るだけ綺麗に書き上げたい。もうちょいだけ頑張る。
されど配列、めっさ使いまくる配列について備忘録。公式(Array)
参照するッ
_array select 0; 0番(最初)を参照
_array select [1,2]; 1番から2個までの配列
_array select {_x isEqualTo 2}; trueを返した要素だけの配列
要素数を得る!
count _array
ループするッ
{ }forEach _array; _xに入ります
削除するッ
_array deleteAt 0; 0番を削除
_array deleteRange [0,2]; 0番から2個削除
_array1 = _array1 – _array2; 構造が合ったものを削除できちゃうが、これは怖いね。
_array resize 5; 先頭から5要素だけ残し削除
要素に入れてまう
_array set [0,”test”]; 0番に”test”を入れてまう
_array = _array apply {_x = _x * 2;}; 各要素に対して計算結果を格納してまう
_array pushBack 1; 最後に追加する
_array pushbackUnique 1; 配列内に1が無かったら追加される。有ったらエラーとして-1になる(戻り値は追加場所)
合体する!!
_array1 append _array2 (怪しい?)
_array1 = _array1 + _array2; 同じ:これなら安心
_array1 = +_array2; ヘルプにはこれでも良いようだが、動作が怪しい。
_array1 = _array1 arrayIntersect _array2; 両方の配列双方に、同じ値が入ってるものだけを抽出(論理式のANDみたいな感じ)
検索したい
_array find x; 要素番号が戻る。-1は見つからない
ソートする?(比較用コードは書けない)
sort _array trueかfalse; 単純な昇順降順ソートだけ
これはあくまで1次元配列のためのモノ。インデックスが2番目だったり、複雑な構造体のソートはゼロからこさえないといけない。
要素を反転しちゃう?
reverse _array; 全ての要素を反転する
シャッフルいてまう
有りそうで無かったので、こさえました。厳密には綺麗にシャッフルされませんけども、改造してください(reverseを見て察して)
private [“_vl”,”_cnt”,”_rst”];
for “_j" from 1 to floor((count _array) / 2) do
{
_vl = floor(random (count _array)) + 1;
_cnt = floor(random ((count _array) – _vl)) + 1;
_rst = _array select [_vl,_cnt];
_array deleteRange [_vl,_cnt];
_array = _rst + array;
if(random 1 >= 0.5)then{
reverse _array;
};
};
※見ての通り、配列の先頭と後ろが確率的に低い
余:重複しないランダム数字配列(0-9)
_cnt = 10;
_rst = [];
for “_j" from 1 to _cnt do
{
_val = floor(random (_cnt));
while{(_rst pushBackUnique _val) isEqualTo -1}do
{
_val = (_val + 1) mod (_cnt);
};
};
追記:動作確認の旅
大丈夫だ。動いてる。
(;´∀`)
自転車も、このアドオンで出せば、街中に、それっぽく置かれてるので雰囲気壊さずに良いかもです。
ちなみに、設定で、車両をエンジンオン状態、ライトon状態で湧かせられるかなぁ・・と思っていた時期もありましたが。
Arma3の仕様でダメなようです。
こういった類は、ローカル側でしか制御できないようでした。Exileサーバ側で用意されてるかも?と思ったけど、これ以上の深追いはやめよう。。
修正:
コードが間違ってた。サーバ側からも出来ます。とても簡単。
_vehicle engineOn true;
_vehicle setPilotLight true;
(;´∀`)
突如撃たれるので、アイテム漁りにも緊張感が出ます。
「居るかも・・?」
と思わせれば良いので、設定で町に0~1体だけでも十分な印象です。
追記:{}地獄から這い出た
・・が、分からないので、適当にゴリ押しで書いてたんですが。
や・・や、やっと。。
カラクリが分かった。。。
。゚(゚´Д`゚)゚。
まぁ・・どこぞに、こんな単純な比較文があったとしましょう。
_OK変数にフラグを入れて、いくつかの条件をチェックするような感じです。よくあるシチュエーションです。
if (_val isEqualTo 2)then
{
_OK = true;
};
んで、最後にこのフラグを見て、色々やりましょうと意気込む訳です。
if(_OK) then
{
いろいろ
};
ね?凄い単純なコードです。だがしかし、これはエラーで弾かれるんです。エラーで弾かれるんです。。弾かれるんです。。ヒロシです。
でもね。一番最初のif文に、これを追加すると。。
_OK = false; < これ
if (_val isEqualTo 2)then
{
_OK = true;
};
ちゃんと動作するんですよね。もう、これが謎過ぎて、今まで分からなかった。。
「例外なく{}の中はスコープ」
これは、if文も例外じゃねぇぞ、と。
(;´Д`)
もう、なんでしょう、心が晴れ晴れしております。モヤモヤが無くなりました。
まるで、1週間ぶりにお風呂に入ったような気分です。
(;^ω^)
getBuildingPosなんて、自分的には傑作です。
建物オブジェクトを渡すと、建物内の様々な場所を返してくれます。
入口/入口に近い場所/入口から遠い場所/低い場所/高い場所/道路に近い場所
これを使って、アイテムボックスやAIを配置してます。
追記:今度こそマジで最終デバッグ
自分なりには、欲しい機能は全て入れ込んだつもりです。
やるだけやった。
町に特化してるので、他アドオンに影響も与えないでしょう。どうぞ、使ってくださいまし。
今日夜か、明日には、Version1.1として公開致します。
Version1.0から、かなりの量(ほぼ全部)、改変しました。
デバッグ作業ですが、ランダムだらけで動作してるので、時と場所によってエラーが出たりするんですよ。
だから、何度も実行しては、確認してます。。
つ・・疲れた。。(;´Д`)
追記:アドオン改修完了と公開
たった今、Version1.1を公開しました。