このページで紹介しているのは、ゲーム「Autonauts(オートノーツ)」の「バケツのバグ」と、それに対応した自動プログラムの書き方です。
参考にしていただければ幸いです。
スポンサーリンク
■ 「バケツのバグ」とは?
本作には「バケツ」は3種類登場します。
・粗雑なバケツ
・上質なバケツ
・金属製のバケツ
の3つです。
それぞれ容量が異なります(耐久度も?)。
1回で入れられる砂や液体の数が違うというわけです。
粗雑なバケツは1杯。
上質なバケツは3杯。
金属製のバケツは5杯。です。
この内、複数杯入れられる
・上質なバケツ
・金属製のバケツ
にはバグが存在します。
これらのバケツで液体をすくい、アイテムクラフトのために作業台に投入すると、なぜかスクリプト通りに入れてくれないというものです。
・5杯入れてほしいのに、なぜか4杯しか入れない
・5杯入れてほしいのに、なぜか1杯しか入れない
毎回発生するわけではなく、稀に発生し、杯数は様々です。
これによって作業が止まってしまいます。
主に「淡水」を入れるクラフトアイテムで発生する気がします。
砂や液体を使うクラフトが増えてくると、止まるたびに対応するのが煩わしくなってくるはずです。
■ 「バケツのバグ」に対応するスクリプト
2つの対応方法があります。
・「粗雑なバケツ」を使う
粗雑なバケツを使うと、なぜかバグは発生しません。
粗雑なバケツは容量1ですので、「1杯すくって1杯入れる」。
とてもシンプルな動作をします。
作業効率は落ちますが、止まるバグに悩まされることはありません。
・サポート要員を当てる
「淡水」のみを入れるサポートボットを当て、2台体制で作ります。
これでバグが発生しても問題なく動きます。
「インク」のクラフト工程をサンプルに紹介しますね。
まず1台目のボットは、普通にそのアイテムを作る工程をプログラムしてください。
●メインボット
繰り返し:永遠に!
回収する
もし:手が空です
金属製のバケツの保管場所に移動
金属製のバケツの保管場所から取る
淡水の保管場所に移動
淡水の保管場所から取る
大釜に移動
繰り返し:4回:↓
大釜に追加
持っているアイテムをしまう
木炭の保管場所に移動
繰り返し:4回
木炭の保管場所から取る
大釜に移動
繰り返し:4回
大釜に追加
土器の瓶の保管場所に移動
土器の瓶の保管場所から取る
大釜に移動
大釜に追加
一番近いインクがある場所□
インクに移動
インクを拾う
インクの保管場所に移動
インクの保管場所に追加
※作りすぎ防止の仕組みは記述していませんので、「もし:インクの保管場所がいっぱいではありません」も最初に書き入れてください。
サンプルスクリプトとして提示しましたが、自分がよく書くスクリプトの書き方で構いません。ゲームをこの段階まで進めていれば、自己流が身についているはずです。
ポイントとなるのは、「大釜に淡水を入れる箇所」です。
「繰り返し:4回:↓」のところです。
回数を入れる右側にチェックボックスがありますので、これにチェックを入れてください。
「エラーが起きたときに、スクリプトの次の行に移動する」という意味になります。
これで、「サポートボットが淡水を入れて、メインボットが淡水を入れられなくて止まる」。という事態を回避しています。
続いて、サポート側のボットのスクリプトです。
●サポートボット
繰り返し:永遠に!
もし:手が空です
金属製のバケツの保管場所に移動
金属製のバケツの保管場所から取る
もし:インクの保管場所がいっぱいではありません
淡水の保管場所に移動
淡水の保管場所から取る
大釜に移動
繰り返し:2回:↓
大釜に追加
こちらもメインボット同様に、「繰り返し:2回:↓」のように、「エラー時は次行へ進む」のチェックボックスを入れてください。
2回としていますが、何回でも構いません。
足りなくなることが多い杯数を入れると良いと思います。
淡水を必要とするアイテムクラフトは他にも登場します。
以下のように追加してやれば、サポートボット1台で各所を対応できます。
もし:○○の保管場所がいっぱいではありません
淡水の保管場所に移動
淡水の保管場所から取る
粗雑な鍋に移動
繰り返し:2回:↓
粗雑な鍋に追加
もし:○○の保管場所がいっぱいではありません
淡水の保管場所に移動
淡水の保管場所から取る
錬金術ステーションに移動
繰り返し:2回:↓
錬金術ステーションに追加
木板や丸太を燃料として入れるスクリプトと似ていますね。
■ バグをスクリプトで対応する
このように、バグをスクリプトで強引に対応することも、プログラムでは可能です。
そもそもバグではなく、
「予期せぬ出来事が起こることがある」から、それに対応するサポート体制を作っておく。
という考え方ですね。
プログラミングは完璧に整えられた状況で作るもの、
と考えがちですが、必ず穴やバグはできてしまいます。
あるいは、外的要因でなぜか動かないという状況も発生します。
常に大元が直せるわけではないので、ツギハギであったり、あまりキレイな形でなかったとしても、動くという状況にするのは大切なことです。
■ 終わりに
以上、「【Autonauts】バケツのバグに対応したスクリプトの書き方【オートノーツ】」でした。
楽しいゲームに出会うための参考としていただければ幸いです。
スポンサーリンク