|
A Scholar's Education (Guide)
Bahamut.Tychefm
サーバ: Bahamut
Game: FFXI
Posts: 902
By Bahamut.Tychefm 2017-01-06 00:53:27
Any further input / testing is welcome.
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?
Any input is welcome.
Fenrir.Tarowyn
サーバ: Fenrir
Game: FFXI
Posts: 580
By Fenrir.Tarowyn 2017-01-06 01:06:57
I've definitely done 5->4 on my own SC (and that's even with non capped FC on the 4), but the timing's extremely tight.
The numbers you posted earlier seem a little funny since even 80% FC should be going off at under 20%.
Bahamut.Tychefm
サーバ: Bahamut
Game: FFXI
Posts: 902
By Bahamut.Tychefm 2017-01-06 01:24:24
Quote: The numbers you posted earlier seem a little funny since even 80% FC should be going off at under 20%.
Tripple checked it with and without feet recording my game with FRAPS and going frame by frame:
- With feet RR3 casts at 13%
- Without feet RR3 casts at 18-19%
[+]
Fenrir.Tarowyn
サーバ: Fenrir
Game: FFXI
Posts: 580
By Fenrir.Tarowyn 2017-01-06 01:41:37
The results certainly look interesting. Have to actually wait til I'm home to go and check out stuff personally.
Asura.Sechs
サーバ: Asura
Game: FFXI
Posts: 10065
By Asura.Sechs 2017-01-06 05:34:39
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 =/
My set is different from yours though
Main: Oranyan
Sub: Clerisy+1
Ammo: Impatiens
Head: Peda+1
Neck: Voltsurge
Ears: Ench+1, Loquacious
Body: Zendik
Hands: Gende+1
Rings: Weatherspoon, Rahab
Back: Swith+1
Waist: Witful
Legs: Psycloth
Feet: Academic+1
Think that's ~60% FC, plus Head/Feet for Grimoire casting, then 10% from Arts and then 15% FC from /RDM
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-06 06:14:55
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 =/
My set is different from yours though
Main: Oranyan
Sub: Clerisy+1
Ammo: Impatiens
Head: Peda+1
Neck: Voltsurge
Ears: Ench+1, Loquacious
Body: Zendik
Hands: Gende+1
Rings: Weatherspoon, Rahab
Back: Swith+1
Waist: Witful
Legs: Psycloth
Feet: Academic+1
Think that's ~60% FC, plus Head/Feet for Grimoire casting, then 10% from Arts and then 15% FC from /RDM Lol voltsurge what a nub
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-06 06:18:57
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
Bahamut.Tychefm
サーバ: Bahamut
Game: FFXI
Posts: 902
By Bahamut.Tychefm 2017-01-06 07:11:02
Quote: Thanks for posting this
I'd still like some confirmation from another source so I'm sure I'm not trying to see things that are not there.
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-06 07:18:51
10 cards short from getting the +3, but this will be my first upgrade and i will see if i can manage it.
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-06 08:20:08
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
[+]
Bismarck.Zuidar
サーバ: Bismarck
Game: FFXI
Posts: 1272
By Bismarck.Zuidar 2017-01-06 08:55:49
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
Shiva.Hiep
サーバ: Shiva
Game: FFXI
Posts: 669
By Shiva.Hiep 2017-01-07 02:26:43
Quote: Thanks for posting this
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.
[+]
By Lyramion 2017-01-07 06:14:52
Quote: I can confirm that these definitely break the cap or something.
Amazing. Thank you.
[+]
By Antisense 2017-01-07 08:52:02
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.
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-09 13:57:02
hahah ive been working my *** off to get these, then I realized you did testing with the +2, getting them now, I was thinking the +3, /shrug
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-09 14:52:08
heres what I did
made a set Code
sets.Precast.FastCast.Arts = {
ear1="Loquac. Earring",
ammo="Impatiens",
head={ name="Merlinic Hood", augments={'"Fast Cast"+7','INT+7','Mag. Acc.+14','"Mag.Atk.Bns."+11',}},
neck="Orunmila's Torque",
ear2="Etiolation Earring",
body="Zendik Robe",
hands={ name="Merlinic Dastanas", augments={'"Fast Cast"+7','CHR+7',}},
ring1="Kishar Ring",
ring2="Lebeche Ring",
back={ name="Lugh's Cape", augments={'MP+60','"Fast Cast"+10',}},
waist="Witful Belt",
feet="Acad. Loafers +2",
legs={name="Psycloth Lappas", priority=1}}
then in function precast put this
Code
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
サーバ: Fenrir
Game: FFXI
Posts: 282
By Fenrir.Sathicus 2017-01-09 17:43:38
Tora,
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.
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-09 18:04:12
Tora,
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
サーバ: Fenrir
Game: FFXI
Posts: 282
By Fenrir.Sathicus 2017-01-09 20:14:42
Thanks!
Carbuncle.Doryll
サーバ: Carbuncle
Game: FFXI
By Carbuncle.Doryll 2017-01-11 16:54:22
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 : 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
i put function line 188
Asura.Fiasko
By Asura.Fiasko 2017-01-12 11:55:13
Has anyone figured out if its only the feet that break the cap? Assuming the head does as well, do the affects stack?
Something to consider if you swap weapons already you can aim for the 65% fastcast (/rdm) and use the two pieces in your base fastcast set.
ItemSet 348934
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.
Carbuncle.Doryll
サーバ: Carbuncle
Game: FFXI
By Carbuncle.Doryll 2017-01-12 14:24:26
That's the set i use, without adoulin' ring but with a FC+7 body. Unfortunately, i can't test it with my error functions
サーバ: Fenrir
Game: FFXI
Posts: 282
By Fenrir.Sathicus 2017-01-12 15:04:19
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?
Bahamut.Neb
サーバ: Bahamut
Game: FFXI
Posts: 189
By Bahamut.Neb 2017-01-12 16:46:30
Has anyone figured out if its only the feet that break the cap? Assuming the head does as well, do the affects stack?
Something to consider if you swap weapons already you can aim for the 65% fastcast (/rdm) and use the two pieces in your base fastcast set.
ItemSet 348934
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
Bahamut.Tychefm
サーバ: Bahamut
Game: FFXI
Posts: 902
By Bahamut.Tychefm 2017-01-12 16:52:33
We tested it with Head and Feet using Casters Roll CC 11 to cap FC. Didn't seem to make a difference which ones you used to break the cap.
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-12 17:22:36
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
Asura.Sechs
サーバ: Asura
Game: FFXI
Posts: 10065
By Asura.Sechs 2017-01-12 18:34:59
With some adjustments one can cap FC and Quickmagic without using the Feet/Head slots though.
Oranyan+ClerisyHQ
Orunmilla+Loq+EnchaHQ
zendik+gendeHQ+weather
FC10cape+witful+psycloth
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.
Asura.Sechs
サーバ: Asura
Game: FFXI
Posts: 10065
By Asura.Sechs 2017-01-12 18:36:18
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...
サーバ: Asura
Game: FFXI
Posts: 1392
By Asura.Toralin 2017-01-12 18:49:48
But what if you only have voltsurge?
Carbuncle.Doryll
サーバ: Carbuncle
Game: FFXI
By Carbuncle.Doryll 2017-01-13 07:23:50
Question is can anyone get *helix2 and tier5 off!!! new challenge! both 7.5 second base cast time
Possible without QM proc :
|
|