Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[**********************************************************
- ==========Annihilator Ranger GearSwap===========
- Based off of the Ranger gearswap file for Suji.Phoenix.
- Save this file as RNG.lua or Yourname_RNG.lua and place it in:
- Windower4.1\addons\GearSwap\data
- **************************************************************]]
- -- Configure sets below.
- function job_setup()
- state.Buff['Decoy Shot'] = buffactive['Decoy Shot']
- or false
- end
- function get_sets(...)
- ammo_warning_limit = 10 -- Set Ammo Limit Check Here --
- warning = true -- warning about low ammo --
- AutoMode = 'ON' -- Set Default Auto RA/WS ON or OFF Here --
- Shot = 'ON' -- toggles the delay on the auto ranged attacking so it gives a longer dealy after coronach --
- windower.send_command('input /macro book 8; wait .1; input /macro set 1; input /echo [ Job Changed to RNG ]') -- changes macro pallet to ranger --
- -- ********spells that will be canceled if paralyze is on****** --
- Stop = {}
- Stop.spells = S{'Berserk','Warcry','Eagle Eye Shot','Scavenge','Shadowbind','Sharpshot','Barrage','Bounty Shot','Decoy Shot','Overkill'}
- -- idle sets --
- sets.idle = {}
- sets.idle.standing = {
- main="Prester",
- sub="Bloodrain Strap",
- head="Arcadian Beret +1",
- neck="Ocachi Gorget",
- ear1="Tripudio Earring",
- ear2="Dawn Earring",
- body="Kyujutsugi",
- hands="Sigyn's Bazubands",
- ring1="Bellona's Ring",
- ring2="Hajduk Ring",
- back="Lutian Cape",
- waist="Impulse Belt",
- legs="Orion Braccae +1",
- feet="Fajin Boots"}
- sets.idle.shooting = sets.idle.standing
- -- snapshot precast set --
- sets.snapshot = {}
- sets.snapshot.snapshot = {
- head="Sylvan Gapette +2",
- body="Sylvan Caban +2",
- hands="Iuitl Wristbands +1",
- waist="Impulse Belt",
- legs="Nahtirah Trousers",
- feet="Wurrukatte Boots",
- ammo="Achiyal. Bullet",}
- -- ranged attack midshot sets --
- sets.tp = {}
- sets.tp.annihilator = {}
- sets.tp.annihilator.low_acc = {
- head="Arcadian Beret +1",
- neck="Ocachi Gorget",
- ear1="Tripudio Earring",
- ear2="Volley Earring",
- body="Kyujutsugi",
- hands="Arc. Bracers +1",
- ring1="Rajas Ring",
- ring2="Hajduk Ring",
- back="Lutian Cape",
- waist="Goading Belt",
- legs="Aetosaur Trousers +1",
- feet="Orion Socks +1",
- ammo="Achiyal. Bullet"}
- sets.tp.annihilator.med_acc = set_combine(sets.tp.annihilator.low_acc, {
- ring1="Hajduk Ring",
- ring2="Rajas Ring",
- waist="Elanid Belt",
- legs="Nahtirah trousers"})
- sets.tp.annihilator.high_acc = set_combine(sets.tp.annihilator.low_acc, {
- hands="Sigyn's bazubands",
- ring1="Hajduk ring",
- ring2="Paqichikaji Ring",
- back="Lutian cape",
- waist="Elanid Belt",
- legs="Arc. Braccae +1"})
- sets.tp.annihilator.Super_acc = set_combine(sets.tp.annihilator.low_acc, {
- neck="Ej Necklace",
- hands="Buremte Gloves",
- ring1="Hajduk ring",
- ring2="Paqichikaji Ring",
- back="Lutian cape",
- waist="Elanid Belt",
- legs="Arc. Braccae +1"})
- sets.tp.Overkill = {}
- sets.tp.Overkill.pre = {
- head="Orion Beret +1",
- neck="Ocachi gorget",
- ear1="Tripudio Earring",
- ear2="Volley Earring",
- body="Arc. jerkin +1",
- hands="Iuitl Wristbands +1",
- ring1="Hajduk ring",
- ring2="Bellona's ring",
- back="Lutian cape",
- waist="Scout's Belt",
- legs="Aetosaur Trousers +1",
- feet="Arcadian Socks +1"}
- sets.tp.Overkill.mid = {
- head="Arc. Beret +1",
- neck="Ocachi Gorget",
- ear1="Tripudio Earring",
- ear2="Volley Earring",
- body="Arc. jerkin +1",
- hands="Arc. Bracers +1",
- ring1="Rajas Ring",
- ring2="Bellona's ring",
- back="Sylvan Chlamys",
- waist="Elanid Belt",
- legs="Sylvan bragues +2",
- feet="Orion Socks +1",
- ammo="Achiyal. Bullet"}
- sets.annihilator = {}
- sets.annihilator.barrage= {}
- sets.annihilator.barrage.low_acc = {
- head="Umbani cap",
- neck="Rancor Collar",
- ear1="Tripudio Earring",
- ear2="Volley Earring",
- body="Kyujutsugi",
- hands="Orion Bracers +1",
- ring1="Hajduk ring",
- ring2="Bellona's Ring",
- back="Lutian Cape",
- waist="Prosilio Belt",
- legs="Arc. Braccae +1",
- feet="Orion Socks +1",
- ammo="Achiyal. Bullet",
- }
- sets.annihilator.barrage.med_acc = set_combine(sets.annihilator.barrage.low_acc, {
- })
- sets.annihilator.barrage.high_acc = set_combine(sets.annihilator.barrage.low_acc, { neck="Ej Necklace",
- back="Lutian Cape",
- })
- sets.annihilator.barrage.Super_acc = set_combine(sets.annihilator.barrage.low_acc, { neck="Ej Necklace",
- back="Lutian Cape",
- })
- sets.ws = {}
- sets.ws.coronach = {}
- sets.ws.coronach.low_acc = {
- ammo="Achiyal. Bullet",
- head="Arcadian Beret +1",
- neck="Rancor Collar",
- ear1="Flame Pearl",
- ear2="Vulcan's Pearl",
- body="Kyujutsugi",
- hands="Arc. Bracers +1",
- ring1="Pyrosoul Ring",
- ring2="Rajas Ring",
- back="Buquwik Cape",
- waist="Breeze Belt",
- legs="Nahtirah Trousers",
- feet="Arcadian Socks +1"}
- sets.ws.coronach.med_acc = set_combine(sets.ws.coronach.low_acc, { hands="Sigyn's bazubands",
- })
- sets.ws.coronach.high_acc = set_combine(sets.ws.coronach.low_acc, { ring2="Paqichikaji Ring",
- legs="Arc. Braccae +1",
- back="Lutian Cape",
- })
- sets.ws.coronach.Super_acc = set_combine(sets.ws.coronach.low_acc, { ring2="Paqichikaji Ring",
- legs="Arc. Braccae +1",
- back="Lutian Cape",
- })
- sets.ws.laststand = {}
- sets.ws.laststand.low_acc = {
- head="Orion Beret +1",
- neck="Light Gorget",
- ear1="Tripudio Earring",
- ear2="Flame Pearl",
- body="Kyujutsugi",
- hands="Arc. Bracers +1",
- ring1="Rajas Ring",
- ring2="Dumakulem's Ring",
- back="Buquwik cape",
- waist="Flame Belt",
- legs="Nahtirah Trousers",
- feet="Orion Socks +1",
- ammo="Achiyal. Bullet"}
- sets.ws.laststand.med_acc = set_combine(sets.ws.laststand.low_acc, { legs="Arc. Braccae +1"})
- sets.ws.laststand.high_acc = set_combine(sets.ws.laststand.low_acc, {neck="Ej Necklace",
- ring1="Hajduk Ring",
- ring2="Paqichikaji Ring",
- back="Lutian Cape",
- legs="Arc. Braccae +1"})
- sets.ws.laststand.Super_acc = set_combine(sets.ws.laststand.low_acc, {neck="Ej Necklace",
- ring1="Hajduk Ring",
- ring2="Paqichikaji Ring",
- back="Lutian Cape",
- legs="Arc. Braccae +1"})
- sets.ws.Wildfire = {}
- sets.ws.Wildfire.low_acc = {
- sub="Bloodrain Strap",
- head="Orion Beret +1",
- neck="Stoicheion Medal",
- ear1="Friomisi Earring",
- ear2="Novio Earring",
- body="Orion Jerkin +1",
- hands="Orion Bracers +1",
- ring1="Stormsoul Ring",
- ring2="Stormsoul Ring",
- back="Toro Cape",
- waist="Aquiline Belt",
- legs="Shneddick tights",
- feet="Arcadian Socks +1",
- ammo="Achiyal. Bullet"}
- sets.ws.Wildfire.med_acc = sets.ws.Wildfire.low_acc
- sets.ws.Wildfire.high_acc = sets.ws.Wildfire.low_acc
- sets.ws.Wildfire.Super_acc = sets.ws.Wildfire.low_acc
- sets.jobability = {}
- sets.jobability['Scavenge'] = {feet = "Orion Socks +1"}
- sets.jobability['Camouflage'] = {body = "Orion Jerkin +1"}
- sets.jobability['Double Shot'] = {head = "sylvan Gapette +2"}
- sets.jobability['Shadowbind'] = {hands = "Orion bracers +1"}
- sets.jobability['Sharpshot'] = {legs = "Orion braccae +1"}
- sets.jobability['Bounty Shot'] = {hands="Syl. Glvltte. +2", waist="Chaac Belt"}
- sets.jobability['Velocity Shot'] = {body = "Sylvan Caban +2",}
- sets.jobability['Eagle Eye Shot'] = T{}
- sets.jobability['Eagle Eye Shot'].low_acc = {
- head="Orion Beret +1",
- neck="Ej Necklace",
- ear1="Flame Pearl",
- ear2="Vulcan's Pearl",
- body="Kyujutsugi",
- hands="Arc. Bracers +1",
- ring1="Pyrosoul Ring",
- ring2="Rajas Ring",
- back="Buquwik Cape",
- waist="Prosilio belt",
- legs="Arc. Braccae +1",
- feet="Orion Socks +1",
- ammo="Achiyal. Bullet",}
- sets.jobability['Eagle Eye Shot'].med_acc = set_combine(sets.jobability['Eagle Eye Shot'].low_acc, {})
- sets.jobability['Eagle Eye Shot'].high_acc = set_combine(sets.jobability['Eagle Eye Shot'].low_acc, {})
- sets.jobability['Eagle Eye Shot'].Super_acc = set_combine(sets.jobability['Eagle Eye Shot'].low_acc, {})
- sets.buffs = {}
- sets.buffs['Doom'] = {ring1 = "Saida Ring"}
- notice('Ranger Binding Interface:')
- notice(' F9 Cycles accuracy level')
- notice(' F10 toggles auto RA/WS')
- notice(' F12 Resets to current best set.')
- windower.send_command('bind F9 gs c cycle accuracy')
- windower.send_command('bind F10 gs c AutoMode')
- windower.send_command('bind F12 gs c reset')
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function notice(msg, color)
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if color == nil then
- color = 158
- end
- windower.add_to_chat(color, msg)
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function file_unload()
- windower.send_command('unbind F9')
- windower.send_command('unbind F10')
- windower.send_command('unbind F12')
- notice('Unbinding Interface.')
- end
- --[[******************************************************************************************]]
- --[[ Configuration variables. More options can be added here and wired into sets accordingly. ]]
- local AccuracyLevels = T{'low', 'med', 'high', 'Super'}
- local AccuracyLevel = AccuracyLevels[1]
- --[[******************************************************************************************]]
- --[[******************************************************************************************]]
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- -- Used to disable slots for items such as Reraise Earring among other things
- function slot_disabling()
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if player.equipment.left_ear == 'Reraise Earring' then
- disable('left_ear')
- windower.add_to_chat(8,'Reraise Earring equiped on left ear')
- elseif player.equipment.right_ear == 'Reraise Earring' then
- disable('right_ear')
- windower.add_to_chat(8,'Reraise Earring equiped on right ear')
- else
- enable('left_ear','right_ear')
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function pretarget(spell,action)
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.english == 'Ranged' and not buffactive.amnesia then -- Auto WS/Decoy Shot/Double Shot --
- if player.tp >= 100 and AutoMode == 'ON' then
- cancel_spell()
- autoWS()
- end
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function precast(spell,arg)
- local check_ammo
- local check_ammo_count = 1
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.type == 'WeaponSkill' then
- if spell.target.distance > 21.0 then
- add_to_chat(167,''..spell.target.name..' is too far can not use '..spell.name..'!!!. Cancelling WeaponSkill ')
- cancel_spell()
- return
- end
- elseif spell.name == "Coronach" then
- equip(sets.ws.coronach[AccuracyLevel .. '_acc'])
- elseif spell.name == "Last Stand" then
- equip(sets.ws.laststand[AccuracyLevel .. '_acc'])
- elseif spell.name == "Wildfire" then
- equip(sets.ws.Wildfire[AccuracyLevel .. '_acc'])
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.type == 'JobAbility' then
- equip(sets.jobability[spell.name])
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.action_type == 'Ranged Attack' then
- check_ammo = player.equipment.ammo
- if player.equipment.ammo == 'empty' or player.inventory[check_ammo].count <= check_ammo_count then
- add_to_chat(123, spell.name..' Canceled: [Out of Ammo]')
- cancel_spell()
- return
- end
- if player.inventory[check_ammo].count <= ammo_warning_limit and player.inventory[check_ammo].count > 1 and not warning then
- add_to_chat(123, '***** [Low Ammo Warning!] *****')
- warning = true
- elseif player.inventory[check_ammo].count > ammo_warning_limit and warning then
- warning = false
- end
- equip(sets.snapshot.snapshot)
- if buffactive.Overkill then
- equip(sets.tp.Overkill.pre)
- end
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.english == 'Eagle Eye Shot' then
- equip(sets.jobability[spell.name][AccuracyLevel .. '_acc'])
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.type == "Ninjutsu" then
- if string.find(spell.english,'Utsusemi') then
- if buffactive['Copy Image (3)'] or buffactive['Copy Image (4)'] then
- cancel_spell()
- add_to_chat(167, spell.english .. ' Canceled: [3+ Images]')
- return
- end
- end
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.english == 'Spectral Jig' and buffactive.Sneak then
- windower.ffxi.cancel_buff(71)
- cast_delay(0.3)
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function midcast(spell)
- if spell.english == "Ranged" then
- equip(sets.tp.annihilator[AccuracyLevel .. '_acc'])
- if buffactive.Barrage then
- equip(sets.annihilator.barrage[AccuracyLevel .. '_acc'])
- elseif buffactive['Overkill'] then
- equip(sets.tp.Overkill.mid)
- end
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function update_current_set(status)
- if status == nil then
- status = player.status
- end
- local current = nil
- if status == 'Idle' then
- current = sets.idle.standing
- end
- if status == "Enaged" then
- current = sets.idle.standing
- end
- if status == "Resting" then
- current = sets.idle.standing
- end
- if current then
- equip(current)
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function aftercast(spell,action)
- if buffactive.Barrage then
- equip(sets.annihilator.barrage[AccuracyLevel .. '_acc'])
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.type == "WeaponSkill" and AutoMode == 'ON' then
- add_to_chat(158,'TP Return: ['..(player.tp)..']')
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if spell.english == 'Ranged' and AutoMode == 'ON' then
- Shot = 'ON'
- autoRA()
- elseif spell.type == "WeaponSkill" and not spell.interrupted and AutoMode == 'ON' then
- autoRA()
- else
- status_change(player.status)
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function status_change(new,old)
- --[[************************************************************************NEW RULE**********************************************************************************]]
- update_current_set(new)
- if T{'Idle','Engaged'}:contains(new) then
- if player.status == 'Engaged' then
- -- Automatically activate Velocity Shot when engaging
- if not buffactive['Velocity Shot'] and not buffactive.Amnesia and not buffactive.Obliviscence and not buffactive.Paralysis and windower.ffxi.get_ability_recasts()[129] < 1 then
- -- print('made it here!')
- windower.send_command('Velocity Shot')
- end
- end
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function user_buff_change(buff, gain, eventArgs)
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if name == 'Battlefield' and not gain_or_loss then
- send_command('wait 3; input /ja "Scavenge" <me>')
- add_to_chat(167,'You left the Battlefield, dont forget to Scavenge!')
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if buff_name == 'Camouflage' then
- if gain then
- send_command('@wait .5;gs disable body')
- add_to_chat(123,'Camo locked')
- else
- enable('body')
- add_to_chat(123,'Camo Unlocked')
- end
- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- -- if name == 'Decoy Shot' and gain_or_loss then
- -- if gain_or_loss == "gain" then
- -- equip(sets.buffs['Doom'])
- -- disable('left_ring')
- -- add_to_chat(123,'Doom ring on')
- -- print('working so far')
- -- else
- -- enable('left_ring')
- -- add_to_chat(123,'DOOM IS OFF')
- -- end
- -- end
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if name == 'Double Shot' and gain_or_loss then -- Weakness Timer --
- print(name, gain_or_loss)
- if gain then
- print('you got further')
- send_command('timers create "Double Shot" 90 down')
- else
- send_command('timers delete "Weakness"')
- end
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function self_command(command)
- local params = command:psplit('%s')
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if params[1] == 'cycle' then
- if params[2] == 'accuracy' then
- local next = cycle(AccuracyLevels, AccuracyLevel)
- AccuracyLevel = AccuracyLevels[next]
- notice('Accuracy Level: ' .. AccuracyLevel:ucfirst())
- update_current_set()
- end
- elseif params[1] == 'reset' then
- update_current_set()
- elseif params[1] == 'AutoMode' then -- Auto RA/WS Toggle --
- if AutoMode == 'ON' then
- AutoMode = 'OFF'
- add_to_chat(123,'Auto Mode: [OFF]')
- else
- AutoMode = 'ON'
- add_to_chat(158,'Auto Mode: [ON]')
- end
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- -- Finds current in possible and returns the index to the
- -- next element in the table, circularly.
- function cycle(possibles, current)
- local c = 0
- for k, v in ipairs(possibles) do
- if v == current then
- c = k
- end
- end
- return c % #possibles +1
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function autoRA()
- --[[************************************************************************NEW RULE**********************************************************************************]]
- if Shot == 'ON' then
- send_command('@wait .8; input /ra <t>')
- else
- send_command('@wait 2.0; input /ra <t>')
- end
- end
- --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
- function autoWS() -- Change Auto WS Here --
- Shot = 'OFF'
- send_command('@wait .5; input /ws "Coronach" <t>')
- end
Advertisement
Add Comment
Please, Sign In to add comment