Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------------------------------------------------------------------------------------------------------------
- -- Setup functions for this job. Generally should not be modified.
- -------------------------------------------------------------------------------------------------------------------
- -- Initialization function for this job file.
- function get_sets()
- mote_include_version = 2
- -- Load and initialize the include file.
- include('Mote-Include.lua')
- 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('None', 'Normal')
- state.CastingMode:options('Normal','MB')
- state.IdleMode:options('Normal', 'PDT', 'MDT')
- gear.default.obi_waist = ""
- gear.default.obi_back = ""
- gear.default.obi_ring = ""
- select_default_macro_book()
- end
- lowtier = S{"Fire", "Fire II", "Stone", "Stone II", "Blizzard", "Blizzard II", "Aero", "Aero II", "Water", "Water II", "Thunder", "Thunder II", "Fira", "Blizzara", "Aerora", "Stonera", "Thundara", "Watera"}
- hightier = S{"Fire III", "Fire IV", "Stone IV", "Stone III", "Blizzard IV", "Blizzard III", "Aero IV", "Aero III", "Water IV", "Water III", "Thunder IV", "Thunder III", "Fira II", "Blizzara II", "Aerora II", "Stonera II", "Thundara II", "Watera II", "Fira III", "Blizzara III", "Aerora III", "Stonera III", "Thundara III", "Watera III"}
- -- Define sets and vars used by this job file.
- function init_gear_sets()
- -- AUGMENTED GEAR
- MAB_head = { name="Helios Band",}
- MAB_body ={ name="Helios Jacket",}
- MAB_hands = { name="Merlinic Dastanas",}
- MAB_legs = {"Merlinic Shalwar",}
- MAB_feet = { name="Merlinic Crackows",}
- ENH_head = {"Umuthi Hat"}
- ENH_body = { name="Telchine Chas.",}
- ENH_hands ={ name="Chironic Gloves",}
- ENH_legs ={ name="Artiseq Hose"}
- ENH_feet = {"Kaykaus Boots"}
- DRAS_head = "Helios Band"
- DRAS_body={ name="Helios Jacket",}
- DRAS_hands={ name="Merlinic Dastanas",}
- DRAS_legs={ name="Merlinic Shalwar",}
- DRAS_feet={ name="Merlinic Crackows",}
- --------------------------------------
- -- Precast sets
- --------------------------------------
- -- Precast sets to enhance JAs
- sets.precast.JA['Tabula Rasa'] = {legs="Pedagogy Pants"}
- -- Fast cast sets for spells
- sets.precast.FC = {
- head="Nahtirah Hat", --10--
- body="Helios jacket", --5--
- hands="Yaoyotl gloves",
- legs="Artiseq Hose", --11--
- feet="Merlinic Crackows", --7--
- neck="Voltsurge torque", --4--
- waist="Witful Belt", --3--
- right_ear="Enchntr. Earring +1",--2--
- left_ear="Loquac. Earring", --2--
- left_ring="Prolix Ring", --2--
- right_ring="lebeche Ring",
- back="Bookworm's Cape", --7--
- }
- sets.precast.FC.Cure = set_combine(sets.precast.FC, {
- left_ear="Mendicant's Earring",
- body="Gendewitha Bliaut",
- neck="Phalaina Locket",
- back="Pahtli Cape",
- feet="Kaykaus Boots",
- })
- sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {
- waist="siegel sash",
- })
- sets.precast.FC.Stoneskin = set_combine(sets.precast.FC, {
- head="Umuthi Hat",
- waist="siegel sash",
- })
- sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {
- right_ear="barkarole Earring",
- hands="Bagua Mitaines",
- neck="Stoicheion Medal",
- })
- sets.precast.FC.Impact = set_combine(sets.precast.FC['Elemental Magic'], {
- head=empty,body="Twilight Cloak"})
- --------------------------------------
- -- Midcast sets
- --------------------------------------
- -- Base fast recast for spells
- sets.midcast.FastRecast =set_combine(sets.precast.fastcast)
- sets.midcast.Regen = set_combine(sets.midcast.fastcast, {
- body="Telchine Chas."})
- sets.midcast['Enhancing Magic']={
- head="Umuthi hat",
- body=ENH_body,
- hands=ENH_hands,
- legs="Kaykaus Tights",
- feet="Helios boots",
- neck="Eddy necklace",
- waist="Witful belt",
- left_ear="Mendicant earring",
- right_ear="Loquac. Earring",
- left_ring="Lebeche Ring",
- right_ring="Prolix Ring",
- back="Merciful cape",
- }
- sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {
- back="grapevine cape",
- feet="Inspirited boots",
- waist="Gishdubar sash",})
- sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {
- waist="Witful belt"})
- sets.midcast.Cure = {
- head="Kaykaus Mitra",
- body="Gendewitha Bliaut",
- hands="Kaykaus Cuffs",
- legs="Kaykaus Tights",
- feet="Kaykaus Boots",
- neck="Phalaina Locket",
- waist="Witful Belt",
- left_ear="Mendicant's Earring",
- right_ear="Enchntr. Earring +1",
- right_ring="Zodiac ring",
- left_ring="Sirona's Ring",
- back="Pahtli Cape",
- }
- sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {
- waist="siegel sash",
- right_ear="Earthcry Earring",
- })
- sets.midcast.Curaga = sets.midcast.Cure
- sets.midcast.CureSelf = set_combine(sets.midcast.Cure, {
- left_ring="Vocane Ring",
- legs=ENH_legs,
- waist="Gishdubar sash",
- })
- sets.midcast.Cursna = set_combine(sets.midcast.FastRecast, {
- neck="Malison Medallion",
- feet="Gendewitha Galoshes",
- ring1="Purity Ring",
- ring2="Haoma's Ring",
- waist="Gishdubar sash",})
- sets.midcast.Protectra = {ring1="Sheltered Ring"}
- sets.midcast.Shellra = {ring1="Sheltered Ring"}
- -- Custom Spell Classes
- sets.midcast['Enfeebling Magic'] = {
- head="Nahtirah hat",
- body="Artiseq Jubbah",
- hands="Kaykaus Cuffs",
- legs="Psycloth lappas",
- feet="Helios Boots",
- neck="Incanter's torque",
- waist="Rumination Sash",
- left_ear="Gwati Earring",
- right_ear="barkarole Earring",
- left_ring="Sangoma Ring",
- right_ring="Vertigo Ring",
- back=PET_back,
- }
- sets.midcast.IntEnfeebles = set_combine(sets.midcast['Enfeebling Magic'], {
- })
- sets.midcast.ElementalEnfeeble = sets.midcast['Enfeebling Magic']
- sets.midcast['Dark Magic'] = {
- head=MAB_head,
- body="Witching Robe",
- hands="Helios Gloves",
- legs="Psycloth Lappas",
- feet=MAB_feet,
- neck="Incanter's Torque",
- waist="Aswang sash",
- left_ear="Gwati Earring",
- right_ear="barkarole Earring",
- left_ring="Shiva Ring",
- right_ring="Shiva Ring",
- back="Bookworm's Cape",
- }
- sets.midcast.Drain = {
- head=DRAS_head,
- body=DRAS_body,
- hands=DRAS_hands,
- legs=DRAS_legs,
- feet=DRAS_feet,
- neck="Incanter's Torque",
- waist="Aswang sash",
- left_ear="barkarole Earring",
- right_ear="Hirudinea Earring",
- left_ring="Excelsis Ring",
- right_ring="Evanescence Ring",
- back="Bookworm's Cape",
- }
- sets.midcast.Aspir = sets.midcast.Drain
- sets.midcast.Stun = {
- head="Nahtirah Hat",
- body="Helios Jacket",
- hands="Merlinic Dastanas",
- legs="Artsieq hose",
- feet="Merlinic Crackows",
- neck="Voltsurge torque",
- waist="Witful Belt",
- left_ear="barkarole Earring",
- right_ear="Gwati Earring",
- left_ring="Sangoma Ring",
- right_ring="Etana Ring",
- }
- -- Elemental Magic sets
- sets.midcast['Elemental Magic']= {
- head=MAB_head,
- body=MAB_body,
- hands=MAB_hands,
- legs=MAB_legs,
- feet=MAB_feet,
- neck="Eddy Necklace",
- waist="Aswang sash",
- left_ear="Friomisi Earring",
- right_ear="Hecate's Earring",
- left_ring="Shiva Ring",
- right_ring="Shiva Ring",
- back="Bookworm's Cape",
- }
- sets.midcast['Elemental Magic']['MB']=set_combine(sets.midcast['Elemental Magic'], {
- neck="Mizu. Kubikazari",
- left_ear="Static Earring",
- right_ring="Locus Ring",
- left_ring="Mujin Band",
- })
- sets.midcast.Impact = {
- head=empty,
- body="Twilight Cloak",
- hands=MAB_hands,
- legs="Merlnic Shalwar",
- feet=MAB_feet,
- neck="Eddy Necklace",
- waist="Refoccilation stone",
- left_ear="Gwati Earring",
- right_ear="barkarole Earring",
- left_ring="Sangoma Ring",
- right_ring="Archon Ring",
- back="Kumbira Cape",
- }
- sets.midcast.Meteor = set_combine(sets.midcast['Elemental Magic'],{
- head=empty,
- body="Onca suit",
- hands=empty,
- legs=empty,
- feet=empty,
- })
- --------------------------------------
- -- Idle/resting/defense/etc sets
- --------------------------------------
- -- Resting sets
- sets.resting = {
- head="Befouled crown",
- body={ name="Hagondes Coat +1",},
- hands="Merlinic Dastanas",
- legs="Lengo Pants",
- feet="Merlinic Crackows",
- neck="Eddy Necklace",
- waist="Gishdubar Sash",
- left_ear="Hearty Earring",
- right_ear="Infused Earring",
- left_ring="Sheltered Ring",
- right_ring="Defending Ring",
- back="Solemnity Cape",
- }
- -- Idle sets
- sets.idle = sets.resting
- sets.idle.PDT = {
- head="Hagondes Hat",
- neck="Twilight Torque",
- ear1="Hearty Earring",
- ear2="Infused Earring",
- body="Hagondes Coat +1",
- hands="Merlic Dastanas",
- left_ring="Vertigo ring",
- right_ring="Prolix Ring",
- back="Solemnity Cape",
- waist="Witful belt",
- legs="Merlinic Shalwar",
- feet="Helios Boots",
- }
- sets.idle.MDT = sets.idle.PDT
- sets.idle.Town = {
- head="Kaykaus Mitra",
- body="Hagondes Coat +1",
- hands="Merlinic Dastanas",
- legs="Merlinic Shalwar",
- feet="Merlinic Crackows",
- neck="Twilight Torque",
- waist="Gishdubar sash",
- left_ear="Hearty Earring",
- right_ear="Infused Earring",
- left_ring="Vocane Ring",
- right_ring="Defending Ring",
- back="Lifestream Cape",
- }
- sets.idle.Weak = sets.resting
- -- Defense sets
- sets.defense.PDT = sets.idle.PDT
- sets.defense.MDT = sets.idle.MDT
- sets.Kiting = {
- feet="Geo. Sandals +1"}
- sets.latent_refresh = {
- waist="Fucho-no-obi"}
- -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
- sets.buff['Ebullience'] = {head="Savant's Bonnet +1"}
- sets.buff['Rapture'] = {head="Savant's Bonnet +1"}
- sets.buff['Perpetuance'] = {hands="Savant's Bracers +2"}
- sets.buff['Immanence'] = {hands="Savant's Bracers +2"}
- sets.buff['Penury'] = {legs="Savant's Pants +2"}
- sets.buff['Parsimony'] = {legs="Savant's Pants +2"}
- sets.buff['Celerity'] = {feet="Pedagogy Loafers"}
- sets.buff['Alacrity'] = {feet="Pedagogy Loafers"}
- sets.buff['Klimaform'] = {feet="Savant's Loafers +2"}
- sets.buff.FullSublimation = {head="Academic's Mortarboard",ear1="Savant's Earring",body="Pedagogy Gown"}
- sets.buff.PDTSublimation = {head="Academic's Mortarboard",ear1="Savant's Earring"}
- --sets.buff['Sandstorm'] = {feet="Desert Boots"}
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks for standard casting events.
- -------------------------------------------------------------------------------------------------------------------
- -- Run after the general midcast() is done.
- function job_post_midcast(spell, action, spellMap, eventArgs)
- if spell.action_type == 'Magic' then
- apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- 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
- end
- -- Handle notifications of general user state change.
- function job_state_change(stateField, newValue, oldValue)
- if stateField == 'Offense Mode' then
- if newValue == 'Normal' then
- disable('main','sub','range')
- else
- enable('main','sub','range')
- end
- 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 'Cure'
- 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 'LowTierNuke'
- 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]:lower() == 'scholar' then
- handle_strategems(cmdParams)
- eventArgs.handled = true
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- -- 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 state.Buff.Perpetuance and spell.type =='WhiteMagic' and spell.skill == 'Enhancing Magic' then
- equip(sets.buff['Perpetuance'])
- end
- if state.Buff.Rapture and (spellMap == 'Cure' or spellMap == 'Curaga') then
- equip(sets.buff['Rapture'])
- end
- if spell.skill == 'Elemental Magic' and spellMap ~= 'ElementalEnfeeble' then
- if state.Buff.Ebullience and spell.english ~= 'Impact' then
- equip(sets.buff['Ebullience'])
- end
- if state.Buff.Immanence then
- equip(sets.buff['Immanence'])
- end
- if state.Buff.Klimaform and spell.element == world.weather_element then
- equip(sets.buff['Klimaform'])
- end
- end
- if state.Buff.Penury then equip(sets.buff['Penury']) end
- if state.Buff.Parsimony then equip(sets.buff['Parsimony']) end
- if state.Buff.Celerity then equip(sets.buff['Celerity']) end
- if state.Buff.Alacrity then equip(sets.buff['Alacrity']) end
- 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 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 == '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
- add_to_chat(122,'Error: Dark Arts does not have a duration strategem.')
- 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
- -- Gets the current number of available strategems based on the recast remaining
- -- and the level of the sch.
- function get_current_strategem_count()
- -- returns recast in seconds.
- local allRecasts = windower.ffxi.get_ability_recasts()
- local stratsRecast = allRecasts[231]
- local maxStrategems = (player.main_job_level + 10) / 20
- local fullRechargeTime = 4*60
- local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
- return currentCharges
- end
- -- Select default macro book on initial load or subjob change.
- function select_default_macro_book()
- set_macro_page(1,15)
- end
Add Comment
Please, Sign In to add comment