Advertisement
Guest User

Untitled

a guest
Oct 31st, 2021
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 69.54 KB | None | 0 0
  1. -- Original: Motenten / Modified: Arislan
  2. -- Haste/DW Detection Requires Gearinfo Addon
  3.  
  4. -------------------------------------------------------------------------------------------------------------------
  5. --  Keybinds
  6. -------------------------------------------------------------------------------------------------------------------
  7.  
  8. --  Modes:      [ F9 ]              Cycle Offense Mode
  9. --              [ CTRL+F9 ]         Cycle Hybrid Modes
  10. --              [ WIN+F9 ]          Cycle Weapon Skill Modes
  11. --              [ F10 ]             Emergency -PDT Mode
  12. --              [ ALT+F10 ]         Toggle Kiting Mode
  13. --              [ F11 ]             Emergency -MDT Mode
  14. --              [ CTRL+F11 ]        Cycle Casting Modes
  15. --              [ F12 ]             Update Current Gear / Report Current Status
  16. --              [ CTRL+F12 ]        Cycle Idle Modes
  17. --              [ ALT+F12 ]         Cancel Emergency -PDT/-MDT Mode
  18. --              [ ALT+` ]           Toggle Magic Burst Mode
  19. --              [ WIN+C ]           Toggle Capacity Points Mode
  20. --
  21. --  Abilities:  [ CTRL+` ]          Composure
  22. --              [ CTRL+- ]          Light Arts/Addendum: White
  23. --              [ CTRL+= ]          Dark Arts/Addendum: Black
  24. --              [ CTRL+; ]          Celerity/Alacrity
  25. --              [ ALT+[ ]           Accesion/Manifestation
  26. --              [ ALT+; ]           Penury/Parsimony
  27. --
  28. --  Spells:     [ CTRL+` ]          Stun
  29. --              [ ALT+E ]           Temper
  30. --              [ ALT+W ]           Flurry II
  31. --              [ ALT+Q ]           Haste II
  32. --              [ ALT+R ]           Refresh II
  33. --              [ ALT+Y ]           Phalanx
  34. --              [ ALT+O ]           Regen II
  35. --              [ ALT+P ]           Shock Spikes
  36. --              [ WIN+, ]           Utsusemi: Ichi
  37. --              [ WIN+. ]           Utsusemi: Ni
  38. --
  39. --  Weapons:    [ CTRL+W ]          Toggles Weapon Lock
  40. --
  41. --  WS:         [ CTRL+Numpad7 ]    Savage Blade
  42. --              [ CTRL+Numpad9 ]    Chant Du Cygne
  43. --              [ CTRL+Numpad4 ]    Requiescat
  44. --              [ CTRL+Numpad1 ]    Sanguine Blade
  45. --
  46. --
  47.  
  48.  
  49. -------------------------------------------------------------------------------------------------------------------
  50. -- Setup functions for this job.  Generally should not be modified.
  51. -------------------------------------------------------------------------------------------------------------------
  52.  
  53. --              Addendum Commands:
  54. --              Shorthand versions for each strategem type that uses the version appropriate for
  55. --              the current Arts.
  56. --                                          Light Arts                  Dark Arts
  57. --                                          ----------                  ---------
  58. --              gs c scholar light          Light Arts/Addendum
  59. --              gs c scholar dark                                       Dark Arts/Addendum
  60. --              gs c scholar cost           Penury                      Parsimony
  61. --              gs c scholar speed          Celerity                    Alacrity
  62. --              gs c scholar aoe            Accession                   Manifestation
  63. --              gs c scholar addendum       Addendum: White             Addendum: Black
  64.  
  65.  
  66. -------------------------------------------------------------------------------------------------------------------
  67. -- Setup functions for this job.  Generally should not be modified.
  68. -------------------------------------------------------------------------------------------------------------------
  69.  
  70. -- Initialization function for this job file.
  71. function get_sets()
  72.     mote_include_version = 2
  73.  
  74.     -- Load and initialize the include file.
  75.     include('Mote-Include.lua')
  76. end
  77.  
  78.  
  79. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  80. function job_setup()
  81.  
  82.     state.CP = M(false, "Capacity Points Mode")
  83.     state.Buff.Composure = buffactive.Composure or false
  84.     state.Buff.Saboteur = buffactive.Saboteur or false
  85.     state.Buff.Stymie = buffactive.Stymie or false
  86.  
  87.     no_swap_gear = S{"Warp Ring", "Dim. Ring (Dem)", "Dim. Ring (Holla)", "Dim. Ring (Mea)",
  88.               "Trizek Ring", "Echad Ring", "Facility Ring", "Capacity Ring"}
  89.  
  90.     enfeebling_magic_acc = S{'Bind', 'Break', 'Dispel', 'Distract', 'Distract II', 'Frazzle',
  91.         'Frazzle II',  'Gravity', 'Gravity II', 'Silence'}
  92.     enfeebling_magic_skill = S{'Distract III', 'Frazzle III', 'Poison II'}
  93.     enfeebling_magic_effect = S{'Dia', 'Dia II', 'Dia III', 'Diaga', 'Blind', 'Blind II'}
  94.     enfeebling_magic_sleep = S{'Sleep', 'Sleep II', 'Sleepga'}
  95.  
  96.     skill_spells = S{
  97.         'Temper', 'Temper II', 'Enfire', 'Enfire II', 'Enblizzard', 'Enblizzard II', 'Enaero', 'Enaero II',
  98.         'Enstone', 'Enstone II', 'Enthunder', 'Enthunder II', 'Enwater', 'Enwater II'}
  99.  
  100.     include('Mote-TreasureHunter')
  101.    
  102.     degrade_array = {
  103.         ['Fire'] = {'Fire','Fire II','Fire III','Fire IV','Fire V'},
  104.         ['Ice'] = {'Blizzard','Blizzard II','Blizzard III','Blizzard IV','Blizzard V'},
  105.         ['Wind'] = {'Aero','Aero II','Aero III','Aero IV','Aero V'},
  106.         ['Earth'] = {'Stone','Stone II','Stone III','Stone IV','Stone V'},
  107.         ['Lightning'] = {'Thunder','Thunder II','Thunder III','Thunder IV','Thunder V'},
  108.         ['Water'] = {'Water', 'Water II','Water III', 'Water IV','Water V'},
  109.         ['Aspirs'] = {'Aspir','Aspir II'},
  110.         }
  111.        
  112.     -- For th_action_check():
  113.     -- JA IDs for actions that always have TH: Provoke, Animated Flourish
  114.     info.default_ja_ids = S{35, 204}
  115.     -- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
  116.     info.default_u_ja_ids = S{201, 202, 203, 205, 207}
  117.  
  118.     lockstyleset = 20
  119. end
  120.  
  121.  
  122. -------------------------------------------------------------------------------------------------------------------
  123. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  124. -------------------------------------------------------------------------------------------------------------------
  125.  
  126. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  127. function user_setup()
  128.     state.OffenseMode:options('Normal', 'MidAcc', 'HighAcc', 'DW')
  129.     state.HybridMode:options('Normal', 'DT')
  130.     state.WeaponskillMode:options('Normal', 'Acc')
  131.     state.CastingMode:options('Normal', 'Seidr', 'Resistant')
  132.     state.IdleMode:options('Normal', 'DT')
  133.  
  134.     state.EnSpell = M{['description']='EnSpell', 'Enfire', 'Enblizzard', 'Enaero', 'Enstone', 'Enthunder', 'Enwater'}
  135.     state.BarElement = M{['description']='BarElement', 'Barfire', 'Barblizzard', 'Baraero', 'Barstone', 'Barthunder', 'Barwater'}
  136.     state.BarStatus = M{['description']='BarStatus', 'Baramnesia', 'Barvirus', 'Barparalyze', 'Barsilence', 'Barpetrify', 'Barpoison', 'Barblind', 'Barsleep'}
  137.     state.GainSpell = M{['description']='GainSpell', 'Gain-STR', 'Gain-INT', 'Gain-AGI', 'Gain-VIT', 'Gain-DEX', 'Gain-MND', 'Gain-CHR'}
  138.  
  139.     state.WeaponSet = M{['description']='Weapon Set', 'CroceaDark', 'CroceaLight', 'Almace', 'Naegling', 'Tauret', 'Idle'}
  140.     state.WeaponLock = M(false, 'Weapon Lock')
  141.     state.MagicBurst = M(false, 'Magic Burst')
  142.     state.SleepMode = M{['description']='Sleep Mode', 'Normal', 'MaxDuration'}
  143.     state.EnspellMode = M(false, 'Enspell Melee Mode')
  144.     state.NM = M(false, 'NM?')
  145.     state.CP = M(false, "Capacity Points Mode")
  146.     -- Additional local binds
  147.  
  148.     send_command('bind ^` input /ja "Composure" <me>')
  149.     send_command('bind !f input /ma "Frazzle III" <t>')
  150.     send_command('bind !d input /ma "Dia III" <t>')
  151.     send_command('bind !c input /ma "Distract III" <t>')
  152.     send_command('bind @t gs c cycle treasuremode')
  153.     send_command('bind !` gs c toggle MagicBurst')
  154.     send_command('bind ` input /ja "Spontaneity <me>')
  155.  
  156.         send_command('bind ^- gs c scholar light')
  157.         send_command('bind ^= gs c scholar dark')
  158.         send_command('bind !- gs c scholar addendum')
  159.         send_command('bind != gs c scholar addendum')
  160.         send_command('bind !z gs c scholar aoe')
  161.         send_command('bind !; gs c scholar cost')
  162.  
  163.     send_command('bind !e input /ma "Temper II" <me>')
  164.     send_command('bind !w input /ma "Flurry II" <stpc>')
  165.     send_command('bind !q input /ma "Haste II" <stpc>')
  166.     send_command('bind !r input /ma "Refresh III" <stpc>')
  167.     --send_command('bind !y input /ma "Phalanx II" <stpc>')
  168.     --send_command('bind !o input /ma "Regen II" <stpc>')
  169.     --send_command('bind !p input /ma "Shock Spikes" <me>')
  170.  
  171.     send_command('bind ~numpad7 input /ma "Paralyze II" <t>')
  172.     send_command('bind ~numpad8 input /ma "Silence" <t>')
  173.     send_command('bind ~numpad9 input /ma "Blind II" <t>')
  174.     send_command('bind ~numpad4 input /ma "Poison II" <t>')
  175.     send_command('bind ~numpad5 input /ma "Slow II" <t>')
  176.     send_command('bind ~numpad6 input /ma "Addle II" <t>')
  177.     send_command('bind ~numpad1 input /ma "Distract III" <t>')
  178.     send_command('bind ~numpad2 input /ma "Frazzle III" <t>')
  179.     send_command('bind ~numpad3 input /ma "Inundation" <t>')
  180.     send_command('bind ~numpad0 input /ma "Dia III" <t>')
  181.  
  182.     send_command('bind !insert gs c cycleback EnSpell')
  183.     send_command('bind !delete gs c cycle EnSpell')
  184.     send_command('bind ^insert gs c cycleback GainSpell')
  185.     send_command('bind ^delete gs c cycle GainSpell')
  186.     send_command('bind ^home gs c cycleback BarElement')
  187.     send_command('bind ^end gs c cycle BarElement')
  188.     send_command('bind ^pageup gs c cycleback BarStatus')
  189.     send_command('bind ^pagedown gs c cycle BarStatus')
  190.  
  191.     send_command('bind @s gs c cycle SleepMode')
  192.     send_command('bind @e gs c cycle EnspellMode')
  193.     send_command('bind @d gs c toggle NM')
  194.     send_command('bind @w gs c toggle WeaponLock')
  195.     send_command('bind @q input /equip main "Kaja Sword"; input /equip sub "Thibron"; gs c toggle WeaponLock')
  196.     --send_command('bind @q input /equip main "Ceremonial Dagger"; input /equip sub "Ceremonial Dagger"; gs c toggle WeaponLock')
  197.     send_command('bind @c gs c toggle CP')
  198.     send_command('bind @e gs c cycleback WeaponSet')
  199.     send_command('bind @r gs c cycle WeaponSet')
  200.  
  201.     --send_command('bind ^numpad7 input /ws "Savage Blade" <t>')
  202.     --send_command('bind ^numpad9 input /ws "Chant du Cygne" <t>')
  203.     --send_command('bind ^numpad4 input /ws "Requiescat" <t>')
  204.     --send_command('bind ^numpad1 input /ws "Sanguine Blade" <t>')
  205.     --send_command('bind ^numpad2 input /ws "Seraph Blade" <t>')
  206.    
  207.     send_command('bind !s gs c AllowSkillchainGear')
  208.    
  209.     SkillchainPending = false
  210.     AllowSkillchainGear = false
  211.     SkillchainTimer = 0
  212.  
  213.  
  214.     select_default_macro_book()
  215.     set_lockstyle()
  216.  
  217.     state.Auto_Kite = M(false, 'Auto_Kite')
  218.     Haste = 0
  219.     DW_needed = 0
  220.     DW = false
  221.     moving = false
  222.     update_combat_form()
  223.     determine_haste_group()
  224. end
  225.  
  226. -- Called when this job file is unloaded (eg: job change)
  227. function user_unload()
  228.     send_command('unbind !f')
  229.     send_command('unbind !c')
  230.     send_command('unbind !d')
  231.     send_command('unbind ^`')
  232.     send_command('unbind !`')
  233.     send_command('unbind ^-')
  234.     send_command('unbind ^=')
  235.     send_command('unbind !-')
  236.     send_command('unbind !=')
  237.     send_command('unbind !z')
  238.     send_command('unbind !;')
  239.     send_command('unbind !q')
  240.     send_command('unbind !w')
  241.     send_command('unbind !e')
  242.     send_command('unbind !r')
  243.     send_command('unbind !y')
  244.     send_command('unbind !o')
  245.     send_command('unbind !p')
  246.     send_command('unbind @s')
  247.     send_command('unbind @d')
  248.     send_command('unbind @t')
  249.     send_command('unbind `')
  250.  
  251.     send_command('unbind ~numpad7')
  252.     send_command('unbind ~numpad8')
  253.     send_command('unbind ~numpad9')
  254.     send_command('unbind ~numpad4')
  255.     send_command('unbind ~numpad5')
  256.     send_command('unbind ~numpad6')
  257.     send_command('unbind ~numpad1')
  258.     send_command('unbind ~numpad2')
  259.     send_command('unbind ~numpad3')
  260.     send_command('unbind ~numpad0')
  261.  
  262.     send_command('unbind @w')
  263.     send_command('unbind @c')
  264.     send_command('unbind @e')
  265.     send_command('unbind @r')
  266.     send_command('unbind !insert')
  267.     send_command('unbind !delete')
  268.     send_command('unbind ^insert')
  269.     send_command('unbind ^delete')
  270.     send_command('unbind ^home')
  271.     send_command('unbind ^end')
  272.     send_command('unbind ^pageup')
  273.     send_command('unbind ^pagedown')
  274.     send_command('unbind ^numpad7')
  275.     send_command('unbind ^numpad9')
  276.     send_command('unbind ^numpad4')
  277.     send_command('unbind ^numpad1')
  278.     send_command('unbind ^numpad2')
  279.  
  280.     send_command('unbind #`')
  281.     send_command('unbind #1')
  282.     send_command('unbind #2')
  283.     send_command('unbind #3')
  284.     send_command('unbind #4')
  285.     send_command('unbind #5')
  286.     send_command('unbind #6')
  287.     send_command('unbind #7')
  288.     send_command('unbind #8')
  289.     send_command('unbind #9')
  290.     send_command('unbind #0')
  291. end
  292.  
  293. -- Define sets and vars used by this job file.
  294. function init_gear_sets()
  295.    
  296.     Cape = {}
  297.     Cape.TP = { name="Sucellos's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dual Wield"+10',}}
  298.     Cape.WS = { name="Sucellos's Cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}}
  299.     Cape.Macc = { name="Sucellos's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+4','"Mag.Atk.Bns."+10',}}  
  300.     ------------------------------------------------------------------------------------------------
  301.     ---------------------------------------- Precast Sets ------------------------------------------
  302.     ------------------------------------------------------------------------------------------------
  303.  
  304.     -- Precast sets to enhance JAs
  305.     sets.precast.JA['Chainspell'] = {body="Vitiation Tabard +1"}
  306.  
  307.     -- Fast cast sets for spells
  308.     --Red Mage gets 30% from level 89 + additional % via Job Points || Cap is 80%
  309.     sets.precast.FC = {
  310.         head="Atrophy Chapeau +1", --16 at +3
  311.         body="Vitiation Tabard +1", --15 at +3
  312.         hands="Gendewitha Gages", --7
  313.         --legs="Volte Brais", --8
  314.         legs="Ayanmo Cosciales", --3
  315.         feet="Carmine Greaves +1", --8
  316.         neck="Baetyl Pendant",
  317.         ear1="Loquacious Earring",
  318.         ear2="Malignance Earring",
  319.         --ring2="Weather. Ring +1", --5
  320.         ring1="Prolix Ring", --2
  321.         back="Swith Cape", --3
  322.         waist="Embla Sash",
  323.         }
  324.        
  325.     sets.precast.FC['Enfeebling Magic'] = set_combine(sets.precast.FC, {head="Lethargy Chappel +1"})
  326.    
  327.     sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  328.  
  329.     --Cure Cast time Reduction + Quick Magic
  330.     sets.precast.FC.Cure = set_combine(sets.precast.FC, {
  331.         sub="Sors Shield",
  332.         ammo="Impatiens", --(2)
  333.         --ring1="Lebeche Ring", --(2)
  334.         ring1="Veneficium Ring",
  335.         --ring2="Weather. Ring +1", --5/(4)
  336.         --back="Perimede Cape", --(4)
  337.         back="Pahtli Cape",
  338.         --waist="Embla Sash",
  339.         })
  340.  
  341.     sets.precast.FC.Curaga = sets.precast.FC.Cure
  342.     sets.precast.FC['Healing Magic'] = sets.precast.FC.Cure
  343.     sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {})
  344.  
  345.     sets.precast.FC.Impact = set_combine(sets.precast.FC, {
  346.         ammo="Sapience Orb", --2
  347.         head=empty,
  348.         body="Twilight Cloak",
  349.         hands="Gende. Gages +1", --7
  350.         neck="Orunmila's Torque", --5
  351.         ear1="Malignance Earring", --4
  352.         ear2="Enchntr. Earring +1", --2
  353.         ring1="Kishar Ring", --4
  354.         back="Swith Cape +1", --4
  355.         waist="Shinjutsu-no-Obi +1", --5
  356.         })
  357.  
  358.     sets.precast.FC.Dispelga = set_combine(sets.precast.FC, {main="Daybreak", sub="Ammurapi Shield", waist="Shinjutsu-no-Obi +1"})
  359.     sets.precast.Storm = set_combine(sets.precast.FC, {name="Stikini Ring", bag="wardrobe1"})
  360.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga beads"})
  361.  
  362.  
  363.     ------------------------------------------------------------------------------------------------
  364.     ------------------------------------- Weapon Skill Sets ----------------------------------------
  365.     ------------------------------------------------------------------------------------------------
  366.  
  367.     sets.precast.WS = {
  368.         head="Ayanmo Zucchetto +2",
  369.         body="Volte Harness",
  370.         hands="Jhakri Cuffs +2",
  371.         legs="Ayanmo Cosciales",
  372.         feet="Ayanmo Gambieras +1",
  373.         ammo="Voluspa Tathlum",
  374.         neck="Fotia Gorget",
  375.         ear1="Sherida Earring",
  376.         ear2="Brutal Earring",
  377.         ring1="Apate Ring",
  378.         ring2="Rajas Ring",
  379.         back=Cape.WS,
  380.         waist="Fotia Belt"
  381.         }
  382.  
  383.     sets.precast.WS.Acc = set_combine(sets.precast.WS, {
  384.         ammo="Voluspa Tathlum",
  385.         --body="Jhakri Robe +2",
  386.         neck="Combatant's Torque",
  387.         --ear2="Mache Earring +1",
  388.         --waist="Grunfeld Rope",
  389.         })
  390.  
  391.     sets.precast.WS['Chant du Cygne'] = set_combine(sets.precast.WS, {
  392.         ammo="Voluspa Tathlum",
  393.         head="Malignance Chapeau",
  394.         body="Volte Harness",
  395.         hands="Jhakri Cuffs +2",
  396.         legs="Jhakri Slops +2",
  397.         feet="Ayanmo Gambieras +1",
  398.         --ring1="Begrudging Ring",
  399.         --ring2="Ilabrat Ring",
  400.         --back=gear.RDM_WS2_Cape,
  401.         })
  402.    
  403.     sets.precast.WS['Chant du Cygne'].Acc = set_combine(sets.precast.WS['Chant du Cygne'], {
  404.         ammo="Voluspa Tathlum",
  405.         --ear2="Mache Earring +1",
  406.         })
  407.        
  408.     sets.SCDmg = set_combine(sets.precast.WS['Chant du Cygne'], {
  409.         head = "Nyame Helm",
  410.         body = "Nyame Mail",
  411.         hands = "Nyame Gauntlets",
  412.         neck="Warder's Charm +1",
  413.         ring2 = "Mujin Band",      
  414.         legs = "Nyame Flanchard",
  415.         feet = "Nyame Sollerets"
  416.     })
  417.    
  418.     sets.precast.WS['Vorpal Blade'] = sets.precast.WS['Chant du Cygne']
  419.     sets.precast.WS['Vorpal Blade'].Acc = sets.precast.WS['Chant du Cygne'].Acc
  420.    
  421.     --Atrophy Gloves +3, Viti. Chapeau +3
  422.     sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {
  423.         head="Jhakri Coronal +1",
  424.         body="Jhakri Robe +2",
  425.         hands="Jhakri Cuffs +2",
  426.         legs="Jhakri Slops +2",
  427.         feet="Carmine Greaves +1",
  428.         neck="Caro Necklace",
  429.         ear1="Moonshade Earring",
  430.         ear2="Ishvara Earring",
  431.         ring1="Karieyh Ring",
  432.         ring2="Rufescent Ring",
  433.         waist="Sailfi Belt +1",
  434.         })
  435.    
  436.     sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {
  437.         ammo="Voluspa Tathlum",
  438.         neck="Combatant's Torque",
  439.         --waist="Grunfeld Rope",
  440.         })
  441.  
  442.     sets.precast.WS['Death Blossom'] = sets.precast.WS['Savage Blade']
  443.     sets.precast.WS['Death Blossom'].Acc = sets.precast.WS['Savage Blade'].Acc
  444.  
  445.     sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {
  446.         ear2="Sherida Earring",
  447.         --ring2="Shukuyu Ring",
  448.         })
  449.  
  450.     sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS['Requiescat'], {
  451.         ammo="Voluspa Tathlum",
  452.         neck="Combatant's Torque",
  453.         --ear1="Mache Earring +1",
  454.         })
  455.  
  456.     sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS, {
  457.         head="Ayanmo Zucchetto +2",
  458.         hands="Jhakri Cuffs +2",
  459.         legs={name="Merlinic Shalwar", bag="wardrobe"},
  460.         feet="Merlinic Crackows",
  461.         ammo="Kalboron Stone",
  462.         ear2="Hecate's Earring",
  463.         ring1="Fenrir Ring",
  464.         ring2="Fenrir Ring",
  465.         back="Sucellos's Cape",
  466.         --ammo="Ghastly Tathlum +1",
  467.         --head="Pixie Hairpin +1",
  468.         --body="Amalric Doublet +1",
  469.  
  470.         --legs="Amalric Slops +1",
  471.         --feet="Amalric Nails +1",
  472.         neck="Mizukage-no-Kubikazari",
  473.         ear1="Malignance Earring",
  474.         --ear2="Regal Earring",
  475.         --ring1="Archon Ring",
  476.         --ring2="Epaminondas's Ring",
  477.         --back=gear.RDM_INT_Cape,
  478.         --waist="Orpheus's Sash",
  479.         })
  480.  
  481.     sets.precast.WS['Seraph Blade'] = set_combine(sets.precast.WS['Sanguine Blade'], {
  482.         head="Jhakri Coronal +1",
  483.         body="Witching Robe",
  484.         hands="Jhakri Cuffs +2",
  485.         legs={name="Merlinic Shalwar", bag="wardrobe"},
  486.         feet="Merlinic Crackows",
  487.         ammo="Kalboron Stone",
  488.         ear2="Hecate's Earring",
  489.         ear2="Malignance Earring",
  490.         ring1="Fenrir Ring",
  491.         ring2="Fenrir Ring",
  492.         back=Cape.Macc,
  493.         })
  494.  
  495.     sets.precast.WS['Aeolian Edge'] = set_combine(sets.precast.WS['Seraph Blade'], {
  496.  
  497.         })
  498.  
  499.     sets.precast.WS['Black Halo'] = set_combine(sets.precast.WS['Savage Blade'], {
  500.         ear2="Sherida Earring",
  501.         ring1="Rufescent Ring",
  502.         })
  503.  
  504.     sets.precast.WS['Black Halo'].Acc = set_combine(sets.precast.WS['Black Halo'], {
  505.         ammo="Voluspa Tathlum",
  506.         neck="Combatant's Torque",
  507.         --ear2="Telos Earring",
  508.         --waist="Grunfeld Rope",
  509.         })
  510.     ------------------------------------------------------------------------------------------------
  511.     ---------------------------------------- Midcast Sets ------------------------------------------
  512.     ------------------------------------------------------------------------------------------------
  513.  
  514.     sets.midcast.FastRecast = sets.precast.FC
  515.    
  516.     sets.midcast.SpellInterrupt = {
  517.         --ammo="Staunch Tathlum +1", --11
  518.         --body="Ros. Jaseran +1", --25   was disabled already (I didnt disable)
  519.         --hands=gear.Chironic_WSD_hands, --20
  520.         legs="Carmine Cuisses +1", --20
  521.         --neck="Loricate Torque +1", --5
  522.         --ear1="Halasz Earring", --5
  523.         --ear2="Magnetic Earring", --8
  524.         ring2="Evanescence Ring", --5
  525.         --waist="Rumination Sash", --10
  526.         }
  527.  
  528.     sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
  529.  
  530.     sets.midcast.Cure = { --"(-#) indicates -emnity
  531.         main="Daybreak", --30
  532.         sub="Sors Shield", --3/(-5)
  533.         ammo="Esper Stone +1", --0/(-5)
  534.         head="Vanya Hood",
  535.         --body="Kaykaus Bliaut +1", --(+4)/(-6)
  536.         --hands="Kaykaus Cuffs +1", --11(+2)/(-6)
  537.         hands="Telchine Gloves",
  538.         --legs="Kaykaus Tights +1", --11(+2)/(-6)
  539.         --feet="Kaykaus Boots +1", --11(+2)/(-12)
  540.         neck="Incanter's Torque",
  541.         --ear1="Beatific Earring",
  542.         --ear2="Meili Earring",
  543.         ear2="Malignance Earring",
  544.         --ring1="Haoma's Ring",
  545.         ring1="Vertigo Ring",
  546.         --ring2="Menelaus's Ring",
  547.         --back=gear.RDM_MND_Cape, --(-10)
  548.         back="Solemnity Cape",
  549.         --waist="Bishop's Sash",
  550.         }
  551.  
  552.     sets.midcast.CureWeather = set_combine(sets.midcast.Cure, {
  553.         --main="Chatoyant Staff",
  554.         --sub="Enki Strap",
  555.         --back="Twilight Cape",
  556.         --waist="Hachirin-no-Obi",
  557.         })
  558.  
  559.     sets.midcast.CureSelf = set_combine(sets.midcast.Cure, {
  560.         --neck="Phalaina Locket", -- 4(4)
  561.         ring2="Asklepian Ring", -- (3)
  562.         --waist="Gishdubar Sash", -- (10)
  563.         waist="Chuq'aba Belt",
  564.         })
  565.  
  566.     sets.midcast.Curaga = set_combine(sets.midcast.Cure, {
  567.         --ammo="Regal Gem",
  568.         --ring1={name="Stikini Ring +1", bag="wardrobe3"},
  569.         --ring2={name="Stikini Ring +1", bag="wardrobe4"},
  570.         --waist="Luminary Sash",
  571.         })
  572.  
  573.     sets.midcast.StatusRemoval = {
  574.         head="Vanya Hood",
  575.         --body="Vanya Robe",
  576.         legs="Atrophy Tights",
  577.         feet="Vanya Clogs",
  578.         neck="Incanter's Torque",
  579.         --ear2="Meili Earring",
  580.         --ring1="Haoma's Ring",
  581.         --ring2="Menelaus's Ring",
  582.         --back="Perimede Cape",
  583.         --waist="Bishop's Sash",
  584.         }
  585.  
  586.     sets.midcast.Cursna = set_combine(sets.midcast.StatusRemoval, {
  587.         --hands="Hieros Mittens",
  588.         body="Vitiation Tabard +1",
  589.         --neck="Debilis Medallion",
  590.         --ear1="Beatific Earring",
  591.         --ring2="Menelaus's Ring",
  592.         --back="Oretan. Cape +1",
  593.         })
  594.  
  595.     sets.midcast['Enhancing Magic'] = {
  596.         head="Befouled Crown",
  597.         body="Vitiation Tabard +1",
  598.         hands="Vitiation Gloves +1",
  599.         legs="Carmine Cuisses +1",
  600.         feet="Lethargy Houseaux +1",
  601.         main="Colada",
  602.         neck="Incanter's Torque",
  603.         ring1={name="Stikini Ring", bag="wardrobe1"},
  604.         ring2={name="Stikini Ring", bag="wardrobe2"},
  605.         back="Ghostfyre Cape",
  606.         --sub="Ammurapi Shield",
  607.         --ammo="Regal Gem",
  608.         --ear1="Mimir Earring",
  609.         --ear2="Andoaa Earring",
  610.         waist="Olympus Sash",
  611.         }
  612.  
  613.     sets.midcast.EnhancingDuration ={
  614.         body="Vitiation Tabard +1",
  615.         hands="Atrophy Gloves +2",
  616.         legs="Carmine Cuisses +1",
  617.         feet="Lethargy Houseaux +1",
  618.         main="Colada",
  619.         neck="Duelist's Torque",
  620.         back="Ghostfyre Cape",
  621.         waist="Embla Sash",
  622.         --sub="Ammurapi Shield",
  623.         --head=gear.Telchine_ENH_head,
  624.         --legs=gear.Telchine_ENH_legs,
  625.         }
  626.  
  627.     sets.midcast.EnhancingSkill = {
  628.         main="Pukulatmuj +1",
  629.         sub="Pukulatmuj",
  630.         head="Befouled Crown",
  631.         body="Vitiation Tabard +1",
  632.         hands="Vitiation Gloves +1",
  633.         legs="Carmine Cuisses +1",
  634.         feet="Lethargy Houseaux +1",
  635.         neck="Incanter's Torque",
  636.         ear1="Andoaa Earring",
  637.         --ear2="Mimir Earring", --Domain Invasion
  638.         ring1={name="Stikini Ring", bag="wardrobe1"},
  639.         ring2={name="Stikini Ring", bag="wardrobe2"},
  640.         back="Ghostfyre Cape",
  641.         waist="Olympus Sash",
  642.         }
  643.  
  644.     sets.midcast.Regen = set_combine(sets.midcast.EnhancingDuration, {
  645.         --main="Bolelabunga",
  646.         --sub="Ammurapi Shield",
  647.         --head=gear.Telchine_ENH_head,
  648.         --body=gear.Telchine_ENH_body,
  649.         --hands=gear.Telchine_ENH_hands,
  650.         --legs=gear.Telchine_ENH_legs,
  651.         --feet=gear.Telchine_ENH_feet,
  652.         })
  653.  
  654.     sets.midcast.Refresh = set_combine(sets.midcast.EnhancingDuration, {
  655.         --head="Amalric Coif +1", -- +1
  656.         body="Atrophy Tabard +1", -- +3
  657.         legs="Lethargy Fuseau +1", -- +2
  658.         })
  659.  
  660.     sets.midcast.RefreshSelf = {
  661.         --waist="Gishdubar Sash",
  662.         --back="Grapevine Cape"
  663.         }
  664.  
  665.     sets.midcast.Stoneskin = set_combine(sets.midcast.EnhancingDuration, {
  666.         --neck="Nodens Gorget",
  667.         waist="Siegel Sash",
  668.         })
  669.  
  670.     sets.midcast['Phalanx'] = set_combine(sets.midcast.EnhancingDuration, {
  671.         --body=gear.Taeon_Phalanx_body, --3(10)
  672.         --hands=gear.Taeon_Phalanx_hands, --3(10)
  673.         --legs=gear.Taeon_Phalanx_legs, --3(10)
  674.         --feet=gear.Taeon_Phalanx_feet, --3(10)
  675.         })
  676.  
  677.     sets.midcast.Aquaveil = set_combine(sets.midcast.EnhancingDuration, {
  678.         --ammo="Staunch Tathlum +1",
  679.         --head="Amalric Coif +1",
  680.         --hands="Regal Cuffs",
  681.         --ear1="Halasz Earring",
  682.         --ring1="Freke Ring",
  683.         --ring2="Evanescence Ring",
  684.         --waist="Emphatikos Rope",
  685.         })
  686.  
  687.     sets.midcast.Storm = sets.midcast.EnhancingDuration
  688.     sets.midcast['Blink'] = set_combine(sets.midcast.EnhancingDuration, {
  689.         head="Vanya Hood",
  690.     })
  691.    
  692.     sets.midcast.GainSpell = {
  693.         head="Vanya Hood",
  694.         hands="Vitiation Gloves +1"
  695.     }
  696.     sets.midcast.SpikesSpell = {legs="Vitiation Tights"}
  697.  
  698.     sets.midcast.Protect = set_combine(sets.midcast.EnhancingDuration, {ring2="Sheltered Ring"})
  699.     sets.midcast.Protectra = sets.midcast.Protect
  700.     sets.midcast.Shell = sets.midcast.Protect
  701.     sets.midcast.Shellra = sets.midcast.Shell
  702.  
  703.  
  704.      -- Custom spell classes
  705.  
  706.     sets.midcast.MndEnfeebles = {
  707.         main="Daybreak",
  708.         head="Vitiation Chapeau +1",
  709.         body="Lethargy Sayon",
  710.         hands="Ayanmo Manopolas +2",
  711.         legs="Psycloth Lappas",
  712.         feet="Vitiation Boots +1",
  713.         ammo="Kalboron Stone",
  714.         neck="Duelist's Torque",
  715.         ear1="Snotra Earring",
  716.         ear2="Malignance Earring",
  717.         ring1={name="Stikini Ring", bag="wardrobe2"},
  718.         ring2={name="Stikini Ring", bag="wardrobe1"},
  719.         back=Cape.Macc,
  720.         waist="Refoccilation Stone"
  721.        
  722.         --sub="Ammurapi Shield",
  723.         --ammo="Regal Gem",
  724.         --hands="Regal Cuffs",
  725.         --legs="Chironic Hose",
  726.         --ring1="Kishar Ring",
  727.         --ing2="Metamor. Ring +1",
  728.         --back="Aurist's Cape +1",
  729.         --waist="Luminary Sash",
  730.         }
  731.  
  732.     sets.midcast.MndEnfeeblesAcc = set_combine(sets.midcast.MndEnfeebles, {
  733.         --main="Crocea Mors",
  734.         --sub="Ammurapi Shield",
  735.         --range="Ullr",
  736.         --ammo=empty,
  737.        head="Atrophy Chapeau +1",
  738.         body="Atrophy Tabard +1",
  739.         ring1={name="Stikini Ring", bag="wardrobe2"},
  740.         ring2={name="Stikini Ring", bag="wardrobe1"},
  741.         --hands="Kaykaus Cuffs +1",
  742.         --waist="Acuity Belt +1",
  743.         })
  744.  
  745.     sets.midcast.MndEnfeeblesEffect = set_combine(sets.midcast.MndEnfeebles, {
  746.         --ammo="Regal Gem",
  747.         body="Lethargy Sayon",
  748.         feet="Vitiation Boots +1",
  749.         })
  750.  
  751.     sets.midcast.IntEnfeebles = set_combine(sets.midcast.MndEnfeebles, {
  752.         --main="Maxentius",
  753.         --sub="Ammurapi Shield",
  754.         --waist="Acuity Belt +1",
  755.         })
  756.  
  757.     sets.midcast.IntEnfeeblesAcc = set_combine(sets.midcast.IntEnfeebles, {
  758.         --main="Crocea Mors",
  759.         --sub="Ammurapi Shield",
  760.         --range="Ullr",
  761.         --ammo=empty,
  762.         body="Atrophy Tabard +1",
  763.         --hands="Kaykaus Cuffs +1",
  764.         ear2="Malignance Earring",
  765.         ring1={name="Stikini Ring +1", bag="wardrobe1"},
  766.         --waist="Acuity Belt +1",
  767.         })
  768.  
  769.     sets.midcast.IntEnfeeblesEffect = set_combine(sets.midcast.IntEnfeebles, {
  770.         --ammo="Regal Gem",
  771.         body="Lethargy Sayon",
  772.         feet="Vitiation Boots +1",
  773.         neck="Duelist's Torque"
  774.         })
  775.  
  776.     sets.midcast.SkillEnfeebles = set_combine(sets.midcast.MndEnfeebles, {
  777.         --main="Contemplator +1",
  778.         --sub="Mephitis Grip",
  779.         head="Vitiation Chapeau +1",
  780.         body="Atrophy Tabard +1",
  781.         hands="Lethargy Gantherots",
  782.         feet="Vitiation Boots +1",
  783.         --neck="Incanter's Torque",
  784.         ring1={name="Stikini Ring", bag="wardrobe2"},
  785.         ring2={name="Stikini Ring", bag="wardrobe1"},
  786.         --ear1="Vor Earring",
  787.         ear2="Snotra Earring",
  788.         --waist="Rumination Sash",
  789.         })
  790.  
  791.     sets.midcast.Sleep = set_combine(sets.midcast.IntEnfeeblesAcc, {
  792.         main="Daybreak",
  793.         head="Vitiation Chapeau +1",
  794.         body="Lethargy Sayon",
  795.         hands="Ayanmo Manopolas +2",
  796.         legs="Psycloth Lappas",
  797.         feet="Vitiation Boots +1",
  798.         ammo="Kalboron Stone",
  799.         neck="Duelist's Torque",
  800.         ear1="Snotra Earring",
  801.         ear2="Malignance Earring",
  802.         ring1={name="Stikini Ring", bag="wardrobe2"},
  803.         ring2={name="Stikini Ring", bag="wardrobe1"},
  804.         back=Cape.Macc,
  805.         waist="Refoccilation Stone"
  806.         --ring1="Kishar Ring",
  807.         })
  808.  
  809.     sets.midcast.SleepMaxDuration = set_combine(sets.midcast.Sleep, {
  810.         main="Daybreak",
  811.         head="Vitiation Chapeau +1",
  812.         body="Lethargy Sayon",
  813.         hands="Ayanmo Manopolas +2",
  814.         ammo="Kalboron Stone",
  815.         neck="Duelist's Torque",
  816.         ear1="Snotra Earring",
  817.         ear2="Malignance Earring",
  818.         ring1={name="Stikini Ring", bag="wardrobe2"},
  819.         ring2={name="Stikini Ring", bag="wardrobe1"},
  820.         back=Cape.Macc,
  821.         waist="Refoccilation Stone",
  822.         --hands="Regal Cuffs",
  823.         legs="Lethargy Fuseau +1",
  824.         feet="Lethargy Houseaux +1 +1",
  825.         })
  826.  
  827.     sets.midcast.ElementalEnfeeble = sets.midcast.IntEnfeebles
  828.     sets.midcast.Dispelga = set_combine(sets.midcast.IntEnfeeblesAcc, {main="Daybreak", sub="Ammurapi Shield", waist="Shinjutsu-no-Obi +1"})
  829.     sets.midcast.Dispel = set_combine(sets.midcast.IntEnfeeblesAcc, {neck="Duelist's Torque"})
  830.    
  831.     sets.midcast['Dark Magic'] = {
  832.         --main="Rubicundity",
  833.         --sub="Ammurapi Shield",
  834.         --ammo="Pemphredo Tathlum",
  835.         head="Atrophy Chapeau +1",
  836.         --body="Carm. Sc. Mail +1",
  837.         --hands="Kaykaus Cuffs +1",
  838.         --legs="Ea Slops +1",
  839.         feet="Merlinic Crackows",
  840.         neck="Erra Pendant",
  841.         ear2="Malignance Earring",
  842.         --ear1="Mani Earring",
  843.         ring1={name="Stikini Ring", bag="wardrobe1"},
  844.         ring2="Evanescence Ring",
  845.         --back="Aurist's Cape +1",
  846.         --waist="Acuity Belt +1",
  847.         }
  848.  
  849.     sets.midcast.Drain = set_combine(sets.midcast['Dark Magic'], {
  850.         --head="Pixie Hairpin +1",
  851.         feet="Merlinic Crackows",
  852.         --ear1="Hirudinea Earring",
  853.         ring1="Archon Ring",
  854.         ring2="Evanescence Ring",
  855.         --back="Perimede Cape",
  856.         waist="Fucho-no-obi",
  857.         })
  858.  
  859.     sets.midcast.Aspir = sets.midcast.Drain
  860.     sets.midcast.Stun = set_combine(sets.midcast['Dark Magic'], {waist="Luminary Sash"})
  861.     sets.midcast['Bio III'] = set_combine(sets.midcast['Dark Magic'], {legs="Vitiation Tights +3"})
  862.  
  863.     sets.midcast['Elemental Magic'] = {
  864.         head="Jhakri Coronal +1",
  865.         body="Witching Robe",
  866.         hands="Jhakri Cuffs +2",
  867.         legs={name="Merlinic Shalwar", bag="wardrobe"},
  868.         feet="Merlinic Crackows",
  869.         main="Daybreak",
  870.         ammo="Kalboron Stone",
  871.         neck="Baetyl Pendant",
  872.         ear1="Friomisi Earring",
  873.         ear2="Malignance Earring",
  874.         ring1="Fenrir Ring",
  875.         ring2="Fenrir Ring",
  876.         back=Cape.Macc,
  877.         waist="Refoccilation Stone"
  878.        
  879.         --main="Marin Staff +1",
  880.         --sub="Enki Strap",
  881.         --ammo="Ghastly Tathlum +1",
  882.         --head="Merlinic Hood",
  883.         --body="Amalric Doublet +1",
  884.         --hands="Amalric Gages +1",
  885.         --legs="Amalric Slops +1",
  886.         --feet="Amalric Nails +1",
  887.         --ear2="Regal Earring",
  888.         --ring1="Freke Ring",
  889.         --ring2="Metamor. Ring +1",
  890.         --back=gear.RDM_INT_Cape,
  891.         }
  892.  
  893.     sets.midcast['Elemental Magic'].Seidr = set_combine(sets.midcast['Elemental Magic'], {
  894.         ammo="Pemphredo Tathlum",
  895.         body="Seidr Cotehardie",
  896.         legs="Merlinic Shalwar",
  897.         feet="Merlinic Crackows",
  898.         --neck="Erra Pendant",
  899.         waist="Acuity Belt +1",
  900.         })
  901.  
  902.     sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'], {
  903.         --range="Ullr",
  904.         --ammo=empty,
  905.         --legs="Merlinic Shalwar",
  906.         --feet="Merlinic Crackows",
  907.         neck="Erra Pendant",
  908.         ear1="Snotra Earring",
  909.         --waist="Sacro Cord",
  910.         })
  911.  
  912.     sets.midcast.Impact = set_combine(sets.midcast['Elemental Magic'], {
  913.         head=empty,
  914.         body="Twilight Cloak",
  915.         ring1="Archon Ring",
  916.         waist="Shinjutsu-no-Obi +1",
  917.         })
  918.  
  919.     sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
  920.  
  921.     -- Initializes trusts at iLvl 119
  922.     sets.midcast.Trust = sets.precast.WS['Savage Blade']
  923.  
  924.     -- Job-specific buff sets
  925.     sets.buff.ComposureOther = {
  926.         head="Lethargy Chappel +1",
  927.         body="Lethargy Sayon",
  928.         hands="Atrophy Gloves +2",
  929.         legs="Lethargy Fuseau +1",
  930.         feet="Lethargy Houseaux +1",
  931.         }
  932.  
  933.     sets.buff.Saboteur = {hands="Lethargy Gantherots"}
  934.  
  935.  
  936.     ------------------------------------------------------------------------------------------------
  937.     ----------------------------------------- Idle Sets --------------------------------------------
  938.     ------------------------------------------------------------------------------------------------
  939.  
  940.     sets.idle = {
  941.         main="Daybreak",
  942.         sub="Genbu's Shield",
  943.         head="Vitiation Chapeau +1",
  944.         body="Jhakri Robe +2",
  945.         hands="Ayanmo Manopolas +2",
  946.         legs="Carmine Cuisses +1",
  947.         feet="Ayanmo Gambieras +1",
  948.         ammo="Homiliary",
  949.         neck="Twilight Torque",
  950.         ear1="Eabani Earring",
  951.         ear2="Zennaroi Earring",
  952.         ring1="Defending Ring",
  953.         ring2="Sheltered Ring",
  954.         back="Solemnity Cape",
  955.         waist="Fucho-no-Obi"
  956.  
  957.         --body="Jhakri Robe +2",
  958.         --hands="Raetic Bangles +1",
  959.         --legs="Volte Brais",
  960.         --feet="Volte Gaiters",
  961.         --neck="Bathy Choker +1",
  962.  
  963.         --ear2="Sanare Earring",
  964.         --ring1={name="Stikini Ring +1", bag="wardrobe3"},
  965.         --ring2={name="Stikini Ring +1", bag="wardrobe4"},
  966.         --back="Moonlight Cape",
  967.         --waist="Flume Belt +1",
  968.         }
  969.  
  970.     sets.idle.DT = set_combine(sets.idle, {
  971.         head="Ayanmo Zucchetto +2",
  972.         body="Malignance Tabard", --9/9
  973.         hands="Ayanmo Manopolas +2",
  974.         legs="Malignance Tights",
  975.         feet="Ayanmo Gambieras +1",
  976.         sub="Genbu's Shield",
  977.         ear1="Eabani Earring",
  978.         ear2="Infused Earring",
  979.         ring2="Ayanmo Ring",
  980.         ring2="Defending Ring",
  981.        
  982.         --head="Malignance Chapeau", --6/6
  983.  
  984.         --hands="Malignance Gloves", --5/5
  985.         --feet="Malignance Boots", --4/4
  986.         --neck="Warder's Charm +1",
  987.         --ear2="Sanare Earring",
  988.         --ring2="Defending Ring", --10/10
  989.         --back=gear.RDM_INT_Cape,
  990.         --waist="Carrier's Sash",
  991.         })
  992.  
  993.     sets.idle.Town = set_combine(sets.idle, {
  994.         --ammo="Regal Gem",
  995.         head="Vitiation Chapeau +1",
  996.         body="Malignance Tabard", --9/9
  997.         --hands="Regal Cuffs",
  998.         --legs="Vitiation Tights +3",
  999.         feet="Vitiation Boots +1",
  1000.         ring1="Dimensional Ring (Holla)",
  1001.         ring2="Warp Ring",
  1002.         })
  1003.        
  1004.     sets.ring = {
  1005.        
  1006.         ring1="Dimensional Ring (Holla)",
  1007.         ring2="Warp Ring",
  1008.     }
  1009.     sets.resting = set_combine(sets.idle, {
  1010.         main="Chatoyant Staff",
  1011.         --waist="Shinjutsu-no-Obi +1",
  1012.         })
  1013.  
  1014.     ------------------------------------------------------------------------------------------------
  1015.     ---------------------------------------- Defense Sets ------------------------------------------
  1016.     ------------------------------------------------------------------------------------------------
  1017.  
  1018.     sets.defense.PDT = sets.idle.DT
  1019.     sets.defense.MDT = sets.idle.DT
  1020.    
  1021.     sets.magic_burst = set_combine(sets.midcast['Elemental Magic'], {
  1022.         --head="Ea Hat +1", --7/(7)
  1023.         --body="Ea Houppe. +1", --9/(9)
  1024.         --hands="Amalric Gages +1", --(6)
  1025.         --legs="Ea Slops +1", --8/(8)
  1026.         --feet="Ea Pigaches +1", --5/(5)
  1027.         legs="Mallquis Trews +1",
  1028.         feet="Jhakri Pigaches +1",
  1029.         neck="Mizu. Kubikazari", --10
  1030.         ring2="Mujin Band", --(5)
  1031.         })
  1032.  
  1033.     sets.Kiting = {legs="Carmine Cuisses +1"}
  1034.     sets.latent_refresh = {waist="Fucho-no-obi"}
  1035.  
  1036.  
  1037.     ------------------------------------------------------------------------------------------------
  1038.     ---------------------------------------- Engaged Sets ------------------------------------------
  1039.     ------------------------------------------------------------------------------------------------
  1040.  
  1041.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  1042.     -- sets if more refined versions aren't defined.
  1043.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  1044.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  1045.  
  1046.     sets.engaged = {
  1047.         head="Malignance Chapeau",
  1048.         body="Malignance Tabard",
  1049.         hands="Ayanmo Manopolas +2",
  1050.         legs="Malignance Tights",
  1051.         feet="Carmine Greaves +1",
  1052.         ammo="Coiste Bodhar",
  1053.         neck="Anu Torque",
  1054.         ear1="Sherida Earring",
  1055.         ear2="Brutal Earring",
  1056.         ring1="Petrov Ring",
  1057.         ring2="Rajas Ring",
  1058.         back=Cape.TP,
  1059.         waist="Windbuffet Belt +1"
  1060.        
  1061.         --ammo="Aurgelmir Orb +1",
  1062.         --head="Malignance Chapeau",
  1063.         --hands="Malignance Gloves",
  1064.         --legs=gear.Taeon_TA_legs,
  1065.         --ear2="Telos Earring",
  1066.         --ring1="Hetairoi Ring",
  1067.         --ring2={name="Chirich Ring +1", bag="wardrobe4"},
  1068.         --back=gear.RDM_DW_Cape,
  1069.         }
  1070.  
  1071.     sets.engaged.MidAcc = set_combine(sets.engaged, {
  1072.         neck="Combatant's Torque",
  1073.         --ring1={name="Chirich Ring +1", bag="wardrobe3"},
  1074.         --waist="Kentarch Belt +1",
  1075.         })
  1076.  
  1077.     sets.engaged.HighAcc = set_combine(sets.engaged, {
  1078.         ammo="Voluspa Tathlum",
  1079.         --head="Carmine Mask +1",
  1080.         --body="Carm. Sc. Mail +1",
  1081.         --hands="Gazu Bracelet +1",
  1082.         --legs="Carmine Cuisses +1",
  1083.         neck="Combatant's Torque",
  1084.         --ear1="Cessance Earring",
  1085.         --ear2="Mache Earring +1",
  1086.         --ring1={name="Chirich Ring +1", bag="wardrobe3"},
  1087.         --waist="Olseni Belt",
  1088.         })
  1089.  
  1090.     -- No Magic Haste (74% DW to cap)
  1091.     sets.engaged.DW = set_combine(sets.engaged, {
  1092.         --ammo="Aurgelmir Orb +1",
  1093.         head="Malignance Chapeau",
  1094.         body="Malignance Tabard",
  1095.         --hands="Malignance Gloves",
  1096.         --legs="Carmine Cuisses +1", --6
  1097.         --feet=gear.Taeon_DW_feet, --9
  1098.         --neck="Anu Torque",
  1099.         --ear1="Eabani Earring", --4
  1100.         --ear2="Suppanomimi", --5
  1101.         --ring1="Hetairoi Ring",
  1102.         --ring2={name="Chirich Ring +1", bag="wardrobe4"},
  1103.         back=Cape.DW, --10
  1104.         --waist="Reiki Yotai", --7
  1105.         }) --41
  1106.  
  1107.     sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW, {
  1108.         neck="Combatant's Torque",
  1109.         --ring1={name="Chirich Ring +1", bag="wardrobe3"},
  1110.         })
  1111.  
  1112.     sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW.MidAcc, {
  1113.         ammo="Voluspa Tathlum",
  1114.         --head="Carmine Mask +1",
  1115.         --body="Carm. Sc. Mail +1",
  1116.         --hands="Gazu Bracelet +1",
  1117.         --ear1="Cessance Earring",
  1118.         --ear2="Mache Earring +1",
  1119.         })
  1120.  
  1121.     -- 15% Magic Haste (67% DW to cap)
  1122.     sets.engaged.DW.LowHaste = set_combine(sets.engaged.DW, {
  1123.         --ammo="Aurgelmir Orb +1",
  1124.         --head="Malignance Chapeau",
  1125.         --body="Malignance Tabard",
  1126.         --hands="Malignance Gloves",
  1127.         legs="Carmine Cuisses +1", --6
  1128.         --feet=gear.Taeon_DW_feet, --9
  1129.         --neck="Anu Torque",
  1130.         ear1="Eabani Earring", --4
  1131.         ear2="Suppanomimi", --5
  1132.         --ring1="Hetairoi Ring",
  1133.         --ring2={name="Chirich Ring +1", bag="wardrobe4"},
  1134.         --back=gear.RDM_DW_Cape, --10
  1135.         --waist="Reiki Yotai", --7
  1136.         }) --41
  1137.  
  1138.     sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, {
  1139.         neck="Combatant's Torque",
  1140.         --ring1={name="Chirich Ring +1", bag="wardrobe3"},
  1141.         })
  1142.  
  1143.     sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, {
  1144.         ammo="Voluspa Tathlum",
  1145.         --head="Carmine Mask +1",
  1146.         --body="Carm. Sc. Mail +1",
  1147.         --hands="Gazu Bracelet +1",
  1148.         --ear1="Cessance Earring",
  1149.         --ear2="Mache Earring +1",
  1150.         })
  1151.  
  1152.     -- 30% Magic Haste (56% DW to cap)
  1153.     sets.engaged.DW.MidHaste = set_combine(sets.engaged.DW, {
  1154.         --ammo="Aurgelmir Orb +1",
  1155.         --head="Malignance Chapeau",
  1156.         body="Malignance Tabard",
  1157.         --hands="Malignance Gloves",
  1158.         legs="Malignance Tights",
  1159.         --feet=gear.Taeon_DW_feet, --9
  1160.         neck="Anu Torque",
  1161.         ear1="Sherida Earring",
  1162.         ear2="Suppanomimi", --5
  1163.         --ring1="Hetairoi Ring",
  1164.         --ring2={name="Chirich Ring +1", bag="wardrobe4"},
  1165.         --back=gear.RDM_DW_Cape, --10
  1166.         --waist="Reiki Yotai", --7
  1167.         }) --31
  1168.  
  1169.     sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, {
  1170.         legs="Carmine Cuisses +1", --6
  1171.         neck="Combatant's Torque",
  1172.         --ring1={name="Chirich Ring +1", bag="wardrobe3"},
  1173.         --ear2="Telos Earring",
  1174.         })
  1175.  
  1176.     sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, {
  1177.         ammo="Voluspa Tathlum",
  1178.         --head="Carmine Mask +1",
  1179.         --body="Carm. Sc. Mail +1",
  1180.         --hands="Gazu Bracelet +1",
  1181.         --ear1="Cessance Earring",
  1182.         --ear2="Mache Earring +1",
  1183.         })
  1184.  
  1185.     -- 35% Magic Haste (51% DW to cap)
  1186.     sets.engaged.DW.HighHaste = set_combine(sets.engaged.DW, {
  1187.         --ammo="Aurgelmir Orb +1",
  1188.         --head="Malignance Chapeau",
  1189.         --body="Malignance Tabard",
  1190.         --hands="Malignance Gloves",
  1191.         --legs="Malignance Tights",
  1192.         --feet=gear.Taeon_DW_feet, --9
  1193.         --neck="Anu Torque",
  1194.         --ear1="Sherida Earring",
  1195.         --ear2="Telos Earring",
  1196.         --ring1="Hetairoi Ring",
  1197.         --ring2={name="Chirich Ring +1", bag="wardrobe4"},
  1198.         --back=gear.RDM_DW_Cape, --10
  1199.         --waist="Reiki Yotai", --7
  1200.       }) --26
  1201.  
  1202.     sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, {
  1203.         legs="Carmine Cuisses +1", --6
  1204.         neck="Combatant's Torque",
  1205.         --ring1={name="Chirich Ring +1", bag="wardrobe3"},
  1206.         })
  1207.  
  1208.     sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, {
  1209.         ammo="Voluspa Tathlum",
  1210.         --head="Carmine Mask +1",
  1211.         --body="Carm. Sc. Mail +1",
  1212.         --hands="Gazu Bracelet +1",
  1213.         --ear1="Cessance Earring",
  1214.         --ear2="Mache Earring +1",
  1215.         })
  1216.  
  1217.     -- 45% Magic Haste (36% DW to cap)
  1218.     sets.engaged.DW.MaxHaste = set_combine(sets.engaged.DW, {
  1219.         --ammo="Aurgelmir Orb +1",
  1220.        -- head="Malignance Chapeau",
  1221.         --body="Malignance Tabard",
  1222.         --hands="Malignance Gloves",
  1223.         --legs="Malignance Tights",
  1224.        -- feet="Malignance Boots",
  1225.        -- neck="Anu Torque",
  1226.        -- ear1="Sherida Earring",
  1227.         --ear2="Telos Earring",
  1228.         --ring1="Hetairoi Ring",
  1229.         --ring2={name="Chirich Ring +1", bag="wardrobe4"},
  1230.         --back=gear.RDM_DW_Cape, --10
  1231.         --waist="Windbuffet Belt +1",
  1232.         }) --10
  1233.  
  1234.     sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, {
  1235.         neck="Combatant's Torque",
  1236.         --ring1={name="Chirich Ring +1", bag="wardrobe3"},
  1237.         --waist="Kentarch Belt +1",
  1238.         })
  1239.  
  1240.     sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {
  1241.         ammo="Voluspa Tathlum",
  1242.         --head="Carmine Mask +1",
  1243.         --body="Carm. Sc. Mail +1",
  1244.         --hands="Gazu Bracelet +1",
  1245.         legs="Carmine Cuisses +1",
  1246.         --ear1="Cessance Earring",
  1247.         --ear2="Mache Earring +1",
  1248.         --waist="Olseni Belt",
  1249.         })
  1250.  
  1251.  
  1252.     ------------------------------------------------------------------------------------------------
  1253.     ---------------------------------------- Hybrid Sets -------------------------------------------
  1254.     ------------------------------------------------------------------------------------------------
  1255.  
  1256.     sets.engaged.Hybrid = {
  1257.        --neck="Loricate Torque +1", --6/6
  1258.        ring2="Defending Ring", --10/10
  1259.        }
  1260.  
  1261.     sets.engaged.DT = set_combine(sets.engaged, sets.engaged.Hybrid)
  1262.     sets.engaged.MidAcc.DT = set_combine(sets.engaged.MidAcc, sets.engaged.Hybrid)
  1263.     sets.engaged.HighAcc.DT = set_combine(sets.engaged.HighAcc, sets.engaged.Hybrid)
  1264.  
  1265.     sets.engaged.DW.DT = set_combine(sets.engaged.DW, sets.engaged.Hybrid)
  1266.     sets.engaged.DW.MidAcc.DT = set_combine(sets.engaged.DW.MidAcc, sets.engaged.Hybrid)
  1267.     sets.engaged.DW.HighAcc.DT = set_combine(sets.engaged.DW.HighAcc, sets.engaged.Hybrid)
  1268.  
  1269.     sets.engaged.DW.DT.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Hybrid)
  1270.     sets.engaged.DW.MidAcc.DT.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.Hybrid)
  1271.     sets.engaged.DW.HighAcc.DT.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.Hybrid)
  1272.  
  1273.     sets.engaged.DW.DT.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Hybrid)
  1274.     sets.engaged.DW.MidAcc.DT.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.Hybrid)
  1275.     sets.engaged.DW.HighAcc.DT.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.Hybrid)
  1276.  
  1277.     sets.engaged.DW.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Hybrid)
  1278.     sets.engaged.DW.MidAcc.DT.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.Hybrid)
  1279.     sets.engaged.DW.HighAcc.DT.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.Hybrid)
  1280.  
  1281.     sets.engaged.DW.DT.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.Hybrid)
  1282.     sets.engaged.DW.MidAcc.DT.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.Hybrid)
  1283.     sets.engaged.DW.HighAcc.DT.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.Hybrid)
  1284.  
  1285.     sets.engaged.Enspell = {
  1286.         hands="Aya. Manopolas +1",
  1287.         neck="Duelist Torque",
  1288.         --waist="Orpheus's Sash",
  1289.         }
  1290.  
  1291.     sets.engaged.Enspell.Fencer = {ring1="Fencer's Ring"}
  1292.  
  1293.  
  1294.     ------------------------------------------------------------------------------------------------
  1295.     ---------------------------------------- Special Sets ------------------------------------------
  1296.     ------------------------------------------------------------------------------------------------
  1297.  
  1298.     sets.buff.Doom = {
  1299.         neck="Nicander's Necklace", --20
  1300.         ring1={name="Eshmun's Ring", bag="wardrobe3"}, --20
  1301.         ring2={name="Eshmun's Ring", bag="wardrobe4"}, --20
  1302.         waist="Gishdubar Sash", --10
  1303.         }
  1304.  
  1305.     sets.Obi = {waist="Hachirin-no-Obi"}
  1306.     sets.CP = {back="Mecisto. Mantle"}
  1307.  
  1308.     sets.TreasureHunter = {head="White Rarab Cap +1", waist="Chaac Belt"}
  1309.  
  1310.     sets.CroceaDark = {main="Crocea Mors", sub="Ternion Dagger +1"}
  1311.     sets.CroceaLight = {main="Crocea Mors", sub="Daybreak"}
  1312.     sets.Almace = {main="Almace", sub="Ternion Dagger +1"}
  1313.     sets.Naegling = {main="Kaja Sword", sub="Thibron"}
  1314.     sets.Tauret = {main="Tauret", sub="Ternion Dagger +1"}
  1315.     sets.Idle = {main="Daybreak", sub="Genbu Shield"
  1316.         --main="Daybreak", sub="Sacro Bulwark"
  1317.         }
  1318.  
  1319. end
  1320.  
  1321. -------------------------------------------------------------------------------------------------------------------
  1322. -- Job-specific hooks for standard casting events.
  1323. -------------------------------------------------------------------------------------------------------------------
  1324.  
  1325. function job_precast(spell, action, spellMap, eventArgs)
  1326.     if spellMap == 'Utsusemi' then
  1327.         if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
  1328.             cancel_spell()
  1329.             add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
  1330.             eventArgs.handled = true
  1331.             return
  1332.         elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
  1333.             send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
  1334.         end
  1335.     end
  1336.     if spell.type:lower() == "weaponskill" and SkillchainPending == true then          
  1337.         if (os.time() - SkillchainTimer) <= 20 and AllowSkillchainGear == true then
  1338.                 equip(sets.SCDmg)          
  1339.             end                            
  1340.         else
  1341.             SkillchainPending = false
  1342.     end  
  1343. end
  1344.  
  1345. function job_post_precast(spell, action, spellMap, eventArgs)
  1346.     if spell.name == 'Impact' then
  1347.         equip(sets.precast.FC.Impact)
  1348.     end
  1349.     if spell.english == "Phalanx II" and spell.target.type == 'SELF' then
  1350.         cancel_spell()
  1351.         send_command('@input /ma "Phalanx" <me>')
  1352.     end
  1353. end
  1354.  
  1355. -- Run after the default midcast() is done.
  1356. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
  1357. function job_post_midcast(spell, action, spellMap, eventArgs)
  1358.     if spell.skill == 'Enhancing Magic' then
  1359.         if classes.NoSkillSpells:contains(spell.english) then
  1360.             equip(sets.midcast.EnhancingDuration)
  1361.             if spellMap == 'Refresh' then
  1362.                 equip(sets.midcast.Refresh)
  1363.                 if spell.target.type == 'SELF' then
  1364.                     equip (sets.midcast.RefreshSelf)
  1365.               end
  1366.             end
  1367.         elseif skill_spells:contains(spell.english) then
  1368.             equip(sets.midcast.EnhancingSkill)
  1369.         elseif spell.english:startswith('Gain') then
  1370.             equip(sets.midcast.GainSpell)
  1371.         elseif spell.english:contains('Spikes') then
  1372.             equip(sets.midcast.SpikesSpell)
  1373.         end
  1374.         if (spell.target.type == 'PLAYER' or spell.target.type == 'NPC') and buffactive.Composure then
  1375.             equip(sets.buff.ComposureOther)
  1376.         end
  1377.     end
  1378.     if spellMap == 'Cure' and spell.target.type == 'SELF' then
  1379.         equip(sets.midcast.CureSelf)
  1380.     end
  1381.     if spell.skill == 'Elemental Magic' then
  1382.         if state.MagicBurst.value and spell.english ~= 'Death' then
  1383.             equip(sets.magic_burst)
  1384.             if spell.english == "Impact" then
  1385.                 equip(sets.midcast.Impact)
  1386.             end
  1387.         end
  1388.         if spell.skill == 'Elemental Magic' or spell.english == "Kaustra" then
  1389.             if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
  1390.                 equip(sets.Obi)
  1391.             -- Target distance under 1.7 yalms.
  1392.             elseif spell.target.distance < (1.7 + spell.target.model_size) then
  1393.                 equip({waist="Orpheus's Sash"})
  1394.             -- Matching day and weather.
  1395.             elseif spell.element == world.day_element and spell.element == world.weather_element then
  1396.                 equip(sets.Obi)
  1397.             -- Target distance under 8 yalms.
  1398.             elseif spell.target.distance < (8 + spell.target.model_size) then
  1399.                 equip({waist="Orpheus's Sash"})
  1400.             -- Match day or weather.
  1401.             elseif spell.element == world.day_element or spell.element == world.weather_element then
  1402.                 equip(sets.Obi)
  1403.             end
  1404.         end
  1405.     end
  1406. end
  1407.  
  1408. function job_aftercast(spell, action, spellMap, eventArgs)
  1409.     if spell.english:contains('Sleep') and not spell.interrupted then
  1410.         set_sleep_timer(spell)
  1411.     end
  1412.     if player.status ~= 'Engaged' and state.WeaponLock.value == false then
  1413.         check_weaponset()
  1414.     end
  1415.     if not spell.interrupted then
  1416.         if spell.type == "WeaponSkill" then
  1417.             SkillchainPending = true
  1418.             SkillchainTimer = os.time()  
  1419.         end
  1420.     end
  1421. end
  1422.  
  1423. -------------------------------------------------------------------------------------------------------------------
  1424. -- Job-specific hooks for non-casting events.
  1425. -------------------------------------------------------------------------------------------------------------------
  1426.  
  1427. function job_buff_change(buff,gain)
  1428.     if buff == "doom" then
  1429.         if gain then
  1430.             equip(sets.buff.Doom)
  1431.             send_command('@input /p Doomed.')
  1432.              disable('ring1','ring2','waist')
  1433.         else
  1434.             enable('ring1','ring2','waist')
  1435.             handle_equipping_gear(player.status)
  1436.         end
  1437.     end
  1438. end
  1439.  
  1440. -- Handle notifications of general user state change.
  1441. function job_state_change(stateField, newValue, oldValue)
  1442.     if state.WeaponLock.value == true then
  1443.         disable('main','sub','range')
  1444.     else
  1445.         enable('main','sub','range')
  1446.     end
  1447.  
  1448.     check_weaponset()
  1449. end
  1450.  
  1451. -------------------------------------------------------------------------------------------------------------------
  1452. -- User code that supplements standard library decisions.
  1453. -------------------------------------------------------------------------------------------------------------------
  1454.  
  1455. -- Called by the 'update' self-command, for common needs.
  1456. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  1457. function job_handle_equipping_gear(playerStatus, eventArgs)
  1458.     check_gear()
  1459.     update_combat_form()
  1460.     determine_haste_group()
  1461.     check_moving()
  1462. end
  1463.  
  1464. function job_update(cmdParams, eventArgs)
  1465.     handle_equipping_gear(player.status)
  1466. end
  1467.  
  1468. function update_combat_form()
  1469.     if DW == true then
  1470.         state.CombatForm:set('DW')
  1471.     elseif DW == false then
  1472.         state.CombatForm:reset()
  1473.     end
  1474. end
  1475.  
  1476. -- Custom spell mapping.
  1477. function job_get_spell_map(spell, default_spell_map)
  1478.     if spell.action_type == 'Magic' then
  1479.         if default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
  1480.             if (world.weather_element == 'Light' or world.day_element == 'Light') then
  1481.                 return 'CureWeather'
  1482.             end
  1483.         end
  1484.         if spell.skill == 'Enfeebling Magic' then
  1485.             if enfeebling_magic_skill:contains(spell.english) then
  1486.                 return "SkillEnfeebles"
  1487.             elseif spell.type == "WhiteMagic" then
  1488.                 if enfeebling_magic_acc:contains(spell.english) and not buffactive.Stymie then
  1489.                     return "MndEnfeeblesAcc"
  1490.                 elseif enfeebling_magic_effect:contains(spell.english) then
  1491.                     return "MndEnfeeblesEffect"
  1492.                 else
  1493.                     return "MndEnfeebles"
  1494.               end
  1495.             elseif spell.type == "BlackMagic" then
  1496.                 if enfeebling_magic_acc:contains(spell.english) and not buffactive.Stymie then
  1497.                     return "IntEnfeeblesAcc"
  1498.                 elseif enfeebling_magic_effect:contains(spell.english) then
  1499.                     return "IntEnfeeblesEffect"
  1500.                 elseif enfeebling_magic_sleep:contains(spell.english) and ((buffactive.Stymie and buffactive.Composure) or state.SleepMode.value == 'MaxDuration') then
  1501.                     return "SleepMaxDuration"
  1502.                 elseif enfeebling_magic_sleep:contains(spell.english) then
  1503.                     return "Sleep"
  1504.                 else
  1505.                     return "IntEnfeebles"
  1506.                 end
  1507.             else
  1508.                 return "MndEnfeebles"
  1509.             end
  1510.         end
  1511.     end
  1512. end
  1513.  
  1514. function get_custom_wsmode(spell, action, spellMap)
  1515.     local wsmode
  1516.     if state.OffenseMode.value == 'MidAcc' or state.OffenseMode.value == 'HighAcc' then
  1517.         wsmode = 'Acc'
  1518.     end
  1519.  
  1520.     return wsmode
  1521. end
  1522.  
  1523. -- Modify the default idle set after it was constructed.
  1524. function customize_idle_set(idleSet)
  1525.     if player.mpp < 51 then
  1526.         idleSet = set_combine(idleSet, sets.latent_refresh)
  1527.     end
  1528.      if state.CP.current == 'on' then
  1529.          equip(sets.CP)
  1530.          disable('back')
  1531.      else
  1532.          enable('back')
  1533.     end
  1534.  
  1535.     if state.Auto_Kite.value == true then
  1536.        idleSet = set_combine(idleSet, sets.Kiting)
  1537.     end
  1538.  
  1539.     return idleSet
  1540. end
  1541.  
  1542. function customize_melee_set(meleeSet)
  1543.     if state.EnspellMode.value == true then
  1544.         meleeSet = set_combine(meleeSet, sets.engaged.Enspell)
  1545.     end
  1546.     if state.EnspellMode.value == true and player.hpp <= 75 and player.tp < 1000 then
  1547.         meleeSet = set_combine(meleeSet, sets.engaged.Enspell.Fencer)
  1548.     end
  1549.     if state.TreasureMode.value == 'Fulltime' then
  1550.         meleeSet = set_combine(meleeSet, sets.TreasureHunter)
  1551.     end
  1552.  
  1553.     check_weaponset()
  1554.  
  1555.     return meleeSet
  1556. end
  1557.  
  1558. -- Modify the default melee set after it was constructed.
  1559. function customize_melee_set(meleeSet)
  1560.  
  1561.  
  1562.     return meleeSet
  1563. end
  1564.  
  1565. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  1566. function display_current_job_state(eventArgs)
  1567.     display_current_caster_state()
  1568.     eventArgs.handled = true
  1569. end
  1570.  
  1571. -- Function to display the current relevant user state when doing an update.
  1572. -- Return true if display was handled, and you don't want the default info shown.
  1573. function display_current_job_state(eventArgs)
  1574.     local cf_msg = ''
  1575.     if state.CombatForm.has_value then
  1576.         cf_msg = ' (' ..state.CombatForm.value.. ')'
  1577.     end
  1578.  
  1579.     local m_msg = state.OffenseMode.value
  1580.     if state.HybridMode.value ~= 'Normal' then
  1581.         m_msg = m_msg .. '/' ..state.HybridMode.value
  1582.     end
  1583.  
  1584.     local ws_msg = state.WeaponskillMode.value
  1585.  
  1586.     local c_msg = state.CastingMode.value
  1587.  
  1588.     local d_msg = 'None'
  1589.     if state.DefenseMode.value ~= 'None' then
  1590.         d_msg = state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value
  1591.     end
  1592.  
  1593.     local i_msg = state.IdleMode.value
  1594.  
  1595.     local msg = ''
  1596.     if state.MagicBurst.value then
  1597.         msg = ' Burst: On |'
  1598.     end
  1599.     if state.Kiting.value then
  1600.         msg = msg .. ' Kiting: On |'
  1601.     end
  1602.  
  1603.     add_to_chat(002, '| ' ..string.char(31,210).. 'Melee' ..cf_msg.. ': ' ..string.char(31,001)..m_msg.. string.char(31,002)..  ' |'
  1604.         ..string.char(31,207).. ' WS: ' ..string.char(31,001)..ws_msg.. string.char(31,002)..  ' |'
  1605.         ..string.char(31,060).. ' Magic: ' ..string.char(31,001)..c_msg.. string.char(31,002)..  ' |'
  1606.         ..string.char(31,004).. ' Defense: ' ..string.char(31,001)..d_msg.. string.char(31,002)..  ' |'
  1607.         ..string.char(31,008).. ' Idle: ' ..string.char(31,001)..i_msg.. string.char(31,002)..  ' |'
  1608.         ..string.char(31,002)..msg)
  1609.  
  1610.     eventArgs.handled = true
  1611. end
  1612.  
  1613. -------------------------------------------------------------------------------------------------------------------
  1614. -- Utility functions specific to this job.
  1615. -------------------------------------------------------------------------------------------------------------------
  1616.  
  1617. function determine_haste_group()
  1618.     classes.CustomMeleeGroups:clear()
  1619.     if DW == true then
  1620.         if DW_needed <= 14 then
  1621.             classes.CustomMeleeGroups:append('MaxHaste')
  1622.         elseif DW_needed > 15 and DW_needed <= 26 then
  1623.             classes.CustomMeleeGroups:append('HighHaste')
  1624.         elseif DW_needed > 26 and DW_needed <= 32 then
  1625.             classes.CustomMeleeGroups:append('MidHaste')
  1626.         elseif DW_needed > 32 and DW_needed <= 43 then
  1627.             classes.CustomMeleeGroups:append('LowHaste')
  1628.         elseif DW_needed > 43 then
  1629.             classes.CustomMeleeGroups:append('')
  1630.         end
  1631.     end
  1632. end
  1633.  
  1634. function gearinfo(cmdParams, eventArgs)
  1635.     if cmdParams[1] == 'gearinfo' then
  1636.         if type(tonumber(cmdParams[2])) == 'number' then
  1637.             if tonumber(cmdParams[2]) ~= DW_needed then
  1638.             DW_needed = tonumber(cmdParams[2])
  1639.             DW = true
  1640.             end
  1641.         elseif type(cmdParams[2]) == 'string' then
  1642.             if cmdParams[2] == 'false' then
  1643.                 DW_needed = 0
  1644.                 DW = false
  1645.             end
  1646.         end
  1647.         if type(tonumber(cmdParams[3])) == 'number' then
  1648.             if tonumber(cmdParams[3]) ~= Haste then
  1649.                 Haste = tonumber(cmdParams[3])
  1650.             end
  1651.         end
  1652.         if type(cmdParams[4]) == 'string' then
  1653.             if cmdParams[4] == 'true' then
  1654.                 moving = true
  1655.             elseif cmdParams[4] == 'false' then
  1656.                 moving = false
  1657.             end
  1658.         end
  1659.         if not midaction() then
  1660.             job_update()
  1661.         end
  1662.     end
  1663. end
  1664.  
  1665. function job_self_command(cmdParams, eventArgs)
  1666.     if cmdParams[1]:lower() == 'scholar' then
  1667.         handle_strategems(cmdParams)
  1668.         eventArgs.handled = true
  1669.     elseif cmdParams[1]:lower() == 'nuke' then
  1670.         handle_nuking(cmdParams)
  1671.         eventArgs.handled = true
  1672.     elseif cmdParams[1]:lower() == 'enspell' then
  1673.         send_command('@input /ma '..state.EnSpell.value..' <me>')
  1674.     elseif cmdParams[1]:lower() == 'barelement' then
  1675.         send_command('@input /ma '..state.BarElement.value..' <me>')
  1676.     elseif cmdParams[1]:lower() == 'barstatus' then
  1677.         send_command('@input /ma '..state.BarStatus.value..' <me>')
  1678.     elseif cmdParams[1]:lower() == 'gainspell' then
  1679.         send_command('@input /ma '..state.GainSpell.value..' <me>')
  1680.     end
  1681.    
  1682.     if cmdParams[1] == 'AllowSkillchainGear' then
  1683.         AllowSkillchainGear = not AllowSkillchainGear
  1684.         add_to_chat (56, 'Allow use of skillchain damage gear: ' ..tostring(AllowSkillchainGear))
  1685.     --Problematic code
  1686.     --elseif string.sub(command, 0, 4) == '-cd ' then    
  1687.         --add_to_chat (30, string.sub(command, 5, string.len(command)))  
  1688.     -----------------
  1689.     end
  1690.  
  1691.     gearinfo(cmdParams, eventArgs)
  1692. end
  1693.  
  1694.  
  1695. -- General handling of strategems in an Arts-agnostic way.
  1696. -- Format: gs c scholar <strategem>
  1697.  
  1698. function handle_strategems(cmdParams)
  1699.     -- cmdParams[1] == 'scholar'
  1700.     -- cmdParams[2] == strategem to use
  1701.  
  1702.     if not cmdParams[2] then
  1703.         add_to_chat(123,'Error: No strategem command given.')
  1704.         return
  1705.     end
  1706.     local strategem = cmdParams[2]:lower()
  1707.  
  1708.     if strategem == 'light' then
  1709.         if buffactive['light arts'] then
  1710.             send_command('input /ja "Addendum: White" <me>')
  1711.         elseif buffactive['addendum: white'] then
  1712.             add_to_chat(122,'Error: Addendum: White is already active.')
  1713.         else
  1714.             send_command('input /ja "Light Arts" <me>')
  1715.         end
  1716.     elseif strategem == 'dark' then
  1717.         if buffactive['dark arts'] then
  1718.             send_command('input /ja "Addendum: Black" <me>')
  1719.         elseif buffactive['addendum: black'] then
  1720.             add_to_chat(122,'Error: Addendum: Black is already active.')
  1721.         else
  1722.             send_command('input /ja "Dark Arts" <me>')
  1723.         end
  1724.     elseif buffactive['light arts'] or buffactive['addendum: white'] then
  1725.         if strategem == 'cost' then
  1726.             send_command('input /ja Penury <me>')
  1727.         elseif strategem == 'speed' then
  1728.             send_command('input /ja Celerity <me>')
  1729.         elseif strategem == 'aoe' then
  1730.             send_command('input /ja Accession <me>')
  1731.         elseif strategem == 'addendum' then
  1732.             send_command('input /ja "Addendum: White" <me>')
  1733.         else
  1734.             add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  1735.         end
  1736.     elseif buffactive['dark arts']  or buffactive['addendum: black'] then
  1737.         if strategem == 'cost' then
  1738.             send_command('input /ja Parsimony <me>')
  1739.         elseif strategem == 'speed' then
  1740.             send_command('input /ja Alacrity <me>')
  1741.         elseif strategem == 'aoe' then
  1742.             send_command('input /ja Manifestation <me>')
  1743.         elseif strategem == 'addendum' then
  1744.             send_command('input /ja "Addendum: Black" <me>')
  1745.         else
  1746.             add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  1747.         end
  1748.     else
  1749.         add_to_chat(123,'No arts has been activated yet.')
  1750.     end
  1751. end
  1752.  
  1753. function set_sleep_timer(spell)
  1754.     local self = windower.ffxi.get_player()
  1755.  
  1756.     if spell.en == "Sleep II" then
  1757.         base = 90
  1758.     elseif spell.en == "Sleep" or spell.en == "Sleepga" then
  1759.         base = 60
  1760.     end
  1761.  
  1762.     if state.Buff.Saboteur then
  1763.         if state.NM.value then
  1764.             base = base * 1.25
  1765.         else
  1766.             base = base * 2
  1767.         end
  1768.     end
  1769.  
  1770.     -- Merit Points Duration Bonus
  1771.     base = base + self.merits.enfeebling_magic_duration*6
  1772.  
  1773.     -- Relic Head Duration Bonus
  1774.     if not ((buffactive.Stymie and buffactive.Composure) or state.SleepMode.value == 'MaxDuration') then
  1775.         base = base + self.merits.enfeebling_magic_duration*3
  1776.     end
  1777.  
  1778.     -- Job Points Duration Bonus
  1779.     base = base + self.job_points.rdm.enfeebling_magic_duration
  1780.  
  1781.     --Enfeebling duration non-augmented gear total
  1782.     gear_mult = 1.40
  1783.     --Enfeebling duration augmented gear total
  1784.     aug_mult = 1.25
  1785.     --Estoquer/Lethargy Composure set bonus
  1786.     --2pc = 1.1 / 3pc = 1.2 / 4pc = 1.35 / 5pc = 1.5
  1787.     empy_mult = 1 --from sets.midcast.Sleep
  1788.  
  1789.     if ((buffactive.Stymie and buffactive.Composure) or state.SleepMode.value == 'MaxDuration') then
  1790.         if buffactive.Stymie then
  1791.             base = base + self.job_points.rdm.stymie_effect
  1792.         end
  1793.         empy_mult = 1.35 --from sets.midcast.SleepMaxDuration
  1794.     end
  1795.  
  1796.     totalDuration = math.floor(base * gear_mult * aug_mult * empy_mult)
  1797.  
  1798.     -- Create the custom timer
  1799.     if spell.english == "Sleep II" then
  1800.         send_command('@timers c "Sleep II ['..spell.target.name..']" ' ..totalDuration.. ' down spells/00259.png')
  1801.     elseif spell.english == "Sleep" or spell.english == "Sleepga" then
  1802.         send_command('@timers c "Sleep ['..spell.target.name..']" ' ..totalDuration.. ' down spells/00253.png')
  1803.     end
  1804.     add_to_chat(1, 'Base: ' ..base.. ' Merits: ' ..self.merits.enfeebling_magic_duration.. ' Job Points: ' ..self.job_points.rdm.stymie_effect.. ' Set Bonus: ' ..empy_mult)
  1805.  
  1806. end
  1807.  
  1808. -- Check for various actions that we've specified in user code as being used with TH gear.
  1809. -- This will only ever be called if TreasureMode is not 'None'.
  1810. -- Category and Param are as specified in the action event packet.
  1811. function th_action_check(category, param)
  1812.     if category == 2 or -- any ranged attack
  1813.         --category == 4 or -- any magic action
  1814.         (category == 3 and param == 30) or -- Aeolian Edge
  1815.         (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
  1816.         (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
  1817.         then return true
  1818.     end
  1819. end
  1820.  
  1821. function check_moving()
  1822.     if state.DefenseMode.value == 'None'  and state.Kiting.value == false then
  1823.         if state.Auto_Kite.value == false and moving then
  1824.             state.Auto_Kite:set(true)
  1825.         elseif state.Auto_Kite.value == true and moving == false then
  1826.             state.Auto_Kite:set(false)
  1827.         end
  1828.     end
  1829. end
  1830.  
  1831. function check_gear()
  1832.     if no_swap_gear:contains(player.equipment.left_ring) then
  1833.         disable("ring1")
  1834.     else
  1835.         enable("ring1")
  1836.     end
  1837.     if no_swap_gear:contains(player.equipment.right_ring) then
  1838.         disable("ring2")
  1839.     else
  1840.         enable("ring2")
  1841.     end
  1842. end
  1843.  
  1844. function check_weaponset()
  1845.     equip(sets[state.WeaponSet.current])
  1846.     if player.sub_job ~= 'NIN' and player.sub_job ~= 'DNC' then
  1847.        equip(sets.DefaultShield)
  1848.     end
  1849. end
  1850.  
  1851. windower.register_event('zone change',
  1852.     function()
  1853.         if no_swap_gear:contains(player.equipment.left_ring) then
  1854.             enable("ring1")
  1855.             equip(sets.idle)
  1856.         end
  1857.         if no_swap_gear:contains(player.equipment.right_ring) then
  1858.             enable("ring2")
  1859.             equip(sets.idle)
  1860.         end
  1861.     end
  1862. )
  1863.  
  1864. function refine_various_spells(spell, action, spellMap, eventArgs)
  1865.  
  1866.     local newSpell = spell.english
  1867.     local spell_recasts = windower.ffxi.get_spell_recasts()
  1868.     local cancelling = 'All '..spell.english..' are on cooldown. Cancelling.'
  1869.  
  1870.     local spell_index
  1871.  
  1872.     if spell_recasts[spell.recast_id] > 0 then
  1873.         if spell.skill == 'Elemental Magic' and spellMap ~= 'RdmElem' then
  1874.             spell_index = table.find(degrade_array[spell.element],spell.name)
  1875.             if spell_index > 1 then
  1876.                 newSpell = degrade_array[spell.element][spell_index - 1]
  1877.                 send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
  1878.                 eventArgs.cancel = true
  1879.             end
  1880.         elseif spell.name:startswith('Aspir') then
  1881.             spell_index = table.find(degrade_array['Aspirs'],spell.name)
  1882.             if spell_index > 1 then
  1883.                 newSpell = degrade_array['Aspirs'][spell_index - 1]
  1884.                 send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
  1885.                 eventArgs.cancel = true
  1886.             end
  1887.         end
  1888.     end
  1889. end
  1890.  
  1891. -- Select default macro book on initial load or subjob change.
  1892. function select_default_macro_book()
  1893.     -- Default macro set/book
  1894.     set_macro_page(1, 7)
  1895. end
  1896.  
  1897. function set_lockstyle()
  1898.     send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  1899. end
  1900.  
  1901. ----------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement