Advertisement
Guest User

BLM.lua

a guest
May 22nd, 2016
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 21.05 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job.  Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- Initialization function for this job file.
  6. function get_sets()
  7.     mote_include_version = 2
  8.    
  9.     -- Load and initialize the include file.
  10.     include('Mote-Include.lua')
  11.     include('organizer-lib')
  12. end
  13.  
  14.  
  15. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  16. function job_setup()
  17.    
  18. end
  19.  
  20. -------------------------------------------------------------------------------------------------------------------
  21. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  22. -------------------------------------------------------------------------------------------------------------------
  23.  
  24. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  25. function user_setup()
  26.     state.OffenseMode:options('None', 'Normal')
  27.     state.CastingMode:options('Normal', 'Resistant', 'AF', 'Proc', 'HighMP')
  28.     state.IdleMode:options('Normal', 'HighMP')
  29.    
  30.     state.MagicBurst = M(false, 'Magic Burst')
  31.  
  32.     lowTierNukes = S{'Stone', 'Water', 'Aero', 'Fire', 'Blizzard', 'Thunder',
  33.         'Stone II', 'Water II', 'Aero II', 'Fire II', 'Blizzard II', 'Thunder II',
  34.         'Stonega', 'Waterga', 'Aeroga', 'Firaga', 'Blizzaga', 'Thundaga',
  35.         'Stonega II', 'Waterga II', 'Aeroga II', 'Firaga II', 'Blizzaga II', 'Thundaga II'}
  36.        
  37.     HighTierNukes = S{
  38.         'Stone III', 'Water III', 'Aero III', 'Fire III', 'Blizzard III', 'Thunder III',
  39.         'Stone IV', 'Water IV', 'Aero IV', 'Fire IV', 'Blizzard IV', 'Thunder IV',
  40.         'Stone V', 'Water V', 'Aero V', 'Fire V', 'Blizzard V', 'Thunder V',
  41.         'Stone VI', 'Water VI', 'Aero VI', 'Fire VI', 'Blizzard VI', 'Thunder VI',
  42.         'Stonega III', 'Waterga III', 'Aeroga III', 'Firaga III', 'Blizzaga III', 'Thundaga III',
  43.         'Stoneja', 'Waterja', 'Aeroja', 'Firaja', 'Blizzaja', 'Thundaja',
  44.         'Quake II', 'Flood II', 'Tornado II', 'Flare II', 'Freeze II', 'Burst II'}
  45.  
  46.     gear.macc_hands = {name="Lurid Mitts"}
  47.    
  48.     -- Additional local binds
  49.     send_command('bind ` input /ma Stun <t>; wait 0.5')
  50.     send_command('bind ^` gs c toggle MagicBurst')
  51.     send_command('bind ^- input /ja "Light Arts" <me>')
  52.     send_command('bind ^= input /ja "Dark Arts" <me>')
  53.     send_command('bind delete input /ja "Alacrity" <me>')
  54.     send_command('bind end input /ja "Mana Wall" <me>')
  55.     send_command('bind home input /ws "Myrkr" <me>')
  56.  
  57.     select_default_macro_book()
  58. end
  59.  
  60. -- Called when this job file is unloaded (eg: job change)
  61. function user_unload()
  62.     send_command('unbind `')
  63.     send_command('unbind ^`')
  64.     send_command('unbind ^-')
  65.     send_command('unbind ^=')
  66.     send_command('unbind delete')
  67.     send_command('unbind end')
  68.     send_command('unbind home')
  69. end
  70.  
  71. -- Define sets and vars used by this job file.
  72. function init_gear_sets()
  73.     --------------------------------------
  74.     -- Start defining the sets
  75.     --------------------------------------
  76.    
  77. ---- Precast Sets ----
  78.     organizer_items = {main="Marin Staff +1", sub="Elder's Grip +1",
  79.         waist="Hachirin-no-Obi",remedy="Remedy",echo="Echo Drop"}  
  80.    
  81.     -- Precast sets to enhance JAs
  82.     sets.precast.JA['Mana Wall'] = {}
  83.     sets.precast.JA.Manafont = {}
  84.    
  85.     -- equip to maximize HP (for Tarus) and minimize MP loss before using convert
  86.     sets.precast.JA.Convert = {}
  87.  
  88.  
  89. -- Fast cast sets for spells
  90.  
  91.     sets.precast.FC = {main=gear.FastcastStaff,ammo="Impatiens",
  92.         neck="Orunmila's Torque",ear1="Loquacious Earring",
  93.         body={ name="Helios Jacket", augments={'Mag. Acc.+16 "Mag.Atk.Bns."+16',}},hands={ name="Helios Gloves", augments={'"Mag.Atk.Bns."+25','"Fast Cast"+5',}},ring1="Prolix Ring",
  94.         back="Swith Cape +1", waist="Witful Belt", legs="Artsieq Hose", feet="Regal Pumps +1"}
  95.        
  96.     -- Fast cast set while in HighMP casting mode to assist in maintaining 2000 MP for Death
  97.     sets.precast.FC.HighMP = {main="Grioavolr",sub="Niobid Strap",ammo="Ghastly Tathlum +1",
  98.         head=merl_head_FC,neck="Dualism Collar +1",ear1="Loquacious Earring",ear2="Etiolation Earring",
  99.         body=merl_body_MB,hands="Otomi Gloves",ring1="Mephitas's Ring",ring2="Mephitas's Ring +1",
  100.         back="Bane Cape",waist="Shinjutsu-no-obi +1",legs="Psycloth Lappas",feet=merl_feet_MAB}
  101.  
  102.     sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  103.     sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {neck="Stoicheion Medal",ear1="Barkarole Earring"})  
  104.     sets.precast.FC.Cure = set_combine(sets.precast.FC, {})
  105.     sets.precast.FC.Curaga = sets.precast.FC.Cure
  106.  
  107.     -- Weaponskill sets
  108.     -- Default set for any weaponskill that isn't any more specifically defined
  109.     sets.precast.WS = {}
  110.  
  111.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  112.     sets.precast.WS['Myrkr'] = {ammo="Kalboron Stone",
  113.         neck="Chrysopoeia Torque", ear1="Moonshade Earring", ear2="Loquacious Earring",
  114.         body="Weatherspoon Robe +1", hands="Otomi Gloves", ring1="Prolix Ring", ring2="Dark Ring",
  115.         waist="Bane Cape", waist="Fucho-no-obi", legs="Weatherspoon Pants +1", feet="Wayfarer Clogs"}
  116.    
  117. ---- Midcast Sets ----
  118.  
  119.     sets.midcast.FastRecast = {back="Swith Cape +1"}
  120.    
  121.     sets.midcast.Cure = {ammo="Kalboron Stone",
  122.         head="Wayfarer Circlet", neck="Fylgja Torque +1", ear1="Roundel Earring", ear2="Healing Earring",
  123.         body="Spaekona's Coat +1", hands="Wayfarer Cuffs", ring1="Sirona's Ring", ring2="Haoma's Ring",
  124.         back="Tempered Cape", waist="Bishop's Sash", legs="Nares Trews", feet={ name="Helios Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic crit. hit rate +2','Magic burst mdg.+8%',}}}
  125.        
  126.     sets.midcast.Cure.Self = set_combine(sets.midcast.Cure, {})
  127.     sets.midcast.Curaga = sets.midcast.Cure
  128.     sets.midcast['Enhancing Magic'] = {head="Telchine Cap",body="Telchine Chasuble",hands="Telchine Gloves",legs="Telchine Braconi",feet="Telchine Pigaches"}
  129.     sets.midcast.Klimaform = sets.midcast.FastRecast
  130.     sets.midcast.Storm = sets.midcast['Enhancing Magic']
  131.    
  132.     sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {ammo="Hydrocera",
  133.         neck="Nodens Gorget",ear1="Lifestorm Earring",ear2="Earthcry Earring",
  134.         body="Amalric Doublet",ring1="Leviathan Ring",ring2="Leviathan Ring",
  135.         back="Swith Cape +1",waist="Siegel Sash",legs="Haven Hose",})
  136.  
  137.     sets.midcast['Enfeebling Magic'] = {ammo="Hasty Pinion +1",
  138.         head={ name="Helios Band", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic crit. hit rate +5','Magic burst mdg.+7%',}}, neck="Enfeebling Torque", ear1="Psystorm Earring",ear2="Loquacious Earring",
  139.         body={ name="Helios Jacket", augments={'Mag. Acc.+16 "Mag.Atk.Bns."+16',}}, hands="Lurid Mitts", ring1="Prolix Ring", ring2="Irrwisch Ring",
  140.         back="Swith Cape +1", waist="Witful Belt", legs="Artsieq Hose",feet={ name="Helios Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic crit. hit rate +2','Magic burst mdg.+8%',}}}
  141.        
  142.     sets.midcast.ElementalEnfeeble = sets.midcast['Enfeebling Magic']
  143.     sets.midcast.BardSong = sets.midcast['Enfeebling Magic']
  144.  
  145. -- Dark Magic Sets
  146.    
  147.     sets.midcast['Dark Magic'] = {
  148.         neck="Dark Torque"}
  149.  
  150.     sets.midcast.Drain = set_combine(sets.midcast['Dark Magic'], {})
  151.    
  152.     sets.midcast.Aspir = sets.midcast.Drain
  153.  
  154.     sets.midcast.Stun = {ammo="Hasty Pinion +1",
  155.         head={ name="Helios Band", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic crit. hit rate +5','Magic burst mdg.+7%',}}, neck="Orunmila's Torque", ear1="Psystorm Earring",ear2="Lifestorm Earring",
  156.         body={ name="Helios Jacket", augments={'Mag. Acc.+16 "Mag.Atk.Bns."+16',}}, hands="Wayfarer Cuffs", ring1="Shiva Ring", ring2="Irrwisch Ring",
  157.         back="Refraction Cape", waist="Cognition Belt", legs={ name="Telchine Braconi", augments={'Mag. Acc.+22',}},legs="Regal Pumps +1"}
  158.        
  159.  
  160. -- Elemental Magic sets
  161.    
  162.     sets.midcast['Elemental Magic'] = {ammo="Kalboron Stone",
  163.         head={ name="Helios Band", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic crit. hit rate +5','Magic burst mdg.+7%',}},neck="Saevus Pendant +1", ear1="Barkarole Earring",ear2="Friomisi Earring",
  164.         body="Wretched Coat",hands="Amalric Gages",ring1="Shiva Ring +1",ring2="Shiva Ring",
  165.         back="Taranus's Cape",waist="Sekhmet Corset",legs="Telchine Braconi",feet={ name="Helios Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic crit. hit rate +2','Magic burst mdg.+8%',}}}
  166.  
  167.     sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'], {neck="Sanctity Necklace",back="Bane Cape"})
  168.     sets.midcast['Elemental Magic'].HighTierNuke = set_combine(sets.midcast['Elemental Magic'], {})
  169.     sets.midcast['Elemental Magic'].HighTierNuke.Resistant = set_combine(sets.midcast['Elemental Magic'].HighTierNuke, {neck="Sanctity Necklace",back="Bane Cape"})
  170.     sets.midcast['Elemental Magic'].HighTierNuke.AF = set_combine(sets.midcast['Elemental Magic'].HighTierNuke, {body="Spaekona's Coat +1"})
  171.     sets.midcast.Death = sets.midcast['Elemental Magic'].HighTierNuke
  172.  
  173.     -- Minimal damage gear for procs.
  174.     sets.midcast['Elemental Magic'].Proc = {main==empty, sub=empty,ammo="Impatiens",
  175.         head=empty,neck="Loricate Torque +1",ear1="Gwati Earring",ear2="Loquacious Earring",
  176.         body="Spae. Coat +1",hands="Serpentes Cuffs",ring1="Weatherspoon Ring",ring2="Prolix Ring",
  177.         back="Swith Cape +1",waist="Witful Belt",legs="Assiduity Pants +1",feet="Regal Pumps +1"}
  178.        
  179.        
  180. -- HighMP Midcast Sets --
  181.    
  182.     sets.midcast.FastRecast.HighMP = sets.precast.FC.HighMP
  183.     sets.midcast['Enhancing Magic'].HighMP = sets.midcast.FastRecast.HighMP
  184.     sets.midcast['Enfeebling Magic'].HighMP = set_combine(sets.midcast.FastRecast.HighMP, {head=merl_head_MAB,neck="Sanctity Necklace"})
  185.     sets.midcast.Klimaform.HighMP = sets.midcast.FastRecast.HighMP
  186.     sets.midcast.Storm.HighMP = sets.midcast.FastRecast.HighMP
  187.     sets.midcast.Stoneskin.HighMP = sets.midcast.FastRecast.HighMP
  188.     sets.midcast.Cure.HighMP = sets.midcast.FastRecast.HighMP
  189.     --sets.midcast.Refresh.HighMP = set_combine(sets.midcast['Enhancing Magic'].HighMP, {head="Amalric Coif"})
  190.    
  191.     sets.midcast.Death.HighMP = {}
  192.        
  193.     -- Aspir set to maximize MP for Death while in HighMP Casting Mode
  194.     sets.midcast.Aspir.HighMP = {} 
  195.        
  196.    
  197.     -- Sets to return to when not performing an action.
  198.    
  199.     -- Resting sets
  200.     sets.resting = {}
  201.    
  202.     -- Idle sets
  203.    
  204.     -- Normal refresh idle set
  205.     sets.idle = {ammo="Kalboron Stone",
  206.         neck="Twilight Torque", ear1="Merman's Earring", ear2="Merman's Earring",
  207.         body="Respite Cloak",hands="Serpentes Cuffs",ring1="Defending Ring",ring2="Dark Ring",
  208.         back="Mecistopins Mantle",waist="Fucho-no-obi",legs="Assiduity Pants +1",feet="Merlinic Crackows"}
  209.        
  210.     sets.idle.HighMP = {}  
  211.  
  212.     -- Idle mode that keeps PDT gear on, but doesn't prevent normal gear swaps for precast/etc.
  213.     sets.idle.PDT = {ammo="Kalboron Stone",
  214.         neck="Twilight Torque", ear1="Merman's Earring", ear2="Merman's Earring",
  215.         body="Respite Cloak",hands="Lurid Mitts",ring1="Defending Ring",ring2="Dark Ring",
  216.         back="Umbra Cape",waist="Fucho-no-obi",legs="Assiduity Pants +1",feet="Merlinic Crackows"}
  217.  
  218.     -- Idle mode scopes:
  219.     -- Idle mode when weak.
  220.     sets.idle.Weak = {ammo="Kalboron Stone",
  221.         neck="Twilight Torque", ear1="Merman's Earring", ear2="Merman's Earring",
  222.         body="Respite Cloak",hands="Lurid Mitts",ring1="Defending Ring",ring2="Dark Ring",
  223.         back="Umbra Cape",waist="Fucho-no-obi",legs="Assiduity Pants +1",feet="Merlinic Crackows"}
  224.        
  225.     sets.idle.Weak.HighMP = set_combine(sets.idle.HighMP, {})  
  226.    
  227.     -- Town gear.
  228.     sets.idle.Town = {ammo="Kalboron Stone",
  229.         neck="Chrysopoeia Torque", ear1="Merman's Earring", ear2="Merman's Earring",
  230.         body="Respite Cloak",hands="Serpentes Cuffs",ring1="Defending Ring",ring2="Dark Ring",
  231.         back="Mecistopins Mantle",waist="Fucho-no-obi",legs="Assiduity Pants +1",feet="Herald's Gaiters"}
  232.                
  233.        
  234.     -- Defense sets
  235.  
  236.     sets.defense.PDT = {ammo="Kalboron Stone",
  237.         neck="Chrysopoeia Torque", ear1="Merman's Earring", ear2="Merman's Earring",
  238.         body="Twilight Cloak",hands="Lurid Mitts",ring1="Defending Ring",ring2="Dark Ring",
  239.         back="Umbra Cape",waist="Fucho-no-obi",legs="Assiduity Pants +1",feet="Merlinic Crackows"}
  240.  
  241.     sets.defense.MDT = {ammo="Kalboron Stone",
  242.         neck="Chrysopoeia Torque", ear1="Merman's Earring", ear2="Merman's Earring",
  243.         body="Twilight Cloak",hands="Lurid Mitts",ring1="Defending Ring",ring2="Dark Ring",
  244.         back="Umbra Cape",waist="Fucho-no-obi",legs="Assiduity Pants +1",feet="Merlinic Crackows"}
  245.  
  246.     sets.Kiting = {feet="Herald's Gaiters"}
  247.     sets.latent_refresh = {waist="Fucho-no-obi"}
  248.  
  249.     -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  250.    
  251.     sets.buff['Mana Wall'] = {feet="Goetia Sabots +2"}
  252.  
  253.     sets.magic_burst = {head={ name="Helios Band", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Magic crit. hit rate +5','Magic burst mdg.+7%',}},ear2="Static Earring",
  254.         neck="Mizukage-no-Kubikazari",body="Wretched Coat",hands="Amalric Gages",ring2="Mujin Band",back="Taranus's Cape",feet="Merlinic Crackows"}
  255.     -- Cap: 40%
  256.  
  257.     -- Engaged sets
  258.  
  259.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  260.     -- sets if more refined versions aren't defined.
  261.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  262.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  263.    
  264.     -- Normal melee group
  265.     --[[sets.engaged = {
  266.         head="Zelus Tiara",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  267.         body="Hagondes Coat",hands="Bokwus Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
  268.         back="Umbra Cape",waist="Goading Belt",legs=gear.hag_mab_legs,feet="Hagondes Sabots"}
  269.     ]]--
  270.    
  271. end
  272.  
  273. -------------------------------------------------------------------------------------------------------------------
  274. -- Job-specific hooks for standard casting events.
  275. -------------------------------------------------------------------------------------------------------------------
  276.  
  277. function pretarget(spell,action)
  278.     if spell.type == "WeaponSkill" and player.status == 'Engaged' and spell.target.distance > target_distance then -- Cancel WS If You Are Out Of Range --
  279.        cancel_spell()
  280.        add_to_chat(123, spell.name..' Canceled: [Out of Range]')
  281.        return
  282.     end
  283. end
  284.  
  285. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  286. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  287. function job_precast(spell, action, spellMap, eventArgs)
  288.     refine_various_spells(spell, action, spellMap, eventArgs)
  289.     if spellMap == 'Cure' or spellMap == 'Curaga' then
  290.         gear.default.obi_waist = "Korin Obi"
  291.     elseif spell.skill == 'Elemental Magic' then
  292.         gear.default.obi_waist = "Sekhmet Corset"
  293.         if state.CastingMode.value == 'Proc' then
  294.             classes.CustomClass = 'Proc'
  295.         end
  296.     end
  297.     if (spell.type:endswith('Magic') or spell.type == "Ninjutsu") and buffactive.silence then -- Auto Use Echo Drops If You Are Silenced --
  298.         cancel_spell()
  299.         send_command('input /item "Echo Drops" <me>')
  300.     end
  301. end
  302.  
  303.  
  304. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  305. function job_midcast(spell, action, spellMap, eventArgs)
  306.  
  307. end
  308.  
  309. function job_post_midcast(spell, action, spellMap, eventArgs)
  310.     if spell.skill == 'Elemental Magic' and state.MagicBurst.value then
  311.         equip(sets.magic_burst)
  312.     end
  313.     if spell.skill == 'Elemental Magic' and spell.element == world.day_element or spell.element == world.weather_element and not spell.name == 'Meteor' then
  314.         equip ({waist="Hachirin-no-Obi"})
  315.     end
  316. end
  317.  
  318. function job_aftercast(spell, action, spellMap, eventArgs)
  319.     -- Lock feet after using Mana Wall.
  320.     if not spell.interrupted then
  321.         if spell.english == 'Mana Wall' then
  322.             enable('feet', 'back')
  323.             equip(sets.buff['Mana Wall'])
  324.             disable('feet', 'back')
  325.         end
  326.     end
  327.     if spell.english == 'Sleep' or spell.english == 'Sleepga' then
  328.         send_command('@wait 50;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
  329.     elseif spell.english == 'Sleep II' or spell.english == 'Sleepga II' then
  330.         send_command('@wait 80;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
  331.     elseif spell.english == 'Break' or spell.english == 'Breakga' then
  332.         send_command('@wait 20;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
  333.     end
  334. end
  335.  
  336. -------------------------------------------------------------------------------------------------------------------
  337. -- Job-specific hooks for non-casting events.
  338. -------------------------------------------------------------------------------------------------------------------
  339.  
  340. -- Called when a player gains or loses a buff.
  341. -- buff == buff gained or lost
  342. -- gain == true if the buff was gained, false if it was lost.
  343. function job_buff_change(buff, gain)
  344.     -- Unlock feet when Mana Wall buff is lost.
  345.     if buff == "Mana Wall" and not gain then
  346.         enable('feet', 'back')
  347.         handle_equipping_gear(player.status)
  348.     end
  349. end
  350.  
  351. -- Handle notifications of general user state change.
  352. function job_state_change(stateField, newValue, oldValue)
  353.     if stateField == 'Offense Mode' then
  354.         if newValue == 'Normal' then
  355.             disable('main','sub','range')
  356.         else
  357.             enable('main','sub','range')
  358.         end
  359.     end
  360.    
  361. end
  362.  
  363.  
  364. -------------------------------------------------------------------------------------------------------------------
  365. -- User code that supplements standard library decisions.
  366. -------------------------------------------------------------------------------------------------------------------
  367.  
  368. -- Custom spell mapping.
  369. function job_get_spell_map(spell, default_spell_map)
  370.     if spell.skill == 'Elemental Magic' and default_spell_map ~= 'ElementalEnfeeble' then
  371.         -- No real need to differentiate with current gear.
  372.         if lowTierNukes:contains(spell.english) then
  373.             return 'LowTierNuke'
  374.         else
  375.             return 'HighTierNuke'
  376.         end
  377.    
  378.     end
  379. end
  380.  
  381. -- Modify the default idle set after it was constructed.
  382. function customize_idle_set(idleSet)
  383.     if player.mpp < 51 then
  384.         idleSet = set_combine(idleSet, sets.latent_refresh)
  385.     end
  386.    
  387.     if world.area:contains('Adoulin') then
  388.         idleSet = set_combine(sets.idle.Town, {body="Councilor's Garb"})
  389.     end
  390.    
  391.     return idleSet
  392. end
  393.  
  394.  
  395. -- Function to display the current relevant user state when doing an update.
  396. function display_current_job_state(eventArgs)
  397.     display_current_caster_state()
  398.     eventArgs.handled = true
  399. end
  400.  
  401. -------------------------------------------------------------------------------------------------------------------
  402. -- Utility functions specific to this job.
  403. -------------------------------------------------------------------------------------------------------------------
  404. function refine_various_spells(spell, action, spellMap, eventArgs)
  405.     aspirs = S{'Aspir','Aspir II','Aspir III'}
  406.     sleeps = S{'Sleep','Sleep II'}
  407.     sleepgas = S{'Sleepga','Sleepga II'}
  408.    
  409.     if not sleepgas:contains(spell.english) and not sleeps:contains(spell.english) and not aspirs:contains(spell.english) then
  410.         return
  411.     end
  412.    
  413.     local newSpell = spell.english
  414.     local spell_recasts = windower.ffxi.get_spell_recasts()
  415.     local cancelling = 'All '..spell.english..' spells are on cooldown. Cancelling spell casting.'
  416.    
  417.     if spell_recasts[spell.recast_id] > 0 then
  418.         if aspirs:contains(spell.english) then
  419.             if spell.english == 'Aspir' then
  420.                 add_to_chat(122,cancelling)
  421.                 eventArgs.cancel = true
  422.                 return
  423.             elseif spell.english == 'Aspir II' then
  424.                 newSpell = 'Aspir'
  425.             elseif spell.english == 'Aspir III' then
  426.                 newSpell = 'Aspir II'
  427.             end        
  428.         elseif sleeps:contains(spell.english) then
  429.             if spell.english == 'Sleep' then
  430.                 add_to_chat(122,cancelling)
  431.                 eventArgs.cancel = true
  432.                 return
  433.             elseif spell.english == 'Sleep II' then
  434.                 newSpell = 'Sleep'
  435.             end
  436.         elseif sleepgas:contains(spell.english) then
  437.             if spell.english == 'Sleepga' then
  438.                 add_to_chat(122,cancelling)
  439.                 eventArgs.cancel = true
  440.                 return
  441.             elseif spell.english == 'Sleepga II' then
  442.                 newSpell = 'Sleepga'
  443.             end
  444.         end
  445.     end
  446.    
  447.     if newSpell ~= spell.english then
  448.         send_command('@input /ma "'..newSpell..'" '..tostring(spell.target.raw))
  449.         eventArgs.cancel = true
  450.         return
  451.     end
  452. end
  453.  
  454.  
  455.  
  456. -- Select default macro book on initial load or subjob change.
  457. function select_default_macro_book()
  458.     set_macro_page(1, 6)
  459. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement