Sithel

MNK GearSwap (Mote) 1-3-15

May 17th, 2014
661
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 25.25 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job.  Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- Initialization function for this job file.
  6. function get_sets()
  7.     mote_include_version = 2
  8.    
  9.     -- Load and initialize the include file.
  10.     include('Mote-Include.lua')
  11. end
  12.  
  13.  
  14. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  15. function job_setup()
  16.     state.Buff.Footwork = buffactive.Footwork or false
  17.     state.Buff.Impetus = buffactive.Impetus or false
  18.    
  19.     include('Mote-TreasureHunter')
  20.  
  21.     state.FootworkWS = M(false, 'Footwork on WS')
  22.  
  23.     info.impetus_hit_count = 0
  24.     windower.raw_register_event('action', on_action_for_impetus)
  25. end
  26.  
  27.  
  28. -------------------------------------------------------------------------------------------------------------------
  29. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  30. -------------------------------------------------------------------------------------------------------------------
  31.  
  32. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  33. function user_setup()
  34.     state.OffenseMode:options('Normal', 'SomeAcc', 'Acc', 'Fodder')
  35.     state.WeaponskillMode:options('Normal', 'SomeAcc', 'Acc', 'Fodder')
  36.     state.HybridMode:options('Normal', 'PDT', 'Counter')
  37.     state.PhysicalDefenseMode:options('PDT', 'HP')
  38.     state.IdleMode:options('Town', 'Normal')
  39.  
  40.     update_combat_form()
  41.     update_melee_groups()
  42.  
  43.     select_default_macro_book()
  44.     gear.AugManibozhoGloves = {name="Manibozho Gloves", augments={'Attack+15','Accuracy+10','STR+10'}}
  45.     send_command('bind f12 gs c update user')
  46.     send_command('bind f9 ws Victory Smite <t>')
  47.     send_command('bind f10 ws Raging Fists <t>')
  48.     send_command('bind f11 ws Howling Fist <t>')
  49. end
  50.  
  51. function user_unload()    
  52.     send_command('unbind !F7')
  53.     send_command('unbind ^F9')
  54.     send_command('unbind F9')
  55.     send_command('unbind F10')
  56.     send_command('unbind F11')
  57.     send_command('unbind F12')
  58. end
  59.  
  60.  
  61. -- Define sets and vars used by this job file.
  62. function init_gear_sets()
  63.     --------------------------------------
  64.     -- Start defining the sets
  65.     --------------------------------------
  66.    
  67.     sets.Slept = {head="Frenzy Sallet"}
  68.     sets.ReiveNeck = {neck="Adoulin's Refuge +1"}
  69.     sets.TreasureHunter = {waist="Chaac Belt"}
  70.    
  71.     -- Precast Sets
  72.    
  73.     -- Precast sets to enhance JAs on use
  74.     sets.precast.JA['Hundred Fists'] = {legs="Hesychast's Hose"}
  75.     sets.precast.JA['Boost'] = {}
  76.     sets.precast.JA['Dodge'] = {}
  77.     sets.precast.JA['Focus'] = {head="Tpl. Crown +1"}
  78.     sets.precast.JA['Counterstance'] = {feet="Mel. Gaiters +2"}
  79.     sets.precast.JA['Footwork'] = {}
  80.     sets.precast.JA['Formless Strikes'] = {body="Mel. Cyclas +2"}
  81.     sets.precast.JA['Mantra'] = {feet="Mel. Gaiters +2"}
  82.  
  83.     sets.precast.JA['Chi Blast'] = {}
  84.  
  85.     sets.precast.JA['Chakra'] = {
  86.         ammo="Iron Gobbet",
  87.         head="Blacksh. Hairpin",
  88.         neck="Tjukurrpa Medal",
  89.         ear1="Terra's pearl",
  90.         ear2="Terra's pearl",
  91.         body="Anchorite's cyclas +1",
  92.         hands="Hes. Gloves +1",
  93.         ring1="Terrasoul ring",
  94.         ring2="Terrasoul ring",
  95.         back="Iximulew Cape",
  96.         waist="Caudata Belt",
  97.         legs="Nahtirah Trousers",
  98.         feet="Thur. Boots +1"}
  99.  
  100.     -- Waltz set (chr and vit)
  101.     sets.precast.Waltz = {}
  102.        
  103.     -- Don't need any special gear for Healing Waltz.
  104.     sets.precast.Waltz['Healing Waltz'] = {}
  105.  
  106.     sets.precast.Step = {waist="Chaac Belt"}
  107.     sets.precast.Flourish1 = {waist="Chaac Belt"}
  108.  
  109.  
  110.     -- Fast cast sets for spells
  111.    
  112.     sets.precast.FC = {ammo="Impatiens",head="Haruspex hat",ear2="Loquacious Earring",hands="Thaumas Gloves"}
  113.  
  114.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  115.  
  116.        
  117.     -- Weaponskill sets
  118.     -- Default set for any weaponskill that isn't any more specifically defined
  119.     sets.precast.WS = {
  120.         ammo="Thew Bomblet",
  121.         head="Uk'uxkaj cap",
  122.         neck="Asperity Necklace",
  123.         ear1="Bladeborn Earring",
  124.         ear2="Steelflash Earring",
  125.         body="Mekosu. Harness",
  126.         hands=gear.AugManibozhoGloves,
  127.         ring1="Rajas Ring",
  128.         ring2="Epona's Ring",
  129.         back="Atheling Mantle",
  130.         waist="Caudata Belt",
  131.         legs="Manibozho Brais",
  132.         feet="Manibozho Boots"}
  133.     sets.precast.WSAcc = {ammo="Honed Tathlum",back="Letalis Mantle",legs="Wukong's Haka. +1"}
  134.     sets.precast.WSMod = {head="Felistris Mask",legs="Hesychast's Hose"}
  135.     sets.precast.MaxTP = {ear1="Bladeborn Earring",ear2="Steelflash Earring"}
  136.     sets.precast.WS.Acc = set_combine(sets.precast.WS, sets.precast.WSAcc)
  137.     sets.precast.WS.Mod = set_combine(sets.precast.WS, sets.precast.WSMod)
  138.  
  139.     -- Specific weaponskill sets.
  140.    
  141.     -- legs={name="Quiahuiz Trousers", augments={'Phys. dmg. taken -2%','Magic dmg. taken -2%','STR+8'}}}
  142.  
  143.     sets.precast.WS['Raging Fists']    = set_combine(sets.precast.WS, {    
  144.         head="Whirlpool Mask",
  145.         neck="Thunder Gorget",     
  146.         hands="Hes. Gloves +1",
  147.         ear1="Brutal Earring",
  148.         ear2="Moonshade Earring",
  149.         legs="Quiahuiz Trousers"})
  150.     sets.precast.WS['Howling Fist']    = set_combine(sets.precast.WS, {
  151.         head="Felistris Mask",
  152.         neck="Light Gorget",
  153.         hands="Hes. Gloves +1"})
  154.     sets.precast.WS['Asuran Fists']    = set_combine(sets.precast.WS, {
  155.         ear1="Brutal Earring",
  156.         ear2="Moonshade Earring",      
  157.         back="Buquwik Cape"})
  158.     sets.precast.WS["Ascetic's Fury"]  = set_combine(sets.precast.WS, {
  159.         neck="Rancor Collar",
  160.         ear1="Brutal Earring",
  161.         ear2="Moonshade Earring"})
  162.     sets.precast.WS["Victory Smite"]   = set_combine(sets.precast.WS, {
  163.         neck="Rancor Collar",
  164.         ear1="Brutal Earring",
  165.         ear2="Moonshade Earring",
  166.         back="Buquwik Cape"})
  167.     sets.precast.WS['Shijin Spiral']   = set_combine(sets.precast.WS, {
  168.         head="Felistris Mask",
  169.         neck=gear.ElementalGorget,
  170.         hands="Hes. Gloves +1"})
  171.     sets.precast.WS['Dragon Kick']     = set_combine(sets.precast.WS, {})
  172.     sets.precast.WS['Tornado Kick']    = set_combine(sets.precast.WS, {})
  173.     sets.precast.WS['Spinning Attack'] = set_combine(sets.precast.WS, {waist="Chaac Belt"})
  174.  
  175.     sets.precast.WS["Raging Fists"].Acc = set_combine(sets.precast.WS["Raging Fists"], sets.precast.WSAcc)
  176.     sets.precast.WS["Howling Fist"].Acc = set_combine(sets.precast.WS["Howling Fist"], sets.precast.WSAcc)
  177.     sets.precast.WS["Asuran Fists"].Acc = set_combine(sets.precast.WS["Asuran Fists"], sets.precast.WSAcc)
  178.     sets.precast.WS["Ascetic's Fury"].Acc = set_combine(sets.precast.WS["Ascetic's Fury"], sets.precast.WSAcc)
  179.     sets.precast.WS["Victory Smite"].Acc = set_combine(sets.precast.WS["Victory Smite"], sets.precast.WSAcc)
  180.     sets.precast.WS["Shijin Spiral"].Acc = set_combine(sets.precast.WS["Shijin Spiral"], sets.precast.WSAcc)
  181.     sets.precast.WS["Dragon Kick"].Acc = set_combine(sets.precast.WS["Dragon Kick"], sets.precast.WSAcc)
  182.     sets.precast.WS["Tornado Kick"].Acc = set_combine(sets.precast.WS["Tornado Kick"], sets.precast.WSAcc)
  183.  
  184.     sets.precast.WS["Raging Fists"].Mod = set_combine(sets.precast.WS["Raging Fists"], sets.precast.WSMod)
  185.     sets.precast.WS["Howling Fist"].Mod = set_combine(sets.precast.WS["Howling Fist"], sets.precast.WSMod)
  186.     sets.precast.WS["Asuran Fists"].Mod = set_combine(sets.precast.WS["Asuran Fists"], sets.precast.WSMod)
  187.     sets.precast.WS["Ascetic's Fury"].Mod = set_combine(sets.precast.WS["Ascetic's Fury"], sets.precast.WSMod)
  188.     sets.precast.WS["Victory Smite"].Mod = set_combine(sets.precast.WS["Victory Smite"], sets.precast.WSMod)
  189.     sets.precast.WS["Shijin Spiral"].Mod = set_combine(sets.precast.WS["Shijin Spiral"], sets.precast.WSMod)
  190.     sets.precast.WS["Dragon Kick"].Mod = set_combine(sets.precast.WS["Dragon Kick"], sets.precast.WSMod)
  191.     sets.precast.WS["Tornado Kick"].Mod = set_combine(sets.precast.WS["Tornado Kick"], sets.precast.WSMod)
  192.  
  193.  
  194.     sets.precast.WS['Cataclysm'] = {}
  195.    
  196.    
  197.     -- Midcast Sets
  198.     sets.midcast.FastRecast = {
  199.         head="Whirlpool Mask",
  200.         ear2="Loquacious Earring",        
  201.         waist="Black Belt"}
  202.        
  203.     -- Specific spells
  204.     sets.midcast.Utsusemi = {
  205.         head="Whirlpool Mask",
  206.         ear2="Loquacious Earring",        
  207.         waist="Black Belt"}
  208.  
  209.    
  210.     -- Sets to return to when not performing an action.
  211.    
  212.     -- Resting sets
  213.     sets.resting = {
  214.         head="Ocelomeh Headpiece +1",
  215.         neck="Wiglen Gorget",
  216.         body="Mel. Cyclas +2",
  217.         ring1="Sheltered Ring",
  218.         ring2="Paguroidea Ring"}
  219.    
  220.  
  221.     -- Idle sets
  222.     sets.idle = {
  223.         ammo="Ginsen",
  224.         head="Ocelomeh Headpiece +1",
  225.         neck="Wiglen Gorget",
  226.         ear1="Bladeborn Earring",
  227.         ear2="Steelflash Earring",
  228.         body="Melee Cyclas +2",
  229.         hands="Otronif Gloves",
  230.         ring1="Sheltered Ring",
  231.         ring2="Paguroidea Ring",
  232.         back="Scuta Cape",
  233.         waist="Black Belt",
  234.         legs="Manibozho brais",
  235.         feet="Soku. Sune-Ate"}
  236.  
  237.     sets.idle.Town = {     
  238.         ammo="Ginsen",
  239.         head="Felistris Mask",
  240.         neck="Asperity necklace",
  241.         ear1="Bladeborn Earring",
  242.         ear2="Steelflash Earring",
  243.         body="Mekosu. Harness",
  244.         hands="Hes. Gloves +1",
  245.         ring1="Rajas Ring",
  246.         ring2="Epona's Ring",
  247.         back="Anchoret's Mantle",
  248.         waist="Windbuffet Belt +1",
  249.         legs="Wukong's Haka. +1",
  250.         feet="Soku. Sune-Ate"}
  251.    
  252.     sets.idle.Weak = {ammo="Thew Bomblet",
  253.         head="Felistris Mask",neck="Wiglen Gorget",ear1="Brutal Earring",ear2="Bloodgem Earring",
  254.         body="Hesychast's Cyclas",hands="Hesychast's Gloves +1",ring1="Sheltered Ring",ring2="Meridian Ring",
  255.         back="Iximulew Cape",waist="Black Belt",legs="Qaaxo Tights",feet="Herald's Gaiters"}
  256.    
  257.     -- Defense sets
  258.     sets.defense.PDT = {
  259.         ammo="Iron Gobbet",
  260.         head="Whirlpool Mask",
  261.         neck="Twilight Torque",
  262.         body="Anchorite's cyclas +1",
  263.         hands="Otronif Gloves",
  264.         ring1="Dark Ring",
  265.         ring2="Dark Ring",
  266.         back="Mollusca Mantle",
  267.         waist="Black Belt",
  268.         legs="Nahtirah Trousers",
  269.         feet="Otronif Boots"}
  270.  
  271.     sets.defense.HP = {ammo="Iron Gobbet",
  272.         head="Uk'uxkaj Cap",neck="Lavalier +1",ear1="Brutal Earring",ear2="Bloodgem Earring",
  273.         body="Hesychast's Cyclas",hands="Hesychast's Gloves +1",ring1="K'ayres Ring",ring2="Meridian Ring",
  274.         back="Shadow Mantle",waist="Black Belt",legs="Hesychast's Hose +1",feet="Hesychast's Gaiters +1"}
  275.  
  276.     sets.defense.MDT = {
  277.         ammo="Demonry Stone",
  278.         head="Whirlpool Mask",
  279.         neck="Twilight Torque",
  280.         body="Otronif Harness",
  281.         hands="Otronif Gloves",
  282.         ring1="Dark Ring",
  283.         ring2="Shadow Ring",
  284.         back="Mollusca Mantle",
  285.         waist="Black Belt",
  286.         legs="Nahtirah Trousers",
  287.         feet="Otronif Boots"}
  288.  
  289.     sets.Kiting = {feet="Hermes' Sandals +1"}
  290.  
  291.     sets.ExtraRegen = {head="Ocelomeh Headpiece +1"}
  292.  
  293.     -- Engaged sets
  294.  
  295.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  296.     -- sets if more refined versions aren't defined.
  297.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  298.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  299.    
  300.     -- Normal melee sets
  301.     sets.engaged = {       
  302.         ammo="Ginsen",
  303.         head="Felistris Mask",
  304.         neck="Asperity necklace",
  305.         ear1="Bladeborn Earring",
  306.         ear2="Steelflash Earring",
  307.         body="Mekosu. Harness",
  308.         hands="Hes. Gloves +1",
  309.         ring1="Rajas Ring",
  310.         ring2="Epona's Ring",
  311.         back="Atheling Mantle",
  312.         waist="Windbuffet Belt +1",
  313.         legs="Quiahuiz Trousers",
  314.         feet="Soku. Sune-Ate"}
  315.     sets.engaged.SomeAcc = {       
  316.         ammo="Ginsen",
  317.         head="Felistris Mask",
  318.         neck="Asperity necklace",
  319.         ear1="Bladeborn Earring",
  320.         ear2="Steelflash Earring",
  321.         body="Mekosu. Harness",
  322.         hands="Hes. Gloves +1",
  323.         ring1="Rajas Ring",
  324.         ring2="Epona's Ring",
  325.         back="Letalis mantle",
  326.         waist="Windbuffet Belt +1",
  327.         legs="Manibozho Brais",
  328.         feet="Soku. Sune-Ate"}
  329.     sets.engaged.Acc = {
  330.         ammo="Honed Tathlum",
  331.         head="Whirlpool Mask",
  332.         neck="Iqabi necklace",
  333.         ear1="Bladeborn Earring",
  334.         ear2="Steelflash Earring",
  335.         body="Mekosu. Harness",
  336.         hands="Hes. Gloves +1",
  337.         ring1="Rajas Ring",
  338.         ring2="Enlivened Ring",
  339.         back="Anchoret's Mantle",
  340.         waist="Hurch'lan Sash",
  341.         legs="Wukong's Haka. +1",
  342.         feet="Manibozho Boots"}
  343.     sets.engaged.Fodder = {
  344.         ammo="Ginsen",
  345.         head="Felistris Mask",
  346.         neck="Asperity necklace",
  347.         ear1="Brutal earring",
  348.         ear2="Tripudio earring",
  349.         body="Mekosu. Harness",
  350.         hands="Otronif Gloves",
  351.         ring1="Rajas Ring",
  352.         ring2="K'ayres ring",
  353.         back="Letalis mantle",
  354.         waist="Windbuffet Belt +1",
  355.         legs="Otronif Brais",
  356.         feet="Soku. Sune-Ate"}
  357.  
  358.     -- Defensive melee hybrid sets
  359.     sets.engaged.PDT = {
  360.         ammo="Iron Gobbet",
  361.         head="Whirlpool Mask",
  362.         neck="Twilight Torque",
  363.         ear1="Bladeborn Earring",
  364.         ear2="Steelflash Earring",
  365.         body="Anchorite's cyclas +1",
  366.         hands="Otronif Gloves",
  367.         ring1="Dark Ring",
  368.         ring2="Dark Ring",
  369.         back="Mollusca Mantle",
  370.         waist="Black Belt",
  371.         legs="Nahtirah Trousers",
  372.         feet="Otronif Boots"}
  373.     sets.engaged.SomeAcc.PDT = {
  374.         ammo="Honed Tathlum",
  375.         head="Whirlpool Mask",
  376.         neck="Twilight Torque",
  377.         ear1="Bladeborn Earring",
  378.         ear2="Steelflash Earring",
  379.         body="Anchorite's cyclas +1",
  380.         hands="Hes. Gloves +1",
  381.         ring1="Dark Ring",
  382.         ring2="Dark Ring",
  383.         back="Letalis Mantle",
  384.         waist="Black Belt",
  385.         legs="Manibozho Brais",
  386.         feet="Otronif Boots"}
  387.     sets.engaged.Acc.PDT = {
  388.         ammo="Honed Tathlum",
  389.         head="Whirlpool Mask",
  390.         neck="Twilight Torque",
  391.         ear1="Bladeborn Earring",
  392.         ear2="Steelflash Earring",
  393.         body="Anchorite's cyclas +1",
  394.         hands="Hes. Gloves +1",
  395.         ring1="Dark Ring",
  396.         ring2="Dark Ring",
  397.         back="Letalis Mantle",
  398.         waist="Black Belt",
  399.         legs="Manibozho Brais",
  400.         feet="Otronif Boots"}
  401.     sets.engaged.Counter = {ammo="Thew Bomblet",
  402.         head="Whirlpool Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  403.         body="Otronif Harness +1",hands="Otronif Gloves",ring1="K'ayres Ring",ring2="Epona's Ring",
  404.         back="Atheling Mantle",waist="Windbuffet Belt",legs="Anchorite's Hose",feet="Otronif Boots +1"}
  405.     sets.engaged.Acc.Counter = {ammo="Honed Tathlum",
  406.         head="Whirlpool Mask",neck="Ej Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  407.         body="Otronif Harness +1",hands="Hesychast's Gloves +1",ring1="Patricius Ring",ring2="Epona's Ring",
  408.         back="Letalis Mantle",waist="Anguinus Belt",legs="Anchorite's Hose",feet="Otronif Boots +1"}
  409.  
  410.  
  411.     -- Hundred Fists/Impetus melee set mods
  412.     sets.engaged.HF = set_combine(sets.engaged)
  413.     sets.engaged.HF.Impetus = set_combine(sets.engaged, {body="Tantra Cyclas +2"})
  414.     sets.engaged.Acc.HF = set_combine(sets.engaged.Acc)
  415.     sets.engaged.Acc.HF.Impetus = set_combine(sets.engaged.Acc, {body="Tantra Cyclas +2"})
  416.     sets.engaged.Counter.HF = set_combine(sets.engaged.Counter)
  417.     sets.engaged.Counter.HF.Impetus = set_combine(sets.engaged.Counter, {body="Tantra Cyclas +2"})
  418.     sets.engaged.Acc.Counter.HF = set_combine(sets.engaged.Acc.Counter)
  419.     sets.engaged.Acc.Counter.HF.Impetus = set_combine(sets.engaged.Acc.Counter, {body="Tantra Cyclas +2"})
  420.  
  421.  
  422.     -- Footwork combat form
  423.     sets.engaged.Footwork = {ammo="Thew Bomblet",
  424.         head="Felistris Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  425.         body="Qaaxo Harness",hands="Hesychast's Gloves +1",ring1="Rajas Ring",ring2="Epona's Ring",
  426.         back="Atheling Mantle",waist="Windbuffet Belt",legs="Hesychast's Hose +1",feet="Anchorite's Gaiters +1"}
  427.     sets.engaged.Footwork.Acc = {ammo="Honed Tathlum",
  428.         head="Whirlpool Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  429.         body="Otronif Harness +1",hands="Hesychast's Gloves +1",ring1="Rajas Ring",ring2="Epona's Ring",
  430.         back="Letalis Mantle",waist="Anguinus Belt",legs="Hesychast's Hose +1",feet="Anchorite's Gaiters +1"}
  431.        
  432.     -- Quick sets for post-precast adjustments, listed here so that the gear can be Validated.
  433.     sets.impetus_body = {body="Tantra Cyclas +2"}
  434.     sets.footwork_kick_feet = {feet="Anchorite's Gaiters +1"}
  435. end
  436.  
  437. -------------------------------------------------------------------------------------------------------------------
  438. -- Job-specific hooks for standard casting events.
  439. -------------------------------------------------------------------------------------------------------------------
  440.  
  441. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  442. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  443. function job_precast(spell, action, spellMap, eventArgs)
  444.     -- Don't gearswap for weaponskills when Defense is on.
  445.     if spell.type == 'WeaponSkill' and state.DefenseMode.current ~= 'None' then
  446.         eventArgs.handled = true
  447.     end
  448. end
  449.  
  450. -- Run after the general precast() is done.
  451. function job_post_precast(spell, action, spellMap, eventArgs)
  452.     if spell.type == 'WeaponSkill' and state.DefenseMode.current ~= 'None' then
  453.         if state.Buff.Impetus and (spell.english == "Ascetic's Fury" or spell.english == "Victory Smite") then
  454.             -- Need 6 hits at capped dDex, or 9 hits if dDex is uncapped, for Tantra to tie or win.
  455.             if (state.OffenseMode.current == 'Fodder' and info.impetus_hit_count > 5) or (info.impetus_hit_count > 8) then
  456.                 equip(sets.impetus_body)
  457.             end
  458.         elseif state.Buff.Footwork and (spell.english == "Dragon's Kick" or spell.english == "Tornado Kick") then
  459.             equip(sets.footwork_kick_feet)
  460.         end
  461.        
  462.         -- Replace Moonshade Earring if we're at cap TP
  463.         if player.tp == 3000 then
  464.             equip(sets.precast.MaxTP)
  465.         end
  466.         -- Chakra replace Iximulew Cape with Shadow Mantle for Darksday
  467.         if spell.english == 'Chakra' and world.day == 'Darksday' then
  468.             equip({back="Shadow Mantle"})
  469.         end
  470.     end
  471. end
  472.  
  473. function job_aftercast(spell, action, spellMap, eventArgs)
  474.     if spell.type == 'WeaponSkill' and not spell.interrupted and state.FootworkWS and state.Buff.Footwork then
  475.         send_command('cancel Footwork')
  476.     end
  477. end
  478.  
  479. -------------------------------------------------------------------------------------------------------------------
  480. -- Job-specific hooks for non-casting events.
  481. -------------------------------------------------------------------------------------------------------------------
  482.  
  483. -- Called when a player gains or loses a buff.
  484. -- buff == buff gained or lost
  485. -- gain == true if the buff was gained, false if it was lost.
  486. function job_buff_change(buff, gain)
  487.     -- Set Footwork as combat form any time it's active and Hundred Fists is not.
  488.     if buff == 'Footwork' and gain and not buffactive['hundred fists'] then
  489.         state.CombatForm:set('Footwork')
  490.     elseif buff == "Hundred Fists" and not gain and buffactive.footwork then
  491.         state.CombatForm:set('Footwork')
  492.     else
  493.         state.CombatForm:reset()
  494.     end
  495.    
  496.     -- Hundred Fists and Impetus modify the custom melee groups
  497.     if buff == "Hundred Fists" or buff == "Impetus" then
  498.         classes.CustomMeleeGroups:clear()
  499.        
  500.         if (buff == "Hundred Fists" and gain) or buffactive['hundred fists'] then
  501.             classes.CustomMeleeGroups:append('HF')
  502.         end
  503.        
  504.         if (buff == "Impetus" and gain) or buffactive.impetus then
  505.             classes.CustomMeleeGroups:append('Impetus')
  506.         end
  507.     end
  508.  
  509.     -- Update gear if any of the above changed
  510.     if buff == "Hundred Fists" or buff == "Impetus" or buff == "Footwork" then
  511.         handle_equipping_gear(player.status)
  512.     end
  513.    
  514.     if buff == 'sleep' and player.hp > 200 and player.status == "Engaged" then
  515.         if gain then
  516.             equip(sets.Slept)
  517.             add_to_chat(39,'You are slept... [Equipping Frenzy Sallet]')           
  518.         else
  519.             send_command('gs c update')
  520.             add_to_chat(200,'You are awake... [Removing Frenzy Sallet]')
  521.         end
  522.     end
  523.     if buff == 'Reive Mark' then
  524.         if gain then
  525.             equip(sets.ReiveNeck)
  526.             add_to_chat(39,'Entering a Reive... [Equipping Reive Neck]')
  527.             disable('neck')
  528.         else
  529.             send_command('gs c update')
  530.             add_to_chat(200,'Left a Reive... [Removing Reive Neck]')
  531.             enable('neck')
  532.         end
  533.     end
  534. end
  535.  
  536.  
  537. -------------------------------------------------------------------------------------------------------------------
  538. -- User code that supplements standard library decisions.
  539. -------------------------------------------------------------------------------------------------------------------
  540.  
  541. function customize_idle_set(idleSet)
  542.     if player.hpp < 75 then
  543.         idleSet = set_combine(idleSet, sets.ExtraRegen)
  544.     end
  545.    
  546.     return idleSet
  547. end
  548.  
  549. -- Called by the 'update' self-command.
  550. function job_update(cmdParams, eventArgs)
  551.     update_combat_form()
  552.     update_melee_groups()
  553. end
  554.  
  555.  
  556. -------------------------------------------------------------------------------------------------------------------
  557. -- Utility functions specific to this job.
  558. -------------------------------------------------------------------------------------------------------------------
  559.  
  560. function update_combat_form()
  561.     if buffactive.footwork and not buffactive['hundred fists'] then
  562.         state.CombatForm:set('Footwork')
  563.     else
  564.         state.CombatForm:reset()
  565.     end
  566. end
  567.  
  568. function update_melee_groups()
  569.     classes.CustomMeleeGroups:clear()
  570.    
  571.     if buffactive['hundred fists'] then
  572.         classes.CustomMeleeGroups:append('HF')
  573.     end
  574.    
  575.     if buffactive.impetus then
  576.         classes.CustomMeleeGroups:append('Impetus')
  577.     end
  578. end
  579.  
  580.  
  581. -- Select default macro book on initial load or subjob change.
  582. function select_default_macro_book()
  583.     -- Default macro set/book
  584.     if player.sub_job == 'DNC' then
  585.         set_macro_page(1, 12)
  586.     elseif player.sub_job == 'NIN' then
  587.         set_macro_page(1, 12)
  588.     elseif player.sub_job == 'THF' then
  589.         set_macro_page(1, 12)
  590.     elseif player.sub_job == 'RUN' then
  591.         set_macro_page(1, 12)
  592.     else
  593.         set_macro_page(1, 12)
  594.     end
  595. end
  596.  
  597.  
  598. -------------------------------------------------------------------------------------------------------------------
  599. -- Custom event hooks.
  600. -------------------------------------------------------------------------------------------------------------------
  601.  
  602. -- Keep track of the current hit count while Impetus is up.
  603. function on_action_for_impetus(action)
  604.     if state.Buff.Impetus then
  605.         -- count melee hits by player
  606.         if action.actor_id == player.id then
  607.             if action.category == 1 then
  608.                 for _,target in pairs(action.targets) do
  609.                     for _,action in pairs(target.actions) do
  610.                         -- Reactions (bitset):
  611.                         -- 1 = evade
  612.                         -- 2 = parry
  613.                         -- 4 = block/guard
  614.                         -- 8 = hit
  615.                         -- 16 = JA/weaponskill?
  616.                         -- If action.reaction has bits 1 or 2 set, it missed or was parried. Reset count.
  617.                         if (action.reaction % 4) > 0 then
  618.                             info.impetus_hit_count = 0
  619.                         else
  620.                             info.impetus_hit_count = info.impetus_hit_count + 1
  621.                         end
  622.                     end
  623.                 end
  624.             elseif action.category == 3 then
  625.                 -- Missed weaponskill hits will reset the counter.  Can we tell?
  626.                 -- Reaction always seems to be 24 (what does this value mean? 8=hit, 16=?)
  627.                 -- Can't tell if any hits were missed, so have to assume all hit.
  628.                 -- Increment by the minimum number of weaponskill hits: 2.
  629.                 for _,target in pairs(action.targets) do
  630.                     for _,action in pairs(target.actions) do
  631.                         -- This will only be if the entire weaponskill missed or was parried.
  632.                         if (action.reaction % 4) > 0 then
  633.                             info.impetus_hit_count = 0
  634.                         else
  635.                             info.impetus_hit_count = info.impetus_hit_count + 2
  636.                         end
  637.                     end
  638.                 end
  639.             end
  640.         elseif action.actor_id ~= player.id and action.category == 1 then
  641.             -- If mob hits the player, check for counters.
  642.             for _,target in pairs(action.targets) do
  643.                 if target.id == player.id then
  644.                     for _,action in pairs(target.actions) do
  645.                         -- Spike effect animation:
  646.                         -- 63 = counter
  647.                         -- ?? = missed counter
  648.                         if action.has_spike_effect then
  649.                             -- spike_effect_message of 592 == missed counter
  650.                             if action.spike_effect_message == 592 then
  651.                                 info.impetus_hit_count = 0
  652.                             elseif action.spike_effect_animation == 63 then
  653.                                 info.impetus_hit_count = info.impetus_hit_count + 1
  654.                             end
  655.                         end
  656.                     end
  657.                 end
  658.             end
  659.         end
  660.        
  661.         --add_to_chat(123,'Current Impetus hit count = ' .. tostring(info.impetus_hit_count))
  662.     else
  663.         info.impetus_hit_count = 0
  664.     end
  665.    
  666. end
Advertisement
Add Comment
Please, Sign In to add comment