Advertisement
KGrinols

Full_Skeleton

Jan 5th, 2019
11,735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 29.75 KB | None | 0 0
  1. -- Original: Motenten / Modified: Arislan / Modified Again: Cambion
  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.     lockstyleset = 1
  31. end
  32.  
  33. -------------------------------------------------------------------------------------------------------------------
  34. -- User setup functions for this job.
  35. -------------------------------------------------------------------------------------------------------------------
  36.  
  37. -- Gear Modes
  38. function user_setup()
  39.     state.OffenseMode:options('Normal', 'LowAcc', 'MidAcc', 'HighAcc')
  40.     state.HybridMode:options('Normal', 'HIGH', 'MID', 'LOW')
  41.     state.WeaponskillMode:options('Normal', 'Acc')
  42.    
  43. -- Allows the use of Ctrl + ~ and Alt + ~ for 2 more macros of your choice.
  44.     send_command('bind ^` input /ja "Chocobo Jig II" <me>') --Ctrl'~'
  45.     send_command('bind !` input /ja "Spectral Jig" <me>') --Alt'~'
  46.     send_command('bind f9 gs c cycle OffenseMode') --F9
  47.     send_command('bind ^f9 gs c cycle WeaponSkillMode') --Ctrl'F9'
  48.     send_command('bind f10 gs c cycle HybridMode') --F10
  49.     send_command('bind f11 gs c cycle mainstep') --F11
  50.     send_command('bind @c gs c toggle CP')
  51.  
  52.     select_default_macro_book()
  53.     set_lockstyle()
  54.  
  55.     Haste = 0
  56.     DW_needed = 0
  57.     DW = false
  58.     moving = false
  59.     update_combat_form()
  60.     determine_haste_group()
  61. end
  62.  
  63. -- Erases the Key Binds above when you switch to another job.
  64. function user_unload()
  65.     send_command('unbind ^`')
  66.     send_command('unbind !`')
  67.     send_command('unbind !-')
  68.     send_command('unbind ^=')
  69.     send_command('unbind f11')
  70.     send_command('unbind @c')
  71. end
  72.  
  73. -- Define sets and vars used by this job file.
  74. function init_gear_sets()
  75.  
  76.     ------------------------------------------------------------------------------------------------
  77.     ---------------------------------------- Precast Sets ------------------------------------------
  78.     ------------------------------------------------------------------------------------------------
  79.  
  80.     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"}
  81.  
  82.     sets.precast.JA['Provoke'] = sets.Enmity
  83.     sets.precast.JA['No Foot Rise'] = {body="Horos Casaque +2"}
  84.     sets.precast.JA['Trance'] = {head="Horos Tiara +3"}
  85.  
  86.     sets.precast.Waltz = {
  87.    
  88.     }
  89.  
  90.     sets.precast.WaltzSelf = set_combine(sets.precast.Waltz, {ring1="Asklepian Ring"})
  91.     sets.precast.Waltz['Healing Waltz'] = {}
  92.     sets.precast.Samba = {}
  93.     sets.precast.Jig = {}
  94.  
  95.     sets.precast.Step = {}
  96.     sets.precast.Step['Feather Step'] = set_combine(sets.precast.Step, {})
  97.    
  98.     sets.precast.Flourish1 = {}
  99.     sets.precast.Flourish1['Animated Flourish'] = sets.Enmity
  100.     sets.precast.Flourish1['Violent Flourish'] = {}
  101.     sets.precast.Flourish1['Desperate Flourish'] = {}
  102.  
  103.     sets.precast.Flourish2 = {}
  104.     sets.precast.Flourish2['Reverse Flourish'] = {hands="Macu. Bangles +1",back="Toetapper Mantle"}
  105.    
  106.     sets.precast.Flourish3 = {}
  107.     sets.precast.Flourish3['Striking Flourish'] = {}
  108.     sets.precast.Flourish3['Climactic Flourish'] = {head="Maculele Tiara +1",}
  109.  
  110.     sets.precast.FC = {}
  111.  
  112.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  113.  
  114.     ------------------------------------------------------------------------------------------------
  115.     ------------------------------------- Weapon Skill Sets ----------------------------------------
  116.     ------------------------------------------------------------------------------------------------
  117.  
  118.     sets.precast.WS = {
  119.        
  120.         }
  121.  
  122.     sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
  123.  
  124.     sets.precast.WS.Critical = {body="Meg. Cuirie +2"}
  125.  
  126.     sets.precast.WS['Exenterator'] = {}
  127.  
  128.     sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {})
  129.  
  130.     sets.precast.WS['Pyrrhic Kleos'] = {
  131.    
  132.     }
  133.  
  134.     sets.precast.WS['Pyrrhic Kleos'].Acc = set_combine(sets.precast.WS['Pyrrhic Kleos'], {})
  135.  
  136.     sets.precast.WS['Evisceration'] = {
  137.        
  138.         }
  139.  
  140.     sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {})
  141.  
  142.     sets.precast.WS['Rudra\'s Storm'] = {
  143.        
  144.         }
  145.  
  146.     sets.precast.WS['Rudra\'s Storm'].Acc = set_combine(sets.precast.WS['Rudra\'s Storm'], {})
  147.  
  148.     sets.precast.WS['Aeolian Edge'] = {
  149.        
  150.         }
  151.  
  152.     ------------------------------------------------------------------------------------------------
  153.     ---------------------------------------- Midcast Sets ------------------------------------------
  154.     ------------------------------------------------------------------------------------------------
  155.  
  156.     sets.midcast.FastRecast = sets.precast.FC
  157.     sets.midcast.SpellInterrupt = {}
  158.     sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
  159.  
  160.     ------------------------------------------------------------------------------------------------
  161.     ----------------------------------------- Idle Sets --------------------------------------------
  162.     ------------------------------------------------------------------------------------------------
  163.  
  164.     sets.idle = {
  165.  
  166.         }
  167.  
  168.     sets.idle.Town = {
  169.        
  170.         }
  171.  
  172.     ------------------------------------------------------------------------------------------------
  173.     ---------------------------------------- Engaged Sets ------------------------------------------
  174.     ------------------------------------------------------------------------------------------------
  175. -- 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.
  176. -- 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.
  177.    sets.engaged = {
  178.    
  179.         }
  180.  
  181.    ------------------------------------------------------------------------------------------------
  182.    -------------------------------------- Dual Wield Sets -----------------------------------------
  183.     ------------------------------------------------------------------------------------------------
  184.    -- * DNC Native DW Trait: 30% DW
  185.    -- * DNC Job Points DW Gift: 5% DW -- If you do not have these JP Gifts, add 5% 'to cap' to each set below)
  186.  
  187.    -- No Magic Haste (39% DW to cap) -- Reminder that 39% is assuming you already have 5% from Job Points.  44% DW to cap if not.
  188.    sets.engaged.DW = {
  189.        
  190.        }
  191.  
  192.    -- 15% Magic Haste (32% DW to cap)
  193.    sets.engaged.DW.LowHaste = {
  194.        
  195.        }
  196.  
  197.    -- 30% Magic Haste (21% DW to cap)
  198.    sets.engaged.DW.MidHaste = {
  199.        
  200.        }
  201.  
  202.    -- 35% Magic Haste (16% DW to cap)
  203.    sets.engaged.DW.HighHaste = {
  204.        
  205.         } -- 16% Gear
  206.  
  207.    -- 45% Magic Haste (1% DW to cap)
  208.    sets.engaged.DW.MaxHaste = {
  209.        
  210.        }
  211.    
  212.     ------------------------------------------------------------------------------------------------
  213.    --------------------------------------- Accuracy Sets ------------------------------------------
  214.    ------------------------------------------------------------------------------------------------
  215. -- Define three tiers of Accuracy.  These sets are cycled with the F9 Button to increase accuracy in stages as desired.
  216.    sets.engaged.Acc1 = {}
  217.    sets.engaged.Acc2 = {}
  218.    sets.engaged.Acc3 = {}
  219. -- Base Shield
  220.     sets.engaged.LowAcc = set_combine(sets.engaged, sets.engaged.Acc1)
  221.    sets.engaged.MidAcc = set_combine(sets.engaged, sets.engaged.Acc2)
  222.    sets.engaged.HighAcc = set_combine(sets.engaged, sets.engaged.Acc3)
  223. -- Base DW
  224.    sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, sets.engaged.Acc1)
  225.    sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW, sets.engaged.Acc2)
  226.    sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW, sets.engaged.Acc3)
  227. -- LowHaste DW
  228.     sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc1)
  229.    sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc2)
  230.    sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc3)
  231. -- MidHaste DW
  232.    sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc1)
  233.    sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc2)
  234.     sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc3)
  235. -- HighHaste DW
  236.     sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc1)
  237.    sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc2)
  238.    sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc3)
  239. -- HighHaste DW
  240.     sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.LowAcc)
  241.    sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.MidAcc)
  242.    sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.HighAcc)
  243.  
  244.    ------------------------------------------------------------------------------------------------
  245.    ---------------------------------------- Hybrid Sets -------------------------------------------
  246.    ------------------------------------------------------------------------------------------------
  247. -- Define three tiers of Defense Taken.  These sets are cycled with the F10 Button. DT1-X%, DT2-X%, DT3-X%
  248.    sets.engaged.DT1 = {}
  249.     sets.engaged.DT2 = {}
  250.     sets.engaged.DT3 = {}
  251.  
  252. -- Shield Base
  253.    sets.engaged.LOW = set_combine(sets.engaged, sets.engaged.DT1)
  254.    sets.engaged.LowAcc.LOW = set_combine(sets.engaged.LowAcc, sets.engaged.DT1)
  255.    sets.engaged.MidAcc.LOW = set_combine(sets.engaged.MidAcc, sets.engaged.DT1)
  256.    sets.engaged.HighAcc.LOW = set_combine(sets.engaged.HighAcc, sets.engaged.DT1)
  257.    
  258.     sets.engaged.MID = set_combine(sets.engaged, sets.engaged.DT2)
  259.    sets.engaged.LowAcc.MID = set_combine(sets.engaged.LowAcc, sets.engaged.DT2)
  260.    sets.engaged.MidAcc.MID = set_combine(sets.engaged.MidAcc, sets.engaged.DT2)
  261.    sets.engaged.HighAcc.MID = set_combine(sets.engaged.HighAcc, sets.engaged.DT2)
  262.    
  263.     sets.engaged.HIGH = set_combine(sets.engaged, sets.engaged.DT3)
  264.    sets.engaged.LowAcc.HIGH = set_combine(sets.engaged.LowAcc, sets.engaged.DT3)
  265.    sets.engaged.MidAcc.HIGH = set_combine(sets.engaged.MidAcc, sets.engaged.DT3)
  266.     sets.engaged.HighAcc.HIGH = set_combine(sets.engaged.HighAcc, sets.engaged.DT3)
  267. -- No Haste DW
  268.    sets.engaged.DW.LOW = set_combine(sets.engaged.DW, sets.engaged.DT1)
  269.    sets.engaged.DW.LowAcc.LOW = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT1)
  270.    sets.engaged.DW.MidAcc.LOW = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT1)
  271.    sets.engaged.DW.HighAcc.LOW = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT1)
  272.    
  273.    sets.engaged.DW.MID = set_combine(sets.engaged.DW, sets.engaged.DT2)
  274.    sets.engaged.DW.LowAcc.MID = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT2)
  275.    sets.engaged.DW.MidAcc.MID = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT2)
  276.    sets.engaged.DW.HighAcc.MID = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT2)
  277.  
  278.    sets.engaged.DW.HIGH = set_combine(sets.engaged.DW, sets.engaged.DT3)
  279.    sets.engaged.DW.LowAcc.HIGH = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT3)
  280.    sets.engaged.DW.MidAcc.HIGH = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT3)
  281.     sets.engaged.DW.HighAcc.HIGH = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT3)  
  282. -- Low Haste DW
  283.    sets.engaged.DW.LOW.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT1)
  284.    sets.engaged.DW.LowAcc.LOW.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT1)
  285.    sets.engaged.DW.MidAcc.LOW.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT1)
  286.    sets.engaged.DW.HighAcc.LOW.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT1)
  287.    
  288.    sets.engaged.DW.MID.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT2)
  289.    sets.engaged.DW.LowAcc.MID.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT2)
  290.    sets.engaged.DW.MidAcc.MID.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT2)
  291.    sets.engaged.DW.HighAcc.MID.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT2)
  292.    
  293.     sets.engaged.DW.HIGH.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT3)
  294.    sets.engaged.DW.LowAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT3)
  295.    sets.engaged.DW.MidAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT3)
  296.    sets.engaged.DW.HighAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT3)
  297. -- Mid Haste
  298.    sets.engaged.DW.LOW.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT1)
  299.    sets.engaged.DW.LowAcc.LOW.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT1)
  300.    sets.engaged.DW.MidAcc.LOW.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT1)
  301.    sets.engaged.DW.HighAcc.LOW.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT1)
  302.    
  303.    sets.engaged.DW.MID.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT2)
  304.    sets.engaged.DW.LowAcc.MID.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT2)
  305.    sets.engaged.DW.MidAcc.MID.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT2)
  306.    sets.engaged.DW.HighAcc.MID.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT2)
  307.  
  308.    sets.engaged.DW.HIGH.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT3)
  309.    sets.engaged.DW.LowAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT3)
  310.    sets.engaged.DW.MidAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT3)
  311.     sets.engaged.DW.HighAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT3)    
  312. -- High Haste
  313.    sets.engaged.DW.LOW.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT1)
  314.    sets.engaged.DW.LowAcc.LOW.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT1)
  315.    sets.engaged.DW.MidAcc.LOW.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT1)
  316.    sets.engaged.DW.HighAcc.LOW.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT1)
  317.    
  318.     sets.engaged.DW.MID.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT2)
  319.    sets.engaged.DW.LowAcc.MID.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT2)
  320.    sets.engaged.DW.MidAcc.MID.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT2)
  321.    sets.engaged.DW.HighAcc.MID.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT2)
  322.    
  323.     sets.engaged.DW.HIGH.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT3)
  324.    sets.engaged.DW.LowAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT3)
  325.    sets.engaged.DW.MidAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT3)
  326.    sets.engaged.DW.HighAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT3)
  327. -- Max Haste
  328.    sets.engaged.DW.LOW.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT1)
  329.    sets.engaged.DW.LowAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT1)
  330.    sets.engaged.DW.MidAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT1)
  331.    sets.engaged.DW.HighAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT1)
  332.    
  333.     sets.engaged.DW.MID.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT2)
  334.    sets.engaged.DW.LowAcc.MID.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT2)
  335.    sets.engaged.DW.MidAcc.MID.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT2)
  336.    sets.engaged.DW.HighAcc.MID.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT2)
  337.    
  338.    sets.engaged.DW.HIGH.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT3)
  339.    sets.engaged.DW.LowAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT3)
  340.    sets.engaged.DW.MidAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT3)
  341.     sets.engaged.DW.HighAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT3)
  342.  
  343.    ------------------------------------------------------------------------------------------------
  344.    ---------------------------------------- Special Sets ------------------------------------------
  345.    ------------------------------------------------------------------------------------------------
  346.  
  347. --  sets.buff['Saber Dance'] = {legs="Horos Tights +3"}
  348. --  sets.buff['Fan Dance'] = {hands="Horos Bangles +3"}
  349.    sets.buff['Climactic Flourish'] = {head="Maculele Tiara +1", body="Meg. Cuirie +2"}
  350. --  sets.buff['Closed Position'] = {feet="Horos T. Shoes +3"}
  351.  
  352.    sets.buff.Doom = {
  353.        
  354.        }
  355.  
  356.    sets.CP = {back="Mecisto. Mantle"}
  357.  
  358. end
  359.  
  360. -------------------------------------------------------------------------------------------------------------------
  361. -- Job-specific hooks for standard casting events.
  362. -------------------------------------------------------------------------------------------------------------------
  363.  
  364. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  365. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  366. function job_precast(spell, action, spellMap, eventArgs)
  367.     if spellMap == 'Utsusemi' then
  368.         if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
  369.             cancel_spell()
  370.             add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
  371.             eventArgs.handled = true
  372.             return
  373.         elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
  374.             send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
  375.         end
  376.     end
  377.    
  378. -- Used to overwrite Moonshade Earring if TP is more than 2750.
  379.     if spell.type == 'WeaponSkill' then
  380.         if player.tp > 2750 then
  381.         equip({right_ear = "Sherida Earring"})
  382.         end
  383.     end
  384.    
  385. -- Used to optimize Rudra's Storm when Climactic Flourish is active.
  386.    if spell.type == 'WeaponSkill' then
  387.        if spell.english == "Rudra's Storm" and buffactive['Climactic Flourish'] then
  388.             equip({head="Maculele Tiara +1", left_ear="Ishvara Earring"})
  389.        end
  390.    end
  391.    
  392. -- Forces Maculele Tiara +1 to override your WS Head slot if Climactic Flourish is active.  Corresponds with sets.buff['Climactic Flourish'].
  393.    if spell.type == "WeaponSkill" then
  394.        if state.Buff['Climactic Flourish'] then
  395.            equip(sets.buff['Climactic Flourish'])
  396.        end
  397.    end
  398. end
  399.  
  400. function job_post_precast(spell, action, spellMap, eventArgs)
  401.    if spell.type == "WeaponSkill" then
  402.        if state.Buff['Sneak Attack'] == true then
  403.            equip(sets.precast.WS.Critical)
  404.        end
  405.        if state.Buff['Climactic Flourish'] then
  406.            equip(sets.buff['Climactic Flourish'])
  407.        end
  408.    end
  409.    if spell.type=='Waltz' and spell.target.type == 'SELF' then
  410.        equip(sets.precast.WaltzSelf)
  411.    end
  412. end
  413.  
  414. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  415. function job_aftercast(spell, action, spellMap, eventArgs)
  416.    -- Weaponskills wipe SATA.  Turn those state vars off before default gearing is attempted.
  417.    if spell.type == 'WeaponSkill' and not spell.interrupted then
  418.        state.Buff['Sneak Attack'] = false
  419.    end
  420. end
  421.  
  422. -------------------------------------------------------------------------------------------------------------------
  423. -- Job-specific hooks for non-casting events.
  424. -------------------------------------------------------------------------------------------------------------------
  425. function job_buff_change(buff,gain)
  426.    if buff == 'Saber Dance' or buff == 'Climactic Flourish' or buff == 'Fan Dance' then
  427.        handle_equipping_gear(player.status)
  428.    end
  429.  
  430.    if buff == "doom" then
  431.        if gain then
  432.            equip(sets.buff.Doom)
  433.            send_command('@input /p Doomed.')
  434.             disable()
  435.        else
  436.            enable()
  437.            handle_equipping_gear(player.status)
  438.        end
  439.    end
  440.  
  441. end
  442.  
  443. -------------------------------------------------------------------------------------------------------------------
  444. -- User code that supplements standard library decisions.
  445. -------------------------------------------------------------------------------------------------------------------
  446. function job_handle_equipping_gear(playerStatus, eventArgs)
  447.    update_combat_form()
  448.    determine_haste_group()
  449. end
  450.  
  451. function job_update(cmdParams, eventArgs)
  452.    handle_equipping_gear(player.status)
  453. end
  454.  
  455. function update_combat_form()
  456.    if DW == true then
  457.        state.CombatForm:set('DW')
  458.    elseif DW == false then
  459.        state.CombatForm:reset()
  460.    end
  461. end
  462.  
  463. function get_custom_wsmode(spell, spellMap, defaut_wsmode)
  464.    local wsmode
  465.  
  466.    if state.Buff['Sneak Attack'] then
  467.        wsmode = 'SA'
  468.    end
  469.  
  470.    return wsmode
  471. end
  472.  
  473. function customize_idle_set(idleSet)
  474.    if state.CP.current == 'on' then
  475.        equip(sets.CP)
  476.        disable('back')
  477.    else
  478.        enable('back')
  479.    end
  480.  
  481.    return idleSet
  482. end
  483.  
  484. function customize_melee_set(meleeSet)
  485.    if state.Buff['Climactic Flourish'] then
  486.         meleeSet = set_combine(meleeSet, sets.buff['Climactic Flourish'])
  487.    end
  488.    if state.ClosedPosition.value == true then
  489.        meleeSet = set_combine(meleeSet, sets.buff['Closed Position'])
  490.    end
  491.  
  492.    return meleeSet
  493. end
  494.  
  495. -- Handle auto-targetting based on local setup.
  496. function job_auto_change_target(spell, action, spellMap, eventArgs)
  497.    if spell.type == 'Step' then
  498.        if state.IgnoreTargetting.value == true then
  499.            state.IgnoreTargetting:reset()
  500.            eventArgs.handled = true
  501.        end
  502.  
  503.        eventArgs.SelectNPCTargets = state.SelectStepTarget.value
  504.    end
  505. end
  506.  
  507.  
  508. -- Function to display the current relevant user state when doing an update.
  509. -- Set eventArgs.handled to true if display was handled, and you don't want the default info shown.
  510. function display_current_job_state(eventArgs)
  511.    local msg = '[ Melee'
  512.  
  513.    if state.CombatForm.has_value then
  514.        msg = msg .. ' (' .. state.CombatForm.value .. ')'
  515.    end
  516.  
  517.    msg = msg .. ': '
  518.  
  519.    msg = msg .. state.OffenseMode.value
  520.    if state.HybridMode.value ~= 'Normal' then
  521.        msg = msg .. '/' .. state.HybridMode.value
  522.    end
  523.    msg = msg .. ' ][ WS: ' .. state.WeaponskillMode.value .. ' ]'
  524.  
  525.    if state.DefenseMode.value ~= 'None' then
  526.        msg = msg .. '[ Defense: ' .. state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ' ]'
  527.    end
  528.  
  529.    if state.ClosedPosition.value then
  530.        msg = msg .. '[ Closed Position: ON ]'
  531.    end
  532.  
  533.    if state.Kiting.value then
  534.        msg = msg .. '[ Kiting Mode: ON ]'
  535.    end
  536.  
  537.    msg = msg .. '[ '..state.MainStep.current
  538.  
  539.    if state.UseAltStep.value == true then
  540.        msg = msg .. '/'..state.AltStep.current
  541.    end
  542.  
  543.    msg = msg .. ' ]'
  544.  
  545.    add_to_chat(060, msg)
  546.  
  547.    eventArgs.handled = true
  548. end
  549.  
  550.  
  551. -------------------------------------------------------------------------------------------------------------------
  552. -- User self-commands.
  553. -------------------------------------------------------------------------------------------------------------------
  554.  
  555. -------------------------------------------------------------------------------------------------------------------
  556. -- Utility functions specific to this job.
  557. -------------------------------------------------------------------------------------------------------------------
  558.  
  559. function determine_haste_group()
  560.    classes.CustomMeleeGroups:clear()
  561.    if DW == true then
  562.        if DW_needed <= 1 then
  563.            classes.CustomMeleeGroups:append('MaxHaste')
  564.        elseif DW_needed > 1 and DW_needed <= 9 then
  565.            classes.CustomMeleeGroups:append('HighHaste')
  566.        elseif DW_needed > 9 and DW_needed <= 21 then
  567.            classes.CustomMeleeGroups:append('MidHaste')
  568.        elseif DW_needed > 21 and DW_needed <= 39 then
  569.            classes.CustomMeleeGroups:append('LowHaste')
  570.        elseif DW_needed > 39 then
  571.            classes.CustomMeleeGroups:append('')
  572.        end
  573.    end
  574. end
  575.  
  576. function job_self_command(cmdParams, eventArgs)
  577.    if cmdParams[1] == 'step' then
  578.        if cmdParams[2] == 't' then
  579.            state.IgnoreTargetting:set()
  580.        end
  581.  
  582.        local doStep = ''
  583.        if state.UseAltStep.value == true then
  584.            doStep = state[state.CurrentStep.current..'Step'].current
  585.            state.CurrentStep:cycle()
  586.        else
  587.            doStep = state.MainStep.current
  588.        end
  589.  
  590.        send_command('@input /ja "'..doStep..'" <t>')
  591.    end
  592.    gearinfo(cmdParams, eventArgs)
  593. end
  594.  
  595. function gearinfo(cmdParams, eventArgs)
  596.    if cmdParams[1] == 'gearinfo' then
  597.        if type(tonumber(cmdParams[2])) == 'number' then
  598.            if tonumber(cmdParams[2]) ~= DW_needed then
  599.            DW_needed = tonumber(cmdParams[2])
  600.            DW = true
  601.            end
  602.        elseif type(cmdParams[2]) == 'string' then
  603.            if cmdParams[2] == 'false' then
  604.                 DW_needed = 0
  605.                DW = false
  606.             end
  607.        end
  608.        if type(tonumber(cmdParams[3])) == 'number' then
  609.             if tonumber(cmdParams[3]) ~= Haste then
  610.                 Haste = tonumber(cmdParams[3])
  611.            end
  612.        end
  613.        if type(cmdParams[4]) == 'string' then
  614.            if cmdParams[4] == 'true' then
  615.                moving = true
  616.            elseif cmdParams[4] == 'false' then
  617.                moving = false
  618.            end
  619.        end
  620.        if not midaction() then
  621.            job_update()
  622.        end
  623.    end
  624. end
  625.  
  626. -- If you attempt to use a step, this will automatically use Presto if you are under 5 Finishing moves and resend step.
  627. function job_pretarget(spell, action, spellMap, eventArgs)
  628.    if spell.type == 'Step' then
  629.        local allRecasts = windower.ffxi.get_ability_recasts()
  630.        local prestoCooldown = allRecasts[236]
  631.        local under5FMs = not buffactive['Finishing Move 5'] and not buffactive['Finishing Move (6+)']
  632.        
  633.        if player.main_job_level >= 77 and prestoCooldown < 1 and under5FMs then
  634.            cast_delay(1.1)
  635.            send_command('input /ja "Presto" <me>')
  636.        end
  637.    end
  638.    
  639. -- If you attempt to use Climactic Flourish with zero finishing moves, this will automatically use Box Step and then resend Climactic Flourish.
  640.         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+)']
  641.  
  642.    if spell.english == "Climactic Flourish" and under1FMs then
  643.            cast_delay(1.9)
  644.            send_command('input /ja "Box Step" <t>')
  645.     end
  646. end
  647.  
  648. -- My Waltz Rules to Overwrite Mote's
  649. -- My Current Waltz Amounts: I:372 II:697 III:1134
  650. function refine_waltz(spell, action, spellMap, eventArgs)
  651.    if missingHP ~= nil then
  652.        if player.main_job == 'DNC' then
  653.            if missingHP < 40 and spell.target.name == player.name then
  654.                -- Not worth curing yourself for so little.
  655.                -- Don't block when curing others to allow for waking them up.
  656.                add_to_chat(122,'Full HP!')
  657.                eventArgs.cancel = true
  658.                return
  659.            elseif missingHP < 475 then
  660.                newWaltz = 'Curing Waltz'
  661.                waltzID = 190
  662.            elseif missingHP < 850 then
  663.                newWaltz = 'Curing Waltz II'
  664.                waltzID = 191
  665.            else
  666.                newWaltz = 'Curing Waltz III'
  667.                waltzID = 192
  668.            end
  669.        else
  670.            -- Not dnc main or sub; ignore
  671.            return
  672.        end
  673.    end
  674. end
  675.  
  676. -- Automatically loads a Macro Set by: (Pallet,Book)
  677. function select_default_macro_book()
  678.    if player.sub_job == 'SAM' then
  679.        set_macro_page(1, 5)
  680.    elseif player.sub_job == 'WAR' then
  681.        set_macro_page(2, 5)
  682.    elseif player.sub_job == 'RUN' then
  683.        set_macro_page(3, 5)    
  684.    elseif player.sub_job == 'BLU' then
  685.        set_macro_page(4, 5)
  686.    elseif player.sub_job == 'THF' then
  687.        set_macro_page(9, 5)
  688.    elseif player.sub_job == 'NIN' then
  689.        set_macro_page(10, 5)
  690.    else
  691.        set_macro_page(2, 5)
  692.    end
  693. end
  694.  
  695. function set_lockstyle()
  696.    send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  697. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement