arma3でチキンクリスプ食べながらスクリプト

arma3のエディッタ向けスクリプトを自分用に投稿

Arma3ミッションの昼夜の判定コマンドについて

ミッションを作るときは昼間か真夜中に作ることが多いが、早朝や夕暮れをまたぐミッションになることもある
日が昇って明るくなれば暗視ゴーグルを外し、日が沈めば暗視ゴーグルを被らなければいけない
車両を運転していればライトを操作することもある

プレイヤーなら自分の感覚で判断できるが、スクリプトではそうもいかない
自分で日没、日の出を設定しなければいけない
そこでゲーム内の時間を取得し、その時刻で昼夜を設定する方法にする人が多いと思う
そこで使うのがdaytimeやdateコマンドだと思う

_time = daytime;
/*時刻を0~24の値で_timeに返す。例えば12.5693だと12時34分56秒になる。
時の求め方
_hour = floor _daytime;
分の求め方
_minute = floor ((_time - _hour) * 60);
秒の求め方
_second = floor ((((_time - _hour) * 60) - _minutes) * 60);

floorは小数点以下切り捨て
*/

このようにdaytimeコマンドは秒まで計算できるメリットがあるが計算がややこしくなるデメリット

_time = date;
/*年月日時分までを配列で返す。時間は24時間単位で分を0~60分で表す。
例えば[2020,9,25,1,25]なら2020年9月25日1時25分になる
*/

このようにdateコマンドは年月日から取得できて時間計算が簡単だが、秒までは取得できない

以上2つのコマンドのどちらかを使って昼夜の判定をすることが多いと思う
例えば18時に暗視ゴーグルを装備するコマンドを使うとすると

if((date select 3) == 18)then{
_unit addItem "NVGoggles";
_unit assignItem "NVGoggles";};

のようになる

しかしここで注意したいことがある
ミッションの2035年6月26日と2035年12月26日では同じ18時であっても明るさが全く異なる
これでは時期が変わるたびに昼夜の時間帯を調べ直すことになり手間になる
f:id:question_and_life:20200925005602j:plain

そこでsunOrMoonというコマンドがある

_Sunrise = sunOrMoon;
/*太陽の上り具合を0~1の値で返す。
例えば昼間なら_Sunriseは1を返し夜間は0を返す。
日の入り、日の出の「数分間のみ」0-1の間を増減する値を返す
したがって
_Sunrise == 1なら昼間になるし、_Sunrise == 0なら夜間
_Sunrise == 0.66なら太陽が沈むか登るかのどちらかである
*/


時間帯をどのように取得し、使用するかはその時々で使い分ければ良いが使いやすさで言えばdateだろうと思う