Merlinffxi

Nin

Apr 15th, 2014
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 24.25 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Initialization function that defines sets and variables to be used.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
  6.  
  7. -- Initialization function for this job file.
  8. function get_sets()
  9.     -- Load and initialize the include file.
  10.     include('Mote-Include.lua')
  11.        send_command('input /macro book 9;wait .1;input /macro set 2')
  12. end
  13.  
  14.  
  15. -- Setup vars that are user-independent.
  16. function job_setup()
  17.     state.Buff.Migawari = buffactive.migawari or false
  18.     state.Buff.Doomed = buffactive.doomed or false
  19.  
  20.     determine_haste_group()
  21. end
  22.  
  23.  
  24. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  25. function user_setup()
  26.     -- Options: Override default values
  27.     options.OffenseModes = {'Normal', 'Acc'}
  28.     options.DefenseModes = {'Normal', 'Evasion', 'PDT'}
  29.     options.WeaponskillModes = {'Normal', 'Acc', 'Att', 'Mod'}
  30.     options.CastingModes = {'Normal'}
  31.     options.IdleModes = {'Normal'}
  32.     options.RestingModes = {'Normal'}
  33.     options.PhysicalDefenseModes = {'PDT', 'Evasion'}
  34.     options.MagicalDefenseModes = {'MDT'}
  35.  
  36.     state.Defense.PhysicalMode = 'PDT'
  37.  
  38.     -- select_default_macro_book()
  39. end
  40.  
  41.  
  42. -- Called when this job file is unloaded (eg: job change)
  43. function file_unload()
  44.     if binds_on_unload then
  45.         binds_on_unload()
  46.     end
  47. end
  48.  
  49.  
  50. -- Define sets and vars used by this job file.
  51. function init_gear_sets()
  52.     --------------------------------------
  53.     -- Start defining the sets
  54.     --------------------------------------
  55.    
  56.     -- Precast Sets
  57.  
  58.     -- Precast sets to enhance JAs
  59.     sets.precast.JA['Mijin Gakure'] = {legs="Mochizuki Hakama +1"}
  60.  
  61.     -- Waltz set (chr and vit)
  62.     sets.precast.Waltz = {ammo="Sonia's Plectrum",
  63.         head="Felistris Mask",
  64.         body="Otronif Harness +1",hands="Otronif Gloves +1",
  65.         legs="Nahtirah Trousers",feet="Otronif Boots +1",
  66.         waist="Caudata Belt",back="Iximulew Cape"}
  67.        
  68.     -- Don't need any special gear for Healing Waltz.
  69.     sets.precast.Waltz['Healing Waltz'] = {}
  70.  
  71.     -- Set for acc on steps, since Yonin drops acc a fair bit
  72.     sets.precast.Step = {
  73.         head="Whirlpool Mask",
  74.         body="Mochizuki Chainmail +1",hands="Otronif Gloves +1",
  75.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  76.         neck="Ej Necklace +1",waist="Anguinus Belt",ring1="Beeline Ring",
  77.         back="Letalis Mantle"}
  78.  
  79.     -- Fast cast sets for spells
  80.    
  81.     sets.precast.FC = {ammo="Impatiens",body="Dread Jupon",hands="Thaumas Gloves",neck="Orunmila's Torque",ear2="Loquacious Earring",feet="Suzaku's Sune-ate",ring1="Prolix Ring",ring2="Veneficium Ring"}
  82.  
  83.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {body="Mochizuki Chainmail +1",neck="Magoraga Beads"})
  84.  
  85.        
  86.     -- Weaponskill sets
  87.     -- Default set for any weaponskill that isn't any more specifically defined
  88.     sets.precast.WS = {ammo="Bomb Core",
  89.         head="Felistris Mask",body="Mochizuki Chainmail +1",hands="Otronif Gloves +1",
  90.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  91.         neck=gear.ElementalGorget,waist="Windbuffet Belt",
  92.         ear1="Brutal Earring",ear2="Moonshade Earring",
  93.         ring1="Epona's Ring",ring2="Rajas Ring",
  94.         back="Atheling Mantle"}
  95.  
  96.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  97.     sets.precast.WS['Blade: Jin'] = set_combine(sets.precast.WS, {ammo="Yetshila +1",head="Uk'uxkaj Cap",back="Rancorous Mantle"})
  98.  
  99.     sets.precast.WS['Blade: Hi'] = set_combine(sets.precast.WS, {ammo="Yetshila +1",head="Uk'uxkaj Cap",body="Dread Jupon",hands="Seiryu's Kote",legs="Mochizuki Hakama +1",feet="Mochizuki Kyahan +1",
  100.         ring2="Garuda Ring +1",back="Rancorous Mantle"})
  101.     sets.precast.WS['Blade: Hi'].Mod = set_combine(sets.precast.WS['Blade: Hi'], {feet="Vanir Boots"})
  102.  
  103.     sets.precast.WS['Blade: Shun'] = set_combine(sets.precast.WS, {legs="Mochizuki Hakama +1"})
  104.  
  105.     sets.precast.WS['Blade: Kamu'] = set_combine(sets.precast.WS, {legs="Mochizuki Hakama +1"})
  106.     sets.precast.WS['Blade: Kamu'].Mod = set_combine(sets.precast.WS['Blade: Kamu'], {legs="Mochizuki Hakama +1"})
  107.  
  108.     sets.precast.WS['Blade: Ku'] = set_combine(sets.precast.WS, {legs="Mochizuki Hakama +1"})
  109.     sets.precast.WS['Blade: Ku'].Mod = set_combine(sets.precast.WS['Blade: Ku'], {legs="Mochizuki Hakama +1"})
  110.  
  111.     sets.precast.WS['Aeolian Edge'] = {
  112.         head="Felistris Mask",
  113.         body="Mochizuki Chainmail +1",hands="Otronif Gloves +1",
  114.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  115.         neck="Stoicheion Medal",waist=gear.ElementalBelt,
  116.         ear1="Friomisi Earring",ear2="Hecate's Earring",
  117.         ring1="Epona's Ring",ring2="Rajas Ring",
  118.         back="Toro Cape"}
  119.    
  120.    
  121.     -- Midcast Sets
  122.     sets.midcast.FastRecast = {
  123.         head="Felistris Mask",
  124.         body="Dread Jupon",hands="Mocchizuki Tekko +1",
  125.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  126.         neck="Orunmila's Torque",waist="Twilight Belt",
  127.         ear2="Loquacious Earring",back="Mujin Mantle"}
  128.        
  129.     -- any ninjutsu cast on self
  130.     sets.midcast.SelfNinjutsu = set_combine(sets.midcast.FastRecast, {neck="Torero Torque",body="Mochizuki Chainmail +1",ring1="Beeline Ring",back="Ix Cape"})
  131.  
  132.     sets.midcast.Utsusemi = set_combine(sets.midcast.SelfNinjutsu, {feet="Iga Kyahan +2"})
  133.  
  134.     -- any ninjutsu cast on enemies
  135.     sets.midcast.Ninjutsu = {
  136.         head="Lithelimb Cap",
  137.         --head="Hachiya Hatsuburi +1",
  138.         body="Otronif Harness +1",hands="Mocchizuki Tekko +1",
  139.         legs="Spry Tights",feet="Hachiya Kyahan +1",
  140.         neck="Stoicheion Medal",waist="Cetl Belt",
  141.         ear1="Loquacious Earring",
  142.         --ear1="Lifestorm Earring",ear2="Psystorm Earring",
  143.         -- ear1="Friomisi Earring",ear2="Hecate's Earring",
  144.         ring1="Icesoul Ring",
  145.         back="Toro Cape"}
  146.  
  147.     --sets.midcast.Ninjutsu.Resistant = set_combine(sets.midcast.Ninjutsu, {ear1="Lifestorm Earring",ear2="Psystorm Earring"})
  148.  
  149.    
  150.     -- Sets to return to when not performing an action.
  151.    
  152.     -- Resting sets
  153.     sets.resting = {head="Ocelomeh Headpiece +1",neck="Wiglen Gorget",body="Khepri Jacket",
  154.         ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  155.    
  156.  
  157.     -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  158.     sets.idle = {
  159.         head="Ocelomeh Headpiece +1",body="Khepri Jacket",hands="Otronif Gloves +1",
  160.         legs="Hachiya Hakama +1",feet="Danzo sune-ate",
  161.         neck="Wiglen Gorget",waist="Flume Belt",
  162.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  163.         ring1="Sheltered Ring",ring2="Paguroidea Ring",
  164.         back="Shadow Mantle"}
  165.  
  166.     sets.idle.Town = {ammo="Yetshila +1",
  167.         head="Ptica Headgear",
  168.         body="Hachiya Chainmail +1",hands="Otronif Gloves +1",
  169.         legs="Mochizuki Hakama +1",feet="Danzo sune-ate",
  170.         neck="Asperity Necklace",waist="Shetal Stone",
  171.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",ring1="Epona's Ring",ring2="Oneiros Ring",
  172.         back="Atheling Mantle"}
  173.    
  174.     sets.idle.Weak = {
  175.         head="Whirlpool Mask",body="Hachiya Chainmail +1",hands="Otronif Gloves",
  176.         legs="Hachiya Hakama",feet="Danzo sune-ate",
  177.         neck="Wiglen Gorget",waist="Shetal Stone",
  178.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  179.         ring1="Sheltered Ring",ring2="Paguroidea Ring",
  180.         back="Shadow Mantle"}
  181.    
  182.     -- Defense sets
  183.     sets.defense.Evasion = {
  184.         head="Felistris Mask",body="Otronif Harness +1",hands="Otronif Gloves +1",
  185.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  186.         neck="Torero Torque",waist="Flume Belt",
  187.         ring1="Beeline Ring",ring2="Defending Ring",
  188.         back="Ik Cape"}
  189.  
  190.     sets.defense.PDT = {ammo="Iron Gobbet",
  191.         head="Lithelimb Cap",
  192.         body="Otronif Harness +1",hands="Otronif Gloves +1",
  193.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  194.         neck="Twilight Torque",waist="Flume Belt",
  195.         ring1="Patricius Ring",ring2="Defending Ring",
  196.         back="Mollusca Mantle"}
  197.  
  198.     sets.defense.MDT = {ammo="Vanir Battery",
  199.         head="Lithelimb Cap",
  200.         body="Otronif Harness +1",hands="Otronif Gloves +1",
  201.         legs="Otronif Brais +1",
  202.         feet={ name="Otronif Boots +1", augments={'Phys. dmg. taken -3%','Magic dmg. taken -3%','Crit.hit rate+2'}},
  203.         neck="Twilight Torque",waist="Cetl Belt",
  204.         ring1="Shadow Ring",ring2="Defending Ring",
  205.         back="Engulfer Cape"}
  206.  
  207.  
  208.     sets.DayMovement = {feet="Danzo sune-ate"}
  209.  
  210.     sets.NightMovement = {feet="Hachiya Kyahan +1"}
  211.  
  212.     sets.Kiting = select_movement()
  213.  
  214.  
  215.     -- Engaged sets
  216.  
  217.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  218.     -- sets if more refined versions aren't defined.
  219.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  220.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  221.    
  222.     -- Normal melee group (no haste)
  223.     sets.engaged = {ammo="Yetshila +1",
  224.         head="Ptica Headgear",
  225.         body="Hachiya Chainmail +1",hands="Otronif Gloves +1",
  226.         legs="Mochizuki Hakama +1",feet="Otronif Boots +1",
  227.         neck="Asperity Necklace",waist="Shetal Stone",
  228.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",ring1="Epona's Ring",ring2="Oneiros Ring",
  229.         back="Atheling Mantle"}
  230.     sets.engaged.Acc = {ammo="Yetshila +1",
  231.         head="Whirlpool Mask",
  232.         body="Hachiya Chainmail +1",hands="Otronif Gloves",
  233.         legs="Hachiya Hakama",feet="Manibozho Boots",
  234.         neck="Asperity Necklace",waist="Hurch'lan Sash",
  235.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  236.         ring1="Epona's Ring",ring2="Oneiros Ring",
  237.         back="Letalis Mantle"}
  238.     sets.engaged.Evasion = {ammo="Yetshila +1",
  239.         head="Felistris Mask",
  240.         body="Hachiya Chainmail +1",hands="Otronif Gloves",
  241.         legs="Hachiya Hakama",feet="Otronif Boots +1",
  242.         neck="Torero Torque",waist="Shetal Stone",
  243.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  244.         ring1="Beeline Ring",ring2="Epona's Ring",
  245.         back="Ik Cape"}
  246.     sets.engaged.Acc.Evasion = {ammo="Yetshila +1",
  247.         head="Whirlpool Mask",body="Otronif Harness",hands="Otronif Gloves",
  248.         legs="Hachiya Hakama",feet="Otronif Boots +1",
  249.         neck="Torero Torque",waist="Hurch'lan Sash",
  250.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  251.         ring1="Beeline Ring",ring2="Epona's Ring",
  252.         back="Letalis Mantle"}
  253.     sets.engaged.PDT = {ammo="Yetshila +1",
  254.         head="Lithelimb Cap",body="Otronif Harness",hands="Otronif Gloves +1",
  255.         legs="Hachiya Hakama",feet="Otronif Boots +1",
  256.         neck="Twilight Torque",waist="Shetal Stone",
  257.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  258.         ring1="Epona's Ring",ring2="Defending Ring",
  259.         back="Iximulew Cape"}
  260.     sets.engaged.Acc.PDT = {ammo="Yetshila +1",
  261.         head="Lithelimb Cap",body="Otronif Harness +1",hands="Otronif Gloves +1",
  262.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  263.         neck="Twilight Torque",waist="Hurch'lan Sash",
  264.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  265.         ring1="Epona's Ring",ring2="Patricius Ring",
  266.         back="Letalis Mantle"}
  267.  
  268.     -- Custom melee group: High Haste (~20% DW)
  269.     sets.engaged.HighHaste = {ammo="Yetshila +1",
  270.         head="Felistris Mask",body="Thaumas Coat",hands="Otronif Gloves +1",
  271.         legs="Mochizuki Hakama +1",feet="Otronif Boots +1",
  272.         neck="Asperity Necklace",waist="Shetal Stone",
  273.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  274.         ring1="Epona's Ring",ring2="Oneiros Ring",
  275.         back="Atheling Mantle"}
  276.     sets.engaged.Acc.HighHaste = {ammo="Yetshila +1",
  277.         head="Whirlpool Mask",body="Hachiya Chainmail +1",hands="Otronif Gloves +1",
  278.         legs="Hachiya Hakama +1",feet="Otronif Boots +1",
  279.         neck="Asperity Necklace",waist="Hurch'lan Sash",
  280.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  281.         ring1="Epona's Ring",ring2="Oneiros Ring",
  282.         back="Letalis Mantle"}
  283.     sets.engaged.Evasion.HighHaste = {ammo="Yetshila +1",
  284.         head="Whirlpool Mask",body="Hachi. Chain. +1",hands="Otronif Gloves +1",
  285.         legs="Hachi. Hakama +1",feet="Otronif Boots +1",
  286.         neck="Torero Torque",waist="Shetal Stone",
  287.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  288.         ring1="Beeline Ring",ring2="Epona's Ring",
  289.         back="Ik Cape"}
  290.     sets.engaged.Acc.Evasion.HighHaste = {ammo="Yetshila +1",
  291.         head="Whirlpool Mask",body="Otronif Harness +1",hands="Otronif Gloves +1",
  292.         legs="Mochi. Hakama +1",feet="Otronif Boots +1",
  293.         neck="Torero Torque",waist="Hurch'lan Sash",
  294.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  295.         ring1="Epona's Ring",ring2="Beeline Ring",
  296.         back="Letalis Mantle"}
  297.     sets.engaged.PDT.HighHaste = {ammo="Yetshila +1",
  298.         head="Lithelimb Cap",body="Otronif Harness +1",hands="Otronif Gloves +1",
  299.         legs="Mochi. Hakama +1",feet="Otronif Boots +1",
  300.         neck="Twilight Torque",waist="Shetal Stone",
  301.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  302.         ring1="Epona's Ring",ring2="Defending Ring",
  303.         back="Iximulew Cape"}
  304.     sets.engaged.Acc.PDT.HighHaste = {ammo="Yetshila +1",
  305.         head="Lithelimb Cap",body="Otronif Harness +1",hands="Otronif Gloves +1",
  306.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  307.         neck="Twilight Torque",waist="Hurch'lan Sash",
  308.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  309.         ring1="Epona's Ring",ring2="Defedning Ring",
  310.         back="Letalis Mantle"}
  311.  
  312.     -- Custom melee group: Embrava Haste (7% DW)
  313.     sets.engaged.EmbravaHaste = {ammo="Yetshila +1",
  314.         head="Ptica Headgear",body="Thaumas Coat",hands="Otronif Gloves +1",
  315.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  316.         neck="Asperity Necklace",waist="Windbuffet Belt",
  317.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  318.         ring1="Epona's Ring",ring2="Oneiros Ring",
  319.         back="Atheling Mantle"}
  320.     sets.engaged.Acc.EmbravaHaste = {ammo="Yetshila +1",
  321.         head="Whirlpool Mask",body="Otronif Harness +1",hands="Otronif Gloves +1",
  322.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  323.         neck="Asperity Necklace",waist="Hurch'lan Sash",
  324.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  325.         ring1="Epona's Ring",ring2="Oneiros Ring",
  326.         back="Letalis Mantle"}
  327.     sets.engaged.Evasion.EmbravaHaste = {ammo="Yetshila +1",
  328.         head="Felistris Mask",body="Otronif Harness +1",hands="Otronif Gloves +1",
  329.         legs="Hachiya Hakama +1",feet="Otronif Boots +1",
  330.         neck="Torero Torque",waist="Shetal Stone",
  331.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  332.         ring1="Epona's Ring",ring2="Beeline Ring",
  333.         back="Ik Cape"}
  334.     sets.engaged.Acc.Evasion.EmbravaHaste = {ammo="Yetshila +1",
  335.         head="Lithelimb Cap",body="Otronif Harness +1",hands="Otronif Gloves +1",
  336.         legs="Hachiya Hakama +1",feet="Otronif Boots +1",
  337.         neck="Torero Torque",waist="Hurch'lan Sash",
  338.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  339.         ring1="Epona's Ring",ring2="Beeline Ring",
  340.         back="Letalis Mantle"}
  341.     sets.engaged.PDT.EmbravaHaste = {ammo="Yetshila +1",
  342.         head="Lithelimb Cap",body="Otronif Harness +1",hands="Otronif Gloves +1",
  343.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  344.         neck="Twilight Torque",waist="Shetal Stone",
  345.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  346.         ring1="Epona's Ring",ring2="Defending Ring",
  347.         back="Iximulew Cape"}
  348.     sets.engaged.Acc.PDT.EmbravaHaste = {ammo="Yetshila +1",
  349.         head="Lithelimb Cap",body="Otronif Harness +1",hands="Otronif Gloves +1",
  350.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  351.         neck="Twilight Torque",waist="Hurch'lan Sash",
  352.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  353.         ring1="Epona's Ring",ring2="Patricius Ring",
  354.         back="Letalis Mantle"}
  355.  
  356.     -- Custom melee group: Max Haste (0% DW)
  357.     sets.engaged.MaxHaste = {ammo="Yetshila +1",
  358.         head="Ptica Headgear",
  359.         --head="Felistris Mask",
  360.         body="Thaumas Coat",hands="Otronif Gloves +1",
  361.         legs="Mochizuki Hakama +1",
  362.         --legs="Otronif Brais +1",
  363.         feet="Otronif Boots +1",
  364.         neck="Asperity Necklace",
  365.         waist="Windbuffet Belt",
  366.         --waist="Shetal Stone",
  367.         --ear1="Brutal Earring",ear2="Tripudio Earring",
  368.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  369.         ring1="Epona's Ring",ring2="Oneiros Ring",
  370.         back="Atheling Mantle"}
  371.    
  372.    
  373.     -- {ammo="Yetshila +1",
  374.     --  head="Felistris Mask",body="Thaumas Coat",hands="Otronif Gloves +1",
  375.     --  legs="Otronif Brais +1",feet="Otronif Boots +1",
  376.     --  neck="Asperity Necklace",waist="Windbuffet Belt",
  377.     --  ear1="Brutal Earring",ear2="Trux Earring",
  378.     --  ring1="Epona's Ring",ring2="Oneiros Ring",
  379.     --  back="Atheling Mantle"}
  380.    
  381.     sets.engaged.Acc.MaxHaste = {ammo="Yetshila +1",
  382.         head="Whirlpool Mask",body="Mes. Haubergeon",hands="Otronif Gloves +1",
  383.         legs="Hachi. Hakama +1",feet="Otronif Boots +1",
  384.         neck="Asperity Necklace",waist="Anguinus Belt",
  385.         ear1="Heartseeker Earring",ear2="Steelflash Earring",
  386.         ring1="Epona's Ring",ring2="Oneiros Ring",
  387.         back="Letalis Mantle"}
  388.     sets.engaged.Evasion.MaxHaste = {ammo="Yetshila +1",
  389.         head="Whirlpool Mask",body="Otronif Harness +1",hands="Otronif Gloves +1",
  390.         legs="Hachiya Hakama",feet="Otronif Boots +1",
  391.         neck="Torero Torque",waist="Shetal Stone",
  392.         ear1="Bladeborn Earring",ear2="Steelflash Earring",
  393.         ring1="Epona's Ring",ring2="Beeline Ring",
  394.         back="Ik Cape"}
  395.     sets.engaged.Acc.Evasion.MaxHaste = {ammo="Yetshila +1",
  396.         head="Mochi. Hatsuburi",body="Otronif Harness +1",hands="Otronif Gloves +1",
  397.         legs="Hachiya Hakama +1",feet="Otronif Boots +1",
  398.         neck="Torero Torque",waist="Hurch'lan Sash",
  399.         ear1="Bladeborn Earring",ear2="Steelflash Earring",
  400.         ring1="Epona's Ring",ring2="Beeline Ring",
  401.         back="Letalis Mantle"}
  402.     sets.engaged.PDT.MaxHaste = {ammo="Yetshila +1",
  403.         head="Lithelimb Cap",body="Otronif Harness +1",hands="Otronif Gloves +1",
  404.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  405.         neck="Twilight Torque",waist="Shetal Stone",   
  406.         ear1="Bladeborn Earring",ear2="Steelflash Earring",
  407.         ring1="Epona's Ring",ring2="Defending Ring",
  408.         back="Iximulew Cape"}
  409.     sets.engaged.Acc.PDT.MaxHaste = {ammo="Yetshila +1",
  410.         head="Lithelimb Cap",
  411.         body="Otronif Harness +1",hands="Otronif Gloves +1",
  412.         legs="Otronif Brais +1",feet="Otronif Boots +1",
  413.         neck="Twilight Torque",waist="Hurch'lan Sash",
  414.         ear1="Heartseeker Earring",ear2="Steelflash Earring",
  415.         ring1="Epona's Ring",ring2="Patricius",
  416.         back="Letalis Mantle"}
  417.  
  418.  
  419.     sets.buff.Migawari = {body="Iga Ningi +2"}
  420.     sets.buff.Doomed = {ring2="Saida Ring"}
  421.     sets.buff.Yonin = {}
  422.     sets.buff.Innin = {}
  423. end
  424.  
  425. -------------------------------------------------------------------------------------------------------------------
  426. -- Job-specific hooks that are called to process player actions at specific points in time.
  427. -------------------------------------------------------------------------------------------------------------------
  428.  
  429. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  430. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  431. function job_precast(spell, action, spellMap, eventArgs)
  432.     refine_waltz(spell, action, spellMap, eventArgs)
  433.     if spell.skill == "Ninjutsu" and spell.target.type:lower() == 'self' and spellMap ~= "Utsusemi" then
  434.         classes.CustomClass = "SelfNinjutsu"
  435.     end
  436. end
  437.  
  438. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  439. function job_midcast(spell, action, spellMap, eventArgs)
  440.     if spell.action_type == 'Magic' then
  441.         -- Default base equipment layer of fast recast.
  442.         equip(sets.midcast.FastRecast)
  443.     end
  444. end
  445.  
  446. -- Run after the general midcast() is done.
  447. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
  448. function job_post_midcast(spell, action, spellMap, eventArgs)
  449.     if state.Buff.Doomed then
  450.         equip(sets.buff.Doomed)
  451.     end
  452. end
  453.  
  454.  
  455. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  456. function job_aftercast(spell, action, spellMap, eventArgs)
  457.     if not spell.interrupted and spell.english == "Migawari: Ichi" then
  458.         state.Buff.Migawari = true
  459.     end
  460. end
  461.  
  462.  
  463. -------------------------------------------------------------------------------------------------------------------
  464. -- Customization hooks for idle and melee sets, after they've been automatically constructed.
  465. -------------------------------------------------------------------------------------------------------------------
  466.  
  467. -- Called before the Include starts constructing melee/idle/resting sets.
  468. -- Can customize state or custom melee class values at this point.
  469. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  470. function job_handle_equipping_gear(status, eventArgs)
  471.     sets.Kiting = select_movement()
  472. end
  473.  
  474. -- Modify the default idle set after it was constructed.
  475. function customize_idle_set(idleSet)
  476.     idleSet = set_combine(idleSet, select_movement())
  477.     if state.Buff.Migawari then
  478.         idleSet = set_combine(idleSet, sets.buff.Migawari)
  479.     end
  480.     if state.Buff.Doomed then
  481.         idleSet = set_combine(idleSet, sets.buff.Doomed)
  482.     end
  483.     return idleSet
  484. end
  485.  
  486. -- Modify the default melee set after it was constructed.
  487. function customize_melee_set(meleeSet)
  488.     if state.Buff.Migawari then
  489.         meleeSet = set_combine(meleeSet, sets.buff.Migawari)
  490.     end
  491.     if state.Buff.Doomed then
  492.         meleeSet = set_combine(meleeSet, sets.buff.Doomed)
  493.     end
  494.     return meleeSet
  495. end
  496.  
  497. -------------------------------------------------------------------------------------------------------------------
  498. -- General hooks for other events.
  499. -------------------------------------------------------------------------------------------------------------------
  500.  
  501. -- Called when a player gains or loses a buff.
  502. -- buff == buff gained or lost
  503. -- gain == true if the buff was gained, false if it was lost.
  504. function job_buff_change(buff, gain)
  505.     -- If we gain or lose any haste buffs, adjust which gear set we target.
  506.     if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
  507.         determine_haste_group()
  508.         handle_equipping_gear(player.status)
  509.     elseif state.Buff[buff] ~= nil then
  510.         state.Buff[buff] = gain
  511.         handle_equipping_gear(player.status)
  512.     end
  513. end
  514.  
  515. -- Called when the player's subjob changes.
  516. function sub_job_change(newSubjob, oldSubjob)
  517.     select_default_macro_book()
  518. end
  519.  
  520.  
  521. -------------------------------------------------------------------------------------------------------------------
  522. -- User code that supplements self-commands.
  523. -------------------------------------------------------------------------------------------------------------------
  524.  
  525. -- Called by the default 'update' self-command.
  526. function job_update(cmdParams, eventArgs)
  527.     determine_haste_group()
  528. end
  529.  
  530. -------------------------------------------------------------------------------------------------------------------
  531. -- Utility functions specific to this job.
  532. -------------------------------------------------------------------------------------------------------------------
  533.  
  534. function select_movement()
  535.     -- world.time is given in minutes into each day
  536.     -- 7:00 AM would be 420 minutes
  537.     -- 17:00 PM would be 1020 minutes
  538.     if world.time >= (17*60) or world.time <= (7*60) then
  539.         return sets.NightMovement
  540.     else
  541.         return sets.DayMovement
  542.     end
  543. end
  544.  
  545. function determine_haste_group()
  546.     -- We have three groups of DW in gear: Hachiya body/legs, Iga head + Shetal Stone, and DW earrings
  547.    
  548.     -- Standard gear set reaches near capped delay with just Haste (77%-78%, depending on HQs)
  549.  
  550.     -- For high haste, we want to be able to drop one of the 10% groups.
  551.     -- Basic gear hits capped delay (roughly) with:
  552.     -- 1 March + Haste
  553.     -- 2 March
  554.     -- Haste + Haste Samba
  555.     -- 1 March + Haste Samba
  556.     -- Embrava
  557.    
  558.     -- High haste buffs:
  559.     -- 2x Marches + Haste Samba == 19% DW in gear
  560.     -- 1x March + Haste + Haste Samba == 22% DW in gear
  561.     -- Embrava + Haste or 1x March == 7% DW in gear
  562.    
  563.     -- For max haste (capped magic haste + 25% gear haste), we can drop all DW gear.
  564.     -- Max haste buffs:
  565.     -- Embrava + Haste+March or 2x March
  566.     -- 2x Marches + Haste
  567.    
  568.     -- So we want four tiers:
  569.     -- Normal DW
  570.     -- 20% DW -- High Haste
  571.     -- 7% DW (earrings) - Embrava Haste (specialized situation with embrava and haste, but no marches)
  572.     -- 0 DW - Max Haste
  573.    
  574.     classes.CustomMeleeGroups:clear()
  575.    
  576.     if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
  577.         classes.CustomMeleeGroups:append('MaxHaste')
  578.     elseif buffactive.march == 2 and buffactive.haste then
  579.         classes.CustomMeleeGroups:append('MaxHaste')
  580.     elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
  581.         classes.CustomMeleeGroups:append('EmbravaHaste')
  582.     elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
  583.         classes.CustomMeleeGroups:append('HighHaste')
  584.     elseif buffactive.march == 2 then
  585.         classes.CustomMeleeGroups:append('HighHaste')
  586.     end
  587. end
  588.  
  589.  
  590. -- Select default macro book on initial load or subjob change.
  591. function select_default_macro_book()
  592.     -- Default macro set/book
  593.     if player.sub_job == 'DNC' then
  594.         set_macro_page(4, 3)
  595.     elseif player.sub_job == 'THF' then
  596.         set_macro_page(5, 3)
  597.     else
  598.         set_macro_page(1, 3)
  599.     end
  600. end
Advertisement
Add Comment
Please, Sign In to add comment