Advertisement
Guest User

FFXI THF Verda

a guest
Aug 28th, 2015
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 49.69 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job.  Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. --[[
  6.     Custom commands:
  7.  
  8.     gs c cycle treasuremode (set on ctrl-= by default): Cycles through the available treasure hunter modes.
  9.    
  10.     Treasure hunter modes:
  11.         None - Will never equip TH gear
  12.         Tag - Will equip TH gear sufficient for initial contact with a mob (either melee, ranged hit, or Aeolian Edge AOE)
  13.         SATA - Will equip TH gear sufficient for initial contact with a mob, and when using SATA
  14.         Fulltime - Will keep TH gear equipped fulltime
  15.  
  16. --]]
  17. send_command('exec verda/verda_thf.txt');
  18. hastetype=1
  19. function deepcopy(orig)
  20.     local orig_type = type(orig)
  21.     local copy
  22.     if orig_type == 'table' then
  23.         copy = {}
  24.         for orig_key, orig_value in next, orig, nil do
  25.             copy[deepcopy(orig_key)] = deepcopy(orig_value)
  26.         end
  27.         setmetatable(copy, deepcopy(getmetatable(orig)))
  28.     else -- number, string, boolean, etc
  29.         copy = orig
  30.     end
  31.     return copy
  32. end
  33. function copy_set(obj, seen)
  34.     if type(obj) ~= 'table' then return obj end
  35.     if seen and seen[obj] then return seen[obj] end
  36.     local s = seen or {}
  37.     local res = setmetatable({}, getmetatable(obj))
  38.     s[obj] = res
  39.     for k, v in pairs(obj) do res[copy_set(k, s)] = copy_set(v, s) end
  40.     return res
  41. end
  42.  
  43.  
  44. -- Initialization function for this job file.
  45. function get_sets()
  46.     mote_include_version = 2
  47.    
  48.     -- Load and initialize the include file.
  49.     include('Mote-Include.lua')
  50.     include('organizer-lib')
  51. end
  52.  
  53. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  54. function job_setup()
  55.     state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
  56.     state.Buff['Trick Attack'] = buffactive['trick attack'] or false
  57.     state.Buff['Feint'] = buffactive['feint'] or false
  58.    
  59.     include('Mote-TreasureHunter')
  60.  
  61.     -- For th_action_check():
  62.     -- JA IDs for actions that always have TH: Provoke, Animated Flourish
  63.     info.default_ja_ids = S{35, 204}
  64.     -- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
  65.     info.default_u_ja_ids = S{201, 202, 203, 205, 207}
  66. end
  67.  
  68. -------------------------------------------------------------------------------------------------------------------
  69. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  70. -------------------------------------------------------------------------------------------------------------------
  71.  
  72. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  73. function user_setup()
  74.     state.OffenseMode:options('Normal', 'Acc', 'AccExtreme')
  75.     --state.HybridMode:options('Normal', 'Evasion', 'PDT')
  76.     --state.RangedMode:options('Normal', 'Acc')
  77.     --state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
  78.     --state.accuracy = M{['description']="Accuracy Level",'Normal','Light', 'All Out'}
  79.     state.damagetaken = M{['description']="Damage Taken",'None','DTLight', 'DT', 'MagicEvasion'}
  80.     state.hastemode = M{['description'] = 'Haste Mode'}
  81.     state.hastemode:options('NoHaste','HasteI','HasteII','Capped')
  82.     state.rangetype = M{['description'] = 'Ranged Type'}
  83.     state.rangetype:options('None','Throwing','Throwing2','Crossbow')
  84.     state.cpmode = M(false, 'CP Mode')
  85.     state.runaway = M(false, 'Run Away!')
  86.     state.runaway2 = M(false, 'Run Away! (Jute Boot Version)')
  87.     state.idlemode = M{['description']="Idle Mode",'Normal','Regen'}
  88.     state.runaway = M(false, 'Run Away!')
  89.     state.hasteknife = M(false, 'Blurred Dagger')
  90.     state.aoedagger = M(false, 'Levante Dagger')
  91.    
  92.  
  93.     gear.default.weaponskill_neck = "Asperity Necklace"
  94.     --gear.default.weaponskill_waist = "Caudata Belt"
  95.     --gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
  96.  
  97.     -- Additional local binds
  98.     send_command('bind ^` input /ja "Flee" <me>')
  99.     send_command('bind ^= gs c cycle treasuremode')
  100.  
  101.     send_command('bind ^q gs c hastetype')
  102.     send_command('bind !q gs c rangetype')
  103.     send_command('bind f10 gs c cycle idlemode')
  104.     send_command('bind f11 gs c cycle damagetaken')
  105.     send_command('alias stp_m6 gs c toggle hasteknife')
  106.     send_command('alias stp_m7 gs c toggle aoedagger')
  107.     send_command('bind ^[ gs c toggle cpmode')
  108.  
  109. --    send_command('bind !- gs c cycle targetmode')
  110.     --send_command('bind !\ gs c maxth')
  111.     --send_command('bind f11 gs c magicevasion')
  112. ---    send_command('bind f11 gs c damagetaken')
  113. --    send_command('bind f10 gs c ranged')
  114. --    send_command('bind f9 gs c accmode')
  115. --    send_command('bind ^q gs c dw')
  116.  
  117.     --send_command('alias stp_m6 gs c maxth')
  118.     --send_command('alias stp_m7 gs c hastemode')
  119.     --send_command('bind f12 gs equip idle')
  120.     send_command('bind ^/ gs c cycle runaway')
  121.     send_command('bind !/ gs c cycle runaway2')
  122.     send_command('alias stp_m10 input /ma "Monomi: Ichi" <me>')
  123.     send_command('alias stp_m13 input /ws "Evisceration" <t>')
  124.     send_command('bind %numpad1 setkey f8 down;wait .1;setkey f8 up;input /attack <t>')
  125.     send_command('bind %numpad3 input /ws "Evisceration" <t>')
  126.  
  127.     --send_command('bind ^f11 gs c magicevasion')
  128.  
  129.     select_default_macro_book()
  130. end
  131.  
  132. -- Called when this job file is unloaded (eg: job change)
  133. function user_unload()
  134.     send_command('unbind ^`')
  135.     send_command('unbind !-')
  136.     send_command('unbind %numpad1')
  137.     send_command('unbind %numpad3')
  138. end
  139.  
  140. -- Define sets and vars used by this job file.
  141. function init_gear_sets()
  142.     --------------------------------------
  143.     -- Special sets (required by rules)
  144.     --------------------------------------
  145.     usehasteknife=0;
  146.     maxth=0;
  147.  
  148.     --sets.ExtraRegen = {ring1="Paguroidea Ring"}
  149.     sets.Kiting = {feet="Trotter's Boots"}
  150.     sets.Haste = {main="Blurred Knife"}
  151.     sets.SilenceDagger = {main="Levante dagger"}
  152.     sets.Offhand = {sub="Shijo"}
  153.     sets.Mainhand = {main="Taming Sari"}
  154.     sets.TreasureHunter = {head="Skulker's Bonnet +1",hands="Plun. Armlets +1",waist="Chaac Belt",feet="Skulker's Poulaines +1"}
  155.     sets.noknifeTH = {hands="Plun. Armlets +1",waist="Chaac Belt",feet="Skulker's Poulaines +1"}
  156.     sets.TH = {main="Sandung"}
  157.     sets.THsub = {sub="Thief's Knife"}
  158.     sets.THset = {main="Sandung",sub="Thief's Knife",waist="Chaac Belt",hands="Plun. Armlets +1",feet="Skulker's Poulaines +1"}
  159.     sets.cpmode = {back="Mecisto. Mantle"}
  160.     sets.TaeonSTRDEX = {
  161.         head={ name="Taeon Chapeau", augments={'Accuracy+20 Attack+20','"Triple Atk."+2','STR+3 DEX+3',}},
  162.             body={ name="Taeon Tabard", augments={'Accuracy+20 Attack+20','"Triple Atk."+2','DEX+7',}},
  163.         hands={ name="Taeon Gloves", augments={'Accuracy+15 Attack+15','"Triple Atk."+2','STR+3 DEX+3',}},
  164.         legs={ name="Taeon Tights", augments={'Accuracy+18 Attack+18','"Triple Atk."+2','STR+6 DEX+6',}},
  165.         feet={ name="Taeon Boots", augments={'Accuracy+17 Attack+17','"Dual Wield"+5','STR+4 DEX+4',}},
  166.     }
  167.     --Max: acc 100 att 100 STR 35 DEX 35
  168.     --At: acc: 90 att 90 STR 16 DEX 23
  169.     --Missing: acc 11 att 11 STR 19 DEX 12
  170.     sets.TaeonDW = {
  171.         head={ name="Taeon Chapeau", augments={'Accuracy+15 Attack+15','"Dual Wield"+5','STR+4',}},
  172.         body={ name="Taeon Tabard", augments={'Accuracy+15 Attack+15','"Dual Wield"+5','STR+4 AGI+4',}},
  173.         hands={ name="Taeon Gloves", augments={'Accuracy+18 Attack+18','"Dual Wield"+4','STR+8',}},
  174.         legs={ name="Taeon Tights", augments={'Accuracy+17 Attack+17','"Dual Wield"+4','STR+2 DEX+2',}},
  175.         feet={ name="Taeon Boots", augments={'Accuracy+17 Attack+17','"Dual Wield"+5','STR+4 DEX+4',}},
  176.     }
  177.     --Max: acc 100 att 100 STR 35 DEX 35
  178.     --At: acc 82 att 82 STR 18 DEX 10
  179.     --Missing: acc 18 att 18 STR 17 DEX 25
  180.  
  181.     --sets.buff['Sneak Attack'] = set_combine(sets.engaged, {hands="Raider's Armlets +1"})
  182. --    {ammo="Qirmiz Tathlum",
  183. --        head="Pillager's Bonnet +1",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  184. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  185. --        back="Atheling Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  186.  
  187. --    sets.buff['Trick Attack'] = {ammo="Qirmiz Tathlum",
  188. --        head="Pillager's Bonnet +1",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  189. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Stormsoul Ring",ring2="Epona's Ring",
  190. --        back="Atheling Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  191.  
  192.     -- Actions we want to use to tag TH.
  193.     sets.precast.Step = sets.TreasureHunter
  194.     sets.precast.Flourish1 = sets.TreasureHunter
  195.     sets.precast.JA.Provoke = sets.TreasureHunter
  196.     sets.keep = {
  197.         left_ring="Warp Ring",
  198.         right_ring="Capacity Ring",
  199.     }
  200.     sets.keep2 = {
  201.         left_ring="Echad Ring",
  202.         right_ring="Trizek Ring",
  203.     }
  204.     sets.keep3= {
  205.         ammo="Toolbag (Shihe)",
  206.         left_ring="Shihei",
  207.         right_ring="Shinobi-Tabi",
  208.         head="Sanjaku-Tenugui",
  209.         body="Squid Sushi",
  210.         legs="Holy Water",
  211.         feet="Sole Sushi",
  212.         hands="Sole Sushi +1",
  213.         neck="Squid Sushi +1",
  214.         left_ear="Red Curry Bun",
  215.         right_ear="Red Curry Bun +1",
  216.         main="Remedy",
  217.         sub="Echo Drops"
  218.     }
  219.  
  220.  
  221.     --------------------------------------
  222.     -- Precast sets
  223.     --------------------------------------
  224.  
  225.     -- Precast sets to enhance JAs
  226.     sets.precast.JA['Collaborator'] = {head="Skulker's Bonnet +1"}
  227.     sets.precast.JA['Accomplice'] = {head="Skulker's Bonnet +1"}
  228.     sets.precast.JA['Flee'] = {feet="Pillager's Poulaines"}
  229.     sets.precast.JA['Hide'] = {body="Pillager's Vest"}
  230.     sets.precast.JA['Conspirator'] = {body="Skulker's Vest"}
  231.     --sets.precast.JA['Steal'] = {head="Pillager's Bonnet",hands="Rogues's Armlets",legs="Rogues's Culottes",feet="Rogues's Poulaines",neck="Pentalagus Charm"}
  232.     sets.precast.JA['Steal'] = {head="Pillager's Bonnet",neck="Pentalagus Charm",hands="Pill. Armlets +1",legs="Pill. Culottes +1",feet="Pillager's Poulaines"}
  233.     sets.precast.JA['Despoil'] = {legs="Skulker's Culottes",feet="Skulker's Poulaines +1"}
  234.     sets.precast.JA['Perfect Dodge'] = {hands="Plun. Armlets +1"}
  235.     --sets.precast.JA['Feint'] = {} -- {legs="Assassin's Culottes +2"}
  236.  
  237.     sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
  238.     sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
  239.  
  240.  
  241.     -- Waltz set (chr and vit)
  242.     --sets.precast.Waltz = {ammo="Sonia's Plectrum",
  243.     --    head="Whirlpool Mask",
  244.     --    body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Asklepian Ring",
  245.     --    back="Iximulew Cape",waist="Caudata Belt",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  246.  
  247.     -- Don't need any special gear for Healing Waltz.
  248. --    sets.precast.Waltz['Healing Waltz'] = {}
  249.  
  250.  
  251.     -- Fast cast sets for spells
  252.     --sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring",legs="Enif Cosciales"}
  253.     sets.precast.FC = {head="Haruspex Hat",body="Taeon tabard",left_ring="Prolix Ring",legs="Limbo Trousers"}
  254.  
  255.     --sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  256.  
  257.  
  258.     -- Ranged snapshot gear
  259.     --sets.precast.RA = {head="Aurore Beret",hands="Iuitl Wristbands",legs="Nahtirah Trousers",feet="Wurrukatte Boots"}
  260.  
  261.  
  262.     -- Weaponskill sets
  263.  
  264.     -- Default set for any weaponskill that isn't any more specifically defined
  265.     --sets.precast.WS = {ammo="Thew Bomblet",
  266.     --    head="Whirlpool Mask",neck=gear.ElementalGorget,ear1="Bladeborn Earring",ear2="Steelflash Earring",
  267.     --    body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  268.     --    back="Atheling Mantle",waist="Caudata Belt",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  269.     --sets.precast.WS.Acc = set_combine(sets.precast.WS, {ammo="Honed Tathlum", back="Letalis Mantle"})
  270.     --sets.precast.WS.Acc = set_combine(sets.precast.WS, {neck="Ej Necklace"})
  271.     sets.precast.WS = {
  272.         --hands="Pill. Armlets +1",
  273.         --legs={ name="Taeon Tights", augments={'Accuracy+25','"Triple Atk."+2','STR+6 DEX+6',}},
  274.         --legs="Pillager's Culottes +1",
  275.         legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  276.         neck="Love Torque",
  277.         ammo="Qirmiz Tathlum",
  278.         --neck="Pentalagus Charm",
  279.         --neck="Asperity Necklace",
  280.         --neck="Ej Necklace",
  281.         --neck="Moepapa Mantle",
  282.         --waist="Patentia Sash",
  283.         body="Rawhide Vest",
  284.         hands="Rawhide Gloves",
  285.         waist="Prosilio Belt +1",
  286.         left_ear="Jupiter's pearl",
  287.         right_ear="Jupiter's pearl",
  288.         --right_ear="Bladeborn Earring",
  289.         --left_ring="Tyrant's Ring",
  290.         --ring1="Epona's Ring",
  291.         --ring2="Oneiros Ring",
  292.         left_ring="Ramuh Ring",
  293.         right_ring="Ramuh Ring",
  294.         back="Canny Cape",
  295.         --back="Mecisto. Mantle",
  296.     }
  297.     sets.precast.WS = set_combine(sets.TaeonSTRDEX,sets.precast.WS)
  298.     sets.CP = {
  299.         back="Mecisto. Mantle",
  300.     }
  301.     --sets.precast.WS['Aeolian Edge'] = set_combine(sets.precast.WS, {ring1="Stormsoul Ring",legs="Nahtirah Trousers"})
  302.     sets.precast.WS['Evisceration'] = {
  303.         --hands="Pill. Armlets +1",
  304.         --legs={ name="Taeon Tights", augments={'Accuracy+25','"Triple Atk."+2','STR+6 DEX+6',}},
  305.         --legs="Pillager's Culottes +1",
  306.         neck="Love Torque",
  307.         ammo="Qirmiz Tathlum",
  308.         --neck="Pentalagus Charm",
  309.         --neck="Asperity Necklace",
  310.         --neck="Ej Necklace",
  311.         --neck="Moepapa Mantle",
  312.         --waist="Patentia Sash",
  313.         body="Rawhide Vest",
  314.         hands="Rawhide Gloves",
  315.         waist="Shadow Belt",
  316.         legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  317.         left_ear="Steelflash Earring",
  318.         right_ear="Bladeborn Earring",
  319.         --right_ear="Bladeborn Earring",
  320.         --left_ring="Tyrant's Ring",
  321.         ring1="Epona's Ring",
  322.         ring2="Oneiros Ring",
  323.         --back="Canny Cape",
  324.         back="Mecisto. Mantle",
  325.     }
  326.     sets.precast.WS['Evisceration'] = set_combine(sets.TaeonSTRDEX,sets.precast.WS['Evisceration'])
  327.     sets.precast.WS['Aeolian Edge'] = {
  328.         --ammo="Jukukik Feather",
  329.         --range="Wingcutter +1",
  330.             --head="Highwing Helm",
  331.         --neck="Stoicheion Medal",
  332.         neck="Satlada Necklace",
  333.         ear1="Friomisi Earring",
  334.         --ear2="Moonshade Earring",
  335.         --body="Lapidary tunic",
  336.         hands="Pursuer's Cuffs",
  337.         body="Samnuha Coat",
  338.         --ring1="Acumen Ring",
  339.         --ring2="Demon's Ring",
  340.         back="Toro Cape",
  341.         ammo="Grenade Core",
  342.         --waist=gear.ElementalBelt,
  343.         --legs="Shneddick Tights +1",
  344.         --feet="Wayfarer Clogs"
  345.         }
  346.     sets.precast.WS['Aeolian Edge'] = set_combine(sets.TaeonSTRDEX,sets.precast.WS['Aeolian Edge'])
  347. --    sets.precast.WS['Aeolian Edge'].TH = set_combine(sets.precast.WS['Aeolian Edge'], sets.TreasureHunter)
  348.  
  349.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  350.     --sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {ring1="Stormsoul Ring",legs="Nahtirah Trousers"})
  351.     --sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  352.     --sets.precast.WS['Exenterator'].Mod = set_combine(sets.precast.WS['Exenterator'], {head="Felistris Mask",waist=gear.ElementalBelt})
  353.     --sets.precast.WS['Exenterator'].SA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
  354.     --sets.precast.WS['Exenterator'].TA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
  355.     --sets.precast.WS['Exenterator'].SATA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
  356.  
  357. --    sets.precast.WS['Dancing Edge'] = set_combine(sets.precast.WS, {})
  358. --    sets.precast.WS['Dancing Edge'].Acc = set_combine(sets.precast.WS['Dancing Edge'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  359. --    sets.precast.WS['Dancing Edge'].Mod = set_combine(sets.precast.WS['Dancing Edge'], {waist=gear.ElementalBelt})
  360. --    sets.precast.WS['Dancing Edge'].SA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
  361. --    sets.precast.WS['Dancing Edge'].TA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
  362. --    sets.precast.WS['Dancing Edge'].SATA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
  363.  
  364. --    sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {ammo="Qirmiz Tathlum",
  365. --        head="Uk'uxkaj Cap",neck="Rancor Collar",ear1="Brutal Earring",ear2="Moonshade Earring"})
  366. --    sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  367. --    sets.precast.WS['Evisceration'].Mod = set_combine(sets.precast.WS['Evisceration'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  368. --    sets.precast.WS['Evisceration'].SA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  369. --    sets.precast.WS['Evisceration'].TA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  370. --    sets.precast.WS['Evisceration'].SATA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  371.     --sets.precast.WS['Evisceration'] = set_combine(sets.engaged,{waist="Shadow Belt"})
  372. --
  373. --    sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
  374. --    sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {ammo="Honed Tathlum", back="Letalis Mantle"})
  375. --    sets.precast.WS["Rudra's Storm"].Mod = set_combine(sets.precast.WS["Rudra's Storm"], {back="Kayapa Cape",waist=gear.ElementalBelt})
  376. --    sets.precast.WS["Rudra's Storm"].SA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Qirmiz Tathlum",
  377. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  378. --    sets.precast.WS["Rudra's Storm"].TA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Qirmiz Tathlum",
  379. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  380. --    sets.precast.WS["Rudra's Storm"].SATA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Qirmiz Tathlum",
  381. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  382. --
  383. --    sets.precast.WS["Shark Bite"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
  384. --    sets.precast.WS['Shark Bite'].Acc = set_combine(sets.precast.WS['Shark Bite'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  385. --    sets.precast.WS['Shark Bite'].Mod = set_combine(sets.precast.WS['Shark Bite'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  386. --    sets.precast.WS['Shark Bite'].SA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
  387. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  388. --    sets.precast.WS['Shark Bite'].TA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
  389. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  390. --    sets.precast.WS['Shark Bite'].SATA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
  391. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  392. --
  393. --    sets.precast.WS['Mandalic Stab'] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
  394. --    sets.precast.WS['Mandalic Stab'].Acc = set_combine(sets.precast.WS['Mandalic Stab'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  395. --    sets.precast.WS['Mandalic Stab'].Mod = set_combine(sets.precast.WS['Mandalic Stab'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  396. --    sets.precast.WS['Mandalic Stab'].SA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
  397. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  398. --    sets.precast.WS['Mandalic Stab'].TA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
  399. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  400. --    sets.precast.WS['Mandalic Stab'].SATA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
  401. --        body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  402. --
  403. --    sets.precast.WS['Aeolian Edge'] = {ammo="Jukukik Feather",
  404. --        head="Wayfarer Circlet",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Moonshade Earring",
  405. --        body="Wayfarer Robe",hands="Pillager's Armlets +1",ring1="Acumen Ring",ring2="Demon's Ring",
  406. --        back="Toro Cape",waist=gear.ElementalBelt,legs="Shneddick Tights +1",feet="Wayfarer Clogs"}
  407. --
  408. --    sets.precast.WS['Aeolian Edge'].TH = set_combine(sets.precast.WS['Aeolian Edge'], sets.TreasureHunter)
  409.  
  410.  
  411.     --------------------------------------
  412.     -- Midcast sets
  413.     --------------------------------------
  414.  
  415. --    sets.midcast.FastRecast = {
  416. --        head="Whirlpool Mask",ear2="Loquacious Earring",
  417. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",
  418. --        back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
  419.  
  420.     -- Specific spells
  421. --    sets.midcast.Utsusemi = {
  422. --        head="Whirlpool Mask",neck="Ej Necklace",ear2="Loquacious Earring",
  423. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",
  424. --        back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
  425.  
  426.     -- Ranged gear
  427. --    sets.midcast.RA = {
  428. --        head="Whirlpool Mask",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
  429. --        body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Hajduk Ring",
  430. --        back="Libeccio Mantle",waist="Aquiline Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  431.  
  432. --    sets.midcast.RA.Acc = {
  433. --        head="Pillager's Bonnet +1",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
  434. --        body="Iuitl Vest",hands="Buremte Gloves",ring1="Beeline Ring",ring2="Hajduk Ring",
  435. --        back="Libeccio Mantle",waist="Aquiline Belt",legs="Thurandaut Tights +1",feet="Pillager's Poulaines +1"}
  436.  
  437.  
  438.     --------------------------------------
  439.     -- Idle/resting/defense sets
  440.     --------------------------------------
  441.  
  442.     -- Resting sets
  443. --    sets.resting = {head="Ocelomeh Headpiece",neck="Wiglen Gorget",
  444. --        ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  445. --     sets.resting = set_combine(sets.idle, sets.ExtraRegen)
  446.      sets.rangetype = {}
  447.      sets.rangetype.None = {
  448.         --range="",
  449.         --ammo="Ginsen",
  450.      }
  451.      sets.rangetype.Throwing = {
  452.          range="Wingcutter +1",
  453.          ammo=""
  454.      }
  455.      sets.rangetype.Throwing2 = {
  456.          range="Albin Bane",
  457.          ammo=""
  458.      }
  459.      sets.rangetype.Crossbow = {
  460.          range="One-eyed",
  461.          ammo="Bloody Bolt",
  462.      }
  463.      sets.resting={
  464.       --   main="Shijo",
  465.       --  sub="Jugo Kurki +1",
  466.       --   range="Snakeeye",
  467.          head="Oce. Headpiece +1",
  468. --       body="Taeon tabard",
  469. --       hands="Taeon Gloves",
  470. --       legs="Taeon tights",
  471.          feet="Jute Boots +1",
  472.          neck="Wiglen Gorget",
  473.          waist="Windbuffet Belt +1",
  474.          left_ear="Steelflash Earring",
  475.          right_ear="Bladeborn Earring",
  476.          left_ring="Sheltered Ring",
  477.          right_ring="Paguroidea Ring",
  478.          back="Repulse Mantle"
  479.          --back="Engulfer Cape +1"
  480.          --back="Canny Cape",
  481.          --back="Mecistopins mantle",
  482.      }
  483.      
  484. --  sets.resting ={
  485. --      main="Sandung",
  486. --      sub="Eminent Dagger",
  487. --      range="Snakeeye",
  488. --      head="Ocelo. Headpiece",
  489. --      body="Taeon tabard",
  490. --      hands="Taeon Gloves",
  491. --      legs="Taeon tights",
  492. --      feet="Jute Boots +1",
  493. --      neck="Orochi Nodowa",
  494. --      waist="Patentia Sash",
  495. --      left_ear="Volley earring",
  496. --      right_ear="Kemas Earring",
  497. --      left_ring="Epona's Ring",
  498. --      right_ring="Warp Ring",
  499. --      back="Canny Cape",
  500. --  }
  501.  
  502.     -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  503.  
  504. --    sets.idle = {ammo="Thew Bomblet",
  505. --        head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  506. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  507. --        back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
  508.     sets.idle ={
  509.         main="Taming Sari",
  510.         --sub="Jugo Kukri +1",
  511.         --sub="Nibiru Knife",
  512.         sub="Shijo",
  513.         ammo="Ginsen",
  514.         --range="Raider's Bmrng.",
  515.         --head="Oce. Headpiece +1",
  516.         head="Skulker's Bonnet +1",
  517.         legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  518.         feet="Jute Boots +1",
  519.         neck="Wiglen Gorget",
  520.         --waist="Windbuffet Belt +1",
  521.         waist="Flume Belt +1",
  522.         left_ear="Allegro Earring",
  523.         right_ear="Infused Earring",
  524.         --left_ring="Sheltered Ring",
  525.         left_ring="Defending Ring",
  526.         right_ring="Paguroidea Ring",
  527.         back="Repulse Mantle"
  528.         --back="Engulfer Cape +1"
  529.         --back="Canny Cape",
  530.         --back="Mecistopins mantle",
  531.     }
  532.     sets.idle = set_combine(sets.TaeonSTRDEX,sets.idle)
  533.     sets.idle.Regen = {
  534.         left_ring="Sheltered Ring",
  535.         right_ring="Paguroidea Ring",
  536.         right_ear="Infused Earring",
  537.         head="Oce. Headpiece +1",
  538.         neck="Wiglen Gorget",
  539.     }
  540.     sets.idlesave = copy_set(sets.idle)
  541. --  {
  542. --      main="Shijo",
  543. --      sub="Jugo Kukri +1",
  544. --      --range="Raider's Bmrng.",
  545. --      head="Oce. Headpiece +1",
  546. --            body={ name="Taeon Tabard", augments={'Accuracy+20 Attack+20','"Triple Atk."+2','DEX+7',}},
  547. --      hands={ name="Taeon Gloves", augments={'Accuracy+25','"Triple Atk."+2','STR+3 DEX+3',}},
  548. --      legs={ name="Taeon Tights", augments={'Accuracy+25','"Triple Atk."+2','STR+6 DEX+6',}},
  549. --      feet="Jute Boots +1",
  550. --      neck="Wiglen Gorget",
  551. --      waist="Windbuffet Belt +1",
  552. --      left_ear="Steelflash Earring",
  553. --      right_ear="Bladeborn Earring",
  554. --      left_ring="Sheltered Ring",
  555. --      right_ring="Paguroidea Ring",
  556. --      back="Canny Cape",
  557. --      --back="Mecistopins mantle",
  558. --  }
  559.  
  560. --    sets.idle.Town = {main="Izhiikoh", sub="Sabebus",ammo="Thew Bomblet",
  561. --        head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  562. --        body="Pillager's Vest +1",hands="Pill. Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  563. --        back="Shadow Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
  564.  
  565. --    sets.idle.Weak = {ammo="Thew Bomblet",
  566. --        head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  567. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  568. --        back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
  569.  
  570.  
  571.     -- Defense sets
  572.  
  573. --    sets.defense.Evasion = {
  574. --        head="Pillager's Bonnet +1",neck="Ej Necklace",
  575. --        body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Beeline Ring",
  576. --        back="Canny Cape",waist="Flume Belt",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
  577. --
  578. --    sets.defense.PDT = {ammo="Iron Gobbet",
  579. --        head="Pillager's Bonnet +1",neck="Twilight Torque",
  580. --        body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2=gear.DarkRing.physical,
  581. --        back="Iximulew Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
  582. --
  583. --    sets.defense.MDT = {ammo="Demonry Stone",
  584. --        head="Pillager's Bonnet +1",neck="Twilight Torque",
  585. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Shadow Ring",
  586. --        back="Engulfer Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
  587. --
  588.       sets.runaway = {
  589.           main="",
  590.           sub="Deliverance",--4
  591.           neck="Inq. Bead Necklace",
  592.           right_ear="Infused Earring",
  593.           right_ring="Gelatinous Ring",--6
  594.           left_ring="Defending Ring",--10
  595.           waist="Flume Belt +1",--4
  596.           feet="Areion Boots",
  597.           back="Repulse Mantle"
  598.       }
  599.       sets.runaway2 = {
  600.           main="",
  601.           sub="Deliverance",--4
  602.           --neck="Inq. Bead Necklace",
  603.           neck="Wiglen Gorget",
  604.           right_ear="Infused Earring",
  605.           right_ring="Gelatinous Ring",--6
  606.           left_ring="Defending Ring",--10
  607.           waist="Flume Belt +1",--4
  608.           feet="Jute Boots +1",
  609.           back="Repulse Mantle"
  610.       }
  611.       sets.damagetaken = {}
  612.       sets.damagetaken.None = {
  613.       }
  614.       sets.damagetaken.DTLight = {
  615.           --right_ring="Gelatinous Ring",
  616.           left_ring="Defending Ring",
  617.           --waist="Flume Belt +1",
  618.           --back="Repulse Mantle"
  619.           back="Mollusca Mantle"
  620.       }
  621.       sets.damagetaken.DT = {
  622.           right_ring="Gelatinous Ring",--6
  623.           left_ring="Defending Ring",--10
  624.           --neck="Inq. Bead Necklace",
  625.           --neck="Wiglen Gorget",--6
  626.           waist="Flume Belt +1",--4
  627.           back="Mollusca Mantle"--5
  628.           --back="Engulfer Cape +1"
  629.       }
  630.       sets.damagetaken.PDT = {
  631.       }
  632.       sets.damagetaken.MDT = {
  633.       }
  634.       sets.damagetaken.MagicEvasion = {
  635.           neck="Inq. Bead Necklace",
  636.           waist="Flume Belt +1",
  637.           feet="Jute Boots +1",
  638.           left_ring="Defending Ring",
  639.           right_ring="Vengeful Ring",
  640.           --back="Mollusca Mantle"
  641.           back="Engulfer Cape +1"
  642.       }
  643.    
  644.  
  645.     --------------------------------------
  646.     -- Melee sets
  647.     --------------------------------------
  648. --Kroyipi
  649.     -- Normal melee group
  650.     --sets.engaged= sets.TaeonSTRDEX
  651. --Caphaste: dw5
  652. --Cape 4
  653. --feet 4 + 5
  654.     sets.engaged={
  655.         --main="Shijo",
  656.         main="Taming Sari",
  657.         --sub="Jugo Kukri +1",
  658.         --sub="Nibiru Knife",
  659.         sub="Shijo",
  660.         ammo="Ginsen",
  661. --      range="Raider's Bmrng.",
  662.         --range="",
  663.         --ammo="Qirmiz Tathlum",
  664.         --ammo="Ginsen",
  665.         head="Skulker's Bonnet +1",
  666.         legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  667.         neck="Asperity Necklace",
  668.         --neck="Ej Necklace",
  669.         waist="Windbuffet Belt +1",
  670.         --waist="Patentia Sash",
  671.         left_ear="Steelflash Earring",
  672.         right_ear="Bladeborn Earring",
  673.         --left_ring="Tyrant's Ring",
  674.         left_ring="Epona's Ring",
  675.         right_ring="Rajas Ring",
  676.         back="Lupine Cape",
  677.         --back="Mecisto. Mantle",
  678.     }
  679.     sets.engaged = set_combine(sets.TaeonSTRDEX,sets.engaged)
  680.     sets.base= copy_set(sets.engaged)
  681.     sets.evasion = {
  682.         head="Imp. Wing Hairpin", --69 agi 33
  683.         right_ear="Infused Earring", --10 agi 4
  684.         left_ear="Allegro Earring", --10 agi 4
  685.         --rings 16
  686.         right_ring="Vengeful Ring", --9
  687.         neck="Ej necklace",--neck 15
  688.         waist="Svelt. Gouriz +1", --10 agi 10
  689.         back="Canny Cape", --15 agi 6
  690.         body="karmesin vest", --62 agi 29
  691.         --
  692.     }
  693.     sets.evasion = set_combine(sets.base,sets.evasion)
  694.     --sets.base= sets.engaged
  695. --  { main="Shijo",
  696. --      sub="Jugo Kukri +1",
  697. ----        range="Raider's Bmrng.",
  698. --      range="",
  699. --      ammo="Qirmiz Tathlum",
  700. ----        head="Taeon chapeau",
  701. ----        body="Taeon tabard",
  702. ----        hands="Taeon Gloves",
  703. ----        legs="Taeon tights",
  704. ----        feet="Taeon Boots",
  705. --      head={ name="Taeon Chapeau", augments={'Accuracy+20 Attack+20','"Triple Atk."+2','STR+3 DEX+3',}},
  706. --            body={ name="Taeon Tabard", augments={'Accuracy+20 Attack+20','"Triple Atk."+2','DEX+7',}},
  707. --      hands={ name="Taeon Gloves", augments={'Accuracy+25','"Triple Atk."+2','STR+3 DEX+3',}},
  708. --      legs={ name="Taeon Tights", augments={'Accuracy+25','"Triple Atk."+2','STR+6 DEX+6',}},
  709. --      feet={ name="Taeon Boots", augments={'Accuracy+17 Attack+17','"Dual Wield"+5','STR+4 DEX+4',}},
  710. --      neck="Asperity Necklace",
  711. --      --neck="Ej Necklace",
  712. --      waist="Windbuffet Belt +1",
  713. --      --waist="Patentia Sash",
  714. --      left_ear="Steelflash Earring",
  715. --      right_ear="Bladeborn Earring",
  716. --      --left_ring="Tyrant's Ring",
  717. --      ring2="Epona's Ring",
  718. --      ring1="Rajas Ring",
  719. --      back="Canny Cape",
  720. --      --back="Mecisto. Mantle",
  721. --  }
  722.    
  723.     -- earrings 7
  724.     -- taeon 23 + 4  = 27
  725.     -- cape 4 --38
  726.     -- sash 5 --43
  727.     -- missing 5
  728.     -- raiders 3 XOff
  729.     -- blurred 6 XOff
  730.    
  731. --Dw4:
  732. --No haste magic: dw43
  733. --Haste samba: dw39
  734. --Haste1: dw37
  735. --Haste2: dw26
  736. --Caphaste: dw5
  737. --Taeon 27
  738. --Sash 5
  739. --Earrings 7
  740. --Cape 4
  741.    
  742.     sets.hastemode = {}
  743.     sets.hastemode.NoHaste={ -- need 43, at 43
  744.         --main="Blurred Knife",
  745.         --range="Raider's Bmrng.",
  746.         waist="Patentia Sash",
  747.         --waist="Windbuffet Belt +1",
  748.         hands="Floral Gauntlets",
  749.         left_ear="Dudgeon Earring",
  750.         right_ear="Heartseeker Earring",
  751.         back="Canny Cape",
  752.     }
  753.     sets.hastemode.HasteI={ -- need 37, at 38
  754.         --main="Blurred Knife",
  755.         --range="Raider's Bmrng.",
  756.         --waist="Patentia Sash",
  757.         hands="Floral Gauntlets",
  758.         waist="Windbuffet Belt +1",
  759.         left_ear="Dudgeon Earring",
  760.         right_ear="Heartseeker Earring",
  761.         back="Canny Cape",
  762.     }
  763.     sets.hastemode.HasteII={ -- need 26, at 26
  764.         --main="Blurred Knife",
  765.         --range="Raider's Bmrng.",
  766.         --ammo="",
  767.         --ammo="Ginsen",
  768.         --neck="Asperity Necklace",
  769.         --neck="Ej Necklace",
  770.         --waist="Patentia Sash",
  771.         hands="Floral Gauntlets",
  772.         head="Skulker's Bonnet +1",
  773.         waist="Windbuffet Belt +1",
  774.         left_ear="Dudgeon Earring",
  775.         right_ear="Heartseeker Earring",
  776.         back="Canny Cape",
  777.     }
  778.     sets.hastemode.NoHaste=set_combine(sets.TaeonDW,sets.hastemode.NoHaste)
  779.     sets.hastemode.HasteI=set_combine(sets.TaeonDW,sets.hastemode.HasteI)
  780.     sets.hastemode.HasteII=set_combine(sets.TaeonDW,sets.hastemode.HasteII)
  781.     sets.hastemode.Capped=set_combine(sets.engaged,{})
  782.     sets.hasteknife={
  783.         main="Blurred Knife",
  784.     }
  785.     sets.aoedagger={
  786.         main="Levante Dagger",
  787.     }
  788.    
  789.     sets.engaged.Acc={
  790.         range="",
  791.         ammo="Honed Tathlum",
  792.         head="Skulker's Bonnet +1",
  793.         neck="Ej Necklace",
  794.         left_ring="Epona's Ring",
  795.         right_ring="Rajas Ring",
  796.         waist="Olseni Belt",
  797.         back="Lupine Cape",
  798.     }
  799.     sets.engaged.Acc=set_combine(sets.TaeonSTRDEX,sets.engaged.Acc)
  800.     sets.engaged.AccExtreme={
  801.         range="",
  802.         ammo="Honed Tathlum",
  803.         head="Skulker's Bonnet +1",
  804.         neck="Ej Necklace",
  805.         waist="Olseni Belt",
  806.         left_ear="Steelflash Earring",
  807.         right_ear="Zennaroi Earring",
  808.         left_ring="Ramuh Ring",
  809.         right_ring="Ramuh Ring",
  810.         hands="Floral Gauntlets",
  811.         back="Lupine Cape",
  812.     }
  813.     sets.engaged.AccExtreme=set_combine(sets.TaeonSTRDEX,sets.engaged.AccExtreme)
  814. --    sets.engaged.Acc = {ammo="Honed Tathlum",
  815. --        head="Whirlpool Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  816. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  817. --        back="Letalis Mantle",waist="Hurch'lan Sash",legs="Manibozho Brais",feet="Qaaxo Leggings"}
  818.        
  819.     -- Mod set for trivial mobs (Skadi+1)
  820. --    sets.engaged.Mod = {ammo="Thew Bomblet",
  821. --        head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  822. --        body="Skadi's Cuirie +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  823. --        back="Atheling Mantle",waist="Patentia Sash",legs=gear.AugQuiahuiz,feet="Plunderer's Poulaines +1"}
  824.  
  825.     -- Mod set for trivial mobs (Thaumas)
  826. --    sets.engaged.Mod2 = {ammo="Thew Bomblet",
  827. --        head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  828. --        body="Thaumas Coat",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
  829. --        back="Atheling Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  830. --
  831. --    sets.engaged.Evasion = {ammo="Thew Bomblet",
  832. --        head="Felistris Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  833. --        body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  834. --        back="Canny Cape",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
  835. --    sets.engaged.Acc.Evasion = {ammo="Honed Tathlum",
  836. --        head="Whirlpool Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  837. --        body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
  838. --        back="Canny Cape",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
  839. --
  840. --    sets.engaged.PDT = {ammo="Thew Bomblet",
  841. --        head="Felistris Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  842. --        body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  843. --        back="Iximulew Cape",waist="Patentia Sash",legs="Iuitl Tights",feet="Qaaxo Leggings"}
  844. --    sets.engaged.Acc.PDT = {ammo="Honed Tathlum",
  845. --        head="Whirlpool Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  846. --        body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
  847. --        back="Canny Cape",waist="Hurch'lan Sash",legs="Iuitl Tights",feet="Qaaxo Leggings"}
  848.  
  849. end
  850.  
  851.  
  852. -------------------------------------------------------------------------------------------------------------------
  853. -- Job-specific hooks for standard casting events.
  854. -------------------------------------------------------------------------------------------------------------------
  855.  
  856. -- Run after the general precast() is done.
  857. function job_post_precast(spell, action, spellMap, eventArgs)
  858.     if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then
  859.         equip(sets.TreasureHunter)
  860.     elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
  861.         if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
  862.             equip(sets.TreasureHunter)
  863.         end
  864.     end
  865. end
  866.  
  867. -- Run after the general midcast() set is constructed.
  868. function job_post_midcast(spell, action, spellMap, eventArgs)
  869.     if state.TreasureMode.value ~= 'None' and spell.action_type == 'Ranged Attack' then
  870.         equip(sets.TreasureHunter)
  871.     end
  872. end
  873.  
  874. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  875. function job_aftercast(spell, action, spellMap, eventArgs)
  876.     -- Weaponskills wipe SATA/Feint.  Turn those state vars off before default gearing is attempted.
  877.     if spell.type == 'WeaponSkill' and not spell.interrupted then
  878.         state.Buff['Sneak Attack'] = false
  879.         state.Buff['Trick Attack'] = false
  880.         state.Buff['Feint'] = false
  881.     end
  882. end
  883.  
  884. -- Called after the default aftercast handling is complete.
  885. function job_post_aftercast(spell, action, spellMap, eventArgs)
  886.     -- If Feint is active, put that gear set on on top of regular gear.
  887.     -- This includes overlaying SATA gear.
  888.     check_buff('Feint', eventArgs)
  889. end
  890.  
  891. -------------------------------------------------------------------------------------------------------------------
  892. -- Job-specific hooks for non-casting events.
  893. -------------------------------------------------------------------------------------------------------------------
  894.  
  895. -- Called when a player gains or loses a buff.
  896. -- buff == buff gained or lost
  897. -- gain == true if the buff was gained, false if it was lost.
  898. function job_buff_change(buff, gain)
  899.     if state.Buff[buff] ~= nil then
  900.         if S{'haste','march','geo-haste','indi-haste','embrava','haste samba','aftermath'}:contains(buff:lower()) then
  901.             check_haste_level()
  902.             --handle_equipping_gear(player.status)
  903.         end
  904.         if not midaction() then
  905.  
  906.             handle_equipping_gear(player.status)
  907.         end
  908.     end
  909. end
  910.  
  911.  
  912. -------------------------------------------------------------------------------------------------------------------
  913. -- User code that supplements standard library decisions.
  914. -------------------------------------------------------------------------------------------------------------------
  915.  
  916. function get_custom_wsmode(spell, spellMap, defaut_wsmode)
  917.     local wsmode
  918.  
  919.     if state.Buff['Sneak Attack'] then
  920.         wsmode = 'SA'
  921.     end
  922.     if state.Buff['Trick Attack'] then
  923.         wsmode = (wsmode or '') .. 'TA'
  924.     end
  925.     return wsmode
  926. end
  927.  
  928.  
  929. -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
  930. function job_handle_equipping_gear(playerStatus, eventArgs)
  931.     -- Check that ranged slot is locked, if necessary
  932.     check_range_lock()
  933.  
  934.     -- Check for SATA when equipping gear.  If either is active, equip
  935.     -- that gear specifically, and block equipping default gear.
  936.     check_buff('Sneak Attack', eventArgs)
  937.     check_buff('Trick Attack', eventArgs)
  938.     check_buff('Haste', eventArgs)
  939. end
  940.  
  941. function print_r (t, name, indent)
  942.   local tableList = {}
  943.   function table_r (t, name, indent, full)
  944.     local id = not full and name
  945.         or type(name)~="number" and tostring(name) or '['..name..']'
  946.     local tag = indent .. id .. ' = '
  947.     local out = {}  -- result
  948.     if type(t) == "table" then
  949.       if tableList[t] ~= nil then table.insert(out, tag .. '{} -- ' .. tableList[t] .. ' (self reference)')
  950.       else
  951.         tableList[t]= full and (full .. '.' .. id) or id
  952.         if next(t) then -- Table not empty
  953.           table.insert(out, tag .. '{')
  954.           for key,value in pairs(t) do
  955.             table.insert(out,table_r(value,key,indent .. '|  ',tableList[t]))
  956.           end
  957.           table.insert(out,indent .. '}')
  958.         else table.insert(out,tag .. '{}') end
  959.       end
  960.     else
  961.       local val = type(t)~="number" and type(t)~="boolean" and '"'..tostring(t)..'"' or tostring(t)
  962.       table.insert(out, tag .. val)
  963.     end
  964.     return table.concat(out, '\n')
  965.   end
  966.   return table_r(t,name or 'Value',indent or '')
  967. end
  968.  
  969. function pr (t, name)
  970.   print(print_r(t,name))
  971. end
  972.  
  973. function check_haste_level()
  974.     --pr(buffactive)
  975.     --33 is haste 1 and haste 2 580 is indi and geo haste
  976.     hastelevel = 0
  977.     if buffactive[33] and hastetype==1 then
  978.         hastelevel=hastelevel+15
  979.     elseif buffactive[33] and hastetype==2 then
  980.         hastelevel=hastelevel+30
  981.     end
  982.     if buffactive.march ==2 then --assuming song +3 at least
  983.         hastelevel=hastelevel+25
  984.     elseif buffactive.march ==1 then
  985.         hastelevel=hastelevel+15
  986.     end
  987.     if buffactive[580] then --assuming non idris
  988.         hastelevel=hastelevel+33
  989.     end
  990.     --add_to_chat(122,'Haste number '..hastelevel)
  991.  
  992.     if hastelevel == 0 then
  993.         add_to_chat(122,'Haste level set to NoHaste')
  994.         state.hastemode:set('NoHaste')
  995.     elseif hastelevel >= 40 then
  996.         add_to_chat(122,'Haste level set to Capped')
  997.         state.hastemode:set('Capped')
  998.     elseif hastelevel >= 25 then
  999.         add_to_chat(122,'Haste level set to HasteII')
  1000.         state.hastemode:set('HasteII')
  1001.     elseif hastelevel >= 15 then
  1002.         add_to_chat(122,'Haste level set to HasteI')
  1003.         state.hastemode:set('HasteI')
  1004.     end
  1005. end
  1006.  
  1007. function customize_idle_set(idleSet)
  1008.     if player.hpp < 80 then
  1009.         idleSet = set_combine(idleSet, sets.ExtraRegen)
  1010.     end
  1011.     --add_to_chat(122,'Idle Set ')
  1012.    
  1013.     if state.rangetype.value ~= "None" then idleSet = set_combine(idleSet,sets.rangetype[state.rangetype.value]) end
  1014.     if state.idlemode.value ~= "Normal" then idleSet = set_combine(idleSet,sets.idle[state.idlemode.value]) end
  1015.     if state.TreasureMode.value == 'Fulltime' then
  1016.         idleSet = set_combine(idleSet, sets.TreasureHunter)
  1017.     end
  1018.     if state.damagetaken.value ~= "None" then idleSet = set_combine(idleSet,sets.damagetaken[state.damagetaken.value]) end
  1019.     if state.runaway.current == 'on' then idleSet = set_combine(idleSet,sets.runaway) end
  1020.     if state.runaway2.current == 'on' then idleSet = set_combine(idleSet,sets.runaway2) end
  1021.     if state.hasteknife.current == 'on' then idleSet = set_combine(idleSet,sets.hasteknife) end
  1022.     if state.aoedagger.current == 'on' then idleSet = set_combine(idleSet,sets.aoedagger) end
  1023.     if state.cpmode.current == 'on' then idleSet = set_combine(idleSet,sets.cpmode) end
  1024.  
  1025.     return idleSet
  1026. end
  1027.  
  1028. function customize_melee_set(meleeSet)
  1029.     meleeSet = set_combine(meleeSet,sets.hastemode[state.hastemode.value])
  1030.     if state.rangetype.value ~= "None" then meleeSet = set_combine(meleeSet,sets.rangetype[state.rangetype.value]) end
  1031.     if rangeswap then
  1032.         rangeswap=0
  1033.         equip(sets.rangetype[state.rangetype.value])
  1034.         if state.rangetype.value == "None" then
  1035.             enable('ranged','ammo')
  1036.         else
  1037.             disable('ranged','ammo')
  1038.         end
  1039.     end
  1040.     if state.OffenseMode.current ~= 'Normal' then meleeSet = set_combine(meleeSet,sets.engaged[state.OffenseMode.current]) end
  1041.     if state.TreasureMode.value == 'Fulltime' then
  1042.         meleeSet = set_combine(meleeSet, sets.TreasureHunter)
  1043.     end
  1044.     if state.damagetaken.value ~= "None" then meleeSet = set_combine(meleeSet,sets.damagetaken[state.damagetaken.value]) end
  1045.     if state.runaway.current == 'on' then meleeSet = set_combine(meleeSet,sets.runaway) end
  1046.     if state.runaway2.current == 'on' then meleeSet = set_combine(meleeSet,sets.runaway2) end
  1047.     if state.hasteknife.current == 'on' then meleeSet = set_combine(meleeSet,sets.hasteknife) end
  1048.     if state.aoedagger.current == 'on' then meleeSet = set_combine(meleeSet,sets.aoedagger) end
  1049.     if state.cpmode.current == 'on' then meleeSet = set_combine(meleeSet,sets.cpmode) end
  1050.     --check_range_lock()
  1051.  
  1052.     return meleeSet
  1053. end
  1054. function customize_resting_set(restingSet)
  1055.     if state.cpmode.current == 'on' then restingSet = set_combine(restingSet,sets.cpmode) end
  1056.     return restingSet
  1057. end
  1058.  
  1059.  
  1060. -- Called by the 'update' self-command.
  1061. function job_update(cmdParams, eventArgs)
  1062.     th_update(cmdParams, eventArgs)
  1063. end
  1064. dw = 0;
  1065. dtmode = 0;
  1066. accmode = 0;
  1067. runaway = 0;
  1068. rangeswap = 0;
  1069. function job_self_command(cmdParams, eventArgs)
  1070.     command = cmdParams[1]:lower()
  1071.     if command=='hastetype' then
  1072.         if hastetype == 1 then hastetype=2
  1073.         else hastetype = 1 end
  1074.         add_to_chat(122,'Haste '..hastetype)
  1075.         check_haste_level()
  1076.         handle_equipping_gear(player.status)
  1077.     elseif command=='rangetype' then
  1078.         enable('range','ammo')
  1079.         rangeswap=1
  1080.         send_command('gs c cycle rangetype')
  1081.     end
  1082. end
  1083.  
  1084. -- Function to display the current relevant user state when doing an update.
  1085. -- Return true if display was handled, and you don't want the default info shown.
  1086. function display_current_job_state(eventArgs)
  1087.     local msg = 'Melee'
  1088.    
  1089.     if state.CombatForm.has_value then
  1090.         msg = msg .. ' (' .. state.CombatForm.value .. ')'
  1091.     end
  1092.    
  1093.     msg = msg .. ': '
  1094.    
  1095.     msg = msg .. state.OffenseMode.value
  1096.     if state.HybridMode.value ~= 'Normal' then
  1097.         msg = msg .. '/' .. state.HybridMode.value
  1098.     end
  1099.     msg = msg .. ', WS: ' .. state.WeaponskillMode.value
  1100.    
  1101.     if state.DefenseMode.value ~= 'None' then
  1102.         msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  1103.     end
  1104.    
  1105.     if state.Kiting.value == true then
  1106.         msg = msg .. ', Kiting'
  1107.     end
  1108.  
  1109.     if state.PCTargetMode.value ~= 'default' then
  1110.         msg = msg .. ', Target PC: '..state.PCTargetMode.value
  1111.     end
  1112.  
  1113.     if state.SelectNPCTargets.value == true then
  1114.         msg = msg .. ', Target NPCs'
  1115.     end
  1116.    
  1117.     msg = msg .. ', TH: ' .. state.TreasureMode.value
  1118.  
  1119.     add_to_chat(122, msg)
  1120.  
  1121.     eventArgs.handled = true
  1122. end
  1123.  
  1124. -------------------------------------------------------------------------------------------------------------------
  1125. -- Utility functions specific to this job.
  1126. -------------------------------------------------------------------------------------------------------------------
  1127.  
  1128. -- State buff checks that will equip buff gear and mark the event as handled.
  1129. function check_buff(buff_name, eventArgs)
  1130.     if state.Buff[buff_name] then
  1131.         equip(sets.buff[buff_name] or {})
  1132.         if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
  1133.             equip(sets.TreasureHunter)
  1134.         end
  1135.         eventArgs.handled = true
  1136.     end
  1137.  
  1138. --    if buffactive['Haste'] and player.tp < 200 and usehasteknife == 1 then
  1139. --      sets.engaged = set_combine(sets.engaged,sets.Mainhand)
  1140. --      sets.idle = set_combine(sets.idle,sets.Mainhand)
  1141. --    elseif player.tp < 200 and usehasteknife == 1 then
  1142. --          sets.engaged = set_combine(sets.engaged,sets.Haste)
  1143. --          sets.idle = set_combine(sets.idle,sets.Haste)
  1144. --    end
  1145. end
  1146.  
  1147.  
  1148. -- Check for various actions that we've specified in user code as being used with TH gear.
  1149. -- This will only ever be called if TreasureMode is not 'None'.
  1150. -- Category and Param are as specified in the action event packet.
  1151. function th_action_check(category, param)
  1152.     if category == 2 or -- any ranged attack
  1153.         --category == 4 or -- any magic action
  1154.         (category == 3 and param == 30) or -- Aeolian Edge
  1155.         (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
  1156.         (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
  1157.         then return true
  1158.     end
  1159. end
  1160.  
  1161.  
  1162. -- Function to lock the ranged slot if we have a ranged weapon equipped.
  1163. function check_range_lock()
  1164.     --enable('range','ammo')
  1165. --    if rangeswap then
  1166. --      disable('range','ammo')
  1167. --      rangeswap=0
  1168. --    end
  1169. --    if player.equipment.range ~= 'empty' then
  1170. --        disable('range', 'ammo')
  1171. --    else
  1172. --        enable('range', 'ammo')
  1173. --    end
  1174. end
  1175.  
  1176.  
  1177. -- Select default macro book on initial load or subjob change.
  1178. function select_default_macro_book()
  1179.     -- Default macro set/book
  1180.     if player.sub_job == 'DNC' then
  1181.         set_macro_page(1, 5)
  1182. --    elseif player.sub_job == 'WAR' then
  1183. --        set_macro_page(3, 5)
  1184.     elseif player.sub_job == 'NIN' then
  1185.         set_macro_page(1, 6)
  1186. --    else
  1187. --        set_macro_page(2, 5)
  1188.     end
  1189. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement