今回はクラフティングにおける"素材"を定義するingredientsテーブルを解析します。
※多分にネタバレを含みます。ご注意ください。
サンプルデータ
データの参照元はingredients.xmlです。
今回はパターンごとに適当なサンプルを用意してみました。
<table name="ingredients">
<column name="nID">1</column>
<column name="strName">flame source</column>
<column name="strRequiredProps">3</column>
<column name="strForbidProps"></column>
</table>
<table name="ingredients">
<column name="nID">6</column>
<column name="strName">fireproof, waterproof container</column>
<column name="strRequiredProps">8&9&10</column>
<column name="strForbidProps"></column>
</table>
<table name="ingredients">
<column name="nID">17</column>
<column name="strName">medium or large shaft</column>
<column name="strRequiredProps">13&28</column>
<column name="strForbidProps">15</column>
</table>
columnの解析
今回はそれほど項目はありませんが、
実際には"itemprops"テーブルと"recipes"テーブル、
および"itemtypes"テーブルと密接に関連しているため、
実際の作業ではそれらのテーブルを行ったり来たりすることになります。
strNameは素材としての名前です。
レシピにも記載されるので、ちゃんとした名称を付けておきましょう。
strRequiredPropsはアイテムがその素材であるために必要な要素で、
数字は"itemprops"テーブルのIDです。
例えば、最初のサンプル(flame source)ですが、
記載された数字は"3"のみです。
"itemprops"テーブルで"3"は"igniter(点火装置)"と書かれています。
つまり、火を点ける機能のあるものはすべて火の源として扱われます。
データ上では、"itemtypes"テーブルのvPropertiesに"3"と書かれていれば
そのアイテムはすべて"flame source"です。
もちろん、必要とされる要素が複数要求されるものも存在します。
2番目のサンプル(fireproof, waterproof container)の場合なら、
"8"(container)、"9"(waterproof)、"10"(fireproof)の3つを満たすものは
耐火・耐水性の容器として使用できます。
このとき、各要素は","ではなく"&"で区切られていることを覚えておきましょう。
最後に、strForbidPropsはその素材が備えていてはいけない要素です。
つまり、strRequiredPropsだけでは絞り込めない要素を、
消去法によって絞り込むわけです。
3番目のサンプルの場合は、
"13"(shaft)かつ"28"(rigid)なアイテムのうち、
"15"(small)でないものが"medium or large shaft"となります。
データだけを見ると、情報量は少ないように見えますが
ingredientの設定には慎重さが要求されます。
例えばclean ragの素材となる"small absorbent, non-rigid sheet"は、
strRequiredPropsが"15,36,37"でstrForbidPropsは"28"となっています。
これに対してsmall animal hide(小さな毛皮)のvPropertiesは
"1,15,20,36,37,48,50"となっているため、煮沸すればclean ragになってしまいます。
(これが仕様としてアリなのかどうかは分かりませんが)
こういった、一見ありえなさそうなクラフティングも出来てしまうため、
"recipes"テーブルや"ingredients"テーブルの設定で、
正確さと柔軟さのバランスをうまく取ってやりましょう。
0 件のコメント:
コメントを投稿