9. 状態を見て動かす
一度頼むたびに術式を動かし直すのでは工房を任せきれません。次はゴーレムの空きと鉱石の量を繰り返し確かめ、必要なときに仕事を頼む自律術式を組みます。
OnTickで繰り返し確認する
OnStartは開始時の処理、OnTickはScript実行中にゲームが定期的に呼び出す処理です。このように決まったタイミングで呼ばれる処理を「イベント」と呼びます。
OnTickの中に「空いていて鉱石が目標より少ないときだけ注文する」と書きます。呼び出されるたびに現在の状態を読み直すので、採掘中なら注文を見送れます。
二つの条件を組み合わせる
A && BはAとBの両方がtrueのときだけtrueです。次の例では「ゴーレムが空いている」と「鉱石の所持量が100未満」の両方を調べます。
ArcaneScript
public class Program : ArcaneProgram
{
public void OnTick()
{
var golem = Workshop.Golems[0];
if (golem.IsIdle && Workshop.Resources[ResourceKind.Ore].Total < 100)
{
var result = golem.Mine(Mineral.Ore, 20);
if (!result.Ok)
{
Workshop.Log.Write("Mining was not accepted.");
}
}
}
}!result.Okの!はtrueとfalseを反対にする記号です。ここでは「受け付けられなかったとき」にログを出します。
| 確認した状態 | この回の処理 |
|---|---|
| 空いていて、鉱石0 | 鉱石20を注文する |
| 採掘中で、鉱石が100未満 | 注文しない |
| 空いていて、鉱石100以上 | 注文しない |
100は注文前に調べる目安です。例えば所持量90で注文すると、完成後に110になることがあります。
止めるとき
観察を終えたらScriptを停止します。新しい自動注文は止まりますが、受け付け済みのジョブはオンライン中に進みます。
再入室後の再開にはOnRestoredという別のイベントがあります。呼び出しの一覧は値を引き継ぐで扱います。今はOnTickが呼ばれるたびに状態を確認する流れを確かめてください。
練習問題
所持量が60未満のときに注文するように変更してください。所持量がちょうど60で、ゴーレムが空いている場合は注文するでしょうか。
解答例を表示する解答例を閉じる
条件のTotal < 100をTotal < 60へ変えます。ちょうど60なら60 < 60はfalseなので、注文しません。
