[解説]Xpath append[初級編]

v2.0

はじめに

本稿では、Xpathの「append」タグについて解説します。
Xpathって何?って方は、まずこちらを確認ください)

以下の順番に解説していきます。

  • appendとは?
  • 使い方
  • 使うとどうなる?

appendとは?

appendとは、日本語で「追加する」という意味を持ちます。

Xpath上でもそのままの意味で、主にXmlにデータを追加する役目を持っています。

例えば、「アイテムゾンビなどを追加したい」「アイテムにパラメータを追加したい」「今まで作れなかったアイテムのレシピを追加したい」など、言語化した際に「追加」と付く時は大体使うことになります。

7 Days to Die 上では、以下のようなデータ構造があった際に、

<items>
  <item name="Item1"> ~ </item>
  <item name="Item2"> ~ </item>
</items>

<items>
  <item name="Item1"> ~ </item>
  <item name="Item2"> ~ </item>
  <item name="Item3"> ~ </item>  <- New!
</items>

このようにする時などに使用します。

使い方

実際に使う際は、Xpathの共通のパスをたどっていく方法で記述します。

目的別に何個かの例を記述します。

アイテムを追加する時

<append xpath="items">
  ここに追加するアイテムのXmlを記述
</append>

アイテムにプロパティを追加する時

<append xpath="items/item[@name='アイテムの名称']">
  ここに追加するアイテムのプロパティXmlを記述
</append>

アイテムにステータスを追加する時

<append xpath="items/item[@name='アイテムの名称']">
  <effect_group>
    ここに追加するパラメータのXmlを記述
  </effect_group>
</append>

↑<append xpath=”items/item[@name=’アイテムの名称’]/effect_group”> ~ </append>
としても良いのですが、もしアイテムに複数の<effect_group>が存在する場合その全てにパラメータが追加されてしまい、思わぬ結果になる事があるので<effect_group>自体を追加する方が安全です

使うとどうなる?

前項で例に出した使い方を実際に使うと、Xmlにどういう変化があるかをチェックしていきましょう。

※以下に出てくるパラメータやステータスはあくまで例として出しているだけの仮のものです。実際に使用できるパラメータやステータスは、元のXmlファイルに記載されているものをコピペして値等を変えて使うのが安全です。

アイテムを追加する時

append反映前Xml

<items>
  <item name="Item1">
    <property name="Group" value="Tool" />
    <effect_group>
      <passive_effect name="EntityDamage" operation="base_set" value="10" />
      <passive_effect name="BlockDamage" operation="base_set" value="10" />
    </effect_group>
  </item>
</items>

append コード

Modletフォルダ内[Config/items.xml]

<append xpath="items">
  <item name="Item2">
    <property name="Group" value="Weapon" />
    <effect_group>
      <passive_effect name="EntityDamage" operation="base_set" value="25" />
      <passive_effect name="BlockDamage" operation="base_set" value="5" />
    </effect_group>
  </item>
</append>

Modlet適用後

<items>
  <item name="Item1">
    <property name="Group" value="Tool" />
    <effect_group>
      <passive_effect name="EntityDamage" operation="base_set" value="10" />
      <passive_effect name="BlockDamage" operation="base_set" value="10" />
    </effect_group>
  </item>
  <item name="Item2">
    <property name="Group" value="Weapon" />
    <effect_group>
      <passive_effect name="EntityDamage" operation="base_set" value="25" />
      <passive_effect name="BlockDamage" operation="base_set" value="5" />
    </effect_group>
  </item>
</items>

アイテムにプロパティを追加する時

append反映前Xml

<items>
  <item name="Item1">
    <property name="Group" value="Tool" />
    <effect_group>
      <passive_effect name="EntityDamage" operation="base_set" value="10" />
      <passive_effect name="BlockDamage" operation="base_set" value="10" />
    </effect_group>
  </item>
</items>

append コード

Modletフォルダ内[Config/items.xml]

<append xpath="items/item[@name='Item1']">
    <property name="Tags" value="Weapon" />
</append>

Modlet適用後

<items>
  <item name="Item1">
    <property name="Group" value="Tool" />
    <property name="Tags" value="Weapon" />
    <effect_group>
      <passive_effect name="EntityDamage" operation="base_set" value="10" />
      <passive_effect name="BlockDamage" operation="base_set" value="10" />
    </effect_group>
  </item>
</items>

アイテムにステータスを追加する時

append反映前Xml

<items>
  <item name="Item1">
    <property name="Group" value="Tool" />
    <effect_group>
      <passive_effect name="EntityDamage" operation="base_set" value="10" />
      <passive_effect name="BlockDamage" operation="base_set" value="10" />
    </effect_group>
  </item>
</items>

append コード

Modletフォルダ内[Config/items.xml]

<append xpath="items/item[@name='Item1']">
    <effect_group>
      <passive_effect name="AttacksPerMinute" operation="base_set" value="120" />
    </effect_group>
    <property name="Tags" value="Weapon" />
</append>

Modlet適用後

<items>
  <item name="Item1">
    <property name="Group" value="Tool" />
    <effect_group>
      <passive_effect name="EntityDamage" operation="base_set" value="10" />
      <passive_effect name="BlockDamage" operation="base_set" value="10" />
    </effect_group>
    <effect_group>
      <passive_effect name="AttacksPerMinute" operation="base_set" value="120" />
    </effect_group>
  </item>
</items>

余白

今回は「append」の簡単な使い方とその凡例を中心に解説してみました。

パラメータやステータスの項目は、単語上は本当に使用されている名前を採用していますが、細かい属性等は見やすさの為省きました。実際に追加する際はもう少し属性が多く記述されていますが、最初のうちはとりあえず「name」の意味だけ理解して、コピペで実装 が鉄則です。

メモ程度に、今回登場した「name」を以下に紹介しておきます。

  • EntityDamage: 攻撃力
  • BlockDamage: ブロックに対する攻撃力
  • AttacksPerMinute: 近接装備の攻撃速度(base_setで設定される値 = 1分間に攻撃できる回数)

コメント