Hello, everyone. I'm Techno from the Phoenix server and this is my drg.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 Dragoon. 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. One other important thing to mention is that you need version 2.3 of Spellcast for many things in this file to work.
Some notes about this file:
I have finally put all of my JA/healing breath/etc. equips into sets for you all. I hate creating tons of sets, but for some reason no one else does. So, to help all of you out there who are basically just cutting and pasting my work, I've done it. I will admit one thing, that doing so eliminates the trouble and errors of having to search through the whole document if you're editing one or two gear pieces.
I've been asked why I don't have sets for Angon and Call Wyvern. The reason for Angon is because I don't have a Dragoon's Earring. Since I'd only be swapping out the Angons into the Ammo slot, I just let the game macro do it. As for Call Wyvern, I never felt like spending the massive ammount of points on the Wyrm Mail, which I consider to be a very minor macro piece. If you want Spellcast to handle gear swaps for either of these abilities, just add a set for them to the Haste group and then add the ability name to the list of JAs you want to change equips for.
Several months ago I promised some people on the forum who were using my
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>
<!-- DRG Subjob Mode Triggers -->
<register silent="true" event="jobchange_drg/whm|jobchange_drg/blm|jobchange_drg/rdm|jobchange_drg/blu">sc var set DRGMode "MageSub";</register>
<register silent="true" event="jobchange_drg/war|jobchange_drg/sam|jobchange_drg/thf|jobchange_drg/nin">sc var set DRGMode "MeleeSub";</register>
<!-- 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.
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='EventStatusVariable']/*" />
<var name="DRGMode" nooverwrite="true">MeleeSub</var>
<var name="HBMidcastDelay">0</var>
</variables>
<sets>
<group name="Haste" default="yes">
<set name="MeleeSub">
<main>Valkyrie's Fork</main>
<sub>Pole Grip</sub>
<ammo>Tiphia Sting</ammo>
<head>Walahra Turban</head>
<neck>Love Torque</neck>
<lear>Brutal Earring</lear>
<rear>Aesir Ear Pendant</rear>
<body>Askar Korazin</body>
<hands>Homam Manopolas</hands>
<lring>Ulthalam's Ring</lring>
<rring>Rajas Ring</rring>
<back>Cuchulain's Mantle</back>
<waist>Swift Belt</waist>
<legs>Blitzer Poleyn</legs>
<feet>Homam Gambieras</feet>
</set>
<set name="MageSub" baseset="MeleeSub">
<rear>Ethereal Earring</rear>
<body>Ares's Cuirass</body>
<legs>Homam Cosciales</legs>
</set>
<set name="Normal-TP" baseset="$DRGMode"/>
<set name="Assault-TP" baseset="$DRGMode">
<lring>Imperial Ring</lring>
</set>
<set name="Campaign-TP" baseset="$DRGMode">
<sub>Rose Strap</sub>
<lring>Patronus Ring</lring>
</set>
<set name="Idling" baseset="$EventStatus-TP">
<head>Askar Zucchetto</head>
<legs>Crimson Cuisses</legs>
</set>
<set name="Fast Cast">
<head>Walahra Turban</head>
<rear>Loquacious Earring</rear>
<legs>Homam Cosciales</legs>
</set>
<set name="Normal-WS" />
<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>
<rear>Bushinomimi</rear>
<hands>Hecatomb Mittens</hands>
<lring>Flame Ring</lring>
<rring>Rajas Ring</rring>
<waist>Warwolf Belt</waist>
<feet>Hecatomb Leggings</feet>
</set>
<set name="Sonic Thrust" baseset="WS-Base">
<head>Askar Zucchetto</head>
<neck>Kubira Bead Necklace</neck>
<body>Zahak's Mail</body>
<legs>Perle Brayettes</legs>
</set>
<set name="Drakesbane" baseset="WS-Base">
<head>Askar Zucchetto</head>
<rear>Delta Earring</rear>
<neck>Love Torque</neck>
<body>Zahak's Mail</body>
<legs>Perle Brayettes</legs>
</set>
<set name="Impulse Drive" baseset="WS-Base">
<head>Perle Salade</head>
<neck>Shadow Gorget</neck>
<body>Ares's Cuirass</body>
<legs>Askar Dirs</legs>
</set>
<set name="Wheeling Thrust" baseset="WS-Base">
<head>Perle Salade</head>
<neck>Kubira Bead Necklace</neck>
<body>Ares's Cuirass</body>
<legs>Askar Dirs</legs>
</set>
<set name="Penta Thrust" baseset="WS-Base">
<head>Optical Hat</head>
<neck>Shadow Gorget</neck>
<body>Zahak's Mail</body>
<legs>Perle Brayettes</legs>
</set>
<set name="Elemental Breath Potency">
<head>Wyrm Armet</head>
</set>
<set name="Jump|High Jump|Spirit Jump|Soul Jump">
<head>Perle Salade</head>
<hands>Hecatomb Mittens</hands>
<lring>Flame Ring</lring>
<waist>Wyrm Belt</waist>
<legs>Perle Brayettes</legs>
<feet>Hecatomb Leggings</feet>
</set>
<set name="Spirit Link">
<head>Drachen Armet +1</head>
</set>
<set name="Ancient Circle">
<legs>Drachen Brais +1</legs>
</set>
<set name="Healing Breath Trigger">
<ammo>Olibanum Sachet</ammo>
<head>Drachen Armet +1</head>
<rear>Loquacious Earring</rear>
<neck>Cougar Pendant</neck>
<body>Homam Corazza</body>
</set>
<set name="Healing Breath Potency">
<head>Wyrm Armet</head>
<neck>Chanoix's Gorget</neck>
<legs>Drachen Brais +1</legs>
</set>
</group>
<group name="Accuracy" inherit="Haste">
<set name="MeleeSub|Normal-TP|Assault-TP">
<head>Optical Hat</head>
<body>Homam Corazza</body>
<waist>Wyrm Belt</waist>
</set>
<set name="Campaign-TP" baseset="MeleeSub">
<sub>Rose Strap</sub>
</set>
<set name="Idling" baseset="$EventStatus-TP">
<legs>Crimson Cuisses</legs>
</set>
<set name="WS-Base">
<ammo>Olibanum Sachet</ammo>
<hands>Hecatomb Mittens</hands>
<waist>Warwolf Belt</waist>
<feet>Hecatomb Leggings</feet>
</set>
<set name="Sonic Thrust" baseset="WS-Base">
<body>Zahak's Mail</body>
<legs>Perle Brayettes</legs>
</set>
<set name="Drakesbane" baseset="WS-Base">
<rear>Delta Earring</rear>
<body>Zahak's Mail</body>
<legs>Perle Brayettes</legs>
</set>
<set name="Impulse Drive" baseset="WS-Base">
<rear>Bushinomimi</rear>
<neck>Shadow Gorget</neck>
<body>Zahak's Mail</body>
<legs>Askar Dirs</legs>
</set>
<set name="Wheeling Thrust" baseset="WS-Base">
<head>Perle Salade</head>
<rear>Bushinomimi</rear>
<body>Zahak's Mail</body>
<legs>Askar Dirs</legs>
</set>
<set name="Penta Thrust" baseset="WS-Base">
<rear>Bushinomimi</rear>
<neck>Shadow Gorget</neck>
<legs>Perle Brayettes</legs>
</set>
</group>
<!-- The main purpose of the Super Accuracy group is to disable all gear swapping
and leave accuracy gear in for all WSs and abilities. For a fully-merited DRG
it's really only useful for fighting high-evasion HNMs. Why not just disable
spellcast and manually swap in all my accuracy gear? Because that would also
disable things like Fast Cast for Utsusemi or the gear swaps for Healing Breath. -->
<group name="Super Accuracy" inherit="Accuracy">
<set name="MeleeSub|Normal-TP|Assault-TP">
<legs>Perle Brayettes</legs>
</set>
<set name="Campaign-TP" baseset="MeleeSub">
<sub>Rose Strap</sub>
</set>
</group>
<group name="Alt" inherit="Haste"> <!-- Blunt Damage Group -->
<set name="MeleeSub|Normal-TP">
<main>Bourdonasse</main>
</set>
<set name="Assault-TP" baseset="MeleeSub">
<lring>Imperial Ring</lring>
</set>
<set name="Campaign-TP" baseset="MeleeSub">
<sub>Rose Strap</sub>
<lring>Patronus Ring</lring>
</set>
<set name="Idling" baseset="$EventStatus-TP">
<legs>Crimson Cuisses</legs>
</set>
</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="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>
<!-- Weapon Skill Rules -->
<if type="WeaponSkill" group="Haste|Accuracy|Blunt">
<if spell="Penta Thrust|Wheeling Thrust|Impulse Drive|Drakesbane|Sonic Thrust">
<equip when="precast" set="%Spell" />
</if>
<midcastdelay delay="1.5" />
<equip when="midcast" set="$EventStatus-TP" />
<!-- If I'm not using a mage sub, equip my Wyrm Armet for increased breath attacks. -->
<if NotSubJob="WHM|BLM|RDM|SMN|BLU|SCH">
<equip when="midcast" set="Elemental Breath Potency" />
</if>
<aftercastdelay delay="1.5" />
</if>
<!-- Job Ability Rules -->
<elseif type="JobAbility" spell="Jump|High Jump|Spirit Jump|Soul Jump|Spirit Link|Ancient Circle">
<equip when="precast" set="%spell" />
</elseif>
<!-- Healing Breath Trigger Rules -->
<!-- I only use specific spells as HBTs. I tried enabling it for all spells,
but that got really annoying. That was especially true when macroing out my
Walahra Turban used to put me below 150 MP for casting Raise. -->
<elseif mode="or" spell="Dia|Poison|Blaze Spikes|Protect|Sprout Smack|Head Butt|Cocoon|Bar*"
advanced='"%type"="Ninjutsu" and %HPP<33'>
<equip when="precast" set="Healing Breath Trigger" />
<!-- This little bit of code will allow you to properly trigger Healing Breath for spells
of any casting duration. That means you only need one rule for spells that take 1 second
to cast or 20 seconds. You need only add a small amount of time on to the casttime of
the spell in order to account for lag. I require an additional 0.4 seconds of delay to
properly trigger Healing Breath. Adjust accordingly. -->
<var cmd="setcalc HBMidcastDelay %CastTime + 0.4" />
<midcastdelay delay="$HBMidcastDelay" />
<equip when="midcast" set="Healing Breath Potency" />
<aftercastdelay delay="2.1" />
</elseif>
</rules>
</spellcast>