Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------------------------------------------------------------------------------------------------------------
- -- Setup functions for this job. Generally should not be modified.
- -------------------------------------------------------------------------------------------------------------------
- --[[
- Custom commands:
- gs c step
- Uses the currently configured step on the target, with either <t> or <stnpc> depending on setting.
- gs c step t
- Uses the currently configured step on the target, but forces use of <t>.
- Configuration commands:
- gs c cycle mainstep
- Cycles through the available steps to use as the primary step when using one of the above commands.
- gs c cycle altstep
- Cycles through the available steps to use for alternating with the configured main step.
- gs c toggle usealtstep
- Toggles whether or not to use an alternate step.
- gs c toggle selectsteptarget
- Toggles whether or not to use <stnpc> (as opposed to <t>) when using a step.
- --]]
- -- Initialization function for this job file.
- function get_sets()
- include('organizer-lib')
- mote_include_version = 2
- -- Load and initialize the include file.
- include('Mote-Include.lua')
- end
- -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
- function job_setup()
- state.Buff['Climactic Flourish'] = buffactive['climactic flourish'] or false
- state.MainStep = M{['description']='Main Step', 'Box Step', 'Quickstep', 'Feather Step', 'Stutter Step'}
- state.AltStep = M{['description']='Alt Step', 'Quickstep', 'Feather Step', 'Stutter Step', 'Box Step'}
- state.UseAltStep = M(false, 'Use Alt Step')
- state.SelectStepTarget = M(false, 'Select Step Target')
- state.IgnoreTargetting = M(false, 'Ignore Targetting')
- state.CurrentStep = M{['description']='Current Step', 'Main', 'Alt'}
- state.SkillchainPending = M(false, 'Skillchain Pending')
- determine_haste_group()
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
- -------------------------------------------------------------------------------------------------------------------
- -- Setup vars that are user-dependent. Can override this function in a sidecar file.
- function user_setup()
- state.OffenseMode:options('Normal', 'Acc', 'Fodder')
- state.HybridMode:options('Normal', 'Evasion', 'PDT', 'Aminon')
- state.WeaponskillMode:options('Normal', 'Acc', 'Fodder', 'Attack')
- state.PhysicalDefenseMode:options('Evasion', 'PDT')
- state.IdleMode:options('Normal', 'Aminon', 'Craft')
- gear.default.weaponskill_neck = "Asperity Necklace"
- gear.default.weaponskill_waist = "Caudata Belt"
- gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
- -- Additional local binds
- send_command('bind ^= gs c cycle mainstep')
- send_command('bind != gs c cycle altstep')
- send_command('bind ^- gs c toggle selectsteptarget')
- send_command('bind !- gs c toggle usealtstep')
- send_command('bind ^` input /ja "Chocobo Jig" <me>')
- send_command('bind !` input /ja "Chocobo Jig II" <me>')
- send_command('lua l gearinfo')
- select_default_macro_book()
- end
- -- Called when this job file is unloaded (eg: job change)
- function user_unload()
- send_command('unbind ^`')
- send_command('unbind !`')
- send_command('unbind ^=')
- send_command('unbind !=')
- send_command('unbind ^-')
- send_command('unbind !-')
- end
- function user_unload()
- send_command('lua u gearinfo')
- end
- -- Define sets and vars used by this job file.
- function init_gear_sets()
- --------------------------------------
- -- Start defining the sets
- --------------------------------------
- -- Precast Sets
- -- Precast sets to enhance JAs
- sets.precast.JA['No Foot Rise'] = {body="Horos Casaque +3"}
- sets.precast.JA['Trance'] = {head="Horos Tiara +3"}
- sets.precast.JA['Fan Dance'] = {hands="Horos Bangles +3"}
- sets.precast.JA['Saber Dance'] = {legs="Horos Tights +3"}
- -- Waltz set (chr and vit)
- sets.precast.Waltz = {ammo="Yamarang",
- head="Horos Tiara +3",
- body="Maxixi Casaque +3",
- hands="Regal Gloves",
- legs="Horos Tights +3",
- feet="Maxixi Toe Shoes +2",
- neck="Etoile Gorget +2",
- waist="Chaac Belt",
- left_ear="Infused Earring",
- right_ear="Roundel Earring",
- left_ring="Regal Ring",
- right_ring="Metamor. Ring +1",
- back={ name="Senuna's Mantle", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Waltz" potency +10%','Mag. Evasion+15',}}}
- -- Don't need any special gear for Healing Waltz.
- sets.precast.Waltz['Healing Waltz'] = set_combine(sets.precast.Waltz, {})
- sets.precast.Samba = {head="Maxixi Tiara +3"}
- sets.precast.Jig = {feet="Maxixi Toe Shoes +2",
- legs="Horos Tights +3"}
- sets.precast.Step = {ammo="C. Palug Stone",
- head="Maculele Tiara +2",
- body="Gleti's Cuirass",
- hands="Maxixi Bangles +2",
- legs="Gleti's Breeches",
- feet="Horos T. Shoes +3",
- neck="Etoile Gorget +2",
- waist="Kentarch Belt +1",
- left_ear="Mache Earring +1",
- right_ear="Mache Earring +1",
- left_ring="Regal Ring",
- right_ring="Chirich Ring +1",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
- sets.precast.Step['Feather Step'] = {feet="Macu. Toe Sh. +2"}
- sets.precast.Flourish1 = {ammo="Sapience Orb",
- head="Halitus Helm",
- body={ name="Gleti's Cuirass", augments={'Path: A',}},
- hands="Horos Bangles +3",
- legs={ name="Gleti's Breeches", augments={'Path: A',}},
- feet="Ahosi Leggings",
- neck="Warder's Charm +1",
- waist="Goading Belt",
- left_ear="Trux Earring",
- right_ear="Cryptic Earring",
- left_ring="Supershear Ring",
- right_ring="Eihwaz Ring",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
- sets.precast.Flourish1['Violent Flourish'] = {ammo="Yamarang",
- head="Maculele Tiara +2",
- body="Macu. Casaque +2",
- hands="Macu. Bangles +2",
- legs="Maculele Tights +2",
- feet="Macu. Toe Sh. +2",
- neck="Etoile Gorget +2",
- waist="Skrymir Cord +1",
- left_ear="Crep. Earring",
- right_ear="Macu. Earring +1",
- left_ring="Stikini Ring +1",
- right_ring="Metamor. Ring +1",
- back={ name="Senuna's Mantle", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Waltz" potency +10%','Mag. Evasion+15',}}} -- magic accuracy
- sets.precast.Flourish1['Desperate Flourish'] = set_combine(sets.precast.Step, {}) -- acc gear
- sets.precast.Flourish2 = {}
- sets.precast.Flourish2['Reverse Flourish'] = {hands="Macu. Bangles +2"}
- sets.precast.Flourish3 = {}
- sets.precast.Flourish3['Striking Flourish'] = {body="Macu. Casaque +2"}
- sets.precast.Flourish3['Climactic Flourish'] = {head="Maculele Tiara +2"}
- -- Fast cast sets for spells
- sets.precast.FC = {}
- sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
- -- Weaponskill sets
- -- Default set for any weaponskill that isn't any more specifically defined
- sets.precast.WS = {ammo="Oshasha's Treatise",
- head="Nyame Helm",
- body="Gleti's Cuirass",
- hands="Nyame Gauntlets",
- legs="Nyame Flanchard",
- feet="Nyame Sollerets",
- neck="Etoile Gorget +2",
- waist="Sailfi Belt +1",
- left_ear="Moonshade Earring",
- right_ear="Sherida Earring",
- left_ring="Regal Ring",
- right_ring="Cornelia's Ring",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}}
- sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
- -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
- sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {})
- sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {})
- sets.precast.WS['Exenterator'].Fodder = set_combine(sets.precast.WS['Exenterator'], {})
- sets.precast.WS['Pyrrhic Kleos'] = set_combine(sets.precast.WS, {})
- sets.precast.WS['Pyrrhic Kleos'].Acc = set_combine(sets.precast.WS.Acc, {})
- sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {ammo="Coiste Bodhar",
- neck="Fotia Gorget",
- waist="Fotia Belt",
- left_ear="Mache Earring +1",
- right_ear="Odr Earring",
- left_ring="Regal Ring",
- right_ring="Gere Ring",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}})
- sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {})
- sets.precast.WS['Evisceration'].Attack = set_combine(sets.precast.WS['Evisceration'], {ammo="Crepuscular Pebble",
- hands="Gleti's Gauntlets",
- legs="Gleti's Breeches",
- waist="Kentarch Belt +1"})
- sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {ammo="Coiste Bodhar",
- body="Nyame Mail",
- waist="Kentarch Belt +1",
- right_ear="Odr Earring",
- left_ring="Epaminondas's Ring",})
- sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {})
- sets.precast.WS["Rudra's Storm"].Attack = set_combine(sets.precast.WS["Rudra's Storm"], {ammo="Crepuscular Pebble",
- hands="Gleti's Gauntlets",
- legs="Gleti's Breeches",
- waist="Kentarch Belt +1"})
- sets.precast.WS['Shark Bite'] = set_combine(sets.precast.WS, {})
- sets.precast.WS['Shark Bite'].Acc = set_combine(sets.precast.WS['Shark Bite'], {})
- sets.precast.WS['Shark Bite'].Attack = set_combine(sets.precast.WS['Shark Bite'], {ammo="Crepuscular Pebble",
- hands="Gleti's Gauntlets",
- legs="Gleti's Breeches",
- waist="Kentarch Belt +1"})
- sets.precast.WS['Aeolian Edge'] = {ammo="Pemphredo Tathlum",
- head="Nyame Helm",
- body="Nyame Mail",
- hands="Nyame Gauntlets",
- legs="Nyame Flanchard",
- feet="Nyame Sollerets",
- neck="Baetyl Pendant",
- waist="Orpheus's Sash",
- left_ear="Moonshade Earring",
- right_ear="Friomisi Earring",
- left_ring="Epaminondas's Ring",
- right_ring="Cornelia's Ring",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}}
- sets.precast.Skillchain = {}
- -- Midcast Sets
- sets.midcast.FastRecast = {}
- -- Specific spells
- sets.midcast.Utsusemi = {}
- -- Sets to return to when not performing an action.
- -- Resting sets
- sets.resting = {}
- sets.ExtraRegen = {}
- -- Idle sets
- sets.idle = {ammo="Staunch Tathlum +1",
- head="Gleti's Mask",
- body="Gleti's Cuirass",
- hands="Gleti's Gauntlets",
- legs="Gleti's Breeches",
- feet="Skd. Jambeaux +1",
- neck="Loricate Torque +1",
- waist="Plat. Mog. Belt",
- left_ear="Infused Earring",
- right_ear="Sanare Earring",
- left_ring="Gelatinous Ring +1",
- right_ring="Paguroidea Ring",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
- sets.idle.Aminon = set_combine(sets.idle, {hands="Regal Gloves",
- feet="Gleti's Boots",})
- sets.idle.Craft = { ammo="Staunch Tathlum +1",
- head="Magnifying Specs.",
- body="Weaver's Smock",
- hands="Weaver's Cuffs",
- legs={ name="Gleti's Breeches", augments={'Path: A',}},
- feet="Skd. Jambeaux +1",
- neck="Weaver's Torque",
- waist="Weaver's Belt",
- left_ring="Orvail Ring +1",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},}
- sets.idle.Weak = set_combine(sets.idle, {})
- -- Defense sets
- sets.defense.Evasion = {}
- sets.defense.PDT = {}
- sets.defense.MDT = {}
- sets.Kiting = {}
- -- Engaged sets
- -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
- -- sets if more refined versions aren't defined.
- -- If you create a set with both offense and defense modes, the offense mode should be first.
- -- EG: sets.engaged.Dagger.Accuracy.Evasion
- -- Normal melee group
- sets.engaged = {ammo="Aurgelmir Orb +1",
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body="Gleti's Cuirass",
- hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- legs="Gleti's Breeches",
- feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
- neck="Etoile Gorget +2",
- waist="Reiki Yotai",
- left_ear="Suppanomimi",
- right_ear="Sherida Earring",
- left_ring="Gere Ring",
- right_ring="Chirich Ring +1",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
- sets.engaged.Fodder = {ammo="Yamarang",
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body={ name="Herculean Vest", augments={'Accuracy+22','"Triple Atk."+4','DEX+5','Attack+11',}},
- hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
- feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
- neck="Anu Torque",
- waist="Reiki Yotai",
- left_ear="Suppanomimi",
- right_ear="Sherida Earring",
- left_ring="Epona's Ring",
- right_ring="Gere Ring",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}}}
- sets.engaged.Fodder.Evasion = {}
- sets.engaged.Acc = set_combine(sets.engaged, {})
- sets.engaged.Evasion = set_combine(sets.engaged, {})
- sets.engaged.PDT = set_combine(sets.engaged, {head="Malignance Chapeau",
- hands={ name="Gleti's Gauntlets", augments={'Path: A',}},
- feet="Malignance Boots",
- left_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
- right_ring="Moonlight Ring",})
- sets.engaged.Acc.Evasion = set_combine(sets.engaged.Evasion, {})
- sets.engaged.Acc.PDT = set_combine(sets.engaged.PDT, {})
- sets.engaged.Aminon = set_combine(sets.engaged.PDT, {head="Gleti's Mask",
- hands="Regal Gloves",
- feet="Gleti's Boots",})
- -- Custom melee group: High Haste (2x March or Haste)
- sets.engaged.HighHaste = {ammo="Aurgelmir Orb +1",
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body="Gleti's Cuirass",
- hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- legs="Gleti's Breeches",
- feet="Malignance Boots",
- neck="Etoile Gorget +2",
- waist="Sailfi Belt +1",
- left_ear="Telos Earring",
- right_ear="Sherida Earring",
- left_ring="Gere Ring",
- right_ring="Chirich Ring +1",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
- sets.engaged.Fodder.HighHaste = set_combine(sets.engaged.HighHaste, {})
- sets.engaged.Fodder.Evasion.HighHaste = set_combine(sets.engaged.HighHaste, {})
- sets.engaged.Acc.HighHaste = set_combine(sets.engaged.HighHaste, {})
- sets.engaged.Evasion.HighHaste = set_combine(sets.engaged.HighHaste, {})
- sets.engaged.Acc.Evasion.HighHaste = set_combine(sets.engaged.HighHaste.Evasion, {})
- sets.engaged.PDT.HighHaste = set_combine(sets.engaged.HighHaste, {head="Malignance Chapeau",
- hands={ name="Gleti's Gauntlets", augments={'Path: A',}},
- left_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
- right_ring="Moonlight Ring",})
- sets.engaged.Acc.PDT.HighHaste = set_combine(sets.engaged.HighHaste.PDT, {})
- -- Custom melee group: Max Haste (2x March + Haste)
- sets.engaged.MaxHaste = {ammo="Aurgelmir Orb +1",
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body="Gleti's Cuirass",
- hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- legs="Gleti's Breeches",
- feet="Malignance Boots",
- neck="Etoile Gorget +2",
- waist="Sailfi Belt +1",
- left_ear="Telos Earring",
- right_ear="Sherida Earring",
- left_ring="Gere Ring",
- right_ring="Chirich Ring +1",
- back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
- -- Getting Marches+Haste from Trust NPCs, doesn't cap delay.
- sets.engaged.Fodder.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
- sets.engaged.Fodder.Evasion.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
- sets.engaged.Acc.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
- sets.engaged.Evasion.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
- sets.engaged.Acc.Evasion.MaxHaste = set_combine(sets.engaged.MaxHaste.Evasion, {})
- sets.engaged.PDT.MaxHaste = set_combine(sets.engaged.MaxHaste, {head="Malignance Chapeau",
- hands={ name="Gleti's Gauntlets", augments={'Path: A',}},
- left_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
- right_ring="Moonlight Ring",})
- sets.engaged.Acc.PDT.MaxHaste = set_combine(sets.engaged.MaxHaste.PDT, {})
- -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
- sets.buff['Saber Dance'] = {legs="Horos Tights +3"}
- sets.buff['Climactic Flourish'] = {head="Maculele Tiara +2"}
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks for standard casting events.
- -------------------------------------------------------------------------------------------------------------------
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
- function job_precast(spell, action, spellMap, eventArgs)
- --auto_presto(spell)
- end
- function job_post_precast(spell, action, spellMap, eventArgs)
- if spell.type == "WeaponSkill" then
- if state.Buff['Climactic Flourish'] then
- equip(sets.buff['Climactic Flourish'])
- end
- if state.SkillchainPending.value == true then
- equip(sets.precast.Skillchain)
- end
- end
- end
- -- Return true if we handled the aftercast work. Otherwise it will fall back
- -- to the general aftercast() code in Mote-Include.
- function job_aftercast(spell, action, spellMap, eventArgs)
- if not spell.interrupted then
- if spell.english == "Wild Flourish" then
- state.SkillchainPending:set()
- send_command('wait 5;gs c unset SkillchainPending')
- elseif spell.type:lower() == "weaponskill" then
- state.SkillchainPending:toggle()
- send_command('wait 6;gs c unset SkillchainPending')
- end
- 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 we gain or lose any haste buffs, adjust which gear set we target.
- if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
- determine_haste_group()
- handle_equipping_gear(player.status)
- elseif buff == 'Saber Dance' or buff == 'Climactic Flourish' then
- handle_equipping_gear(player.status)
- end
- end
- function job_status_change(new_status, old_status)
- if new_status == 'Engaged' then
- determine_haste_group()
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements standard library decisions.
- -------------------------------------------------------------------------------------------------------------------
- -- Called by the default 'update' self-command.
- function job_update(cmdParams, eventArgs)
- determine_haste_group()
- end
- function customize_idle_set(idleSet)
- if player.hpp < 80 and not areas.Cities:contains(world.area) then
- idleSet = set_combine(idleSet, sets.ExtraRegen)
- end
- return idleSet
- end
- function customize_melee_set(meleeSet)
- if state.DefenseMode.value ~= 'None' then
- if buffactive['saber dance'] then
- meleeSet = set_combine(meleeSet, sets.buff['Saber Dance'])
- end
- if state.Buff['Climactic Flourish'] then
- meleeSet = set_combine(meleeSet, sets.buff['Climactic Flourish'])
- end
- end
- return meleeSet
- end
- -- Handle auto-targetting based on local setup.
- function job_auto_change_target(spell, action, spellMap, eventArgs)
- if spell.type == 'Step' then
- if state.IgnoreTargetting.value == true then
- state.IgnoreTargetting:reset()
- eventArgs.handled = true
- end
- eventArgs.SelectNPCTargets = state.SelectStepTarget.value
- end
- end
- -- Function to display the current relevant user state when doing an update.
- -- Set eventArgs.handled to true if display was handled, and you don't want the default info shown.
- function display_current_job_state(eventArgs)
- local msg = 'Melee'
- if state.CombatForm.has_value then
- msg = msg .. ' (' .. state.CombatForm.value .. ')'
- end
- msg = msg .. ': '
- msg = msg .. state.OffenseMode.value
- if state.HybridMode.value ~= 'Normal' then
- msg = msg .. '/' .. state.HybridMode.value
- end
- msg = msg .. ', WS: ' .. state.WeaponskillMode.value
- if state.DefenseMode.value ~= 'None' then
- msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
- end
- if state.Kiting.value then
- msg = msg .. ', Kiting'
- end
- msg = msg .. ', ['..state.MainStep.current
- if state.UseAltStep.value == true then
- msg = msg .. '/'..state.AltStep.current
- end
- msg = msg .. ']'
- if state.SelectStepTarget.value == true then
- steps = steps..' (Targetted)'
- end
- add_to_chat(122, msg)
- eventArgs.handled = true
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User self-commands.
- -------------------------------------------------------------------------------------------------------------------
- -- Called for custom player commands.
- function job_self_command(cmdParams, eventArgs)
- if cmdParams[1] == 'step' then
- if cmdParams[2] == 't' then
- state.IgnoreTargetting:set()
- end
- local doStep = ''
- if state.UseAltStep.value == true then
- doStep = state[state.CurrentStep.current..'Step'].current
- state.CurrentStep:cycle()
- else
- doStep = state.MainStep.current
- end
- send_command('@input /ja "'..doStep..'" <t>')
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- function determine_haste_group()
- -- We have three groups of DW in gear: Charis body, Charis neck + DW earrings, and Patentia Sash.
- -- For high haste, we want to be able to drop one of the 10% groups (body, preferably).
- -- High haste buffs:
- -- 2x Marches + Haste
- -- 2x Marches + Haste Samba
- -- 1x March + Haste + Haste Samba
- -- Embrava + any other haste buff
- -- For max haste, we probably need to consider dropping all DW gear.
- -- Max haste buffs:
- -- Embrava + Haste/March + Haste Samba
- -- 2x March + Haste + Haste Samba
- classes.CustomMeleeGroups:clear()
- if buffactive.embrava and (buffactive.haste or buffactive.march) and buffactive['haste samba'] then
- classes.CustomMeleeGroups:append('MaxHaste')
- elseif buffactive.march == 2 and buffactive.haste and buffactive['haste samba'] then
- classes.CustomMeleeGroups:append('MaxHaste')
- elseif buffactive.embrava and (buffactive.haste or buffactive.march or buffactive['haste samba']) then
- classes.CustomMeleeGroups:append('HighHaste')
- elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
- classes.CustomMeleeGroups:append('HighHaste')
- elseif buffactive.march == 2 and (buffactive.haste or buffactive['haste samba']) then
- classes.CustomMeleeGroups:append('HighHaste')
- end
- end
- -- Select default macro book on initial load or subjob change.
- function select_default_macro_book()
- -- Default macro set/book
- if player.sub_job == 'WAR' then
- set_macro_page(1, 9)
- elseif player.sub_job == 'NIN' then
- set_macro_page(1, 9)
- elseif player.sub_job == 'SAM' then
- set_macro_page(1, 9)
- else
- set_macro_page(1, 9)
- end
- end
- -- Automatically use Presto for steps when it's available and we have less than 3 finishing moves
- function auto_presto(spell)
- if spell.type == 'Step' then
- local allRecasts = windower.ffxi.get_ability_recasts()
- local prestoCooldown = allRecasts[236]
- local under3FMs = not buffactive['Finishing Move 3'] and not buffactive['Finishing Move 4'] and not buffactive['Finishing Move 5']
- if player.main_job_level >= 77 and prestoCooldown < 1 and under3FMs then
- cast_delay(1.1)
- send_command('@input /ja "Presto" <me>')
- end
- end
- end
- function gearinfo(cmdParams, eventArgs)
- if cmdParams[1] == 'gearinfo' then
- if type(cmdParams[4]) == 'string' then
- if cmdParams[4] == 'true' then
- moving = true
- elseif cmdParams[4] == 'false' then
- moving = false
- end
- end
- if not midaction() then
- job_update()
- end
- end
- end
- function check_moving()
- if state.DefenseMode.value == 'None' and state.Kiting.value == false then
- if state.Auto_Kite.value == false and moving then
- state.Auto_Kite:set(true)
- elseif state.Auto_Kite.value == true and moving == false then
- state.Auto_Kite:set(false)
- end
- end
- end
- function check_gear()
- if no_swap_gear:contains(player.equipment.left_ring) then
- disable("left_ring")
- else
- enable("left_ring")
- end
- if no_swap_gear:contains(player.equipment.right_ring) then
- disable("right_ring")
- else
- enable("right_ring")
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment