0% found this document useful (0 votes)
720 views15 pages

Blu Lua

This document contains Lua code that sets up functions and variables for a blue mage job in FFXI. It defines mappings for different blue magic spell types to gear sets, initializes state variables to track buffs, and sets up keybinds and macros. User setup functions allow customizing options and overriding default settings. The code also loads include files, initializes rune information for rune fencer subjob, and defines gear sets.

Uploaded by

Kyle Ricks
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
720 views15 pages

Blu Lua

This document contains Lua code that sets up functions and variables for a blue mage job in FFXI. It defines mappings for different blue magic spell types to gear sets, initializes state variables to track buffs, and sets up keybinds and macros. User setup functions allow customizing options and overriding default settings. The code also loads include files, initializes rune information for rune fencer subjob, and defines gear sets.

Uploaded by

Kyle Ricks
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 15

-----------------------------------------------------------------------------------

--------------------------------
-- Setup functions for this job. Generally should not be modified.
-----------------------------------------------------------------------------------
--------------------------------

-- Initialization function for this job file.


function get_sets()
mote_include_version = 2

-- Load and initialize the include file.


include('Mote-Include.lua')
include('organizer-lib')
end

-- Setup vars that are user-independent. state.Buff vars initialized here will
automatically be tracked.
function job_setup()
state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
state.Buff['Chain Affinity'] = buffactive['Chain Affinity'] or false
state.Buff.Convergence = buffactive.Convergence or false
state.Buff.Diffusion = buffactive.Diffusion or false
state.Buff.Efflux = buffactive.Efflux or false

state.Buff['Unbridled Learning'] = buffactive['Unbridled Learning'] or false

blue_magic_maps = {}

-- Mappings for gear sets to use for various blue magic spells.
-- While Str isn't listed for each, it's generally assumed as being at least
-- moderately signficant, even for spells with other mods.

-- Physical Spells --

-- Physical spells with no particular (or known) stat mods


blue_magic_maps.Physical = S{
'Bilgestorm'
}

-- Spells with heavy accuracy penalties, that need to prioritize accuracy


first.
blue_magic_maps.PhysicalAcc = S{
'Heavy Strike',
}

-- Physical spells with Str stat mod


blue_magic_maps.PhysicalStr = S{
'Battle Dance','Bloodrake','Death Scissors','Dimensional Death',
'Empty Thrash','Quadrastrike','Sinker Drill','Spinal Cleave',
'Uppercut','Vertical Cleave'
}

-- Physical spells with Dex stat mod


blue_magic_maps.PhysicalDex = S{
'Amorphic Spikes','Asuran Claws','Barbed Crescent','Claw
Cyclone','Disseverment',
'Foot Kick','Frenetic Rip','Goblin Rush','Hysteric Barrage','Paralyzing
Triad',
'Seedspray','Sickle Slash','Smite of Rage','Terror Touch','Thrashing
Assault',
'Vanity Dive'
}

-- Physical spells with Vit stat mod


blue_magic_maps.PhysicalVit = S{
'Body Slam','Cannonball','Delta Thrust','Glutinous Dart','Grand Slam',
'Power Attack','Quad. Continuum','Sprout Smack','Sub-zero Smash'
}

-- Physical spells with Agi stat mod


blue_magic_maps.PhysicalAgi = S{
'Benthic Typhoon','Feather Storm','Helldive','Hydro Shot','Jet Stream',
'Pinecone Bomb','Spiral Spin','Wild Oats'
}

-- Physical spells with Int stat mod


blue_magic_maps.PhysicalInt = S{
'Mandibular Bite','Queasyshroom'
}

-- Physical spells with Mnd stat mod


blue_magic_maps.PhysicalMnd = S{
'Ram Charge','Screwdriver','Tourbillion'
}

-- Physical spells with Chr stat mod


blue_magic_maps.PhysicalChr = S{
'Bludgeon'
}

-- Physical spells with HP stat mod


blue_magic_maps.PhysicalHP = S{
'Final Sting'
}

-- Magical Spells --

-- Magical spells with the typical Int mod


blue_magic_maps.Magical = S{
'Blastbomb','Blazing Bound','Bomb Toss','Cursed Sphere','Dark Orb','Death
Ray',
'Diffusion Ray','Droning Whirlwind','Embalming Earth','Firespit','Foul
Waters',
'Ice Break','Leafstorm','Maelstrom','Rail Cannon','Regurgitation','Rending
Deluge',
'Retinal Glare','Subduction','Tem. Upheaval','Water Bomb', 'Searing
Tempest', 'Blinding Fulgor',
'Spectral Floe', 'Scouring Spate', 'Anvil Lightning', 'Silent Storm',
'Entomb', 'Tenebral Crush'
}

-- Magical spells with a primary Mnd mod


blue_magic_maps.MagicalMnd = S{
'Acrid Stream','Evryone. Grudge','Magic Hammer','Mind Blast'
}
-- Magical spells with a primary Chr mod
blue_magic_maps.MagicalChr = S{
'Eyes On Me','Mysterious Light'
}

-- Magical spells with a Vit stat mod (on top of Int)


blue_magic_maps.MagicalVit = S{
'Thermal Pulse'
}

-- Magical spells with a Dex stat mod (on top of Int)


blue_magic_maps.MagicalDex = S{
'Charged Whisker','Gates of Hades'
}

-- Magical spells (generally debuffs) that we want to focus on magic accuracy


over damage.
-- Add Int for damage where available, though.
blue_magic_maps.MagicAccuracy = S{
'1000 Needles','Absolute Terror','Actinic Burst','Auroral Drape','Awful
Eye',
'Blank Gaze','Blistering Roar','Blood Drain','Blood Saber','Chaotic Eye',
'Cimicine Discharge','Cold Wave','Corrosive Ooze','Demoralizing
Roar','Digest',
'Dream Flower','Enervation','Feather Tickle','Filamented Hold','Frightful
Roar',
'Geist Wall','Hecatomb Wave','Infrasonics','Jettatura','Light of Penance',
'Lowing','Mind Blast','Mortal Ray','MP Drainkiss','Osmosis','Reaving Wind',
'Sandspin','Sandspray','Sheep Song','Soporific','Sound Blast','Stinking
Gas',
'Sub-zero Smash','Venom Shell','Voracious Trunk','Yawn'
}

-- Breath-based spells
blue_magic_maps.Breath = S{
'Bad Breath','Flying Hip Press','Frost Breath','Heat Breath',
'Hecatomb Wave','Magnetite Cloud','Poison Breath','Radiant Breath','Self-
Destruct',
'Thunder Breath','Vapor Spray','Wind Breath'
}

-- Stun spells
blue_magic_maps.Stun = S{
'Blitzstrahl','Frypan','Head Butt','Sudden Lunge','Tail slap','Temporal
Shift',
'Thunderbolt','Whirl of Rage'
}

-- Healing spells
blue_magic_maps.Healing = S{
'Healing Breeze','Magic Fruit','Plenilune
Embrace','Pollen','Restoral','White Wind',
'Wild Carrot'
}

-- Buffs that depend on blue magic skill


blue_magic_maps.SkillBasedBuff = S{
'Barrier Tusk','Diamondhide','Magic Barrier','Metallic Body','Plasma
Charge',
'Pyric Bulwark','Reactor Cool',
}

-- Other general buffs


blue_magic_maps.Buff = S{
'Amplification','Animating Wail','Battery Charge','Carcharian
Verve','Cocoon',
'Erratic Flutter','Exuviation','Fantod','Feather Barrier','Harden Shell',
'Memento Mori','Nat. Meditation','Occultation','Orcish
Counterstance','Refueling',
'Regeneration','Saline Coat','Triumphant Roar','Warm-Up','Winds of
Promyvion',
'Zephyr Mantle'
}

-- Spells that require Unbridled Learning to cast.


unbridled_spells = S{
'Absolute Terror','Bilgestorm','Blistering Roar','Bloodrake','Carcharian
Verve',
'Crashing Thunder','Droning Whirlwind','Gates of Hades','Harden
Shell','Polar Roar',
'Pyric Bulwark','Thunderbolt','Tourbillion','Uproot','Mighty Guard','Cruel
Joke','Cesspool','Tearing Gust'
}

-- Runefencer Sub
-- Table of entries
rune_timers = T{}
-- Define Rune Info
define_rune_info()
-- entry = rune, index, expires
max_runes = 2
end

-----------------------------------------------------------------------------------
--------------------------------
-- User setup functions for this job. Recommend that these be overridden in a
sidecar file.
-----------------------------------------------------------------------------------
--------------------------------

-- Setup vars that are user-dependent. Can override this function in a sidecar
file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc', 'Refresh', 'Learning')
state.WeaponskillMode:options('Normal', 'Acc')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'PDT', 'Learning')
state.Runes = M{['description']='Runes',
"Tellus","Unda","Flabra","Ignis","Gelus","Sulpor","Lux","Tenebrae"}

-- gear.macc_hagondes = {name="Hagondes Cuffs", augments={'Phys. dmg. taken


-3%','Mag. Acc.+29'}}

-- Additional local binds

-- CONTROL
send_command('bind ^F1 input /ja "Chain Affinity" <me>')
send_command('bind ^F2 input /ja "Efflux" <me>')
send_command('bind ^F3 input /ja "Burst Affinity" <me>')
send_command('bind ^F4 input /ja "Diffusion" <me>')
send_command('bind ^F5 input /ja "Unbridled Learning" <me>')
send_command('bind ^F6 input /ja "Unbridled Wisdom" <me>')
send_command('bind ^F8 input /ja "Azure Lore" <me>')
-- Windows Key
send_command('bind @F1 input /ja "Pflug" <me>')
send_command('bind @F2 input /ja "Vallation" <me>')
send_command('bind @F11 input //gs c cycle Runes')
send_command('bind @F12 input //gs c rune')
-- Alt
send_command('bind !F1 input /ma "Battery Charge" <me>')
send_command('bind !F2 input /ma "Occultation" <me>')
-- send_command('bind !F2 input /ma "Utsusemi: Ni" <me>')
send_command('bind !F3 input /ma "Erratic Flutter" <me>')
send_command('bind !F4 input /ja "Swordplay" <me>')
-- send_command('bind !F4 input /ma "Utsusemi: Ichi" <me>')
send_command('bind !F5 input /ma "phalanx" <me>')
send_command('bind !F6 input /ma "stoneskin" <me>')
send_command('bind !F7 input /ma "blink" <me>')
send_command('bind !F8 input /ma "aquaveil" <me>')

update_combat_form()
select_default_macro_book()
end

-- Called when this job file is unloaded (eg: job change)


function user_unload()
send_command('unbind ^`')
send_command('unbind !`')
send_command('unbind @`')
end

-- Set up gear sets.-


function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------

sets.buff['Burst Affinity'] = {legs="Assimilator's Shalwar +1",feet="Hashishin


Basmak +1"}
sets.buff['Chain Affinity'] = {head="Hashishin Kavuk", feet="Assimilator's
Charuqs +1"}
sets.buff.Convergence = {head="Luhlaza Keffiyeh +1"}
sets.buff.Diffusion = {feet="Luhlaza Charuqs +1"}
sets.buff.Enchainment = {body="Luhlaza Jubbah +1"}
sets.buff.Efflux = {legs="Hashishin Tayt +1", back="Rosmerta's Cape"}
sets.precast.JA['Lunge'] = sets.midcast.Magical
sets.precast.JA['Swipe'] = sets.precast.JA['Lunge']

-----------------------------------------------------------------------------
--------------------------------------
-- Other Gear
-----------------------------------------------------------------------------------
--------------------------------
-- Precast Sets

-- Precast sets to enhance JAs


sets.precast.JA['Azure Lore'] = {hands="Luhlaza Bazubands +1"}

-- Waltz set (chr and vit)


sets.precast.Waltz = {
ammo="Sonia's Plectrum",
head="Ayanmo Zucchetto +1",
body="Ayanmo Corazza +1",hands="Assimilator's Bazubands +1",ring1="Veela Ring",
ring="Omega Ring",
back="Swith Cape",legs="Ayanmo Cosciales +1",feet="Jhakri Pigaches +1"}

-- Don't need any special gear for Healing Waltz.


sets.precast.Waltz['Healing Waltz'] = {}

-- Fast cast sets for spells

sets.precast.FC = {ammo="Sapience Orb",


head="Haruspex Hat",ear2="Loquacious Earring",
body="Luhlaza Jubbah +1",hands="Hashishin Bazubands +1",ring1="Prolix
Ring",
back="Swith Cape",waist="Windbuffet Belt +1",legs="Ayanmo Cosciales
+1",feet="Merlinic Crackows"}

sets.precast.FC['Blue Magic'] = set_combine(sets.precast.FC, {body="Hashishin


Mintan"})

-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {
ammo="Focal Orb",
head="Jhakri Coronal +1",neck="Fotia Gorget",ear1="Mache
Earring",ear2="Mache Earring",
body="Jhakri Robe +2",hands="Ayanmo Manopolas +1",ring1="Apate
Ring",ring2="Pyrosoul Ring",
back="Rosmerta's Cape",waist="Fotia Belt",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2"}

-- Specific weaponskill sets. Uses the base set if an appropriate WSMod


version isn't found.
sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {head="Jhakri
Coronal +1",ring2="Levia\. Ring",feet="Jhakri Pigaches +2"})

-- Savage Blade - STR 50% MND 50% - Fragmentation / Scission


sets.precast.WS['Savage Blade'] = {
ammo="Focal Orb",
head="Jhakri Coronal +1",neck="Fotia Gorget",ear1="Hecate's
Earring",ear2="Moonshade Earring",
body="Jhakri Robe +2",hands="Ayanmo Manopolas +1",ring1="Apate
Ring",ring2="Leviathan Ring",
back="Cornflower Cape",waist="Fotia Belt",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2"}

-- Sanguine Blade - STR 30% MND 50%


sets.precast.WS['Sanguine Blade'] = {
ammo="Focal Orb",
head="Jhakri Coronal +1",neck="Fotia Gorget",ear1="Hecate's
Earring",ear2="Moonshade Earring",
body="Jhakri Robe +2",hands="Ayanmo Manopolas +1",ring1="Apate
Ring",ring2="Leviathan Ring",
back="Cornflower Cape",waist="Fotia Belt",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2"}

-- Chant du Cygne - DEX: 80% - Light / Distortion


sets.precast.WS['Chant du Cygne'] = {
ammo="Jukukik Feather",
head="Ayanmo Zucchetto +1",neck="Fotia Gorget",ear1="Mache Earring",
body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1="Apate
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Fotia Belt",legs="Ayanmo Cosciales
+1",feet="Ayanmo Gambieras +1",ear2="Mache Earring"
}

-- Midcast Sets
sets.midcast.FastRecast = {
head="Haruspex Hat",ear2="Loquacious Earring",
body="Luhlaza Jubbah +1",hands="Hashishin Bazubands +1",ring1="Prolix
Ring",
back="Swith Cape",waist="Hurch'lan Sash",legs="Ayanmo Cosciales
+1",feet="Merlinic Crackows"}

sets.midcast['Blue Magic'] = {}

-- Physical Spells --

sets.midcast['Blue Magic'].Physical = {ammo="Honed Tathlum",


head="Jhakri Coronal +1",neck="Ej Necklace",ear1="Mache Earring",
body="Jhakri Robe +2",hands="Ayanmo Manopolas +1",ring1="Apate
Ring",ring2="Pyrosoul Ring",
back="Rosmerta's Cape",waist="Windbuffet Belt +1",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2",ear2="Mache Earring"}

sets.midcast['Blue Magic'].PhysicalAcc = {ammo="Honed Tathlum",


head="Ayanmo Zucchetto +1",neck="Ej Necklace",ear1="Mache Earring",
body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1="Apate
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Grunfeld Rope",legs="Ayanmo Cosciales
+1",feet="Jhakri Pigaches +1",ear2="Mache Earring"}

sets.midcast['Blue Magic'].PhysicalStr = set_combine(sets.midcast['Blue


Magic'].Physical,
{ammo="Honed Tathlum",
neck="Justice Torque",
body="Jhakri Robe +2",hands="Ayanmo Manopolas +1",
back="Cornflower Cape",waist="beir belt +1",legs="Samnuha Tights"})

sets.midcast['Blue Magic'].PhysicalDex = set_combine(sets.midcast['Blue


Magic'].Physical,
{ammo="Jukukik Feather",
head="Ayanmo Zucchetto +1",body="Ayanmo Corazza +1",hands="Ayanmo
Manopolas +1",
back="Cornflower Cape",waist="Grunfeld Rope",legs="Ayanmo Cosciales +1",
feet="Ayanmo Gambieras +1"})

sets.midcast['Blue Magic'].PhysicalVit = set_combine(sets.midcast['Blue


Magic'].Physical,
{ammo="Bibiki Seashell",
head="Ayanmo Zucchetto +1", neck="Fortitude Torque",
body="Ayanmo Corazza +1",hands="Luhlaza Bazubands +1",
back="Rosmerta's Cape",waist="Flume Belt +1",legs="Ayanmo Cosciales
+1", feet="Assimilator's Charuqs +1"})

sets.midcast['Blue Magic'].PhysicalAgi = set_combine(sets.midcast['Blue


Magic'].Physical,
{ammo="Honed Tathlum",
head="Imperial Wing Hairpin +1",ear2="Phawaylla Earring",
body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",
back="Rosmerta's Cape",legs="Ayanmo Cosciales +1",feet="Ayanmo Gambieras
+1"})

sets.midcast['Blue Magic'].PhysicalInt = set_combine(sets.midcast['Blue


Magic'].Physical,
{ammo="Honed Tathlum",
head="Jhakri Coronal +1",neck="Aife's Medal",ear1="Mavi
Earring",ear2="Moonshade earring",
body="Jhakri Robe +2",hands="Jhakri Cuffs +1",ring1="Diamond
Ring",ring2="Snow Ring",
back="Cornflower Cape",waist="Acuity Belt",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2"})

sets.midcast['Blue Magic'].PhysicalMnd = set_combine(sets.midcast['Blue


Magic'].Physical,
{ammo="Honed Tathlum",
head="Ayanmo Zucchetto +1", neck="Aife's Medal",
body="Jhakri Robe +2",hands="Jhakri Cuffs +1",ring2="Levia\. Ring",
back="Cornflower Cape",waist="Penitent's Rope",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2"})

sets.midcast['Blue Magic'].PhysicalChr = set_combine(sets.midcast['Blue


Magic'].Physical,
{
ammo="Honed Tathlum",
head="Jhakri Coronal +1",
body="Jhakri Robe +2",hands="Jhakri Cuffs +1",ring1="Veela Ring",
ring="Omega Ring",
back="Swith Cape",waist="Penitent's Rope",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2"})

sets.midcast['Blue Magic'].PhysicalHP = set_combine(sets.midcast['Blue


Magic'].Physical)

-- Magical Spells --

sets.midcast['Blue Magic'].Magical = {ammo="Mavi Tathlum",


head="Jhakri Coronal +1",neck="Eddy Necklace",ear1="Hecate's
Earring",ear2="Friomisi Earring",
body="Jhakri Robe +2",hands="Jhakri Cuffs +1",ring1="Diamond
Ring",ring2="Acumen Ring",
back="Cornflower Cape",waist="Acuity Belt",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2"}

-- sets.midcast['Blue Magic'].Magical.Resistant = set_combine(sets.midcast['Blue


Magic'].Magical,
-- {body="Vanir Cotehardie",ring1="Sangoma Ring",legs="Iuitl
Tights",feet="Hashishin Basmak +1"})

sets.midcast['Blue Magic'].MagicalMnd = set_combine(sets.midcast['Blue


Magic'].Magical,
{ammo="Aqua Sachet",
head="Jhakri Coronal +1",
back="Cornflower Cape"})

sets.midcast['Blue Magic'].MagicalChr = set_combine(sets.midcast['Blue


Magic'].Magical,
{ammo="Light Sachet",
back="Cornflower Cape"
}
)

sets.midcast['Blue Magic'].MagicalVit = set_combine(sets.midcast['Blue


Magic'].Magical,
{ammo="Bibiki Seashell",
neck="Fortitude Torque",
back="Cornflower Cape", waist="Flume Belt +1"
}
)

sets.midcast['Blue Magic'].MagicalDex = set_combine(sets.midcast['Blue


Magic'].Magical,
{back="Cornflower Cape"}
)

sets.midcast['Blue Magic'].MagicAccuracy = {ammo="Mavi Tathlum",


head="Jhakri Coronal +1",body="Jhakri Robe +2",
back="Cornflower Cape",legs="Jhakri Slops +1"}

-- Breath Spells --

sets.midcast['Blue Magic'].Breath = {ammo="Mavi Tathlum",


head="Ayanmo Zucchetto +1",ear1="Hecate's Earring",ear2="Friomisi Earring",
body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring2="Bomb Queen
Ring",
back="Mirage Mantle",legs="Ayanmo Cosciales +1",feet="Jhakri Pigaches +2"}

-- Other Types --

sets.midcast['Blue Magic'].Stun = set_combine(sets.midcast['Blue


Magic'].MagicAccuracy)

sets.midcast['Blue Magic']['White Wind'] = {


head="Ayanmo Zucchetto +1",neck="Aife's Medal",ear1="Loquacious Earring",
body="Ayanmo Corazza +1",hands="Jhakri Cuffs +1",ring2="Bomb Queen Ring",
back="Cornflower Cape",waist="Windbuffet Belt +1",legs="Jhakri Slops
+1",feet="Jhakri Pigaches +2"}

sets.midcast['Blue Magic'].Healing = {sets.midcast['Blue Magic'].MagicalMnd}

sets.midcast['Blue Magic'].SkillBasedBuff = {ammo="Mavi Tathlum",


head="Assimilator's Keffiyeh +1",
body="Assimilator's Jubbah +1",hands="Hashishin Bazubands +1",
back="Cornflower Cape",waist="Windbuffet Belt +1",legs="Hashishin Tayt
+1",feet="Luhlaza Charuqs +1"}
sets.midcast['Blue Magic'].Buff = {}

-- sets.midcast.Protect = {ring1="Sheltered Ring"}


-- sets.midcast.Protectra = {ring1="Sheltered Ring"}
-- sets.midcast.Shell = {ring1="Sheltered Ring"}
-- sets.midcast.Shellra = {ring1="Sheltered Ring"}

-- Sets to return to when not performing an action.

-- Gear for learning spells: +skill and AF hands.


sets.Learning = {ammo="Mavi Tathlum",
head="Luhlaza Keffiyeh +1",
body="Assimilator's Jubbah +1", hands="Assimilator's Bazubands +1",
back="Cornflower Cape",feet="Luhlaza Charuqs +1"}

-- sets.latent_refresh = {waist="Fucho-no-obi"}

-- Resting sets
sets.resting = {
ear1="antivenom earring",
body="Jhakri Robe +2",
waist="Hierarch Belt"}

-- Idle sets
sets.idle = {head="Jhakri Coronal +1",neck="Ej Necklace",ear1="Mache Earring",
body="Jhakri Robe +2",hands="Jhakri Cuffs +1",ring1="Epona's
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Windbuffet Belt +1",legs="Crimson
Cuisses",feet="Jhakri Pigaches +2",ear2="Mache Earring"}

sets.idle.PDT = set_combine(sets.idle, {
head="dux visor",neck="Twilight Torque",ear1="phawaylla
earring",ear2="ethereal earring",
body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1="Jelly
Ring",ring2="Gelatinous Ring",
back="Cheviot Cape",waist="Flume Belt +1",legs="Ayanmo Cosciales
+1",feet="dux greaves"})

sets.idle.Town = set_combine(sets.precast.idle, {
head="Jhakri Coronal +1",
body="Jhakri Robe +2",hands="Jhakri Cuffs +1",
legs="Crimson Cuisses",feet="Jhakri Pigaches +2"})

sets.idle.Learning = set_combine(sets.idle, sets.Learning)

-- Defense sets
sets.defense.PDT = {
head="dux visor",neck="Twilight Torque",ear1="phawaylla
earring",ear2="ethereal earring",
body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1="Jelly
Ring",ring2="Gelatinous Ring",
back="Cheviot Cape",waist="Flume Belt +1",legs="crimson cuisses",feet="dux
greaves"}

-- sets.defense.MDT = {ammo="Demonry Stone",


-- head="Whirlpool Mask",neck="Twilight Torque",ear1="Bloodgem Earring",
-- body="Hagondes Coat",hands="Iuitl Wristbands",ring1="Defending
Ring",ring2="Shadow Ring",
-- back="Engulfer Cape",waist="Flume Belt",legs="Nahtirah
Trousers",feet="Iuitl Gaiters +1"}

-- sets.Kiting = {legs="Crimson Cuisses"}

-- Engaged sets

-- Variations for TP weapon and (optional) offense/defense modes. Code will


fall back on previous
-- sets if more refined versions aren't defined.
-- If you create a set with both offense and defense modes, the offense mode
should be first.
-- EG: sets.engaged.Dagger.Accuracy.Evasion

-- Normal melee group


sets.engaged = {ammo="Focal Orb",
head="Ayanmo Zucchetto +1",neck="Ej Necklace",ear1="Mache Earring",
body="Ayanmo Corazza +1",hands="Herculean Gloves",ring1="Epona's
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Windbuffet Belt +1",legs="Samnuha
Tights",feet="Ayanmo Gambieras +1",ear2="Mache Earring"}

sets.engaged.Acc = {ammo="Honed Tathlum",


head="Ayanmo Zucchetto +1",neck="Ej Necklace",ear1="Mache Earring",
body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1="Epona's
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Grunfeld Rope",legs="Ayanmo Cosciales
+1",feet="Jhakri Pigaches +2",ear2="Mache Earring"}

sets.engaged.Refresh = {
head="Ayanmo Zucchetto +1",neck="Ej Necklace",ear1="Mache Earring",
body="Jhakri Robe +2",hands="Herculean Gloves",ring1="Epona's
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Windbuffet Belt +1",legs="Samnuha
Tights",feet="Jhakri Pigaches +2",ear2="Mache Earring"}

sets.engaged.DW = {ammo="Focal Orb",


head="Ayanmo Zucchetto +1",neck="Ej Necklace",ear1="Mache Earring",
body="Ayanmo Corazza +1",hands="Herculean Gloves",ring1="Epona's
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Windbuffet Belt +1",legs="Samnuha
Tights",feet="Ayanmo Gambieras +1",ear2="Mache Earring"}

sets.engaged.DW.Acc = {ammo="Honed Tathlum",


head="Ayanmo Zucchetto +1",neck="Ej Necklace",ear1="Mache Earring",
body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1="Epona's
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Grunfeld Rope",legs="Ayanmo Cosciales
+1",feet="Jhakri Pigaches +2",ear2="Mache Earring"}

sets.engaged.DW.Refresh = {ammo="Honed Tathlum",


head="Ayanmo Zucchetto +1",neck="Ej Necklace",ear1="Mache Earring",
body="Jhakri Robe +2",hands="Herculean Gloves",ring1="Epona's
Ring",ring2="Petrov Ring",
back="Rosmerta's Cape",waist="Windbuffet Belt +1",legs="Samnuha
Tights",feet="Jhakri Pigaches +2",ear2="Mache Earring"}
sets.engaged.Learning = set_combine(sets.engaged, sets.Learning)
sets.engaged.DW.Learning = set_combine(sets.engaged.DW, sets.Learning)

-- sets.self_healing = {ring1="Kunaji Ring",ring2="Asklepian Ring"}


sets.swords = {
main={ name="Claidheamh Soluis", augments={'Accuracy+15
Attack+15','"Dbl.Atk."+3','DMG:+18',}},
sub={ name="Claidheamh Soluis",
augments={'Accuracy+18','"Dbl.Atk."+2','DMG:+18',}}
}
sets.clubs = {
main="Nehushtan", sub="Nehushtan"}

end

-----------------------------------------------------------------------------------
--------------------------------
-- Job-specific hooks for standard casting events.
-----------------------------------------------------------------------------------
--------------------------------

-- Set eventArgs.handled to true if we don't want any automatic gear equipping to


be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on
precast.
function job_precast(spell, action, spellMap, eventArgs)
if unbridled_spells:contains(spell.english) and not state.Buff['Unbridled
Learning'] then
eventArgs.cancel = true
windower.send_command('@input /ja "Unbridled Learning" <me>; wait 1.5;
input /ma "'..spell.name..'" '..spell.target.name)
end
end

-- Run after the default midcast() is done.


-- eventArgs is the same one used in job_midcast, in case information needs to be
persisted.
function job_post_midcast(spell, action, spellMap, eventArgs)
-- Add enhancement gear for Chain Affinity, etc.
if spell.skill == 'Blue Magic' then
for buff,active in pairs(state.Buff) do
if active and sets.buff[buff] then
equip(sets.buff[buff])
end
end
if spellMap == 'Healing' and spell.target.type == 'SELF' and
sets.self_healing then
equip(sets.self_healing)
end
end

-- If in learning mode, keep on gear intended to help with that, regardless of


action.
if state.OffenseMode.value == 'Learning' then
equip(sets.Learning)
end
end

-- Combine Auto Lunge Downgrade with Vivacious Pulse Support


function job_precast(spell, action, spellMap, eventArgs)
local abil_recasts = windower.ffxi.get_ability_recasts()
if spell.english == 'Lunge' and abil_recasts[spell.recast_id] > 0 then
send_command('input /jobability "Swipe" <t>')
add_to_chat(122, '***Lunge Aborted: Timer on Cooldown -- Downgrading to
Swipe.***')
eventArgs.cancel = true
return
end
end

-- Rune Work -- http://www.ffxiah.com/forum/topic/44362/run-lua/#2740226


function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'rune' then
send_command('@input /ja '..state.Runes.value..' <me>')
end
end

function define_rune_info()
rune_info = {
["Ignis"] = {damage="Fire", resistance="Ice"},
["Gelus"] = {damage="Ice", resistance="Wind"},
["Flabra"] = {damage="Wind", resistance="Earth"},
["Tellus"] = {damage="Earth", resistance="Lightning"},
["Sulpor"] = {damage="Lightning", resistance="Water"},
["Unda"] = {damage="Water", resistance="Fire"},
["Lux"] = {damage="Light", resistance="Darkness"},
["Tenebrae"]= {damage="Darkness", resistance="Light"},
}
end

function display_rune_info(spell)
runeinfo = rune_info[spell.english]
if runeinfo then
add_to_chat(122, '***'..spell.english..' provides '..runeinfo.damage..'-
based damage while offering '..runeinfo.resistance..' resistance.***')
end
end

-----------------------------------------------------------------------------------
--------------------------------
-- Job-specific hooks for non-casting events.
-----------------------------------------------------------------------------------
--------------------------------

-- Called when a player gains or loses a buff.


-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
state.Buff[buff] = gain
end
end

-----------------------------------------------------------------------------------
--------------------------------
-- User code that supplements standard library decisions.
-----------------------------------------------------------------------------------
--------------------------------

-- Custom spell mapping.


-- Return custom spellMap value that can override the default spell mapping.
-- Don't return anything to allow default spell mapping to be used.
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Blue Magic' then
for category,spell_list in pairs(blue_magic_maps) do
if spell_list:contains(spell.english) then
return category
end
end
end
end

-- Modify the default idle set after it was constructed.


function customize_idle_set(idleSet)
if player.mpp < 51 then
set_combine(idleSet, sets.latent_refresh)
end
return idleSet
end

-- Called by the 'update' self-command, for common needs.


-- Set eventArgs.handled to true if we don't want automatic equipping of gear.
function job_update(cmdParams, eventArgs)
update_combat_form()
end

-----------------------------------------------------------------------------------
--------------------------------
-- Utility functions specific to this job.
-----------------------------------------------------------------------------------
--------------------------------

function update_combat_form()
-- Check for H2H or single-wielding
if player.equipment.sub == "Genbu's Shield" or player.equipment.sub == 'empty'
then
state.CombatForm:reset()
else
state.CombatForm:set('DW')
end
end

-- Select default macro book on initial load or subjob change.


function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(1, 10)
elseif player.sub_job == 'WAR' then
set_macro_page(2, 10)
elseif player.sub_job == 'NIN' then
set_macro_page(2, 10)
elseif player.sub_job == 'RUN' then
set_macro_page(3, 10)
elseif player.sub_job == 'RDM' then
set_macro_page(10, 10)
else
set_macro_page(10,10)
end
end

You might also like