-------------------------------------------------------------------------------------------------------------------
-- (Original: Motenten / Modified: Arislan / Modified: Rumorian (Spell Degradation, Sleep Timers))
-------------------------------------------------------------------------------------------------------------------
--[[ Custom Features:
Capacity Pts. Mode Capacity Points Mode Toggle [WinKey-C]
Auto. Lockstyle Automatically locks desired equipset on file load
--]]
-------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
AutoRemedy = 'ON' -- Set to ON if you want to auto use remedies if silenced or Paralyzed, otherwise set to OFF --
-- Load and initialize the include file.
include('Mote-Include.lua')
send_command('lua l distanceplus')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.CP = M(false, "Capacity Points Mode")
state.Buff.Saboteur = buffactive.saboteur or false
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')
state.CastingMode:options('Normal', 'Seidr', 'Resistant')
state.IdleMode:options('Normal', 'DT')
state.WeaponLock = M(false, 'Weapon Lock')
state.MagicBurst = M(false, 'Magic Burst')
select_default_macro_book()
set_lockstyle()
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
end
function file_unload(file_name)
send_command('lua u distanceplus')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
------------------------------------------------------------------------------------------------
---------------------------------------- Precast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA['Chainspell'] = {}
-- Fast cast sets for spells
-- 80% Fast Cast (including trait) for all spells, plus 5% quick cast
-- RDM job trait = 30%
sets.precast.FC = {
ammo="Sapience Orb",
head="Atro. Chapeau +2",
body={ name="Vitiation Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands={ name="Merlinic Dastanas", augments={'Pet: INT+10','VIT+4','"Refresh"+1','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},
legs="Aya. Cosciales +1",
feet={ name="Merlinic Crackows", augments={'Pet: STR+9','Pet: DEX+1','"Fast Cast"+5','Mag. Acc.+11 "Mag.Atk.Bns."+11',}},
neck="Baetyl Pendant",
waist="Embla Sash",
left_ear="Malignance Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Kishar Ring",
back="Repulse Mantle",
}
sets.precast.FC.Impact = {
ammo="Sapience Orb",
body="Twilight Cloak",
hands={ name="Merlinic Dastanas", augments={'Pet: INT+10','VIT+4','"Refresh"+1','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},
legs="Aya. Cosciales +1",
feet={ name="Merlinic Crackows", augments={'Pet: STR+9','Pet: DEX+1','"Fast Cast"+5','Mag. Acc.+11 "Mag.Atk.Bns."+11',}},
neck="Baetyl Pendant",
waist="Embla Sash",
left_ear="Malignance Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Kishar Ring",
back="Repulse Mantle",
}
sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
sets.precast.FC.Stoneskin = set_combine(sets.precast.FC['Enhancing Magic'], {legs="Siegel Sash"})
sets.precast.FC.Cure = set_combine(sets.precast.FC, {
ear1="Mendi. Earring", --5
})
sets.precast.FC.Curaga = sets.precast.FC.Cure
sets.precast.FC['Healing Magic'] = sets.precast.FC.Cure
sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {})
sets.precast.Storm = set_combine(sets.precast.FC, {}) -- stop quick cast
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
})
------------------------------------------------------------------------------------------------
------------------------------------- Weapon Skill Sets ----------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.WS = {
ammo="Amar Cluster",
head="Jhakri Coronal +2",
neck="Lissome Necklace",
lear="Steelflash Earring",
rear="Bladeborn Earring",
body="Jhakri Robe +2",
hands="Atrophy Gloves +3",
lring="Shukuyu Ring",
rring="Karieyh Ring +1",
back={ name="Sucellos's Cape", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},
waist="Dynamic Belt +1",
legs="Jhakri Slops +2",
feet="Jhakri Pigaches +2"
}
-- STR set
sets.precast.WS['Chant du Cygne'] = set_combine(sets.precast.WS, {
ammo="Yetshila",
head="Jhakri Coronal +2",
neck="Fotia Gorget",
lear="Sherida Earring",
rear="Mache Earring",
body="Jhakri Robe +2",
hands="Atrophy Gloves +3",
rring="Ilabrat Ring",
lring="Begrudging Ring",
back={ name="Sucellos's Cape", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},
waist="Fotia Belt",
feet="Jhakri Pigaches +2",
legs="Carmine Cuisses +1"})
sets.precast.WS['Savage Blade'] = {
ammo="Ginsen",
head={ name="Viti. Chapeau +3", augments={'Enfeebling Magic duration','Magic Accuracy',}},
body="Jhakri Robe +2",
hands="Atrophy Gloves +3",
legs="Jhakri Slops +2",
feet="Jhakri Pigaches +2",
neck="Caro Necklace",
waist="Grunfeld Rope",
left_ear="Ishvara Earring",
right_ear="Telos Earring",
left_ring="Rufescent Ring",
right_ring="Petrov Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
--Requiescat: Modifier MND, use elemental gorgets (fotia, shadow, soil)
sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {
})
--Sanguine Blade: Modifier 50% MND, 30% STR
sets.precast.WS['Sanguine Blade'] = {
}
------------------------------------------------------------------------------------------------
---------------------------------------- Midcast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.midcast.FastRecast = sets.precast.FC
sets.midcast.SpellInterrupt = {
ammo="Impatiens", --10
body="Psycloth Vest", --15
hands="Amalric Gages +1", --10
legs="Carmine Cuisses +1", --20
ring1="Evanescence Ring", --5
waist="Rumination Sash", --10
neck="Baetyl Pendant", --FC
lear="Loquacious Earring",
feet={ name="Merlinic Crackows", augments={'INT+8','"Fast Cast"+2','"Refresh"+2','Mag. Acc.+2 "Mag.Atk.Bns."+2',}}, --FC
ring2="Kishar Ring" --FC
}
--Total 70
sets.midcast['Healing Magic'] = {
main="Daybreak",
sub="Sors Shield",
ammo="Homiliary",
head={ name="Vanya Hood", augments={'Healing magic skill +20','"Cure" spellcasting time -7%','Magic dmg. taken -3',}},
body={ name="Viti. Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands="Shrieker's Cuffs",
legs="Atrophy Tights +2",
feet={ name="Vanya Clogs", augments={'Healing magic skill +20','"Cure" spellcasting time -7%','Magic dmg. taken -3',}},
neck="Colossus's Torque",
waist="Austerity Belt +1",
left_ear="Enervating Earring",
right_ear="Domes. Earring",
left_ring="Mephitas's Ring +1",
right_ring="Lebeche Ring",
back="Solemnity Cape",
}
-- sets.midcast.CureWeather = set_combine(sets.midcast.Cure, {
-- })
sets.midcast.CureSelf = set_combine(sets.midcast['Healing Magic'], {
waist="Gishdubar Sash", -- 10% self
neck="Phalaina Locket" --4% self
})
sets.midcast.Curaga = sets.midcast['Healing Magic']
sets.midcast.StatusRemoval = {
head="Carmine Mask +1", -- 12%
neck="Baetyl Pendant", -- 4%
body="Eirene's Manteel", -- 10%
hands="Leyline Gloves", -- 7%
waist="Witful Belt", -- 3%
legs="Psycloth Lappas", -- 7%
feet="Merlinic Crackows", -- 5%
lring="Prolix Ring" -- 2%
}
-- Total FC: 50%
sets.midcast.Cursna = set_combine(sets.midcast.StatusRemoval, {
feet="Vanya Clogs", --Cursna +5
waist="Gishdubar Sash", --Cursna +10 self only
lring="Ephedra Ring", --Cursna +10
rring="Saida Ring" --Cursna +15 self only
})
-- Total FC: 40%
sets.midcast['Enhancing Magic'] = {
main="Pukulatmuj",
sub="Ammurapi Shield",
ammo="Homiliary",
head="Lethargy Chappel +1",
body={ name="Vitiation Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands="Atrophy Gloves +3",
legs="Leth. Fuseau +1",
feet="Leth. Houseaux +1",
neck="Dls. Torque +2",
waist="Embla Sash",
left_ear="Andoaa Earring",
right_ear="Mimir Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
sets.midcast.EnhancingDuration = {
main="Pukulatmuj",
sub="Ammurapi Shield",
ammo="Homiliary",
head="Lethargy Chappel +1",
body={ name="Vitiation Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands="Atrophy Gloves +3",
legs="Leth. Fuseau +1",
feet="Leth. Houseaux +1",
neck="Dls. Torque +2",
waist="Embla Sash",
left_ear="Andoaa Earring",
right_ear="Mimir Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
--THIS IS FOR BUFFING OTHER PEOPLE WITH COMPOSURE UP--
sets.buff.ComposureOther = {
main="Pukulatmuj",
sub="Ammurapi Shield",
ammo="Homiliary",
head="Lethargy Chappel +1",
body={ name="Vitiation Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands="Atrophy Gloves +3",
legs="Leth. Fuseau +1",
feet="Leth. Houseaux +1",
neck="Dls. Torque +2",
waist="Embla Sash",
left_ear="Andoaa Earring",
right_ear="Mimir Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
sets.buff.Saboteur = {hands="Lethargy Gantherots +1"}
sets.midcast['Phalanx'] = {
main="Pukulatmuj",
sub="Ammurapi Shield",
ammo="Homiliary",
head="Befouled Crown",
body={ name="Viti. Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands={ name="Viti. Gloves +2", augments={'Enhancing Magic duration',}},
legs="Atrophy Tights +2",
feet={ name="Merlinic Crackows", augments={'Pet: "Mag.Atk.Bns."+14','STR+8','Phalanx +3','Mag. Acc.+5 "Mag.Atk.Bns."+5',}},
neck={ name="Dls. Torque +2", augments={'Path: A',}},
waist="Embla Sash",
left_ear="Andoaa Earring",
right_ear="Mimir Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
--max skill--
sets.midcast['Temper'] = {
main="Pukulatmuj",
sub="Ammurapi Shield",
ammo="Homiliary",
head="Befouled Crown",
body={ name="Viti. Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands={ name="Viti. Gloves +2", augments={'Enhancing Magic duration',}},
legs="Atrophy Tights +2",
feet="Leth. Houseaux +1",
neck="Colossus's Torque",
waist="Embla Sash",
left_ear="Andoaa Earring",
right_ear="Mimir Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
sets.midcast['Temper II'] = {
main="Pukulatmuj",
sub="Ammurapi Shield",
ammo="Homiliary",
head="Befouled Crown",
body={ name="Viti. Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands={ name="Viti. Gloves +2", augments={'Enhancing Magic duration',}},
legs="Atrophy Tights +2",
feet="Leth. Houseaux +1",
neck="Colossus's Torque",
waist="Embla Sash",
left_ear="Andoaa Earring",
right_ear="Mimir Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
sets.midcast['Enfire'] = {
main="Pukulatmuj",
sub="Ammurapi Shield",
ammo="Homiliary",
head="Befouled Crown",
body={ name="Viti. Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands={ name="Viti. Gloves +2", augments={'Enhancing Magic duration',}},
legs="Atrophy Tights +2",
feet="Leth. Houseaux +1",
neck="Colossus's Torque",
waist="Embla Sash",
left_ear="Andoaa Earring",
right_ear="Mimir Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
sets.midcast['Enfire II'] = {
main="Pukulatmuj",
sub="Ammurapi Shield",
ammo="Homiliary",
head="Befouled Crown",
body={ name="Viti. Tabard +3", augments={'Enhances "Chainspell" effect',}},
hands={ name="Viti. Gloves +2", augments={'Enhancing Magic duration',}},
legs="Atrophy Tights +2",
feet="Leth. Houseaux +1",
neck="Colossus's Torque",
waist="Embla Sash",
left_ear="Andoaa Earring",
right_ear="Mimir Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
sets.midcast.Regen = set_combine(sets.midcast.EnhancingDuration, {
main="Bolelabunga",
legs={ name="Telchine Braconi", augments={'Attack+5','"Fast Cast"+3','"Regen" potency+1',}},
})
sets.midcast.Refresh = set_combine(sets.midcast.EnhancingDuration, {
waist="Gishdubar Sash", --Duration +20
body="Atrophy Tabard +3",
legs="Lethargy fuseau +1",
})
sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {
waist="Siegel Sash",
neck="Nodens Gorget",
legs="Haven Hose"})
-- sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {
-- })
sets.midcast.Storm = sets.midcast.EnhancingDuration
sets.midcast.Protect = set_combine(sets.midcast.EnhancingDuration, {
})
sets.midcast.Protectra = sets.midcast.Protect
sets.midcast.Shell = sets.midcast.Protect
sets.midcast.Shellra = sets.midcast.Shell
-- Custom spell classes
sets.midcast.MndEnfeebles = {
main="Daybreak",
sub="Ammurapi Shield",
range="Ullr",
head={ name="Viti. Chapeau +3", augments={'Enfeebling Magic duration','Magic Accuracy',}},
body="Atrophy Tabard +3",
hands="Leth. Gantherots +1",
legs={ name="Chironic Hose", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','"Conserve MP"+4','Mag. Acc.+10',}},
feet={ name="Vitiation Boots +3", augments={'Immunobreak Chance',}},
neck={ name="Dls. Torque +2", augments={'Path: A',}},
waist="Luminary Sash",
left_ear="Regal Earring",
right_ear="Snotra Earring",
left_ring="Kishar Ring",
right_ring="Metamor. Ring +1",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
sets.midcast['Enfeebling Magic'] = {
main="Daybreak",
sub="Ammurapi Shield",
range="Ullr",
head={ name="Viti. Chapeau +3", augments={'Enfeebling Magic duration','Magic Accuracy',}},
body="Atrophy Tabard +3",
hands="Leth. Gantherots +1",
legs={ name="Chironic Hose", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','"Conserve MP"+4','Mag. Acc.+10',}},
feet={ name="Vitiation Boots +3", augments={'Immunobreak Chance',}},
neck={ name="Dls. Torque +2", augments={'Path: A',}},
waist="Luminary Sash",
left_ear="Regal Earring",
right_ear="Snotra Earring",
left_ring="Kishar Ring",
right_ring="Metamor. Ring +1",
back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Enmity-10','Damage taken-5%',}},
}
sets.midcast.MndEnfeeblesAcc = set_combine(sets.midcast.MndEnfeebles, {
})
sets.midcast.IntEnfeebles = set_combine(sets.midcast.MndEnfeebles, {
})
sets.midcast.IntEnfeeblesAcc = set_combine(sets.midcast.IntEnfeebles, {
})
sets.midcast.ElementalEnfeeble = sets.midcast['Enfeebling Magic']
sets.midcast['Dia III'] = set_combine(sets.midcast['Enfeebling Magic'], {})
sets.midcast['Slow II'] = set_combine(sets.midcast['Enfeebling Magic'], {})
sets.midcast['Dark Magic'] = {
main="Rubicundity",
range="Ullr",
head="Carmine Mask +1",
neck="Erra Pendant",
lear="Gwati Earring",
rear="Lempo Earring",
body="Psycloth Vest",
hands="Leyline Gloves",
lring="Evanescence Ring",
rring="Stikini Ring +1",
back={ name="Sucellos's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Mag.Atk.Bns."+10',}},
waist="Tengu-No-Obi",
legs={ name="Merlinic Shalwar", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','Magic burst mdg.+10%','CHR+8','Mag. Acc.+7','"Mag.Atk.Bns."+1',}},
feet="Jhakri Pigaches +2",
sub="Culminus"
}
sets.midcast.Drain = set_combine(sets.midcast['Dark Magic'], {
head="Pixie Hairpin +1",
feet={ name="Merlinic Crackows", augments={'Mag. Acc.+21 "Mag.Atk.Bns."+21','Magic burst dmg.+9%','INT+14',}},
waist="Fucho-No-Obi",
rring="Archon Ring"
})
sets.midcast.Aspir = sets.midcast.Drain
sets.midcast.Stun = set_combine(sets.midcast['Dark Magic'], {
})
sets.midcast['Elemental Magic'] = {
main="Daybreak",
sub="Ammurapi Shield",
ammo="Pemphredo Tathlum",
head="Jhakri Coronal +2",
body="Jhakri Robe +2",
hands="Jhakri Cuffs +2",
legs="Jhakri Slops +2",
feet="Jhakri Pigaches +2",
neck="Baetyl Pendant",
waist="Eschan Stone",
left_ear="Malignance Earring",
right_ear="Friomisi Earring",
left_ring="Jhakri Ring",
right_ring="Metamor. Ring +1",
back="Izdubar Mantle",
}
sets.midcast.Impact = {
main="Daybreak",
sub="Ammurapi Shield",
ammo="Pemphredo Tathlum",
body="Twilight Cloak",
hands="Jhakri Cuffs +2",
legs="Jhakri Slops +2",
feet="Jhakri Pigaches +2",
neck="Baetyl Pendant",
waist="Eschan Stone",
left_ear="Malignance Earring",
right_ear="Friomisi Earring",
left_ring="Jhakri Ring",
right_ring="Metamor. Ring +1",
back="Izdubar Mantle",
}
sets.midcast['Elemental Magic'].Seidr = set_combine(sets.midcast['Elemental Magic'], {
body="Seidr Cotehardie"
})
sets.midcast.MndEnfeebles.Resistant = set_combine(sets.midcast['Enfeebling Magic'], {
body="Jhakri Robe +2"
})
sets.midcast.IntEnfeebles.Resistant = sets.midcast.MndEnfeebles.Resistant
sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
-- Initializes trusts at iLvl 119
sets.midcast.Trust = sets.precast.FC
sets.midcast.Helix = {
main="Grioavolr",
ammo="Pemphredo Tathlum",
head={ name="Merlinic Hood", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Magic burst mdg.+10%','INT+4','"Mag.Atk.Bns."+10',}},
body="Witching Robe",
hands={ name="Amalric Gages +1", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
legs={ name="Merlinic Shalwar", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','Magic burst mdg.+10%','CHR+8','Mag. Acc.+7','"Mag.Atk.Bns."+1',}},
feet="Jhakri Pigaches +2",
neck="Mizukage-No-Kubikazari",
waist="Tengu-no-Obi",
left_ear="Gwati Earring",
right_ear="Choleric Earring",
back={ name="Sucellos's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Mag.Atk.Bns."+10',}},
left_ring="Mujin Band",
right_ring="Locus Ring",
sub="Enki Strap"}
-- Helix has low dINT modifier and benefits highly from magic damage
sets.magic_burst = {
main="Grioavolr",
ammo="Pemphredo Tathlum",
head={ name="Merlinic Hood", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Magic burst dmg.+10%','INT+4','"Mag.Atk.Bns."+10',}}, --10
ear1="Barkarole Earring",
ear2="Choleric Earring",
body="Ea Houppelande", --8, 8 II
hands="Amalric Gages +1", --5 II
ring1="Mujin Band", --5 II
ring2="Resonance Ring",
waist="Tengu-No-Obi",
legs={ name="Merlinic Shalwar", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','Magic burst mdg.+10%','CHR+8','Mag. Acc.+7','"Mag.Atk.Bns."+1',}}, --10
feet={ name="Merlinic Crackows", augments={'Mag. Acc.+21 "Mag.Atk.Bns."+21','Magic burst mdg.+9%','INT+14',}}, --9
back={ name="Sucellos's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Mag.Atk.Bns."+10',}},
neck="Mizukage-no-Kubikazari",
sub="Enki Strap"} --10
-- 47 +18
------------------------------------------------------------------------------------------------
----------------------------------------- Idle Sets --------------------------------------------
------------------------------------------------------------------------------------------------
sets.idle = {
main="Bolelabunga",
sub="Sacro Bulwark",
ammo="Homiliary",
head={ name="Viti. Chapeau +3", augments={'Enfeebling Magic duration','Magic Accuracy',}},
body="Jhakri Robe +2",
hands={ name="Chironic Gloves", augments={'Enmity+4','Pet: STR+5','"Refresh"+2','Mag. Acc.+11 "Mag.Atk.Bns."+11',}},
legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
feet={ name="Merlinic Crackows", augments={'MND+7','Pet: Mag. Acc.+9','"Refresh"+2','Mag. Acc.+13 "Mag.Atk.Bns."+13',}},
neck="Bathy Choker +1",
waist="Fucho-no-Obi",
left_ear="Infused Earring",
right_ear="Eabani Earring",
left_ring="Gelatinous Ring +1",
right_ring="Defending Ring",
back="Repulse Mantle",
}
sets.idle.DT = {
main="Mafic Cudgel",
sub="Sacro Bulwark",
ammo="Homiliary",
head={ name="Viti. Chapeau +3", augments={'Enfeebling Magic duration','Magic Accuracy',}},
body="Malignance Tabard",
hands="Malignance Gloves",
legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
feet={ name="Merlinic Crackows", augments={'MND+7','Pet: Mag. Acc.+9','"Refresh"+2','Mag. Acc.+13 "Mag.Atk.Bns."+13',}},
neck="Bathy Choker +1",
waist="Fucho-no-Obi",
left_ear="Infused Earring",
right_ear="Eabani Earring",
left_ring="Gelatinous Ring +1",
right_ring="Defending Ring",
back="Repulse Mantle",
}
sets.idle.Weak = sets.idle.DT
sets.resting = set_combine(sets.idle, {
waist="Austerity Belt"
})
------------------------------------------------------------------------------------------------
---------------------------------------- Defense Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.defense.PDT = sets.idle.DT
sets.defense.MDT = sets.idle.DT
sets.Kiting = {legs="Carmine Cuisses +1"}
sets.latent_refresh = {waist="Fucho-no-obi"}
------------------------------------------------------------------------------------------------
---------------------------------------- Engaged Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.engaged = {
main="Naegling",
sub="Genmei Shield",
ammo="Ginsen",
head="Malignance Chapeau",
body="Malignance Tabard",
hands="Malignance Gloves",
legs="Malignance Tights",
feet="Malignance Boots",
neck="Lissome Necklace",
waist="Kentarch Belt +1",
left_ear="Suppanomimi",
right_ear="Eabani Earring",
left_ring="K'ayres Ring",
right_ring="Apate Ring",
back="Repulse Mantle",
}
sets.buff.Doom = {
ring1="Saida Ring",
ring2="Defending Ring",
waist="Gishdubar Sash"}
sets.Obi = {waist="Hachirin-no-Obi"}
sets.CP = {back="Mecisto. Mantle"}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
function pretarget(spell,action)
if spell.action_type == 'Magic' or spell.type == 'JobAbility' and buffactive.silence or buffactive.paralysis then -- Auto Use Echo Drops If You Are Silenced --
cancel_spell()
send_command('input /item "Remedy" <me>')
elseif spell.type == "WeaponSkill" and spell.target.distance > target_distance and player.status == 'Engaged' then -- Cancel WS If You Are Out Of Range --
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
end
--function pretarget(spell,action)
-- if buffactive['Silence'] or buffactive['Paralysis'] then
-- if spell.action_type == 'Magic' or spell.type == 'JobAbility' then
-- cancel_spell()
-- send_command('input /item "Remedy" <me>')
-- end
-- end
-- end
function job_precast(spell, action, spellMap, eventArgs)
if type(windower.ffxi.get_player().autorun) == 'table' and spell.action_type == 'Magic' then
windower.add_to_chat(122,'Currently auto-running - stopping to cast spell')
windower.ffxi.run(false)
windower.ffxi.follow() -- disabling Follow - turning back autorun automatically turns back on follow.
autorun = 1
cast_delay(.4) -- manipulate based on lag.
return
end
if spell.name == 'Impact' then
equip('sets.precast.FC.Impact')
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)
if spell.skill == 'Enfeebling Magic' and state.Buff.Saboteur then
equip(sets.buff.Saboteur)
elseif spell.skill == 'Enhancing Magic' and classes.NoSkillSpells:contains(spell.english) then
equip(sets.midcast.EnhancingDuration)
elseif spell.skill == 'Enhancing Magic' and spell.target.type == 'PLAYER' then
if buffactive.composure then
equip(sets.buff.ComposureOther)
end
elseif spellMap == 'Cure' and spell.target.type == 'SELF' then
equip(sets.midcast.CureSelf)
elseif spell.skill == 'Elemental Magic' then
if state.MagicBurst.value and spell.english ~= 'Death' then
equip(sets.magic_burst)
if spell.english == "Impact" then
equip(sets.midcast.Impact)
end
end
if (spell.element == world.day_element or spell.element == world.weather_element) then
equip(sets.Obi)
end
end
end
function job_aftercast(spell, action, spellMap, eventArgs)
if autorun == 1 then
windower.ffxi.run()
autorun = 0
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
function job_aftercast(spell)
if spell.english == 'Sleep' or spell.english == 'Sleepga' then
send_command('@timers c "'..spell.english..' ['..spell.target.name..']" 60 down spells/00220.png')
elseif spell.english == 'Sleep II' or spell.english == 'Sleepga II' then
send_command('@timers c "'..spell.english..' ['..spell.target.name..']" 90 down spells/00220.png')
elseif spell.english == 'Break' or spell.english == 'Breakga' then
send_command('@wait 20;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
end
end
function job_buff_change(buff,gain)
if buff == "doom" then
if gain then
equip(sets.buff.Doom)
send_command('@input /p Doomed.')
disable('ring1','ring2','waist')
else
enable('ring1','ring2','waist')
handle_equipping_gear(player.status)
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Called for direct player commands.
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'scholar' then
handle_strategems(cmdParams)
eventArgs.handled = true
elseif cmdParams[1]:lower() == 'nuke' then
handle_nuking(cmdParams)
eventArgs.handled = true
end
end
-- Custom spell mapping.
function job_get_spell_map(spell, default_spell_map)
if spell.action_type == 'Magic' then
if default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
if (world.weather_element == 'Light' or world.day_element == 'Light') then
return 'CureWeather'
end
elseif spell.skill == 'Enfeebling Magic' then
if spell.type == 'WhiteMagic' then
return 'MndEnfeebles'
else
return 'IntEnfeebles'
end
end
end
end
-- Modify the default idle set after it was constructed.
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
display_current_caster_state()
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- General handling of strategems in an Arts-agnostic way.
-- Format: gs c scholar <strategem>
function handle_strategems(cmdParams)
-- cmdParams[1] == 'scholar'
-- cmdParams[2] == strategem to use
if not cmdParams[2] then
add_to_chat(123,'Error: No strategem command given.')
return
end
local strategem = cmdParams[2]:lower()
if strategem == 'light' then
if buffactive['light arts'] then
send_command('input /ja "Addendum: White" <me>')
elseif buffactive['addendum: white'] then
add_to_chat(122,'Error: Addendum: White is already active.')
else
send_command('input /ja "Light Arts" <me>')
end
elseif strategem == 'dark' then
if buffactive['dark arts'] then
send_command('input /ja "Addendum: Black" <me>')
elseif buffactive['addendum: black'] then
add_to_chat(122,'Error: Addendum: Black is already active.')
else
send_command('input /ja "Dark Arts" <me>')
end
elseif buffactive['light arts'] or buffactive['addendum: white'] then
if strategem == 'cost' then
send_command('input /ja Penury <me>')
elseif strategem == 'speed' then
send_command('input /ja Celerity <me>')
elseif strategem == 'aoe' then
send_command('input /ja Accession <me>')
elseif strategem == 'addendum' then
send_command('input /ja "Addendum: White" <me>')
else
add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
end
elseif buffactive['dark arts'] or buffactive['addendum: black'] then
if strategem == 'cost' then
send_command('input /ja Parsimony <me>')
elseif strategem == 'speed' then
send_command('input /ja Alacrity <me>')
elseif strategem == 'aoe' then
send_command('input /ja Manifestation <me>')
elseif strategem == 'addendum' then
send_command('input /ja "Addendum: Black" <me>')
else
add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
end
else
add_to_chat(123,'No arts has been activated yet.')
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
if player.sub_job == 'SCH' then
set_macro_page(4, 3)
elseif player.sub_job == 'BLM' then
set_macro_page(6, 3)
elseif player.sub_job == 'WHM' then
set_macro_page(8, 3)
elseif player.sub_job == 'NIN' then
set_macro_page(2, 3)
else
set_macro_page(2, 3)
end
end
function set_lockstyle()
send_command('wait 2; input /lockstyleset 03')
end
--Refine Nuke Spells
function refine_various_spells(spell, action, spellMap, eventArgs)
aspirs = S{'Aspir','Aspir II','Aspir III'}
sleeps = S{'Sleep II','Sleep'}
sleepgas = S{'Sleepga II','Sleepga'}
nukes = S{'Fire', 'Blizzard', 'Aero', 'Stone', 'Thunder', 'Water',
'Fire II', 'Blizzard II', 'Aero II', 'Stone II', 'Thunder II', 'Water II',
'Fire III', 'Blizzard III', 'Aero III', 'Stone III', 'Thunder III', 'Water III',
'Fire IV', 'Blizzard IV', 'Aero IV', 'Stone IV', 'Thunder IV', 'Water IV',
'Fire V', 'Blizzard V', 'Aero V', 'Stone V', 'Thunder V', 'Water V',
'Fire VI', 'Blizzard VI', 'Aero VI', 'Stone VI', 'Thunder VI', 'Water VI',
'Firaga', 'Blizzaga', 'Aeroga', 'Stonega', 'Thundaga', 'Waterga',
'Firaga II', 'Blizzaga II', 'Aeroga II', 'Stonega II', 'Thundaga II', 'Waterga II',
'Firaga III', 'Blizzaga III', 'Aeroga III', 'Stonega III', 'Thundaga III', 'Waterga III',
'Firaja', 'Blizzaja', 'Aeroja', 'Stoneja', 'Thundaja', 'Waterja',
}
cures = S{'Cure IV','Cure III','Cure II',}
if spell.skill == 'Healing Magic' then
if not cures:contains(spell.english) then
return
end
local newSpell = spell.english
local spell_recasts = windower.ffxi.get_spell_recasts()
local cancelling = 'All '..spell.english..' spells are on cooldown. Cancelling spell casting.'
if spell_recasts[spell.recast_id] > 0 then
if cures:contains(spell.english) then
if spell.english == 'Cure' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Cure IV' then
newSpell = 'Cure III'
elseif spell.english == 'Cure III' then
newSpell = 'Cure II'
end
end
end
if newSpell ~= spell.english then
send_command('@input /ma "'..newSpell..'" '..tostring(spell.target.raw))
eventArgs.cancel = true
return
end
elseif spell.skill == 'Dark Magic' then
if not aspirs:contains(spell.english) then
return
end
local newSpell = spell.english
local spell_recasts = windower.ffxi.get_spell_recasts()
local cancelling = 'All '..spell.english..' spells are on cooldown. Cancelling spell casting.'
if spell_recasts[spell.recast_id] > 0 then
if aspirs:contains(spell.english) then
if spell.english == 'Aspir' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Aspir II' then
newSpell = 'Aspir'
elseif spell.english == 'Aspir III' then
newSpell = 'Aspir II'
end
end
end
if newSpell ~= spell.english then
send_command('@input /ma "'..newSpell..'" '..tostring(spell.target.raw))
eventArgs.cancel = true
return
end
elseif spell.skill == 'Elemental Magic' then
if not sleepgas:contains(spell.english) and not sleeps:contains(spell.english) and not nukes:contains(spell.english) then
return
end
local newSpell = spell.english
local spell_recasts = windower.ffxi.get_spell_recasts()
local cancelling = 'All '..spell.english..' spells are on cooldown. Cancelling spell casting.'
if spell_recasts[spell.recast_id] > 0 then
if sleeps:contains(spell.english) then
if spell.english == 'Sleep' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Sleep II' then
newSpell = 'Sleep'
end
elseif sleepgas:contains(spell.english) then
if spell.english == 'Sleepga' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Sleepga II' then
newSpell = 'Sleepga'
end
elseif nukes:contains(spell.english) then
if spell.english == 'Fire' then
eventArgs.cancel = true
return
elseif spell.english == 'Fire VI' then
newSpell = 'Fire V'
elseif spell.english == 'Fire V' then
newSpell = 'Fire IV'
elseif spell.english == 'Fire IV' then
newSpell = 'Fire III'
elseif spell.english == 'Fire III' then
newSpell = 'Fire II'
elseif spell.english == 'Fire II' then
newSpell = 'Fire'
elseif spell.english == 'Firaja' then
newSpell = 'Firaga III'
elseif spell.english == 'Firaga III' then
newSpell = 'Firaga II'
elseif spell.english == 'Firaga II' then
newSpell = 'Firaga'
end
if spell.english == 'Blizzard' then
eventArgs.cancel = true
return
elseif spell.english == 'Blizzard VI' then
newSpell = 'Blizzard V'
elseif spell.english == 'Blizzard V' then
newSpell = 'Blizzard IV'
elseif spell.english == 'Blizzard IV' then
newSpell = 'Blizzard III'
elseif spell.english == 'Blizzard III' then
newSpell = 'Blizzard II'
elseif spell.english == 'Blizzard II' then
newSpell = 'Blizzard'
elseif spell.english == 'Blizzaja' then
newSpell = 'Blizzaga III'
elseif spell.english == 'Blizzaga III' then
newSpell = 'Blizzaga II'
elseif spell.english == 'Blizzaga II' then
newSpell = 'Blizzaga'
end
if spell.english == 'Aero' then
eventArgs.cancel = true
return
elseif spell.english == 'Aero VI' then
newSpell = 'Aero V'
elseif spell.english == 'Aero V' then
newSpell = 'Aero IV'
elseif spell.english == 'Aero IV' then
newSpell = 'Aero III'
elseif spell.english == 'Aero III' then
newSpell = 'Aero II'
elseif spell.english == 'Aero II' then
newSpell = 'Aero'
elseif spell.english == 'Aeroja' then
newSpell = 'Aeroga III'
elseif spell.english == 'Aeroga III' then
newSpell = 'Aeroga II'
elseif spell.english == 'Aeroga II' then
newSpell = 'Aeroga'
end
if spell.english == 'Stone' then
eventArgs.cancel = true
return
elseif spell.english == 'Stone VI' then
newSpell = 'Stone V'
elseif spell.english == 'Stone V' then
newSpell = 'Stone IV'
elseif spell.english == 'Stone IV' then
newSpell = 'Stone III'
elseif spell.english == 'Stone III' then
newSpell = 'Stone II'
elseif spell.english == 'Stone II' then
newSpell = 'Stone'
elseif spell.english == 'Stoneja' then
newSpell = 'Stonega III'
elseif spell.english == 'Stonega III' then
newSpell = 'Stonega II'
elseif spell.english == 'Stonega II' then
newSpell = 'Stonega'
end
if spell.english == 'Thunder' then
eventArgs.cancel = true
return
elseif spell.english == 'Thunder VI' then
newSpell = 'Thunder V'
elseif spell.english == 'Thunder V' then
newSpell = 'Thunder IV'
elseif spell.english == 'Thunder IV' then
newSpell = 'Thunder III'
elseif spell.english == 'Thunder III' then
newSpell = 'Thunder II'
elseif spell.english == 'Thunder II' then
newSpell = 'Thunder'
elseif spell.english == 'Thundaja' then
newSpell = 'Thundaga III'
elseif spell.english == 'Thundaga III' then
newSpell = 'Thundaga II'
elseif spell.english == 'Thundaga II' then
newSpell = 'Thundaga'
end
if spell.english == 'Water' then
eventArgs.cancel = true
return
elseif spell.english == 'Water VI' then
newSpell = 'Water V'
elseif spell.english == 'Water V' then
newSpell = 'Water IV'
elseif spell.english == 'Water IV' then
newSpell = 'Water III'
elseif spell.english == 'Water III' then
newSpell = 'Water II'
elseif spell.english == 'Water II' then
newSpell = 'Water'
elseif spell.english == 'Waterja' then
newSpell = 'Waterga III'
elseif spell.english == 'Waterga III' then
newSpell = 'Waterga II'
elseif spell.english == 'Waterga II' then
newSpell = 'Waterga'
end
end
end
if newSpell ~= spell.english then
send_command('@input /ma "'..newSpell..'" '..tostring(spell.target.raw))
eventArgs.cancel = true
return
end
end
end
function job_precast(spell, action, spellMap, eventArgs)
refine_various_spells(spell, action, spellMap, eventArgs)
end
I am trying to get Impact to cast by just typing /ma impact or /impact. I can get this to work if I adjust my normal FC set but can not get an impact FC(prceast) set to work. anyone can help me here?