Guest User

Untitled

a guest
May 22nd, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.91 KB | None | 0 0
  1. --[[**********************************************************
  2. ==========Annihilator Ranger GearSwap===========
  3. Based off of the Ranger gearswap file for Suji.Phoenix.
  4.  
  5. Save this file as RNG.lua or Yourname_RNG.lua and place it in:
  6. Windower4.1\addons\GearSwap\data
  7. **************************************************************]]
  8.  
  9. -- Configure sets below.
  10. function job_setup()
  11. state.Buff['Decoy Shot'] = buffactive['Decoy Shot']
  12. or false
  13. end
  14. function get_sets(...)
  15. ammo_warning_limit = 10 -- Set Ammo Limit Check Here --
  16. warning = true -- warning about low ammo --
  17. AutoMode = 'ON' -- Set Default Auto RA/WS ON or OFF Here --
  18. Shot = 'ON' -- toggles the delay on the auto ranged attacking so it gives a longer dealy after coronach --
  19. windower.send_command('input /macro book 8; wait .1; input /macro set 1; input /echo [ Job Changed to RNG ]') -- changes macro pallet to ranger --
  20. -- ********spells that will be canceled if paralyze is on****** --
  21. Stop = {}
  22. Stop.spells = S{'Berserk','Warcry','Eagle Eye Shot','Scavenge','Shadowbind','Sharpshot','Barrage','Bounty Shot','Decoy Shot','Overkill'}
  23.  
  24.  
  25. -- idle sets --
  26. sets.idle = {}
  27. sets.idle.standing = {
  28. main="Prester",
  29. sub="Bloodrain Strap",
  30. head="Arcadian Beret +1",
  31. neck="Ocachi Gorget",
  32. ear1="Tripudio Earring",
  33. ear2="Dawn Earring",
  34. body="Kyujutsugi",
  35. hands="Sigyn's Bazubands",
  36. ring1="Bellona's Ring",
  37. ring2="Hajduk Ring",
  38. back="Lutian Cape",
  39. waist="Impulse Belt",
  40. legs="Orion Braccae +1",
  41. feet="Fajin Boots"}
  42. sets.idle.shooting = sets.idle.standing
  43.  
  44. -- snapshot precast set --
  45. sets.snapshot = {}
  46. sets.snapshot.snapshot = {
  47. head="Sylvan Gapette +2",
  48. body="Sylvan Caban +2",
  49. hands="Iuitl Wristbands +1",
  50. waist="Impulse Belt",
  51. legs="Nahtirah Trousers",
  52. feet="Wurrukatte Boots",
  53. ammo="Achiyal. Bullet",}
  54.  
  55. -- ranged attack midshot sets --
  56. sets.tp = {}
  57. sets.tp.annihilator = {}
  58. sets.tp.annihilator.low_acc = {
  59. head="Arcadian Beret +1",
  60. neck="Ocachi Gorget",
  61. ear1="Tripudio Earring",
  62. ear2="Volley Earring",
  63. body="Kyujutsugi",
  64. hands="Arc. Bracers +1",
  65. ring1="Rajas Ring",
  66. ring2="Hajduk Ring",
  67. back="Lutian Cape",
  68. waist="Goading Belt",
  69. legs="Aetosaur Trousers +1",
  70. feet="Orion Socks +1",
  71. ammo="Achiyal. Bullet"}
  72. sets.tp.annihilator.med_acc = set_combine(sets.tp.annihilator.low_acc, {
  73. ring1="Hajduk Ring",
  74. ring2="Rajas Ring",
  75. waist="Elanid Belt",
  76. legs="Nahtirah trousers"})
  77. sets.tp.annihilator.high_acc = set_combine(sets.tp.annihilator.low_acc, {
  78. hands="Sigyn's bazubands",
  79. ring1="Hajduk ring",
  80. ring2="Paqichikaji Ring",
  81. back="Lutian cape",
  82. waist="Elanid Belt",
  83. legs="Arc. Braccae +1"})
  84. sets.tp.annihilator.Super_acc = set_combine(sets.tp.annihilator.low_acc, {
  85. neck="Ej Necklace",
  86. hands="Buremte Gloves",
  87. ring1="Hajduk ring",
  88. ring2="Paqichikaji Ring",
  89. back="Lutian cape",
  90. waist="Elanid Belt",
  91. legs="Arc. Braccae +1"})
  92.  
  93.  
  94. sets.tp.Overkill = {}
  95. sets.tp.Overkill.pre = {
  96. head="Orion Beret +1",
  97. neck="Ocachi gorget",
  98. ear1="Tripudio Earring",
  99. ear2="Volley Earring",
  100. body="Arc. jerkin +1",
  101. hands="Iuitl Wristbands +1",
  102. ring1="Hajduk ring",
  103. ring2="Bellona's ring",
  104. back="Lutian cape",
  105. waist="Scout's Belt",
  106. legs="Aetosaur Trousers +1",
  107. feet="Arcadian Socks +1"}
  108. sets.tp.Overkill.mid = {
  109. head="Arc. Beret +1",
  110. neck="Ocachi Gorget",
  111. ear1="Tripudio Earring",
  112. ear2="Volley Earring",
  113. body="Arc. jerkin +1",
  114. hands="Arc. Bracers +1",
  115. ring1="Rajas Ring",
  116. ring2="Bellona's ring",
  117. back="Sylvan Chlamys",
  118. waist="Elanid Belt",
  119. legs="Sylvan bragues +2",
  120. feet="Orion Socks +1",
  121. ammo="Achiyal. Bullet"}
  122.  
  123.  
  124.  
  125. sets.annihilator = {}
  126. sets.annihilator.barrage= {}
  127. sets.annihilator.barrage.low_acc = {
  128. head="Umbani cap",
  129. neck="Rancor Collar",
  130. ear1="Tripudio Earring",
  131. ear2="Volley Earring",
  132. body="Kyujutsugi",
  133. hands="Orion Bracers +1",
  134. ring1="Hajduk ring",
  135. ring2="Bellona's Ring",
  136. back="Lutian Cape",
  137. waist="Prosilio Belt",
  138. legs="Arc. Braccae +1",
  139. feet="Orion Socks +1",
  140. ammo="Achiyal. Bullet",
  141. }
  142. sets.annihilator.barrage.med_acc = set_combine(sets.annihilator.barrage.low_acc, {
  143. })
  144. sets.annihilator.barrage.high_acc = set_combine(sets.annihilator.barrage.low_acc, { neck="Ej Necklace",
  145. back="Lutian Cape",
  146. })
  147. sets.annihilator.barrage.Super_acc = set_combine(sets.annihilator.barrage.low_acc, { neck="Ej Necklace",
  148. back="Lutian Cape",
  149. })
  150.  
  151.  
  152. sets.ws = {}
  153. sets.ws.coronach = {}
  154. sets.ws.coronach.low_acc = {
  155. ammo="Achiyal. Bullet",
  156. head="Arcadian Beret +1",
  157. neck="Rancor Collar",
  158. ear1="Flame Pearl",
  159. ear2="Vulcan's Pearl",
  160. body="Kyujutsugi",
  161. hands="Arc. Bracers +1",
  162. ring1="Pyrosoul Ring",
  163. ring2="Rajas Ring",
  164. back="Buquwik Cape",
  165. waist="Breeze Belt",
  166. legs="Nahtirah Trousers",
  167. feet="Arcadian Socks +1"}
  168. sets.ws.coronach.med_acc = set_combine(sets.ws.coronach.low_acc, { hands="Sigyn's bazubands",
  169. })
  170. sets.ws.coronach.high_acc = set_combine(sets.ws.coronach.low_acc, { ring2="Paqichikaji Ring",
  171. legs="Arc. Braccae +1",
  172. back="Lutian Cape",
  173. })
  174. sets.ws.coronach.Super_acc = set_combine(sets.ws.coronach.low_acc, { ring2="Paqichikaji Ring",
  175. legs="Arc. Braccae +1",
  176. back="Lutian Cape",
  177. })
  178.  
  179.  
  180. sets.ws.laststand = {}
  181. sets.ws.laststand.low_acc = {
  182. head="Orion Beret +1",
  183. neck="Light Gorget",
  184. ear1="Tripudio Earring",
  185. ear2="Flame Pearl",
  186. body="Kyujutsugi",
  187. hands="Arc. Bracers +1",
  188. ring1="Rajas Ring",
  189. ring2="Dumakulem's Ring",
  190. back="Buquwik cape",
  191. waist="Flame Belt",
  192. legs="Nahtirah Trousers",
  193. feet="Orion Socks +1",
  194. ammo="Achiyal. Bullet"}
  195. sets.ws.laststand.med_acc = set_combine(sets.ws.laststand.low_acc, { legs="Arc. Braccae +1"})
  196. sets.ws.laststand.high_acc = set_combine(sets.ws.laststand.low_acc, {neck="Ej Necklace",
  197. ring1="Hajduk Ring",
  198. ring2="Paqichikaji Ring",
  199. back="Lutian Cape",
  200. legs="Arc. Braccae +1"})
  201. sets.ws.laststand.Super_acc = set_combine(sets.ws.laststand.low_acc, {neck="Ej Necklace",
  202. ring1="Hajduk Ring",
  203. ring2="Paqichikaji Ring",
  204. back="Lutian Cape",
  205. legs="Arc. Braccae +1"})
  206.  
  207.  
  208. sets.ws.Wildfire = {}
  209. sets.ws.Wildfire.low_acc = {
  210. sub="Bloodrain Strap",
  211. head="Orion Beret +1",
  212. neck="Stoicheion Medal",
  213. ear1="Friomisi Earring",
  214. ear2="Novio Earring",
  215. body="Orion Jerkin +1",
  216. hands="Orion Bracers +1",
  217. ring1="Stormsoul Ring",
  218. ring2="Stormsoul Ring",
  219. back="Toro Cape",
  220. waist="Aquiline Belt",
  221. legs="Shneddick tights",
  222. feet="Arcadian Socks +1",
  223. ammo="Achiyal. Bullet"}
  224. sets.ws.Wildfire.med_acc = sets.ws.Wildfire.low_acc
  225. sets.ws.Wildfire.high_acc = sets.ws.Wildfire.low_acc
  226. sets.ws.Wildfire.Super_acc = sets.ws.Wildfire.low_acc
  227.  
  228.  
  229. sets.jobability = {}
  230. sets.jobability['Scavenge'] = {feet = "Orion Socks +1"}
  231. sets.jobability['Camouflage'] = {body = "Orion Jerkin +1"}
  232. sets.jobability['Double Shot'] = {head = "sylvan Gapette +2"}
  233. sets.jobability['Shadowbind'] = {hands = "Orion bracers +1"}
  234. sets.jobability['Sharpshot'] = {legs = "Orion braccae +1"}
  235. sets.jobability['Bounty Shot'] = {hands="Syl. Glvltte. +2", waist="Chaac Belt"}
  236. sets.jobability['Velocity Shot'] = {body = "Sylvan Caban +2",}
  237.  
  238. sets.jobability['Eagle Eye Shot'] = T{}
  239. sets.jobability['Eagle Eye Shot'].low_acc = {
  240. head="Orion Beret +1",
  241. neck="Ej Necklace",
  242. ear1="Flame Pearl",
  243. ear2="Vulcan's Pearl",
  244. body="Kyujutsugi",
  245. hands="Arc. Bracers +1",
  246. ring1="Pyrosoul Ring",
  247. ring2="Rajas Ring",
  248. back="Buquwik Cape",
  249. waist="Prosilio belt",
  250. legs="Arc. Braccae +1",
  251. feet="Orion Socks +1",
  252. ammo="Achiyal. Bullet",}
  253. sets.jobability['Eagle Eye Shot'].med_acc = set_combine(sets.jobability['Eagle Eye Shot'].low_acc, {})
  254. sets.jobability['Eagle Eye Shot'].high_acc = set_combine(sets.jobability['Eagle Eye Shot'].low_acc, {})
  255. sets.jobability['Eagle Eye Shot'].Super_acc = set_combine(sets.jobability['Eagle Eye Shot'].low_acc, {})
  256. sets.buffs = {}
  257. sets.buffs['Doom'] = {ring1 = "Saida Ring"}
  258.  
  259.  
  260. notice('Ranger Binding Interface:')
  261. notice(' F9 Cycles accuracy level')
  262. notice(' F10 toggles auto RA/WS')
  263. notice(' F12 Resets to current best set.')
  264. windower.send_command('bind F9 gs c cycle accuracy')
  265. windower.send_command('bind F10 gs c AutoMode')
  266. windower.send_command('bind F12 gs c reset')
  267. end
  268. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  269. function notice(msg, color)
  270. --[[************************************************************************NEW RULE**********************************************************************************]]
  271. if color == nil then
  272. color = 158
  273. end
  274. windower.add_to_chat(color, msg)
  275. end
  276.  
  277. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  278. function file_unload()
  279. windower.send_command('unbind F9')
  280. windower.send_command('unbind F10')
  281. windower.send_command('unbind F12')
  282. notice('Unbinding Interface.')
  283. end
  284.  
  285. --[[******************************************************************************************]]
  286. --[[ Configuration variables. More options can be added here and wired into sets accordingly. ]]
  287.  
  288. local AccuracyLevels = T{'low', 'med', 'high', 'Super'}
  289. local AccuracyLevel = AccuracyLevels[1]
  290. --[[******************************************************************************************]]
  291. --[[******************************************************************************************]]
  292.  
  293. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  294. -- Used to disable slots for items such as Reraise Earring among other things
  295. function slot_disabling()
  296. --[[************************************************************************NEW RULE**********************************************************************************]]
  297. if player.equipment.left_ear == 'Reraise Earring' then
  298. disable('left_ear')
  299. windower.add_to_chat(8,'Reraise Earring equiped on left ear')
  300. elseif player.equipment.right_ear == 'Reraise Earring' then
  301. disable('right_ear')
  302. windower.add_to_chat(8,'Reraise Earring equiped on right ear')
  303. else
  304. enable('left_ear','right_ear')
  305. end
  306.  
  307. end
  308.  
  309. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  310. function pretarget(spell,action)
  311. --[[************************************************************************NEW RULE**********************************************************************************]]
  312. if spell.english == 'Ranged' and not buffactive.amnesia then -- Auto WS/Decoy Shot/Double Shot --
  313. if player.tp >= 100 and AutoMode == 'ON' then
  314. cancel_spell()
  315. autoWS()
  316. end
  317. end
  318.  
  319. end
  320.  
  321. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  322. function precast(spell,arg)
  323. local check_ammo
  324. local check_ammo_count = 1
  325. --[[************************************************************************NEW RULE**********************************************************************************]]
  326. if spell.type == 'WeaponSkill' then
  327. if spell.target.distance > 21.0 then
  328. add_to_chat(167,''..spell.target.name..' is too far can not use '..spell.name..'!!!. Cancelling WeaponSkill ')
  329. cancel_spell()
  330. return
  331. end
  332. elseif spell.name == "Coronach" then
  333. equip(sets.ws.coronach[AccuracyLevel .. '_acc'])
  334. elseif spell.name == "Last Stand" then
  335. equip(sets.ws.laststand[AccuracyLevel .. '_acc'])
  336. elseif spell.name == "Wildfire" then
  337. equip(sets.ws.Wildfire[AccuracyLevel .. '_acc'])
  338. end
  339.  
  340. --[[************************************************************************NEW RULE**********************************************************************************]]
  341. if spell.type == 'JobAbility' then
  342. equip(sets.jobability[spell.name])
  343. end
  344.  
  345. --[[************************************************************************NEW RULE**********************************************************************************]]
  346. if spell.action_type == 'Ranged Attack' then
  347. check_ammo = player.equipment.ammo
  348. if player.equipment.ammo == 'empty' or player.inventory[check_ammo].count <= check_ammo_count then
  349. add_to_chat(123, spell.name..' Canceled: [Out of Ammo]')
  350. cancel_spell()
  351. return
  352. end
  353. if player.inventory[check_ammo].count <= ammo_warning_limit and player.inventory[check_ammo].count > 1 and not warning then
  354. add_to_chat(123, '***** [Low Ammo Warning!] *****')
  355. warning = true
  356. elseif player.inventory[check_ammo].count > ammo_warning_limit and warning then
  357. warning = false
  358. end
  359. equip(sets.snapshot.snapshot)
  360. if buffactive.Overkill then
  361. equip(sets.tp.Overkill.pre)
  362. end
  363. end
  364.  
  365. --[[************************************************************************NEW RULE**********************************************************************************]]
  366. if spell.english == 'Eagle Eye Shot' then
  367. equip(sets.jobability[spell.name][AccuracyLevel .. '_acc'])
  368. end
  369.  
  370. --[[************************************************************************NEW RULE**********************************************************************************]]
  371.  
  372.  
  373. --[[************************************************************************NEW RULE**********************************************************************************]]
  374. if spell.type == "Ninjutsu" then
  375. if string.find(spell.english,'Utsusemi') then
  376. if buffactive['Copy Image (3)'] or buffactive['Copy Image (4)'] then
  377. cancel_spell()
  378. add_to_chat(167, spell.english .. ' Canceled: [3+ Images]')
  379. return
  380. end
  381. end
  382. end
  383.  
  384. --[[************************************************************************NEW RULE**********************************************************************************]]
  385. if spell.english == 'Spectral Jig' and buffactive.Sneak then
  386. windower.ffxi.cancel_buff(71)
  387. cast_delay(0.3)
  388. end
  389.  
  390. end
  391.  
  392.  
  393. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  394. function midcast(spell)
  395. if spell.english == "Ranged" then
  396. equip(sets.tp.annihilator[AccuracyLevel .. '_acc'])
  397. if buffactive.Barrage then
  398. equip(sets.annihilator.barrage[AccuracyLevel .. '_acc'])
  399. elseif buffactive['Overkill'] then
  400. equip(sets.tp.Overkill.mid)
  401. end
  402. end
  403.  
  404. end
  405.  
  406. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  407. function update_current_set(status)
  408. if status == nil then
  409. status = player.status
  410. end
  411. local current = nil
  412. if status == 'Idle' then
  413. current = sets.idle.standing
  414. end
  415. if status == "Enaged" then
  416. current = sets.idle.standing
  417. end
  418. if status == "Resting" then
  419. current = sets.idle.standing
  420. end
  421. if current then
  422. equip(current)
  423. end
  424.  
  425. end
  426. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  427. function aftercast(spell,action)
  428.  
  429. if buffactive.Barrage then
  430. equip(sets.annihilator.barrage[AccuracyLevel .. '_acc'])
  431. end
  432. --[[************************************************************************NEW RULE**********************************************************************************]]
  433. if spell.type == "WeaponSkill" and AutoMode == 'ON' then
  434. add_to_chat(158,'TP Return: ['..(player.tp)..']')
  435. end
  436. --[[************************************************************************NEW RULE**********************************************************************************]]
  437. if spell.english == 'Ranged' and AutoMode == 'ON' then
  438. Shot = 'ON'
  439. autoRA()
  440. elseif spell.type == "WeaponSkill" and not spell.interrupted and AutoMode == 'ON' then
  441. autoRA()
  442. else
  443. status_change(player.status)
  444. end
  445.  
  446. end
  447.  
  448. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  449. function status_change(new,old)
  450. --[[************************************************************************NEW RULE**********************************************************************************]]
  451. update_current_set(new)
  452. if T{'Idle','Engaged'}:contains(new) then
  453. if player.status == 'Engaged' then
  454. -- Automatically activate Velocity Shot when engaging
  455. 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
  456. -- print('made it here!')
  457. windower.send_command('Velocity Shot')
  458. end
  459. end
  460. end
  461.  
  462. end
  463.  
  464. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  465. function user_buff_change(buff, gain, eventArgs)
  466.  
  467. --[[************************************************************************NEW RULE**********************************************************************************]]
  468. if name == 'Battlefield' and not gain_or_loss then
  469. send_command('wait 3; input /ja "Scavenge" <me>')
  470. add_to_chat(167,'You left the Battlefield, dont forget to Scavenge!')
  471. end
  472.  
  473. --[[************************************************************************NEW RULE**********************************************************************************]]
  474. if buff_name == 'Camouflage' then
  475. if gain then
  476. send_command('@wait .5;gs disable body')
  477. add_to_chat(123,'Camo locked')
  478. else
  479. enable('body')
  480. add_to_chat(123,'Camo Unlocked')
  481. end
  482. end
  483.  
  484. --[[************************************************************************NEW RULE**********************************************************************************]]
  485. -- if name == 'Decoy Shot' and gain_or_loss then
  486.  
  487. -- if gain_or_loss == "gain" then
  488. -- equip(sets.buffs['Doom'])
  489. -- disable('left_ring')
  490. -- add_to_chat(123,'Doom ring on')
  491. -- print('working so far')
  492. -- else
  493. -- enable('left_ring')
  494. -- add_to_chat(123,'DOOM IS OFF')
  495.  
  496. -- end
  497. -- end
  498.  
  499.  
  500. --[[************************************************************************NEW RULE**********************************************************************************]]
  501. if name == 'Double Shot' and gain_or_loss then -- Weakness Timer --
  502. print(name, gain_or_loss)
  503. if gain then
  504. print('you got further')
  505. send_command('timers create "Double Shot" 90 down')
  506. else
  507. send_command('timers delete "Weakness"')
  508.  
  509. end
  510. end
  511.  
  512. end
  513.  
  514. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  515. function self_command(command)
  516.  
  517. local params = command:psplit('%s')
  518.  
  519. --[[************************************************************************NEW RULE**********************************************************************************]]
  520. if params[1] == 'cycle' then
  521. if params[2] == 'accuracy' then
  522. local next = cycle(AccuracyLevels, AccuracyLevel)
  523. AccuracyLevel = AccuracyLevels[next]
  524. notice('Accuracy Level: ' .. AccuracyLevel:ucfirst())
  525. update_current_set()
  526. end
  527. elseif params[1] == 'reset' then
  528. update_current_set()
  529. elseif params[1] == 'AutoMode' then -- Auto RA/WS Toggle --
  530. if AutoMode == 'ON' then
  531. AutoMode = 'OFF'
  532. add_to_chat(123,'Auto Mode: [OFF]')
  533. else
  534. AutoMode = 'ON'
  535. add_to_chat(158,'Auto Mode: [ON]')
  536. end
  537. end
  538.  
  539. end
  540.  
  541. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  542. -- Finds current in possible and returns the index to the
  543. -- next element in the table, circularly.
  544. function cycle(possibles, current)
  545. local c = 0
  546. for k, v in ipairs(possibles) do
  547. if v == current then
  548. c = k
  549. end
  550. end
  551. return c % #possibles +1
  552. end
  553.  
  554. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  555. function autoRA()
  556. --[[************************************************************************NEW RULE**********************************************************************************]]
  557. if Shot == 'ON' then
  558. send_command('@wait .8; input /ra <t>')
  559. else
  560. send_command('@wait 2.0; input /ra <t>')
  561. end
  562.  
  563. end
  564.  
  565. --[********************************************************************************************************************NEW FUNCTION************************************************************************************************************************]]
  566. function autoWS() -- Change Auto WS Here --
  567. Shot = 'OFF'
  568. send_command('@wait .5; input /ws "Coronach" <t>')
  569. end
Advertisement
Add Comment
Please, Sign In to add comment