このページで紹介しているのは、ゲーム「Autonauts(オートノーツ)」の「上質なバケツ」や「金属製のバケツ」で砂や液体をすくう処理の自動プログラムの書き方です。
参考にしていただければ幸いです。
スポンサーリンク
■ 「バケツ」の種類
本作には「バケツ」は3種類登場します。
・粗雑なバケツ
・上質なバケツ
・金属製のバケツ
の3つです。
それぞれ容量が異なります(耐久度も?)。
1回で入れられる砂や液体の数が違うというわけです。
粗雑なバケツは1杯。
上質なバケツは3杯。
金属製のバケツは5杯。です。
「おお!いっぱい入れられるバケツの方がいいじゃん!」と思いますよね。
しかし実際にスクリプトを組んでみると、かなり難しいことが分かると思います。
■ 「上質なバケツ」「金属製のバケツ」の動作仕様
上質なバケツは3杯。
金属製のバケツは5杯。入ります。
これは、
・すくうとき(採集するとき)
・タルやサイロに入れるとき
は、1回の動作で中身の全てを出し入れします。
つまり、3杯入る「上質なバケツ」で淡水をすくうと、3つの淡水が手に入っています。
これをタルに入れると、タルは3補充されます。
これらは1動作で行われます。
その一方で、アイテムクラフトに使うときは、1個ずつ消費されます。
作業台に「淡水」を入れると、
・「上質なバケツ3/3(満タン)」であれば、「上質なバケツ2/3」になりますし、
・「上質なバケツ2/3」であれば、「上質なバケツ1/3」になりますし、
・「上質なバケツ1/3」であれば、「上質なバケツ0/3(空)」になります。
つまり、中身の状態が毎回異なるというわけです。
・満タン
・空
・ほどよく入っている
の3段階になります。
・すくいに戻るのか
・そのまま作業を続けるのか
・バックパックにしまう動作をするのか
これをスクリプトでうまく書けなければなりません。
更にこれに、「バケツの壊れ」も組み込む必要があります。
ちなみに、バケツに今どれだけ入っているかは、プレイヤーのインベントリのバケツにカーソルを合わせると表示されます。
「上質なバケツ2/3」などと表示されます。
中身が中途半端に入っている状態で(2/3など)もう一度すくうと、満タン(3/3)になります。
■ 「上質なバケツ」「金属製のバケツ」のスクリプトの書き方
・すくう、しまうスクリプト
まずは、「採集場所からすくう」「タルなどに保管する」スクリプトです。
これは簡単ですね。
繰り返し:永遠に!
もし:手が空です
上質なバケツの保管場所に移動
上質なバケツの保管場所から取る
もし:砂の保管場所がいっぱいではありません
一番近い砂がある場所□
砂に移動
持っているアイテムを使う(バケツ)
砂の保管場所に移動
砂の保管場所に追加
1回のすくう動作でバケツを満タン(3/3)にし、
1回の収納でバケツを空(0/3)にするため、
「粗雑なバケツ」と同じスクリプトで対応可能です。
・アイテムクラフト時のスクリプト
基本的に、どのアイテムクラフトでも、
「バケツに入る量」と「クラフトでの必要量」はイコールにはなっていません。
バケツには「3」入るけど、クラフトでの必要数は「2」といった具合に。
・中途半端に余る
・足りなくて取りに戻る
ことが常に発生します。
このスクリプトは難しい部類に入ると思います。
答えを見てもいいですし、
何度も何度もうまくいかない状況を試行錯誤してもいいと思います。
おそらく最も分かりやすいであろう「バター」のクラフトでのスクリプトを紹介しておきます。
「ミルク4」で、「バター1」がクラフトできます。
もちろん「ミルク」を運ぶのは「バケツ」が必要です。
「バター」のクラフトには「作業台:バター缶」を使います。
繰り返し:永遠に!
もし:バターの保管場所がいっぱいではありません
回収する
もし:手が空です
上質なバケツの保管場所に移動
上質なバケツの保管場所から取る
ミルクの保管場所に移動
ミルクの保管場所から取る
バター缶に移動
繰り返し:持っているオブジェクトが空になるまで
バター缶に追加
持っているアイテムをしまう
繰り返し:1回:↓
一番近いバターがある場所□
バターに移動
バターを拾う
バターの保管場所に移動
バターの保管場所に追加
このスクリプトは、とにかく「ミルク」を入れ、「バター」ができていたら拾う。
できていなかったら、また次の「ミルク」を入れる。
を繰り返しています。
まず最初に「回収する」を入れています。
これは、何らかの原因で最初から「上質なバケツ」を持っていた場合に対処しています。
「手が空だったら、上質なバケツを取りに行きます」
「持っているオブジェクトが空になるまで」とは、
オブジェクトとはバケツのことです。
バケツが空になるまで。
つまり、ミルクがなくなるまで作業台に追加しています。
次に「持っているアイテムをしまう」で一旦手を空けます。
作業台に「バター」が出来上がっていたら拾い、保管場所にしまいます。
できていなければエラーになってボットが止まってしまうため、防ぐために「繰り返し:1回」の右にあるチェックボックスをクリックし、「エラーになったら繰り返しを抜ける」としています。
これで、できていなかったら次の「ミルク」をすくいに行きます。
どうも「バケツ」の耐久度は、中身を全てなくした時に減るようです。
3/3→2/3→1/3の時には減らないようなので、途中で壊れることがありません。
そのため上のスクリプトで、壊れたときにバケツを取りに戻るが対応できています。
なお、上のスクリプトは、
「バケツの容量<クラフトでの使用量」でしかきちんと対応できていません。
「金属製のバケツ」で同じことをしようとすると、出来上がった「バター」が作業台横に積み重なってしまうと思います。
・アイテムクラフト時のスクリプト(修正版)
「バケツの容量>クラフトでの使用量」では、以下のスクリプトにするとキレイに流れます。
繰り返し:永遠に!
もし:バターの保管場所がいっぱいではありません
回収する
もし:手が空です
上質なバケツの保管場所に移動
上質なバケツの保管場所から取る
ミルクの保管場所に移動
ミルクの保管場所から取る
バター缶に移動
繰り返し:持っているオブジェクトが空になるまで
バター缶に追加
持っているアイテムをしまう
繰り返し:手がいっぱいになるまで:↓
一番近いバターがある場所□
バターに移動
バターを拾う
バターの保管場所に移動
繰り返し:手が空になるまで
バターの保管場所に追加
基本的に毎回「バター」は出来上がるため、必ずバターを拾いに行きます。
1個拾える時、2個拾える時が出ますので、「手がいっぱいになるまで:↓」を設定して、エラーになったら(3回目拾いに行こうとしたら)、次の行に進むようにしています。
今回は、比較的簡単な「バター」を作るスクリプトを書いてみました。
「ベリーソース」や「パイ生地」など、「淡水」以外に他のアイテムも入れなければならないクラフトは、もっと難しいスクリプトになります。
・必要な回数入れる
・もし:オブジェクトが空なら、オブジェクトが空ではありません
・回収する、持っているアイテムをしまう
あたりを使って考えてみてください。
毎回「淡水」をすくいに行けば、比較的簡単かと思います。
「バケツ」の内容量によって「淡水」をすくいに行くか判断するスクリプトは、かなり難しいです。
■ 終わりに
以上、「【Autonauts】上質なバケツ・金属製のバケツを使ったスクリプトの書き方【オートノーツ】」でした。
楽しいゲームに出会うための参考としていただければ幸いです。
スポンサーリンク