SpellCast入門 3.XMLの説明編
入門1~2で学んだことをベースに、もう少し高度なXMLの書き方の説明です。
当ページの記載を活用することで、シンプルな記述で、より高度な条件での利用が可能になります。
なお、XMLすべての日本語リファレンスではありません。
当ページの記載を活用することで、シンプルな記述で、より高度な条件での利用が可能になります。
なお、XMLすべての日本語リファレンスではありません。
Ctrl+Fでページ内を関連キーワードで検索してみてください。
- <Config> 動作状況をログで確認する
- <Sets> 装備セットの記述をシンプルにする
- <Rules> 魔法の種別(回復/精霊/暗黒など)を条件にする。
- <Rules> 8属性を条件にする。
- <Rules> 魔法詠唱や装備変更のタイミングを変える/時間差をつける
- <Rules> 魔法詠唱時の天候
- <Rules> 魔法詠唱時の曜日
- <Rules> 魔法/アビ/WSのターゲットのHP%
- <Rules><If> If内での条件分岐
- <Rules><If> 条件のOR、AND条件
- <Rules> 抜刀時、ヒーリング開始時、通常時の着替え
- <Rules> サブウェポンの変更
- <Rules> ChangeSpellの代用
<Config> 動作状況をログで確認する
xmlファイルがおいてあるフォルダには、「spellcast.log」というファイルが出来ていると思います。これは、Spellcastの動作状況を出力し続けているログです。ログを確認することで、<If>条件文のマッチング状況や、装備変更の状況などを確認することができます。次のように設定することでログを出力するようになります。ログ不要な場合は、"False"を設定しておいてください。
<Config
Debug="True"
/>
キーワード:Debug, Spellcast.log
<Sets> 装備セットの記述をシンプルにする
<set name="aaa" Baseset="bbb">を使って装備セットの記述をシンプルにすることができます。
<set name="STR">
<Head>ヘカトンキャップ</Head>
<Hands>アルキオネウス腕輪</Hands>
<Body>ヘカトンハーネス</Body>
</set>
<set name="NodownDEX_STR" Baseset="STR">
<Hands>アスカルマノポラ</Hands>
</set>
上の例では装備セット「NodownDEX_STR」は、装備セット「STR」をNodownDEX_STRの記述で上書きしたもの、になります。
すなわち、NodownDEX_STRは「ヘカトンキャップ」「ヘカトンハーネス」「アスカルマノポラ」を装備するものとなります。
数部位だけが違う装備セットを作る際に便利な設定方法です。
すなわち、NodownDEX_STRは「ヘカトンキャップ」「ヘカトンハーネス」「アスカルマノポラ」を装備するものとなります。
数部位だけが違う装備セットを作る際に便利な設定方法です。
キーワード:Baseset
<Rules> 魔法の種別(回復/精霊/暗黒など)を条件にする。
<If Skill="魔法種別名">で、魔法の種別でIfを記述することができます。
<If Skill="ElementalMagic">
<Action Type="equip" When="Precast" set="Ele" />
</If>
上の例では、詠唱した魔法がElementalMagic=精霊魔法の場合に装備セットEleに着替えるというものになります。
種別 | 魔法種別名 | 種別 | 魔法種別名 | |
精霊魔法 | ElementalMagic | 神聖魔法 | DivineMagic | |
弱体魔法 | EnfeeblingMagic | 暗黒魔法 | DarkMagic | |
強化魔法 | EnhancingMagic | 召喚魔法 | SummoningMagic | |
回復魔法 | HealingMagic | 忍術 | Ninjutsu | |
青魔法 | BlueMagic | 呪歌 | Singing |
キーワード:Skill
<Rules> 8属性を条件にする。
<If Element="属性名">で、魔法の属性でIfを記述することができます。
<If Element="Fire">
<Action Type="equip" When="Precast" set="FireSet" />
</If>
上の例では、詠唱した魔法が炎属性魔法の場合に装備セットFireSetに着替えるというものになります。
属性 | 炎 | 氷 | 風 | 土 | 雷 | 水 | 光 | 闇 |
属性名 | Fire | Ice | Wind | Earth | Thunder | Water | Light | Dark |
キーワード:Element
<Rules> 魔法詠唱や装備変更のタイミングを変える/時間差をつける
<Action Type="xx" When="タイミング" Set="xx">で任意のタイミングで装備変更等ができますが、そのタイミングに時間差を設けることができます。
<If Element="Fire">
<Action Type="CastDelay" Delay="2.5" />
<Action Type="equip" When="Precast" set="FireSet" />
</If>
上の例は、詠唱した魔法が炎属性魔法の場合に装備セットFireSetに着替えるものですが
着替えから、炎属性魔法の詠唱開始までに2.5秒間の待ち時間を設けます。
着替えから、炎属性魔法の詠唱開始までに2.5秒間の待ち時間を設けます。
Type=""への設定値 | 説明 | 標準の時間 |
CastDelay | Precast後~魔法詠唱までの時間 | 直後 |
MidCastDelay | 魔法詠唱後、MidCastで指定した装備変更を実行するまでの時間 | 0.6秒 |
AfterCastDelay | 魔法詠唱完了後、Aftercastで指定した装備変更を実行するまでの時間 | 1.5秒 |
キーワード:CastDelay, MidCastDelay, AfterCastDelay
<Rules> 魔法詠唱時の天候
<If WeatherElement="天候名">で、指定の天候の時に動作するIf~Actionを作成することができます。
<If WeatherElement="Fire">
<Action Type="equip" When="Precast" set="WeatherFire" />
</If>
上の例は、魔法/アビ/WSを使用したときに、炎属性天候の場合に装備セットWeatherFireに着替えるものです。
天候 | 炎 | 氷 | 風 | 土 | 雷 | 水 | 光 | 闇 |
天候名 | Fire | Ice | Wind | Earth | Thunder | Water | Light | Dark |
キーワード:WeatherElement
<Rules> 魔法詠唱時の曜日
<If Day="曜日名">で、指定の曜日の時に動作するIf~Actionを作成することができます。
<If Day="Fireday">
<Action Type="equip" When="Precast" set="FiredaySet" />
</If>
上の例は、魔法/アビ/WSを使用したときに、炎曜日の場合に装備セットFiredaySetに着替えるものです。
曜日 | 炎曜日 | 氷曜日 | 風曜日 | 土曜日 | 雷曜日 | 水曜日 | 光曜日 | 闇曜日 |
曜日名 | Firesday | Iceday | Windsday | Earthsday | Lightningday | Watersday | Lightsday | Darksday |
キーワード:Day
<Rules> 魔法/アビ/WSのターゲットのHP%
<If SpellTargetHPP="タゲのHP%">で、タゲのHP%の値が指定の値(を超える/丁度/未満)の時に動作するIf~Actionを作成することができます。
<If SpellTargetHPPGT="50">
<Action Type="equip" When="Precast" set="EquipName" />
</If>
上の例は、魔法/アビ/WSを使用した相手のHPが51%以上の場合に装備セットEquipNameに着替えます。
定義項目 | 説明 |
SpellTargetHPP | 魔法/アビ/WSを使用した相手のHP%が、ちょうど指定の値であった場合 |
SpellTargetHPPLT | 魔法/アビ/WSを使用した相手のHP%が、指定の値未満であった場合 |
SpellTargetHPPGT | 魔法/アビ/WSを使用した相手のHP%が、指定の値より大きい場合 |
キーワード:SpellTargetHPP, SpellTargetHPPLT, SpellTargetHPPGT
<Rules><If> If内での条件分岐
<If>を利用することによって、<If>内でさらに細かい条件分岐ができます。
<If>の基本文法は次のとおりです。
<If>の基本文法は次のとおりです。
<If xxx="yyy">
<If aaa="bbb">
<Action~① />・・・など
</If>
<Elseif ccc="ddd">
<Action~② />・・・など
</Elseif>
<Else>
<Action~③ />・・・など
</Else>
</If>
- 上記の例では、xxxがyyyである魔法/アビ等の場合に、aaa=bbbであれば①のみが実行
〃 ~場合に、aaaはbbbではなく、ccc=dddであった場合は、②のみが実行
〃 ~場合に、aaa=bbbでもなく、ccc=dddでもない場合は、③のみが実行されます。 - <Elseif "条件">~</Elseif>とは、直前の<If>の条件が満たされず、<Elseif>に記述した"条件"が当てはまった場合に、~が実行されるというもので、必ず</if>の直後に記述する必要があります。
- <Else>~</Else>とは、直前の<if>または<Elseif>が満たされなかった場合に、~が実行されるもので、</If>の直後、又は</Elseif>の直後に記述する必要があります。
<If>~</If>の中に、さらに<If>~</If>を記述することもできます。
下の例では、火属性精霊魔法を詠唱時のみ、火属性杖を装備。さらに火天候の場合のみ火輪の帯を装備するものです。3行目の<If>によって、火属性魔法のみ以外の場合は4~7行目は実行されないため、火以外の魔法の際に火天候であっても、火輪の帯に着替えることはありません。
下の例では、火属性精霊魔法を詠唱時のみ、火属性杖を装備。さらに火天候の場合のみ火輪の帯を装備するものです。3行目の<If>によって、火属性魔法のみ以外の場合は4~7行目は実行されないため、火以外の魔法の際に火天候であっても、火輪の帯に着替えることはありません。
- <If Skill="ElementalMagic">
- <If Element="Fire">
- <Action Type="Equip" When="Precast" Set="属性杖:火" />
- <If WeatherElement="Fire">
- <Action Type="Equip" When="Precast" Set="火輪の帯" />
- </If>
- </If>
- </If>
*Set名は便宜上日本語を使いましたが、本来は英数字しか使えません。
<If>、<ElseIf>で使用できる条件は基本的に<If>で使用できる条件と同様です。
次の「条件のOR、AND条件」も参照してください。
キーワード:<If>, <Elseif>, <Else>
<Rules><If> 条件のOR、AND条件
<If><ElseIf>の条件は、複数の条件をOR条件、AND条件で指定することができます。
まだ、<If>について理解されていない方は、さきに[こちら]をご参照ください。
まだ、<If>について理解されていない方は、さきに[こちら]をご参照ください。
下の例は、AND条件の定義方法です。
精霊魔法を使った際に、魔法が火属性でかつ(AND)、天候が火属性である場合に火輪の帯に着替えるというものです。魔法が水属性かつ火天候の場合など、は着替えません。複数の条件が全て満たされる必要があります。
精霊魔法を使った際に、魔法が火属性でかつ(AND)、天候が火属性である場合に火輪の帯に着替えるというものです。魔法が水属性かつ火天候の場合など、は着替えません。複数の条件が全て満たされる必要があります。
<If Skill="ElementalMagic">
<If Element="Fire" WeatherElement="Fire">
<Action Type="Equip" When="Precast" Set="火輪の帯" />
</If>
</If>
次に、OR条件の定義方法です。
下の例の場合では、精霊魔法であり、火属性魔法、又は(OR)、火天候の場合に着替えが行われます。どちらか片方、又は両方の条件さえ満たせばよいのがOR条件指定です。
下の例の場合では、精霊魔法であり、火属性魔法、又は(OR)、火天候の場合に着替えが行われます。どちらか片方、又は両方の条件さえ満たせばよいのがOR条件指定です。
<If Skill="ElementalMagic">
<If Mode="OR" Element="Fire" WeatherElement="Fire">
<Action Type="Equip" When="Precast" Set="火輪の帯" />
</If>
</If>
<If>に複数条件を記述した際には、通常はANDとして評価され、Mode="OR"とした場合のみ、OR条件として評価されることになります。
OR条件は、例えば次のような場合に利用します。
・「<if mode="OR" TimeLT="6.00" TimeGT="17.59">」・・・TimeLTはヴァナ時間が指定時間未満、TimeGTは指定時間を超えるという指定です。これをOR条件でまとめて「ヴァナ時間18:00~6:00の間の場合~」という指定になります。
・「<if mode="OR" TimeLT="6.00" TimeGT="17.59">」・・・TimeLTはヴァナ時間が指定時間未満、TimeGTは指定時間を超えるという指定です。これをOR条件でまとめて「ヴァナ時間18:00~6:00の間の場合~」という指定になります。
キーワード:<If>, <Elseif>, Mode
<Rules> 抜刀時、ヒーリング開始時、通常時の着替え
<If Spell="AutoSet">とWhen=~を組み合わせることで、抜刀時、ヒーリング開始時、通常時の装備変更などができます。
<If Spell="AutoSet">とは、プレイヤーステータスの変更時に実行されるものであり、<If Spell="Autoset">内の<If>にて目的のプレイヤーステータスを指定して装備変更を行います。
下の例は、抜刀すると抜刀装備→納刀すると通常時装備。ヒーリングするとヒーリング時装備へ着替え、立ち上がると通常時装備へ着替えるというものです。
<If Spell="AutoSet">とは、プレイヤーステータスの変更時に実行されるものであり、<If Spell="Autoset">内の<If>にて目的のプレイヤーステータスを指定して装備変更を行います。
下の例は、抜刀すると抜刀装備→納刀すると通常時装備。ヒーリングするとヒーリング時装備へ着替え、立ち上がると通常時装備へ着替えるというものです。
- <If Spell="AutoSet">
- <If Status="Engaged">
- <Action Type="Equip" When="Engaged" Set="抜刀装備" />
- </If>
- <ElseIf Status="Idle">
- <Action Type="Equip" When="Idle" Set="通常時装備" />
- </ElseIf>
- <ElseIf Status="Resting">
- <Action Type="Equip" When="Resting" Set="ヒーリング時装備" />
- </ElseIf>
- </If>
<IF Status~>というのが、プレイヤーステータスをあらわすものです。Status="~"には下のステータスを設定します。
Engaged | 抜刀時 |
Idle | 通常時 |
Resting | ヒーリング時 |
ここで注意したいのが、AutoSetが実行されるのは”プレイヤーステータスが変わった瞬間”のみということです。ヒーリング中だからといって、何回もAutoset Status=Restingが実行されるのではありません。
Restingが実行されるのは、通常状態(Idle)からヒーリング(Resting)した瞬間の1度のみです。
Restingが実行されるのは、通常状態(Idle)からヒーリング(Resting)した瞬間の1度のみです。
※<Action>のWhenには必ずIf Statusと同じタイミングを指定してください。PreCastなどを指定しても魔法/アビが実行されていなので、その<Action>は実行されないことになります。
キーワード:Spell="AutoSet"
<Rules> サブウェポンの変更
メインウェポンとサブウェポンを同時に変更した場合、「サブウェポンとして装備するには・・」というエラーでサブウェポンが装備できない場合があります。これは標準のFFXIマクロでも同様です。
対処方法としては、メイン装備>wait 1>サブ装備とwaitを設けることですが、SpellCastでは次のように設定します。
- <Variables>
- <Var name="SubWeapon">武器名</Var>
- </Variables>
-
- <Rules>
- <If Spell="Autoset">
- <If Status="Engaged">
- <Action Type="Equip" When="Engaged" Set="Fight" />
- <Action Type="Command" When="Engaged">wait 1; input /equip sub %SubWeapon</Action>
- </If>
- </If>
- </Rules>
これは抜刀時にSet名:Fightに着替えて、その1秒後にサブウェポンを装備する、というものです。
<Var name="SubWeapon">サブウェポン名</Var>は、"SubWeapon"という変数に武器名を設定しているというものです。9行目の"%SubWeapon"は武器名に置き換えられることになります。
Var・・と記述する理由は、JPIDConvの変換対象に加えるためです。
<Var name="SubWeapon">サブウェポン名</Var>は、"SubWeapon"という変数に武器名を設定しているというものです。9行目の"%SubWeapon"は武器名に置き換えられることになります。
Var・・と記述する理由は、JPIDConvの変換対象に加えるためです。
<Rules> ChangeSpellの代用
ChangeSpellは、「Aという魔法/アビ等を実行した場合に、実際にはBに変更して実行する」というものですが、日本語版FFXiではChangeSpellを使うことは出来ません。
※ChangeSpellには英語名でアビ/魔法等を指定しなければならない、しかし、日本語版FFXiでは/ma cure <t>など英語名でのコマンドは受け付けない
※ChangeSpellには英語名でアビ/魔法等を指定しなければならない、しかし、日本語版FFXiでは/ma cure <t>など英語名でのコマンドは受け付けない
そこで、CancelSpellを使って代用することができます。
- <Variables>
- <Var name="B">魔法B</Var>
- </Variables>
-
- <If Spell="魔法A">
- <Action Type="CancelSpell" />
- <Action Type="Command" When="precast">input /ma $B %SpellTargetName</Action>
- </If>
魔法Aを実行した場合、AはCancelSpellによって実行されず、input /ma $B %SpellTargetNameによって魔法Bが詠唱されます。(ユーザ変数は変数の前に%ではなく、$をつけます)
キーワード:CancelSpell, ChangeSpell
- 変更履歴
- 2009年5月14日 2.3より<Rule>を廃止、<If>に変更することによる変更