Code
-- IdleMode determines the set used after casting. You change it with "/console gs c <IdleMode>"
-- The modes are:
-- Refresh: Uses the most refresh available.
-- DT: A mix of refresh, PDT, and MDT to help when you can't avoid AOE.
-- PetDT: Sacrifice refresh to reduce avatar's damage taken. WARNING: Selenian Cap drops you below 119, use with caution!
-- DD: When melee mode is on and you're engaged, uses TP gear. Otherwise, avatar melee gear.
-- Favor: Uses Beckoner's Horn +1 and max smn skill to boost the favor effect.
-- Zendik: Favor build with the Zendik Robe added in, for Shiva's Favor in manaburn parties. (Shut up, it sounded like a good idea at the time)
-- Additional Bindings:
-- F9 - Toggles between a subset of IdleModes (Refresh > DT > PetDT)
-- F10 - Toggles MeleeMode (When enabled, equips Nirvana and Elan+1, then disables those 2 slots from swapping)
-- NOTE: If you don't already have the Nirvana & Elan+1 equipped, YOU WILL LOSE TP
-- Additional Commands:
-- /console gs c AccMode - Toggles high-accuracy sets to be used where appropriate.
-- /console gs c ImpactMode - Toggles between using normal magic BP set for Fenrir's Impact or a custom high-skill set for debuffs.
-- /console gs c ForceIlvl - I have this set up to override a few specific slots where I normally use non-ilvl pieces.
-- /console gs c LagMode - Used to help BPs land in the right gear in high-lag situations.
-- Sets a timer to swap gear 0.2s after the BP is used rather than waiting for server response.
function file_unload()
send_command('unbind f9')
send_command('unbind f10')
send_command('unbind ^f10')
end
function get_sets()
send_command('bind f9 gs c ToggleIdle')
send_command('bind f10 gs c MeleeMode')
send_command('bind ^f10 gs c ForceIlvl')
-- Set your merits here. This is used in deciding between Enticer's Pants or Apogee Slacks +1.
-- To change in-game, "/console gs c MeteorStrike3" will change Meteor Strike to 3/5 merits.
-- The damage difference is very minor unless you're over 2400 TP.
-- It's ok to just always use Enticer's Pants and ignore this section.
MeteorStrike = 1
HeavenlyStrike = 1
WindBlade = 1
Geocrush = 1
Thunderstorm = 5
GrandFall = 1
StartLockStyle = ''
IdleMode = 'Refresh'
AccMode = false
ImpactDebuff = false
MeleeMode = false
ForceIlvl = false
LagMode = false -- Default LagMode. If you have a lot of lag issues, change to "true".
AutoRemedy = false -- Auto Remedy when using an ability while Paralyzed.
AutoEcho = false -- Auto Echo Drop when using an ability while Silenced.
Test = 0
-- ===================================================================================================================
-- Sets
-- ===================================================================================================================
-- Base Damage Taken Set - Mainly used when IdleMode is "DT"
sets.DT_Base = {
}
sets.precast = {}
-- Fast Cast
sets.precast.FC = {
}
sets.midcast = {}
-- BP Timer Gear
sets.midcast.BP = {
main={ name="Espiritus", augments={'Enmity-6','Pet: "Mag.Atk.Bns."+30','Pet: Damage taken -4%',}},
sub="Vox Grip",
ammo="Sancus Sachet +1",
head="Beckoner's Horn +1",
body={ name="Glyphic Doublet +1", augments={'Reduces Sp. "Blood Pact" MP cost',}},
hands={ name="Glyphic Bracers +1", augments={'Inc. Sp. "Blood Pact" magic burst dmg.',}},
legs={ name="Glyphic Spats +1", augments={'Increases Sp. "Blood Pact" accuracy',}},
feet={ name="Glyph. Pigaches +1", augments={'Inc. Sp. "Blood Pact" magic crit. dmg.',}},
neck="Caller's Pendant",
waist="Lucidity Sash",
ear1="Gelos Earring",
ear2={ name="Moonshade Earring", augments={'Mag. Acc.+4','Latent effect: "Refresh"+1',}},
ring1="Varar Ring +1",
ring2="Varar Ring +1",
back={ name="Conveyance Cape", augments={'Summoning magic skill +2','Blood Pact Dmg.+2','Blood Pact ab. del. II -3',}},
}
-- Elemental Siphon sets. Zodiac Ring is affected by day, Chatoyant Staff by weather, and Twilight Cape by both.
sets.midcast.Siphon = {
main={ name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}},
sub="Vox Grip",
ammo="Esper Stone +1",
head="Baayami Hat",
neck="Caller's Pendant",
body="Baayami Robe",
hands="Baayami Cuffs +1",
ring2="Evoker's Ring",
back={ name="Conveyance Cape", augments={'Summoning magic skill +2','Blood Pact Dmg.+2','Blood Pact ab. del. II -3',}},
legs="Baayami Slops",
feet="Beck. Pigaches +1"
}
sets.midcast.SiphonZodiac = set_combine()
sets.midcast.SiphonWeather = set_combine(sets.midcast.Siphon, { main="Chatoyant Staff" })
sets.midcast.SiphonWeatherZodiac = set_combine(sets.midcast.SiphonZodiac, { main="Chatoyant Staff" })
-- Summoning Midcast, cap spell interruption if possible (Baayami Robe gives 100, need 2 more)
sets.midcast.Summon = set_combine(sets.DT_Base, {
body="Baayami Robe +1",
legs="Lengo Pants"
})
sets.midcast.Cure = {
sub="Oneiros Grip",
ammo="Sancus Sachet +1",
hands="Telchine Gloves",
ring1="Weather. Ring",
legs="Assid. Pants +1",
feet="Merlinic Crackows",
}
sets.midcast.Cursna = set_combine(sets.precast.FC, {
})
sets.midcast.EnmityRecast = set_combine(sets.precast.FC, {
})
sets.midcast.Enfeeble = {
}
sets.midcast.Enhancing = {
}
sets.midcast.Stoneskin = set_combine(sets.midcast.Enhancing, {
})
sets.midcast.Nuke = {
}
sets.midcast["Refresh"] = set_combine(sets.midcast.Enhancing, {
})
sets.midcast["Aquaveil"] = set_combine(sets.midcast.Enhancing, {
})
sets.midcast["Mana Cede"] = { hands="Beckoner's Bracers" }
sets.midcast["Astral Flow"] = { }
sets.midcast["Garland of Bliss"] = {
main={ name="Espiritus", augments={'Enmity-6','Pet: "Mag.Atk.Bns."+30','Pet: Damage taken -4%',}},
sub="Vox Grip",
ammo="Sancus Sachet +1",
head="Tali'ah Turban +1",
body="Tali'ah Manteel",
hands="Tali'ah Gages +1",
legs="Tali'ah Seraweels",
feet="Tali'ah Crackows +1",
neck="Smn. Collar +2",
waist="Klouskap Sash +1",
left_ear="Mache Earring +1",
right_ear="Mache Earring +1",
left_ring="Ramuh Ring +1",
right_ring="Tali'ah Ring",
back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+15 Attack+15','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','Pet: Damage taken -5%',}},
}
sets.midcast["Shattersoul"] = {
main={ name="Espiritus", augments={'Enmity-6','Pet: "Mag.Atk.Bns."+30','Pet: Damage taken -4%',}},
sub="Vox Grip",
ammo="Sancus Sachet +1",
head="Tali'ah Turban +1",
body="Tali'ah Manteel",
hands="Tali'ah Gages +1",
legs="Tali'ah Seraweels",
feet="Tali'ah Crackows +1",
neck="Smn. Collar +2",
waist="Klouskap Sash +1",
left_ear="Mache Earring +1",
right_ear="Mache Earring +1",
left_ring="Ramuh Ring +1",
right_ring="Tali'ah Ring",
back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+15 Attack+15','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','Pet: Damage taken -5%',}},
}
sets.midcast["Cataclysm"] = sets.midcast.Nuke
sets.pet_midcast = {}
-- Main physical pact set (Volt Strike, Pred Claws, etc.)
sets.pet_midcast.Physical_BP = {
main="Gridarvor",
sub="Elan Strap",
ammo="Sancus Sachet +1",
head={ name="Apogee Crown +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
body="Con. Doublet +1",
hands={ name="Apogee Mitts +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
legs="Apogee Slacks +1",
feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
neck="Smn. Collar +2",
waist="Klouskap Sash +1",
ear1="Gelos Earring",
ear2="Kyrene's Earring",
ring1="Varar Ring +1",
ring2="Varar Ring +1",
back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+15 Attack+15','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','Pet: Damage taken -5%',}},
}
sets.pet_midcast.Physical_BP_AM3 = set_combine(sets.pet_midcast.Physical_BP, {
})
-- Physical pacts which benefit more from TP than Pet:DA (like single-hit BP)
sets.pet_midcast.Physical_BP_TP = set_combine(sets.pet_midcast.Physical_BP, {
})
-- Used for all physical pacts when AccMode is true
sets.pet_midcast.Physical_BP_Acc = set_combine(sets.pet_midcast.Physical_BP, {
})
-- Base magic pact set
sets.pet_midcast.Magic_BP_Base = {
main="Espiritus",
sub="Elan Strap",
ammo="Sancus Sachet +1",
head={ name="Apogee Crown +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
body="Con. Doublet +1",
hands={ name="Apogee Mitts +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
legs="Apogee Slacks +1",
feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
neck="Smn. Collar +2",
waist="Klouskap Sash +1",
ear1="Gelos Earring",
ear2="Kyrene's Earring",
ring1="Varar Ring +1",
ring2="Varar Ring +1",
back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+15 Attack+15','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','Pet: Damage taken -5%',}},
}
-- Some magic pacts benefit more from TP than others.
-- Note: This set will only be used on merit pacts if you have less than 4 merits.
-- Make sure to update your merit values at the top of this Lua.
sets.pet_midcast.Magic_BP_TP = set_combine(sets.pet_midcast.Magic_BP_Base, {
})
-- NoTP set used when you don't need Enticer's
sets.pet_midcast.Magic_BP_NoTP = set_combine(sets.pet_midcast.Magic_BP_Base, {
})
sets.pet_midcast.Magic_BP_TP_Acc = set_combine(sets.pet_midcast.Magic_BP_TP, {
})
sets.pet_midcast.Magic_BP_NoTP_Acc = set_combine(sets.pet_midcast.Magic_BP_NoTP, {
})
sets.pet_midcast.FlamingCrush = {
main="Espiritus",
sub="Elan Strap",
ammo="Sancus Sachet +1",
head={ name="Apogee Crown +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
body="Con. Doublet +1",
hands={ name="Apogee Mitts +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
legs="Apogee Slacks +1",
feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
neck="Smn. Collar +2",
waist="Klouskap Sash +1",
ear1="Gelos Earring",
ear2="Kyrene's Earring",
ring1="Varar Ring +1",
ring2="Varar Ring +1",
back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+15 Attack+15','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','Pet: Damage taken -5%',}},
}
sets.pet_midcast.FlamingCrush_Acc = set_combine(sets.pet_midcast.FlamingCrush, {
})
-- Pet: Magic Acc set - Mainly used for debuff pacts like Shock Squall
sets.pet_midcast.MagicAcc_BP = {
}
sets.pet_midcast.Debuff_Rage = sets.pet_midcast.MagicAcc_BP
-- Pure summoning magic set, mainly used for buffs like Hastega II.
sets.pet_midcast.SummoningMagic = {
main={ name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}},
sub="Vox Grip",
ammo="Sancus Sachet +1",
head="Baayami Hat",
neck="Caller's Pendant",
body="Baayami Robe",
hands="Glyphic Bracers +1",
ring1="Evoker's Ring",
ring2="Fervor Ring",
back={ name="Conveyance Cape", augments={'Summoning magic skill +2','Blood Pact Dmg.+2','Blood Pact ab. del. II -3',}},
waist="Lucidity Sash",
legs="Baayami Slops",
feet="Baayami Sabots"
}
sets.pet_midcast.Buff = sets.pet_midcast.SummoningMagic
-- I use Apogee gear for healing BPs because the amount healed is affected by avatar max HP.
-- I'm probably stupid. It puts you in yellow HP after using a healing move.
sets.pet_midcast.Buff_Healing = set_combine(sets.pet_midcast.SummoningMagic, {
})
-- This set is used for certain blood pacts when ImpactDebuff mode is ON. (/console gs c ImpactDebuff)
-- These pacts are normally used as nukes, but they're also strong debuffs which are enhanced by smn skill.
sets.pet_midcast.Impact = set_combine(sets.pet_midcast.SummoningMagic, {
})
sets.aftercast = {}
-- Idle set with no avatar out.
sets.aftercast.Idle = {
ammo="Sancus Sachet +1",
head={ name="Apogee Crown +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
body="Shomonjijoe +1",
hands={ name="Apogee Mitts +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
legs={ name="Helios Spats", augments={'Pet: "Mag.Atk.Bns."+27','Pet: Crit.hit rate +2','Blood Pact Dmg.+5',}},
feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
neck="Twilight Torque",
waist="Lucidity Sash",
ear1="Gelos Earring",
ear2={ name="Moonshade Earring", augments={'Mag. Acc.+4','Latent effect: "Refresh"+1',}},
ring1="Varar Ring +1",
ring2="Varar Ring +1",
back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+15 Attack+15','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','Pet: Damage taken -5%',}},
}
-- Idle set used when ForceIlvl is ON. Use this mode to avoid Gaiters dropping ilvl.
sets.aftercast.Idle_Ilvl = set_combine(sets.aftercast.Idle, {
feet="Baayami Sabots"
})
sets.aftercast.DT = sets.DT_Base
-- Many idle sets inherit from this set.
-- Put common items here so you don't have to repeat them over and over.
sets.aftercast.Perp_Base = {
ammo="Sancus Sachet +1",
head="Beckoner's Horn +1",
body="Shomonjijoe +1",
hands={ name="Apogee Mitts +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
legs="Assid. Pants +1",
feet="Apogee Pumps +1",
neck="Caller's Pendant",
waist="Klouskap Sash +1",
ear1="Gelos Earring",
ear2={ name="Moonshade Earring", augments={'Mag. Acc.+4','Latent effect: "Refresh"+1',}},
ring1="Evoker's Ring",
ring2="Varar Ring +1",
back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+15 Attack+15','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','Pet: Damage taken -5%',}},
}
-- Avatar Melee set. Equipped when IdleMode is "DD" and MeleeMode is OFF.
sets.aftercast.Perp_DD = set_combine(sets.aftercast.Perp_Base, {
})
-- Refresh set with avatar out. Equipped when IdleMode is "Refresh".
sets.aftercast.Perp_Refresh = set_combine(sets.aftercast.Perp_Base, {
})
-- Refresh set when MP is under 50%
sets.aftercast.Perp_RefreshSub50 = set_combine(sets.aftercast.Perp_Refresh, {
})
sets.aftercast.Perp_Favor = set_combine(sets.aftercast.Perp_Refresh, {
head="Beckoner's Horn +1",
ring2="Evoker's Ring",
legs="Baayami Slops",
feet="Baayami Sabots"
})
sets.aftercast.Perp_Zendik = set_combine(sets.aftercast.Perp_Favor, {
})
-- TP set. Equipped when IdleMode is "DD" and MeleeMode is ON.
sets.aftercast.Perp_Melee = set_combine(sets.aftercast.Perp_Refresh, {
main={ name="Espiritus", augments={'Enmity-6','Pet: "Mag.Atk.Bns."+30','Pet: Damage taken -4%',}},
sub="Vox Grip",
ammo="Sancus Sachet +1",
head="Tali'ah Turban +1",
body="Tali'ah Manteel",
hands="Tali'ah Gages +1",
legs="Tali'ah Seraweels",
feet="Tali'ah Crackows +1",
neck="Smn. Collar +2",
waist="Klouskap Sash +1",
left_ear="Mache Earring +1",
right_ear="Mache Earring +1",
left_ring="Ramuh Ring +1",
right_ring="Tali'ah Ring",
back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+15 Attack+15','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: Haste+10','Pet: Damage taken -5%',}},
})
-- Pet:DT build. Equipped when IdleMode is "PetDT".
sets.aftercast.Avatar_DT = {
}
-- Perp down set used when ForceIlvl is ON. If you use Selenian Cap for Pet:DT, you can make another set here without it.
sets.aftercast.Avatar_DT_Ilvl = set_combine(sets.aftercast.Avatar_DT, {
})
-- DT build with avatar out. Equipped when IdleMode is "DT".
sets.aftercast.Perp_DT = set_combine(sets.DT_Base, {
waist="Lucidity Sash"
})
sets.aftercast.Spirit = {
}
-- ===================================================================================================================
-- End of Sets
-- ===================================================================================================================
Buff_BPs_Duration = S{'Shining Ruby','Aerial Armor','Frost Armor','Rolling Thunder','Crimson Howl','Lightning Armor','Ecliptic Growl','Glittering Ruby','Earthen Ward','Hastega','Noctoshield','Ecliptic Howl','Dream Shroud','Earthen Armor','Fleet Wind','Inferno Howl','Heavenward Howl','Hastega II','Soothing Current','Crystal Blessing'}
Buff_BPs_Healing = S{'Healing Ruby','Healing Ruby II','Whispering Wind','Spring Water'}
Debuff_BPs = S{'Mewing Lullaby','Eerie Eye','Lunar Cry','Lunar Roar','Nightmare','Pavor Nocturnus','Ultimate Terror','Somnolence','Slowga','Tidal Roar','Diamond Storm','Sleepga','Shock Squall'}
Debuff_Rage_BPs = S{'Moonlit Charge','Tail Whip'}
Magic_BPs_NoTP = S{'Holy Mist','Nether Blast','Aerial Blast','Searing Light','Diamond Dust','Earthen Fury','Zantetsuken','Tidal Wave','Judgment Bolt','Inferno','Howling Moon','Ruinous Omen','Night Terror','Thunderspark'}
Magic_BPs_TP = S{'Impact','Conflag Strike','Level ? Holy','Lunar Bay'}
Merit_BPs = S{'Meteor Strike','Geocrush','Grand Fall','Wind Blade','Heavenly Strike','Thunderstorm'}
Physical_BPs_TP = S{'Rock Buster','Mountain Buster','Crescent Fang','Spinning Dive'}
ZodiacElements = S{'Fire','Earth','Water','Wind','Ice','Lightning'}
AvatarList = S{'Shiva','Ramuh','Garuda','Leviathan','Diabolos','Titan','Fenrir','Ifrit','Carbuncle','Fire Spirit','Air Spirit','Ice Spirit','Thunder Spirit','Light Spirit','Dark Spirit','Earth Spirit','Water Spirit','Cait Sith','Alexander','Odin','Atomos'}
--TownIdle = S{"windurst woods","windurst waters","windurst walls","port windurst","bastok markets","bastok mines","port bastok","southern san d'oria","northern san d'oria","port san d'oria","upper jeuno","lower jeuno","port jeuno","ru'lude gardens","norg","kazham","tavnazian safehold","rabao","selbina","mhaura","aht urhgan whitegate","al zahbi","nashmau","western adoulin","eastern adoulin"}
--Salvage = S{"Bhaflau Remnants","Zhayolm Remnants","Arrapago Remnants","Silver Sea Remnants"}
end
function pet_change(pet,gain)
idle()
end
function pretarget(spell,action)
if not buffactive['Muddle'] then
-- Auto Remedy --
if AutoRemedy and (spell.action_type == 'Magic' or spell.type == 'JobAbility') then
if buffactive['Paralysis'] or (buffactive['Silence'] and not AutoEcho) then
cancel_spell()
send_command('input /item "Remedy" <me>')
end
end
-- Auto Echo Drop --
if AutoEcho and spell.action_type == 'Magic' and buffactive['Silence'] then
cancel_spell()
send_command('input /item "Echo Drops" <me>')
end
end
end
function precast(spell)
if (pet.isvalid and pet_midaction()) or spell.type=="Item" then
return
end
-- Spell fast cast
if spell.action_type=="Magic" then
if spell.name=="Stoneskin" then
equip(sets.precast.FC,{waist="Siegel Sash"})
else
equip(sets.precast.FC)
end
end
end
function midcast(spell)
if (pet.isvalid and pet_midaction()) or spell.type=="Item" then
return
end
-- BP Timer gear needs to swap here
if (spell.type=="BloodPactWard" or spell.type=="BloodPactRage") then
if not buffactive["Astral Conduit"] then
equip(sets.midcast.BP)
end
-- If lag compensation mode is on, set up a timer to equip the BP gear.
if LagMode then
send_command('wait 0.5;gs c EquipBP '..spell.name)
end
-- Spell Midcast & Potency Stuff
elseif sets.midcast[spell.english] then
equip(sets.midcast[spell.english])
elseif spell.name=="Elemental Siphon" then
if pet.element==world.day_element and ZodiacElements:contains(pet.element) then
if pet.element==world.weather_element then
equip(sets.midcast.SiphonWeatherZodiac)
else
equip(sets.midcast.SiphonZodiac)
end
else
if pet.element==world.weather_element then
equip(sets.midcast.SiphonWeather)
else
equip(sets.midcast.Siphon)
end
end
elseif spell.type=="SummonerPact" then
equip(sets.midcast.Summon)
elseif spell.type=="WhiteMagic" then
if string.find(spell.name,"Cure") or string.find(spell.name,"Curaga") then
equip(sets.midcast.Cure)
elseif string.find(spell.name,"Protect") or string.find(spell.name,"Shell") then
equip(sets.midcast.Enhancing,{ring2="Sheltered Ring"})
elseif spell.skill=="Enfeebling Magic" then
equip(sets.midcast.Enfeeble)
elseif spell.skill=="Enhancing Magic" then
equip(sets.midcast.Enhancing)
else
idle()
end
elseif spell.type=="BlackMagic" then
if spell.skill=="Elemental Magic" then
equip(sets.midcast.Nuke)
end
elseif spell.action_type=="Magic" then
equip(sets.midcast.EnmityRecast)
else
idle()
end
-- Auto-cancel existing buffs
if spell.name=="Stoneskin" and buffactive["Stoneskin"] then
windower.send_command('cancel 37;')
elseif spell.name=="Sneak" and buffactive["Sneak"] and spell.target.type=="SELF" then
windower.send_command('cancel 71;')
elseif spell.name=="Utsusemi: Ichi" and buffactive["Copy Image"] then
windower.send_command('wait 1;cancel 66;')
end
end
function aftercast(spell)
if pet_midaction() or spell.type=="Item" then
return
end
if not string.find(spell.type,"BloodPact") then
idle()
end
end
function status_change(new,old)
if new=="Idle" then
idle()
end
end
function buff_change(name,gain)
if name=="Quickening" then
idle()
end
end
function pet_midcast(spell)
if not LagMode then
equipBPGear(spell.name)
end
end
function pet_aftercast(spell)
idle()
end
function equipBPGear(spell)
if spell=="Perfect Defense" then
equip(sets.pet_midcast.SummoningMagic)
elseif Debuff_BPs:contains(spell) then
equip(sets.pet_midcast.MagicAcc_BP)
elseif Buff_BPs_Healing:contains(spell) then
equip(sets.pet_midcast.Buff_Healing)
elseif Buff_BPs_Duration:contains(spell) then
equip(sets.pet_midcast.Buff)
elseif spell=="Flaming Crush" then
if AccMode then
equip(sets.pet_midcast.FlamingCrush_Acc)
else
equip(sets.pet_midcast.FlamingCrush)
end
elseif ImpactDebuff and (spell=="Impact" or spell=="Conflag Strike") then
equip(sets.pet_midcast.Impact)
elseif Magic_BPs_TP:contains(spell) or string.find(spell," II") or string.find(spell," IV") then
if AccMode then
equip(sets.pet_midcast.Magic_BP_TP_Acc)
else
equip(sets.pet_midcast.Magic_BP_TP)
end
elseif Magic_BPs_NoTP:contains(spell) then
if AccMode then
equip(sets.pet_midcast.Magic_BP_NoTP_Acc)
else
equip(sets.pet_midcast.Magic_BP_NoTP)
end
elseif Merit_BPs:contains(spell) then
if AccMode then
equip(sets.pet_midcast.Magic_BP_TP_Acc)
elseif spell=="Meteor Strike" and MeteorStrike>4 then
equip(sets.pet_midcast.Magic_BP_NoTP)
elseif spell=="Geocrush" and Geocrush>4 then
equip(sets.pet_midcast.Magic_BP_NoTP)
elseif spell=="Grand Fall" and GrandFall>4 then
equip(sets.pet_midcast.Magic_BP_NoTP)
elseif spell=="Wind Blade" and WindBlade>4 then
equip(sets.pet_midcast.Magic_BP_NoTP)
elseif spell=="Heavenly Strike" and HeavenlyStrike>4 then
equip(sets.pet_midcast.Magic_BP_NoTP)
elseif spell=="Thunderstorm" and Thunderstorm>4 then
equip(sets.pet_midcast.Magic_BP_NoTP)
else
equip(sets.pet_midcast.Magic_BP_TP)
end
elseif Debuff_Rage_BPs:contains(spell) then
equip(sets.pet_midcast.Debuff_Rage)
else
if AccMode then
equip(sets.pet_midcast.Physical_BP_Acc)
elseif Physical_BPs_TP:contains(spell) then
equip(sets.pet_midcast.Physical_BP_TP)
elseif buffactive["Aftermath: Lv.3"] then
equip(sets.pet_midcast.Physical_BP_AM3)
else
equip(sets.pet_midcast.Physical_BP)
end
end
end
-- This command is called whenever you input "gs c <command>"
function self_command(command)
IdleModeCommands = {'DD','Refresh','DT','Favor','PetDT','Zendik'}
is_valid = false
for _, v in ipairs(IdleModeCommands) do
if command:lower()==v:lower() then
IdleMode = v
send_command('console_echo "Idle Mode: ['..IdleMode..']"')
idle()
return
end
end
if string.sub(command,1,7)=="EquipBP" then
equipBPGear(string.sub(command,9,string.len(command)))
return
elseif command:lower()=="accmode" then
AccMode = AccMode==false
is_valid = true
send_command('console_echo "AccMode: '..tostring(AccMode)..'"')
elseif command:lower()=="impactmode" then
ImpactDebuff = ImpactDebuff==false
is_valid = true
send_command('console_echo "Impact Debuff: '..tostring(ImpactDebuff)..'"')
elseif command:lower()=="forceilvl" then
ForceIlvl = ForceIlvl==false
is_valid = true
send_command('console_echo "Force iLVL: '..tostring(ForceIlvl)..'"')
elseif command:lower()=="lagmode" then
LagMode = LagMode==false
is_valid = true
send_command('console_echo "Lag Compensation Mode: '..tostring(LagMode)..'"')
elseif command:lower()=="meleemode" then
if MeleeMode then
MeleeMode = false
enable("main","sub")
send_command('console_echo "Melee Mode: false"')
else
MeleeMode = true
equip({main="Nirvana",sub="Elan Strap +1"})
disable("main","sub")
send_command('console_echo "Melee Mode: true"')
end
is_valid = true
elseif command=="ToggleIdle" then
is_valid = true
if IdleMode=="Refresh" then
IdleMode = "DT"
elseif IdleMode=="DT" then
IdleMode = "PetDT"
elseif IdleMode=="PetDT" then
IdleMode = "DD"
else
IdleMode = "Refresh"
end
send_command('console_echo "Idle Mode: ['..IdleMode..']"')
elseif command:lower()=="lowhp" then
-- Use for "Cure 500 HP" objectives in Omen
equip({head="Apogee Crown +1",body={ name="Apo. Dalmatica +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},legs="Apogee Slacks +1",feet="Apogee Pumps +1",back="Campestres's Cape"})
return
elseif string.sub(command:lower(),1,12)=="meteorstrike" then
MeteorStrike = string.sub(command,13,13)
send_command('console_echo "Meteor Strike: '..MeteorStrike..'/5"')
is_valid = true
elseif string.sub(command:lower(),1,8)=="geocrush" then
Geocrush = string.sub(command,9,9)
send_command('console_echo "Geocrush: '..Geocrush..'/5"')
is_valid = true
elseif string.sub(command:lower(),1,9)=="grandfall" then
GrandFall = string.sub(command,10,10)
send_command('console_echo "Grand Fall: '..GrandFall..'/5"')
is_valid = true
elseif string.sub(command:lower(),1,9)=="windblade" then
WindBlade = +string.sub(command,10,10)
send_command('console_echo "Wind Blade: '..WindBlade..'/5"')
is_valid = true
elseif string.sub(command:lower(),1,14)=="heavenlystrike" then
HeavenlyStrike = string.sub(command,15,15)
send_command('console_echo "Heavenly Strike: '..HeavenlyStrike..'/5"')
is_valid = true
elseif string.sub(command:lower(),1,12)=="thunderstorm" then
Thunderstorm = string.sub(command,13,13)
send_command('console_echo "Thunderstorm: '..Thunderstorm..'/5"')
is_valid = true
elseif command=="TestMode" then
Test = Test + 1
if Test==3 then
Test = 0
end
is_valid = true
send_command('console_echo "Test Mode: '..tostring(Test)..'"')
end
if not is_valid then
send_command('console_echo "gs c {Refresh|DT|DD|PetDT|Favor} {AccMode} {ImpactMode} {MeleeMode}"')
end
idle()
end
function idle()
--if TownIdle:contains(world.area:lower()) then
-- return
--end
if pet.isvalid then
if IdleMode=='DT' then
equip(sets.aftercast.Perp_DT)
elseif string.find(pet.name,'Spirit') then
equip(sets.aftercast.Spirit)
elseif IdleMode=='PetDT' then
if ForceIlvl then
equip(sets.aftercast.Avatar_DT_Ilvl)
else
equip(sets.aftercast.Avatar_DT)
end
elseif IdleMode=='Refresh' then
if player.mpp < 50 then
equip(sets.aftercast.Perp_RefreshSub50)
else
equip(sets.aftercast.Perp_Refresh)
end
elseif IdleMode=='Favor' then
equip(sets.aftercast.Perp_Favor)
elseif IdleMode=='Zendik' then
equip(sets.aftercast.Perp_Zendik)
elseif MeleeMode then
equip(sets.aftercast.Perp_Melee)
elseif IdleMode=='DD' then
equip(sets.aftercast.Perp_DD)
end
-- Gaiters if Fleet Wind is up
if buffactive['Quickening'] and IdleMode~='DT' and not ForceIlvl then
equip({feet="Herald's Gaiters"})
end
else
if IdleMode=='DT' then
equip(sets.aftercast.DT)
elseif MeleeMode and IdleMode=='DD' then
equip(sets.aftercast.Perp_Melee)
elseif ForceIlvl then
equip(sets.aftercast.Idle_Ilvl)
else
equip(sets.aftercast.Idle)
end
end
-- Balrahn's Ring
--if Salvage:contains(world.area) then
-- equip({ring2="Balrahn's Ring"})
--end
-- Maquette Ring
--if world.area=='Maquette Abdhaljs-Legion' and not IdleMode=='DT' then
-- equip({ring2="Maquette Ring"})
--end
end