Merlinffxi

Thf.lua

Aug 15th, 2014
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 39.45 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Initialization function that defines sets and variables to be used.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- Initialization function for this job file.
  6. function get_sets()
  7.     -- Load and initialize the include file.
  8.     include('Mote-Include.lua')
  9. end
  10.  
  11. -- Setup vars that are user-independent.
  12. function job_setup()
  13.     state.Buff.Migawari = buffactive.migawari or false
  14.     state.Buff.Doomed = buffactive.doomed or false
  15.  
  16.     determine_haste_group()
  17. end
  18.  
  19. -- Setup vars that are user-independent.
  20. function job_setup()
  21.     state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
  22.     state.Buff['Trick Attack'] = buffactive['trick attack'] or false
  23.     state.Buff['Feint'] = buffactive['feint'] or false
  24.    
  25.     include('Mote-TreasureHunter')
  26.  
  27.     -- For th_action_check():
  28.     -- JA IDs for actions that always have TH: Provoke, Animated Flourish
  29.     info.default_ja_ids = S{35, 204}
  30.     -- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
  31.     info.default_u_ja_ids = S{201, 202, 203, 205, 207}
  32. end
  33.  
  34.  
  35. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  36. function user_setup()
  37.     -- Options: Override default values
  38.     options.OffenseModes = {'Normal', 'Acc', 'Mod'} -- Mod for trivially weak mobs
  39.     options.DefenseModes = {'Normal', 'Evasion', 'PDT'}
  40.     options.RangedModes = {'Normal', 'Acc'}
  41.     options.WeaponskillModes = {'Normal', 'Acc', 'Mod'}
  42.     options.IdleModes = {'Normal'}
  43.     options.RestingModes = {'Normal'}
  44.     options.PhysicalDefenseModes = {'Evasion', 'PDT'}
  45.     options.MagicalDefenseModes = {'MDT'}
  46.  
  47.     state.RangedMode = 'Normal'
  48.     state.Defense.PhysicalMode = 'Evasion'
  49.  
  50.     gear.default.weaponskill_neck = "Asperity Necklace"
  51.     gear.default.weaponskill_waist = "Caudata Belt"
  52.    
  53.     gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
  54.  
  55.     -- Additional local binds
  56.     send_command('bind ^` input /ja "Flee" <me>')
  57.     send_command('bind ^= gs c cycle treasuremode')
  58.     send_command('bind !- gs c cycle targetmode')
  59.  
  60.     select_default_macro_book()
  61. end
  62.  
  63. -- Called when this job file is unloaded (eg: job change)
  64. function job_file_unload()
  65.     send_command('unbind ^`')
  66.     send_command('unbind !-')
  67. end
  68.  
  69. -- Define sets and vars used by this job file.
  70. function init_gear_sets()
  71.     --------------------------------------
  72.     -- Special sets (required by rules)
  73.     --------------------------------------
  74.  
  75.     sets.TreasureHunter = {hands="Plunderer's Armlets +1", waist="Chaac Belt", feet="Raider's Poulaines +2"}
  76.     sets.ExtraRegen = {head="Ocelomeh Headpiece +1"}
  77.     --feet="Skadi's Jambeaux +1"
  78.     sets.Kiting = {feet="Fajin Boots"}
  79.  
  80.     sets.buff['Sneak Attack'] = {ammo="Yetshila +1",
  81.         head="Pillager's Bonnet +1",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  82.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  83.         back="Atheling Mantle",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  84.  
  85.     sets.buff['Trick Attack'] = {ammo="Yetshila +1",
  86.         head="Pillager's Bonnet +1",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  87.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring2="Garuda Ring +1",ring2="Epona's Ring",
  88.         back="Atheling Mantle",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  89.  
  90.     -- Actions we want to use to tag TH.
  91.     sets.precast.Step = sets.TreasureHunter
  92.     sets.precast.Flourish1 = sets.TreasureHunter
  93.     sets.precast.JA.Provoke = sets.TreasureHunter
  94.  
  95.  
  96.     --------------------------------------
  97.     -- Precast sets
  98.     --------------------------------------
  99.  
  100.     -- Precast sets to enhance JAs
  101.     sets.precast.JA['Collaborator'] = {head="Raider's Bonnet +2"}
  102.     sets.precast.JA['Accomplice'] = {head="Raider's Bonnet +2"}
  103.     sets.precast.JA['Flee'] = {feet="Pillager's Poulaines +1"}
  104.     sets.precast.JA['Hide'] = {body="Pillager's Vest +1"}
  105.     sets.precast.JA['Conspirator'] = {} -- {body="Raider's Vest +2"}
  106.     sets.precast.JA['Steal'] = {head="Plunderer's Bonnet",hands="Pillager's Armlets +1",legs="Pillager's Culottes +1",feet="Pillager's Poulaines +1"}
  107.     sets.precast.JA['Despoil'] = {legs="Raider's Culottes +2",feet="Raider's Poulaines +2"}
  108.     sets.precast.JA['Perfect Dodge'] = {hands="Plunderer's Armlets +1"}
  109.     sets.precast.JA['Feint'] = {legs="Plunderer's Culottes +1"}
  110.  
  111.     sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
  112.     sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
  113.  
  114.  
  115.     -- Waltz set (chr and vit)
  116.     sets.precast.Waltz = {ammo="Sonia's Plectrum",
  117.         head="Whirlpool Mask",
  118.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Asklepian Ring",
  119.         back="Iximulew Cape",waist="Caudata Belt",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  120.  
  121.     -- Don't need any special gear for Healing Waltz.
  122.     sets.precast.Waltz['Healing Waltz'] = {}
  123.  
  124.  
  125.     -- Fast cast sets for spells
  126.     sets.precast.FC = {head="Haruspex Hat",body="Dread Jupon",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring",legs="Enif Cosciales"}
  127.  
  128.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  129.  
  130.  
  131.     -- Ranged snapshot gear
  132.     sets.precast.RA = {head="Uk'uxkaj Cap",hands="Iuitl Wristbands +1",legs="Nahtirah Trousers",feet="Khepri Gamashes"}
  133.  
  134.  
  135.     -- Weaponskill sets
  136.  
  137.     -- Default set for any weaponskill that isn't any more specifically defined
  138.     sets.precast.WS = {
  139.         head="Whirlpool Mask",neck=gear.ElementalGorget,ear1="Brutal Earring",ear2="Moonshade Earring",
  140.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring2="Rajas Ring",ring1="Epona's Ring",
  141.         back="Atheling Mantle",waist="Windbuffet Belt",legs="Manibozho Brais",feet="Plunderer's Poulaines +1"}
  142.     sets.precast.WS.Acc = set_combine(sets.precast.WS, {head="Whirlpool Mask",back="Letalis Mantle",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}})
  143.  
  144.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  145.         sets.precast.WS["Mercy Stroke"] = set_combine(sets.precast.WS, {
  146.         head="Uk'uxkaj Cap",neck="Soil Gorget",back="Buquwik Cape",hands="Boor Bracelets",ear2="Vulcan's Pearl",ring2="Ifrit Ring +1",body="Dread Jupon",legs="Quiahuiz Trousers",waist="Metalsinger Belt",feet={ name="Qaaxo Leggings", augments={'Attack+15','"Mag.Atk.Bns."+15','STR+12',}}})
  147.     sets.precast.WS["Mercy Stroke"].Acc = set_combine(sets.precast.WS["Mercy Stroke"], {head="Whirlpool Mask",back="Letalis Mantle",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}})
  148.     sets.precast.WS["Mercy Stroke"].Mod = set_combine(sets.precast.WS["Mercy Stroke"], {head="Uk'uxkaj Cap",body="Dread Jupon",back="Buquwik Cape",hands="Boor Bracelets",waist="Metalsinger Belt"})
  149.     sets.precast.WS["Mercy Stroke"].SA = set_combine(sets.precast.WS["Mercy Stroke"].Mod, {head="Uk'uxkaj Cap",legs="Pillager's Culottes +1",hands="Pillager's Armlets +1",back="Cavaros Mantle",body="Plunderer's Vest +1",ring2="Ifrit Ring +1",feet={ name="Qaaxo Leggings", augments={'Attack+15','"Mag.Atk.Bns."+15','STR+12',}}})
  150.     sets.precast.WS["Mercy Stroke"].TA = set_combine(sets.precast.WS["Mercy Stroke"].Mod, {hands="Boor Bracelets"})
  151.     sets.precast.WS["Mercy Stroke"].SATA = set_combine(sets.precast.WS["Mercy Stroke"].Mod, {hands="Pillager's Armlets +1"})
  152.    
  153.    
  154.     sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {ring2="Garuda Ring +1",legs="Nahtirah Trousers"})
  155.     sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  156.     sets.precast.WS['Exenterator'].Mod = set_combine(sets.precast.WS['Exenterator'], {head="Felistris Mask",waist=gear.ElementalBelt})
  157.     sets.precast.WS['Exenterator'].SA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Yetshila +1"})
  158.     sets.precast.WS['Exenterator'].TA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Yetshila +1"})
  159.     sets.precast.WS['Exenterator'].SATA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Yetshila +1"})
  160.  
  161.     sets.precast.WS['Dancing Edge'] = set_combine(sets.precast.WS, {})
  162.     sets.precast.WS['Dancing Edge'].Acc = set_combine(sets.precast.WS['Dancing Edge'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  163.     sets.precast.WS['Dancing Edge'].Mod = set_combine(sets.precast.WS['Dancing Edge'], {waist=gear.ElementalBelt})
  164.     sets.precast.WS['Dancing Edge'].SA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Yetshila +1"})
  165.     sets.precast.WS['Dancing Edge'].TA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Yetshila +1"})
  166.     sets.precast.WS['Dancing Edge'].SATA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Yetshila +1"})
  167. --ammo="Yetshila +1",
  168.     sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {
  169.         head="Pillager's Bonnet +1",body="Plunderer's Vest +1",neck="Soil Gorget",back="Rancorous Mantle",legs="Hecatomb Subligar +1",waist="Wanion Belt"})
  170.     sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {head="Uk'uxkaj Cap",body="Plunderer's Vest +1",neck="Soil Gorget",
  171.     --hands="Aetosaur Gloves +1",
  172.     back="Rancorous Mantle",legs="Pillager's Culottes +1",waist="Soil Belt"})
  173.     sets.precast.WS['Evisceration'].Mod = set_combine(sets.precast.WS['Evisceration'], {waist=gear.ElementalBelt})
  174.     sets.precast.WS['Evisceration'].SA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  175.     sets.precast.WS['Evisceration'].TA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  176.     sets.precast.WS['Evisceration'].SATA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  177.  
  178.     sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {head="Plunderer's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring",waist="Wanion Belt",ring2="Ramuh Ring +1",back="Kayapa Cape"})
  179.     sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {})
  180.     sets.precast.WS["Rudra's Storm"].Mod = set_combine(sets.precast.WS["Rudra's Storm"], {back="Kayapa Cape",waist=gear.ElementalBelt})
  181.     sets.precast.WS["Rudra's Storm"].SA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {head="Pillager's Bonnet +1",legs="Pillager's Culottes +1",hands="Pillager's Armlets +1",back="Kayapa Cape",body="Pillager's Vest +1",ring2="Ramuh Ring +1",feet="Plunderer's Poulaines +1",waist="Wanion Belt"})
  182.     sets.precast.WS["Rudra's Storm"].TA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {back="Cavaros Mantle"})
  183.     sets.precast.WS["Rudra's Storm"].SATA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {back="Kayapa Cape"})
  184.  
  185.     sets.precast.WS["Shark Bite"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
  186.     sets.precast.WS['Shark Bite'].Acc = set_combine(sets.precast.WS['Shark Bite'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  187.     sets.precast.WS['Shark Bite'].Mod = set_combine(sets.precast.WS['Shark Bite'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  188.     sets.precast.WS['Shark Bite'].SA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Yetshila +1",
  189.         body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  190.     sets.precast.WS['Shark Bite'].TA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Yetshila +1",
  191.         body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  192.     sets.precast.WS['Shark Bite'].SATA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Yetshila +1",
  193.         body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  194.  
  195.     sets.precast.WS['Mandalic Stab'] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
  196.     sets.precast.WS['Mandalic Stab'].Acc = set_combine(sets.precast.WS['Mandalic Stab'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  197.     sets.precast.WS['Mandalic Stab'].Mod = set_combine(sets.precast.WS['Mandalic Stab'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  198.     sets.precast.WS['Mandalic Stab'].SA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Yetshila +1",
  199.         body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  200.     sets.precast.WS['Mandalic Stab'].TA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Yetshila +1",
  201.         body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  202.     sets.precast.WS['Mandalic Stab'].SATA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Yetshila +1",
  203.         body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  204.  
  205.     sets.precast.WS['Aeolian Edge'] = {ammo="Jukukik Feather",
  206.         head="Wayfarer Circlet",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Moonshade Earring",
  207.         body="Wayfarer Robe",hands="Pillager's Armlets +1",ring1="Acumen Ring",ring2="Demon's Ring",
  208.         back="Toro Cape",waist=gear.ElementalBelt,legs="Shneddick Tights +1",feet="Wayfarer Clogs"}
  209.  
  210.     sets.precast.WS['Aeolian Edge'].TH = set_combine(sets.precast.WS['Aeolian Edge'], sets.TreasureHunter)
  211.  
  212.  
  213.     --------------------------------------
  214.     -- Midcast sets
  215.     --------------------------------------
  216.  
  217.     sets.midcast.FastRecast = {
  218.         head="Whirlpool Mask",ear2="Loquacious Earring",
  219.         body="Pillager's Vest +1",hands="Thaumas Gloves",
  220.         back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
  221.  
  222.     -- Specific spells
  223.     sets.midcast.Utsusemi = {
  224.         head="Whirlpool Mask",neck="Ej Necklace +1",ear2="Loquacious Earring",
  225.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",
  226.         back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
  227.  
  228.     -- Ranged gear
  229.     sets.midcast.RA = {
  230.         head="Whirlpool Mask",neck="Ej Necklace +1",ear1="Clearview Earring",ear2="Volley Earring",
  231.         body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Hajduk Ring",
  232.         back="Libeccio Mantle",waist="Aquiline Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  233.  
  234.     sets.midcast.RA.Acc = {
  235.         head="Pillager's Bonnet +1",neck="Ej Necklace +1",ear1="Clearview Earring",ear2="Volley Earring",
  236.         body="Iuitl Vest",hands="Buremte Gloves",ring1="Beeline Ring",ring2="Hajduk Ring",
  237.         back="Libeccio Mantle",waist="Aquiline Belt",legs="Thurandaut Tights +1",feet="Pillager's Poulaines +1"}
  238.  
  239.  
  240.     --------------------------------------
  241.     -- Idle/resting/defense sets
  242.     --------------------------------------
  243.  
  244.     -- Resting sets
  245.     sets.resting = {head="Ocelomeh Headpiece +1",neck="Wiglen Gorget",
  246.         ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  247.  
  248.  
  249.     -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  250.  
  251.     sets.idle = {
  252.         head="Ocelomeh Headpiece +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  253.         body="Khepri Jacket",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  254.         back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Fajin Boots"}
  255.  
  256.     sets.idle.Town = {
  257.         head="Felistris Mask",neck="Rancor Collar",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  258.         body="Thaumas Coat",hands="Pill. Armlets +1",ring1="Epona's Ring",ring2="Oneiros Ring",
  259.         back="Canny cape",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Fajin Boots"}
  260.  
  261.     sets.idle.Weak = {ammo="Yetshila +1",
  262.         head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  263.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  264.         back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Fajin Boots"}
  265.  
  266.  
  267.     -- Defense sets
  268.  
  269.     sets.defense.Evasion = {
  270.         head="Pillager's Bonnet +1",neck="Ej Necklace +1",
  271.         body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Beeline Ring",
  272.         back="Canny Cape",waist="Flume Belt",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
  273.  
  274.     sets.defense.PDT = {ammo="Iron Gobbet",
  275.         head="Pillager's Bonnet +1",neck="Twilight Torque",
  276.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2=gear.DarkRing.physical,
  277.         back="Iximulew Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
  278.  
  279.     sets.defense.MDT = {ammo="Demonry Stone",
  280.         head="Pillager's Bonnet +1",neck="Twilight Torque",
  281.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Shadow Ring",
  282.         back="Engulfer Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
  283.  
  284.  
  285.     --------------------------------------
  286.     -- Melee sets
  287.     --------------------------------------
  288.  
  289.     -- Normal melee group (low magic haste)
  290.     sets.engaged = {
  291.         head="Iuitl Headgear +1",
  292.         --head="Felistris Mask",
  293.         neck="Rancor Collar",
  294.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  295.         body="Skadi's Cuirie +1",
  296.         --body="Thaumas Coat",
  297.         hands="Pill. Armlets +1",ring1="Epona's Ring",ring2="Oneiros Ring",
  298.         back="Canny cape",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  299.        
  300.     sets.engaged.Acc = {head="Whirlpool Mask",
  301.     body="Pillager's Vest +1",
  302.     hands={ name="Qaaxo Mitaines", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}},
  303.     legs={ name="Plun. Culottes +1", augments={'Enhances "Feint" effect',}},
  304.     feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}},
  305.     neck="Ej necklace +1",
  306.     waist="Anguinus Belt",
  307.     left_ear="Dudgeon Earring",
  308.     right_ear="Heartseeker Earring",
  309.     left_ring="Mars's Ring",
  310.     right_ring="Ramuh Ring +1",
  311.     back="Letalis Mantle"}
  312.        
  313.     -- Mod set for trivial mobs (Skadi+1)
  314.     sets.engaged.Mod = {ammo="Yetshila +1",
  315.     head="Iuitl Headgear +1",
  316.         --head="Felistris Mask",
  317.         neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  318.         body="Skadi's Cuirie +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  319.         back="Atheling Mantle",waist="Shetal Stone",legs=gear.AugQuiahuiz,feet="Plunderer's Poulaines +1"}
  320.  
  321.     -- Mod set for trivial mobs (Thaumas)
  322.     sets.engaged.Mod2 = {ammo="Yetshila +1",
  323.         head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  324.         body="Thaumas Coat",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  325.         back="Atheling Mantle",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  326.  
  327.     sets.engaged.Evasion = {ammo="Yetshila +1",
  328.         head="Felistris Mask",neck="Ej Necklace +1",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  329.         body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  330.         back="Canny Cape",waist="Shetal Stone",legs="Kaabnax Trousers",feet="Vanir Boots"}
  331.        
  332.     sets.engaged.Acc.Evasion = {ammo="Honed Tathlum",
  333.         head="Whirlpool Mask",neck="Ej Necklace +1",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  334.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  335.         back="Canny Cape",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet="Vanir Boots"}
  336.  
  337.     sets.engaged.PDT = {ammo="Yetshila +1",
  338.         head="Felistris Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  339.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  340.         back="Iximulew Cape",waist="Shetal Stone",legs="Iuitl Tights",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  341.        
  342.     sets.engaged.Acc.PDT = {ammo="Honed Tathlum",
  343.         head="Whirlpool Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  344.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  345.         back="Canny Cape",waist="Hurch'lan Sash",legs="Iuitl Tights",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  346.        
  347.        
  348.         -- Custom melee group: Embrava Haste (7% DW)
  349.     sets.engaged.EmbravaHaste = {head="Iuitl Headgear +1",
  350.     --head="Felistris Mask",
  351.     neck="Rancor Collar",
  352.         ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  353.         body="Thaumas Coat",hands="Pill. Armlets +1",ring1="Epona's Ring",ring2="Oneiros Ring",
  354.         back="Canny cape",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  355.        
  356.     sets.engaged.Acc.EmbravaHaste = {head="Whirlpool Mask",
  357.     body="Pillager's Vest +1",
  358.     hands={ name="Qaaxo Mitaines", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}},
  359.     legs={ name="Plun. Culottes +1", augments={'Enhances "Feint" effect',}},
  360.     feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}},
  361.     neck="Ej necklace +1",
  362.     waist="Anguinus Belt",
  363.     left_ear="Dudgeon Earring",
  364.     right_ear="Heartseeker Earring",
  365.     left_ring="Mars's Ring",
  366.     right_ring="Ramuh Ring +1",
  367.     back="Letalis Mantle"}
  368.        
  369.     -- Mod set for trivial mobs (Skadi+1)
  370.     sets.engaged.Mod.EmbravaHaste = {ammo="Yetshila +1",
  371.         head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  372.         body="Skadi's Cuirie +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  373.         back="Atheling Mantle",waist="Shetal Stone",legs=gear.AugQuiahuiz,feet="Plunderer's Poulaines +1"}
  374.  
  375.     -- Mod set for trivial mobs (Thaumas)
  376.     sets.engaged.Mod2.EmbravaHaste = {ammo="Yetshila +1",
  377.         head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  378.         body="Thaumas Coat",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  379.         back="Atheling Mantle",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  380.  
  381.     sets.engaged.Evasion.EmbravaHaste = {ammo="Yetshila +1",
  382.         head="Felistris Mask",neck="Ej Necklace +1",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  383.         body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  384.         back="Canny Cape",waist="Shetal Stone",legs="Kaabnax Trousers",feet="Vanir Boots"}
  385.        
  386.     sets.engaged.Acc.Evasion.EmbravaHaste = {ammo="Honed Tathlum",
  387.         head="Whirlpool Mask",neck="Ej Necklace +1",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  388.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  389.         back="Canny Cape",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
  390.  
  391.     sets.engaged.PDT.EmbravaHaste = {ammo="Yetshila +1",
  392.         head="Felistris Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  393.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  394.         back="Iximulew Cape",waist="Shetal Stone",legs="Iuitl Tights",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  395.        
  396.     sets.engaged.Acc.PDT.EmbravaHaste = {ammo="Honed Tathlum",
  397.         head="Whirlpool Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  398.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  399.         back="Canny Cape",waist="Hurch'lan Sash",legs="Iuitl Tights",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  400.        
  401.             -- Custom melee group: High Haste (~20% DW)
  402.     sets.engaged.HighHaste = {head="Iuitl Headgear +1",
  403.     --head="Felistris Mask",
  404.     neck="Rancor Collar",ear1="Brutal Earring",ear2="Suppanomimi",
  405.         body="Thaumas Coat",hands="Pill. Armlets +1",ring1="Epona's Ring",ring2="Oneiros Ring",
  406.         back="Canny cape",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  407.        
  408.         sets.engaged.Acc.HighHaste = {head="Whirlpool Mask",
  409.     body="Pillager's Vest +1",
  410.     hands={ name="Qaaxo Mitaines", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}},
  411.     legs={ name="Plun. Culottes +1", augments={'Enhances "Feint" effect',}},
  412.     feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}},
  413.     neck="Ej necklace +1",
  414.     waist="Anguinus Belt",
  415.     left_ear="Dudgeon Earring",
  416.     right_ear="Heartseeker Earring",
  417.     left_ring="Mars's Ring",
  418.     right_ring="Ramuh Ring +1",
  419.     back="Letalis Mantle"}
  420.        
  421.     -- Mod set for trivial mobs (Skadi+1)
  422.     sets.engaged.Mod.HighHaste = {ammo="Yetshila +1",
  423.         head="Felistris Mask",neck="Asperity Necklace",ear1="Brutal Earring",ear2="Suppanomimi",
  424.         body="Skadi's Cuirie +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  425.         back="Atheling Mantle",waist="Shetal Stone",legs=gear.AugQuiahuiz,feet="Plunderer's Poulaines +1"}
  426.  
  427.     -- Mod set for trivial mobs (Thaumas)
  428.     sets.engaged.Mod2.HighHaste = {ammo="Yetshila +1",
  429.         head="Felistris Mask",neck="Asperity Necklace",ear1="Brutal Earring",ear2="Suppanomimi",
  430.         body="Thaumas Coat",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  431.         back="Atheling Mantle",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  432.  
  433.     sets.engaged.Evasion.HighHaste = {ammo="Yetshila +1",
  434.         head="Felistris Mask",neck="Ej Necklace +1",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  435.         body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  436.         back="Canny Cape",waist="Shetal Stone",legs="Kaabnax Trousers",feet="Vanir Boots"}
  437.        
  438.     sets.engaged.Acc.Evasion.HighHaste = {ammo="Honed Tathlum",
  439.         head="Whirlpool Mask",neck="Ej Necklace +1",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  440.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  441.         back="Canny Cape",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
  442.  
  443.     sets.engaged.PDT.HighHaste = {ammo="Yetshila +1",
  444.         head="Felistris Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  445.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  446.         back="Iximulew Cape",waist="Shetal Stone",legs="Iuitl Tights",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  447.        
  448.     sets.engaged.Acc.PDT.HighHaste = {ammo="Honed Tathlum",
  449.         head="Whirlpool Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  450.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  451.         back="Canny Cape",waist="Hurch'lan Sash",legs="Iuitl Tights",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  452.        
  453.         -- Custom melee group: Max Haste (0% DW)
  454.         sets.engaged.MaxHaste = {ammo="Yetshila +1",
  455.         head="Iuitl Headgear +1",
  456.         --head="Felistris Mask",
  457.         neck="Rancor Collar",ear1="Brutal Earring",ear2="Suppanomimi",
  458.         body="Thaumas Coat",hands="Pill. Armlets +1",ring1="Epona's Ring",ring2="Oneiros Ring",
  459.         back="Canny cape",waist="Windbuffet Belt",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  460.        
  461.         sets.engaged.Acc.MaxHaste = {head="Whirlpool Mask",
  462.     body="Pillager's Vest +1",
  463.     hands={ name="Qaaxo Mitaines", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}},
  464.     legs={ name="Plun. Culottes +1", augments={'Enhances "Feint" effect',}},
  465.     feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}},
  466.     neck="Ej necklace +1",
  467.     waist="Anguinus Belt",
  468.     left_ear="Dudgeon Earring",
  469.     right_ear="Heartseeker Earring",
  470.     left_ring="Mars's Ring",
  471.     right_ring="Ramuh Ring +1",
  472.     back="Letalis Mantle"}
  473.        
  474.     -- Mod set for trivial mobs (Skadi+1)
  475.     sets.engaged.Mod.MaxHaste = {ammo="Yetshila +1",
  476.         head="Felistris Mask",neck="Asperity Necklace",ear1="Brutal Earring",ear2="Suppanomimi",
  477.         body="Skadi's Cuirie +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  478.         back="Atheling Mantle",waist="Shetal Stone",legs=gear.AugQuiahuiz,feet="Plunderer's Poulaines +1"}
  479.  
  480.     -- Mod set for trivial mobs (Thaumas)
  481.     sets.engaged.Mod2.MaxHaste = {ammo="Yetshila +1",
  482.         head="Felistris Mask",neck="Asperity Necklace",ear1="Brutal Earring",ear2="Suppanomimi",
  483.         body="Thaumas Coat",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  484.         back="Atheling Mantle",waist="Shetal Stone",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  485.  
  486.     sets.engaged.Evasion.MaxHaste = {ammo="Yetshila +1",
  487.         head="Felistris Mask",neck="Ej Necklace +1",ear1="Brutal Earring",ear2="Suppanomimi",
  488.         body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  489.         back="Canny Cape",waist="Shetal Stone",legs="Kaabnax Trousers",feet="Vanir Boots"}
  490.        
  491.     sets.engaged.Acc.Evasion.MaxHaste = {ammo="Honed Tathlum",
  492.         head="Whirlpool Mask",neck="Ej Necklace +1",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  493.         body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  494.         back="Canny Cape",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  495.  
  496.     sets.engaged.PDT.MaxHaste = {ammo="Yetshila +1",
  497.         head="Felistris Mask",neck="Twilight Torque",ear1="Brutal Earring",ear2="Suppanomimi",
  498.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  499.         back="Iximulew Cape",waist="Shetal Stone",legs="Iuitl Tights",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  500.        
  501.     sets.engaged.Acc.PDT.MaxHaste = {ammo="Honed Tathlum",
  502.         head="Whirlpool Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  503.         body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  504.         back="Canny Cape",waist="Hurch'lan Sash",legs="Iuitl Tights",feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
  505.        
  506.        
  507.  
  508. end
  509.  
  510.  
  511. -------------------------------------------------------------------------------------------------------------------
  512. -- Job-specific hooks that are called to process player actions at specific points in time.
  513. -------------------------------------------------------------------------------------------------------------------
  514.  
  515. function job_precast(spell, action, spellMap, eventArgs)
  516.     if state.Buff[spell.english] ~= nil then
  517.         state.Buff[spell.english] = true
  518.     end
  519. end
  520.  
  521. -- Run after the general precast() is done.
  522. function job_post_precast(spell, action, spellMap, eventArgs)
  523.     if spell.english == 'Aeolian Edge' and state.TreasureMode ~= 'None' then
  524.         equip(sets.TreasureHunter)
  525.     elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
  526.         if state.TreasureMode == 'SATA' or state.TreasureMode == 'Fulltime' then
  527.             equip(sets.TreasureHunter)
  528.         end
  529.     end
  530. end
  531.  
  532. -- Run after the general midcast() set is constructed.
  533. function job_post_midcast(spell, action, spellMap, eventArgs)
  534.     if state.TreasureMode ~= 'None' and spell.action_type == 'Ranged Attack' then
  535.         equip(sets.TreasureHunter)
  536.     end
  537. end
  538.  
  539. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  540. function job_aftercast(spell, action, spellMap, eventArgs)
  541.     if state.Buff[spell.english] ~= nil then
  542.         state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
  543.     end
  544.  
  545.     -- Weaponskills wipe SATA/Feint.  Turn those state vars off before default gearing is attempted.
  546.     if spell.type == 'WeaponSkill' and not spell.interrupted then
  547.         state.Buff['Sneak Attack'] = false
  548.         state.Buff['Trick Attack'] = false
  549.         state.Buff['Feint'] = false
  550.     end
  551. end
  552.  
  553. -- Called after the default aftercast handling is complete.
  554. function job_post_aftercast(spell, action, spellMap, eventArgs)
  555.     -- If Feint is active, put that gear set on on top of regular gear.
  556.     -- This includes overlaying SATA gear.
  557.     check_buff('Feint', eventArgs)
  558. end
  559.  
  560.  
  561. -------------------------------------------------------------------------------------------------------------------
  562. -- Customization hooks.
  563. -------------------------------------------------------------------------------------------------------------------
  564.  
  565. function get_custom_wsmode(spell, spellMap, defaut_wsmode)
  566.     local wsmode
  567.  
  568.     if state.Buff['Sneak Attack'] then
  569.         wsmode = 'SA'
  570.     end
  571.     if state.Buff['Trick Attack'] then
  572.         wsmode = (wsmode or '') .. 'TA'
  573.     end
  574.  
  575.     return wsmode
  576. end
  577.  
  578.  
  579. -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
  580. function job_handle_equipping_gear(playerStatus, eventArgs)
  581.     -- Check that ranged slot is locked, if necessary
  582.     check_range_lock()
  583.  
  584.     -- Check for SATA when equipping gear.  If either is active, equip
  585.     -- that gear specifically, and block equipping default gear.
  586.     check_buff('Sneak Attack', eventArgs)
  587.     check_buff('Trick Attack', eventArgs)
  588. end
  589.  
  590.  
  591. function customize_idle_set(idleSet)
  592.     if player.hpp < 80 then
  593.         idleSet = set_combine(idleSet, sets.ExtraRegen)
  594.     end
  595.  
  596.     return idleSet
  597. end
  598.  
  599.  
  600. function customize_melee_set(meleeSet)
  601.     if state.TreasureMode == 'Fulltime' then
  602.         meleeSet = set_combine(meleeSet, sets.TreasureHunter)
  603.     end
  604.  
  605.     return meleeSet
  606. end
  607.  
  608. -------------------------------------------------------------------------------------------------------------------
  609. -- General hooks for change events.
  610. -------------------------------------------------------------------------------------------------------------------
  611.  
  612. -- Called when a player gains or loses a buff.
  613. -- buff == buff gained or lost
  614. -- gain == true if the buff was gained, false if it was lost.
  615. function job_buff_change(buff, gain)
  616.     if state.Buff[buff] ~= nil then
  617.         state.Buff[buff] = gain
  618.         if not midaction() then
  619.             handle_equipping_gear(player.status)
  620.         end
  621.     end
  622. end
  623.  
  624.  
  625.  
  626. ------------------------BLu
  627. --helper_functions.lua  594         elseif spell.type == 'BlueMagic' and not ((player.main_job_id == 16 and --table.contains(windower.ffxi.get_mjob_data().spells,spell.id)) or
  628.  
  629.  
  630. -- Called when a player gains or loses a buff.
  631. -- buff == buff gained or lost
  632. -- gain == true if the buff was gained, false if it was lost.
  633. function job_buff_change(buff, gain)
  634.     -- If we gain or lose any haste buffs, adjust which gear set we target.
  635.     if buffactive.sleep and player.hp > 200 and player.status == "Engaged" and not buffactive.stoneskin then
  636.         equip({head="Frenzy Sallet"})
  637.         elseif buffactive.sleep and player.hp > 200 and player.status == "Engaged" and buffactive.Stoneskin then
  638.         send_command('cancel stoneskin')
  639.         else
  640.         if not midaction() then
  641.             status_change(player.status)
  642.         end    
  643.     end
  644.     --if buffactive.sleep and player.hp > 200 and player.status == "Engaged" and buffactive.Stoneskin then
  645.         --equip({head="Frenzy Sallet"})
  646.         --send_command('cancel stonekin')
  647.         --else
  648.         --if not midaction() then
  649.             --status_change(player.status)
  650.         --end
  651.     --end  
  652.    
  653.     if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
  654.         determine_haste_group()
  655.         handle_equipping_gear(player.status)
  656.     elseif state.Buff[buff] ~= nil then
  657.         state.Buff[buff] = gain
  658.         handle_equipping_gear(player.status)
  659.     end
  660. end
  661.  
  662.  
  663. -- Equip Frenzy Sallet When You Are Asleep & Have 200+ HP --
  664. --function buff_change(buff,gain)
  665.     --buff = string.lower(buff)
  666.  
  667.     --if buffactive.Sleep and player.hp > 200 and player.status == "Engaged" then
  668.         --equip({head="Frenzy Sallet"})
  669.         --elseif buff == "sleep" and gain and player.hp > 200 and player.status == "Engaged" and buffactive.Stoneskin --then
  670.     --  equip({head="Frenzy Sallet"})
  671.         --send_command('cancel stonekin')
  672.         --else
  673.         --if not midaction() then
  674.             --status_change(player.status)
  675.         --end
  676. --    end
  677. --end
  678. -------------------------------------------------------------------------------------------------------------------
  679. -- Various update events.
  680. -------------------------------------------------------------------------------------------------------------------
  681.  
  682. -- Called by the 'update' self-command.
  683. function job_update(cmdParams, eventArgs)
  684.     th_update(cmdParams, eventArgs)
  685. end
  686.  
  687.  
  688. -- Function to display the current relevant user state when doing an update.
  689. -- Return true if display was handled, and you don't want the default info shown.
  690. function display_current_job_state(eventArgs)
  691.     local defenseString = ''
  692.     if state.Defense.Active then
  693.         local defMode = state.Defense.PhysicalMode
  694.         if state.Defense.Type == 'Magical' then
  695.             defMode = state.Defense.MagicalMode
  696.         end
  697.  
  698.         defenseString = 'Defense: '..state.Defense.Type..' '..defMode..'  '
  699.     end
  700.  
  701.     add_to_chat(122,'Melee: '..state.OffenseMode..'/'..state.DefenseMode..'  WS: '..state.WeaponskillMode..'  '..
  702.         defenseString..'Kiting: '..on_off_names[state.Kiting]..'  TH: '..state.TreasureMode)
  703.  
  704.     eventArgs.handled = true
  705. end
  706.  
  707. -- Called by the default 'update' self-command.
  708. function job_update(cmdParams, eventArgs)
  709.     determine_haste_group()
  710. end
  711.  
  712. -------------------------------------------------------------------------------------------------------------------
  713. -- Utility functions specific to this job.
  714. -------------------------------------------------------------------------------------------------------------------
  715.  
  716. -- State buff checks that will equip buff gear and mark the event as handled.
  717. function check_buff(buff_name, eventArgs)
  718.     if state.Buff[buff_name] then
  719.         equip(sets.buff[buff_name] or {})
  720.         if state.TreasureMode == 'SATA' or state.TreasureMode == 'Fulltime' then
  721.             equip(sets.TreasureHunter)
  722.         end
  723.         eventArgs.handled = true
  724.     end
  725. end
  726.  
  727.  
  728. -- Check for various actions that we've specified in user code as being used with TH gear.
  729. -- This will only ever be called if TreasureMode is not 'None'.
  730. -- Category and Param are as specified in the action event packet.
  731. function th_action_check(category, param)
  732.     if category == 2 or -- any ranged attack
  733.         --category == 4 or -- any magic action
  734.         (category == 3 and param == 30) or -- Aeolian Edge
  735.         (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
  736.         (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
  737.         then return true
  738.     end
  739. end
  740.  
  741.  
  742. -- Function to lock the ranged slot if we have a ranged weapon equipped.
  743. function check_range_lock()
  744.     if player.equipment.range ~= 'empty' then
  745.         disable('range', 'ammo')
  746.     else
  747.         enable('range', 'ammo')
  748.     end
  749. end
  750.  
  751. function determine_haste_group()
  752.     -- We have three groups of DW in gear: Hachiya body/legs, Iga head + Shetal Stone, and DW earrings
  753.    
  754.     -- Standard gear set reaches near capped delay with just Haste (77%-78%, depending on HQs)
  755.  
  756.     -- For high haste, we want to be able to drop one of the 10% groups.
  757.     -- Basic gear hits capped delay (roughly) with:
  758.     -- 1 March + Haste
  759.     -- 2 March
  760.     -- Haste + Haste Samba
  761.     -- 1 March + Haste Samba
  762.     -- Embrava
  763.    
  764.     -- High haste buffs:
  765.     -- 2x Marches + Haste Samba == 19% DW in gear
  766.     -- 1x March + Haste + Haste Samba == 22% DW in gear
  767.     -- Embrava + Haste or 1x March == 7% DW in gear
  768.    
  769.     -- For max haste (capped magic haste + 25% gear haste), we can drop all DW gear.
  770.     -- Max haste buffs:
  771.     -- Embrava + Haste+March or 2x March
  772.     -- 2x Marches + Haste
  773.    
  774.     -- So we want four tiers:
  775.     -- Normal DW
  776.     -- 20% DW -- High Haste
  777.     -- 7% DW (earrings) - Embrava Haste (specialized situation with embrava and haste, but no marches)
  778.     -- 0 DW - Max Haste
  779.    
  780.     classes.CustomMeleeGroups:clear()
  781.    
  782.     if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
  783.         classes.CustomMeleeGroups:append('MaxHaste')
  784.     elseif buffactive.march == 2 and buffactive.haste then
  785.         classes.CustomMeleeGroups:append('MaxHaste')
  786.     elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
  787.         classes.CustomMeleeGroups:append('EmbravaHaste')
  788.     elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
  789.         classes.CustomMeleeGroups:append('HighHaste')
  790.     elseif buffactive.march == 2 then
  791.         classes.CustomMeleeGroups:append('HighHaste')
  792.     end
  793. end
  794.  
  795.  
  796. -- Select default macro book on initial load or subjob change.
  797. function select_default_macro_book()
  798.     -- Default macro set/book
  799.     if player.sub_job == 'DNC' then
  800.         set_macro_page(5, 8)
  801.     elseif player.sub_job == 'WAR' then
  802.         set_macro_page(5, 8)
  803.     elseif player.sub_job == 'NIN' then
  804.         set_macro_page(5, 8)
  805.     else
  806.         set_macro_page(5, 8)
  807.     end
  808. end
Advertisement
Add Comment
Please, Sign In to add comment