Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- NOTE: I do not play run, so this will not be maintained for 'active' use.
- -- It is added to the repository to allow people to have a baseline to build from,
- -- and make sure it is up-to-date with the library API.
- -------------------------------------------------------------------------------------------------------------------
- -- Setup functions for this job. Generally should not be modified.
- -------------------------------------------------------------------------------------------------------------------
- -- Initialization function for this job file.
- function get_sets()
- mote_include_version = 2
- -- Load and initialize the include file.
- include('Mote-Include.lua')
- end
- include('organizer-lib')
- -- Setup vars that are user-independent.
- function job_setup()
- -- Table of entries
- rune_timers = T{}
- -- entry = rune, index, expires
- if player.main_job_level >= 65 then
- max_runes = 2
- elseif player.main_job_level >= 35 then
- max_runes = 2
- elseif player.main_job_level >= 5 then
- max_runes = 1
- else
- max_runes = 0
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
- -------------------------------------------------------------------------------------------------------------------
- function user_setup()
- state.OffenseMode:options('Normal', 'Mid', 'Acc', 'PDT', 'MDT')
- state.WeaponskillMode:options('Normal', 'Acc')
- state.PhysicalDefenseMode:options('PDT')
- state.IdleMode:options('Regen')
- select_default_macro_book()
- info.RuneEnchantment = S{"Tellus", "Unda", "Flabra", "Ignis", "Gelus", "Sulpor", "Lux", "Tenebrae"}
- end
- function init_gear_sets()
- sets.enmity = {
- head="Loess Barbuta +1", neck="Warder's Charm", ear1="Trux Earring", ear2="Cryptic Earring",
- body="Emet Harness +1", hands="Kurys Gloves", ring1="Pernicious ring", ring2="Supershear Ring",
- back="Mubvum. Mantle", waist="Goading Belt", legs="Zoar Subligar +1", feet="Usk. Sune-Ate +1"}
- --------------------------------------
- -- Precast sets
- --------------------------------------
- -- Precast sets to enhance JAs
- sets.precast.JA = sets.enmity
- sets.precast.JA['Meikyo Shisui'] = set_combine(sets.enmity, {feet="Sak. Sune-Ate +1"})
- sets.precast.JA['Blade Bash'] = set_combine(sets.enmity, {hands="Sakonji Kote +1",})
- sets.precast.JA['Sekkanoki'] = set_combine(sets.enmity, {hands="Kasuga kote +1",})
- sets.precast.JA['Meditate'] = set_combine(sets.enmity, {head="Wakido Kabuto +1", hands="Sakonji Kote +1", back="Takaha Mantle",})
- sets.precast.JA['Warding Circle'] = set_combine(sets.enmity, {head="Wakido Kabuto +1"})
- sets.precast.JA['Seigan'] = set_combine(sets.enmity, {head="Kasuga Kabuto +1"})
- sets.precast.JA['Third Eye'] = set_combine(sets.enmity, {legs="Sao. Haidate +2"})
- sets.precast.JA['Konzen-ittai'] = set_combine(sets.enmity, {})
- sets.precast.JA['Hagakure'] = set_combine(sets.enmity, {})
- sets.precast.JA['Sengikori'] = set_combine(sets.enmity, {feet="Kasuga sune-ate +1",})
- -- Fast cast sets for spells
- sets.precast.FC = {
- head="Otronif Mask +1", neck="Orunmila's Torque", ear1="Loquacious Earring", ear2="Etiolation Earring",
- body="Emet Harness +1", hands="Buremte Gloves", ring1="Weather. Ring", ring2="Prolix Ring",
- back="Mollusca Mantle", waist="Flume Belt", legs="Xaddi Cuisses", feet="Amm Greaves"}
- sets.precast.FC['Utsusemi: Ichi'] = set_combine(sets.precast.FC, {})
- sets.precast.FC['Utsusemi: Ni'] = set_combine(sets.precast.FC['Utsusemi: Ichi'], {})
- -- Weaponskill sets
- sets.precast.WS = {
- head="Gavialis Helm", neck="Fotia Gorget", ear1="Zwazo Earring +1", ear2="Moonshade Earring",
- body="Phorcys Korazin", hands="Despair Fin. Gaunt.", ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
- back="Buquwik Cape", waist="Fotia Belt", legs="Zoar Subligar +1", feet="Loyalist Sabatons"}
- sets.precast.WS['Tachi: Fudo'] = {
- head="Gavialis Helm", neck="Fotia Gorget", ear1="Zwazo Earring +1", ear2="Moonshade Earring",
- body="Phorcys Korazin", hands="Despair Fin. Gaunt.", ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
- back="Buquwik Cape", waist="Metalsinger Belt", legs="Zoar Subligar +1", feet="Loyalist Sabatons"}
- sets.precast.WS['Tachi: Fudo'].Acc = set_combine(sets.precast.WS['Tachi: Fudo'].Normal,
- {body="Acro Surcoat", ring1="Rufescent Ring",
- back="Takaha Mantle", waist="Prosilio Belt +1", legs="Acro Breeches", feet="Acro Leggings"})
- sets.precast.WS['Tachi: Kasha'] = {
- head="Gavialis Helm", neck="Fotia Gorget", ear1="Zwazo Earring +1", ear2="Moonshade Earring",
- body="Phorcys Korazin", hands="Despair Fin. Gaunt.", ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
- back="Buquwik Cape", waist="Metalsinger Belt", legs="Zoar Subligar +1", feet="Loyalist Sabatons"}
- sets.precast.WS['Tachi: Kasha'].Acc = set_combine(sets.precast.WS['Tachi: Kasha'].Normal,
- {body="Acro Surcoat", ring1="Rufescent Ring",
- back="Takaha Mantle", waist="Prosilio Belt +1", legs="Acro Breeches", feet="Acro Leggings"})
- sets.precast.WS['Tachi: Gekko'] = {
- head="Gavialis Helm", neck="Fotia Gorget", ear1="Zwazo Earring +1", ear2="Moonshade Earring",
- body="Phorcys Korazin", hands="Despair Fin. Gaunt.", ring1="Ifrit Ring +1", ring2="Ifrit Ring +1",
- back="Buquwik Cape", waist="Metalsinger Belt", legs="Zoar Subligar +1", feet="Loyalist Sabatons"}
- sets.precast.WS['Tachi: Gekko'].Acc = set_combine(sets.precast.WS['Tachi: Gekko'].Normal,
- {body="Acro Surcoat", ring1="Rufescent Ring",
- back="Takaha Mantle", waist="Prosilio Belt +1", legs="Acro Breeches", feet="Acro Leggings"})
- sets.precast.WS['Tachi: Rana'] = {
- head="Gavialis Helm", neck="Fotia Gorget", ear1="Zwazo Earring +1", ear2="Cessance Earring",
- body="Acro Surcoat", hands="Despair Fin. Gaunt.", ring1="Rufescent Ring", ring2="Ifrit Ring +1",
- back="Annealed Mantle", waist="Fotia Belt", legs="Acro Breeches", feet="Acro Leggings"}
- sets.precast.WS['Tachi: Rana'].Acc = set_combine(sets.precast.WS['Tachi: Rana'].Normal,
- {ear2="Zennaroi Earring",
- ring2="Ramuh Ring +1",
- back="Takaha Mantle", waist="Fotia Belt"})
- sets.precast.WS['Stardiver'] = {
- head="Gavialis Helm", neck="Fotia Gorget", ear1="Zwazo Earring +1", ear2="Cessance Earring",
- body="Acro Surcoat", hands="Despair Fin. Gaunt.", ring1="Rufescent Ring", ring2="Ifrit Ring +1",
- back="Annealed Mantle", waist="Fotia Belt", legs="Acro Breeches", feet="Acro Leggings"}
- sets.precast.WS['Stardiver'].Acc = set_combine(sets.precast.WS['Stardiver'].Normal,
- {ear2="Zennaroi Earring",
- ring2="Ramuh Ring +1",
- back="Takaha Mantle", waist="Fotia Belt"})
- sets.precast.WS['Apex Arrow'] = {
- head="Sakonji Kabuto +1", neck="Fotia Gorget", ear1="Clearview Earring", ear2="Moonshade Earring",
- body="Kyujutsugi", hands="Unkai Kote +2", ring1="Hajduk Ring", ring2="Longshot Ring",
- back="Buquwik Cape", waist="Fotia Belt", legs="Aeto. Trousers +1", feet="Wakido Sune-Ate +1"}
- sets.precast.WS['Apex Arrow'].Acc = set_combine(sets.precast.WS['Apex Arrow'].Normal, {})
- sets.precast.WS['Tachi: Hobaku'] = {
- head="Gavialis Helm", neck="Fotia Gorget", ear1="Zwazo Earring +1", ear2="Zennaroi Earring",
- body="Acro Surcoat", hands="Despair Fin. Gaunt.", ring1="Rufescent Ring", ring2="Ramuh Ring +1",
- back="Takaha Mantle", waist="Fotia Belt", legs="Acro Breeches", feet="Acro Leggings"}
- sets.precast.WS['Tachi: Hobaku'].Acc = set_combine(sets.precast.WS['Tachi: Hobaku'].Normal, {})
- --------------------------------------
- -- Midcast sets
- --------------------------------------
- sets.midcast.FastRecast = {
- head="Otronif Mask +1", neck="Orunmila's Torque", ear1="Loquacious Earring", ear2="Etiolation Earring",
- body="Emet Harness +1", hands="Buremte Gloves", ring1="Weather. Ring", ring2="Prolix Ring",
- back="Mollusca Mantle", waist="Flume Belt", legs="Xaddi Cuisses", feet="Amm Greaves"}
- sets.midcast.FastRecast['Utsusemi: Ichi'] = sets.midcast.FastRecast
- sets.midcast.FastRecast['Utsusemi: Ni'] = sets.midcast.FastRecast
- --------------------------------------
- -- Idle/resting/defense/etc sets
- --------------------------------------
- sets.idle = {range="Cibitshavore", ammo="Eminent Arrow",
- head="Twilight Helm", neck="Wiglen Gorget", ear1="Genmei earring", ear2="Etiolation earring",
- body="Kumarbi's Akar", hands="Sakonji Kote +1", ring1="Sheltered Ring", ring2="Paguroidea ring",
- back="Mubvum. Mantle", waist="Flume Belt", legs="Otronif Brais +1", feet="Danzo Sune-Ate"}
- sets.defense.PDT = {range="Cibitshavore", ammo="Eminent Arrow",
- head="Loess Barbuta +1", neck="Twilight Torque", ear1="Black Earring", ear2="Genmei Earring",
- body="Emet Harness +1", hands="Sakonji Kote +1", ring1="Defending Ring", ring2="Dark Ring",
- back="Mollusca Mantle", waist="Flume Belt", legs="Xaddi Cuisses", feet="Amm Greaves",}
- sets.defense.MDT = {range="Cibitshavore", ammo="Eminent Arrow",
- head="Gavialis Helm", neck="Warder's Charm", ear1="Sanare Earring", ear2="Etiolation Earring",
- body="Kyujutsugi", hands="Kurys Gloves", ring1="Defending Ring", ring2="Shadow Ring",
- back="Mubvum. Mantle", waist="Lieutenant's Sash", legs="Osmium Cuisses", feet="Daihanshi Habaki",}
- sets.defense.BDT = {range="Cibitshavore", ammo="Eminent Arrow",
- head="Loess Barbuta +1", neck="Twilight Torque", ear1="Zwazo Earring +1", ear2="Cryptic Earring",
- body="Kyujutsugi", hands="Kurys Gloves", ring1="Defending Ring", ring2="K'ayres Ring",
- back="Mollusca Mantle", waist="Lieutenant's Sash", legs="Scuff. Cosciales", feet="Amm Greaves",}
- sets.Kiting = {feet="Danzo Sune-Ate"}
- --------------------------------------
- -- Engaged sets
- --------------------------------------
- sets.engaged = {sub="Bloodrain Strap", range="Cibitshavore", ammo="Eminent Arrow",
- head="Acro Helm", neck="Ganesha's Mala", ear1="Trux Earring", ear2="Cessance Earring",
- body="Kasuga Domaru +1", hands="Acro Gauntlets", ring1="Petrov Ring", ring2="Rajas Ring",
- back="Takaha Mantle", waist="Windbuffet Belt +1", legs="Kasuga Haidate +1", feet="Acro Leggings"}
- sets.engaged.Mid = {sub="Bloodrain Strap", range="Cibitshavore", ammo="Eminent Arrow",
- head="Acro Helm", neck="Da. Nodowa +1", ear1="Zwazo Earring +1", ear2="Cessance Earring",
- body="Kasuga Domaru +1", hands="Acro Gauntlets", ring1="Petrov Ring", ring2="Rajas Ring",
- back="Takaha Mantle", waist="Kentarch Belt +1", legs="Kasuga Haidate +1", feet="Acro Leggings"}
- sets.engaged.Acc = {sub="Bloodrain Strap", range="Cibitshavore", ammo="Eminent Arrow",
- head="Acro Helm", neck="Subtlety Spectacles", ear1="Zwazo Earring +1", ear2="Zennaroi Earring",
- body="Kasuga Domaru +1", hands="Acro Gauntlets", ring1="Ramuh Ring +1", ring2="Ramuh Ring +1",
- back="Takaha Mantle", waist="Olseni Belt", legs="Kasuga Haidate +1", feet="Acro Leggings"}
- sets.engaged.PDT = {sub="Bloodrain Strap", range="Cibitshavore", ammo="Eminent Arrow",
- head="Loess Barbuta +1", neck="Agitator's Collar", ear1="Black Earring", ear2="Genmei Earring",
- body="Emet Harness +1", hands="Sakonji Kote +1", ring1="Defending Ring", ring2="Patricius Ring",
- back="Mollusca Mantle", waist="Dynamic Belt +1", legs="Xaddi Cuisses", feet="Amm Greaves",}
- sets.engaged.MDT = {sub="Bloodrain Strap", range="Cibitshavore", ammo="Eminent Arrow",
- head="Gavialis Helm", neck="Twilight Torque", ear1="Sanare Earring", ear2="Etiolation Earring",
- body="Kyujutsugi", hands="Kurys Gloves", ring1="Defending Ring", ring2="Shadow Ring",
- back="Engulfer Cape +1", waist="Dynamic Belt +1", legs="Osmium Cuisses", feet="Daihanshi Habaki",}
- sets.engaged.repulse = {}
- sets.engaged.Kogarasumaru = {main="Kogarasumaru"}
- sets.engaged.Murasamemaru = {main="Murasamemaru"}
- sets.engaged.Soboro = {main="Soboro Sukehiro"}
- sets.engaged.Polearm = {main="Nativus Halberd"}
- sets.engaged.Quint = {main="Quint spear"}
- sets.engaged.Bow = {range="Hangaku-no-Yumi"}
- end
- ------------------------------------------------------------------
- -- Action events
- ------------------------------------------------------------------
- -- Run after the default midcast() is done.
- -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
- function job_post_midcast(spell, action, spellMap, eventArgs)
- if spell.english == 'Lunge' or spell.english == 'Swipe' then
- local obi = get_obi(get_rune_obi_element())
- if obi then
- equip({waist=obi})
- end
- end
- end
- function job_aftercast(spell)
- if not spell.interrupted then
- if spell.type == 'Rune' then
- update_timers(spell)
- elseif spell.name == "Lunge" or spell.name == "Gambit" or spell.name == 'Rayke' then
- reset_timers()
- elseif spell.name == "Swipe" then
- send_command(trim(1))
- end
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Customization hooks for idle and melee sets, after they've been automatically constructed.
- -------------------------------------------------------------------------------------------------------------------
- -------------------------------------------------------------------------------------------------------------------
- -- General hooks for other events.
- -------------------------------------------------------------------------------------------------------------------
- function job_precast(spell)
- if info.RuneEnchantment:contains(spell.english) then
- equip(sets.enmity)
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements self-commands.
- -------------------------------------------------------------------------------------------------------------------
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- -- Select default macro book on initial load or subjob change.
- function select_default_macro_book()
- -- Default macro set/book
- if player.sub_job == 'WAR' then
- set_macro_page(1, 3)
- elseif player.sub_job == 'NIN' then
- set_macro_page(2, 3)
- elseif player.sub_job == 'RUN' then
- set_macro_page(3, 3)
- else
- set_macro_page(1, 3)
- end
- end
- function get_rune_obi_element()
- weather_rune = buffactive[elements.rune_of[world.weather_element] or '']
- day_rune = buffactive[elements.rune_of[world.day_element] or '']
- local found_rune_element
- if weather_rune and day_rune then
- if weather_rune > day_rune then
- found_rune_element = world.weather_element
- else
- found_rune_element = world.day_element
- end
- elseif weather_rune then
- found_rune_element = world.weather_element
- elseif day_rune then
- found_rune_element = world.day_element
- end
- return found_rune_element
- end
- function get_obi(element)
- if element and elements.obi_of[element] then
- return (player.inventory[elements.obi_of[element]] or player.wardrobe[elements.obi_of[element]]) and elements.obi_of[element]
- end
- end
- ------------------------------------------------------------------
- -- Timer manipulation
- ------------------------------------------------------------------
- -- Add a new run to the custom timers, and update index values for existing timers.
- function update_timers(spell)
- local expires_time = os.time() + 300
- local entry_index = rune_count(spell.name) + 1
- local entry = {rune=spell.name, index=entry_index, expires=expires_time}
- rune_timers:append(entry)
- local cmd_queue = create_timer(entry).. ';wait 0.05;'
- cmd_queue = cmd_queue .. trim()
- -- add_to_chat(123,'cmd_queue='..cmd_queue)
- send_command(cmd_queue)
- end
- -- Get the command string to create a custom timer for the provided entry.
- function create_timer(entry)
- local timer_name = '"Rune: ' .. entry.rune .. '-' .. tostring(entry.index) .. '"'
- local duration = entry.expires - os.time()
- return 'timers c ' .. timer_name .. ' ' .. tostring(duration) .. ' down'
- end
- -- Get the command string to delete a custom timer for the provided entry.
- function delete_timer(entry)
- local timer_name = '"Rune: ' .. entry.rune .. '-' .. tostring(entry.index) .. '"'
- return 'timers d ' .. timer_name .. ''
- end
- -- Reset all timers
- function reset_timers()
- local cmd_queue = ''
- for index,entry in pairs(rune_timers) do
- cmd_queue = cmd_queue .. delete_timer(entry) .. ';wait 0.05;'
- end
- rune_timers:clear()
- send_command(cmd_queue)
- end
- -- Get a count of the number of runes of a given type
- function rune_count(rune)
- local count = 0
- local current_time = os.time()
- for _,entry in pairs(rune_timers) do
- if entry.rune == rune and entry.expires > current_time then
- count = count + 1
- end
- end
- return count
- end
- -- Remove the oldest rune(s) from the table, until we're below the max_runes limit.
- -- If given a value n, remove n runes from the table.
- function trim(n)
- local cmd_queue = ''
- local to_remove = n or (rune_timers:length() - max_runes)
- while to_remove > 0 and rune_timers:length() > 0 do
- local oldest
- for index,entry in pairs(rune_timers) do
- if oldest == nil or entry.expires < rune_timers[oldest].expires then
- oldest = index
- end
- end
- cmd_queue = cmd_queue .. prune(rune_timers[oldest].rune)
- to_remove = to_remove - 1
- end
- return cmd_queue
- end
- -- Drop the index of all runes of a given type.
- -- If the index drops to 0, it is removed from the table.
- function prune(rune)
- local cmd_queue = ''
- for index,entry in pairs(rune_timers) do
- if entry.rune == rune then
- cmd_queue = cmd_queue .. delete_timer(entry) .. ';wait 0.05;'
- entry.index = entry.index - 1
- end
- end
- for index,entry in pairs(rune_timers) do
- if entry.rune == rune then
- if entry.index == 0 then
- rune_timers[index] = nil
- else
- cmd_queue = cmd_queue .. create_timer(entry) .. ';wait 0.05;'
- end
- end
- end
- return cmd_queue
- end
- ------------------------------------------------------------------
- -- Reset events
- ------------------------------------------------------------------
- windower.raw_register_event('zone change',reset_timers)
- windower.raw_register_event('logout',reset_timers)
- windower.raw_register_event('status change',function(new, old)
- if gearswap.res.statuses[new].english == 'Dead' then
- reset_timers()
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement