Code:
function get_sets()
sets.precast = {}
sets.precast.JA = {}
-- Precast Sets
sets.precast.JA.Nightingale = {feet="Bihu Slippers +1"}
sets.precast.JA.Troubadour = {body="Bihu Justaucorps +3"}
sets.precast.JA['Soul Voice'] = {legs="Bihu Cannions +1"}
--###############
--# 64% Fast Cast
--# Main: 7%
--# Head: 10%
--# Body: 14%
--# Hands: 7%
--# Legs: 6%
--# Neck: 4%
--# Right Ear: 2%
--# Left Ring: 4%
--# Back: 10%
--###############
sets.precast.FC = {
main="Kali",
head="Nahtirah Hat",
body="Inyanga Jubbah",
hands="Gende. Gages",
legs="Kaykaus Tights",
neck="Bathy Collar",
right_ear="Loquacious Earring",
left_ring="Kishar Ring",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
}
--###############
--# +51% Fast Cast
--# -30% Song Spellcasting Time
--# Main: 7%
--# Ear1: 1%
--# Ear2: 2%
--# Body: 14%
--# Hands: 7% +3%
--# Ring2: 4%
--# Back: 10%
--# Legs: 6%
--# Feet: 13%
--# Head: 14%
--###############
sets.precast.FC.Song = {
main="Kali",
sub="Ammurapi Shield",
head="Fili Calot +1",
neck="Bathy Collar",
left_ear="Loquacious Earring",
right_ear="Moonshade Earring",
body="Inyanga Jubbah",
hands="Gende. Gages",
right_ring="Kishar Ring",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
legs="Kaykaus Tights",
waist="Fucho-no-obi",
feet="Telchine Pigaches",
}
--###############
--# 64% Fast Cast
--###############
sets.precast.FC.Normal = {
main="Kali",
head="Nahtirah Hat",
body="Inyanga Jubbah",
hands="Gende. Gages",
legs="Kaykaus Tights",
neck="Bathy Collar",
right_ear="Loquacious Earring",
right_ring="Kishar Ring",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
}
--###############
--# 63% Fast Cast
--#-17% Cure Spellcasting Time
--###############
sets.precast.Cure = {
main="Kali",
sub="Ammurapi Shield",
head="Nahtirah Hat",
neck="Bathy collar",
left_ear="Loquacious Earring",
right_ear="Moonshade Earring",
body="Inyanga Jubbah",
hands="Gende. Gages",
right_ring="Kishar Ring",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
legs="Kaykaus Tights",
feet="Brioso Slippers +2",
}
--###############
--# 64% Fast Cast
--#-08% Enhancing Magic Casting Time
--###############
sets.precast.EnhancingMagic = {
main="Kali",
sub="Ammurapi Shield",
head="Nahtirah Hat",
body="Inyanga Jubbah",
hands="Gende. Gages",
waist="Witful Belt",
legs="Kaykaus Tights",
neck="Bathy Collar",
right_ear="Loquacious Earring",
right_ring="Kishar Ring",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
}
sets.precast.WS = {}
sets.precast.WS['Rudra\'s Storm'] = {
main="Carnwenhan",
sub="Genmei Shield",
range={ name="Linos", augments={'Accuracy+15','"Dbl.Atk."+2','Quadruple Attack +3',}},
head={ name="Lustratio Cap", augments={'Accuracy+15','DEX+5','Crit. hit rate+2%',}},
body="Ashera Harness",
hands={ name="Lustratio Mittens", augments={'Accuracy+15','DEX+5','Crit. hit rate+2%',}},
legs={ name="Lustratio Subligar", augments={'Accuracy+15','DEX+5','Crit. hit rate+2%',}},
feet="Lustratio Leggings",
neck="Caro Necklace",
waist="Grunfeld Rope",
left_ear="Ishvara Earring",
right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
left_ring="Karieyh Ring +1",
right_ring="Petrov Ring",
back={ name="Intarabus's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%',}},
}
-- Midcast Sets
sets.midcast = {}
sets.midcast.Haste = {}
sets.midcast.Debuff = {
main="Kali",
sub="Ammurapi Shield",
range="Eminent Flute",
ammo=empty,
head="Brioso Roundlet +3",
body="Brioso Justau. +1",
hands="Brioso Cuffs +1",
legs="Brioso Cannions +1",
feet="Brioso Slippers +2",
neck="Moonbow Whistle",
waist="Luminary Sash",
left_ear="Moonshade Earring",
right_ear="Loquacious Earring",
left_ring="Stikini Ring",
right_ring="Stikini Ring",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
}
sets.midcast.Buff = {
main="Kali",
sub="Ammurapi Shield",
ammo=empty,
head="Fili Calot +1",
body="Fili Hongreline +1",
hands="Fili Manchettes +1",
legs="Inyanga Shalwar +2",
feet="Brioso Slippers +2",
neck="Moonbow Whistle",
waist="Luminary Sash",
left_ear="Loquacious Earring",
right_ear="Moonshade Earring",
left_ring="Defending Ring",
right_ring="Inyanga Ring",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
}
sets.midcast.DBuff = {range="Terpander",ammo=empty}
sets.midcast.GBuff = {range="Eminent Flute",ammo=empty}
sets.midcast.Duration = {
main="Kali",
body="Fili Hongreline +1",
neck="Moonbow Whistle",
legs="Inyanga Shalwar +2",
feet="Brioso Slippers +2"
}
sets.midcast.Lullaby = {
main="Kali",
sub="Ammurapi Shield",
range="Marsyas",
ammo=empty,
head="Brioso Roundlet +3",
body="Fili Hongreline +1",
hands="Brioso Cuffs +1",
legs="Inyanga Shalwar +2",
feet="Brioso Slippers +2",
neck="Moonbow Whistle",
waist="Luminary Sash",
left_ear="Loquacious Earring",
right_ear="Moonshade Earring",
left_ring="Stikini Ring",
right_ring="Stikini Ring +1",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
}
--########################
--#Song Specific Equipment
--########################
sets.midcast.Ballad = {
legs="Fili Rhingrave +1"
}
sets.midcast.Scherzo = {
feet="Fili Cothurnes +1"
}
sets.midcast.Paeon = {
head="Brioso Roundlet +3"
}
sets.midcast.Minuet = {
body="Fili Hongreline +1"
}
sets.midcast.Honor = {
range="Marsyas"
}
sets.midcast.Madrigal = {
back="Intarabus's Cape"
}
sets.midcast.Prelude = {
back="Intarabus's Cape"
}
sets.midcast.March = {
hands="Fili Manchettes +1"
}
--sets.midcast.Sirvente = {
--head="Bihu Roundlet +1"
--}
--sets.midcast.Dirge = {
--hands="Bihu Cuffs +1"
--}
sets.midcast.Carol = {
hands="Mousai Gages +1"
}
sets.midcast.Etude = {
head="Mousai Turban"
}
sets.midcast.Threnody = {
body="Mou. Manteel +1"
}
sets.midcast.Minne = {
legs="Mousai Seraweels"
}
sets.midcast.Mambo = {
feet="Mousai Crackows"
}
sets.midcast.Base = sets.midcast.Haste
sets.midcast.Cure = {
main="Chatoyant Staff",
sub="Vivid Strap",
ammo="Oreiad's Tathlum",
head={ name="Vanya Hood", augments={'Healing magic skill +20','"Cure" spellcasting time -7%','Magic dmg. taken -3',}},
body={ name="Kaykaus Bliaut", augments={'MP+60','"Cure" spellcasting time -5%','Enmity-5',}},
hands="Inyan. Dastanas +2",
legs="Kaykaus Tights",
feet={ name="Vanya Clogs", augments={'Healing magic skill +20','"Cure" spellcasting time -7%','Magic dmg. taken -3',}},
neck="Incanter's Torque",
waist="Bishop's Sash",
left_ear="Mendi. Earring",
right_ear="Beatific Earring",
left_ring="Haoma's Ring",
right_ring="Sirona's Ring",
back="Tempered Cape +1",
}
sets.midcast.Stoneskin = {
main="Odium",
sub="Genmei Shield",
range="Eminent Flute",
ammo=empty,
head="Nahtirah Hat",
body="Gende. Bilaut +1",
hands={ name="Gende. Gages +1", augments={'Phys. dmg. taken -4%', 'Magic dmg. taken -4%', 'Song spellcasting time -3%',}},
legs="Haven Hose",
feet={ name="Bihu Slippers +1", augments={'Enhances "Nightingale" effect',}},
neck="Stone Gorget",
waist="Siegel Sash",
left_ear="Earthcry Earring",
right_ear="Enchntr. Earring +1",
left_ring="Sirona's Ring",
right_ring="Haoma's Ring",
back={ name="Intarabus's Cape", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Damage taken-5%',}},
}
--Aftercast Sets
--###############
--#-30% Damage Taken
--#-22% Physical Damage Taken (51)
--#-16% Magical Damage Taken (45)
--###############
sets.aftercast = {
main="Odium",
sub="Genmei Shield",
range={ name="Linos", augments={'Mag. Evasion+15','Phys. dmg. taken -4%','HP+19',}},
head="Inyanga Tiara +2",
body="Ashera Harness",
hands="Mousai Gages +1",
legs="Brioso Cannions +1",
feet="Fili Cothurnes +1",
neck="Loricate Torque +1",
waist="Flume Belt +1",
left_ear="Etiolation Earring",
right_ear="Ethereal Earring",
left_ring="Defending Ring",
right_ring="Inyanga Ring",
back={ name="Intarabus's Cape", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Mag. Evasion+10','Enmity-10','Magic dmg. taken-10%',}},
}
sets.aftercast.Regen = {
main="Odium",
sub="Genmei Shield",
range={ name="Linos", augments={'Mag. Evasion+15','Phys. dmg. taken -4%','HP+19',}},
head="Inyanga Tiara +2",
body="Ashera Harness",
hands="Mousai Gages +1",
legs="Brioso Cannions +1",
feet="Fili Cothurnes +1",
neck="Loricate Torque +1",
waist="Flume Belt +1",
left_ear="Etiolation Earring",
right_ear="Ethereal Earring",
left_ring="Defending Ring",
right_ring="Inyanga Ring",
back={ name="Intarabus's Cape", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Mag. Evasion+10','Enmity-10','Magic dmg. taken-10%',}},
}
sets.aftercast.PDT = { }
sets.aftercast.Engaged = {
main="Carnwenhan",
sub="Genmei Shield",
range={ name="Linos", augments={'Accuracy+15','"Dbl.Atk."+2','Quadruple Attack +3',}},
head="Aya. Zucchetto +2",
body="Ashera Harness",
hands="Aya. Manopolas +2",
legs="Aya. Cosciales +2",
feet="Aya. Gambieras +2",
neck="Bard's Charm",
waist="Windbuffet Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Ilabrat Ring",
right_ring="Petrov Ring",
back={ name="Intarabus's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%',}},
}
sets.aftercast._tab = {'Regen','PDT'}
sets.aftercast._index = 1
sets.aftercast.Idle = sets.aftercast[sets.aftercast._tab[sets.aftercast._index]]
DaurdSongs = T{"Army's Paeon II", "Army's Paeon III", "Army's Paeon IV", "Army's Paeon V", "Army's Paeon VI", }
timer_reg = {}
pianissimo_cycle = false
end
function pretarget(spell)
if spell.type == 'BardSong' and spell.target.type and spell.target.type == 'PLAYER' and not buffactive.pianissimo and not spell.target.charmed and not pianissimo_cycle then
cancel_spell()
pianissimo_cycle = true
send_command('input /ja "Pianissimo" <me>;wait 1.5;input /ma "'..spell.name..'" '..spell.target.name..';')
return
end
if spell.name ~= 'Pianissimo' then
pianissimo_cycle = false
end
end
function precast(spell)
if spell.type == 'BardSong' then
equip_song_gear(spell)
equip(sets.precast.FC.Song)
elseif spell.action_type == 'Magic' then
equip(sets.precast.FC.Normal)
if string.find(spell.english,'Cur') and spell.name ~= 'Cursna' then
equip(sets.precast.Cure)
end
if spell.skill == 'Enhancing Magic' then
equip(sets.precast.EnhancingMagic)
end
elseif spell.prefix == '/weaponskill' then
if sets.precast.WS[spell.name] then
equip(sets.precast.WS[spell.name])
end
end
if sets.precast.FC[tostring(spell.element)] then equip(sets.precast.FC[tostring(spell.element)]) end
if sets.precast.JA[spell.english] then equip(sets.precast.JA[spell.english]) end
-- if player.status == 'Engaged' then equip({range=nil}) end
end
function midcast(spell)
if spell.type == 'BardSong' then
equip_song_gear(spell)
elseif string.find(spell.english,'Waltz') and spell.english ~= 'Healing Waltz' then
equip(sets.midcast.Base,sets.midcast.Waltz)
elseif string.find(spell.english,'Cur') then
equip(sets.midcast.Base,sets.midcast.Cure)
elseif spell.english=='Stoneskin' then
equip(sets.midcast.Base,sets.midcast.Stoneskin)
end
end
function aftercast(spell)
if midaction() then return end
--[[ if spell.type and spell.type == 'BardSong' and spell.target and spell.target.type:upper() == 'SELF' then
local t = os.time()
-- Eliminate songs that have already expired
local tempreg = {}
for i,v in pairs(timer_reg) do
if v < t then tempreg[i] = true end
end
for i,v in pairs(tempreg) do
timer_reg[i] = nil
end
local dur = calculate_duration(spell.name)
if timer_reg[spell.name] then
if (timer_reg[spell.name] - t) <= 120 then
send_command('timers delete "'..spell.name..'"')
timer_reg[spell.name] = t + dur
send_command('timers create "'..spell.name..'" '..dur..' down')
end
else
local maxsongs = 2
if player.equipment.range == 'Daurdabla' then
maxsongs = maxsongs+2
end
if buffactive['Clarion Call'] then
maxsongs = maxsongs+1
end
if maxsongs < table.length(timer_reg) then
maxsongs = table.length(timer_reg)
end
if table.length(timer_reg) < maxsongs then
timer_reg[spell.name] = t+dur
send_command('timers create "'..spell.name..'" '..dur..' down')
else
local rep,repsong
for i,v in pairs(timer_reg) do
if t+dur > v then
if not rep or rep > v then
rep = v
repsong = i
end
end
end
if repsong then
timer_reg[repsong] = nil
send_command('timers delete "'..repsong..'"')
timer_reg[spell.name] = t+dur
send_command('timers create "'..spell.name..'" '..dur..' down')
end
end
end
end]]
if player.status == 'Engaged' then
equip(sets.aftercast.Engaged)
else
equip(sets.aftercast.Idle)
end
end
function status_change(new,old)
if new == 'Engaged' then
equip(sets.aftercast.Engaged)
disable('main','sub','ammo')
elseif T{'Idle','Resting'}:contains(new) then
equip(sets.aftercast.Idle)
enable('main','sub','ammo')
end
end
function self_command(cmd)
if cmd == 'unlock' then
enable('main','sub','ammo')
elseif cmd == 'midact' then
midaction(false)
elseif cmd == 'idle' then
sets.aftercast._index = sets.aftercast._index%(#sets.aftercast._tab) + 1
windower.add_to_chat(8,'Aftercast Set: '..sets.aftercast._tab[sets.aftercast._index])
sets.aftercast.Idle = sets.aftercast[sets.aftercast._tab[sets.aftercast._index]]
equip(sets.aftercast.Idle)
end
end
function equip_song_gear(spell)
if DaurdSongs:contains(spell.english) then
equip(sets.midcast.Base,sets.midcast.DBuff)
else
if spell.target.type == 'MONSTER' then
equip(sets.midcast.Base,sets.midcast.Debuff,sets.midcast.GBuff)
if buffactive.troubadour or buffactive['elemental seal'] then
equip(sets.midcast.Duration)
end
if string.find(spell.english,'Lullaby') then equip(sets.midcast.Duration,sets.midcast.Lullaby) end
if string.find(spell.english,'Threnody') then equip(sets.midcast.Threnody) end
else
equip(sets.midcast.Base,sets.midcast.Buff,sets.midcast.GBuff)
if string.find(spell.english,'March') then equip(sets.midcast.March) end
if string.find(spell.english,'Minuet') then equip(sets.midcast.Minuet) end
if string.find(spell.english,'Madrigal') then equip(sets.midcast.Madrigal) end
if string.find(spell.english,'Ballad') then equip(sets.midcast.Ballad) end
if string.find(spell.english,'Scherzo') then equip(sets.midcast.Scherzo) end
if string.find(spell.english,'Prelude') then equip(sets.midcast.Prelude) end
if string.find(spell.english,'Paeon') then equip(sets.midcast.Paeon) end
if string.find(spell.english,'Sirvente') then equip(sets.midcast.Sirvente) end
if string.find(spell.english,'Dirge') then equip(sets.midcast.Dirge) end
if string.find(spell.english,'Carol') then equip(sets.midcast.Carol) end
if string.find(spell.english,'Mambo') then equip(sets.midcast.Mambo) end
if string.find(spell.english,'Minne') then equip(sets.midcast.Minne) end
if string.find(spell.english,'Etude') then equip(sets.midcast.Etude) end
if spell.english=="Honor March" then equip(sets.midcast.Honor) end
end
end
end
function calculate_duration(name)
local mult,ext = 1,0
if player.equipment.range == "Daurdabla" then mult = mult + 0.3 end
if player.equipment.range == "Eminent Flute" then mult = mult + 0.4 end
if player.equipment.range == "Marsyas" then mult = mult + 0.5 end
if player.equipment.neck == "Moonbow Whistle +1" then mult = mult + 0.3 end
if player.equipment.feet == "Brioso Slippers +2" then mult = mult + 0.15 end
if player.equipment.body == "Fili Hongreline +1" then mult = mult + 0.12 end
if player.equipment.legs == "Inyanga Shalwar +2" then mult = mult + 0.17 end
if player.equipment.main == "Carnwenhan" then mult = mult + 0.5 end
if string.find(name,'March') and player.equipment.hands == "Fili Manchettes +1" then mult = mult + 0.1 end
if string.find(name,'Minuet') and player.equipment.body == "Fili Hongreline +1" then mult = mult + 0.1 end
if string.find(name,'Madrigal') and player.equipment.head == "Fili Calot +1" then mult = mult + 0.1 end
if string.find(name,'Madrigal') and player.equipment.back == "Intarabus's Cape" then mult = mult + 0.1 end
if string.find(name,'Ballad') and player.equipment.legs == "Fili Rhingrave +1" then mult = mult + 0.1 end
if string.find(name,'Scherzo') and player.equipment.feet == "Fili Cothurnes +1" then mult = mult + 0.1 end
if string.find(name,'Prelude') and player.equipment.back == "Intarabus's Cape" then mult = mult + 0.1 end
if string.find(name,'Paeon') and player.equipment.head == "Brioso Roundlet +3" then mult = mult + 0.2 end
if buffactive.Troubadour then
mult = mult*2
end
if string.find(name,'Scherzo') and buffactive['Soul Voice'] then
mult = mult*2
elseif string.find(name,'Scherzo') and buffactive.marcato then
mult = mult*1.5
end
if buffactive['Clarion Call'] then
ext = 20
end
return mult*120 + ext
end
function reset_timers()
for i,v in pairs(timer_reg) do
send_command('timers delete "'..i..'"')
end
timer_reg = {}
end
windower.register_event('zone change',reset_timers)
windower.register_event('logout',reset_timers)