Updated: 5 Jan 2008
Spellcast xml handling all spell types. Notable features include:
NOTES:
Elements of this xml have been adapted from Aikar's and Oskilfai's BLM xml. Many thanks!
<?xml version="1.0" encoding="UTF-8"?> <spellcast> <config Debug="false" HideErrors="false" ShowGearSwaps="False"></config> <sets> <group default="yes" name="BLM|BLMele"> <!--Standard (Nuking): MAB, INT--> <set name="Standard"> <ranged lock="true"></ranged> <ammo>Phtm. Tathlum</ammo> <sub>Bugard Strap +1</sub> <head>Wizard's Petasos +1</head> <neck>Elemental Torque</neck> <body>Genie Weskit</body> <hands>Zenith Mitts</hands> <back>Merciful Cape</back> <waist>Sorcerer's Belt</waist> <legs>Jet Seraweels</legs> <feet>Yigit Crackows</feet> <lring>Tamas Ring</lring> <rring>Omega Ring</rring> <lear>Moldavite Earring</lear> <rear>Novio Earring</rear> <!--hp 782, mp 1068 --> </set> <!--Resting: hMP, MP--> <set name="Resting" BaseSet="Standard"> <main>Pluto's Staff</main> <neck>Grandiose Chain</neck> <body>Wizard's Coat +1</body> <hands>Oracle's Gloves</hands> <waist>Hierarch Belt</waist> <feet>Avocat Pigaches</feet> <rring>Ether Ring</rring> <lear>Relaxing Earring</lear> <rear>Insomnia Earring</rear> <!--hp 822, mp 1182--> </set> <!--Standing/Defensive setup: Refresh, Dmg-, HP--> <set name="Standing" BaseSet="Standard"> <main>Earth Staff</main> <head>Sorcerer's Petasos</head> <neck>Uggalepih Pendant</neck> <body>Sorcerer's Coat</body> <hands>Oracle's Gloves</hands> <back>Cheviot Cape</back> <waist>Hierarch Belt</waist> <legs>Jet Seraweels</legs> <feet>Herald's Gaiters</feet> <lear>Sorcerer's Earring</lear> <rear>Insomnia Earring</rear> <!--hp 842, mp 1118--> </set> <!--Cures: Light Staff, Conserve MP--> <set name="Curing" BaseSet="Standing"> <main>Light Staff</main> <body>Genie Weskit</body> <!--hp 842, mp 1106--> </set> <!--Enfeebling magic: Enfeebling skill, Magic acc., INT/MND as appropriate--> <set name="Enfeebling" BaseSet="Standard"> <main>Alkalurops</main> <head>Genie Tiara</head> <neck>Enfeebling Torque</neck> <body>Wizard's Coat +1</body> <hands>Oracle's Gloves</hands> <back>Altruistic Cape</back> <legs>Igqira Lappa</legs> <feet>Avocat Pigaches</feet> <rear>Enfeebling Earring</rear> <!--hp 837, mp 1034--> </set> <set name="Enfeebling-BlackMagic" BaseSet="Enfeebling"> <lear>Abyssal Earring</lear> </set> <set name="Enfeebling-WhiteMagic" BaseSet="Enfeebling"> <waist>Steppe Rope</waist> </set> <!--High elemental skill (HNMs and resistant mobs): Elemental skill, Magic acc., INT--> <set name="Elemental" BaseSet="Standard"> <head>Sorcerer's Petasos</head> <hands>Wizard's Gloves</hands> <feet>Nashira Crackows</feet> </set> <!--Dark magic: Dark skill, Magic acc., INT--> <set name="Dark" BaseSet="Standard"> <head>Nashira Turban</head> <neck>Dark Torque</neck> <hands>Sorcerer's Gloves</hands> <waist>Hierarch Belt</waist> <legs>Wizard's Tonban</legs> <feet>Nashira Crackows</feet> <rear>Abyssal Earring</rear> <!--hp 802, mp 1059 --> </set> <!--Stoneskin: MND gear, more mp than Standing set--> <set name="Stoneskin" BaseSet="Standard"> <main>Alkalurops</main> <head>Zenith Crown</head> <neck>Promise Badge</neck> <body>Errant Hpl.</body> <hands>Sorcerer's Gloves</hands> <back>Prism Cape</back> <waist>Steppe Rope</waist> <feet>Rostrum Pumps</feet> <lear>Loquacious Earring</lear> <rear>Insomnia Earring</rear> <!--hp 757, mp 1122 --> </set> <set name="FastCast" BaseSet="Standing"> <back>Warlock's Mantle</back> <feet>Rostrum Pumps</feet> <rear>Loquacious Earring</rear> </set> <!--Sorc. Ring activation set: for interest, since it is not technically a Spellcast set. NB this is not the format for Windower macros.--> <set name="LatentActivate"> <head>Zenith Crown</head> <hands>Zenith Mitts</hands> <waist>Penitent's Rope</waist> <feet>Rostrum Pumps</feet> <rring>Ether Ring</rring> <rear>Moldavite Earring</rear> <!--hp 632, mp 1155--> </set> </group> </sets> <variables> <!--Variables are a neat way to link a game variable (e.g. Ice element) to a related name that isn't always the same (e.g. Aquilo's Staff). This is used for dynamic rules where a game variable such as current spell element is used to determine a gear change.--> <var name="FireStaff">Vulcan's Staff</var> <var name="EarthStaff">Earth Staff</var> <var name="WaterStaff">Water Staff</var> <var name="WindStaff">Auster's Staff</var> <var name="IceStaff">Aquilo's Staff</var> <var name="ThunderStaff">Jupiter's Staff</var> <var name="LightStaff">Light Staff</var> <var name="DarkStaff">Pluto's Staff</var> <var name="FireObi">Karin Obi</var> <var name="WindObi">Furin Obi</var> <var name="IceObi">Hyorin Obi</var> <var name="ThunderObi">Rairin Obi</var> <var name="DarkObi">Anrin Obi</var> <!--Misc. other variables--> <var name="PreLand"></var> <var name="lag">0</var> <var name="BLMAF2Pants">1</var> <var name="varSleepMessages">1</var> <var name="RegexResult"></var> <var name="SalvageMode">0</var> <var name="varWeapon">0</var> <var name="varHead">0</var> <var name="varRanged">0</var> <var name="varBody">0</var> <var name="varHands">0</var> <var name="varRing">0</var> <var name="varLegs">0</var> <var name="varBack">0</var> </variables> <rules> <!--Autosets: Used to handle gear for and after resting--> <if spell="autoset"> <action type="equip" when="Resting" set="Resting"></action> <action type="equip" when="Idle" set="Standing"></action> </if> <!--PreLand variable: Sets the midcast delay to change gear shortly before the spell lands. This keeps the standing set equipped 99% of the time. Takes into account /RDM Fast Cast. Since actual calculations on variables are not supported, the dec command is used on the cast time (decrement: remove decimal then subtract 1). Fast Cast is %-based, so decrements are tiered to keep the time between gear change and spell landing above 1.0s.--> <if NotSpell="Stun" NotGroup="BLMele"> <action type="Var" cmd="set PreLand %CastTime"></action> <action type="Var" cmd="dec PreLand"></action> <action type="Var" cmd="dec PreLand"></action> <if SubJob="RDM"> <if CastTimeGT="6.8"> <action type="Var" cmd="dec PreLand"></action> <if CastTimeGT="12.8"> <action type="Var" cmd="dec PreLand"></action> </if> </if> </if> <if advanced='"$PreLand"<"0"'> <action type="Var" cmd="set PreLand 0"></action> </if> <action type="midcastdelay" delay="$PreLand"></action> <if CastTimeGT="2.75"> <!--Equips Fast Cast set if the spell is 3s or longer--> <action type="equip" when="precast" set="FastCast"></action> </if> </if> <else> <action type="midcastdelay" delay="1"></action> </else> <!--Equips the Standing set after the spell casts--> <action type="equip" when="aftercast" set="Standing"></action> <!--Elemental Spells: Equips Staff and Nuking set. Situational gear includes: *Sorc. Ring for HP latent (read up on this, the latent is not as simple as <75%) -NB activating the latent is done using Windower macros, so that it can be done at will (without requiring a special group). *Elemental skill gear where the "BLMele" group is active *Uggalepih pendant for MP latent (only used when BLMele is not active)--> <if Skill="ElementalMagic"> <action type="equip" when="midcast"><main>$%SpellElementStaff</main></action> <action type="equip" when="midcast" set="Standard"></action> <if HPLT="633"> <action type="equip" when="midcast"><rring>Sorcerer's Ring</rring></action> </if> <if Group="BLMele"> <action type="equip" when="midcast" set="Elemental"></action> </if> <elseif MPPAftercastlt="51"> <action type="equip" when="midcast"><neck>Uggalepih Pendant</neck></action> </elseif> <if SpellElement="Thunder"> <action type="equip" when="midcast"><sub>Thunder Grip</sub></action> </if> </if> <!--Enfeebling Magic: Equips Staff and Enfeebling set. Allows different gear to be added according to alignment (MND for light, INT for dark).--> <elseif Skill="EnfeeblingMagic"> <action type="equip" when="midcast" set="Enfeebling-%Type"></action> <if SpellElement="Dark"> <action type="equip" when="midcast"><sub>Dark Grip</sub></action> </if> <if buffactive="Signet"> <action type="equip" when="midcast"><hands>Master Caster's Bracelets</hands></action> </if> </elseif> <!--Dark Magic: Equips Staff and Dark set. Stun is excluded due to the importance of casting it fast.--> <elseif Skill="DarkMagic" NotSpell="Stun"> <action type="equip" when="midcast"><main>$%SpellElementStaff</main></action> <action type="equip" when="midcast" set="Dark"></action> <if SpellElement="Dark"> <action type="equip" when="midcast"><sub>Dark Grip</sub></action> </if> </elseif> <!--Cures: Equips Curing set (Light Staff and Conserve MP). Reduces the tier if MP is too low for the selected tier. Displays a message for MP less than Cure I.--> <elseif Spell="Cur*" NotSpell="Cursna" NotBuffActive="Manafont"> <action type="equip" when="midcast" set="Curing"></action> <if Spell="Cure III" MPLT="46"> <action type="ChangeSpell" Spell="Cure II"></action> </if> <elseif Spell="Cure II" MPLT="24"> <action type="ChangeSpell" Spell="Cure"></action> </elseif> <elseif Spell="Cure" MPLT="8"> <action type="CancelSpell"></action> <action type="equip" set="Standing"></action> <action type="addtochat" color="56">### Not enough MP for Cure! ###</action> </elseif> </elseif> <!--Stoneskin/Utsusemi:Ichi: Equips Stoneskin set for max. dmg absorbed. Cancels any existing Stoneskin/Copy Image.--> <elseif Spell="Stoneskin"> <action type="equip" when="midcast" set="Stoneskin"></action> <if BuffActive="Stoneskin"> <action type="command" when="midcast">cancel 37</action> </if> </elseif> <elseif spell="Utsusemi: Ichi"> <action type="midcastdelay" delay="2" /> <action type="Command" when="midcast">cancel 66</action> </elseif> <!--Sneak/Invis.: Equips Skulker's Cape to enhance Sneak/Invis. duration--> <elseif Spell="Sneak|Invisible"> <action type="equip" when="midcast"><back>Skulker's Cape</back></action> </elseif> <!--Spells without modifiers: These spells are not improved by Skills or Attributes, Conserve MP gear is equipped where possible, and other gear changes locked.--> <elseif Spell="Warp*|Retrace|Raise*|Reraise*|Teleport*|Escape|Tractor"> <action type="equip" when="precast|midcast|aftercast|autoset"> <sub lock="true"></sub> <ranged lock="true"></ranged> <ammo lock="true"></ammo> <head lock="true"></head> <neck lock="true"></neck> <lear lock="true"></lear> <rear lock="true"></rear> <body lock="true"></body> <hands lock="true"></hands> <lring lock="true"></lring> <rring lock="true"></rring> <back lock="true"></back> <waist lock="true"></waist> <legs lock="true"></legs> <feet lock="true"></feet> </action> </elseif> <!--Sea Obis and AF2 Pants: Equips the appropriate Obi when the spell matches, and is affected by, current day and/or weather--> <if Advanced='("%Skill" != "EnhancingMagic") AND ("%SpellElement" = "%WeatherElement" OR "%SpellElement" = "%DayElement") AND "$%SpellElementObi" != "\$%SpellElementObi"'> <action type="equip" when="midcast"> <waist lock="yes">$%SpellElementObi</waist> </action> </if> <if Advanced='(regex)%Weather=^.* x2$(/regex)'> <action type="Var" cmd="set RegexResult TRUE"/> </if> <else> <action type="Var" cmd="set RegexResult FALSE"/> </else> <if Advanced='!("$RegexResult" = "TRUE" AND "%WeatherElement" = "%SpellElement" AND "$%SpellElementObi" != "\$%SpellElementObi") AND ("%SpellElement" = "%DayElement" AND "$BLMAF2Pants" = "1") AND ("%Skill" = "ElementalMagic")'> <action type="equip" when="midcast"> <legs lock="yes">Sorcerer's Tonban</legs> </action> </if> <!--Wear-off messages for Sleep and Manafont: These are -very- useful. You can turn them off by setting the varSleepMessages variable to 0. These timers are for *unresisted* sleeps. Sleep is either unresisted or wears after half the normal duration.--> <if Spell="Manafont"> <if Advanced='"$varSleepMessages"="1"'> <action type="command" when="precast">wait 14;input /echo ==== Manafont off @ 0:45 ====</action> <action type="command" when="precast">wait 29;input /echo ==== Manafont off @ 0:30 ====</action> <action type="command" when="precast">wait 44;input /echo ==== Manafont off @ 0:15 ====</action> <action type="command" when="precast">wait 54;input /echo ==== Manafont off @ 0:05 ====</action> </if> </if> <elseif Spell="Sleep|Sleepga"> <if Advanced='"$varSleepMessages"="1"'> <action type="command" when="aftercast">wait 14;input /echo ==== %Spell off @ 0:45 ====</action> <action type="command" when="aftercast">wait 24;input /echo ==== %Spell off @ 0:35 [resists @ 5s] ====</action> <action type="command" when="aftercast">wait 29;input /echo ==== %Spell off @ 0:30 [resists over] ====</action> <action type="command" when="aftercast">wait 44;input /echo ==== %Spell off @ 0:15 ====</action> <action type="command" when="aftercast">wait 54;input /echo ==== %Spell off @ 0:05 ====</action> </if> </elseif> <elseif Spell="Sleep II|Sleepga II"> <if Advanced='"$varSleepMessages"="1"'> <action type="command" when="aftercast">wait 14;input /echo ==== %Spell off @ 1:15 ====</action> <action type="command" when="aftercast">wait 29;input /echo ==== %Spell off @ 1:00 ====</action> <action type="command" when="aftercast">wait 39;input /echo ==== %Spell off @ 0:50 [resists @ 5s] ====</action> <action type="command" when="aftercast">wait 44;input /echo ==== %Spell off @ 0:45 [resists over] ====</action> <action type="command" when="aftercast">wait 59;input /echo ==== %Spell off @ 0:30 ====</action> <action type="command" when="aftercast">wait 74;input /echo ==== %Spell off @ 0:15 ====</action> <action type="command" when="aftercast">wait 84;input /echo ==== %Spell off @ 0:05 ====</action> </if> </elseif> <!--Salvage Mode: Prevents Spellcast from attempting gear swaps on unavailable gear slots. Set SalvageMode to 1 to activate, 0 to deactivate. Set gear variables to 1 as you get the appropriate cells.--> <if advanced='"$SalvageMode"="1"'> <if advanced='"$varWeapon"="0"' > <action type="equip" when="precast|midcast|aftercast|autoset"> <main lock="true" /> <sub lock="true" /> </action> </if> <if advanced='"$varHead"="0"' > <action type="equip" when="precast|midcast|aftercast|autoset"> <head lock="true" /> <neck lock="true" /> </action> </if> <if advanced='"$varRanged"="0"' > <action type="equip" when="precast|midcast|aftercast|autoset"> <ranged lock="true" /> <ammo lock="true" /> </action> </if> <if advanced='"$varBody"="0"' > <action type="equip" when="precast|midcast|aftercast|autoset"> <body lock="true" /> </action> </if> <if advanced='"$varHands"="0"' > <action type="equip" when="precast|midcast|aftercast|autoset"> <hands lock="true" /> </action> </if> <if advanced='"$varRing"="0"' > <action type="equip" when="precast|midcast|aftercast|autoset"> <lear lock="true" /> <rear lock="true" /> <lring lock="true" /> <rring lock="true" /> </action> </if> <if advanced='"$varBack"="0"' > <action type="equip" when="precast|midcast|aftercast|autoset"> <back lock="true" /> <waist lock="true" /> </action> </if> <if advanced='"$varLegs"="0"' > <action type="equip" when="precast|midcast|aftercast|autoset"> <legs lock="true" /> <feet lock="true" /> </action> </if> </if> </rules> </spellcast>