サンプルプログラム/Warheadの一括設定

Last-modified: 2017-11-18 (土) 12:54:32
Safetyで取得・書き込みできる項目が「Safety」(オンが安全側)から「Arm Warhead」(オンだとDetonateアクションで爆発できる)に変わったので、true/falseの方向性は下記サンプルと逆です。また、カウントダウンでの爆発には影響せず、どちらでもタイムリミットで爆発します。

船にあるすべてのWarheadのSafetyチェックボックスを元の状態に関係なくオフにする*1操作、爆発までの時間を書き換える操作、カウントダウンを開始させる操作をひとまとめにしたスクリプトの例です。

チェックボックスはタイマーなどのツールバーではオンオフ入れ替えしか設定できませんが、スクリプトを使用すれば元の状態の影響を受けずに任意の状態に切り替えることができます。たとえば、分離した後の爆弾等の側で実行することで、元の状態に関係なく爆発可能な状態にすることができます。


スクリプト

Safetyを解除し、爆発時間を1時間後に設定し、カウントダウンを開始します。

スクリプトの「//」から後ろは動作に影響しないコメントです。日本語はゲーム内で文字化けしますが、消さなくても動作します。

public void Main(string argument){
   var targets = new List<IMyTerminalBlock> ();
   GridTerminalSystem.GetBlocksOfType<IMyWarhead>(targets);
   foreach(var obj in targets){
       obj.SetValueBool("Safety", false); // Safetyをfalseに切り替える
       obj.SetValueFloat("DetonationTime", 3600.0f); // DetonationTimeを3600秒に設定する
       obj.ApplyAction("StartCountdown"); // StartCountdownを行う
   }
}

改造版置き場

カウントダウンを停止するだけ

public void Main(string argument){
   var targets = new List<IMyTerminalBlock> ();
   GridTerminalSystem.GetBlocksOfType<IMyWarhead>(targets);
   foreach(var obj in targets){
       obj.ApplyAction("StartCountdown"); // StartCountdownを行う
   }
}

Arm WarheadがSafetyだったころのサンプル

true falseが逆の場合と、別のアクションの場合の書き方サンプル用です。

カウントダウンをリセットして停止

カウントダウンを途中で止めるだけのStop CountdownアクションにくわえてDetonation timeの書き換えを行う例です。

public void Main(string argument){
   var targets = new List<IMyTerminalBlock> ();
   GridTerminalSystem.GetBlocksOfType<IMyWarhead>(targets);
   foreach(var obj in targets){
       obj.SetValueBool("Safety", true); // Safetyをtrueに切り替える
       obj.SetValueFloat("DetonationTime", 3600.0f); // DetonationTimeを3600秒に設定する
       obj.ApplyAction("StartCountdown"); // StartCountdownを行う
   }
}

カウントダウン停止と安全装置設定

Safetyを元の状態に関係なくオンにし、カウントダウンを停止するように変更したものです。

public void Main(string argument){
   var targets = new List<IMyTerminalBlock> ();
   GridTerminalSystem.GetBlocksOfType<IMyWarhead>(targets);
   foreach(var obj in targets){
       obj.SetValueBool("Safety", true); // Safetyをtrueに切り替える
       obj.GetActionWithName("StopCountdown").Apply(obj); // StopCountdownを行う
   }
}

安全装置解除とカウントダウン開始のみ

public void Main(string argument){
   var targets = new List<IMyTerminalBlock> ();
   GridTerminalSystem.GetBlocksOfType<IMyWarhead>(targets);
   foreach(var obj in targets){
       obj.SetValueBool("Safety", false); // Safetyをfalseに切り替える
       obj.ApplyAction("StartCountdown"); // StartCountdownを行う
   }
}

関連項目

コメント


*1 仕様上カウントダウン的には無意味。bool型参考用。