Pastebin
API
tools
faq
paste
Login
Sign up
Please fix the following errors:
New Paste
Syntax Highlighting
-- Original: Motenten / Modified: Arislan -- Haste/DW Detection Requires Gearinfo Addon -- Initialization function for this job file. function get_sets() mote_include_version = 2 -- Load and initialize the include file. include('Mote-Include.lua') end -- Setup variables 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.Buff['Sneak Attack'] = buffactive['sneak attack'] 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(true, 'Ignore Targetting') state.ClosedPosition = M(false, 'Closed Position') state.CurrentStep = M{['description']='Current Step', 'Main', 'Alt'} -- state.SkillchainPending = M(false, 'Skillchain Pending') state.CP = M(false, "Capacity Points Mode") lockstyleset = 1 end ------------------------------------------------------------------------------------------------------------------- -- User setup functions for this job. ------------------------------------------------------------------------------------------------------------------- -- Gear Modes function user_setup() state.OffenseMode:options('Normal', 'LowAcc', 'MidAcc', 'HighAcc') state.HybridMode:options('Normal', 'HIGH', 'MID', 'LOW') state.WeaponskillMode:options('Normal', 'Acc') -- Allows the use of Ctrl + ~ and Alt + ~ for 2 more macros of your choice. send_command('bind ^` input /ja "Chocobo Jig II" <me>') --Ctrl'~' send_command('bind !` input /ja "Spectral Jig" <me>') --Alt'~' send_command('bind f9 gs c cycle OffenseMode') --F9 send_command('bind ^f9 gs c cycle WeaponSkillMode') --Ctrl'F9' send_command('bind f10 gs c cycle HybridMode') --F10 send_command('bind f11 gs c cycle mainstep') --F11 send_command('bind @c gs c toggle CP') --WindowKey'C' select_default_macro_book() set_lockstyle() Haste = 0 DW_needed = 0 DW = false moving = false update_combat_form() determine_haste_group() end -- Erases the Key Binds above when you switch to another job. function user_unload() send_command('unbind ^`') send_command('unbind !`') send_command('unbind !-') send_command('unbind ^=') send_command('unbind f11') send_command('bind @c') end -- Define sets and vars used by this job file. function init_gear_sets() ------------------------------------------------------------------------------------------------ ---------------------------------------- Precast Sets ------------------------------------------ ------------------------------------------------------------------------------------------------ sets.Enmity = {head="Highwing Helm",neck="Unmoving Collar +1",hands="Kurys Gloves",ear2="Friomisi Earring",ring1="Petrov Ring",body="Emet Harness +1",legs="Samnuha Tights",feet="Ahosi Leggings"} sets.precast.JA['Provoke'] = sets.Enmity sets.precast.JA['No Foot Rise'] = {body="Horos Casaque +2"} sets.precast.JA['Trance'] = {head="Horos Tiara +3"} sets.precast.Waltz = {ammo="Yamarang", head="Anwig Salade", neck="Unmoving Collar +1", lear="Handler's Earring", body="Maxixi Casaque +2", hands={ name="Herculean Gloves", augments={'Accuracy+14','"Waltz" potency +11%','DEX+9','Attack+9',}}, ring1="Asklepian Ring", ring2="Carbuncle Ring", back="Toetapper Mantle", waist="Aristo Belt", legs="Dashing Subligar", feet="Maxixi Toe shoes +1"} sets.precast.WaltzSelf = set_combine(sets.precast.Waltz, {ring1="Asklepian Ring"}) sets.precast.Waltz['Healing Waltz'] = {} sets.precast.Samba = {head="Maxixi Tiara +1",body="Mummu Jacket +2",back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}} sets.precast.Jig = {feet="Maxixi Toe shoes +1",legs="Horos Tights +3"} sets.precast.Step = {ammo="Yamarang",neck="Ej Necklace",waist="Eschan Stone",back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},feet="Horos T. Shoes +2"} sets.precast.Step['Feather Step'] = set_combine(sets.precast.Step, {}) sets.precast.Flourish1 = {} sets.precast.Flourish1['Animated Flourish'] = sets.Enmity sets.precast.Flourish1['Violent Flourish'] = {ammo="Yamarang",body="Horos Casaque +2",waist="Eschan Stone",feet={ name="Herculean Boots", augments={'Accuracy+23 Attack+23','"Store TP"+2','STR+15','Accuracy+15','Attack+4',}}} sets.precast.Flourish1['Desperate Flourish'] = {} sets.precast.Flourish2 = {} sets.precast.Flourish2['Reverse Flourish'] = {hands="Macu. Bangles +1",back="Toetapper Mantle"} sets.precast.Flourish3 = {} sets.precast.Flourish3['Striking Flourish'] = {body="Macu. Casaque +1"} sets.precast.Flourish3['Climactic Flourish'] = {head="Maculele Tiara +1",} sets.precast.FC = {ammo="Impatiens",ear2="Loquacious Earring"} sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"}) ------------------------------------------------------------------------------------------------ ------------------------------------- Weapon Skill Sets ---------------------------------------- ------------------------------------------------------------------------------------------------ sets.precast.WS = { ammo="Ginsen", head="Adhemar Bonnet", neck="Asperity Necklace", ear1="Brutal Earring", ear2="Sherida Earring", body="Rawhide Vest", hands={ name="Herculean Gloves", augments={'Accuracy+25 Attack+25','"Triple Atk."+3','STR+4','Accuracy+11','Attack+12',}}, ring1="Epona's Ring", ring2="Ilabrat Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}, waist="Fotia Belt", legs="Samnuha Tights", feet={ name="Herculean Boots", augments={'Accuracy+23 Attack+23','"Store TP"+2','STR+15','Accuracy+15','Attack+4',}} } sets.precast.WS.Acc = set_combine(sets.precast.WS, {}) sets.precast.WS.Critical = {body="Meg. Cuirie +2"} sets.precast.WS['Exenterator'] = {} sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {}) sets.precast.WS['Pyrrhic Kleos'] = {ammo="Ginsen", head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+15',}}, neck="Aqua Gorget", left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}}, right_ear="Tati Earring", body="Rawhide Vest", hands={ name="Herculean Gloves", augments={'Accuracy+25 Attack+25','"Triple Atk."+3','STR+4','Accuracy+11','Attack+12',}}, left_ring="Epona's Ring", right_ring="Ilabrat Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}, waist="Fotia Belt", legs="Lustratio Subligar", feet={ name="Herculean Boots", augments={'Accuracy+23 Attack+23','"Store TP"+2','STR+15','Accuracy+15','Attack+4',}}} sets.precast.WS['Pyrrhic Kleos'].Acc = set_combine(sets.precast.WS['Pyrrhic Kleos'], {}) sets.precast.WS['Evisceration'] = { ammo="Charis Feather", head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+15',}}, neck="Soil Gorget", left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}}, right_ear="Brutal Earring", body={ name="Rawhide Vest", augments={'DEX+10','STR+7','INT+7',}}, hands={ name="Herculean Gloves", augments={'Crit.hit rate+5','Attack+15',}}, left_ring="Epona's Ring", right_ring="Apate Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}, waist="Fotia Belt", legs="Lustratio Subligar", feet={ name="Herculean Boots", augments={'Attack+29','Crit.hit rate+5','STR+2',}} } sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {}) sets.precast.WS['Rudra\'s Storm'] = { ammo="Charis Feather", head="Horos Tiara +3", body="Horos Casaque +2", hands="Meg. Gloves +2", legs="Horos Tights +3", feet={ name="Herculean Boots", augments={'Attack+29','Weapon skill damage +5%','DEX+8','Accuracy+7',}}, neck="Caro Necklace", waist="Artful Belt +1", left_ear="Sherida Earring", right_ear="Moonshade Earring", left_ring="Epona's Ring", right_ring="Ilabrat Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%'}} } sets.precast.WS['Rudra\'s Storm'].Acc = set_combine(sets.precast.WS['Rudra\'s Storm'], {}) sets.precast.WS['Aeolian Edge'] = { ammo="Yamarang", head={ name="Herculean Helm", augments={'"Mag.Atk.Bns."+23','"Store TP"+2','MND+9','Mag. Acc.+15',}}, body={ name="Samnuha Coat", augments={'Mag. Acc.+13','"Mag.Atk.Bns."+14','"Fast Cast"+3','"Dual Wield"+4',}}, hands="Leyline Gloves", legs={ name="Herculean Trousers", augments={'"Mag.Atk.Bns."+23','Enmity-3','STR+13','Mag. Acc.+11',}}, feet={ name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Enmity-3','INT+1','Mag. Acc.+9','"Mag.Atk.Bns."+8',}}, neck="Sanctity Necklace", waist="Eschan Stone", left_ear="Friomisi Earring", right_ear="Hecate's Earring", left_ring="Acumen Ring", right_ring="Ilabrat Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}} } ------------------------------------------------------------------------------------------------ ---------------------------------------- Midcast Sets ------------------------------------------ ------------------------------------------------------------------------------------------------ sets.midcast.FastRecast = sets.precast.FC sets.midcast.SpellInterrupt = {} sets.midcast.Utsusemi = sets.midcast.SpellInterrupt ------------------------------------------------------------------------------------------------ ----------------------------------------- Idle Sets -------------------------------------------- ------------------------------------------------------------------------------------------------ sets.idle = { ammo="Staunch Tathlum", head={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}}, neck="Loricate Torque +1", ear1="Sherida Earring", ear2="Telos Earring", body={ name="Herculean Vest", augments={'Damage taken-3%','AGI+9','Accuracy+13','Attack+9',}}, hands={ name="Herculean Gloves", augments={'Attack+15','Damage taken-3%','STR+2','Accuracy+15',}}, ring2="Vocane Ring", ring1="Defending Ring", back="Moonbeam Cape", waist="Windbuffet Belt +1", legs="Mummu Kecks +1", feet="Tandava Crackows" } sets.idle.Town = { ammo="Yamarang", head="Horos Tiara +3", neck="Anu Torque", ear1="Sherida Earring", ear2="Telos Earring", body="Horos Casaque +2", hands="Adhemar Wrist. +1", ring2="Epona's Ring", ring1="Ilabrat Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10'}}, waist="Windbuffet Belt +1", legs="Horos Tights +3", feet="Tandava Crackows" } ------------------------------------------------------------------------------------------------ ---------------------------------------- Engaged Sets ------------------------------------------ ------------------------------------------------------------------------------------------------ -- This is a Set that would only be used when you are NOT Dual Wielding. Most likely Airy Buckler Builds with Fencer as War Sub. -- There are no haste parameters set for this build, because you wouldn't be juggling DW gear, you would always use the same gear, other than Damage Taken and Accuracy sets which ARE included below. sets.engaged = { } ------------------------------------------------------------------------------------------------ -------------------------------------- Dual Wield Sets ----------------------------------------- ------------------------------------------------------------------------------------------------ -- * DNC Native DW Trait: 30% DW -- * DNC Job Points DW Gift: 5% DW -- No Magic Haste (39% DW to cap) sets.engaged.DW = { ammo="Ginsen", head="Adhemar Bonnet", neck="Charis Necklace", --5 ear1="Dudgeon Earring", --3 ear2="Heartseeker Earring", --4 body="Maculele Casaque +1", --11 hands="Adhemar Wrist. +1", ring1="Hetairoi Ring", ring2="Epona's Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}, waist="Patentia Sash", --5 legs="Samnuha Tights", feet="Horos Toe Shoes +2" } -- 28% -- 15% Magic Haste (32% DW to cap) sets.engaged.DW.LowHaste = { ammo="Ginsen", head="Adhemar Bonnet", neck="Charis Necklace", --5 ear1="Dudgeon Earring", --3 ear2="Heartseeker Earring", --4 body="Maculele Casaque +1", --11 hands="Adhemar Wrist. +1", ring1="Hetairoi Ring", ring2="Epona's Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}, waist="Patentia Sash", --5 legs="Samnuha Tights", feet="Horos Toe Shoes +2" } -- 28% -- 30% Magic Haste (21% DW to cap) sets.engaged.DW.MidHaste = { ammo="Ginsen", head="Adhemar Bonnet", neck="Charis Necklace", --5 ear1="Brutal Earring", ear2="Sherida Earring", body="Maculele Casaque +1", --11 hands="Adhemar Wrist. +1", ring1="Hetairoi Ring", ring2="Epona's Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}, waist="Patentia Sash", --5 legs="Samnuha Tights", feet="Horos Toe Shoes +2" } -- 21% -- 35% Magic Haste (16% DW to cap) sets.engaged.DW.HighHaste = { ammo="Ginsen", head="Adhemar Bonnet", neck="Anu Torque", ear1="Brutal Earring", ear2="Sherida Earring", body="Maculele Casaque +1", --11 hands="Adhemar Wrist. +1", ring1="Hetairoi Ring", ring2="Epona's Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}, waist="Patentia Sash", --5 legs="Samnuha Tights", feet="Horos Toe Shoes +2" } -- 16% Gear -- 45% Magic Haste (1% DW to cap) sets.engaged.DW.MaxHaste = { ammo="Charis Feather", head="Adhemar Bonnet", neck="Anu Torque", ear1="Brutal Earring", ear2="Sherida Earring", body="Mummu Jacket +2", hands="Adhemar Wrist. +1", ring1="Hetairoi Ring", ring2="Epona's Ring", back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}, waist="Windbuffet Belt +1", legs="Samnuha Tights", feet="Horos Toe Shoes +2" } -- 0% ------------------------------------------------------------------------------------------------ --------------------------------------- Accuracy Sets ------------------------------------------ ------------------------------------------------------------------------------------------------ -- Define three tiers of Accuracy. These sets are cycled with the F9 Button to increase accuracy in stages as desired. sets.engaged.Acc1 = {head="Horos Tiara +3"} sets.engaged.Acc2 = {head="Horos Tiara +3",legs="Mummu Kecks +1",ammo="Yamarang"} sets.engaged.Acc3 = {head="Horos Tiara +3",legs="Mummu Kecks +1",ammo="Yamarang",neck="Ej Necklace",waist="Eschan Stone",feet={ name="Herculean Boots", augments={'Accuracy+23 Attack+23','"Store TP"+2','STR+15','Accuracy+15','Attack+4',}}} -- Base Shield sets.engaged.LowAcc = set_combine(sets.engaged, sets.engaged.Acc1) sets.engaged.MidAcc = set_combine(sets.engaged, sets.engaged.Acc2) sets.engaged.HighAcc = set_combine(sets.engaged, sets.engaged.Acc3) -- Base DW sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, sets.engaged.Acc1) sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW, sets.engaged.Acc2) sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW, sets.engaged.Acc3) -- LowHaste DW sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc1) sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc2) sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc3) -- MidHaste DW sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc1) sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc2) sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc3) -- HighHaste DW sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc1) sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc2) sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc3) -- HighHaste DW sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.LowAcc) sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.MidAcc) sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.HighAcc) ------------------------------------------------------------------------------------------------ ---------------------------------------- Hybrid Sets ------------------------------------------- ------------------------------------------------------------------------------------------------ -- Define three tiers of Defense Taken. These sets are cycled with the F10 Button. DT1-16%, DT2-28%, DT3-47% sets.engaged.DT1 = {neck="Loricate Torque +1",ring1="Defending Ring"} sets.engaged.DT2 = {neck="Loricate Torque +1",ring1="Defending Ring",ring2="Vocane Ring",back="Moonbeam Cape"} sets.engaged.DT3 = {head={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},neck="Loricate Torque +1",hands={ name="Herculean Gloves", augments={'Attack+15','Damage taken-3%','STR+2','Accuracy+15',}},ring1="Defending Ring",ring2="Vocane Ring",back="Moonbeam Cape",waist="Flume Belt",legs="Mummu Kecks +1",feet={ name="Herculean Boots", augments={'Accuracy+15','Damage taken-3%','Attack+4',}},ammo="Staunch Tathlum",body={ name="Herculean Vest", augments={'Damage taken-3%','AGI+9','Accuracy+13','Attack+9',}}} -- Shield Base sets.engaged.LOW = set_combine(sets.engaged, sets.engaged.DT1) sets.engaged.LowAcc.LOW = set_combine(sets.engaged.LowAcc, sets.engaged.DT1) sets.engaged.MidAcc.LOW = set_combine(sets.engaged.MidAcc, sets.engaged.DT1) sets.engaged.HighAcc.LOW = set_combine(sets.engaged.HighAcc, sets.engaged.DT1) sets.engaged.MID = set_combine(sets.engaged, sets.engaged.DT2) sets.engaged.LowAcc.MID = set_combine(sets.engaged.LowAcc, sets.engaged.DT2) sets.engaged.MidAcc.MID = set_combine(sets.engaged.MidAcc, sets.engaged.DT2) sets.engaged.HighAcc.MID = set_combine(sets.engaged.HighAcc, sets.engaged.DT2) sets.engaged.HIGH = set_combine(sets.engaged, sets.engaged.DT3) sets.engaged.LowAcc.HIGH = set_combine(sets.engaged.LowAcc, sets.engaged.DT3) sets.engaged.MidAcc.HIGH = set_combine(sets.engaged.MidAcc, sets.engaged.DT3) sets.engaged.HighAcc.HIGH = set_combine(sets.engaged.HighAcc, sets.engaged.DT3) -- No Haste DW sets.engaged.DW.LOW = set_combine(sets.engaged.DW, sets.engaged.DT1) sets.engaged.DW.LowAcc.LOW = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT1) sets.engaged.DW.MidAcc.LOW = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT1) sets.engaged.DW.HighAcc.LOW = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT1) sets.engaged.DW.MID = set_combine(sets.engaged.DW, sets.engaged.DT2) sets.engaged.DW.LowAcc.MID = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT2) sets.engaged.DW.MidAcc.MID = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT2) sets.engaged.DW.HighAcc.MID = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT2) sets.engaged.DW.HIGH = set_combine(sets.engaged.DW, sets.engaged.DT3) sets.engaged.DW.LowAcc.HIGH = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT3) sets.engaged.DW.MidAcc.HIGH = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT3) sets.engaged.DW.HighAcc.HIGH = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT3) -- Low Haste DW sets.engaged.DW.LOW.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT1) sets.engaged.DW.LowAcc.LOW.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT1) sets.engaged.DW.MidAcc.LOW.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT1) sets.engaged.DW.HighAcc.LOW.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT1) sets.engaged.DW.MID.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT2) sets.engaged.DW.LowAcc.MID.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT2) sets.engaged.DW.MidAcc.MID.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT2) sets.engaged.DW.HighAcc.MID.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT2) sets.engaged.DW.HIGH.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT3) sets.engaged.DW.LowAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT3) sets.engaged.DW.MidAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT3) sets.engaged.DW.HighAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT3) -- Mid Haste sets.engaged.DW.LOW.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT1) sets.engaged.DW.LowAcc.LOW.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT1) sets.engaged.DW.MidAcc.LOW.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT1) sets.engaged.DW.HighAcc.LOW.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT1) sets.engaged.DW.MID.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT2) sets.engaged.DW.LowAcc.MID.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT2) sets.engaged.DW.MidAcc.MID.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT2) sets.engaged.DW.HighAcc.MID.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT2) sets.engaged.DW.HIGH.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT3) sets.engaged.DW.LowAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT3) sets.engaged.DW.MidAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT3) sets.engaged.DW.HighAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT3) -- High Haste sets.engaged.DW.LOW.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT1) sets.engaged.DW.LowAcc.LOW.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT1) sets.engaged.DW.MidAcc.LOW.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT1) sets.engaged.DW.HighAcc.LOW.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT1) sets.engaged.DW.MID.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT2) sets.engaged.DW.LowAcc.MID.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT2) sets.engaged.DW.MidAcc.MID.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT2) sets.engaged.DW.HighAcc.MID.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT2) sets.engaged.DW.HIGH.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT3) sets.engaged.DW.LowAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT3) sets.engaged.DW.MidAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT3) sets.engaged.DW.HighAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT3) -- Max Haste sets.engaged.DW.LOW.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT1) sets.engaged.DW.LowAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT1) sets.engaged.DW.MidAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT1) sets.engaged.DW.HighAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT1) sets.engaged.DW.MID.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT2) sets.engaged.DW.LowAcc.MID.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT2) sets.engaged.DW.MidAcc.MID.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT2) sets.engaged.DW.HighAcc.MID.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT2) sets.engaged.DW.HIGH.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT3) sets.engaged.DW.LowAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT3) sets.engaged.DW.MidAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT3) sets.engaged.DW.HighAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT3) ------------------------------------------------------------------------------------------------ ---------------------------------------- Special Sets ------------------------------------------ ------------------------------------------------------------------------------------------------ -- sets.buff['Saber Dance'] = {legs="Horos Tights +3"} -- sets.buff['Fan Dance'] = {body="Horos Bangles +1"} sets.buff['Climactic Flourish'] = {head="Maculele Tiara +1"} --body="Meg. Cuirie +2"} sets.buff['Closed Position'] = {feet="Horos T. Shoes +3"} sets.buff.Doom = { neck="Nicander's Necklace", --20 ring1="Eshmun's Ring", --20 ring2="Eshmun's Ring", --20 waist="Gishdubar Sash", --10 } sets.CP = {back="Mecisto. Mantle"} -- sets.Reive = {neck="Ygnas's Resolve +1"} 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) 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 -- Used to overwrite Moonshade Earring if TP is more than 2750. if spell.type == 'WeaponSkill' then if player.tp > 2750 then equip({right_ear = "Sherida Earring"}) end end -- Used to optimize Rudra's Storm when Climactic Flourish is active. if spell.type == 'WeaponSkill' then if spell.english == "Rudra's Storm" and buffactive['Climactic Flourish'] then equip({head="Maculele Tiara +1", left_ear="Ishvara Earring"}) end end -- Forces Maculele Tiara +1 to override your WS Head slot if Climactic Flourish is active. Corresponds with sets.buff['Climactic Flourish']. if spell.type == "WeaponSkill" then if state.Buff['Climactic Flourish'] then equip(sets.buff['Climactic Flourish']) end end end function job_post_precast(spell, action, spellMap, eventArgs) if spell.type == "WeaponSkill" then if state.Buff['Sneak Attack'] == true then equip(sets.precast.WS.Critical) end if state.Buff['Climactic Flourish'] then equip(sets.buff['Climactic Flourish']) end end if spell.type=='Waltz' and spell.target.type == 'SELF' then equip(sets.precast.WaltzSelf) 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) -- Weaponskills wipe SATA. Turn those state vars off before default gearing is attempted. if spell.type == 'WeaponSkill' and not spell.interrupted then state.Buff['Sneak Attack'] = false end end ------------------------------------------------------------------------------------------------------------------- -- Job-specific hooks for non-casting events. ------------------------------------------------------------------------------------------------------------------- function job_buff_change(buff,gain) if buff == 'Saber Dance' or buff == 'Climactic Flourish' or buff == 'Fan Dance' then handle_equipping_gear(player.status) end if buff == "doom" then if gain then equip(sets.buff.Doom) send_command('@input /p Doomed.') disable('ring1','ring2','waist','neck') else enable('ring1','ring2','waist','neck') handle_equipping_gear(player.status) end end end ------------------------------------------------------------------------------------------------------------------- -- User code that supplements standard library decisions. ------------------------------------------------------------------------------------------------------------------- function job_handle_equipping_gear(playerStatus, eventArgs) update_combat_form() determine_haste_group() 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, spellMap, defaut_wsmode) local wsmode if state.Buff['Sneak Attack'] then wsmode = 'SA' end return wsmode end function customize_idle_set(idleSet) if state.CP.current == 'on' then equip(sets.CP) disable('back') else enable('back') end return idleSet end function customize_melee_set(meleeSet) if state.Buff['Climactic Flourish'] then meleeSet = set_combine(meleeSet, sets.buff['Climactic Flourish']) end if state.ClosedPosition.value == true then meleeSet = set_combine(meleeSet, sets.buff['Closed Position']) 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.ClosedPosition.value then msg = msg .. '[ Closed Position: ON ]' end if state.Kiting.value then msg = msg .. '[ Kiting Mode: ON ]' end msg = msg .. '[ '..state.MainStep.current if state.UseAltStep.value == true then msg = msg .. '/'..state.AltStep.current end msg = msg .. ' ]' add_to_chat(060, msg) eventArgs.handled = true end ------------------------------------------------------------------------------------------------------------------- -- User self-commands. ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- -- Utility functions specific to this job. ------------------------------------------------------------------------------------------------------------------- function determine_haste_group() classes.CustomMeleeGroups:clear() if DW == true then if DW_needed <= 1 then classes.CustomMeleeGroups:append('MaxHaste') elseif DW_needed > 1 and DW_needed <= 9 then classes.CustomMeleeGroups:append('HighHaste') elseif DW_needed > 9 and DW_needed <= 21 then classes.CustomMeleeGroups:append('MidHaste') elseif DW_needed > 21 and DW_needed <= 39 then classes.CustomMeleeGroups:append('LowHaste') elseif DW_needed > 39 then classes.CustomMeleeGroups:append('') end end end 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 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 -- If you attempt to use a step, this will automatically use Presto if you are under 5 Finishing moves and resend step. function job_pretarget(spell, action, spellMap, eventArgs) if spell.type == 'Step' then local allRecasts = windower.ffxi.get_ability_recasts() local prestoCooldown = allRecasts[236] local under5FMs = not buffactive['Finishing Move 5'] and not buffactive['Finishing Move (6+)'] if player.main_job_level >= 77 and prestoCooldown < 1 and under5FMs then cast_delay(1.1) send_command('input /ja "Presto" <me>') end end -- If you attempt to use Climactic Flourish with zero finishing moves, this will automatically use Box Step and then resend Climactic Flourish. local under1FMs = not buffactive['Finishing Move 1'] and not buffactive['Finishing Move 2'] and not buffactive['Finishing Move 3'] and not buffactive['Finishing Move 4'] and not buffactive['Finishing Move 5'] and not buffactive['Finishing Move (6+)'] if spell.english == "Climactic Flourish" and under1FMs then cast_delay(1.9) send_command('input /ja "Box Step" <t>') end end -- My Waltz Rules to Overwrite Mote's -- My Current Waltz Amounts: I:372 II:697 III:1134 function refine_waltz(spell, action, spellMap, eventArgs) if missingHP ~= nil then if player.main_job == 'DNC' then if missingHP < 40 and spell.target.name == player.name then -- Not worth curing yourself for so little. -- Don't block when curing others to allow for waking them up. add_to_chat(122,'Full HP!') eventArgs.cancel = true return elseif missingHP < 475 then newWaltz = 'Curing Waltz' waltzID = 190 elseif missingHP < 850 then newWaltz = 'Curing Waltz II' waltzID = 191 else newWaltz = 'Curing Waltz III' waltzID = 192 end else -- Not dnc main or sub; ignore return end end end -- Automatically loads a Macro Set by: (Pallet,Book) function select_default_macro_book() if player.sub_job == 'SAM' then set_macro_page(1, 5) elseif player.sub_job == 'WAR' then set_macro_page(2, 5) elseif player.sub_job == 'RUN' then set_macro_page(3, 5) elseif player.sub_job == 'BLU' then set_macro_page(4, 5) elseif player.sub_job == 'THF' then set_macro_page(9, 5) elseif player.sub_job == 'NIN' then set_macro_page(10, 5) else set_macro_page(1, 5) end end function set_lockstyle() send_command('wait 2; input /lockstyleset ' .. lockstyleset) end
Optional Paste Settings
Category:
None
Cryptocurrency
Cybersecurity
Fixit
Food
Gaming
Haiku
Help
History
Housing
Jokes
Legal
Money
Movies
Music
Pets
Photo
Science
Software
Source Code
Spirit
Sports
Travel
TV
Writing
Tags:
Syntax Highlighting:
None
Bash
C
C#
C++
CSS
HTML
JSON
Java
JavaScript
Lua
Markdown (PRO members only)
Objective C
PHP
Perl
Python
Ruby
Swift
4CS
6502 ACME Cross Assembler
6502 Kick Assembler
6502 TASM/64TASS
ABAP
AIMMS
ALGOL 68
APT Sources
ARM
ASM (NASM)
ASP
ActionScript
ActionScript 3
Ada
Apache Log
AppleScript
Arduino
Asymptote
AutoIt
Autohotkey
Avisynth
Awk
BASCOM AVR
BNF
BOO
Bash
Basic4GL
Batch
BibTeX
Blitz Basic
Blitz3D
BlitzMax
BrainFuck
C
C (WinAPI)
C Intermediate Language
C for Macs
C#
C++
C++ (WinAPI)
C++ (with Qt extensions)
C: Loadrunner
CAD DCL
CAD Lisp
CFDG
CMake
COBOL
CSS
Ceylon
ChaiScript
Chapel
Clojure
Clone C
Clone C++
CoffeeScript
ColdFusion
Cuesheet
D
DCL
DCPU-16
DCS
DIV
DOT
Dart
Delphi
Delphi Prism (Oxygene)
Diff
E
ECMAScript
EPC
Easytrieve
Eiffel
Email
Erlang
Euphoria
F#
FO Language
Falcon
Filemaker
Formula One
Fortran
FreeBasic
FreeSWITCH
GAMBAS
GDB
GDScript
Game Maker
Genero
Genie
GetText
Go
Godot GLSL
Groovy
GwBasic
HQ9 Plus
HTML
HTML 5
Haskell
Haxe
HicEst
IDL
INI file
INTERCAL
IO
ISPF Panel Definition
Icon
Inno Script
J
JCL
JSON
Java
Java 5
JavaScript
Julia
KSP (Kontakt Script)
KiXtart
Kotlin
LDIF
LLVM
LOL Code
LScript
Latex
Liberty BASIC
Linden Scripting
Lisp
Loco Basic
Logtalk
Lotus Formulas
Lotus Script
Lua
M68000 Assembler
MIX Assembler
MK-61/52
MPASM
MXML
MagikSF
Make
MapBasic
Markdown (PRO members only)
MatLab
Mercury
MetaPost
Modula 2
Modula 3
Motorola 68000 HiSoft Dev
MySQL
Nagios
NetRexx
Nginx
Nim
NullSoft Installer
OCaml
OCaml Brief
Oberon 2
Objeck Programming Langua
Objective C
Octave
Open Object Rexx
OpenBSD PACKET FILTER
OpenGL Shading
Openoffice BASIC
Oracle 11
Oracle 8
Oz
PARI/GP
PCRE
PHP
PHP Brief
PL/I
PL/SQL
POV-Ray
ParaSail
Pascal
Pawn
Per
Perl
Perl 6
Phix
Pic 16
Pike
Pixel Bender
PostScript
PostgreSQL
PowerBuilder
PowerShell
ProFTPd
Progress
Prolog
Properties
ProvideX
Puppet
PureBasic
PyCon
Python
Python for S60
QBasic
QML
R
RBScript
REBOL
REG
RPM Spec
Racket
Rails
Rexx
Robots
Roff Manpage
Ruby
Ruby Gnuplot
Rust
SAS
SCL
SPARK
SPARQL
SQF
SQL
SSH Config
Scala
Scheme
Scilab
SdlBasic
Smalltalk
Smarty
StandardML
StoneScript
SuperCollider
Swift
SystemVerilog
T-SQL
TCL
TeXgraph
Tera Term
TypeScript
TypoScript
UPC
Unicon
UnrealScript
Urbi
VB.NET
VBScript
VHDL
VIM
Vala
Vedit
VeriLog
Visual Pro Log
VisualBasic
VisualFoxPro
WHOIS
WhiteSpace
Winbatch
XBasic
XML
XPP
Xojo
Xorg Config
YAML
YARA
Z80 Assembler
ZXBasic
autoconf
jQuery
mIRC
newLISP
q/kdb+
thinBasic
Paste Expiration:
Never
Burn after read
10 Minutes
1 Hour
1 Day
1 Week
2 Weeks
1 Month
6 Months
1 Year
Paste Exposure:
Public
Unlisted
Private
Folder:
(members only)
Password
NEW
Enabled
Disabled
Burn after read
NEW
Paste Name / Title:
Create New Paste
Hello
Guest
Sign Up
or
Login
Sign in with Facebook
Sign in with Twitter
Sign in with Google
You are currently not logged in, this means you can not edit or delete anything you paste.
Sign Up
or
Login
Public Pastes
Symbol Dump for Discord
8 hours ago | 0.41 KB
tes
10 hours ago | 0.02 KB
Untitled
1 day ago | 2.28 KB
GSA NS
1 day ago | 1.37 KB
WaterFul.m
MatLab | 1 day ago | 0.42 KB
WaterEmpty.m
MatLab | 1 day ago | 0.54 KB
Spinning.m
MatLab | 1 day ago | 0.53 KB
Drying.m
MatLab | 1 day ago | 0.48 KB
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the
Cookies Policy
.
OK, I Understand
Not a member of Pastebin yet?
Sign Up
, it unlocks many cool features!