Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Original: Motenten / Modified: Arislan
- -- Haste/DW Detection Requires Gearinfo Addon
- -------------------------------------------------------------------------------------------------------------------
- -- Keybinds
- -------------------------------------------------------------------------------------------------------------------
- -- Modes: [ F9 ] Cycle Offense Modes
- -- [ CTRL+F9 ] Cycle Hybrid Modes
- -- [ ALT+F9 ] Cycle Ranged Modes
- -- [ WIN+F9 ] Cycle Weapon Skill Modes
- -- [ F10 ] Emergency -PDT Mode
- -- [ ALT+F10 ] Toggle Kiting Mode
- -- [ F11 ] Emergency -MDT Mode
- -- [ F12 ] Update Current Gear / Report Current Status
- -- [ CTRL+F12 ] Cycle Idle Modes
- -- [ ALT+F12 ] Cancel Emergency -PDT/-MDT Mode
- -- [ WIN+C ] Toggle Capacity Points Mode
- -- [ WIN+` ] Toggle use of Luzaf Ring.
- -- [ WIN+Q ] Quick Draw shot mode selector.
- --
- -- Abilities: [ CTRL+- ] Quick Draw primary shot element cycle forward.
- -- [ CTRL+= ] Quick Draw primary shot element cycle backward.
- -- [ ALT+- ] Quick Draw secondary shot element cycle forward.
- -- [ ALT+= ] Quick Draw secondary shot element cycle backward.
- -- [ CTRL+[ ] Quick Draw toggle target type.
- -- [ CTRL+] ] Quick Draw toggle use secondary shot.
- --
- -- [ CTRL+C ] Crooked Cards
- -- [ CTRL+` ] Double-Up
- -- [ CTRL+X ] Fold
- -- [ CTRL+S ] Snake Eye
- -- [ CTRL+NumLock ] Triple Shot
- -- [ CTRL+Numpad/ ] Berserk
- -- [ CTRL+Numpad* ] Warcry
- -- [ CTRL+Numpad- ] Aggressor
- --
- -- Spells: [ WIN+, ] Utsusemi: Ichi
- -- [ WIN+. ] Utsusemi: Ni
- --
- -- Weapons: [ WIN+E/R ] Cycles between available Weapon Sets
- -- [ WIN+W ] Toggle Ranged Weapon Lock
- --
- -- WS: [ CTRL+Numpad7 ] Savage Blade
- -- [ CTRL+Numpad8 ] Last Stand
- -- [ CTRL+Numpad4 ] Leaden Salute
- -- [ CTRL+Numpad5 ] Requiescat
- -- [ CTRL+Numpad6 ] Wildfire
- -- [ CTRL+Numpad1 ] Aeolian Edge
- -- [ CTRL+Numpad2 ] Evisceration
- --
- -- RA: [ Numpad0 ] Ranged Attack
- --
- --
- -- (Global-Binds.lua contains additional non-job-related keybinds)
- -------------------------------------------------------------------------------------------------------------------
- -- Custom Commands (preface with /console to use these in macros)
- -------------------------------------------------------------------------------------------------------------------
- -- gs c qd Uses the currently configured shot on the target, with either <t> or
- -- <stnpc> depending on setting.
- -- gs c qd t Uses the currently configured shot on the target, but forces use of <t>.
- --
- -- gs c cycle mainqd Cycles through the available steps to use as the primary shot when using
- -- one of the above commands.
- -- gs c cycle altqd Cycles through the available steps to use for alternating with the
- -- configured main shot.
- -- gs c toggle usealtqd Toggles whether or not to use an alternate shot.
- -- gs c toggle selectqdtarget Toggles whether or not to use <stnpc> (as opposed to <t>) when using a shot.
- --
- -- gs c toggle LuzafRing Toggles use of Luzaf Ring on and off
- -------------------------------------------------------------------------------------------------------------------
- -- Setup functions for this job. Generally should not be modified.
- -------------------------------------------------------------------------------------------------------------------
- -- 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()
- -- QuickDraw Selector
- state.Mainqd = M{['description']='Primary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
- state.Altqd = M{['description']='Secondary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
- state.UseAltqd = M(false, 'Use Secondary Shot')
- state.SelectqdTarget = M(false, 'Select Quick Draw Target')
- state.IgnoreTargetting = M(false, 'Ignore Targetting')
- state.QDMode = M{['description']='Quick Draw Mode', 'STP', 'Enhance', 'Magic Attack','TH'}
- state.Currentqd = M{['description']='Current Quick Draw', 'Main', 'Alt'}
- -- Whether to use Luzaf's Ring
- state.LuzafRing = M(false, "Luzaf's Ring")
- -- Whether a warning has been given for low ammo
- state.warned = M(false)
- include('Mote-TreasureHunter')
- state.TreasureMode:set('Tag')
- no_swap_gear = S{"Warp Ring", "Dim. Ring (Dem)", "Dim. Ring (Holla)", "Dim. Ring (Mea)",
- "Trizek Ring", "Echad Ring", "Facility Ring", "Capacity Ring",
- "Dev. Bul. Pouch", "Chr. Bul. Pouch", "Liv. Bul. Pouch"}
- elemental_ws = S{"Aeolian Edge", "Leaden Salute", "Wildfire"}
- no_shoot_ammo = S{"Hauksbok Bullet"}
- define_roll_values()
- lockstyleset = 37
- 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', 'LowAcc', 'MidAcc', 'HighAcc', 'STP', 'EngagedShooting')
- state.HybridMode:options('Normal', 'DT', 'SubtleBlow', 'MeleeCrit')
- state.RangedMode:options('Normal', 'Acc', 'Critical', 'SubtleBlow')
- state.WeaponskillMode:options('Normal', 'Acc')
- state.IdleMode:options('Normal', 'HP') --'Refresh', 'DT'
- state.Gun = M{['description']='Current Gun', 'Death Penalty', 'Armageddon', 'Fomalhaut', 'Ataktos','Compensator'}
- -- state.CP = M(false, "Capacity Points Mode")
- state.WeaponLock = M(false, 'Weapon Lock')
- gear.RAbullet = "Chrono Bullet"
- gear.RAccbullet = "Devastating Bullet"
- gear.WSbullet = "Chrono Bullet"
- gear.MAbullet = "Living Bullet"
- gear.QDbullet = "Hauksbok Bullet"
- options.ammo_warning_limit = 10
- -- Additional local binds
- -- include('Global-Binds.lua') -- OK to remove this line
- -- include('Global-GEO-Binds.lua') -- OK to remove this line
- send_command('lua l gearinfo')
- -- send_command('bind @t gs c cycle treasuremode')
- send_command('bind !` input /ja "Bolter\'s Roll" <me>')
- send_command ('bind @` gs c toggle LuzafRing')
- send_command('bind ^- gs c cycleback mainqd')
- send_command('bind ^= gs c cycle mainqd')
- send_command('bind !- gs c cycle altqd')
- send_command('bind != gs c cycleback altqd')
- send_command('bind ^[ gs c toggle selectqdtarget')
- send_command('bind ^] gs c toggle usealtqd')
- -- send_command('bind @c gs c toggle CP')
- send_command('bind @q gs c cycle QDMode')
- send_command('bind @e gs c cycle Gun')
- send_command('bind @w gs c toggle WeaponLock')
- -- send_command('bind numpad0 input /ra <t>')
- select_default_macro_book()
- set_lockstyle()
- state.Auto_Kite = M(false, 'Auto_Kite')
- Haste = 0
- DW_needed = 0
- DW = false
- moving = false
- update_combat_form()
- determine_haste_group()
- end
- -- Called when this job file is unloaded (eg: job change)
- function user_unload()
- -- send_command('unbind @t')
- send_command('unbind !`')
- send_command('unbind @`')
- send_command('unbind ^-')
- send_command('unbind ^=')
- send_command('unbind !-')
- send_command('unbind !=')
- send_command('unbind ^[')
- send_command('unbind ^]')
- -- send_command('unbind @c')
- send_command('unbind @q')
- send_command('unbind @e')
- send_command('unbind @w')
- send_command('lua u gearinfo')
- end
- -- Define sets and vars used by this job file.
- function init_gear_sets()
- ------------------------------------------------------------------------------------------------
- ---------------------------------------- Precast Sets ------------------------------------------
- ------------------------------------------------------------------------------------------------
- sets.precast.JA['Double-Up'] = {legs="Lanun Trews +3"}
- sets.precast.JA['Snake Eye'] = {legs="Lanun Trews +3"}
- sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +3"}
- sets.precast.JA['Random Deal'] = {body="Lanun Frac +3"}
- sets.precast.JA['Triple Shot'] = {head="Oshosi Mask",
- body="Chasseur's Frac +3",
- hands="Oshosi Gloves",
- legs="Oshosi Trousers",
- feet="Oshosi Leggings",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},}
- sets.precast.CorsairRoll = {
- main={ name="Rostam", augments={'Path: C',}},
- head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
- body="Malignance Tabard",
- hands="Chasseur's Gants +3",
- legs={ name="Desultor Tassets", augments={'"Sic" and "Ready" ability delay -5','"Phantom Roll" ability delay -5',}},
- feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
- neck="Bathy Choker +1",
- --neck="Regal Necklace",
- waist="Plat. Mog. Belt",
- left_ear="Genmei Earring",
- right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
- left_ring="Defending Ring",
- right_ring="Luzaf's Ring",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},}
- sets.precast.CorsairRoll.Duration = {}
- sets.precast.CorsairRoll.LowerDelay = {back="Gunslinger's Cape"}
- sets.precast.CorsairRoll["Caster\'s Roll"] = {}
- sets.precast.CorsairRoll["Courser\'s Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chass. Bottes +3"})
- sets.precast.CorsairRoll["Blitzer\'s Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chass. Tricorne +3"})
- sets.precast.CorsairRoll["Tactician\'s Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +3"})
- sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +3"})
- sets.precast.LuzafRing = {ring1="Luzaf's Ring"}
- sets.precast.FoldDoubleBust = {hands="Lanun Gants +3"}
- sets.precast.Waltz = {
- body="Passion Jacket",
- ring1="Asklepian Ring",
- waist="Gishdubar Sash",
- }
- sets.precast.Waltz['Healing Waltz'] = {}
- sets.precast.FC = {head={ name="Carmine Mask +1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
- body={ name="Adhemar Jacket +1", augments={'HP+105','"Fast Cast"+10','Magic dmg. taken -4',}},
- hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
- legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
- feet={ name="Carmine Greaves +1", augments={'Accuracy+12','DEX+12','MND+20',}},
- neck="Incantor's Torque",
- waist="Plat. Mog. Belt",
- left_ear="Loquac. Earring",
- right_ear="Enchntr. Earring +1",
- left_ring="Rahab ring",
- right_ring="Kishar Ring",
- back="Moonlight Cape",
- }
- sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
- body="Passion Jacket",
- neck="Magoraga Beads",
- })
- -- (10% Snapshot from JP Gifts)
- sets.precast.RA = {head="Chass. Tricorne +3",
- body="Oshosi Vest",
- hands={ name="Lanun Gants +3", augments={'Enhances "Fold" effect',}},
- legs={ name="Adhemar Kecks +1", augments={'AGI+12','"Rapid Shot"+13','Enmity-6',}},
- feet="Meg. Jam. +2",
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Impulse Belt",
- left_ear="Odnowa Earring",
- right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
- left_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
- right_ring="Regal Ring",
- back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},
- }
- sets.precast.RA.Flurry1 = set_combine(sets.precast.RA, {head="Chass. Tricorne +3",
- body="Laksa. Frac +3",
- hands="Lanun Gants +3",
- legs={ name="Adhemar Kecks +1", augments={'AGI+12','"Rapid Shot"+13','Enmity-6',}},
- feet="Meg. Jam. +2",
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Impulse Belt",
- back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},})
- sets.precast.RA.Flurry2 = set_combine(sets.precast.RA, {head="Chass. Tricorne +3",
- body="Laksa. Frac +3",
- hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
- legs={ name="Adhemar Kecks +1", augments={'AGI+12','"Rapid Shot"+13','Enmity-6',}},
- feet="Meg. Jam. +2",
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Impulse Belt",
- back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},})
- ------------------------------------------------------------------------------------------------
- ------------------------------------- Weapon Skill Sets ----------------------------------------
- ------------------------------------------------------------------------------------------------
- sets.precast.WS = {
- ammo=gear.WSbullet,
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body="Laksa. Frac +3",
- hands="Meg. Gloves +2",
- legs="Malignance Tights",
- feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
- neck="Fotia Gorget",
- waist="Fotia Belt",
- left_ear="Ishvara Earring",
- right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
- left_ring="Cornelia's Ring",
- right_ring="Regal Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
- }
- sets.precast.WS.Acc = set_combine(sets.precast.WS, {
- feet="Meg. Jam. +2",
- ear2="Telos Earring",
- neck="Iskur Gorget",
- ring2="Hajduk Ring +1",
- waist="Eschan Stone",
- })
- sets.precast.WS['Last Stand'] = {ammo=gear.WSbullet,
- head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
- body="Laksa. Frac +3",
- hands="Chasseur's Gants +3",
- legs={ name="Nyame Flanchard", augments={'Path: B',}},
- feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
- neck="Fotia Gorget",
- waist="Fotia Belt",
- left_ear="Ishvara Earring",
- right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
- left_ring="Epaminondas's Ring",
- right_ring="Cornelia's Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','AGI+10','Weapon skill damage +10%',}},}
- sets.precast.WS['Last Stand'].Acc = set_combine(sets.precast.WS['Last Stand'], {
- feet="Meg. Jam. +2",
- neck="Iskur Gorget",
- ear2="Telos Earring",
- ring2="Hajduk Ring +1",
- waist="Eschan Stone",
- })
- sets.precast.WS['Wildfire'] = {
- ammo=gear.MAbullet,
- head="Nyame Helm",
- body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
- hands="Chasseur's Gants +3",
- legs="Nyame Flanchard",
- feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Skrymir Cord +1",
- left_ear="Friomisi Earring",
- right_ear="Ishvara Earring",
- left_ring="Cornelia's Ring",
- right_ring="Epaminondas's Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
- }
- sets.precast.WS['Hot Shot'] = sets.precast.WS['Wildfire']
- sets.precast.WS['Leaden Salute'] = {ammo=gear.MAbullet,
- head="Pixie Hairpin +1",
- body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
- hands="Nyame Gauntlets",
- legs="Nyame Flanchard",
- feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Orpheus's Sash",
- left_ear="Friomisi Earring",
- right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
- left_ring="Cornelia's Ring",
- right_ring="Archon Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},}
- sets.precast.WS['Leaden Salute'].Acc = {ammo=gear.MAbullet,
- head="Pixie Hairpin +1",
- body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
- hands="Nyame Gauntlets",
- legs="Nyame Flanchard",
- feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Orpheus's Sash",
- left_ear="Friomisi Earring",
- right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
- left_ring="Cornelia's Ring",
- right_ring="Archon Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},}
- sets.precast.WS['Evisceration'] = {
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body="Meg. Cuirie +2",
- hands="Chasseur's Gants +3",
- legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
- feet="Mummu Gamash. +2",
- neck="Fotia Gorget",
- waist="Fotia Belt",
- left_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
- right_ear="Odr Earring",
- left_ring="Mummu Ring",
- right_ring="Regal Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
- }
- sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {
- head="Mummu Bonnet +2",
- legs="Mummu Kecks +2",
- })
- sets.precast.WS['Savage Blade'] = {head={ name="Nyame Helm", augments={'Path: B',}},
- body="Laksa. Frac +3",
- hands="Chasseur's Gants +3",
- legs={ name="Nyame Flanchard", augments={'Path: B',}},
- feet={ name="Nyame Sollerets", augments={'Path: B',}},
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist={ name="Sailfi Belt +1", augments={'Path: A',}},
- left_ear="Ishvara Earring",
- right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
- left_ring="Epaminondas's Ring",
- right_ring="Cornelia's Ring",
- back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
- }
- sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {
- body="Meg. Cuirie +2",
- ear2="Telos Earring",
- ring2="Rufescent Ring",
- waist="Kentarch belt +1",
- })
- sets.precast.WS['Circle Blade'] = sets.precast.WS['Savage Blade']
- sets.precast.WS['Swift Blade'] = {}
- sets.precast.WS['Swift Blade'].Acc = {}
- sets.precast.WS['Requiescat'] = {}
- sets.precast.WS['Requiescat'].Acc = {}
- sets.precast.WS['Aeolian Edge'] = {ammo=gear.MAbullet,
- head={ name="Nyame Helm", augments={'Path: B',}},
- body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
- hands={ name="Nyame Gauntlets", augments={'Path: B',}},
- legs={ name="Nyame Flanchard", augments={'Path: B',}},
- feet={ name="Nyame Sollerets", augments={'Path: B',}},
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Orpheus's Sash",
- left_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
- right_ear="Friomisi Earring",
- left_ring="Epaminondas's Ring",
- right_ring="Cornelia's Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}}}
- sets.precast.WS['Last Start'] = {main={ name="Rostam", augments={'Path: A',}},}
- ------------------------------------------------------------------------------------------------
- ---------------------------------------- Midcast Sets ------------------------------------------
- ------------------------------------------------------------------------------------------------
- sets.midcast.FastRecast = sets.precast.FC
- sets.midcast.SpellInterrupt = {
- legs="Carmine Cuisses +1", --20
- ring1="Evanescence Ring", --5
- }
- sets.midcast.Cure = {}
- sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
- sets.midcast.CorsairShot = {
- ammo=gear.QDbullet,
- head={ name="Ikenga's Hat", augments={'Path: A',}},
- body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
- hands="Chasseur's Gants +3",
- legs={ name="Nyame Flanchard", augments={'Path: B',}},
- feet="Chass. Bottes +3",
- neck="Baetyl Pendant",
- waist="Skrymir Cord +1",
- left_ear="Friomisi Earring",
- right_ear="Novio Earring",
- left_ring="Dingir Ring",
- right_ring="Crepuscular Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}}
- }
- sets.midcast.CorsairShot.STP = {
- ammo=gear.QDbullet,
- head="Ikenga's Hat",
- body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
- hands="Chasseur's Gants +3",
- legs={ name="Nyame Flanchard", augments={'Path: B',}},
- feet="Chass. Bottes +3",
- neck="Baetyl Pendant",
- waist="Skrymir Cord +1",
- left_ear="Friomisi Earring",
- right_ear="Novio Earring",
- left_ring="Dingir Ring",
- right_ring="Crepuscular Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
- }
- sets.midcast.CorsairShot.TH = {head="Volte Cap", legs="Volte hose", hands="Volte Bracers",feet="Volte boots",}
- sets.midcast.CorsairShot['Light Shot'] = {
- ammo=gear.MAbullet,
- head="Ikenga's Hat",
- body="Malignance Tabard",
- hands="Malignance Gloves",
- legs="Malignance Tights",
- feet="Chass. Bottes +3",
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Skrymir Cord +1",
- left_ear="Digni. Earring",
- right_ear="Crep. Earring",
- left_ring="Stikini Ring +1",
- right_ring="Crepuscular Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
- }
- sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
- sets.midcast.CorsairShot.Enhance = {feet="Chass. Bottes +3"}
- -- Ranged gear
- sets.midcast.RA = {
- ammo=gear.RAbullet,
- head="Ikenga's Hat",
- body="Malignance Tabard",
- hands="Malignance Gloves",
- legs="Ikenga's Trousers",
- feet="Meg. Jam. +2",
- neck="Iskur Gorget",
- waist="Reiki Yotai",
- left_ear="Telos Earring",
- right_ear="Digni. Earring",
- left_ring="Crepuscular Ring",
- right_ring="Ilabrat Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10','Phys. dmg. taken-10%',}},}
- sets.midcast.RA.Acc = set_combine(sets.midcast.RA, {
- ammo=gear.RAccbullet,
- body="Laksa. Frac +3",
- legs="Malignance Tights",
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Eschan Stone",
- right_ear="Beyla Earring",
- right_ring="Cacoethic Ring +1"})
- sets.midcast.RA.Critical = set_combine(sets.midcast.RA, {
- head="Meghanada Visor +2",
- body="Meg. Cuirie +2",
- hands="Chasseur's Gants +3",
- legs="Darraigner's Brais",
- feet="Osh. Leggings",
- neck="Iskur Gorget",
- waist="Gerdr Belt",
- left_ear="Odr Earring",
- right_ear="Telos Earring",
- left_ring="Mummu Ring",
- right_ring="Begrudging Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','Crit.hit rate+10',}},
- })
- sets.TripleShot = {body="Chasseur's Frac +3",hands="Oshosi Gloves",head="Oshosi mask",legs="Oshosi Trousers", feet="Oshosi Leggings"}
- sets.TripleShotCritical = {
- head="Meghanada Visor +2",
- waist="Gerdr Belt",
- }
- sets.midcast.RA.SubtleBlow = set_combine(sets.midcast.RA,
- {head="Volte Tiara",
- hands="Volte Mittens",
- legs="Volte Tights",
- left_ear="Beyla Earring",
- })
- ------------------------------------------------------------------------------------------------
- ----------------------------------------- Idle Sets --------------------------------------------
- ------------------------------------------------------------------------------------------------
- sets.resting = {}
- sets.idle = {ammo=gear.WSbullet,
- head="Nyame Helm",
- body="Malignance Tabard",
- hands="Nyame Gauntlets",
- legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
- feet="Nyame Sollerets",
- neck="Bathy Choker +1",
- waist="Plat. Mog. Belt",
- left_ear="Suppanomimi",
- right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
- left_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
- right_ring="Paguroidea Ring",
- back="Moonlight Cape",
- }
- sets.idle.DT = sets.idle
- -- sets.idle.Refresh = set_combine{}
- sets.idle.Town = set_combine(sets.idle,{waist="Skrymir Cord +1", right_ear="Balder Earring +1"})
- ------------------------------------------------------------------------------------------------
- ---------------------------------------- Defense Sets ------------------------------------------
- ------------------------------------------------------------------------------------------------
- sets.defense.PDT = sets.idle.DT
- sets.defense.MDT = sets.idle.DT
- sets.Kiting = {legs="Carmine Cuisses +1"}
- ------------------------------------------------------------------------------------------------
- ---------------------------------------- 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
- sets.engaged = {
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- 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="Iskur Gorget",
- waist={ name="Sailfi Belt +1", augments={'Path: A',}},
- left_ear="Suppanomimi",
- right_ear="Balder Earring +1",
- left_ring="Petrov Ring",
- right_ring="Epona's Ring",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
- }
- sets.engaged.LowAcc = set_combine(sets.engaged, {nrck="Lissome Necklace"
- })
- sets.engaged.MidAcc = set_combine(sets.engaged.LowAcc, {
- right_ear="Telos Earring",
- waist="Kentarch Belt +1",
- })
- sets.engaged.HighAcc = set_combine(sets.engaged.MidAcc, {
- head="Blistering Sallet +1",
- left_ring="Chirich Ring +1",
- right_ring="Chirich Ring +1",
- legs="Meg. Chausses +2",})
- sets.engaged.STP = set_combine(sets.engaged, {
- feet="Carmine Greaves +1",
- ring1={name="Chirich Ring +1", bag="wardrobe3"},
- ring2={name="Chirich Ring +1", bag="wardrobe4"},
- })
- sets.engaged.EngagedShooting={head="Malignance Chapeau",
- body="Malignance Tabard",
- hands="Malignance Gloves",
- legs="Malignance Tights",
- feet="Malignance Boots",
- neck="Loricate Torque +1",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Sanare Earring",
- left_ring="Vocane Ring +1",
- right_ring="Defending Ring",
- back="Moonlight Cape",
- }
- -- * DNC Subjob DW Trait: +15%
- -- * NIN Subjob DW Trait: +25%
- -- No Magic Haste (74% DW to cap)
- sets.engaged.DW = {
- ammo=gear.RAbullet,
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- 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="Iskur Gorget",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Balder Earring +1",
- left_ring="Epona's Ring",
- right_ring="Hetairoi Ring",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
- } -- 48%
- sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, {
- neck="Lissome Necklace",
- legs="Malignance Tights",
- })
- sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW.LowAcc, {
- waist="Kentarch Belt +1",
- right_ear="Telos Earring"
- })
- sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW.MidAcc, {
- head="Blistering Sallet +1",
- left_ring="Chirich Ring +1",
- right_ring="Chirich Ring +1",
- })
- sets.engaged.DW.STP = set_combine(sets.engaged.DW, {
- feet="Carmine Greaves +1",
- ring1={name="Chirich Ring +1", bag="wardrobe3"},
- ring2={name="Chirich Ring +1", bag="wardrobe4"},
- })
- sets.engaged.DW.EngagedShooting={head="Malignance Chapeau",
- body="Malignance Tabard",
- hands="Malignance Gloves",
- legs="Malignance Tights",
- feet="Malignance Boots",
- --neck="Loricate Torque +1",
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Sanare Earring",
- left_ring="Vocane Ring +1",
- right_ring="Defending Ring",
- back="Moonlight Cape",
- }
- -- 15% Magic Haste (67% DW to cap)
- sets.engaged.DW.LowHaste = {
- ammo=gear.RAbullet,
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- 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="Iskur Gorget",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Balder Earring +1",
- left_ring="Epona's Ring",
- right_ring="Hetairoi Ring",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
- }
- sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, {
- legs="Malignance Tights",
- neck="Lissome Necklace"
- })
- sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, {
- right_ear="Telos Earring",
- waist="Kentarch Belt +1",
- })
- sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, {
- head="Blistering Sallet +1",
- left_ring="Chirich Ring +1",
- right_ring="Chirich Ring +1",
- })
- sets.engaged.DW.STP.LowHaste = set_combine(sets.engaged.DW.LowHaste, {
- feet="Carmine Greaves +1",
- ring1={name="Chirich Ring +1", bag="wardrobe3"},
- ring2={name="Chirich Ring +1", bag="wardrobe4"},
- })
- sets.engaged.DW.EngagedShooting.LowHaste={head="Malignance Chapeau",
- body="Malignance Tabard",
- hands="Malignance Gloves",
- legs="Malignance Tights",
- feet="Malignance Boots",
- --neck="Loricate Torque +1",
- neck={ name="Comm. Charm +2", augments={'Path: A',}},
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Sanare Earring",
- left_ring="Vocane Ring +1",
- right_ring="Defending Ring",
- back="Moonlight Cape",
- }
- -- 30% Magic Haste (56% DW to cap)
- sets.engaged.DW.MidHaste = {
- ammo=gear.RAbullet,
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- 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="Lissome Necklace",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Balder Earring +1",
- left_ring="Epona's Ring",
- right_ring="Hetairoi Ring",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
- } -- 31%
- sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, {
- legs="Malignance Tights",
- neck="Lissome Necklace"
- })
- sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, {
- right_ear="Telos Earring",
- waist="Kentarch Belt +1",
- })
- sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, {
- head="Blistering Sallet +1",
- left_ring="Chirich Ring +1",
- right_ring="Chirich Ring +1",
- })
- sets.engaged.DW.STP.MidHaste = set_combine(sets.engaged.DW.MidHaste, {
- feet="Carmine Greaves +1",
- ring1={name="Chirich Ring +1", bag="wardrobe3"},
- ring2={name="Chirich Ring +1", bag="wardrobe4"},
- })
- sets.engaged.DW.EngagedShooting.MidHaste={head="Malignance Chapeau",
- body="Malignance Tabard",
- hands="Malignance Gloves",
- legs="Malignance Tights",
- feet="Malignance Boots",
- neck="Loricate Torque +1",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Sanare Earring",
- left_ring="Vocane Ring +1",
- right_ring="Defending Ring",
- back="Moonlight Cape",
- }
- -- 35% Magic Haste (51% DW to cap)
- sets.engaged.DW.HighHaste = {
- ammo=gear.RAbullet,
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- 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="Lissome Necklace",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Balder Earring +1",
- left_ring="Epona's Ring",
- right_ring="Hetairoi Ring",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
- }
- sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, {
- legs="Malignance Tights",
- neck="Lissome Necklace"
- })
- sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, {
- right_ear="Telos Earring",
- waist="Kentarch Belt +1",
- })
- sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, {
- head="Blistering Sallet +1",
- left_ring="Chirich Ring +1",
- right_ring="Chirich Ring +1",
- })
- sets.engaged.DW.STP.HighHaste = set_combine(sets.engaged.DW.HighHaste, {
- feet="Carmine Greaves +1",
- ring1={name="Chirich Ring +1", bag="wardrobe3"},
- ring2={name="Chirich Ring +1", bag="wardrobe4"},
- })
- sets.engaged.DW.EngagedShooting.HighHaste={head="Malignance Chapeau",
- body="Malignance Tabard",
- hands="Malignance Gloves",
- legs="Malignance Tights",
- feet="Malignance Boots",
- neck="Loricate Torque +1",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Sanare Earring",
- left_ring="Vocane Ring +1",
- right_ring="Defending Ring",
- back="Moonlight Cape",
- }
- -- 45% Magic Haste (36% DW to cap)
- sets.engaged.DW.MaxHaste = {
- ammo=gear.RAbullet,
- head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- 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="Lissome Necklace",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Balder Earring +1",
- left_ring="Epona's Ring",
- right_ring="Hetairoi Ring",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},} -- 11%
- sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, {
- legs="Malignance Tights",
- neck="Lissome Necklace"
- })
- sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, {
- right_ear="Telos Earring",
- waist="Kentarch Belt +1",
- })
- sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {
- head="Blistering Sallet +1",
- left_ring="Chirich Ring +1",
- right_ring="Chirich Ring +1",
- })
- sets.engaged.DW.STP.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, {
- feet="Carmine Greaves +1",
- ring1={name="Chirich Ring +1", bag="wardrobe3"},
- ring2={name="Chirich Ring +1", bag="wardrobe4"},
- })
- sets.engaged.DW.EngagedShooting.MaxHaste={head="Malignance Chapeau",
- body="Malignance Tabard",
- hands="Malignance Gloves",
- legs="Malignance Tights",
- feet="Malignance Boots",
- neck="Loricate Torque +1",
- waist="Windbuffet Belt +1",
- left_ear="Suppanomimi",
- right_ear="Sanare Earring",
- left_ring="Vocane Ring +1",
- right_ring="Defending Ring",
- back="Moonlight Cape",
- }
- sets.engaged.DW.MaxHastePlus = set_combine(sets.engaged.DW.MaxHaste, {back="Moonlight Cape"})
- sets.engaged.DW.LowAcc.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHaste, {back="Moonlight Cape"})
- sets.engaged.DW.MidAcc.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {back="Moonlight Cape"})
- sets.engaged.DW.HighAcc.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHaste, {back="Moonlight Cape"})
- sets.engaged.DW.STP.MaxHastePlus = set_combine(sets.engaged.DW.STP.MaxHaste, {back="Moonlight Cape"})
- ------------------------------------------------------------------------------------------------
- ---------------------------------------- Hybrid Sets -------------------------------------------
- ------------------------------------------------------------------------------------------------
- sets.engaged.Hybrid = {head={ name="Nyame Helm", augments={'Path: B',}},
- body="Malignance Tabard",
- hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
- legs="Malignance Tights",
- feet="Malignance Boots",
- neck="Lissome Necklace",
- waist="Reiki Yotai",
- left_ear="Suppanomimi",
- right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
- left_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
- right_ring="Chirich Ring +1",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
- sets.engaged.MCrit = {head="Mummu Bonnet +2",
- body="Mummu Jacket +2",
- hands="Mummu Wrists +2",
- legs="Mummu Kecks +2",
- feet="Mummu Gamash. +2",
- neck="Combatant's Torque",
- waist="Windbuffet Belt +1",
- left_ear="Mache Earring +1",
- right_ear="Mache Earring +1",
- left_ring="Mummu Ring",
- right_ring="Ramuh Ring +1",
- back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10',}},
- }
- sets.engaged.Subtle = {
- left_ring="Chirich Ring +1",
- right_ring="Chirich Ring +1",
- neck="Bathy Choker +1",
- }
- sets.engaged.DT = set_combine(sets.engaged, sets.engaged.Hybrid)
- sets.engaged.LowAcc.DT = set_combine(sets.engaged.LowAcc, sets.engaged.Hybrid)
- sets.engaged.MidAcc.DT = set_combine(sets.engaged.MidAcc, sets.engaged.Hybrid)
- sets.engaged.HighAcc.DT = set_combine(sets.engaged.HighAcc, sets.engaged.Hybrid)
- sets.engaged.STP.DT = set_combine(sets.engaged.STP, sets.engaged.Hybrid)
- sets.engaged.SubtleBlow = set_combine(sets.engaged, sets.engaged.Subtle)
- sets.engaged.LowAcc.SubtleBlow = set_combine(sets.engaged.LowAcc, sets.engaged.Subtle)
- sets.engaged.MidAcc.SubtleBlow = set_combine(sets.engaged.MidAcc, sets.engaged.Subtle)
- sets.engaged.HighAcc.SubtleBlow = set_combine(sets.engaged.HighAcc, sets.engaged.Subtle)
- sets.engaged.STP.SubtleBlow = set_combine(sets.engaged.STP, sets.engaged.Subtle)
- sets.engaged.MeleeCrit = set_combine(sets.engaged, sets.engaged.MCrit)
- sets.engaged.LowAcc.MeleeCrit = set_combine(sets.engaged.LowAcc, sets.engaged.MCrit)
- sets.engaged.MidAcc.MeleeCrit = set_combine(sets.engaged.MidAcc, sets.engaged.MCrit)
- sets.engaged.HighAcc.MeleeCrit = set_combine(sets.engaged.HighAcc, sets.engaged.MCrit)
- sets.engaged.STP.MeleeCrit = set_combine(sets.engaged.STP, sets.engaged.MCrit)
- sets.engaged.DW.DT = set_combine(sets.engaged.DW, sets.engaged.Hybrid)
- sets.engaged.DW.LowAcc.DT = set_combine(sets.engaged.DW.LowAcc, sets.engaged.Hybrid)
- sets.engaged.DW.MidAcc.DT = set_combine(sets.engaged.DW.MidAcc, sets.engaged.Hybrid)
- sets.engaged.DW.HighAcc.DT = set_combine(sets.engaged.DW.HighAcc, sets.engaged.Hybrid)
- sets.engaged.DW.STP.DT = set_combine(sets.engaged.DW.STP, sets.engaged.Hybrid)
- sets.engaged.DW.SubtleBlow = set_combine(sets.engaged.DW, sets.engaged.Subtle)
- sets.engaged.DW.LowAcc.SubtleBlow = set_combine(sets.engaged.DW.LowAcc, sets.engaged.Subtle)
- sets.engaged.DW.MidAcc.SubtleBlow = set_combine(sets.engaged.DW.MidAcc, sets.engaged.Subtle)
- sets.engaged.DW.HighAcc.SubtleBlow = set_combine(sets.engaged.DW.HighAcc, sets.engaged.Subtle)
- sets.engaged.DW.STP.SubtleBlow = set_combine(sets.engaged.DW.STP, sets.engaged.Subtle)
- sets.engaged.DW.MeleeCrit = set_combine(sets.engaged.DW, sets.engaged.MCrit)
- sets.engaged.DW.LowAcc.MeleeCrit = set_combine(sets.engaged.DW.LowAcc, sets.engaged.MCrit)
- sets.engaged.DW.MidAcc.MeleeCrit = set_combine(sets.engaged.DW.MidAcc, sets.engaged.MCrit)
- sets.engaged.DW.HighAcc.MeleeCrit = set_combine(sets.engaged.DW.HighAcc, sets.engaged.MCrit)
- sets.engaged.DW.STP.MeleeCrit = set_combine(sets.engaged.DW.STP, sets.engaged.MCrit)
- sets.engaged.DW.DT.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Hybrid)
- sets.engaged.DW.LowAcc.DT.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.Hybrid)
- sets.engaged.DW.MidAcc.DT.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.Hybrid)
- sets.engaged.DW.HighAcc.DT.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.Hybrid)
- sets.engaged.DW.STP.DT.LowHaste = set_combine(sets.engaged.DW.STP.LowHaste, sets.engaged.Hybrid)
- sets.engaged.DW.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Subtle)
- sets.engaged.DW.LowAcc.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.Subtle)
- sets.engaged.DW.MidAcc.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.Subtle)
- sets.engaged.DW.HighAcc.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.Subtle)
- sets.engaged.DW.STP.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.STP.LowHaste, sets.engaged.Subtle)
- sets.engaged.DW.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.MCrit)
- sets.engaged.DW.LowAcc.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.MCrit)
- sets.engaged.DW.MidAcc.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.MCrit)
- sets.engaged.DW.HighAcc.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.MCrit)
- sets.engaged.DW.STP.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.STP.LowHaste, sets.engaged.MCrit)
- sets.engaged.DW.DT.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Hybrid)
- sets.engaged.DW.LowAcc.DT.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.Hybrid)
- sets.engaged.DW.MidAcc.DT.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.Hybrid)
- sets.engaged.DW.HighAcc.DT.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.Hybrid)
- sets.engaged.DW.STP.DT.MidHaste = set_combine(sets.engaged.DW.STP.MidHaste, sets.engaged.Hybrid)
- sets.engaged.DW.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Subtle)
- sets.engaged.DW.LowAcc.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.Subtle)
- sets.engaged.DW.MidAcc.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.Subtle)
- sets.engaged.DW.HighAcc.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.Subtle)
- sets.engaged.DW.STP.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.STP.MidHaste, sets.engaged.Subtle)
- sets.engaged.DW.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.MCrit)
- sets.engaged.DW.LowAcc.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.MCrit)
- sets.engaged.DW.MidAcc.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.MCrit)
- sets.engaged.DW.HighAcc.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.MCrit)
- sets.engaged.DW.STP.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.STP.MidHaste, sets.engaged.MCrit)
- sets.engaged.DW.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Hybrid)
- sets.engaged.DW.LowAcc.DT.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.Hybrid)
- sets.engaged.DW.MidAcc.DT.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.Hybrid)
- sets.engaged.DW.HighAcc.DT.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.Hybrid)
- sets.engaged.DW.STP.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste.STP, sets.engaged.Hybrid)
- sets.engaged.DW.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Subtle)
- sets.engaged.DW.LowAcc.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.Subtle)
- sets.engaged.DW.MidAcc.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.Subtle)
- sets.engaged.DW.HighAcc.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.Subtle)
- sets.engaged.DW.STP.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.HighHaste.STP, sets.engaged.Subtle)
- sets.engaged.DW.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.MCrit)
- sets.engaged.DW.LowAcc.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.MCrit)
- sets.engaged.DW.MidAcc.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.MCrit)
- sets.engaged.DW.HighAcc.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.MCrit)
- sets.engaged.DW.STP.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.HighHaste.STP, sets.engaged.MCrit)
- sets.engaged.DW.DT.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.Hybrid)
- sets.engaged.DW.LowAcc.DT.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.Hybrid)
- sets.engaged.DW.MidAcc.DT.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.Hybrid)
- sets.engaged.DW.HighAcc.DT.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.Hybrid)
- sets.engaged.DW.STP.DT.MaxHaste = set_combine(sets.engaged.DW.STP.MaxHaste, sets.engaged.Hybrid)
- sets.engaged.DW.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.Subtle)
- sets.engaged.DW.LowAcc.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.Subtle)
- sets.engaged.DW.MidAcc.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.Subtle)
- sets.engaged.DW.HighAcc.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.Subtle)
- sets.engaged.DW.STP.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.STP.MaxHaste, sets.engaged.Subtle)
- sets.engaged.DW.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.MCrit)
- sets.engaged.DW.LowAcc.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.MCrit)
- sets.engaged.DW.MidAcc.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.MCrit)
- sets.engaged.DW.HighAcc.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.MCrit)
- sets.engaged.DW.STP.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.STP.MaxHaste, sets.engaged.MCrit)
- sets.engaged.DW.DT.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.Hybrid)
- sets.engaged.DW.LowAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHastePlus, sets.engaged.Hybrid)
- sets.engaged.DW.MidAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHastePlus, sets.engaged.Hybrid)
- sets.engaged.DW.HighAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHastePlus, sets.engaged.Hybrid)
- sets.engaged.DW.STP.DT.MaxHastePlus = set_combine(sets.engaged.DW.STP.MaxHastePlus, sets.engaged.Hybrid)
- sets.engaged.DW.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.Subtle)
- sets.engaged.DW.LowAcc.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHastePlus, sets.engaged.Subtle)
- sets.engaged.DW.MidAcc.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHastePlus, sets.engaged.Subtle)
- sets.engaged.DW.HighAcc.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHastePlus, sets.engaged.Subtle)
- sets.engaged.DW.STP.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.STP.MaxHastePlus, sets.engaged.Subtle)
- sets.engaged.DW.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.MCrit)
- sets.engaged.DW.LowAcc.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHastePlus, sets.engaged.MCrit)
- sets.engaged.DW.MidAcc.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHastePlus, sets.engaged.MCrit)
- sets.engaged.DW.HighAcc.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHastePlus, sets.engaged.MCrit)
- sets.engaged.DW.STP.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.STP.MaxHastePlus, sets.engaged.MCrit)
- ------------------------------------------------------------------------------------------------
- ---------------------------------------- Special Sets ------------------------------------------
- ------------------------------------------------------------------------------------------------
- sets.buff.Doom = {waist="Gishdubar Sash"}
- sets.FullTP = {ear1="Crematio Earring"}
- sets.Obi = {waist="Hachirin-no-Obi"}
- -- sets.CP = {back="Mecisto. Mantle"}
- --sets.Reive = {neck="Ygnas's Resolve +1"}
- sets.TreasureHunter = {head="Volte Cap",
- body="Volte Jupon",
- feet="Volte Boots"}
- 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)
- -- Check that proper ammo is available if we're using ranged attacks or similar.
- if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
- do_bullet_checks(spell, spellMap, eventArgs)
- end
- -- Gear
- if spell.english == 'Fold' and buffactive['Bust'] == 2 then
- if sets.precast.FoldDoubleBust then
- equip(sets.precast.FoldDoubleBust)
- eventArgs.handled = true
- end
- end
- if spellMap == 'Utsusemi' then
- if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
- cancel_spell()
- add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
- eventArgs.handled = true
- return
- elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
- send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
- end
- end
- end
- function job_post_precast(spell, action, spellMap, eventArgs)
- if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") then
- if player.status ~= 'Engaged' and state.WeaponLock.value == false then
- equip(sets.precast.CorsairRoll.Duration)
- end
- if state.LuzafRing.value then
- equip(sets.precast.LuzafRing)
- end
- end
- if spell.action_type == 'Ranged Attack' then--else @start
- special_ammo_check()
- if flurry == 2 then
- equip(sets.precast.RA.Flurry2)
- elseif flurry == 1 then
- equip(sets.precast.RA.Flurry1)
- end
- elseif spell.type == 'WeaponSkill' then
- if spell.skill == 'Marksmanship' then
- special_ammo_check()
- end
- -- Replace TP-bonus gear if not needed.
- if spell.english == 'Leaden Salute' or spell.english == 'Aeolian Edge' and player.tp > 2900 then
- equip(sets.FullTP)
- end
- if elemental_ws:contains(spell.name) then
- -- Matching double weather (w/o day conflict).
- if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
- equip(sets.Obi)
- -- Target distance under 1.7 yalms.
- elseif spell.target.distance < (1.7 + spell.target.model_size) then
- equip({waist="Orpheus's Sash"})
- -- Matching day and weather.
- elseif spell.element == world.day_element and spell.element == world.weather_element then
- equip(sets.Obi)
- -- Target distance under 8 yalms.
- elseif spell.target.distance < (8 + spell.target.model_size) then
- equip({waist="Orpheus's Sash"})
- -- Match day or weather.
- elseif spell.element == world.day_element or spell.element == world.weather_element then
- equip(sets.Obi)
- end
- end
- end
- end
- function job_post_midcast(spell, action, spellMap, eventArgs)
- if spell.type == 'CorsairShot' then
- if (spell.english ~= 'Light Shot' and spell.english ~= 'Dark Shot') then
- -- Matching double weather (w/o day conflict).
- if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
- equip(sets.Obi)
- -- Target distance under 1.7 yalms.
- elseif spell.target.distance < (1.7 + spell.target.model_size) then
- equip({waist="Orpheus's Sash"})
- -- Matching day and weather.
- elseif spell.element == world.day_element and spell.element == world.weather_element then
- equip(sets.Obi)
- -- Target distance under 8 yalms.
- elseif spell.target.distance < (8 + spell.target.model_size) then
- equip({waist="Orpheus's Sash"})
- -- Match day or weather.
- elseif spell.element == world.day_element or spell.element == world.weather_element then
- equip(sets.Obi)
- end
- if state.QDMode.value == 'Enhance' then
- equip(sets.midcast.CorsairShot.Enhance)
- elseif state.QDMode.value == 'STP' then
- equip(sets.midcast.CorsairShot.STP)
- elseif state.QDMode.value == 'TH' then
- equip(sets.midcast.CorsairShot.TH)
- end
- end
- elseif spell.action_type == 'Ranged Attack' then
- if buffactive['Triple Shot'] then
- equip(sets.TripleShot)
- if buffactive['Aftermath: Lv.3'] and player.equipment.ranged == "Armageddon" then
- equip(sets.TripleShotCritical)
- end
- elseif buffactive['Aftermath: Lv.3'] and player.equipment.ranged == "Armageddon" then
- equip(sets.midcast.RA.Critical)
- end
- end
- end
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- function job_aftercast(spell, action, spellMap, eventArgs)
- if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and not spell.interrupted then
- display_roll_info(spell)
- end
- if spell.english == "Light Shot" then
- send_command('@timers c "Light Shot ['..spell.target.name..']" 60 down abilities/00195.png')
- end
- end
- function job_buff_change(buff,gain)
- -- If we gain or lose any flurry buffs, adjust gear.
- if S{'flurry'}:contains(buff:lower()) then
- if not gain then
- flurry = nil
- --add_to_chat(122, "Flurry status cleared.")
- end
- if not midaction() then
- handle_equipping_gear(player.status)
- end
- end
- -- if buffactive['Reive Mark'] then
- -- if gain then
- -- equip(sets.Reive)
- -- disable('neck')
- -- else
- -- enable('neck')
- -- end
- -- end
- if buff == "doom" then
- if gain then
- equip(sets.buff.Doom)
- send_command('@input /p Doomed.')
- disable('ring1','ring2','waist')
- else
- enable('ring1','ring2','waist')
- handle_equipping_gear(player.status)
- end
- end
- end
- -- Handle notifications of general user state change.
- function job_state_change(stateField, newValue, oldValue)
- if state.WeaponLock.value == true then
- disable('ranged')
- else
- enable('ranged')
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements standard library decisions.
- -------------------------------------------------------------------------------------------------------------------
- -- Called by the 'update' self-command, for common needs.
- -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
- function job_handle_equipping_gear(playerStatus, eventArgs)
- check_gear()
- update_combat_form()
- determine_haste_group()
- check_moving()
- end
- function job_update(cmdParams, eventArgs)
- handle_equipping_gear(player.status)
- end
- function update_combat_form()
- if DW == true then
- state.CombatForm:set('DW')
- elseif DW == false then
- state.CombatForm:reset()
- end
- end
- function get_custom_wsmode(spell, action, spellMap)
- local wsmode
- if spell.skill == 'Marksmanship' then
- if state.RangedMode.value == 'Acc' or state.RangedMode.value == 'HighAcc' then
- wsmode = 'Acc'
- end
- else
- if state.OffenseMode.value == 'Acc' or state.OffenseMode.value == 'HighAcc' then
- wsmode = 'Acc'
- end
- end
- return wsmode
- end
- -- Modify the default idle set after it was constructed.
- function customize_idle_set(idleSet)
- if state.Gun.current == 'Death Penalty' then
- equip({ranged="Death Penalty"})
- elseif state.Gun.current == 'Armageddon' then
- equip({ranged="Armageddon"})
- elseif state.Gun.current == 'Fomalhaut' then
- equip({ranged="Fomalhaut"})
- elseif state.Gun.current == 'Ataktos' then
- equip({ranged="Ataktos"})
- elseif state.Gun.current == 'Compensator' then
- equip({ranged="Compensator"})
- end
- -- if state.CP.current == 'on' then
- -- equip(sets.CP)
- -- disable('back')
- -- else
- -- enable('back')
- -- end
- if state.Auto_Kite.value == true then
- idleSet = set_combine(idleSet, sets.Kiting)
- end
- return idleSet
- end
- -- Handle auto-targetting based on local setup.
- function job_auto_change_target(spell, action, spellMap, eventArgs)
- if spell.type == 'CorsairShot' then
- if state.IgnoreTargetting.value == true then
- state.IgnoreTargetting:reset()
- eventArgs.handled = true
- end
- eventArgs.SelectNPCTargets = state.SelectqdTarget.value
- end
- end
- -- Set eventArgs.handled to true if we don't want the automatic display to be run.
- function display_current_job_state(eventArgs)
- local cf_msg = ''
- if state.CombatForm.has_value then
- cf_msg = ' (' ..state.CombatForm.value.. ')'
- end
- local m_msg = state.OffenseMode.value
- if state.HybridMode.value ~= 'Normal' then
- m_msg = m_msg .. '/' ..state.HybridMode.value
- end
- local ws_msg = state.WeaponskillMode.value
- local qd_msg = '(' ..string.sub(state.QDMode.value,1,1).. ')'
- local e_msg = state.Mainqd.current
- if state.UseAltqd.value == true then
- e_msg = e_msg .. '/'..state.Altqd.current
- end
- local d_msg = 'None'
- if state.DefenseMode.value ~= 'None' then
- d_msg = state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value
- end
- local i_msg = state.IdleMode.value
- local msg = ''
- if state.Kiting.value then
- msg = msg .. ' Kiting: On |'
- end
- add_to_chat(002, '| ' ..string.char(31,210).. 'Melee' ..cf_msg.. ': ' ..string.char(31,001)..m_msg.. string.char(31,002).. ' |'
- ..string.char(31,207).. ' WS: ' ..string.char(31,001)..ws_msg.. string.char(31,002).. ' |'
- ..string.char(31,060).. ' QD' ..qd_msg.. ': ' ..string.char(31,001)..e_msg.. string.char(31,002).. ' |'
- ..string.char(31,004).. ' Defense: ' ..string.char(31,001)..d_msg.. string.char(31,002).. ' |'
- ..string.char(31,008).. ' Idle: ' ..string.char(31,001)..i_msg.. string.char(31,002).. ' |'
- ..string.char(31,002)..msg)
- eventArgs.handled = true
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- --Read incoming packet to differentiate between Haste/Flurry I and II
- windower.register_event('action',
- function(act)
- --check if you are a target of spell
- local actionTargets = act.targets
- playerId = windower.ffxi.get_player().id
- isTarget = false
- for _, target in ipairs(actionTargets) do
- if playerId == target.id then
- isTarget = true
- end
- end
- if isTarget == true then
- if act.category == 4 then
- local param = act.param
- if param == 845 and flurry ~= 2 then
- add_to_chat(122, 'Flurry Status: Flurry I')
- flurry = 1
- elseif param == 846 then
- add_to_chat(122, 'Flurry Status: Flurry II')
- flurry = 2
- end
- end
- end
- end)
- function determine_haste_group()
- classes.CustomMeleeGroups:clear()
- if DW == true then
- if DW_needed <= 11 then
- classes.CustomMeleeGroups:append('MaxHaste')
- elseif DW_needed > 12 and DW_needed <= 23 then
- classes.CustomMeleeGroups:append('MaxHaste')
- elseif DW_needed > 24 and DW_needed <= 27 then
- classes.CustomMeleeGroups:append('HighHaste')
- elseif DW_needed > 28 and DW_needed <= 32 then
- classes.CustomMeleeGroups:append('MidHaste')
- elseif DW_needed > 33 then
- classes.CustomMeleeGroups:append('')
- end
- end
- end
- function job_self_command(cmdParams, eventArgs)
- if cmdParams[1] == 'qd' then
- if cmdParams[2] == 't' then
- state.IgnoreTargetting:set()
- end
- local doqd = ''
- if state.UseAltqd.value == true then
- doqd = state[state.Currentqd.current..'qd'].current
- state.Currentqd:cycle()
- else
- doqd = state.Mainqd.current
- end
- send_command('@input /ja "'..doqd..'" <t>')
- end
- gearinfo(cmdParams, eventArgs)
- end
- function gearinfo(cmdParams, eventArgs)
- if cmdParams[1] == 'gearinfo' then
- if type(tonumber(cmdParams[2])) == 'number' then
- if tonumber(cmdParams[2]) ~= DW_needed then
- DW_needed = tonumber(cmdParams[2])
- DW = true
- end
- elseif type(cmdParams[2]) == 'string' then
- if cmdParams[2] == 'false' then
- DW_needed = 0
- DW = false
- end
- end
- if type(tonumber(cmdParams[3])) == 'number' then
- if tonumber(cmdParams[3]) ~= Haste then
- Haste = tonumber(cmdParams[3])
- end
- end
- 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 define_roll_values()
- rolls = {
- ["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
- ["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
- ["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
- ["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
- ["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
- ["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
- ["Drachen Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
- ["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
- ["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
- ["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
- ["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
- ["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
- ["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
- ["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
- ["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
- ["Puppet Roll"] = {lucky=3, unlucky=7, bonus="Pet Magic Attack/Accuracy"},
- ["Gallant's Roll"] = {lucky=3, unlucky=7, bonus="Defense"},
- ["Wizard's Roll"] = {lucky=5, unlucky=9, bonus="Magic Attack"},
- ["Dancer's Roll"] = {lucky=3, unlucky=7, bonus="Regen"},
- ["Scholar's Roll"] = {lucky=2, unlucky=6, bonus="Conserve MP"},
- ["Naturalist's Roll"] = {lucky=3, unlucky=7, bonus="Enh. Magic Duration"},
- ["Runeist's Roll"] = {lucky=4, unlucky=8, bonus="Magic Evasion"},
- ["Bolter's Roll"] = {lucky=3, unlucky=9, bonus="Movement Speed"},
- ["Caster's Roll"] = {lucky=2, unlucky=7, bonus="Fast Cast"},
- ["Courser's Roll"] = {lucky=3, unlucky=9, bonus="Snapshot"},
- ["Blitzer's Roll"] = {lucky=4, unlucky=9, bonus="Attack Delay"},
- ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
- ["Allies' Roll"] = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
- ["Miser's Roll"] = {lucky=5, unlucky=7, bonus="Save TP"},
- ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
- ["Avenger's Roll"] = {lucky=4, unlucky=8, bonus="Counter Rate"},
- }
- end
- function display_roll_info(spell)
- rollinfo = rolls[spell.english]
- local rollsize = (state.LuzafRing.value and string.char(129,157)) or ''
- if rollinfo then
- add_to_chat(001, string.char(129,115).. ' ' ..string.char(31,210)..spell.english..string.char(31,001)..
- ' : '..rollinfo.bonus.. ' ' ..string.char(129,116).. ' ' ..string.char(129,195)..
- ' Lucky: ' ..string.char(31,204).. tostring(rollinfo.lucky)..string.char(31,001).. ' /' ..
- ' Unlucky: ' ..string.char(31,167).. tostring(rollinfo.unlucky)..string.char(31,002)..
- ' ' ..rollsize)
- end
- end
- -- Determine whether we have sufficient ammo for the action being attempted.
- function do_bullet_checks(spell, spellMap, eventArgs)
- local bullet_name
- local bullet_min_count = 1
- if spell.type == 'WeaponSkill' then
- if spell.skill == "Marksmanship" then
- if spell.english == 'Wildfire' or spell.english == 'Leaden Salute' then
- -- magical weaponskills
- bullet_name = gear.MAbullet
- else
- -- physical weaponskills
- bullet_name = gear.WSbullet
- end
- else
- -- Ignore non-ranged weaponskills
- return
- end
- elseif spell.type == 'CorsairShot' then
- bullet_name = gear.QDbullet
- elseif spell.action_type == 'Ranged Attack' then
- bullet_name = gear.RAbullet
- if buffactive['Triple Shot'] then
- bullet_min_count = 3
- end
- end
- local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
- -- If no ammo is available, give appropriate warning and end.
- if not available_bullets then
- if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
- add_to_chat(104, 'No Quick Draw ammo left. Using what\'s currently equipped ('..player.equipment.ammo..').')
- return
- elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
- add_to_chat(104, 'No weaponskill ammo left. Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
- return
- else
- add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
- eventArgs.cancel = true
- return
- end
- end
- -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
- if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
- add_to_chat(104, 'No ammo will be left for Quick Draw. Cancelling.')
- eventArgs.cancel = true
- return
- end
- -- Low ammo warning.
- if spell.type ~= 'CorsairShot' and state.warned.value == false
- and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
- local msg = '***** LOW AMMO WARNING: '..bullet_name..' *****'
- --local border = string.repeat("*", #msg)
- local border = ""
- for i = 1, #msg do
- border = border .. "*"
- end
- add_to_chat(104, border)
- add_to_chat(104, msg)
- add_to_chat(104, border)
- state.warned:set()
- elseif available_bullets.count > options.ammo_warning_limit and state.warned then
- state.warned:reset()
- end
- end
- function special_ammo_check()
- -- Stop if Animikii/Hauksbok equipped
- if no_shoot_ammo:contains(player.equipment.ammo) then
- cancel_spell()
- add_to_chat(123, '** Action Canceled: [ '.. player.equipment.ammo .. ' equipped!! ] **')
- return
- end
- end
- -- Check for various actions that we've specified in user code as being used with TH gear.
- -- This will only ever be called if TreasureMode is not 'None'.
- -- Category and Param are as specified in the action event packet.
- function th_action_check(category, param)
- if category == 2 or -- any ranged attack
- --category == 4 or -- any magic action
- (category == 3 and param == 30) or -- Aeolian Edge
- (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
- (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
- then return true
- 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("ring1")
- else
- enable("ring1")
- end
- if no_swap_gear:contains(player.equipment.right_ring) then
- disable("ring2")
- else
- enable("ring2")
- end
- if no_swap_gear:contains(player.equipment.waist) then
- disable("waist")
- else
- enable("waist")
- end
- end
- windower.register_event('zone change',
- function()
- if no_swap_gear:contains(player.equipment.left_ring) then
- enable("ring1")
- equip(sets.idle)
- end
- if no_swap_gear:contains(player.equipment.right_ring) then
- enable("ring2")
- equip(sets.idle)
- end
- if no_swap_gear:contains(player.equipment.waist) then
- enable("waist")
- equip(sets.idle)
- end
- end
- )
- -- Select default macro book on initial load or subjob change.
- function select_default_macro_book()
- if player.sub_job == 'DNC' then
- set_macro_page(1, 18)
- else
- set_macro_page(1, 18)
- end
- end
- function set_lockstyle()
- send_command('wait 2; input /lockstyleset ' .. lockstyleset)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement