I rebuilt my FC set based on what we think we discovered:
ItemSet 348833
Head FC+6
Body FC+7
Back FC+10
RDM sub FC+15
I was able to land this with it:
Both spells were on CD, so no QuickCast triggered. Was this possible before? I seem to remember doing T5 and T3 was the max you were able to MB into your own SC?
Both spells were on CD, so no QuickCast triggered. Was this possible before? I seem to remember doing T5 and T3 was the max you were able to MB into your own SC?
I've been occasionally able to it without quickmagic proccing, it's just that it doesn't happen all of the times and it seems it doesn't depend on me.
If I input the spell command too early it won't start, if I'm too late it won't MB.
It feels like if I try to input it too early, then there's a hidden global cooldown, and game won't accept new attempts to send a spell command for half a second or something.
So for me it basically revolved around this. Those times I manage to get this random timing right it worked, all the other times it didn't =/
Both spells were on CD, so no QuickCast triggered. Was this possible before? I seem to remember doing T5 and T3 was the max you were able to MB into your own SC?
I've been occasionally able to it without quickmagic proccing, it's just that it doesn't happen all of the times and it seems it doesn't depend on me.
If I input the spell command too early it won't start, if I'm too late it won't MB.
It feels like if I try to input it too early, then there's a hidden global cooldown, and game won't accept new attempts to send a spell command for half a second or something.
So for me it basically revolved around this. Those times I manage to get this random timing right it worked, all the other times it didn't =/
Other note I'd say this is great news I have a pile of SCH cards rotting that I'm going to use, I think maxed fatscazt sets are a true gem of this game and can really seperate players. Thanks for posting this
Thinking out loud
so im guessing in precast function you could do like
if dark arts active and Enfeebling, Elemental, Dark magic equipset FC+acad loafers+2
if light art active and Divine, Healing, Enhancing, and Enfeebling magic equipset FC+acad loafers+2
That's a good idea to put into GS.
Right now I'm looking at Acad's Gown and Pants for arts' skill bonus. Well before I decide on pieces to +2, I wanted to ask how to add it in sets depending on Arts so if I'm casting the spells in their respective arts, one piece would correctly equip in midcast
I'd still like some confirmation from another source so I'm sure I'm not trying to see things that are not there.
I can confirm that these definitely break the cap or something. I've never had such a easy time landing a T5 with a T4 during a solo SC. Just tested them on a couple T1 Reisen NMs and have never missed a T5/T4.
I took some screenshots a few months ago with 80 Fast Cast (equipment + Ionis + /RDM) and neither of Mortarboard or Loafers with grimoire effect active and I wasn't able to observe casting time below 15% for tier V. (However, the assumption is that the spell goes off when the mob is claimed...) Screenshots below.
Based on this, I assumed the casting speed floor is 15% based on the assumption that slow-casting spells go off at 75% without any Fast Cast or grimoire effect and 20% of 75% is 15%, which should be achieved with 80 Fast Cast. Then Dark Arts shouldn't contribute more.
Since I can't cap FC with Mortarboard and/or Loafers at the moment I can't check to see how low I can get with those.
elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] and spell.type == 'BlackMagic' then
equip (sets.Precast.FastCast.Arts)
elseif buffactive['Light Arts'] or buffactive['Addendum: White'] and spell.type == 'WhiteMagic' then
equip (sets.Precast.FastCast.Arts)
else
equip(sets.Precast.FastCast)
Seems to work
Also confirming was able to hit T5+T4 same SC for the first time, Great find thanks again!
Question is can anyone get *helix2 and tier5 off!!! new challenge! both 7.5 second base cast time
Can you post your whole precast function for SCH? Mine doesn't have any so I'm curious what your first "if" statement must be and want to ensure I have things configured correctly. Thanks.
Can you post your whole precast function for SCH? Mine doesn't have any so I'm curious what your first "if" statement must be and want to ensure I have things configured correctly. Thanks.
Code
function precast(spell,action)
if spell.type:endswith('Magic') or spell.type == "Ninjutsu" then
if buffactive.silence then -- Cancel Magic or Ninjutsu If You Are Silenced or Out of Range --
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Silenced or Out of Casting Range]')
return
else
if string.find(spell.english,'Cur') and spell.english ~= "Cursna" then
equip(sets.Precast.Cure)
elseif spell.english == "Impact" then
equip(set_combine(sets.Precast.FastCast,{body="Twilight Cloak"}))
elseif string.find(spell.english,'Utsusemi') then
if buffactive['Copy Image (3)'] or buffactive['Copy Image (4)'] then
cancel_spell()
add_to_chat(123, spell.english .. ' Canceled: [3+ Images]')
return
else
equip(sets.Precast.FastCast)
end
elseif sets.Precast[spell.skill] then
equip(sets.Precast[spell.skill])
elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] and spell.type == 'BlackMagic' then
equip (sets.Precast.FastCast.Arts)
elseif buffactive['Light Arts'] or buffactive['Addendum: White'] and spell.type == 'WhiteMagic' then
equip (sets.Precast.FastCast.Arts)
else
equip(sets.Precast.FastCast)
end
end
elseif spell.type == "WeaponSkill" then
if player.status ~= 'Engaged' then -- Cancel WS If You Are Not Engaged. Can Delete It If You Don't Need It --
cancel_spell()
add_to_chat(123,'Unable To Use WeaponSkill: [Disengaged]')
return
else
if sets.WS[spell.english] then
equip(sets.WS[spell.english])
end
end
elseif spell.type == "JobAbility" then
if sets.JA[spell.english] then
equip(sets.JA[spell.english])
end
elseif spell.english == 'Spectral Jig' and buffactive.Sneak then
cast_delay(0.2)
send_command('cancel Sneak')
end
if sets.Precast[spell.element] then
equip(sets.Precast[spell.element])
end
if StunIndex == 1 then
equip(sets.Midcast.Stun)
end
if Main == 'ON' then
equip(sets.MainWeapon)
end
end
Hello, i tried to include the function into my lua, but it seems not working, i don't have 'function precast(spell,action)" but
"function job_precast(spell, action, spellMap, eventArgs)". I don't know if it's an issue.
This is my functions code :
function refine_various_spells(spell, action, spellMap, eventArgs)
aspirs = S{'Aspir','Aspir II'}
sleeps = S{'Sleep','Sleep II'}
Helix = S{"Geohelix","Hydrohelix","Anemohelix","Pyrohelix","Cryohelix","Ionohelix","Luminohelix","Noctohelix",
"Geohelix II","Hydrohelix II","Anemohelix II","Pyrohelix II","Cryohelix II","Ionohelix II","Luminohelix II","Noctohelix II"}
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',
}
if not sleeps:contains(spell.english) and not aspirs:contains(spell.english) and not nukes:contains(spell.english) and not Helix: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'
end
elseif 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 Helix:contains(spell.english) then
if spell.english == 'Pyrohelix' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Pyrohelix II' then
newSpell = 'Pyrohelix'
end
if spell.english == 'Geohelix' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Geohelix II' then
newSpell = 'Geohelix'
end
if spell.english == 'Hydrohelix' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Hydrohelix II' then
newSpell = 'Hydrohelix'
end
if spell.english == 'Anemohelix' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Anemohelix II' then
newSpell = 'Anemohelix'
end
if spell.english == 'Cryohelix' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Cryohelix II' then
newSpell = 'Cryohelix'
end
if spell.english == 'Ionohelix' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Ionohelix II' then
newSpell = 'Ionohelix'
end
if spell.english == 'Luminohelix' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Luminohelix II' then
newSpell = 'Luminohelix'
end
if spell.english == 'Noctohelix' then
add_to_chat(122,cancelling)
eventArgs.cancel = true
return
elseif spell.english == 'Noctohelix II' then
newSpell = 'Noctohelix'
end
elseif nukes:contains(spell.english) then
if spell.english == 'Fire' then
eventArgs.cancel = true
return
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'
end
if spell.english == 'Blizzard' then
eventArgs.cancel = true
return
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'
end
if spell.english == 'Aero' then
eventArgs.cancel = true
return
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'
end
if spell.english == 'Stone' then
eventArgs.cancel = true
return
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'
end
if spell.english == 'Thunder' then
eventArgs.cancel = true
return
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'
end
if spell.english == 'Water' then
eventArgs.cancel = true
return
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'
end
end
end
if newSpell ~= spell.english then
send_command('@input /ma "'..newSpell..'" '..tostring(spell.target.raw))
eventArgs.cancel = true
return
end
end
function job_precast(spell, action, spellMap, eventArgs)
refine_various_spells(spell, action, spellMap, eventArgs)
if spell.english == 'Sneak' and buffactive.sneak then
send_command('@wait 1;cancel 71;')
end
buffWatcher.casting = true
if spell.type:endswith('Magic') or spell.type == "Ninjutsu" then
elseif sets.precast[spell.skill] then
equip(sets.precast[spell.skill])
elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] and spell.type == 'BlackMagic' then
equip (sets.precast.FC.Arts)
elseif buffactive['Light Arts'] or buffactive['Addendum: White'] and spell.type == 'WhiteMagic' then
equip (sets.precast.FC.Arts)
else
equip(sets.precast.FC)
end
end
-- Run after the general midcast() is done.
function job_post_midcast(spell, action, spellMap, eventArgs)
if spellMap == 'Cure' and spell.target.type == 'SELF' then
equip(sets.self_healing)
end
if spell.action_type == 'Magic' then
apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
end
if spell.skill == 'Elemental Magic' then
if (spell.element == world.day_element or spell.element == world.weather_element) and not string.find(spell.english,'helix') then
equip({waist="Hachirin-No-Obi"})
add_to_chat(8,'----- Obi Equipped. -----')
end
end
if spell.skill == 'Elemental Magic' then
if state.MagicBurst.value then
equip(sets.magic_burst)
end
end
end
function job_aftercast(spell, action, spellMap, eventArgs)
if spell.english == 'Sleep' then
send_command('@wait 50;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
elseif spell.english == 'Sleep II' or spell.english == 'Sleepga II' then
send_command('@wait 80;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
elseif spell.english == 'Break' or spell.english == 'Breakga' then
send_command('@wait 20;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
end
if spell.english == 'Sleep II' then
send_command('timers c "Sleep II" 90 down spells/00259.png')
elseif spell.english == 'Sleep' then
send_command('timers c "Sleep" 60 down spells/00253.png')
elseif spell.english == 'Break' then
send_command('timers c "Break" 30 down spells/00255.png')
end
buffWatcher.casting = false
-- helix timers
if (not spell.interrupted) then
if info.Helix:contains(spell.english) then
createTimerHelix(spell.english)
end
if (spell.english=='Modus Veritas' or spell.english=='Stone') then
createTimerModusVeritas()
end
end -- end of helix timers
-- soloSC stuff
if (soloSC.active==true) and (spell.english==soloSC.step.spell or spell.english=='Immanence') then
if (spell.english==soloSC.step.spell) then
if (not spell.interrupted) then
soloSkillchainStep()
else
soloSkillchainAbort('interrupted')
end
end
if (spell.english=='Immanence') then
state.Buff["Immanence"] = buffactive["Immanence"] or false
if (not state.Buff["Immanence"]) and spell.interrupted then
soloSkillchainAbort('Immanence failed')
end
end
end
-- end of soloSC stuff
end -- end of the function
-------------------------------------------------------------------------------------------------------------------
-- 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 buff == "Sublimation: Activated" then
handle_equipping_gear(player.status)
end
for index,value in pairs(buffWatcher.watchList) do
if index==buff then
buffWatch()
end
end
end
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
if stateField == 'Offense Mode' then
if newValue == 'Lockstaff' then
disable('main','sub','range')
else
enable('main','sub','range')
end
end
if (new_status=='resting') and (soloSC.active==true) then
soloSkillchainAbort()
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- 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' then
return 'CureWithLightWeather'
end
elseif spell.skill == 'Enfeebling Magic' then
if spell.type == 'WhiteMagic' then
return 'MndEnfeebles'
else
return 'IntEnfeebles'
end
elseif spell.skill == 'Elemental Magic' then
if info.low_nukes:contains(spell.english) then
return 'LowTierNuke'
elseif info.mid_nukes:contains(spell.english) then
return 'MidTierNuke'
elseif info.high_nukes:contains(spell.english) then
return 'HighTierNuke'
end
end
end
end
function customize_idle_set(idleSet)
if state.Buff['Sublimation: Activated'] then
if state.IdleMode.value == 'Normal' then
idleSet = set_combine(idleSet, sets.buff.FullSublimation)
elseif state.IdleMode.value == 'PDT' then
idleSet = set_combine(idleSet, sets.buff.PDTSublimation)
end
end
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
return idleSet
end
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
if cmdParams[1] == 'user' and not (buffactive['light arts'] or buffactive['dark arts'] or
buffactive['addendum: white'] or buffactive['addendum: black']) then
if state.IdleMode.value == 'Stun' then
send_command('@input /ja "Dark Arts" <me>')
else
send_command('@input /ja "Light Arts" <me>')
end
end
update_active_strategems()
update_sublimation()
end
-- Function to display the current relevant user state when doing an update.
-- Return true if display was handled, and you don't want the default info shown.
function display_current_job_state(eventArgs)
display_current_caster_state()
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- Called for direct player commands.
function job_self_command(cmdParams, eventArgs)
if cmdParams[1] == 'soloSC' then
if not cmdParams[2] or not cmdParams[3] then
errlog('missing required parameters for function soloSkillchain')
return
else
soloSkillchain(cmdParams[2],cmdParams[3],cmdParams[4],cmdParams[5])
end
end
if cmdParams[1] == 'stopSoloSC' then
soloSkillchainAbort('abort from command')
end
-- if cmdParams[1]:lower() == 'scholar' then
-- handle_strategems(cmdParams)
-- eventArgs.handled = true
-- end
-- maybe some other stuff
if cmdParams[1] == 'buffWatcher' then
buffWatch(cmdParams[2],cmdParams[3])
end
if cmdParams[1] == 'stopBuffWatcher' then
stopBuffWatcher()
end
-- maybe some other stuff
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- Reset the state vars tracking strategems.5
-- Reset the state vars tracking strategems.
function update_active_strategems()
state.Buff['Ebullience'] = buffactive['Ebullience'] or false
state.Buff['Rapture'] = buffactive['Rapture'] or false
state.Buff['Perpetuance'] = buffactive['Perpetuance'] or false
state.Buff['Immanence'] = buffactive['Immanence'] or false
state.Buff['Penury'] = buffactive['Penury'] or false
state.Buff['Parsimony'] = buffactive['Parsimony'] or false
state.Buff['Celerity'] = buffactive['Celerity'] or false
state.Buff['Alacrity'] = buffactive['Alacrity'] or false
state.Buff['Klimaform'] = buffactive['Klimaform'] or false
end
function update_sublimation()
state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
end
-- Equip sets appropriate to the active buffs, relative to the spell being cast.
function apply_grimoire_bonuses(spell, action, spellMap)
if buffactive.perpetuance and spell.type =='WhiteMagic' and spell.skill == 'Enhancing Magic' then
equip(sets.buff.Perpetuance)
end
if buffactive.Rapture and (spellMap == 'Cure' or spellMap == 'Curaga') then
equip(state.Buff.Rapture)
end
if spell.skill == 'Elemental Magic' or spellMap ~= 'ElementalEnfeeble' then
if buffactive.Ebullience and spell.english ~= 'Impact' then
equip(sets.buff.Ebullience)
end
if buffactive.Immanence then
equip(sets.buff.Immanence)
end
if buffactive.Klimaform and spell.element == world.weather_element then
equip(sets.buff.Klimaform)
end
end
if buffactive.Penury then equip(sets.buff.Penury) end
if buffactive.Parsimony then equip(sets.buff.Parsimony) end
if buffactive.Celerity then equip(sets.buff.Celerity) end
if buffactive.Alacrity then equip(sets.buff.Alacrity) end
end
function display_current_caster_state()
local msg = ''
if state.OffenseMode.value ~= 'None' then
msg = msg .. 'Melee'
if state.CombatForm.has_value then
msg = msg .. ' (' .. state.CombatForm.value .. ')'
end
msg = msg .. ', '
end
msg = msg .. 'Idle ['..state.IdleMode.value..'], Casting ['..state.CastingMode.value..']'
add_to_chat(122, msg)
local currentStrats = getNbStratagems()
local arts
if buffactive['Light Arts'] or buffactive['Addendum: White'] then
arts = 'Light Arts'
elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
arts = 'Dark Arts'
else
arts = 'No Arts Activated'
end
add_to_chat(122, 'Current Available Strategems: ['..currentStrats..'], '..arts..'')
end
-- 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 currentStrats = getNbStratagems()
local newStratCount = currentStrats - 1
local strategem = cmdParams[2]:lower()
if currentStrats > 0 and strategem ~= 'light' and strategem ~= 'dark' then
add_to_chat(122, '***Current Charges Available: ['..newStratCount..']***')
elseif currentStrats == 0 then
add_to_chat(122, '***Out of strategems! Canceling...***')
return
end
if strategem == 'light' then
if buffactive['light arts'] then
send_command('input /ja "Addendum: White" <me>')
add_to_chat(122, '***Current Charges Available: ['..newStratCount..']***')
elseif buffactive['addendum: white'] then
add_to_chat(122,'Error: Addendum: White is already active.')
elseif buffactive['dark arts'] or buffactive['addendum: black'] then
send_command('input /ja "Light Arts" <me>')
add_to_chat(122, '***Changing Arts! Current Charges Available: ['..currentStrats..']***')
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>')
add_to_chat(122, '***Current Charges Available: ['..newStratCount..']***')
elseif buffactive['addendum: black'] then
add_to_chat(122,'Error: Addendum: Black is already active.')
elseif buffactive['light arts'] or buffactive['addendum: white'] then
send_command('input /ja "Dark Arts" <me>')
add_to_chat(122, '***Changing Arts! Current Charges Available: ['..currentStrats..']***')
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 == 'power' then
send_command('@input /ja Rapture <me>')
elseif strategem == 'duration' then
send_command('@input /ja Perpetuance <me>')
elseif strategem == 'accuracy' then
send_command('@input /ja Altruism <me>')
elseif strategem == 'enmity' then
send_command('@input /ja Tranquility <me>')
elseif strategem == 'skillchain' then
add_to_chat(122,'Error: Light Arts does not have a skillchain strategem.')
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 == 'power' then
send_command('@input /ja Ebullience <me>')
elseif strategem == 'duration' then
send_command('@input /ma "Sleep II" <t>')
elseif strategem == 'accuracy' then
send_command('@input /ja Focalization <me>')
elseif strategem == 'enmity' then
send_command('@input /ja Equanimity <me>')
elseif strategem == 'skillchain' then
send_command('@input /ja Immanence <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
function getNbStratagems()
local allRecasts = windower.ffxi.get_ability_recasts()
local stratsRecast = allRecasts[231]
local maxStrategems = math.floor(player.main_job_level + 10) / 20
local fullRechargeTime = 5*33
local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
return currentCharges
end
function errlog(msg)
add_to_chat(167,msg)
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
if player.sub_job == 'RDM' then
set_macro_page(1, 5)
elseif player.sub_job == 'BLM' then
set_macro_page(1, 5)
elseif player.sub_job == 'WHM' then
set_macro_page(1, 5)
end
end
EDIT: I believe that puts you at 60% before any augments on Merlinic. If you +3 the new hands and you will have even more wiggle room to not swap weapons or add insta cast.
So I was thinking about it briefly, and this might be a dumb question as I don't SCH much, but if you're using the above set and hitting 65+15 FC already, is there any need to make special cases for the hat + head? Is there an argument for not just using them in precast.FC for every spell as you will always be in one art or the other as SCH and off-art spells are still at capped FC?
EDIT: I believe that puts you at 60% before any augments on Merlinic. If you +3 the new hands and you will have even more wiggle room to not swap weapons or add insta cast.
The hard part for most will be getting to 80% FC without using Merlinic Head I think that is why people wont be using both and with just +2 feet I'm already seeing mistakes with GS on short cast spells lol
So I was thinking about it briefly, and this might be a dumb question as I don't SCH much, but if you're using the above set and hitting 65+15 FC already, is there any need to make special cases for the hat + head? Is there an argument for not just using them in precast.FC for every spell as you will always be in one art or the other as SCH and off-art spells are still at capped FC?
losing some instacast if you dont love instacast then sure but you have to drop peri cape for the ambuscade back 10fc to cap once you drop off merlinic feet for the +2/+3 loafers
Should be 80% with /RDM sub.
Can get even higher with AF1+3 hands or Grio with FC augment.
Then there's Impatiens, Weatherspoon, Witful and Lebeche wich should be 10% Quick Magic.
I guess this is not viable for people who want to lock their main to use Myrkr, but frankly on SCH I see less necessity to use Myrkr than, say, on BLM.
I forgot to calculate the 10% from Light/Dark arts, but I think the base one falls under the 80% limit, unlike the new reforged Feet/Head, and of course it only works for the spells associated with the current arts...