Hello, everyone. I'm Techno from the Phoenix server and this is my blu_nin.xml file. If you've looked through the user-submitted XML files before you may have seen my multiple job XML. I went with the multiple job XML approach because I liked the idea of being able to reuse the rules I'd written without having to copy them between different XML files for different jobs. Now that Spellcast v2.3 has been released in beta, however, I wanted to try out some of its new features. Specifically, I liked that it would automatically change to the appropriate XML file based on your job and subjob. So, I ended up splitting my single XML file into many.
You should note that I no longer play FFXI. This file will not be updated anymore. I am posting this final update on Nov. 9, 2010 in order to upload any changes I made before quitting during the time when I was unable to update this wiki entry. If you need some help with your Spellcast XML file, PM me on the forum and I will still probably be willing to help you. Please note, however, that I essentially know nothing about anything added in the Sept. 2010 update or afterward. I had become disillusioned with SE by that time and checked out of the game. I never broke the level 80 cap, I didn't order Scars of Abyssea, and I hated Trial of the Magians. Do not expect there to be any information about gear or abilities that were added in Sept. 2010 or afterward in this file.
This is the XML file for my BLU/NIN. I have a separate file for all other subs. To understand exactly what is going on in it you need to also check out my include.xml file. If you're not familiar with Spellcast v2.3 and include statements then I've included a short guide on that page to explain what include statements are and how they can benefit you.
Some notes about this file:
I still think of myself as a novice BLU. In that sense, I'm not the best person to be qualified for giving advice to other BLUs about their gear. That said, I've worked hard recently to improve my BLU
XML file and to improve my BLU-playing skills. I still have a lot to learn about it, but I'm getting there. I also have a lot more gear to get for BLU, which is scary since I already seem to have so much. It's my hope that people reading this
XML will be able to get a sense for how a BLU
XML file can be constructed. I would encourage you to work on it with a more experienced BLU though.
Several months ago I promised some people on the forum who were using my DRG
XML as a template that I was going to make an effort to simplify my automatic event set change code. I started writing this code a while back because I wanted to create a way for Spellcast to work together with Autoexec in order to automatically change what gear I had equipped depending on what event I was doing, specifially Assault and Campaign. Why do this? It was mostly for my own amusement, partly so that I didn't have to remember to change gear groups upon entering said events. I'm skipping the usual explanation of why I made major changes because it was long, boring, and irrelevant. What you see here is the third (and final) version of my attempt to do this. It uses a concept I called Dynamic Set Inheritance. I was pleasantly surprised to find that Spellcast does support it. Kudos to Aikar for having the foresight to include it.
This is not for the faint of heart or people who have no idea what they're doing. If you're a Spellcast newb, you may just want to turn around and go back where you came from now. Copy and paste my XML file at your own risk. I take no responsibility for failed/bugged attempts to implement any changes to my work, though I might be inclined to help you out if you ask nicely.
The heart of all this lies in Autoexec XML rules. Autoexec updates a Spellcast variable called $EventStatus. $EventStatus contains the information on what event you are currently taking part in, eg: Normal, Assault, Campaign. If you wanted to add other events such as Dynamis, you certainly could. Here is the code to enable this:
<?xml version="1.0" ?>
<autoexec>
<!-- Triggers for Campaign -->
<register silent="true" event="gainbuff_Allied_Tags">sc var set EventStatus "Campaign";</register>
<register silent="true" event="losebuff_Allied_Tags">sc var set EventStatus "Normal";</register>
<!-- Triggers for Assault -->
<register silent="true" event="zone_Ilrusi*|zone_Mamool*|zone_Periqia|zone_Lebros*|zone_Leujaoam*|zone_Nyzul*|zone_*Talif|zone_*Remnants">sc var set EventStatus Assault;</register>
<register silent="true" event="zone_Aht*">sc var set EventStatus Normal;</register>
</autoexec>
Contrary to my former hatred of creating lots of different gear sets, Dynamic Set Inheritance relies on it. If you have a single piece of gear that is different in your Campaign WS set, you have to create a Normal WS set and an Assault WS set even if you don't do anything different in your Assault WS set. The benefit over my old method, however, is that you're able to alias sets that use the same pieces of gear or leave sets blank rather than creating an exponentially-growing list of variables.
As an example of what to do, I will describe the situation with WS gear in my DRG XML file. I specify sets for 5 different WSs. These WS sets also have a base set that they inherit from. The base WS set contains pieces of gear common to all or most of the WSs. I also have a few pieces of gear that I want to equip in events such as my Ulthalam's Ring in Assault or my Bull Necklace in Campaign. So, how this works is that the WS-Base set dynamically inherits from the event-specific sets. The event-specific sets obviously contain the event-specific gear which must be locked to prevent inheriting sets from overriding those pieces. When the $EventStatus variable is set, the WS-Base set will automatically inherit from the correct event-specific set. Then, the individual WS sets inherit from WS-Base. For you nerds, it's a many-to-one-to-many relationship.
The final thing to note is that if you have a situation where a base set inherits from the event-specific sets, you must create an empty “Normal” set. Take for instance the aforementioned WS example. The basic WS gear must be included in the WS-Base set. So this is your Normal WS gear. You might be tempted to alias the Normal-WS set to the WS-Base set. After all, they're the same, right? But the WS-Base set inherits from $EventStatus-WS. If this is Normal-WS, then it will try to look at that same set. Then it will look for what that set inherits from, which again is Normal-WS. Thus, you have a potential there for creating an infinite loop. I never tried this to find out what would happen, but I don't advise it. Just create the empty Normal set.
All of my spell gear sets and my rules for my casting blue magic and weaponskills are in a seperate include file which I've named BLUinclude.
XML. As I said before, I have two
XML files for BLU: one for /NIN and one for everything else. If I have to change a piece of gear or a blue magic rule, I don't want to have to change both files. With the BLUinclude.xml file I only have to make one change for both. Only the Standard (TPing) set is put in the BLU.
XML or BLU_NIN.
XML file since that set is where the two files are different due to dual-wielding vs. equipping a sword and shield. Of course, that's all irrelevant now since BLUs potentially have native dual-wield, but that was added right as I was checking out of the game so I didn't think about the fact that I ought to come up with a different plan for my
XML file setup until just now, two months after quitting. At any rate, the BLUinclude.
XML file is shown here:
<?xml version="1.0" encoding="utf-8"?>
<includes>
<!-- Blue Magic rules -->
<include name="GearSets">
<set name="Normal-TP" baseset="Standard"/>
<set name="Assault-TP" baseset="Standard">
<lring>Imperial Ring</lring>
</set>
<set name="Campaign-TP" baseset="Standard">
<lring>Patronus Ring</lring>
</set>
<set name="Idling" baseset="$EventStatus-TP">
<legs>Crimson Cuisses</legs>
</set>
<set name="Fast Cast">
<rear>Loquacious Earring</rear>
<legs>Homam Cosciales</legs>
</set>
<set name="Resting">
<main>$Staff-Dark</main>
<head>Yigit Turban</head>
<neck>Grandiose Chain</neck>
<lear>Antivenom Earring</lear>
<body>Yigit Gomlek</body>
<waist>Hierarch Belt</waist>
<legs>Yigit Seraweels</legs>
</set>
<set name="Normal-WS|Normal-STR|Assault-STR|Normal-DEX|Assault-DEX" />
<set name="Assault-WS">
<lring lock="true">Ulthalam's Ring</lring>
</set>
<set name="Campaign-WS">
<ammo lock="true">Fullmetal Bullet</ammo>
<neck lock="true">Bull Necklace</neck>
</set>
<set name="WS-Base" baseset="$EventStatus-WS">
<ammo>Olibanum Sachet</ammo>
<neck>Kubira Bead Necklace</neck>
<body>Homam Corazza</body>
<lring>Flame Ring</lring>
<rring>Rajas Ring</rring>
<waist>Warwolf Belt</waist>
<back>Cuchulain's Mantle</back>
</set>
<set name="Blue Magic Skill">
<head>Mirage Keffiyeh</head>
<body>Magus Jubbah +1</body>
</set>
<set name="Campaign-STR">
<ammo lock="true">Fullmetal Bullet</ammo>
<neck lock="true">Bull Necklace</neck>
</set>
<set name="STR" baseset="$EventStatus-STR">
<ammo>Olibanum Sachet</ammo>
<neck>Kubira Bead Necklace</neck>
<rear>Bushinomimi</rear>
<body>Magus Jubbah +1</body>
<waist>Warwolf Belt</waist>
<lring>Flame Ring</lring>
<rring>Rajas Ring</rring>
<back>Cuchulain's Mantle</back>
<feet>Denali Gamashes</feet>
</set>
<set name="Campaign-DEX">
<ammo lock="true">Fullmetal Bullet</ammo>
</set>
<set name="DEX" baseset="$EventStatus-DEX">
<lear>Delta Earring</lear>
<neck>Kubira Bead Necklace</neck>
<body>Magus Jubbah +1</body>
<hands>Mirage Bazubands</hands>
<rring>Rajas Ring</rring>
<back>Cuchulain's Mantle</back>
<waist>Warwolf Belt</waist>
<legs>Magus Shalwar +1</legs>
</set>
<set name="INT">
<ammo>Phantom Tathlum</ammo>
<head>Magus Keffiyeh +1</head>
<lear>Morion Earring</lear>
<rear>Moldavite Earring</rear>
<body>Errant Houppelande</body>
<lring>Hale Ring</lring>
<rring>Omega Ring</rring>
<back>Gleeman's Cape</back>
<waist>Penitent's Rope</waist>
<legs>Denali Kecks</legs>
<feet>Yigit Crackows</feet>
</set>
<set name="MND">
<head>Magus Keffiyeh +1</head>
<rear>Moldavite Earring</rear>
<neck>Morgana's Choker</neck>
<body>Errant Houppelande</body>
<hands>Mirage Bazubands</hands>
<lring>Hale Ring</lring>
<rring>Omega Ring</rring>
<waist>Penitent's Rope</waist>
<feet>Yigit Crackows</feet>
</set>
<set name="CHR">
<lear>Delta Earring</lear>
<body>Errant Houppelande</body>
<rring>Omega Ring</rring>
</set>
<set name="VIT">
<ammo>Bibiki Seashell</ammo>
<head>Mirage Keffiyeh</head>
<waist>Warwolf Belt</waist>
<legs>Magus Shalwar +1</legs>
</set>
<set name="Magic Accuracy">
<ammo>Sturm's Report</ammo>
<head>Homam Zucchetto</head>
<lear>Aptus Earring</lear> <!-- Magic Acc. +2, Spell interruption rate down 1% -->
<hands>Nashira Gages</hands>
<rring>Omega Ring</rring>
<legs>Denali Kecks</legs>
<feet>Denali Gamashes</feet>
</set>
</include>
<include name="BlueMagicRules">
<if Skill="BlueMagic" NotSpell="Cocoon|Refueling|Feather Barrier|Memento Mori|Zephyr Mantle|Warm-Up
|Amplification|Saline Coat|Reactor Cool|Exuviation|Plasma Charge|Regeneration|Animating Wail|Battery Charge">
<!-- Head Butt (Blue Magic Skill > INT) -->
<if spell="Head Butt">
<equip when="midcast" set="Blue Magic Skill|INT" />
</if>
<!-- STR > DEX Spells-->
<elseif spell="Bludgeon|Battle Dance|Uppercut|Mandibular Bite|Death Scissors
|Frenetic Rip|Frypan|Disseverment|Ram Charge|Vertical Cleave">
<equip when="midcast" set="STR|DEX" />
</elseif>
<!-- Acc Spells-->
<elseif spell="Frypan">
<equip when="midcast" set="Accuracy" />
</elseif>
<!-- VIT > STR Spells -->
<elseif spell="Body Slam|Cannonball">
<equip when="midcast" set="VIT|STR" />
</elseif>
<!-- DEX Spells-->
<elseif spell="Sickle Slash|Seedspray|Hysteric Barrage">
<equip when="midcast" set="DEX" />
</elseif>
<!-- MND Spells -->
<elseif Spell="Pollen|Healing Breeze|Wild Carrot|Magic Fruit">
<equip when="midcast" set="MND" />
</elseif>
<!-- MND Nuke Spells -->
<elseif Spell="Mind Blast|Magic Hammer">
<equip when="midcast" set="MND">
<main>$Staff-%SpellElement</main>
<sub>Bugard Strap +1</sub>
</equip>
</elseif>
<!-- INT Nuke Spells -->
<elseif Spell="Firespit|Corrosive Ooze|Acrid Stream|Leafstorm|Blazing Bound">
<equip when="midcast" set="INT">
<main>$Staff-%SpellElement</main>
<sub>Bugard Strap +1</sub>
</equip>
</elseif>
<!-- INT > MND Nuke Spells -->
<elseif Spell="Regurgitation">
<equip when="midcast" set="Magic Accuracy|MND|INT">
<main>$Staff-%SpellElement</main>
<sub>Bugard Strap +1</sub>
</equip>
</elseif>
<!-- CHR Spells -->
<elseif Spell="Eyes On Me">
<equip when="midcast" set="CHR" />
</elseif>
<!-- Blue Magic Skill > Magic Accuracy Spells -->
<elseif spell="Sheep Song|Blood Drain|Soporific|Sound Blast|Chaotic Eye|Digest|Blank Gaze|Venom Shell
|MP Drainkiss|Stinking Gas|Magnetite Cloud|Geist Wall|Awful Eye|Blood Saber|Jettatura|Frightful Roar
|Self-Destruct|Filamented Hold|Cold Wave|Hecatomb Wave|Radiant Breath|Flying Hip Press|Light of Penance
|1000 Needles|Feather Tickle|Yawn|Voracious Trunk|Infrasonics|Sandspray|Enervation|Lowing
|Temporal Shift|Actinic Burst|Cimicine Discharge|Demoralizing Roar">
<equip set="Blue Magic Skill|Magic Accuracy" />
<if spell="Sheep Song|Soporific|Yawn">
<equip when="midcast">
<main>$Staff-%SpellElement</main>
</equip>
</if>
</elseif>
<!-- Blue Magic Skill Spells -->
<elseif spell="Metallic Body|Diamondhide">
<equip set="Blue Magic Skill" />
</elseif>
<else>
<equip when="midcast" set="Blue Magic Skill" />
</else>
</if>
</include>
<include name="WeaponskillRules">
<!-- I'm testing the same set format I use for blue magic spells on WS gear changes. -->
<if Type="Weaponskill">
<if spell="Vorpal Blade">
<equip when="precast" set="WS-Base|STR" />
</if>
<elseif spell="Savage Blade">
<equip when="precast" set="WS-Base|STR|MND" />
</elseif>
<elseif spell="Expiacion">
<equip when="precast" set="WS-Base|INT|STR">
<neck>Snow Gorget</neck>
</equip>
</elseif>
<elseif spell="Sanguine Blade">
<equip when="precast" set="MND" />
</elseif>
<else>
<equip when="precast" set="WS-Base" />
</else>
</if>
</include>
</includes>
There are other comments throughout the file. Please enjoy.
<?xml version="1.0" ?>
<spellcast xmlns:xi="http://www.w3.org/2001/XInclude">
<config
RequireVersion="2.30"
Debug="false"
ShowGearSwaps="false"
/>
<variables>
<xi:include href="include.xml" xpointer="/includes/include[@name='ElementalStaveConstants']/*" />
<xi:include href="include.xml" xpointer="/includes/include[@name='EventStatusVariable']/*" />
</variables>
<sets>
<group name="Haste" default="yes">
<set name="Standard">
<main>Perdu Hanger</main>
<sub>Demon Slayer</sub>
<ammo>Tiphia Sting</ammo>
<head>Walahra Turban</head>
<neck>Chivalrous Chain</neck>
<lear>Brutal Earring</lear>
<rear>Ethereal Earring</rear>
<body>Mirage Jubbah</body>
<hands>Homam Manopolas</hands>
<lring>Ulthalam's Ring</lring>
<rring>Rajas Ring</rring>
<back>Cuchulain's Mantle</back>
<waist>Swift Belt</waist>
<legs>Homam Cosciales</legs>
<feet>Homam Gambieras</feet>
</set>
<xi:include href="BLUinclude.xml" xpointer="/includes/include[@name='GearSets']/*" />
</group>
</sets>
<rules>
<!-- I now have Spellcast cancel any gear changes if I'm unable to take a particular action due to a
status effect. Two kinds of rules have to come before these return rules, however: my Opo-opo Necklace
rule and my Spell Cancel rules. -->
<xi:include href="include.xml" xpointer="/includes/include[@name='OpoOpoNecklaceRule']/*" />
<xi:include href="include.xml" xpointer="/includes/include[@name='SpellCancelRules']/*" />
<xi:include href="include.xml" xpointer="/includes/include[@name='ReturnRules']/*" />
<xi:include href="include.xml" xpointer="/includes/include[@name='FastCastRule']/*" />
<equip when="resting" set="Resting" />
<equip when="engaged" set="$EventStatus-TP" />
<equip when="idle" set="Idling" />
<if status="Engaged">
<equip when="aftercast" set="$EventStatus-TP" />
</if>
<elseif status="idle">
<equip when="aftercast" set="Idling" />
</elseif>
<xi:include href="BLUinclude.xml" xpointer="/includes/include[@name='BlueMagicRules']/*" />
<!-- Weapon Skill Rules -->
<xi:include href="BLUinclude.xml" xpointer="/includes/include[@name='WeaponskillRules']/*" />
</rules>
</spellcast>