Thursday, July 30, 2009

Spellcast Lesson 3, Dressing for the Occasion


When it comes to standing toe to toe with a monster, melee jobs may have a lot of setups in how they engage their enemy. Are they tanking? Soloing with an evasion setup? Or straight up bringing the pain?

This is where variables can play a part. So far, you're almost a master at setting up gear sets. You've dabbled in some rules. And now it's time to get wet in a hot tub of variables.

Let's use ninja for this example. There's a lot of gear sets a ninja can utilize. Elemental wheel, haste, accuracy, damage dealer, evasion, tanking, enmity, etc. But let's focus on when you're engaged to the enemy. You may be tanking exp/merit mobs, fighting/soloing an NM with an evasion setup or acting as a damage dealer where haste and/or accuracy is key.

Rather than manually changing to a particular gear set when you engage an enemy, we can use variables to predefine which set to use. Let's look at the xml file below.

<?xml version="1.0"?>
<!DOCTYPE spellcast PUBLIC "spellcast" "spellcast.dtd">
<spellcast>
  <config debug="false" requireversion="2.17"/>
  <sets>
    <group name="Ninja|NIN" default="yes">

        <!-- Idle gear, Not Engaged, Not Casting -->
        <set name="idle">
          <head>Goblin coif</head>
          <body>Haubergeon</body>
          <hands>Enkidu's mittens</hands>
          <back>Amemet Mantle +1</back>
          <waist>Warwolf Belt</waist>
          <legs>Byakko's Haidate</legs>
          <feet>Ninja Kyahan</feet>
        </set>

        <!-- Melee Base Set -->
        <set name="melee">
          <head>Walahra turban</head>
          <neck>Spectacles</neck>
          <lear>Suppanomimi</lear>
          <rear>Minuet earring</rear>
          <body>Ninja chainmail</body>
          <hands>Enkidu's Mittens</hands>
          <lring>Blood ring</lring>
          <rring>Rajas ring</rring>
          <back>Amemet Mantle +1</back>
          <waist>Life Belt</waist>
          <legs>Byakko's Haidate</legs>
          <feet>Nobushi Kyahan</feet>
        </set>

        <!-- Accuracy Melee Gear -->
        <set name="acc" baseset="melee">
          <head>Optical Hat</head>
          <body>Haubergeon</body>
        </set>

        <!-- Evasion Melee Gear -->
        <set name="evasion" baseset="melee">
          <head>Optical Hat</head>
          <neck>Evasion torque</neck>
          <lear>Dodge earring</lear>
          <rear>Dodge earring</rear>
          <body>Scorpion harness</body>
          <hands>Rasetsu tekko</hands>
          <feet>Arhat's sune-ate +1</feet>
        </set>

        <!-- Haste Melee Gear -->
        <set name="haste" baseset="melee">
          <hands>Dusk gloves</hands>
          <feet>Fuma sune-ate</feet>
        </set>

        <!-- Enmity Melee Gear -->
        <set name="hate" baseset="melee">
          <lear>Eris' earring</lear>
          <rear>Eris' earring</rear>
          <body>Arhat's gi</body>
          <hands>Yasha tekko</hands>
          <waist>Warwolf Belt</waist>
          <feet>Arhat's Sune-ate +1</feet>
        </set>

    </group>
  </sets>

  <variables>
    <!-- Engaged Melee Gear -->
    <var name="meleeset">melee</var>
  </variables>

  <rules>
    <!-- Autoset and Gear Changes -->
    <action when="idle"    type="equip" set="idle"/>
    <action when="engaged" type="equip" set="$meleeset"/>
  </rules>

</spellcast>


You will see all the gear sets set up as usual. However, take a look at the rules section. See "$meleeset" that is used for the rule on engaging an enemy? There isn't actually a gear set called "$meleeset". That is a variable! Now look in the variables section. This is where you declare and set up the default value of your variable(s). You will see that "melee" is the current value of the variable. This means that each time you engage a target, it will use the "melee" gear set.

With the nature of variables, this value can be changed at anytime. If you change the variable to "hate", you will now change into your enmity set up each time you engage an enemy. You can do this by setting up a macro or manually typing out the following: /sc var set meleeset hate

To change it to your evasion set up:
/sc var set meleeset evasion

To change it to your accuracy set up:
/sc var set meleeset acc

You get the idea now. This is just a basic use of variables and will hopefully give you an idea of how to build on it for use with more advanced rules and situations.

Wednesday, July 29, 2009

Spellcast Lesson Deux, Le Dressing Room Intermediate

I hope you have the basics down of gearsets and how to apply them to your statuses of being idle, engaged and healing.

But now you ask, "What about when I wanna do some actual useful stuff? Do I have to set up an entire new gear set for all 12-16 slots every single time?!" Nope! That's where the use of base sets come in. Think of it as layering a set of armor over another set of gear.


So let's get back to creating updating some XML! Okay, I know the above pic has Corsair gear shown, but I changed my mind for my following example. Suppose you played Samurai...

Take note of the gearsets "melee" and "ws". "Melee" has all 12 armor slots filled. "WS" only has 8 declared. However, "WS" is using "melee" as what is called a base set. In a way, Spellcast will know to use first equip the "melee" set and then equip gears noted in the "WS" accordingly.

<?xml version="1.0"?>
<!DOCTYPE spellcast PUBLIC "spellcast" "spellcast.dtd">
<spellcast>
<config debug="false"/>
  <sets>
    <group name="Samurai|SAM" default="yes">
      <set name="idle">
        <head>No.3's Garland</head>
        <body>Kirin's Osode</body>
        <hands>Ochiudo's Kote</hands>
        <legs>Byakko's haidate</legs>
        <feet>Nobushi Kyahan</feet>
      </set>
      <set name="Melee">
        <head>Walahra Turban</head>
        <neck>Spectacles</neck>
        <lear>Fowling earring</lear>
        <rear>Merman's Earring</rear>
        <body>Haubergeon</body>
        <hands>Hachiman kote</hands>
        <lring>Blood Ring</lring>
        <rring>Rajas Ring</rring>
        <back>Amemet Mantle +1</back>
        <waist>Life belt</waist>
        <legs>Byakko's Haidate</legs>
        <feet>Nobushi Kyahan</feet>
      </set>
      <set name="WS" baseset="Melee">
        <head>Wyvern helm</head>
        <neck>Chivalrous chain</neck>
        <body>Kirin's Osode</body>
        <hands>Pallas's bracelets</hands>
        <lring>Flame Ring</lring>
        <waist>Warwolf belt</waist>
        <legs>Shura Haidate</legs>
        <feet>Creek F Clomps</feet>
      </set>
      <set name="WSmulti" baseset="WS">
        <hands>Enkidu's Mittens</hands>
      </set>
    </group>
  <sets>
  <rules>
    <action when="Idle"    type="equip" set="idle"/>
    <action when="Engaged" type="equip" set="melee"/>

    <if type="WeaponSkill" spell="Tachi:*">
      <action type="equip" when="PreCast" set="WS">
      <action type="equip" when="AfterCast" set="melee">
    </if>

    <if type="WeaponSkill" spell="Penta Thrust">
      <action type="equip" when="PreCast" set="WSmulti">
      <action type="equip" when="AfterCast" set="melee">
    </if>

  </rules>
</spellcast>


As for the rules section, it will equip the "WS" set before you perform any weaponskill that starts with "Tachi:". After you perform a tachi weaponskill, it will then equip your "melee" set.

And before you ask, the answer is yes. You can create a set that uses another gear set as a base set that's using another gear set that's using a base set. Take note of the gearset "WSmulti". It's using "WS" as a base set which is then using "melee" as its base set. Think of it like that one douchebag that likes to wear 3 polo shirts with all popped collars. Make sense? Okay, maybe not.

Setting up weaponskills (and spells) with different gear sets is quite useful since all situations don't always call for the same gear. In this situation, the "WSmulti" gear set can be used for multi-hit weaponskills like Penta Thrust where accuracy and DEX is moreso needed.

Our next lesson will delve into variables with the gear sets...so long as my ADD doesn't kick in. Otherwise, my next post will be about making tomato omelettes!

Monday, July 27, 2009

Spellcast Lesson 1, The Dressing Room


Okay, I hope you've done your Spellcast homework. And I hope you have at least some understanding of its basics. Why? I'm not going to hold your hand the whole time (and mostly also because your hands smell like canned vegetables and burnt rubber).

So let's begin!

Within a Spellcast XML file, there are two sections that we will be focusing on for this lesson: sets and rules. Sets are where you set up different types of gear sets for different situations. Rules are where you can equip those gear sets based on what you are doing. This may include casting spells/abilities, healing, engaged with an enemy or just idle (not healing or engaged). There's more to Spellcast that make it work, but let's just start with the basics.

Based on your gear sets, the rules section will predicate how you will switch between gear sets based on what you are doing. So before we get to the xml coding, let's get to know the armor you'll be equipping during typical situations.

Idle Gear
What you wanna wear while not resting, casting or engaged to a mob
main:
sub:
range:
ammo:
head:
neck:
lear:
rear:
body:
hands:
lring:
rring:
back:
waist:
legs:
feet:

Now repeat, the same for when your MP healing set, your melee/engaged set and your casting set. After you know what to equip for each situation, you'll be ready to update your your Spellcast XML file.

Okay, now pick a job that you wanna start with. Create a text file and name it as the job you'll be using it for with an .xml file extension. Save this XML file in the same location as the default.xml file within your windower/plugins/spellcast folder. For example, WHM.xml will be for your White Mage. Then between the gear slot tags below, just add the name of each piece of equipment for each gear set:


<?xml version="1.0"?>
<config debug="false"/>
<spellcast>
  <sets>
    <group name="
Insert Full Name of Job|JOB 3 Letter Abbreviation" default="yes">
      <set name="idle">
        <main>
Insert Idle Gear Item</main>
        <sub>
Insert Idle Gear Item</sub>
        <range>
Insert Idle Gear Item</range>
        <ammo>
Insert Idle Gear Item</ammo>
        <head>
Insert Idle Gear Item</head>
        <neck>
Insert Idle Gear Item</neck>
        <lear>
Insert Idle Gear Item</lear>
        <rear>
Insert Idle Gear Item</rear>
        <body>
Insert Idle Gear Item</body>
        <hands>
Insert Idle Gear Item</hands>
        <lring>
Insert Idle Gear Item</lring>
        <rring>
Insert Idle Gear Item</rring>
        <back>
Insert Idle Gear Item</back>
        <waist>
Insert Idle Gear Item</waist>
        <legs>
Insert Idle Gear Item</legs>
        <feet>
Insert Idle Gear Item</feet>
      </set>
      <set name="melee">
        <main>
Insert Melee Gear Item</main>
        <sub>
Insert Melee Gear Item</sub>
        <range>
Insert Melee Gear Item</range>
        <ammo>
Insert Melee Gear Item</ammo>
        <head>
Insert Melee Gear Item</head>
        <neck>
Insert Melee Gear Item</neck>
        <lear>
Insert Melee Gear Item</lear>
        <rear>
Insert Melee Gear Item</rear>
        <body>
Insert Melee Gear Item</body>
        <hands>
Insert Melee Gear Item</hands>
        <lring>
Insert Melee Gear Item</lring>
        <rring>
Insert Melee Gear Item</rring>
        <back>
Insert Melee Gear Item</back>
        <waist>
Insert Melee Gear Item</waist>
        <legs>
Insert Melee Gear Item</legs>
        <feet>
Insert Melee Gear Item</feet>
      </set>
      <set name="healMP">
        <main>
Insert MP Healing Gear</main>
        <sub>
Insert MP Healing Gear</sub>
        <range>
Insert MP Healing Gear</range>
        <ammo>
Insert MP Healing Gear</ammo>
        <head>
Insert MP Healing Gear</head>
        <neck>
Insert MP Healing Gear</neck>
        <lear>
Insert MP Healing Gear</lear>
        <rear>
Insert MP Healing Gear</rear>
        <body>
Insert MP Healing Gear</body>
        <hands>
Insert MP Healing Gear</hands>
        <lring>
Insert MP Healing Gear</lring>
        <rring>
Insert MP Healing Gear</rring>
        <back>
Insert MP Healing Gear</back>
        <waist>
Insert MP Healing Gear</waist>
        <legs>
Insert MP Healing Gear</legs>
        <feet>
Insert MP Healing Gear</feet>
      </set>
      <set name="castgear">
        <main>
Insert Casting Gear</main>
        <sub>
Insert Casting Gear</sub>
        <range>
Insert Casting Gear</range>
        <ammo>
Insert Casting Gear</ammo>
        <head>
Insert Casting Gear</head>
        <neck>
Insert Casting Gear</neck>
        <lear>
Insert Casting Gear</lear>
        <rear>
Insert Casting Gear</rear>
        <body>
Insert Casting Gear</body>
        <hands>
Insert Casting Gear</hands>
        <lring>
Insert Casting Gear</lring>
        <rring>
Insert Casting Gear</rring>
        <back>
Insert Casting Gear</back>
        <waist>
Insert Casting Gear</waist>
        <legs>
Insert Casting Gear</legs>
        <feet>
Insert Casting Gear</feet>
      </set>
    </group>
  </sets>
  <rules>
    <action when="Idle"    type="equip" set="idle"/>
    <action when="Engaged" type="equip" set="melee"/>
    <action when="Resting" type="equip" set="healMP"/>
    <action when="PreCast" type="equip" set="castgear"/>
  </rules>
</spellcast>


Once all this is done. Start up Windower/FFXI. Change to the job you created a Spellcast xml file for. Throw all the gear that you mentioned in the xml file and head outside.

Now let's start with some Spellcast command basics:

Type out each command in your chat log:
/sc load [name of job-specific XML file]
This should load up your Spellcast XML file for your job.

/sc set idle
This should equip your idle gear set.

/sc set melee
This should equip your melee gear set.

/sc set healMP
This should equip your MP healing gear set.

/sc set castgear
This should equip your casting gear set.

Did it all work? I hope so! Not let's try it in action. Try engaging a mob. Try resting for hp/mp. Try casting a spell. Have fun!

Rosetta Stone, Spellcast Edition!


If you're an avid user of Windower, the Spellcast plugin is something that you may have some degree of knowledge of. You've either heard about, but didn't care...or you wanted to use it, but it was beyond your brain's grasp to understand. Perhaps you're even some IT developer that drinks a lot of coffee and also pees a lot...and think that both XML and Spellcast are child's play.

On the other hand, if you're like me, learning how to harness the power of Spellcast has been a formidable task quite similar to Frodo Baggins and that hyped up ring. So before you turn in to the likes of Golum, let me tell you this: it's gonna take some work to understand it. So if your knowledge of programming is somewhere between XML guru or only being able to update your myspace page with your latest boobie pics, you'll have to do some homework first:

1. Put down the bong, I need you focused for this.

2. Immerse yourself in the basics of Spellcast as well as how to install it.

3. Install it. Duh!

4. In some cases, I will be using my Corsair as my example so familiarize yourself with it: http://wiki.windower.net/plugins/spellcast/userxml/cor/leybot_cor. It's my work in progress so there may be some errors in it currently.

Study them hard! In my next post, our first lesson will be setting up gear sets!

Good luck!

Monday, July 13, 2009

Take the Pain out of Campaign!

Ohohohoho! Why do I cast without warning?
I love the smell of Flare II in the morning!

- Shantotto, Apocalypse Now-taru

Love it or hate it, you need to keep campaigning in the Shadowreign era. Whether it's to maintain your shiny Wings of Honor or to get that next promotion, sometimes fighting the good fight gets tedious. From what I've read on how promotions work, it's partly based on how much Allied Notes you accrue during your evaluation period.

So how can you maximize the amount of Allied Notes you get with minimal effort?
  1. Save all your Campaign Ops tags and wait until the next Conquest tally update.
  2. Once JP midnight hits on Sunday (8AM for PST, 11AM for EST), get a Retrace.
  3. Since it's the beginning of the week, you will notice that almost all the Campaign Ops missions are worth 4-5 stars! These soloable missions yield lots of exp and notes! And the higher your rank, the more you get!
  4. Stick to the quests that require minimal time and no fighting. This means stay away from Offensive/Defensive operations, Stock and Awe, Military training, Deep Cover, etc.
  5. Use up all your 7 Campaign Ops tags all the 4-5 star missions as soon as possible!
This really isn't a big secret. It's almost like camping your favorite crafting guild to buy the good stuff. Show up early and do those missions while they're still worth 5 stars!

If you are in the higher ranks, I recommend doing Slaughterhouse III. Here's what I do:
  1. The night before, go to the homepoint of your nation [s] and set HP (usually it's a shorter walk than the mog house). Change to BLM sub or main.
  2. Slap on a pair of Sprinter Shoes and use them for the quickening effect.
  3. Grab the mission and teleport to a beastmen controlled region.
  4. Find the correct ??? on the fortification, plant the bomb and wait till it explodes.
  5. Click the ??? again to get your exp and complete the mission.
  6. Warp and do it all over again.
If conditions are right, you can use up all your tags within 20-30 minutes. And when the mission is worth 5 stars, you can get just over 500 exp and just under 1,500 allied notes per run. That means 7 runs will net you around 3,500 exp and 10,000 Allied Notes! Eek, I hope my math is right.

If you weren't eligible for a promotion after those 7 runs, a couple of campaign battles should do the trick. And if for any reason the beastmen don't control any of the accessible regions to plant bombs at, I go for Steel Resolve II/III. For me, it's the next quickest mission, but it involves some memorization and quickness.

Saturday, July 11, 2009

Safety Dance


We can dance if we want to
We can leave your friends behind
'Cause your friends don't dance
And if they don't dance
Well, they're no friends of mine...

- Safety Dance - Men Without Hats

Let's face it. None of the other races can look as elegant as a dancing Galka. You may think otherwise, but this statement is irrefutable. Nevertheless, we can all keep trying and keep on keeping on. Just dance for the sake of dancing. Forever.

Dance forever. How do you do just that?
  1. Sign up for a Windower ballroom dance class.
  2. In the scripts folder of your Windower directory, create a dance.txt file with the following contents:
echo "=== Start the Dance Marathon! ===";
echo "Use the Control-Escape Key to end this macro.";

plugin_unloadall
//Remove above line if you do NOT want to unload all your plugins.

alias stopDance01 alias Dance01 /;
alias stopDance02 alias Dance02 /;
alias stopDance03 alias Dance03 /;
alias stopDance04 alias Dance04 /;
alias stopDance05 alias Dance05 /;
alias stopDance06 alias Dance06 /;
alias stopDance07 alias Dance07 /;
alias stopDance08 alias Dance08 /;
alias stopDanceMarathon alias DanceMarathon /;

alias stop stopDance01;stopDance02;stopDance03;stopDance04;stopDance05;stopDance06;stopDance07;stopDance08;stopDanceMarathon;

bind ^escape stop; input /echo [Ending Dance Marathon]; exec init.txt;

//Remove the exec init.txt; portion of above line IF you removed 3rd line.

alias Dance01 input /dance4 motion; wait 3;
alias Dance02 input /dance4 motion; wait 3;
alias Dance03 input /dance4 motion; wait 3;
alias Dance04 input /dance4 motion; wait 3;
alias Dance05 input /dance4 motion; wait 3;
alias Dance06 input /dance4 motion; wait 3;
alias Dance07 input /dance4 motion; wait 3;
alias Dance08 input /dance4 motion; wait 3;

//You can change up the above dance emotes here.
//The wait times after each dance emote can also be adjusted.
//Don't be a douchebag and remove the "motion" after each emote!


alias DanceMarathon exec Dance.txt;
alias DanceMarathon exec Dance.txt;

Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
Dance01; Dance02; Dance03; Dance04;
Dance05; Dance06; Dance07; Dance08;
DanceMarathon


What this script does:
First, this script unloads all your plugins (so that it won't interfere with them executing commands at same time). Then, it makes you perform 8 dance emotes in an infinite cycle. Upon pressing Ctrl+Esc, the script will stop running and then reload your plugins via your init.txt script. If you are still dancing, just move your character and he/she will stop.

To execute the script, type //exec dance.txt.

Thursday, July 9, 2009

Paranoia


Ever wonder what those Whitegate shouts in Japanese are all about? Are you paranoid that they are talking about you and only you? Well, I'm afraid to break it to you...but they are. Gasp!

What are they saying? Who knows. Are they talking about the pics of yourself that you posted on your blog and how those skinny jeans really emphasize the need for you to lose weight? Are they talking about your superior tanking ability as WAR43/WHM9? Perhaps they're spreading gossip about you being the forgotten child of the Brangelina duo?

There's only one way to find out:
  1. Put on your Windower foil hat.
  2. Get your LogMon detective kit.
  3. Now put on your Babelfish decoder ring.
After you start up FFXI, you can start up LogMon. Now head to Whitegate and hide behind the counter of Cacaroon the Qiqurn. Keep your eyes peeled. Wait for it.

Nekochobichan: 案ずるより産むが易し.

Aha~! Once you see that shady Japanese text come up in your chat log, toggle over to LogMon and copy the text. Now open up your web browser and go to Babelfish. Paste the text and select "Japanese to English" option. Now hit the Translate button!

Aha~! Wait, what?! Okay, maybe they weren't talking about you. And now that you've translated the text, you're even more confused than before.

What Babelfish says: Rather than worrying, you bear, but it is easy.
What it literally means: Giving birth to a baby is easier than worrying about it.
A Japanese proverb: 1. Fear is greater than the danger. 2. An attempt is sometimes easier than expected.

In any case, you can take off that foil hat because you now have the tools to spy on their open yet private shouts. I don't know if you'll be in a better predicament after all this, but any change is good. Am I right?