Advertisement
Zylakitty

BLU.lua

Mar 3rd, 2019
480
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 50.13 KB | None | 0 0
  1. -- Original: Motenten / Modified: Arislan
  2.  
  3. -------------------------------------------------------------------------------------------------------------------
  4. --  Keybinds
  5. -------------------------------------------------------------------------------------------------------------------
  6.  
  7. --  Modes:      [ F9 ]              Cycle Offense Modes
  8. --              [ CTRL+F9 ]         Cycle Hybrid Modes
  9. --              [ WIN+F9 ]          Cycle Weapon Skill Modes
  10. --              [ F10 ]             Emergency -PDT Mode
  11. --              [ ALT+F10 ]         Toggle Kiting Mode
  12. --              [ F11 ]             Emergency -MDT Mode
  13. --              [ F12 ]             Update Current Gear / Report Current Status
  14. --              [ CTRL+F12 ]        Cycle Idle Modes
  15. --              [ ALT+F12 ]         Cancel Emergency -PDT/-MDT Mode
  16. --              [ WIN+C ]           Toggle Capacity Points Mode
  17. --
  18. --  Abilities:  [ CTRL+- ]          Chain Affinity
  19. --              [ CTRL+= ]          Burst Affinity
  20. --              [ ALT+- ]           Efflux
  21. --              [ CTRL+[ ]          Diffusion
  22. --              [ CTRL+] ]          Unbridled Learning
  23. --              [ CTRL+Numpad/ ]    Berserk
  24. --              [ CTRL+Numpad* ]    Warcry
  25. --              [ CTRL+Numpad- ]    Aggressor
  26. --
  27. --  Spells:     [ CTRL+` ]          Blank Gaze
  28. --              [ ALT+Q ]           Nature's Meditation
  29. --              [ ALT+W ]           Erratic Flutter
  30. --              [ ALT+R ]           Battery Charge/Refresh
  31. --              [ ALT+E ]           Occultation
  32. --              [ ALT+Y ]           Barrier Tusk/Phalanx
  33. --              [ ALT+U ]           Diamondhide/Stoneskin
  34. --              [ ALT+] ]           Carcharian Verve
  35. --              [ ALT+[ ]           Mighty Guard
  36. --              [ ALT+. ]           Sneak
  37. --              [ ALT+, ]           Invisible/Spectral Jig
  38. --              [ ALT+Numpad+ ]     Utsusemi: Ichi
  39. --              [ CTRL+Numpad+ ]    Utsusemi: Ni
  40. --
  41. --  Items:      [ ALT+. ]           Silent Oil
  42. --              [ ALT+, ]           Prism Powder
  43. --
  44. --  WS:         [ CTRL+Numpad7 ]    Sanguine Blade
  45. --              [ CTRL+Numpad8 ]    Chant Du Cygne
  46. --              [ CTRL+Numpad9 ]    Savage Blade
  47. --              [ CTRL+Numpad4 ]    Requiescat
  48. --              [ CTRL+Numpad5 ]    Expiacion
  49. --              [ CTRL+Numpad1 ]    Fast Blade
  50. --              [ CTRL+Numpad2 ]    Burning Blade
  51. --              [ CTRL+Numpad3 ]    Red Lotus Blade
  52. --
  53. --
  54.  
  55. --------------------------------------------------------------------------------------------------------------------
  56. -- Setup functions for this job.  Generally should not be modified.
  57. -------------------------------------------------------------------------------------------------------------------
  58.  
  59. -- Initialization function for this job file.
  60. function get_sets()
  61.     mote_include_version = 2
  62.  
  63.     -- Load and initialize the include file.
  64.     include('Mote-Include.lua')
  65. end
  66.  
  67. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  68. function job_setup()
  69.     state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
  70.     state.Buff['Chain Affinity'] = buffactive['Chain Affinity'] or false
  71.     state.Buff.Convergence = buffactive.Convergence or false
  72.     state.Buff.Diffusion = buffactive.Diffusion or false
  73.     state.Buff.Efflux = buffactive.Efflux or false
  74.    
  75.     state.Buff['Unbridled Learning'] = buffactive['Unbridled Learning'] or false
  76.     blue_magic_maps = {}
  77.    
  78.     -- Mappings for gear sets to use for various blue magic spells.
  79.     -- While Str isn't listed for each, it's generally assumed as being at least
  80.     -- moderately signficant, even for spells with other mods.
  81.  
  82.     -- Physical spells with no particular (or known) stat mods
  83.     blue_magic_maps.Physical = S{'Bilgestorm'}
  84.  
  85.     -- Spells with heavy accuracy penalties, that need to prioritize accuracy first.
  86.     blue_magic_maps.PhysicalAcc = S{'Heavy Strike'}
  87.  
  88.     -- Physical spells with Str stat mod
  89.     blue_magic_maps.PhysicalStr = S{'Battle Dance','Bloodrake','Death Scissors','Dimensional Death',
  90.         'Empty Thrash','Quadrastrike','Saurian Slide','Sinker Drill','Spinal Cleave','Sweeping Gouge',
  91.         'Uppercut','Vertical Cleave'}
  92.  
  93.     -- Physical spells with Dex stat mod
  94.     blue_magic_maps.PhysicalDex = S{'Amorphic Spikes','Asuran Claws','Barbed Crescent','Claw Cyclone',
  95.         'Disseverment','Foot Kick','Frenetic Rip','Goblin Rush','Hysteric Barrage','Paralyzing Triad',
  96.         'Seedspray','Sickle Slash','Smite of Rage','Terror Touch','Thrashing Assault','Vanity Dive'}
  97.  
  98.     -- Physical spells with Vit stat mod
  99.     blue_magic_maps.PhysicalVit = S{'Body Slam','Cannonball','Delta Thrust','Glutinous Dart','Grand Slam',
  100.         'Power Attack','Quad. Continuum','Sprout Smack','Sub-zero Smash'}
  101.  
  102.     -- Physical spells with Agi stat mod
  103.     blue_magic_maps.PhysicalAgi = S{'Benthic Typhoon','Feather Storm','Helldive','Hydro Shot','Jet Stream',
  104.         'Pinecone Bomb','Spiral Spin','Wild Oats'}
  105.  
  106.     -- Physical spells with Int stat mod
  107.     blue_magic_maps.PhysicalInt = S{'Mandibular Bite','Queasyshroom'}
  108.  
  109.     -- Physical spells with Mnd stat mod
  110.     blue_magic_maps.PhysicalMnd = S{'Ram Charge','Screwdriver','Tourbillion'}
  111.  
  112.     -- Physical spells with Chr stat mod
  113.     blue_magic_maps.PhysicalChr = S{'Bludgeon'}
  114.  
  115.     -- Physical spells with HP stat mod
  116.     blue_magic_maps.PhysicalHP = S{'Final Sting'}
  117.  
  118.     -- Magical spells with the typical Int mod
  119.     blue_magic_maps.Magical = S{'Anvil Lightning','Blastbomb','Blazing Bound','Bomb Toss','Cursed Sphere',
  120.         'Droning Whirlwind','Embalming Earth','Entomb','Firespit','Foul Waters','Ice Break','Leafstorm',
  121.         'Maelstrom','Molting Plumage','Nectarous Deluge','Regurgitation','Rending Deluge','Scouring Spate',
  122.         'Silent Storm','Spectral Floe','Subduction','Tem. Upheaval','Water Bomb'}
  123.    
  124.     blue_magic_maps.MagicalDark = S{'Dark Orb','Death Ray','Eyes On Me','Evryone. Grudge','Palling Salvo',
  125.         'Tenebral Crush'}
  126.        
  127.     blue_magic_maps.MagicalLight = S{'Blinding Fulgor','Diffusion Ray','Radiant Breath','Rail Cannon',
  128.         'Retinal Glare'}
  129.  
  130.     -- Magical spells with a primary Mnd mod
  131.     blue_magic_maps.MagicalMnd = S{'Acrid Stream','Magic Hammer','Mind Blast'}
  132.  
  133.     -- Magical spells with a primary Chr mod
  134.     blue_magic_maps.MagicalChr = S{'Mysterious Light'}
  135.  
  136.     -- Magical spells with a Vit stat mod (on top of Int)
  137.     blue_magic_maps.MagicalVit = S{'Thermal Pulse'}
  138.  
  139.     -- Magical spells with a Dex stat mod (on top of Int)
  140.     blue_magic_maps.MagicalDex = S{'Charged Whisker','Gates of Hades'}
  141.  
  142.     -- Magical spells (generally debuffs) that we want to focus on magic accuracy over damage.
  143.     -- Add Int for damage where available, though.
  144.     blue_magic_maps.MagicAccuracy = S{'1000 Needles','Absolute Terror','Actinic Burst','Atra. Libations',
  145.         'Auroral Drape','Awful Eye', 'Blank Gaze','Blistering Roar','Blood Saber','Chaotic Eye',
  146.         'Cimicine Discharge','Cold Wave','Corrosive Ooze','Demoralizing Roar','Digest','Dream Flower',
  147.         'Enervation','Feather Tickle','Filamented Hold','Frightful Roar','Geist Wall','Hecatomb Wave',
  148.         'Infrasonics','Jettatura','Light of Penance','Lowing','Mind Blast','Mortal Ray','MP Drainkiss',
  149.         'Osmosis','Reaving Wind','Sandspin','Sandspray','Sheep Song','Soporific','Sound Blast',
  150.         'Stinking Gas','Sub-zero Smash','Venom Shell','Voracious Trunk','Yawn'}
  151.  
  152.     -- Breath-based spells
  153.     blue_magic_maps.Breath = S{'Bad Breath','Flying Hip Press','Frost Breath','Heat Breath','Hecatomb Wave',
  154.         'Magnetite Cloud','Poison Breath','Self-Destruct','Thunder Breath','Vapor Spray','Wind Breath'}
  155.  
  156.     -- Stun spells
  157.     blue_magic_maps.Stun = S{'Blitzstrahl','Frypan','Head Butt','Sudden Lunge','Tail slap','Temporal Shift',
  158.         'Thunderbolt','Whirl of Rage'}
  159.    
  160.     -- Healing spells
  161.     blue_magic_maps.Healing = S{'Healing Breeze','Magic Fruit','Plenilune Embrace','Pollen','Restoral',
  162.         'White Wind','Wild Carrot'}
  163.  
  164.     -- Buffs that depend on blue magic skill
  165.     blue_magic_maps.SkillBasedBuff = S{'Barrier Tusk','Diamondhide','Magic Barrier','Metallic Body',
  166.         'Plasma Charge','Pyric Bulwark','Reactor Cool','Occultation'}
  167.  
  168.     -- Other general buffs
  169.     blue_magic_maps.Buff = S{'Amplification','Animating Wail','Carcharian Verve','Cocoon',
  170.         'Erratic Flutter','Exuviation','Fantod','Feather Barrier','Harden Shell','Memento Mori',
  171.         'Nat. Meditation','Orcish Counterstance','Refueling','Regeneration','Saline Coat','Triumphant Roar',
  172.         'Warm-Up','Winds of Promyvion','Zephyr Mantle'}
  173.    
  174.     blue_magic_maps.Refresh = S{'Battery Charge'}
  175.  
  176.     -- Spells that require Unbridled Learning to cast.
  177.     unbridled_spells = S{'Absolute Terror','Bilgestorm','Blistering Roar','Bloodrake','Carcharian Verve','Cesspool',
  178.         'Crashing Thunder','Cruel Joke','Droning Whirlwind','Gates of Hades','Harden Shell','Mighty Guard',
  179.         'Polar Roar','Pyric Bulwark','Tearing Gust','Thunderbolt','Tourbillion','Uproot'}
  180.  
  181.        
  182.     state.CP = M(false, "Capacity Points Mode")
  183.  
  184.     lockstyleset = 1
  185.  
  186.     -- Setup Haste Detection
  187.     haste = nil
  188.     p = require('packets')
  189.     update_offense_mode()    
  190. end
  191.  
  192. -------------------------------------------------------------------------------------------------------------------
  193. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  194. -------------------------------------------------------------------------------------------------------------------
  195.  
  196. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  197. function user_setup()
  198.     state.OffenseMode:options('Normal', 'HighAcc', 'TH')
  199.     state.HybridMode:options('Normal', 'DT')
  200.     state.RangedMode:options('Normal', 'Acc')
  201.     state.WeaponskillMode:options('Normal', 'Acc')
  202.     state.CastingMode:options('Normal', 'Resistant')
  203.     state.PhysicalDefenseMode:options('PDT', 'MDT')
  204.     state.IdleMode:options('Normal', 'DT')--, 'Learning')
  205.  
  206.     state.MagicBurst = M(false, 'Magic Burst')
  207.     state.CP = M(false, "Capacity Points Mode")
  208.  
  209.     -- Additional local binds
  210.    
  211.     send_command('bind ^` input /ma "Blank Gaze" <t>')
  212.     send_command('bind !` gs c toggle MagicBurst')
  213.     send_command('bind ^- input /ja "Chain Affinity" <me>')
  214.     send_command('bind !- input /ja "Efflux" <me>')
  215.     send_command('bind ^= input /ja "Burst Affinity" <me>')
  216.     send_command('bind ^[ input /ja "Diffusion" <me>')
  217.     send_command('bind ^] input /ja "Unbridled Learning" <me>')
  218.     send_command('bind !q input /ma "Nat. Meditation" <me>')
  219.     send_command('bind ^q input /ma "Cocoon" <me>')
  220.     send_command('bind !w input /ma "Erratic Flutter" <me>')
  221.     send_command('bind !e input /ma "Occultation" <me>')
  222.     send_command('bind !r input /ma "Battery Charge" <me>')
  223.     send_command('bind !u input /ma "Diamondhide" <me>')   
  224.     send_command('bind @u input /ma "Metallic Body" <me>')
  225.     send_command('bind !] input /ma "Carcharian Verve" <me>')
  226.     send_command('bind ![ input /ma "Mighty Guard" <me>')
  227.     send_command('bind !t input /ma "Aquaveil" <me>')
  228.     send_command('bind ^. input /ma "Magic Hammer" <t>')   
  229.     send_command('bind ^z input /item "Echo Drops" <me>')  
  230.     send_command('bind ^x input /item "Remedy" <me>')
  231.     send_command('bind ^c input /item "Holy Water" <me>')  
  232.    
  233.     if player.sub_job == "RDM" then    
  234.         send_command('bind !r input /ma "Refresh" <stpc>')
  235.         send_command('bind !y input /ma "Phalanx" <me>')
  236.         send_command('bind !u input /ma "Stoneskin" <me>')
  237.         send_command('bind !. input /ma "Sneak" <me>')
  238.         send_command('bind !, input /ma "Invisible" <me>')
  239.     elseif player.sub_job == "DNC" then
  240.         send_command('bind !. input /ja "Spectral Jig" <me>')
  241.     elseif player.sub_job == "NIN" then
  242.         send_command('bind !. input /ma "Monomi: Ichi" <me>')
  243.         send_command('bind !, input /ma "Tonko: Ni" <me>')
  244.         send_command('bind !numpad+ input /ma "Utsusemi: Ichi" <me>')
  245.         send_command('bind ^numpad+ input /ma "Utsusemi: Ni" <me>')
  246.     elseif player.sub_job == 'WAR' then
  247.         send_command('bind ^numpad/ input /ja "Berserk" <me>')
  248.         send_command('bind ^numpad* input /ja "Warcry" <me>')
  249.         send_command('bind ^numpad- input /ja "Aggressor" <me>')
  250.         send_command('bind !. input /item "Silent Oil" <me>')
  251.         send_command('bind !, input /item "Prism Powder" <me>')
  252.     else
  253.         send_command('bind !r input /ma "Battery Charge" <me>')
  254.         send_command('bind !y input /ma "Barrier Tusk" <me>')
  255.         send_command('bind !u input /ma "Diamondhide" <me>')
  256.         send_command('bind @u input /ma "Metallic Body" <me>')
  257.         send_command('bind !. input /item "Silent Oil" <me>')
  258.         send_command('bind !, input /item "Prism Powder" <me>')
  259.     end
  260.    
  261.     send_command('bind @c gs c toggle CP')
  262.  
  263.  
  264.    
  265.     send_command('bind ^numpad7 input /ws "Sanguine Blade" <t>')
  266.     send_command('bind ^numpad8 input /ws "Chant du Cygne" <t>')
  267.     send_command('bind ^numpad9 input /ws "Savage Blade" <t>')
  268.     send_command('bind ^numpad4 input /ws "Requiescat" <t>')
  269.     send_command('bind ^numpad5 input /ws "Expiacion" <t>')
  270.     send_command('bind ^numpad1 input /ws "Fast Blade" <t>')
  271.     send_command('bind ^numpad2 input /ws "Burning Blade" <t>')
  272.     send_command('bind ^numpad3 input /ws "Red Lotus Blade" <t>')
  273.    
  274.     select_default_macro_book()
  275.     set_lockstyle()
  276. end
  277.  
  278. -- Called when this job file is unloaded (eg: job change)
  279. function user_unload()
  280.     send_command('unbind !t')
  281.     send_command('unbind ^`')
  282.     send_command('unbind !`')
  283.     send_command('unbind ^-')
  284.     send_command('unbind ^=')
  285.     send_command('unbind ^[')
  286.     send_command('unbind ^]')  
  287.     send_command('unbind ![')
  288.     send_command('unbind !]')
  289.     send_command('unbind !q')
  290.     send_command('unbind ^q')
  291.     send_command('unbind !w')
  292.     send_command('unbind !e')
  293.     send_command('unbind !t')
  294.     send_command('unbind !r')
  295.     send_command('unbind !y')
  296.     send_command('unbind !u')
  297.     send_command('unbind @u')
  298.     send_command('unbind !p')
  299.     send_command('unbind ^.')
  300.     send_command('unbind !,')
  301.     send_command('unbind !.')
  302.     send_command('unbind ^numpad+')
  303.     send_command('unbind !numpad+')
  304.     send_command('unbind @c')
  305.     send_command('unbind @h')
  306.     send_command('unbind ^numlock')
  307.     send_command('unbind ^numpad/')
  308.     send_command('unbind ^numpad*')
  309.     send_command('unbind ^numpad-')
  310.     send_command('unbind ^numpad7')
  311.     send_command('unbind ^numpad9')
  312.     send_command('unbind ^numpad4')
  313.     send_command('unbind ^numpad5')
  314.     send_command('unbind ^numpad1')
  315.     send_command('unbind ^numpad2')
  316.     send_command('unbind ^numpad3')
  317.     send_command('unbind ^z')
  318.     send_command('unbind ^x')
  319.     send_command('unbind ^c')
  320.  
  321.     send_command('unbind #`')
  322.     send_command('unbind #1')
  323.     send_command('unbind #2')
  324.     send_command('unbind #3')
  325.     send_command('unbind #4')
  326.     send_command('unbind #5')
  327.     send_command('unbind #6')
  328.     send_command('unbind #7')
  329.     send_command('unbind #8')
  330.     send_command('unbind #9')
  331.     send_command('unbind #0')
  332. end
  333.  
  334. -- Define sets and vars used by this job file.
  335. function init_gear_sets()
  336.  
  337.     ------------------------------------------------------------------------------------------------
  338.     ---------------------------------------- Precast Sets ------------------------------------------
  339.     ------------------------------------------------------------------------------------------------
  340.  
  341.     -- Precast sets to enhance JAs
  342.  
  343.     -- Enmity set
  344.     sets.Enmity = {
  345.         ammo="Sapience Orb", --2
  346.         head="Halitus Helm", --8
  347.         body="Emet Harness +1", --10
  348.         hands="Kurys Gloves", --9
  349.         neck="Unmoving Collar +1", --10
  350.         ear1="Cryptic Earring", --4
  351.         ear2="Friomisi Earring", --2
  352.         ring1="Supershear Ring", --5
  353.         ring2="Eihwaz Ring", --5
  354.         waist="Kasiri Belt", --3
  355.         }
  356.  
  357.     sets.precast.JA['Provoke'] = sets.Enmity
  358.  
  359.     sets.buff['Burst Affinity'] = {legs="Assim. Shalwar +2", feet="Hashi. Basmak +1"}
  360.     sets.buff['Diffusion'] = {feet="Luhlaza Charuqs +3"}
  361.     sets.buff['Efflux'] = {legs="Hashishin Tayt +1"}
  362.  
  363.     sets.precast.JA['Azure Lore'] = {hands="Luhlaza Bazubands +3"}
  364.     sets.precast.JA['Chain Affinity'] = {feet="Assim. Charuqs +2"}
  365.     --sets.precast.JA['Convergence'] = {head="Luh. Keffiyeh +3"}
  366.     --sets.precast.JA['Enchainment'] = {body="Luhlaza Jubbah +3"}
  367.  
  368.     sets.precast.FC = {
  369.     main={ name="Vampirism", augments={'STR+10','INT+10','"Occult Acumen"+10','DMG:+15',}},
  370.     sub={ name="Vampirism", augments={'STR+5','INT+1','DMG:+1',}},
  371.     ammo="Sapience Orb",
  372.     head={ name="Carmine Mask", augments={'Accuracy+15','Mag. Acc.+10','"Fast Cast"+3',}},
  373.     body={ name="Taeon Tabard", augments={'Accuracy+19 Attack+19','"Fast Cast"+5','Phalanx +3',}},
  374.     hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
  375.     legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
  376.     feet={ name="Carmine Greaves +1", augments={'HP+80','MP+80','Phys. dmg. taken -4',}},
  377.     neck="Orunmila's Torque",
  378.     waist="Witful Belt",
  379.     left_ear="Loquac. Earring",
  380.     right_ear="Etiolation Earring",
  381.     left_ring="Kishar Ring",
  382.     right_ring="Rahab Ring",
  383.     back="Swith Cape",
  384.         }
  385.  
  386.     sets.precast.FC['Blue Magic'] = set_combine(sets.precast.FC, {body="Hashishin Mintan +1"})
  387.     sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  388.     sets.precast.FC.Cure = set_combine(sets.precast.FC, {ammo="Impatiens", ear2="Mendi. Earring"})
  389.  
  390.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
  391.         ammo="Impatiens",
  392.         body="Passion Jacket",
  393.         })
  394.  
  395.    
  396.     ------------------------------------------------------------------------------------------------
  397.     ------------------------------------- Weapon Skill Sets ----------------------------------------
  398.     ------------------------------------------------------------------------------------------------
  399.  
  400.     sets.precast.WS = {
  401.         main="Almace",
  402.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  403.         ammo="Mantoptera Eye",
  404.         head={ name="Herculean Helm", augments={'Attack+17','Weapon skill damage +4%','DEX+13','Accuracy+9',}},
  405.         body="Assim. Jubbah +3",
  406.         hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  407.         legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  408.         feet={ name="Herculean Boots", augments={'Accuracy+28','"Triple Atk."+3','DEX+1',}},
  409.         neck="Fotia Gorget",
  410.         waist="Fotia Belt",
  411.         left_ear="Mache Earring",
  412.         right_ear="Brutal Earring",
  413.         left_ring="Apate Ring",
  414.         right_ring="Ramuh Ring +1",
  415.         back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
  416.         }
  417.  
  418.     sets.precast.WS.Acc = set_combine(sets.precast.WS, {
  419.         main="Almace",
  420.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  421.         ammo="Falcon Eye",
  422.         head={ name="Herculean Helm", augments={'Attack+17','Weapon skill damage +4%','DEX+13','Accuracy+9',}},
  423.         body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  424.         hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  425.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  426.         feet={ name="Herculean Boots", augments={'Accuracy+28','"Triple Atk."+3','DEX+1',}},
  427.         neck="Fotia Gorget",
  428.         waist="Fotia Belt",
  429.         left_ear="Mache Earring",
  430.         right_ear="Mache Earring",
  431.         left_ring="Ramuh Ring +1",
  432.         right_ring="Ramuh Ring +1",
  433.         back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
  434.         })
  435.  
  436.     sets.precast.WS['Chant du Cygne'] = {
  437.         main="Almace",
  438.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  439.         ammo="Jukukik Feather",
  440.         head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  441.         body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  442.         hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  443.         legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  444.         feet={ name="Herculean Boots", augments={'Accuracy+28','"Triple Atk."+3','DEX+1',}},
  445.         neck="Fotia Gorget",
  446.         waist="Fotia Belt",
  447.         left_ear="Brutal Earring",
  448.         right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  449.         left_ring="Begrudging Ring",
  450.         right_ring="Ilabrat Ring",
  451.         back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
  452.         }
  453.  
  454.     sets.precast.WS['Chant du Cygne'].Acc = set_combine(sets.precast.WS['Chant du Cygne'], {
  455.         main="Almace",
  456.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  457.         ammo="Falcon Eye",
  458.         head={ name="Dampening Tam", augments={'DEX+10','Accuracy+15','Mag. Acc.+15','Quadruple Attack +3',}},
  459.         body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  460.         hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  461.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  462.         feet={ name="Herculean Boots", augments={'Accuracy+28','"Triple Atk."+3','DEX+1',}},
  463.         neck="Iqabi Necklace",
  464.         waist="Grunfeld Rope",
  465.         left_ear="Telos Earring",
  466.         right_ear="Brutal Earring",
  467.         left_ring="Ramuh Ring +1",
  468.         right_ring="Epona's Ring",
  469.         back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
  470.         })
  471.  
  472.     sets.precast.WS['Vorpal Blade'] = sets.precast.WS['Chant du Cygne']
  473.     sets.precast.WS['Vorpal Blade'].Acc = sets.precast.WS['Chant du Cygne'].Acc
  474.  
  475.     sets.precast.WS['Savage Blade'] = {
  476.         main="Almace",
  477.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  478.         ammo="Mantoptera Eye",
  479.         head={ name="Herculean Helm", augments={'Weapon skill damage +4%','STR+9','Accuracy+15','Attack+11',}},
  480.         body="Assim. Jubbah +3",
  481.         hands="Jhakri Cuffs +2",
  482.         legs={ name="Luhlaza Shalwar +3", augments={'Enhances "Assimilation" effect',}},
  483.         feet={ name="Herculean Boots", augments={'Accuracy+14 Attack+14','Weapon skill damage +4%','STR+12',}},
  484.         neck="Caro Necklace",
  485.         waist="Prosilio Belt +1",
  486.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  487.         right_ear="Ishvara Earring",
  488.         left_ring="Ifrit Ring +1",
  489.         right_ring="Ifrit Ring +1",
  490.         back={ name="Rosmerta's Cape", augments={'STR+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},
  491.         }
  492.  
  493.     sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {
  494.         main="Almace",
  495.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  496.         ammo="Falcon Eye",
  497.         head={ name="Herculean Helm", augments={'Weapon skill damage +4%','STR+9','Accuracy+15','Attack+11',}},
  498.         body="Assim. Jubbah +3",
  499.         hands="Jhakri Cuffs +2",
  500.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  501.         feet={ name="Herculean Boots", augments={'Accuracy+28','"Triple Atk."+3','DEX+1',}},
  502.         neck="Caro Necklace",
  503.         waist="Grunfeld Rope",
  504.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
  505.         right_ear="Ishvara Earring",
  506.         left_ring="Ifrit Ring +1",
  507.         right_ring="Ifrit Ring +1",
  508.         back={ name="Rosmerta's Cape", augments={'STR+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},
  509.         })
  510.  
  511.     sets.precast.WS['Requiescat'] = {
  512.         main="Almace",
  513.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  514.         ammo="Hydrocera",
  515.         head="Jhakri Coronal +2",
  516.         body="Jhakri Robe +2",
  517.         hands="Jhakri Cuffs +2",
  518.         legs="Jhakri Slops +2",
  519.         feet="Jhakri Pigaches +2",
  520.         neck="Fotia Gorget",
  521.         waist="Fotia Belt",
  522.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
  523.         right_ear="Brutal Earring",
  524.         left_ring="Levia. Ring",
  525.         right_ring="Epona's Ring",
  526.         back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
  527.         }
  528.  
  529.     sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS['Requiescat'], {
  530.         main="Almace",
  531.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  532.         ammo="Hydrocera",
  533.         head="Jhakri Coronal +2",
  534.         body="Jhakri Robe +2",
  535.         hands="Jhakri Cuffs +2",
  536.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  537.         feet="Jhakri Pigaches +2",
  538.         neck="Fotia Gorget",
  539.         waist="Fotia Belt",
  540.         left_ear="Mache Earring",
  541.         right_ear="Mache Earring",
  542.         left_ring="Ramuh Ring +1",
  543.         right_ring="Epona's Ring",
  544.         back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
  545.         })
  546.  
  547.     sets.precast.WS['Expiacion'] = sets.precast.WS['Savage Blade']
  548.  
  549.     sets.precast.WS['Expiacion'].Acc = set_combine(sets.precast.WS['Expiacion'], {
  550.         body=gear.Adhemar_B_body,
  551.         feet=gear.Herc_STP_feet,
  552.         ear2="Telos Earring",
  553.         })
  554.  
  555.     sets.precast.WS['Sanguine Blade'] = {
  556.     main="Almace",
  557.     sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  558.     ammo="Pemphredo Tathlum",
  559.     head="Pixie Hairpin +1",
  560.     body="Jhakri Robe +2",
  561.     hands="Jhakri Cuffs +2",
  562.     legs={ name="Luhlaza Shalwar +3", augments={'Enhances "Assimilation" effect',}},
  563.     feet="Jhakri Pigaches +2",
  564.     neck="Sanctity Necklace",
  565.     waist="Eschan Stone",
  566.     left_ear="Hecate's Earring",
  567.     right_ear="Friomisi Earring",
  568.     left_ring="Shiva Ring +1",
  569.     right_ring="Shiva Ring +1",
  570.     back={ name="Cornflower Cape", augments={'MP+21','DEX+4','Accuracy+2','Blue Magic skill +10',}},
  571.         }
  572.  
  573.     sets.precast.WS['True Strike'] = sets.precast.WS['Savage Blade']
  574.     sets.precast.WS['True Strike'].Acc = sets.precast.WS['Savage Blade'].Acc
  575.     sets.precast.WS['Judgment'] = sets.precast.WS['True Strike']
  576.     sets.precast.WS['Judgment'].Acc = sets.precast.WS['True Strike'].Acc
  577.     sets.precast.WS['Black Halo'] = sets.precast.WS['True Strike']
  578.     sets.precast.WS['Black Halo'].Acc = sets.precast.WS['True Strike'].Acc
  579.     sets.precast.WS['Realmrazer'] = sets.precast.WS['Requiescat']
  580.     sets.precast.WS['Realmrazer'].Acc = sets.precast.WS['Requiescat'].Acc
  581.    
  582.     sets.precast.WS['Flash Nova'] = set_combine(sets.precast.WS['Sanguine Blade'], {
  583.         head="Jhakri Coronal +2",
  584.         ring1="Levia. Ring +1",
  585.         ring2="Weather. Ring +1",
  586.         })
  587.  
  588.     ------------------------------------------------------------------------------------------------
  589.     ---------------------------------------- Midcast Sets ------------------------------------------
  590.     ------------------------------------------------------------------------------------------------
  591.  
  592.     sets.midcast.FastRecast = sets.precast.FC
  593.  
  594.     sets.midcast.SpellInterrupt = {
  595.         ammo="Impatiens", --10
  596.         ring1="Evanescence Ring", --5
  597.         waist="Rumination Sash", --10
  598.         }
  599.  
  600.     sets.midcast['Blue Magic'] = {
  601.         ammo="Mavi Tathlum",
  602.         head="Luh. Keffiyeh +3",
  603.         body="Assim. Jubbah +3",
  604.         hands="Rawhide Gloves",
  605.         legs="Hashishin Tayt +1",
  606.         feet="Luhlaza Charuqs +3",
  607.         neck="Incanter's Torque",
  608.         ring1="Stikini Ring",
  609.         ring2="Stikini Ring",
  610.         back="Cornflower Cape",
  611.         }
  612.  
  613.     sets.midcast['Blue Magic'].Physical = {
  614.         main="Almace",
  615.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  616.         ammo="Mantoptera Eye",
  617.         head="Jhakri Coronal +2",
  618.         body="Assim. Jubbah +3",
  619.         hands="Jhakri Cuffs +2",
  620.         legs="Jhakri Slops +2",
  621.         feet="Jhakri Pigaches +2",
  622.         neck="Caro Necklace",
  623.         waist="Prosilo Belt +1",
  624.         left_ear="Flame Pearl",
  625.         right_ear="Flame Pearl",
  626.         left_ring="Ifrit Ring +1",
  627.         right_ring="Ifrit Ring +1",
  628.         back={ name="Cornflower Cape", augments={'MP+21','DEX+4','Accuracy+2','Blue Magic skill +10',}},
  629.         }
  630.  
  631.     sets.midcast['Blue Magic'].PhysicalAcc = set_combine(sets.midcast['Blue Magic'].Physical, {
  632.         ammo="Falcon Eye",
  633.         legs="Carmine Cuisses +1",
  634.         neck="Sanctity Necklace",
  635.         ear2="Mache Earring",
  636.         })
  637.  
  638.     sets.midcast['Blue Magic'].PhysicalStr = sets.midcast['Blue Magic'].Physical
  639.  
  640.     sets.midcast['Blue Magic'].PhysicalDex = set_combine(sets.midcast['Blue Magic'].Physical, {
  641.         ammo="Falcon Eye",
  642.         ring2="Ilabrat Ring",
  643.     back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
  644.         })
  645.  
  646.     sets.midcast['Blue Magic'].PhysicalVit = sets.midcast['Blue Magic'].Physical
  647.  
  648.     sets.midcast['Blue Magic'].PhysicalAgi = set_combine(sets.midcast['Blue Magic'].Physical, {
  649.         hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  650.         ring2="Apate Ring",
  651.         })
  652.  
  653.     sets.midcast['Blue Magic'].PhysicalInt = set_combine(sets.midcast['Blue Magic'].Physical, {
  654.         ring1="Shiva Ring +1",
  655.         back={ name="Cornflower Cape", augments={'MP+21','DEX+4','Accuracy+2','Blue Magic skill +10',}},
  656.         })
  657.  
  658.     sets.midcast['Blue Magic'].PhysicalMnd = set_combine(sets.midcast['Blue Magic'].Physical, {
  659.         ring1="Levia. Ring",
  660.         })
  661.    
  662.     sets.midcast['Blue Magic'].PhysicalChr = set_combine(sets.midcast['Blue Magic'].Physical, {ear1="Handler's Earring", ear2="Handler's Earring +1"})
  663.  
  664.     sets.midcast['Blue Magic'].Magical = {
  665.         main={ name="Nibiru Cudgel", augments={'MP+50','INT+10','"Mag.Atk.Bns."+15',}},
  666.         sub={ name="Nibiru Cudgel", augments={'MP+50','INT+10','"Mag.Atk.Bns."+15',}},
  667.         ammo="Pemphredo Tathlum",
  668.         head="Jhakri Coronal +2",
  669.         body="Jhakri Robe +2",
  670.         hands="Jhakri Cuffs +2",
  671.         legs="Jhakri Slops +2",
  672.         feet="Jhakri Pigaches +2",
  673.         neck="Sanctity Necklace",
  674.         waist="Eschan Stone",
  675.         left_ear="Regal Earring",
  676.         right_ear="Friomisi Earring",
  677.         left_ring="Shiva Ring +1",
  678.         right_ring="Shiva Ring +1",
  679.         back={ name="Cornflower Cape", augments={'MP+21','DEX+4','Accuracy+2','Blue Magic skill +10',}},
  680.         }
  681.  
  682.     sets.midcast['Blue Magic'].Magical.Resistant = set_combine(sets.midcast['Blue Magic'].Magical, {    
  683.         right_ear="Digni. Earring",
  684.         left_ring="Jhakri Ring",
  685.         right_ring="Kishar Ring",
  686.         })
  687.  
  688.     sets.midcast['Blue Magic'].MagicalDark = set_combine(sets.midcast['Blue Magic'].Magical, {
  689.         head="Pixie Hairpin +1",
  690.         ring2="Archon Ring",
  691.         })
  692.  
  693.     sets.midcast['Blue Magic'].MagicalLight = set_combine(sets.midcast['Blue Magic'].Magical, {
  694.         ring2="Weather. Ring +1"
  695.         })
  696.  
  697.     sets.midcast['Blue Magic'].MagicalMnd = set_combine(sets.midcast['Blue Magic'].Magical, {
  698.         ring1="Levia. Ring",
  699.         })
  700.  
  701.     sets.midcast['Blue Magic'].MagicalDex = set_combine(sets.midcast['Blue Magic'].Magical, {
  702.         ring1="Ramuh Ring +1",
  703.         ring2="Ilabrat Ring",
  704.         })
  705.  
  706.     sets.midcast['Blue Magic'].MagicalVit = set_combine(sets.midcast['Blue Magic'].Magical, {})
  707.     sets.midcast['Blue Magic'].MagicalChr = set_combine(sets.midcast['Blue Magic'].Magical, {ear1="Regal Earring", ear2="Handler's Earring +1"})
  708.  
  709.     sets.midcast['Blue Magic'].MagicAccuracy = {
  710.         main={ name="Nibiru Cudgel", augments={'MP+50','INT+10','"Mag.Atk.Bns."+15',}},
  711.         sub={ name="Nibiru Cudgel", augments={'MP+50','INT+10','"Mag.Atk.Bns."+15',}},
  712.         ammo="Pemphredo Tathlum",
  713.         head="Jhakri Coronal +2",
  714.         body="Jhakri Robe +2",
  715.         hands="Jhakri Cuffs +2",
  716.         legs="Assim. Shalwar +2",
  717.         feet="Jhakri Pigaches +2",
  718.         neck="Sanctity Necklace",
  719.         waist="Eschan Stone",
  720.         left_ear="Regal Earring",
  721.         right_ear="Digni. Earring",
  722.         left_ring="Jhakri Ring",
  723.         right_ring="Kishar Ring",
  724.         back={ name="Cornflower Cape", augments={'MP+21','DEX+4','Accuracy+2','Blue Magic skill +10',}},
  725.         }
  726.  
  727.     sets.midcast['Blue Magic'].Breath = sets.midcast['Blue Magic'].Magical
  728.  
  729.     sets.midcast['Blue Magic'].Stun = sets.midcast['Blue Magic'].MagicAccuracy
  730.  
  731.     sets.midcast['Blue Magic'].Healing = {
  732.         ammo="Hydrocera",
  733.         head={ name="Telchine Cap", augments={'"Cure" potency +6%','Enh. Mag. eff. dur. +8',}},
  734.         body={ name="Telchine Chas.", augments={'"Cure" potency +7%','Enh. Mag. eff. dur. +10',}},
  735.         hands={ name="Telchine Gloves", augments={'"Fast Cast"+3','Enh. Mag. eff. dur. +10',}},
  736.         legs="Gyve Trousers",
  737.         feet={ name="Telchine Pigaches", augments={'"Cure" potency +6%','Enh. Mag. eff. dur. +10',}},
  738.         neck="Phalaina Locket",
  739.         waist="Austerity Belt",
  740.         left_ear="Regal Earring",
  741.         right_ear="Calamitous Earring",
  742.         left_ring="Levia. Ring",
  743.         right_ring="Kunaji Ring",
  744.         back="Solemnity Cape",
  745.         }
  746.  
  747.     sets.midcast['Blue Magic'].Buff = sets.midcast['Blue Magic']
  748.     sets.midcast['Blue Magic'].Refresh = set_combine(sets.midcast['Blue Magic'], {head="Amalric Coif", waist="Gishdubar Sash", back="Grapevine Cape"})
  749.     sets.midcast['Blue Magic'].SkillBasedBuff = sets.midcast['Blue Magic']
  750.    
  751.     sets.midcast['Blue Magic']['Occultation'] = set_combine(sets.midcast['Blue Magic'], {
  752.         ammo="Mavi Tathlum",
  753.         head="Carmine Mask +1",
  754.         hands="Hashi. Bazu. +1",
  755.         ear1="Etiolation Earring",
  756.         ear2="Loquacious Earring",    
  757.         ring1="Kishar Ring",
  758.         ring2="Prolix Ring",
  759.         waist="Witful Belt",
  760.         })
  761.  
  762.     sets.midcast['Blue Magic']['Carcharian Verve'] = set_combine(sets.midcast['Blue Magic'].Buff, {
  763.         head="Amalric Coif",
  764.         })
  765.  
  766.     sets.midcast['Enhancing Magic'] = {
  767.         ammo="Impatiens",
  768.         head={ name="Carmine Mask", augments={'Accuracy+15','Mag. Acc.+10','"Fast Cast"+3',}},
  769.         body={ name="Telchine Chas.", augments={'"Cure" potency +7%',}},
  770.         hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
  771.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  772.         feet={ name="Telchine Pigaches", augments={'"Cure" potency +6%',}},
  773.         neck="Deviant Necklace",
  774.         waist="Austerity Belt",
  775.         left_ear="Gifted Earring",
  776.         right_ear="Calamitous Earring",
  777.         left_ring="Kishar Ring",
  778.         right_ring="Prolix Ring",
  779.         back="Solemnity Cape",
  780.         }
  781.  
  782.     sets.midcast.EnhancingDuration = {
  783.         head={ name="Telchine Cap", augments={'"Cure" potency +6%','Enh. Mag. eff. dur. +8',}},
  784.         body={ name="Telchine Chas.", augments={'"Cure" potency +7%','Enh. Mag. eff. dur. +10',}},
  785.         hands={ name="Telchine Gloves", augments={'"Fast Cast"+3','Enh. Mag. eff. dur. +10',}},
  786.         legs={ name="Telchine Braconi", augments={'"Cure" potency +7%','Enh. Mag. eff. dur. +7',}},
  787.         feet={ name="Telchine Pigaches", augments={'"Cure" potency +6%','Enh. Mag. eff. dur. +10',}},
  788.         }  
  789.        
  790.     sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {head="Amalric Coif", waist="Gishdubar Sash", back="Grapevine Cape"})
  791.    
  792.     sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {waist="Siegel Sash"})
  793.    
  794.     sets.midcast.Phalanx = set_combine(sets.midcast['Enhancing Magic'], {
  795.         body={ name="Taeon Tabard", augments={'Accuracy+19 Attack+19','"Fast Cast"+5','Phalanx +3',}},
  796.         hands={ name="Taeon Gloves", augments={'Phalanx +2',}},
  797.         legs={ name="Taeon Tights", augments={'Phalanx +2',}},
  798.         feet={ name="Taeon Boots", augments={'Phalanx +3',}},      
  799.         })
  800.    
  801.     sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {head="Amalric Coif", waist="Emphatikos Rope"})
  802.  
  803.     sets.midcast.Protect = {ring1="Sheltered Ring"}
  804.     sets.midcast.Protectra = sets.midcast.Protect
  805.     sets.midcast.Shell = sets.midcast.Protect
  806.     sets.midcast.Shellra = sets.midcast.Protect
  807.  
  808.     sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
  809.  
  810.     ------------------------------------------------------------------------------------------------
  811.     ----------------------------------------- Idle Sets --------------------------------------------
  812.     ------------------------------------------------------------------------------------------------
  813.  
  814.     -- Resting sets
  815.     sets.resting = {}
  816.  
  817.  
  818.     -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  819.  
  820.     sets.idle = {
  821.         main="Almace",
  822.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  823.         ammo="Staunch Tathlum",
  824.         head={ name="Herculean Helm", augments={'AGI+14','VIT+1','"Refresh"+2','Accuracy+20 Attack+20','Mag. Acc.+5 "Mag.Atk.Bns."+5',}},
  825.         body="Jhakri Robe +2",
  826.         hands="Aya. Manopolas +2",
  827.         legs={ name="Rawhide Trousers", augments={'MP+50','"Fast Cast"+5','"Refresh"+1',}},
  828.         feet="Aya. Gambieras +2",
  829.         neck="Sanctity Necklace",
  830.         waist="Fucho-no-Obi",
  831.         left_ear="Ethereal Earring",
  832.         right_ear="Etiolation Earring",
  833.         left_ring={ name="Dark Ring", augments={'Magic dmg. taken -3%','Phys. dmg. taken -6%',}},
  834.         right_ring="Defending Ring",
  835.         back="Umbra Cape",
  836.         }
  837.  
  838.     sets.idle.DT = set_combine(sets.idle, {
  839.         main="Almace",
  840.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  841.         ammo="Staunch Tathlum",
  842.         head="Aya. Zucchetto +2",
  843.         body="Ayanmo Corazza +2",
  844.         hands="Aya. Manopolas +2",
  845.         legs="Aya. Cosciales +2",
  846.         feet="Aya. Gambieras +2",
  847.         neck="Loricate Torque +1",
  848.         waist="Flume Belt",
  849.         left_ear="Ethereal Earring",
  850.         right_ear="Merman's Earring",
  851.         left_ring={ name="Dark Ring", augments={'Magic dmg. taken -3%','Phys. dmg. taken -6%',}},
  852.         right_ring="Defending Ring",
  853.         back="Umbra Cape",
  854.         })
  855.  
  856.     sets.idle.Weak = sets.idle.DT
  857.  
  858.     --sets.idle.Learning = set_combine(sets.idle, sets.Learning)
  859.  
  860.     ------------------------------------------------------------------------------------------------
  861.     ---------------------------------------- Defense Sets ------------------------------------------
  862.     ------------------------------------------------------------------------------------------------
  863.  
  864.     sets.defense.PDT = sets.idle.DT
  865.     sets.defense.MDT = sets.idle.DT
  866.  
  867.     ------------------------------------------------------------------------------------------------
  868.     ---------------------------------------- Engaged Sets ------------------------------------------
  869.     ------------------------------------------------------------------------------------------------
  870.  
  871.     -- Engaged sets
  872.  
  873.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  874.     -- sets if more refined versions aren't defined.
  875.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  876.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  877.  
  878.     sets.engaged = {
  879.         main="Almace",
  880.         sub={ name="Colada", augments={'"Dbl.Atk."+2','STR+8','Accuracy+21','DMG:+17',}},
  881.         ammo="Falcon Eye",
  882.         head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  883.         body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  884.         hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  885.         legs={ name="Herculean Trousers", augments={'Accuracy+25','"Triple Atk."+3','DEX+4',}},
  886.         feet={ name="Herculean Boots", augments={'Accuracy+28','"Triple Atk."+3','DEX+1',}},
  887.         neck="Lissome Necklace",
  888.         waist="Windbuffet Belt +1",
  889.         left_ear="Brutal Earring",
  890.         right_ear="Cessance Earring",
  891.         left_ring="Apate Ring",
  892.         right_ring="Epona's Ring",
  893.         back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},
  894.         }
  895.  
  896.     sets.engaged.HighAcc = set_combine(sets.engaged, {
  897.         head={ name="Dampening Tam", augments={'DEX+10','Accuracy+15','Mag. Acc.+15','Quadruple Attack +3',}},
  898.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  899.         neck="Combatant's Torque",
  900.         waist="Kentarch Belt +1",
  901.         left_ear="Telos Earring",
  902.         left_ring="Cacoethic Ring",
  903.         right_ring="Ramuh Ring +1",
  904.         })
  905.  
  906.     sets.engaged.TH = set_combine(sets.engaged, {
  907.         waist="Chaac Belt",
  908.         })
  909.  
  910.     ------------------------------------------------------------------------------------------------
  911.     ---------------------------------------- Hybrid Sets -------------------------------------------
  912.     ------------------------------------------------------------------------------------------------
  913.  
  914.     sets.engaged.Hybrid = {
  915.         ammo="Staunch Tathlum", --2/2
  916.         body="Ayanmo Corazza +2", --6/6
  917.         neck="Loricate Torque +1", --6/6
  918.         ring2="Defending Ring", --10/10
  919.         }
  920.    
  921.     sets.engaged.DT = set_combine(sets.engaged, sets.engaged.Hybrid)
  922.    
  923.     ------------------------------------------------------------------------------------------------
  924.     ---------------------------------------- Special Sets ------------------------------------------
  925.     ------------------------------------------------------------------------------------------------
  926.  
  927.     sets.magic_burst = set_combine(sets.midcast['Blue Magic'].Magical, {
  928.         body="Samnuha Coat", --(8)
  929.         hands="Amalric Gages", --(5)
  930.         legs="Assim. Shalwar +2", --5
  931.         feet="Jhakri Pigaches +2", --5
  932.         ring1="Mujin Band", --(5)
  933.         back="Seshaw Cape", --5
  934.         })
  935.  
  936.     sets.Kiting = {legs="Carmine Cuisses +1"}
  937.     sets.Learning = {hands="Assim. Bazu. +1"}
  938.     sets.latent_refresh = {waist="Fucho-no-obi"}
  939.  
  940.     sets.buff.Doom = {ring1="Eshmun's Ring", ring2="Eshmun's Ring", waist="Gishdubar Sash"}
  941.  
  942.     sets.CP = {back="Mecisto. Mantle"}
  943.     sets.Reive = {neck="Ygnas's Resolve +1"}
  944.  
  945.     sets.midcast.Diaga = sets.TreasureHunter
  946.  
  947. end
  948.  
  949.  
  950. -------------------------------------------------------------------------------------------------------------------
  951. -- Job-specific hooks for standard casting events.
  952. -------------------------------------------------------------------------------------------------------------------
  953.  
  954. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  955. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  956. function job_precast(spell, action, spellMap, eventArgs)
  957.     if unbridled_spells:contains(spell.english) and not state.Buff['Unbridled Learning'] then
  958.         eventArgs.cancel = true
  959.         windower.send_command('@input /ja "Unbridled Learning" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
  960.     end
  961.     if spellMap == 'Utsusemi' then
  962.         if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
  963.             cancel_spell()
  964.             add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
  965.             eventArgs.handled = true
  966.             return
  967.         elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
  968.             send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
  969.         end
  970.     end
  971. end
  972.  
  973. -- Run after the default midcast() is done.
  974. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
  975. function job_post_midcast(spell, action, spellMap, eventArgs)
  976.     -- Add enhancement gear for Chain Affinity, etc.
  977.     if spell.skill == 'Blue Magic' then
  978.         for buff,active in pairs(state.Buff) do
  979.             if active and sets.buff[buff] then
  980.                 equip(sets.buff[buff])
  981.             end
  982.         end
  983.         if spellMap == 'Healing' and spell.target.type == 'SELF' then
  984.             equip(sets.midcast['Blue Magic'].HealingSelf)
  985.         end
  986.     end
  987.  
  988.     if spell.skill == 'Enhancing Magic' and classes.NoSkillSpells:contains(spell.english) then
  989.         equip(sets.midcast.EnhancingDuration)
  990.         if spellMap == 'Refresh' then
  991.             equip(sets.midcast.Refresh)
  992.         end
  993.     end
  994. end
  995.  
  996. function job_post_midcast(spell, action, spellMap, eventArgs)
  997.     if not spell.interrupted then
  998.         if spell.english == "Dream Flower" then
  999.             send_command('@timers c "Dream Flower ['..spell.target.name..']" 90 down spells/00098.png')
  1000.         elseif spell.english == "Soporific" then
  1001.             send_command('@timers c "Sleep ['..spell.target.name..']" 90 down spells/00259.png')
  1002.         elseif spell.english == "Sheep Song" then
  1003.             send_command('@timers c "Sheep Song ['..spell.target.name..']" 60 down spells/00098.png')
  1004.         elseif spell.english == "Yawn" then
  1005.             send_command('@timers c "Yawn ['..spell.target.name..']" 60 down spells/00098.png')
  1006.         elseif spell.english == "Entomb" then
  1007.             send_command('@timers c "Entomb ['..spell.target.name..']" 60 down spells/00547.png')
  1008.         end
  1009.     end
  1010. end
  1011.  
  1012. -------------------------------------------------------------------------------------------------------------------
  1013. -- Job-specific hooks for non-casting events.
  1014. -------------------------------------------------------------------------------------------------------------------
  1015.  
  1016. -- Called when a player gains or loses a buff.
  1017. -- buff == buff gained or lost
  1018. -- gain == true if the buff was gained, false if it was lost.
  1019. function job_buff_change(buff,gain)
  1020. --    if buffactive['Reive Mark'] then
  1021. --        if gain then          
  1022. --            equip(sets.Reive)
  1023. --            disable('neck')
  1024. --        else
  1025. --            enable('neck')
  1026. --        end
  1027. --    end
  1028.  
  1029.     if buff == "doom" then
  1030.         if gain then          
  1031.             equip(sets.buff.Doom)
  1032.             send_command('@input /p Doomed.')
  1033.              disable('ring1','ring2','waist')
  1034.         else
  1035.             enable('ring1','ring2','waist')
  1036.             handle_equipping_gear(player.status)
  1037.         end
  1038.     end
  1039.  
  1040. end
  1041.  
  1042. -------------------------------------------------------------------------------------------------------------------
  1043. -- User code that supplements standard library decisions.
  1044. -------------------------------------------------------------------------------------------------------------------
  1045.  
  1046. -- Custom spell mapping.
  1047. -- Return custom spellMap value that can override the default spell mapping.
  1048. -- Don't return anything to allow default spell mapping to be used.
  1049. function job_get_spell_map(spell, default_spell_map)
  1050.     if spell.skill == 'Blue Magic' then
  1051.         for category,spell_list in pairs(blue_magic_maps) do
  1052.             if spell_list:contains(spell.english) then
  1053.                 return category
  1054.             end
  1055.         end
  1056.     end
  1057. end
  1058.  
  1059. -- Modify the default idle set after it was constructed.
  1060. function customize_idle_set(idleSet)
  1061.     if player.mpp < 51 then
  1062.         idleSet = set_combine(idleSet, sets.latent_refresh)
  1063.     end
  1064.     if state.CP.current == 'on' then
  1065.         equip(sets.CP)
  1066.         disable('back')
  1067.     else
  1068.         enable('back')
  1069.     end
  1070.     --if state.IdleMode.value == 'Learning' then
  1071.     --    equip(sets.Learning)
  1072.     --    disable('hands')
  1073.     --else
  1074.     --    enable('hands')
  1075.     --end
  1076.    
  1077.     return idleSet
  1078. end
  1079.  
  1080. -- Called by the 'update' self-command, for common needs.
  1081. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  1082. function job_update(cmdParams, eventArgs)
  1083.     update_offense_mode()
  1084. end
  1085.  
  1086. -- Function to display the current relevant user state when doing an update.
  1087. -- Return true if display was handled, and you don't want the default info shown.
  1088. function display_current_job_state(eventArgs)
  1089.     local msg = '[ Melee'
  1090.    
  1091.     if state.CombatForm.has_value then
  1092.         msg = msg .. ' (' .. state.CombatForm.value .. ')'
  1093.     end
  1094.    
  1095.     msg = msg .. ': '
  1096.    
  1097.     msg = msg .. state.OffenseMode.value
  1098.     if state.HybridMode.value ~= 'Normal' then
  1099.         msg = msg .. '/' .. state.HybridMode.value
  1100.     end
  1101.     msg = msg .. ' ][ WS: ' .. state.WeaponskillMode.value .. ' ]'
  1102.    
  1103.     if state.DefenseMode.value ~= 'None' then
  1104.         msg = msg .. '[ Defense: ' .. state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ' ]'
  1105.     end
  1106.  
  1107.     if state.IdleMode.value ~= 'None' then
  1108.         msg = msg .. '[ Idle: ' .. state.IdleMode.value .. ' ]'
  1109.     end
  1110.    
  1111.     if state.Kiting.value then
  1112.         msg = msg .. '[ Kiting Mode: ON ]'
  1113.     end
  1114.  
  1115.     add_to_chat(060, msg)
  1116.  
  1117.     eventArgs.handled = true
  1118. end
  1119.  
  1120.  
  1121. -------------------------------------------------------------------------------------------------------------------
  1122. -- Utility functions specific to this job.
  1123. -------------------------------------------------------------------------------------------------------------------
  1124.  
  1125. --Read incoming packet to differentiate between Haste I and Haste II
  1126. windower.raw_register_event("incoming chunk", function(id, data)
  1127.     if id == 0x028 then
  1128.         local packet = p.parse('incoming', data)
  1129.         if packet["Category"] == 4 then
  1130.             if packet["Param"] == 57 then
  1131.                 add_to_chat(122, 'Haste')
  1132.                 haste = 1
  1133.             elseif packet["Param"] == 511 then
  1134.                 add_to_chat(122, 'Haste2')
  1135.                 haste = 2
  1136.             end
  1137.         end
  1138.     end
  1139. end)
  1140.  
  1141. function update_active_abilities()
  1142.     state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
  1143.     state.Buff['Efflux'] = buffactive['Efflux'] or false
  1144.     state.Buff['Diffusion'] = buffactive['Diffusion'] or false
  1145. end
  1146.  
  1147. -- State buff checks that will equip buff gear and mark the event as handled.
  1148. function apply_ability_bonuses(spell, action, spellMap)
  1149.     if state.Buff['Burst Affinity'] and (spellMap == 'Magical' or spellMap == 'MagicalLight' or spellMap == 'MagicalDark' or spellMap == 'Breath') then
  1150.         if state.MagicBurst.value then
  1151.             equip(sets.magic_burst)
  1152.         end
  1153.         equip(sets.buff['Burst Affinity'])
  1154.     end
  1155.     if state.Buff.Efflux and spellMap == 'Physical' then
  1156.         equip(sets.buff['Efflux'])
  1157.     end
  1158.     if state.Buff.Diffusion and (spellMap == 'Buffs' or spellMap == 'BlueSkill') then
  1159.         equip(sets.buff['Diffusion'])
  1160.     end
  1161.  
  1162.     if state.Buff['Burst Affinity'] then equip (sets.buff['Burst Affinity']) end
  1163.     if state.Buff['Efflux'] then equip (sets.buff['Efflux']) end
  1164.     if state.Buff['Diffusion'] then equip (sets.buff['Diffusion']) end
  1165. end
  1166.  
  1167. function update_offense_mode()  
  1168.     if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
  1169.         state.CombatForm:set('DW')
  1170.     else
  1171.         state.CombatForm:reset()
  1172.     end
  1173. end
  1174.  
  1175. -- Select default macro book on initial load or subjob change.
  1176. function select_default_macro_book()
  1177.     -- Default macro set/book
  1178.     if player.sub_job == 'WAR' then
  1179.         set_macro_page(1, 2)
  1180.     elseif player.sub_job == 'RDM' then
  1181.         set_macro_page(2, 2)
  1182.     else
  1183.         set_macro_page(1, 2)
  1184.     end
  1185. end
  1186.  
  1187. function set_lockstyle()
  1188.     send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  1189. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement