Guest User

Dnc lua tarokupo

a guest
Jun 6th, 2025
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 37.46 KB | Gaming | 0 0
  1. -- Original: Motenten / Modified: Arislan
  2. -- Haste/DW Detection Requires Gearinfo Addon
  3.  
  4. -- Initialization function for this job file.
  5. function get_sets()
  6.     mote_include_version = 2
  7.  
  8.     -- Load and initialize the include file.
  9.     include('Mote-Include.lua')
  10. end
  11.  
  12. -- Setup variables that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  13. function job_setup()
  14.     state.Buff['Climactic Flourish'] = buffactive['climactic flourish'] or false
  15.     state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
  16.  
  17.     state.MainStep = M{['description']='Main Step', 'Box Step', 'Quickstep', 'Feather Step', 'Stutter Step'}
  18.     state.AltStep = M{['description']='Alt Step', 'Quickstep', 'Feather Step', 'Stutter Step', 'Box Step'}
  19.     state.UseAltStep = M(false, 'Use Alt Step')
  20.     state.SelectStepTarget = M(false, 'Select Step Target')
  21.     state.IgnoreTargetting = M(true, 'Ignore Targetting')
  22.  
  23.     state.ClosedPosition = M(false, 'Closed Position')
  24.  
  25.     state.CurrentStep = M{['description']='Current Step', 'Main', 'Alt'}
  26. --  state.SkillchainPending = M(false, 'Skillchain Pending')
  27.  
  28.     state.CP = M(false, "Capacity Points Mode")
  29.  
  30.      no_swap_gear = S{"Warp Ring", "Dim. Ring (Dem)", "Dim. Ring (Holla)", "Dim. Ring (Mea)", "Trizek Ring", "Echad Ring", "Facility Ring", "Capacity Ring", "War Hoop"}   
  31.  
  32.     lockstyleset = 3
  33. end
  34.  
  35. -------------------------------------------------------------------------------------------------------------------
  36. -- User setup functions for this job.
  37. -------------------------------------------------------------------------------------------------------------------
  38.  
  39. -- Gear Modes
  40. function user_setup()
  41.     state.OffenseMode:options('Normal', 'LowAcc', 'MidAcc', 'HighAcc')
  42.     state.HybridMode:options('Normal', 'HIGH', 'MID', 'LOW')
  43.     state.WeaponskillMode:options('Normal', 'Acc')
  44.    
  45. -- Allows the use of Ctrl + ~ and Alt + ~ for 2 more macros of your choice.
  46.     send_command('bind ^` input /ja "Chocobo Jig II" <me>') --Ctrl'~'
  47.     send_command('bind !` input /ja "Spectral Jig" <me>') --Alt'~'
  48.     send_command('bind f9 gs c cycle OffenseMode') --F9
  49.     send_command('bind ^f9 gs c cycle WeaponSkillMode') --Ctrl'F9'
  50.     send_command('bind f10 gs c cycle HybridMode') --F10
  51.     send_command('bind f11 gs c cycle mainstep') --F11
  52.     send_command('bind @c gs c toggle CP') --WindowKey'C'
  53.  
  54.     select_default_macro_book(2)
  55.     set_lockstyle(3)
  56.  
  57.     Haste = 0
  58.     DW_needed = 0
  59.     DW = true
  60.     moving = false
  61.     update_combat_form()
  62.     determine_haste_group()
  63. end
  64.  
  65. -- Erases the Key Binds above when you switch to another job.
  66. function user_unload()
  67.     send_command('unbind ^`')
  68.     send_command('unbind !`')
  69.     send_command('unbind !-')
  70.     send_command('unbind ^=')
  71.     send_command('unbind f11')
  72.     send_command('bind @c')
  73. end
  74.  
  75. -- Define sets and vars used by this job file.
  76. function init_gear_sets()
  77.  
  78.     ------------------------------------------------------------------------------------------------
  79.     ---------------------------------------- Precast Sets ------------------------------------------
  80.     ------------------------------------------------------------------------------------------------
  81.  
  82.     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"}
  83.  
  84.     sets.precast.JA['Provoke'] = sets.Enmity
  85.     sets.precast.JA['No Foot Rise'] = {body="Horos Casaque +2"}
  86.     sets.precast.JA['Trance'] = {head="Horos Tiara +3"}
  87.  
  88.     sets.precast.Waltz = {ammo="Charis Feather",
  89.         head="Maxixi Tiara +2",
  90.         neck="Unmoving Collar +1",
  91.         body="Maxixi Casaque +2",
  92.         hands="Maxixi Wrists +2",
  93.         ring1="Asklepian Ring",
  94.         ring2="Carbuncle Ring",
  95.         back="Toetapper Mantle",
  96.         waist="Aristo Belt",
  97.         legs="Maxixi Tights +2",
  98.         feet="Maxixi Toe shoes +1"}
  99.  
  100.     sets.precast.WaltzSelf = set_combine(sets.precast.Waltz, {ring1="Asklepian Ring"})
  101.     sets.precast.Waltz['Healing Waltz'] = {}
  102.     sets.precast.Samba = {head="Maxixi Tiara +2",body="Mummu Jacket +2",back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}}
  103.     sets.precast.Jig = {feet="Maxixi Toe shoes +1",legs="Horos Tights +1"}
  104.  
  105.     sets.precast.Step = {
  106.         head="Maxixi Tiara +2",
  107.         body="Maxixi Casaque +2",
  108.         hands="Maxixi Bangles +3",
  109.         legs="Maxixi Tights +2",
  110.         feet={ name="Horos Toe Shoes +2", augments={'Enhances "Closed Position" effect',}},
  111.         neck="Etoile Gorget",
  112.         waist="Chiner's Belt +1",
  113.         left_ear="Mache Earring",
  114.         right_ear="Eabani Earring",
  115.         left_ring="Mummu Ring",
  116.         right_ring="Chirich Ring", 
  117.     }
  118.    
  119.     sets.precast.Flourish1 = {}
  120.     sets.precast.Flourish1['Animated Flourish'] = sets.Enmity
  121.     sets.precast.Flourish1['Violent Flourish'] = {
  122.         head="Mummu Bonnet +1",
  123.         body="Horos Casaque",
  124.         hands="Mummu Wrists +2",
  125.         legs="Mummu Kecks +1",
  126.         feet={ name="Horos Toe Shoes +2", augments={'Enhances "Closed Position" effect',}},
  127.         neck="Etoile Gorget",
  128.         waist="Chiner's Belt +1",
  129.         left_ear="Mache Earring",
  130.         right_ear="Eabani Earring",
  131.     }
  132.     sets.precast.Flourish1['Desperate Flourish'] = {}
  133.  
  134.     sets.precast.Flourish2 = {}
  135.     sets.precast.Flourish2['Reverse Flourish'] = {hands="Macu. Bangles +1",back="Toetapper Mantle"}
  136.    
  137.     sets.precast.Flourish3 = {}
  138.     sets.precast.Flourish3['Striking Flourish'] = {body="Macu. Casaque +1"}
  139.     sets.precast.Flourish3['Climactic Flourish'] = {head="Maculele Tiara +1",}
  140.  
  141.     sets.precast.FC = {ammo="Impatiens",ear2="Loquacious Earring"}
  142.  
  143.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  144.  
  145.     ------------------------------------------------------------------------------------------------
  146.     ------------------------------------- Weapon Skill Sets ----------------------------------------
  147.     ------------------------------------------------------------------------------------------------
  148.  
  149.     sets.precast.WS = {
  150.         head="Herculean Helm",
  151.         body="Herculean Vest",
  152.         hands="Maxixi Bangles +3",
  153.         legs="Herculean Trousers",
  154.         feet="Herculean Boots",
  155.         neck="Etoile Gorget",
  156.         waist="Chiner's Belt +1",
  157.         left_ear="Mache Earring",
  158.         right_ear="Moonshade Earring",
  159.         left_ring="Mummu Ring",
  160.         right_ring="Rajas Ring",
  161.         back="Senuna's Mantle",        
  162.         }
  163.  
  164.     sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
  165.  
  166.     sets.precast.WS.Critical = {body="Meg. Cuirie +2"}
  167.  
  168.     sets.precast.WS['Exenterator'] = {}
  169.  
  170.     sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {})
  171.  
  172.     sets.precast.WS['Pyrrhic Kleos'] = {ammo="Ginsen",
  173.         head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+15',}},
  174.         neck="Aqua Gorget",
  175.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  176.         right_ear="Tati Earring",
  177.         body="Rawhide Vest",
  178.         hands={ name="Herculean Gloves", augments={'Accuracy+25 Attack+25','"Triple Atk."+3','STR+4','Accuracy+11','Attack+12',}},
  179.         left_ring="Epona's Ring",
  180.         right_ring="Ilabrat Ring",
  181.         back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
  182.         waist="Fotia Belt",
  183.         legs="Lustratio Subligar",
  184.         feet={ name="Herculean Boots", augments={'Accuracy+23 Attack+23','"Store TP"+2','STR+15','Accuracy+15','Attack+4',}}}
  185.  
  186.     sets.precast.WS['Pyrrhic Kleos'].Acc = set_combine(sets.precast.WS['Pyrrhic Kleos'], {})
  187.  
  188.     sets.precast.WS['Evisceration'] = {
  189.         head="Adhemar Bonnet +1",
  190.         body="Mummu Jacket +2",
  191.         hands="Mummu Wrists +2",
  192.         legs="Samnuha Tights",
  193.         feet="Herculean Boots",
  194.         neck="Etoile Gorget",
  195.         waist="Chiner's Belt +1",
  196.         left_ear="Mache Earring",
  197.         right_ear="Moonshade Earring",
  198.         left_ring="Mummu Ring",
  199.         right_ring="Rajas Ring",
  200.         back="Senuna's Mantle",    
  201.         }
  202.  
  203.     sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {})
  204.  
  205.     sets.precast.WS['Rudra\'s Storm'] = {
  206.         ammo="Charis Feather",
  207.         head="Horos Tiara +3",
  208.         body="Horos Casaque +1",
  209.         hands="Meg. Gloves +2",
  210.         legs="Horos Tights +3",
  211.         feet={ name="Herculean Boots", augments={'Attack+29','Weapon skill damage +5%','DEX+8','Accuracy+7',}},
  212.         neck="Caro Necklace",
  213.         waist="Artful Belt +1",
  214.         left_ear="Sherida Earring",
  215.         right_ear="Moonshade Earring",
  216.         left_ring="Epona's Ring",
  217.         right_ring="Ilabrat Ring",
  218.         back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%'}}
  219.         }
  220.  
  221.     sets.precast.WS['Rudra\'s Storm'].Acc = set_combine(sets.precast.WS['Rudra\'s Storm'], {})
  222.  
  223.     sets.precast.WS['Aeolian Edge'] = {
  224.         ammo="Charis Feather",
  225.         head={ name="Herculean Helm", augments={'"Mag.Atk.Bns."+23','"Store TP"+2','MND+9','Mag. Acc.+15',}},
  226.         body={ name="Samnuha Coat", augments={'Mag. Acc.+13','"Mag.Atk.Bns."+14','"Fast Cast"+3','"Dual Wield"+4',}},
  227.         hands="Leyline Gloves",
  228.         legs={ name="Herculean Trousers", augments={'"Mag.Atk.Bns."+23','Enmity-3','STR+13','Mag. Acc.+11',}},
  229.         feet={ name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Enmity-3','INT+1','Mag. Acc.+9','"Mag.Atk.Bns."+8',}},
  230.         neck="Sanctity Necklace",
  231.         waist="Eschan Stone",
  232.         left_ear="Friomisi Earring",
  233.         right_ear="Hecate's Earring",
  234.         left_ring="Acumen Ring",
  235.         right_ring="Ilabrat Ring",
  236.         back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}
  237.         }
  238.  
  239.     ------------------------------------------------------------------------------------------------
  240.     ---------------------------------------- Midcast Sets ------------------------------------------
  241.     ------------------------------------------------------------------------------------------------
  242.  
  243.     sets.midcast.FastRecast = sets.precast.FC
  244.     sets.midcast.SpellInterrupt = {}
  245.     sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
  246.  
  247.     ------------------------------------------------------------------------------------------------
  248.     ----------------------------------------- Idle Sets --------------------------------------------
  249.     ------------------------------------------------------------------------------------------------
  250.  
  251.     sets.idle = {
  252.         head="Herculean Helm",
  253.         neck="Loricate Torque +1",
  254.         ear1="Sherida Earring",
  255.         ear2="Telos Earring",
  256.         body={ name="Herculean Vest", augments={'Damage taken-3%','AGI+9','Accuracy+13','Attack+9',}},
  257.         hands={ name="Herculean Gloves", augments={'Attack+15','Damage taken-3%','STR+2','Accuracy+15',}},
  258.         ring2="Vocane Ring",
  259.         back="Moonbeam Cape",
  260.         waist="Windbuffet Belt +1",
  261.         legs="Mummu Kecks +1",
  262.         feet="Tandava Crackows"
  263.         }
  264.  
  265.     sets.idle.Town = {
  266.         head="Maculele Tiara",
  267.         neck="Anu Torque",
  268.         ear1="Sherida Earring",
  269.         ear2="Telos Earring",
  270.         body="Councilor's Garb",
  271.         hands="Adhemar Wrist. +1",
  272.         ring2="Shneddick Ring",
  273.         back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10'}},
  274.         waist="Windbuffet Belt +1",
  275.         legs="Horos Tights +3",
  276.         feet="Sprinter's Shoes"
  277.         }
  278.  
  279.     ------------------------------------------------------------------------------------------------
  280.     ---------------------------------------- Engaged Sets ------------------------------------------
  281.     ------------------------------------------------------------------------------------------------
  282. -- 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.
  283. -- 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.
  284.     sets.engaged = {
  285.         }
  286.  
  287.     ------------------------------------------------------------------------------------------------
  288.     -------------------------------------- Dual Wield Sets -----------------------------------------
  289.     ------------------------------------------------------------------------------------------------
  290.     -- * DNC Native DW Trait: 30% DW
  291.     -- * DNC Job Points DW Gift: 5% DW
  292.  
  293.     -- No Magic Haste (39% DW to cap)
  294.     sets.engaged.DW = {
  295.         head="Maxixi Tiara +2",
  296.         body="Herculean Vest",
  297.         hands="Adhemar Wristbands",
  298.         legs="Samnuha Tights",
  299.         feet="Herculean Boots",
  300.         neck="Charis Necklace",
  301.         waist="Patentia Sash",
  302.         left_ear="Suppanomimi",
  303.         right_ear="Eabani Earring",
  304.         left_ring="Mummu Ring",
  305.         right_ring="Rajas Ring",
  306.         }
  307.  
  308.     -- 15% Magic Haste (32% DW to cap)
  309.     sets.engaged.DW.LowHaste = {
  310.         head="Adhemar Bonnet +1",
  311.         body="Herculean Vest",
  312.         hands="Adhemar Wristbands",
  313.         legs="Samnuha Tights",
  314.         feet={ name="Horos Toe Shoes +2", augments={'Enhances "Closed Position" effect',}},
  315.         neck="Charis Necklace",
  316.         waist="Chiner's Belt +1",
  317.         left_ear="Suppanomimi",
  318.         right_ear="Eabani Earring",
  319.         left_ring="Mummu Ring",
  320.         right_ring="Rajas Ring",   
  321.         }
  322.  
  323.     -- 30% Magic Haste (21% DW to cap)
  324.     sets.engaged.DW.MidHaste = {
  325.         head="Dampening Tam",
  326.         body="Herculean Vest",
  327.         hands="Adhemar Wristbands",
  328.         legs="Samnuha Tights",
  329.         feet={ name="Horos Toe Shoes +2", augments={'Enhances "Closed Position" effect',}},
  330.         neck="Etoile Gorget",
  331.         waist="Chiner's Belt +1",  
  332.         left_ear="Suppanomimi",
  333.         right_ear="Eabani Earring",
  334.         left_ring="Mummu Ring",
  335.         right_ring="Rajas Ring",
  336.         }
  337.  
  338.     -- 45% Magic Haste (1% DW to cap)
  339.     sets.engaged.DW.MaxHaste = {
  340.         head="Adhemar Bonnet +1",
  341.         body="Herculean Vest",
  342.         hands="Adhemar Wristbands",
  343.         legs="Samnuha Tights",
  344.         feet={ name="Horos Toe Shoes +2", augments={'Enhances "Closed Position" effect',}},
  345.         neck="Etoile Gorget",
  346.         left_ear="Suppanomimi",
  347.         right_ear="Eabani Earring",
  348.         left_ring="Mummu Ring",
  349.         right_ring="Rajas Ring",   
  350.         }
  351.    
  352.     ------------------------------------------------------------------------------------------------
  353.     --------------------------------------- Accuracy Sets ------------------------------------------
  354.     ------------------------------------------------------------------------------------------------
  355. -- Define three tiers of Accuracy.  These sets are cycled with the F9 Button to increase accuracy in stages as desired.
  356.     sets.engaged.Acc1 = {head="Horos Tiara +3"}
  357.     sets.engaged.Acc2 = {    
  358.         head="Maxixi Tiara +2",
  359.         body="Maxixi Casaque +2",
  360.         hands="Maxixi Bangles +3",
  361.         left_ear="Mache Earring",  
  362.         right_ring="Chirich Ring"
  363.     }
  364.     sets.engaged.Acc3 = {
  365.         head="Maxixi Tiara +2",
  366.         body="Maxixi Casaque +2",
  367.         hands="Maxixi Bangles +3",
  368.         legs="Meg. Chausses +1",
  369.         feet="Meg. Jam +1",
  370.         neck="Etoile Gorget",
  371.         left_ear="Mache Earring",
  372.         right_ear="Eabani Earring",
  373.         left_ring="Mummu Ring",
  374.         right_ring="Chirich Ring",}
  375. -- Base Shield
  376.     sets.engaged.LowAcc = set_combine(sets.engaged, sets.engaged.Acc1)
  377.     sets.engaged.MidAcc = set_combine(sets.engaged, sets.engaged.Acc2)
  378.     sets.engaged.HighAcc = set_combine(sets.engaged, sets.engaged.Acc3)
  379. -- Base DW
  380.     sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, sets.engaged.Acc1)
  381.     sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW, sets.engaged.Acc2)
  382.     sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW, sets.engaged.Acc3)
  383. -- LowHaste DW
  384.     sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc1)
  385.     sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc2)
  386.     sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc3)
  387. -- MidHaste DW
  388.     sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc1)
  389.     sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc2)
  390.     sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc3)
  391. -- HighHaste DW
  392.     sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc1)
  393.     sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc2)
  394.     sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc3)
  395. -- HighHaste DW
  396.     sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.LowAcc)
  397.     sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.MidAcc)
  398.     sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.HighAcc)
  399.  
  400.     ------------------------------------------------------------------------------------------------
  401.     ---------------------------------------- Hybrid Sets -------------------------------------------
  402.     ------------------------------------------------------------------------------------------------
  403. -- Define three tiers of Defense Taken.  These sets are cycled with the F10 Button. DT1-16%, DT2-28%, DT3-47%
  404.     sets.engaged.DT1 = {neck="Loricate Torque +1",ring1="Defending Ring"}
  405.     sets.engaged.DT2 = {neck="Loricate Torque +1",ring1="Defending Ring",ring2="Vocane Ring",back="Moonbeam Cape"}
  406.     sets.engaged.DT3 = {head="Herculean Helm",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',}}}
  407.  
  408. -- Shield Base
  409.     sets.engaged.LOW = set_combine(sets.engaged, sets.engaged.DT1)
  410.     sets.engaged.LowAcc.LOW = set_combine(sets.engaged.LowAcc, sets.engaged.DT1)
  411.     sets.engaged.MidAcc.LOW = set_combine(sets.engaged.MidAcc, sets.engaged.DT1)
  412.     sets.engaged.HighAcc.LOW = set_combine(sets.engaged.HighAcc, sets.engaged.DT1)
  413.    
  414.     sets.engaged.MID = set_combine(sets.engaged, sets.engaged.DT2)
  415.     sets.engaged.LowAcc.MID = set_combine(sets.engaged.LowAcc, sets.engaged.DT2)
  416.     sets.engaged.MidAcc.MID = set_combine(sets.engaged.MidAcc, sets.engaged.DT2)
  417.     sets.engaged.HighAcc.MID = set_combine(sets.engaged.HighAcc, sets.engaged.DT2)
  418.    
  419.     sets.engaged.HIGH = set_combine(sets.engaged, sets.engaged.DT3)
  420.     sets.engaged.LowAcc.HIGH = set_combine(sets.engaged.LowAcc, sets.engaged.DT3)
  421.     sets.engaged.MidAcc.HIGH = set_combine(sets.engaged.MidAcc, sets.engaged.DT3)
  422.     sets.engaged.HighAcc.HIGH = set_combine(sets.engaged.HighAcc, sets.engaged.DT3)
  423. -- No Haste DW
  424.     sets.engaged.DW.LOW = set_combine(sets.engaged.DW, sets.engaged.DT1)
  425.     sets.engaged.DW.LowAcc.LOW = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT1)
  426.     sets.engaged.DW.MidAcc.LOW = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT1)
  427.     sets.engaged.DW.HighAcc.LOW = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT1)
  428.    
  429.     sets.engaged.DW.MID = set_combine(sets.engaged.DW, sets.engaged.DT2)
  430.     sets.engaged.DW.LowAcc.MID = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT2)
  431.     sets.engaged.DW.MidAcc.MID = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT2)
  432.     sets.engaged.DW.HighAcc.MID = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT2)
  433.  
  434.     sets.engaged.DW.HIGH = set_combine(sets.engaged.DW, sets.engaged.DT3)
  435.     sets.engaged.DW.LowAcc.HIGH = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT3)
  436.     sets.engaged.DW.MidAcc.HIGH = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT3)
  437.     sets.engaged.DW.HighAcc.HIGH = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT3)  
  438. -- Low Haste DW
  439.     sets.engaged.DW.LOW.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT1)
  440.     sets.engaged.DW.LowAcc.LOW.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT1)
  441.     sets.engaged.DW.MidAcc.LOW.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT1)
  442.     sets.engaged.DW.HighAcc.LOW.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT1)
  443.    
  444.     sets.engaged.DW.MID.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT2)
  445.     sets.engaged.DW.LowAcc.MID.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT2)
  446.     sets.engaged.DW.MidAcc.MID.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT2)
  447.     sets.engaged.DW.HighAcc.MID.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT2)
  448.    
  449.     sets.engaged.DW.HIGH.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT3)
  450.     sets.engaged.DW.LowAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT3)
  451.     sets.engaged.DW.MidAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT3)
  452.     sets.engaged.DW.HighAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT3)
  453. -- Mid Haste
  454.     sets.engaged.DW.LOW.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT1)
  455.     sets.engaged.DW.LowAcc.LOW.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT1)
  456.     sets.engaged.DW.MidAcc.LOW.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT1)
  457.     sets.engaged.DW.HighAcc.LOW.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT1)
  458.    
  459.     sets.engaged.DW.MID.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT2)
  460.     sets.engaged.DW.LowAcc.MID.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT2)
  461.     sets.engaged.DW.MidAcc.MID.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT2)
  462.     sets.engaged.DW.HighAcc.MID.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT2)
  463.  
  464.     sets.engaged.DW.HIGH.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT3)
  465.     sets.engaged.DW.LowAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT3)
  466.     sets.engaged.DW.MidAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT3)
  467.     sets.engaged.DW.HighAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT3)    
  468. -- High Haste
  469.     sets.engaged.DW.LOW.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT1)
  470.     sets.engaged.DW.LowAcc.LOW.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT1)
  471.     sets.engaged.DW.MidAcc.LOW.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT1)
  472.     sets.engaged.DW.HighAcc.LOW.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT1)
  473.    
  474.     sets.engaged.DW.MID.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT2)
  475.     sets.engaged.DW.LowAcc.MID.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT2)
  476.     sets.engaged.DW.MidAcc.MID.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT2)
  477.     sets.engaged.DW.HighAcc.MID.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT2)
  478.    
  479.     sets.engaged.DW.HIGH.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT3)
  480.     sets.engaged.DW.LowAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT3)
  481.     sets.engaged.DW.MidAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT3)
  482.     sets.engaged.DW.HighAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT3)
  483. -- Max Haste
  484.     sets.engaged.DW.LOW.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT1)
  485.     sets.engaged.DW.LowAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT1)
  486.     sets.engaged.DW.MidAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT1)
  487.     sets.engaged.DW.HighAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT1)
  488.    
  489.     sets.engaged.DW.MID.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT2)
  490.     sets.engaged.DW.LowAcc.MID.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT2)
  491.     sets.engaged.DW.MidAcc.MID.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT2)
  492.     sets.engaged.DW.HighAcc.MID.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT2)
  493.    
  494.     sets.engaged.DW.HIGH.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT3)
  495.     sets.engaged.DW.LowAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT3)
  496.     sets.engaged.DW.MidAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT3)
  497.     sets.engaged.DW.HighAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT3)
  498.  
  499.     ------------------------------------------------------------------------------------------------
  500.     ---------------------------------------- Special Sets ------------------------------------------
  501.     ------------------------------------------------------------------------------------------------
  502.  
  503. --  sets.buff['Saber Dance'] = {legs="Horos Tights +3"}
  504. --  sets.buff['Fan Dance'] = {body="Horos Bangles +1"}
  505.     sets.buff['Climactic Flourish'] = {head="Maculele Tiara +1", body="Meg. Cuirie +2"}
  506.     sets.buff['Closed Position'] = {feet="Horos T. Shoes +2"}
  507.  
  508.     sets.buff.Doom = {
  509.         neck="Nicander's Necklace", --20
  510.         ring1="Eshmun's Ring", --20
  511.         ring2="Eshmun's Ring", --20
  512.         waist="Gishdubar Sash", --10
  513.         }
  514.  
  515.     sets.CP = {back="Mecisto. Mantle"}
  516. --  sets.Reive = {neck="Ygnas's Resolve +1"}
  517.  
  518. end
  519.  
  520. -------------------------------------------------------------------------------------------------------------------
  521. -- Job-specific hooks for standard casting events.
  522. -------------------------------------------------------------------------------------------------------------------
  523.  
  524. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  525. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  526. function job_precast(spell, action, spellMap, eventArgs)
  527.     if spellMap == 'Utsusemi' then
  528.         if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
  529.             cancel_spell()
  530.             add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
  531.             eventArgs.handled = true
  532.             return
  533.         elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
  534.             send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
  535.         end
  536.     end
  537.    
  538. -- Used to overwrite Moonshade Earring if TP is more than 2750.
  539.     if spell.type == 'WeaponSkill' then
  540.         if player.tp > 2750 then
  541.         equip({right_ear = "Sherida Earring"})
  542.         end
  543.     end
  544.    
  545. -- Used to optimize Rudra's Storm when Climactic Flourish is active.
  546.     if spell.type == 'WeaponSkill' then
  547.         if spell.english == "Rudra's Storm" and buffactive['Climactic Flourish'] then
  548.             equip({head="Maculele Tiara +1", left_ear="Ishvara Earring"})
  549.         end
  550.     end
  551.    
  552. -- Forces Maculele Tiara +1 to override your WS Head slot if Climactic Flourish is active.  Corresponds with sets.buff['Climactic Flourish'].
  553.     if spell.type == "WeaponSkill" then
  554.         if state.Buff['Climactic Flourish'] then
  555.             equip(sets.buff['Climactic Flourish'])
  556.         end
  557.     end
  558. end
  559.  
  560. function job_post_precast(spell, action, spellMap, eventArgs)
  561.     if spell.type == "WeaponSkill" then
  562.         if state.Buff['Sneak Attack'] == true then
  563.             equip(sets.precast.WS.Critical)
  564.         end
  565.         if state.Buff['Climactic Flourish'] then
  566.             equip(sets.buff['Climactic Flourish'])
  567.         end
  568.     end
  569.     if spell.type=='Waltz' and spell.target.type == 'SELF' then
  570.         equip(sets.precast.WaltzSelf)
  571.     end
  572. end
  573.  
  574. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  575. function job_aftercast(spell, action, spellMap, eventArgs)
  576.     -- Weaponskills wipe SATA.  Turn those state vars off before default gearing is attempted.
  577.     if spell.type == 'WeaponSkill' and not spell.interrupted then
  578.         state.Buff['Sneak Attack'] = false
  579.     end
  580. end
  581.  
  582. -------------------------------------------------------------------------------------------------------------------
  583. -- Job-specific hooks for non-casting events.
  584. -------------------------------------------------------------------------------------------------------------------
  585. function job_buff_change(buff,gain)
  586.     if buff == 'Saber Dance' or buff == 'Climactic Flourish' or buff == 'Fan Dance' then
  587.         handle_equipping_gear(player.status)
  588.     end
  589.  
  590.     if buff == "doom" then
  591.         if gain then
  592.             equip(sets.buff.Doom)
  593.             send_command('@input /p Doomed.')
  594.              disable('ring1','ring2','waist','neck')
  595.         else
  596.             enable('ring1','ring2','waist','neck')
  597.             handle_equipping_gear(player.status)
  598.         end
  599.     end
  600.  
  601. end
  602.  
  603. -------------------------------------------------------------------------------------------------------------------
  604. -- User code that supplements standard library decisions.
  605. -------------------------------------------------------------------------------------------------------------------
  606. function job_handle_equipping_gear(playerStatus, eventArgs)
  607.     update_combat_form()
  608.     determine_haste_group()
  609. end
  610.  
  611. function job_update(cmdParams, eventArgs)
  612.     handle_equipping_gear(player.status)
  613. end
  614.  
  615. function update_combat_form()
  616.     if DW == true then
  617.         state.CombatForm:set('DW')
  618.     elseif DW == false then
  619.         state.CombatForm:reset()
  620.     end
  621. end
  622.  
  623. function get_custom_wsmode(spell, spellMap, defaut_wsmode)
  624.     local wsmode
  625.  
  626.     if state.Buff['Sneak Attack'] then
  627.         wsmode = 'SA'
  628.     end
  629.  
  630.     return wsmode
  631. end
  632.  
  633. function customize_idle_set(idleSet)
  634.     if state.CP.current == 'on' then
  635.         equip(sets.CP)
  636.         disable('back')
  637.     else
  638.         enable('back')
  639.     end
  640.  
  641.     return idleSet
  642. end
  643.  
  644. function customize_melee_set(meleeSet)
  645.     if state.Buff['Climactic Flourish'] then
  646.         meleeSet = set_combine(meleeSet, sets.buff['Climactic Flourish'])
  647.     end
  648.     if state.ClosedPosition.value == true then
  649.         meleeSet = set_combine(meleeSet, sets.buff['Closed Position'])
  650.     end
  651.  
  652.     return meleeSet
  653. end
  654.  
  655. -- Handle auto-targetting based on local setup.
  656. function job_auto_change_target(spell, action, spellMap, eventArgs)
  657.     if spell.type == 'Step' then
  658.         if state.IgnoreTargetting.value == true then
  659.             state.IgnoreTargetting:reset()
  660.             eventArgs.handled = true
  661.         end
  662.  
  663.         eventArgs.SelectNPCTargets = state.SelectStepTarget.value
  664.     end
  665. end
  666.  
  667.  
  668. -- Function to display the current relevant user state when doing an update.
  669. -- Set eventArgs.handled to true if display was handled, and you don't want the default info shown.
  670. function display_current_job_state(eventArgs)
  671.     local msg = '[ Melee'
  672.  
  673.     if state.CombatForm.has_value then
  674.         msg = msg .. ' (' .. state.CombatForm.value .. ')'
  675.     end
  676.  
  677.     msg = msg .. ': '
  678.  
  679.     msg = msg .. state.OffenseMode.value
  680.     if state.HybridMode.value ~= 'Normal' then
  681.         msg = msg .. '/' .. state.HybridMode.value
  682.     end
  683.     msg = msg .. ' ][ WS: ' .. state.WeaponskillMode.value .. ' ]'
  684.  
  685.     if state.DefenseMode.value ~= 'None' then
  686.         msg = msg .. '[ Defense: ' .. state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ' ]'
  687.     end
  688.  
  689.     if state.ClosedPosition.value then
  690.         msg = msg .. '[ Closed Position: ON ]'
  691.     end
  692.  
  693.     if state.Kiting.value then
  694.         msg = msg .. '[ Kiting Mode: ON ]'
  695.     end
  696.  
  697.     msg = msg .. '[ '..state.MainStep.current
  698.  
  699.     if state.UseAltStep.value == true then
  700.         msg = msg .. '/'..state.AltStep.current
  701.     end
  702.  
  703.     msg = msg .. ' ]'
  704.  
  705.     add_to_chat(060, msg)
  706.  
  707.     eventArgs.handled = true
  708. end
  709.  
  710.  
  711. -------------------------------------------------------------------------------------------------------------------
  712. -- User self-commands.
  713. -------------------------------------------------------------------------------------------------------------------
  714.  
  715. -------------------------------------------------------------------------------------------------------------------
  716. -- Utility functions specific to this job.
  717. -------------------------------------------------------------------------------------------------------------------
  718.  
  719. function determine_haste_group()
  720.     classes.CustomMeleeGroups:clear()
  721.     if DW == true then
  722.         if DW_needed <= 1 then
  723.             classes.CustomMeleeGroups:append('MaxHaste')
  724.         elseif DW_needed > 1 and DW_needed <= 9 then
  725.             classes.CustomMeleeGroups:append('HighHaste')
  726.         elseif DW_needed > 9 and DW_needed <= 21 then
  727.             classes.CustomMeleeGroups:append('MidHaste')
  728.         elseif DW_needed > 21 and DW_needed <= 39 then
  729.             classes.CustomMeleeGroups:append('LowHaste')
  730.         elseif DW_needed > 39 then
  731.             classes.CustomMeleeGroups:append('')
  732.         end
  733.     end
  734. end
  735.  
  736. function job_self_command(cmdParams, eventArgs)
  737.     if cmdParams[1] == 'step' then
  738.         if cmdParams[2] == 't' then
  739.             state.IgnoreTargetting:set()
  740.         end
  741.  
  742.         local doStep = ''
  743.         if state.UseAltStep.value == true then
  744.             doStep = state[state.CurrentStep.current..'Step'].current
  745.             state.CurrentStep:cycle()
  746.         else
  747.             doStep = state.MainStep.current
  748.         end
  749.  
  750.         send_command('@input /ja "'..doStep..'" <t>')
  751.     end
  752.     gearinfo(cmdParams, eventArgs)
  753. end
  754.  
  755. function gearinfo(cmdParams, eventArgs)
  756.     if cmdParams[1] == 'gearinfo' then
  757.         if type(tonumber(cmdParams[2])) == 'number' then
  758.             if tonumber(cmdParams[2]) ~= DW_needed then
  759.             DW_needed = tonumber(cmdParams[2])
  760.             DW = true
  761.             end
  762.         elseif type(cmdParams[2]) == 'string' then
  763.             if cmdParams[2] == 'false' then
  764.                 DW_needed = 0
  765.                 DW = false
  766.             end
  767.         end
  768.         if type(tonumber(cmdParams[3])) == 'number' then
  769.             if tonumber(cmdParams[3]) ~= Haste then
  770.                 Haste = tonumber(cmdParams[3])
  771.             end
  772.         end
  773.         if type(cmdParams[4]) == 'string' then
  774.             if cmdParams[4] == 'true' then
  775.                 moving = true
  776.             elseif cmdParams[4] == 'false' then
  777.                 moving = false
  778.             end
  779.         end
  780.         if not midaction() then
  781.             job_update()
  782.         end
  783.     end
  784. end
  785.  
  786. -- If you attempt to use a step, this will automatically use Presto if you are under 5 Finishing moves and resend step.
  787. function job_pretarget(spell, action, spellMap, eventArgs)
  788.     if spell.type == 'Step' then
  789.         local allRecasts = windower.ffxi.get_ability_recasts()
  790.         local prestoCooldown = allRecasts[236]
  791.         local under5FMs = not buffactive['Finishing Move 5'] and not buffactive['Finishing Move (6+)']
  792.          
  793.         if player.main_job_level >= 77 and prestoCooldown < 1 and under5FMs then
  794.             cast_delay(1.1)
  795.             send_command('input /ja "Presto" <me>')
  796.         end
  797.     end
  798.    
  799. -- If you attempt to use Climactic Flourish with zero finishing moves, this will automatically use Box Step and then resend Climactic Flourish.
  800.         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+)']
  801.  
  802.     if spell.english == "Climactic Flourish" and under1FMs then
  803.             cast_delay(1.9)
  804.             send_command('input /ja "Box Step" <t>')
  805.     end
  806. end
  807.  
  808. -- My Waltz Rules to Overwrite Mote's
  809. -- My Current Waltz Amounts: I:372 II:697 III:1134
  810. function refine_waltz(spell, action, spellMap, eventArgs)
  811.     if missingHP ~= nil then
  812.         if player.main_job == 'DNC' then
  813.             if missingHP < 40 and spell.target.name == player.name then
  814.                 -- Not worth curing yourself for so little.
  815.                 -- Don't block when curing others to allow for waking them up.
  816.                 add_to_chat(122,'Full HP!')
  817.                 eventArgs.cancel = true
  818.                 return
  819.             elseif missingHP < 475 then
  820.                 newWaltz = 'Curing Waltz'
  821.                 waltzID = 190
  822.             elseif missingHP < 850 then
  823.                 newWaltz = 'Curing Waltz II'
  824.                 waltzID = 191
  825.             else
  826.                 newWaltz = 'Curing Waltz III'
  827.                 waltzID = 192
  828.             end
  829.         else
  830.             -- Not dnc main or sub; ignore
  831.             return
  832.         end
  833.     end
  834. end
  835.  
  836. -- Automatically loads a Macro Set by: (Pallet,Book)
  837. function select_default_macro_book()
  838.     if player.sub_job == 'SAM' then
  839.         set_macro_page(1, 2)
  840.     elseif player.sub_job == 'WAR' then
  841.         set_macro_page(1, 2)
  842.     elseif player.sub_job == 'RUN' then
  843.         set_macro_page(1, 2)    
  844.     elseif player.sub_job == 'BLU' then
  845.         set_macro_page(1, 2)
  846.     elseif player.sub_job == 'THF' then
  847.         set_macro_page(1, 2)
  848.     elseif player.sub_job == 'NIN' then
  849.         set_macro_page(1, 2)
  850.     else
  851.         set_macro_page(1, 2)
  852.     end
  853. end
  854.  
  855. function set_lockstyle()
  856.     send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  857. end
Advertisement
Add Comment
Please, Sign In to add comment