今回はクラフティングにおける"レシピ"を定義するrecipesテーブルを解析します。
※多分にネタバレを含みます。ご注意ください。
サンプルデータ
データの参照元はrecipes.xmlです。
今回のサンプルはroasted meat(焼いた肉)のレシピです。
<table name="recipes">
<column name="nID">6</column>
<column name="strName">roasted meat on a stick</column>
<column name="strSecretName">roasted meat on a stick (animal)</column>
<column name="strTools">1x7+1x17</column>
<column name="strConsumed">1x9</column>
<column name="strDestroyed"></column>
<column name="nTreasureID">55</column>
<column name="fHours">0.2</column>
<column name="nReverse">0</column>
<column name="nHiddenID">0</column>
<column name="bIdentify">0</column>
<column name="bTransferComponents">0</column>
<column name="vAlsoTry">71</column>
<column name="nTempTreasureID">3</column>
<column name="bDegradeOutput">1</column>
<column name="strType">food</column>
<column name="bScrap">1</column>
</table>
columnの解析
今回はどのcolumnも重要なので、1つ1つ確実に覚えておきましょう。
strNameはレシピ名です。レシピ一覧にもこの名前で記載されます。
strSecretNameは表示されないレシピ名です。空欄でも問題ありません。
メモ用として使っても問題なさそうです。
strToolsはレシピの中でも"道具"として扱われる素材です。
"道具"はクラフトでは消費されず、クラフト後に返却されます。
ここの文字列は、個数x"ingredients"テーブルのIDという形式で書かれていて、
サンプルでは"7"(heat source)と"17"(medium or large shaft)が指定されています。
strConsumedはクラフトで消費される素材です。
書式はstrToolsと同じで、サンプルでは"9"(small fresh meat)が指定されています。
strDestroyedはあまり使われることのない要素ですが、
そのクラフトを行ったあと、
完成品を分解するときに出る素材から削除するものを指定しています。
実際に使われているのは火を点けたあとのtorch系アイテムで、
strDestroyedには"2"とだけ書かれています。
このIDも"ingredients"テーブルのもので、"2"は"kindling"を指しています。
実際にtorchを作る際のレシピは、medium shaft+small flammable, non-rigid sheetで、
素材にkindlingは指定されていません。
ただし、"itemprops"から逆引きすると、"small flammable, non-rigid sheet"(rag)や
quarity torch作成で追加する"small kindling"は"1"(easily ignitable)を含むため
"kindling"としての条件も満たしています。
実際に火を点けたtorchを分解してみると、
素材になったragやtwigは削除され、medium shaftだけが返ってきました。
実用されているサンプルがかなり少ないのが残念ですが、
これもうまく使えば新しいギミックを組み込めるような気がします。
nTreasureIDはクラフトの結果生成されるアイテムを、
"treasuretable"テーブルのIDで指定しています。
サンプルの場合は、small meat (cooked)を生成するテーブルが指定されています。
このテーブルにはstrToolsで使用するアイテムは含まれていません。
fHoursはそのクラフトに掛かる時間(行動力)です。
それなりに説得力のある数値であれば問題なさそうです。
nReverseはクラフトしたアイテムを、素材の状態に戻せるかどうかを指定します。
戻せないレシピの場合は"0"で、そのまま分解できるものは"1"、
分解にstrToolsで挙げた"道具"が必要なものは"2"を指定します。
nHiddenIDには"0"か、もしくは特定のレシピのIDを指定します。
"0"の場合は何も起こりませんが、レシピのIDが指定された時は、
そのレシピの代わりに指定されたIDのレシピがレシピ一覧に記録されます。
実例を挙げると、small meat(human)を使ったroasted meatのレシピでは
nHiddenIDに"6"(roasted meat on a stick)が指定されています。
つまり、human meatで焼肉を作ったとしても
記録されるのは普通のroasted meat on a stickのレシピになるわけです。
bIdentifyは"1"を指定するとクラフトの生成物を識別済みにします。
bTransferComponentsについての情報は確認できませんでしたが、
あまり一般的には使われていない要素のようです。
基本的に"0"を指定しておけば問題ありません。
vAlsoTryは、セットされた素材がvAlsoTryで指定されたIDのレシピのものと一致するとき、
優先的にvAlsoTryで指定されたIDのレシピを使用します。
例えばサンプルのレシピでは、通常のレシピ(6)とhuman meatを使うレシピ(71)があり、
通常のレシピではvAlsoTryで"71"を指定し、
human meatのレシピではnHiddenIDで"6"を指定しています。
これによって、human meatを調理すれば、表示上は通常のレシピに、
しかし内部的にはhuman meatの調理を行うレシピとして処理されます。
このように、vAlsoTryを指定する場合はnHiddenIDとセットで考えたほうがいいようです。
nTempTreasureIDは、指定したIDのtreasuretableの内容を
クラフト結果が確定するまでの仮のものとして表示します。
この要素自体があまり使用されていませんが、
water testerによる水の検査(?マークの入った水アイコンの表示)で使われています。
bDegradeOutputは"0"を指定すると生成物のconditonが100%に固定され、
"1"を指定すると素材のcondition依存になります。
strTypeはそのレシピのカテゴリです。
レシピ一覧に表示されるレシピ名の頭に、この文字列が表示されます。
bScrapはそのレシピをscrap of paperとして生成するかどうかを指定します。
Ver1.06から追加された項目で、
"1"ならば従来通りに生成し、"0"ならば生成しません。
他テーブルの参照や複雑な要素の多いrecipesテーブルですが、
単純にアイテムの組み合わせだけならstrToolsとstrConsumedだけ弄れば事足ります。
あとは、目的に応じたパラメータの調整やオプションの選択を試してみてください。
0 件のコメント:
コメントを投稿