midash

Orangebear_RNG

May 21st, 2014
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.98 KB | None | 0 0
  1. -- Owner: AlanWarren, aka ~ Orestes
  2. -- current file resides @ https://github.com/AlanWarren/gearswap
  3. --[[
  4.  
  5. === Notes ===
  6. -- Set format is as follows:
  7. sets.midcast.RA.[CustomClass][CombatForm][CombatWeapon][RangedMode][CustomRangedGroup]
  8. ex: sets.midcast.RA.SAM.Bow.Mid.SamRoll = {}
  9. you can also append CustomRangedGroups to each other
  10.  
  11. -- These are the available sets per category
  12. -- CustomClass = SAM
  13. -- CombatForm = DW
  14. -- CombatWeapon = weapon name, ex: Yoichinoyumi (you can make new sets for any ranged weapon)
  15. -- RangedMode = Normal, Mid, Acc
  16. -- CustomRangedGroup = SamRoll
  17.  
  18. -- SamRoll is applied automatically whenever you have the roll on you.
  19. -- SAM is used when you're RNG/SAM
  20.  
  21. * Auto RA
  22. - You can use the built in hotkey (CTRL -) or create a macro. (like below) Note "AutoRA" is case sensitive
  23. /console gs c toggle AutoRA
  24. - You have to shoot once after toggling autora for it to begin.
  25. - AutoRA will use weaponskills @ 1000TP, depending on which weapon you're using. However, this will only
  26. work if you set gear.Gun or gear.Bow to the weapon you're using. You also have to specify the desired
  27. ws it should use, with the settings auto_gun_ws and auto_bow_ws.
  28.  
  29. === Helpful Commands ===
  30. //gs validate
  31. //gs showswaps
  32. //gs debugmode
  33.  
  34. --]]
  35.  
  36. function get_sets()
  37. mote_include_version = 2
  38. -- Load and initialize the include file.
  39. include('Mote-Include.lua')
  40. include('organizer-lib')
  41. end
  42.  
  43. -- setup vars that are user-independent.
  44. function job_setup()
  45. end
  46.  
  47. -- setup vars that are user-dependent.
  48. function user_setup()
  49. -- Options: Override default values
  50. state.OffenseMode:options('Normal', 'Melee')
  51. state.RangedMode:options('Normal', 'Mid', 'Acc')
  52. state.HybridMode:options('Normal', 'PDT')
  53. state.IdleMode:options('Normal', 'PDT')
  54. state.WeaponskillMode:options('Normal', 'Mid', 'Acc')
  55. state.PhysicalDefenseMode:options('PDT')
  56. state.MagicalDefenseMode:options('MDT')
  57.  
  58. state.Buff.Barrage = buffactive.Barrage or false
  59. state.Buff.Camouflage = buffactive.Camouflage or false
  60. state.Buff.Overkill = buffactive.Overkill or false
  61.  
  62. -- settings
  63. state.CapacityMode = M(false, 'Capacity Point Mantle')
  64.  
  65. state.AutoRA = M{['description']='Auto RA', 'Normal', 'Shoot', 'WS' }
  66. auto_gun_ws = "Coronach"
  67. auto_bow_ws = "Jishnu's Radiance"
  68.  
  69.  
  70. gear.Gun = "Annihilator"
  71. gear.Bow = "Nobility"
  72.  
  73.  
  74. rng_sub_weapons = S{'Hurlbat', 'Vanir Knife', 'Perun +1',
  75. 'Eminent Axe', 'Odium', 'Aphotic Kukri',}
  76.  
  77. sam_sj = player.sub_job == 'SAM' or false
  78.  
  79. DefaultAmmo = {[gear.Bow] = "Achiyalabopa arrow", [gear.Gun] = "Achiyalabopa bullet"}
  80. U_Shot_Ammo = {[gear.Bow] = "Achiyalabopa arrow", [gear.Gun] = "Achiyalabopa bullet"}
  81.  
  82. get_combat_form()
  83. get_custom_ranged_groups()
  84. select_default_macro_book()
  85.  
  86. send_command('bind != gs c toggle CapacityMode')
  87. send_command('bind f9 gs c cycle RangedMode')
  88. send_command('bind !f9 gs c cycle OffenseMode')
  89. send_command('bind ^f9 gs c cycle HybridMode')
  90. send_command('bind ^] gs c cycle WeaponskillMode')
  91. send_command('bind ^- gs c cycle AutoRA')
  92. send_command('bind ^[ input /lockstyle on')
  93. send_command('bind ![ input /lockstyle off')
  94.  
  95. -- Testing
  96. --windower.register_event('incoming text', detect_cor_rolls)
  97. end
  98.  
  99. -- Called when this job file is unloaded (eg: job change)
  100. function file_unload()
  101. send_command('unbind f9')
  102. send_command('unbind ^f9')
  103. send_command('unbind ^[')
  104. send_command('unbind ![')
  105. send_command('unbind !=')
  106. send_command('unbind ^=')
  107. send_command('unbind @=')
  108. send_command('unbind ^-')
  109. end
  110.  
  111. function init_gear_sets()
  112. -- Augmented gear
  113.  
  114. sets.Organizer = {
  115. Range="Annihilator",
  116. Range="Nobility",
  117. main="Odium",
  118. item="Echo Drops",
  119. item="Remedy",
  120. item="Squid Sushi",
  121. item="Sole Sushi",
  122. ammo="Achiyalabopa Bullet",
  123. ammo="Achiyalabopa Arrow",
  124. main="Perun +1",
  125. sub="Legion Scutum"
  126. }
  127. -- Misc. Job Ability precasts
  128. sets.precast.JA['Bounty Shot'] = {hands="Amini Glovelettes +1"}
  129. sets.precast.JA['Double Shot'] = {head="Amini Gapette +1"}
  130. sets.precast.JA['Camouflage'] = {body="Orion Jerkin +1"}
  131. sets.precast.JA['Sharpshot'] = {legs="Orion Braccae +1"}
  132. sets.precast.JA['Velocity Shot'] = {body="Amini Caban +1"}
  133. sets.precast.JA['Scavenge'] = {feet="Orion Socks +1"}
  134.  
  135. sets.CapacityMantle = {back="Mecistopins Mantle"}
  136.  
  137. sets.precast.JA['Eagle Eye Shot'] = set_combine(sets.midcast.RA, {
  138. head="Uk'uxkaj Cap",
  139. neck="Rancor Collar",
  140. back="Rancorous Mantle",
  141. hands="Seiryu's Kote",
  142. ring2="Ifrit Ring",
  143. legs="Amini Brague +1",
  144. feet="Adhemar Gamashes"
  145. })
  146. sets.precast.JA['Eagle Eye Shot'].Mid = set_combine(sets.precast.JA['Eagle Eye Shot'], {
  147. back="Lutian Cape",
  148. ring2="Longshot Ring",
  149. feet={ name="Taeon Boots", augments={'Rng.Acc.+17 Rng.Atk.+17','Crit.hit rate+2','Weapon skill damage +3%',}}
  150. })
  151. sets.precast.JA['Eagle Eye Shot'].Acc = set_combine(sets.precast.JA['Eagle Eye Shot'].Mid, {
  152. neck="Ej Necklace",
  153. waist="Elanid Belt",
  154. ring1="Hajduk Ring +1"
  155. })
  156.  
  157. sets.precast.FC = {
  158. head="Pursuer's Beret",
  159. ear1="Loquacious Earring",
  160. ring2="Weather. Ring",
  161. legs="Pursuer's Pants",
  162. ring1="Prolix Ring"
  163. }
  164. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, { neck="Magoraga Beads" })
  165.  
  166. sets.idle = {
  167. head="Arcadian Beret +1",
  168. neck="Loricate Torque +1",
  169. ear1="Enervating Earring",
  170. ear2="Telos Earring",
  171. body="Pursuer's Doublet",
  172. hands="Amini Glovelettes +1",
  173. ring1="Sheltered Ring",
  174. ring2="Paguroidea Ring",
  175. back="Solemnity Cape",
  176. waist="Elanid Belt",
  177. legs="Adhemar Kecks",
  178. feet="Skadi's Jambeaux +1"
  179. }
  180. sets.idle.Regen = set_combine(sets.idle, {
  181. head="Ocelo. Headpiece",
  182. body="Kheper Jacket",
  183. neck="Wiglen Gorget",
  184. ring1="Sheltered Ring",
  185. ring2="Paguroidea Ring"
  186. })
  187. sets.idle.PDT = set_combine(sets.idle, {
  188. ring1="Dark Ring",
  189. ring2="Dark Ring"
  190. })
  191. sets.idle.Town = set_combine(sets.idle, {
  192. })
  193.  
  194. -- Engaged sets
  195. sets.engaged = {
  196. head="Arcadian Beret +1",
  197. neck="Loricate Torque +1",
  198. ear1="Enervating Earring",
  199. ear2="Telos Earring",
  200. body="Pursuer's Doublet",
  201. hands="Iuitl Wristbands +1",
  202. ring1="Dark Ring",
  203. ring2="Dark Ring",
  204. waist="Impulse Belt",
  205. legs="Adhemar Kecks",
  206. feet="Orion Socks +1"
  207. }
  208. sets.engaged.PDT = set_combine(sets.engaged, {
  209. back="Solemnity Cape",
  210. neck="Loricate Torque +1",
  211. ring1="Dark Ring",
  212. ring2="Dark Ring"
  213. })
  214. sets.engaged.Bow = set_combine(sets.engaged, {})
  215.  
  216. sets.engaged.Melee = {
  217. neck="Ej Necklace",
  218. ear1="Zennaroi Earring",
  219. ear2="Telos Earring",
  220. ring1="Patricius Ring",
  221. ring2="Epona's Ring",
  222. back="Agema Cape",
  223. waist="Olseni Belt",
  224. head={ name="Taeon Chapeau", augments={'Accuracy+20','"Dual Wield"+4','VIT+2',}},
  225. body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}},
  226. hands={ name="Herculean Gloves", augments={'Accuracy+30','Phys. dmg. taken -3%','AGI+1','Attack+3',}},
  227. legs={ name="Herculean Trousers", augments={'Accuracy+22 Attack+22','Weapon skill damage +2%','AGI+7','Accuracy+14',}},
  228. feet={ name="Herculean Boots", augments={'Accuracy+25 Attack+25','"Store TP"+2','DEX+10','Accuracy+14','Attack+10',}}
  229.  
  230. }
  231. sets.engaged.Bow.Melee = sets.engaged.Melee
  232.  
  233. sets.engaged.Melee.PDT = set_combine(sets.engaged.Melee, {
  234. neck="Loricate Torque +1",
  235. ring1="Dark Ring",
  236. ring2="Dark Ring",
  237. back="Solemnity Cape"
  238. })
  239.  
  240. sets.engaged.DW = set_combine(sets.engaged, {})
  241.  
  242. sets.engaged.DW.Melee = set_combine(sets.engaged.Melee, {
  243. ear1="Dudgeon Earring",
  244. ear2="Heartseeker Earring",
  245. })
  246.  
  247. ------------------------------------------------------------------
  248. -- Preshot / Snapshot sets
  249. ------------------------------------------------------------------
  250. sets.precast.RA = {
  251. head="Amini Gapette +1", -- 7
  252. body="Amini Caban +1", -- 7
  253. hands="Iuitl Wristbands +1", --5
  254. back="Lutian Cape", -- 2
  255. legs="Adhemar Kecks",
  256. waist="Impulse Belt", -- 2
  257. feet="Adhemar Gamashes" -- 8
  258. }
  259.  
  260. ------------------------------------------------------------------
  261. -- Default Base Gear Sets for Ranged Attacks. Geared for Gun
  262. ------------------------------------------------------------------
  263. sets.midcast.RA = {
  264. head="Arcadian Beret +1",
  265. neck="Ocachi Gorget",
  266. ear1="Enervating Earring",
  267. ear2="Telos Earring",
  268. body="Pursuer's Doublet",
  269. hands="Alruna's Gloves +1",
  270. ring1="Rajas Ring",
  271. ring2="K'ayres Ring",
  272. back="Lutian Cape",
  273. waist="Elanid Belt",
  274. legs="Amini Brague +1",
  275. feet="Thereoid Greaves"
  276. }
  277. sets.midcast.RA.Mid = set_combine(sets.midcast.RA, {
  278. back="Lutian Cape",
  279. ring2="Longshot Ring",
  280. legs="Adhemar Kecks",
  281. feet="Thereoid Greaves"
  282. })
  283. sets.midcast.RA.Acc = set_combine(sets.midcast.RA.Mid, {
  284. neck="Ej Necklace",
  285. hands="Alruna's Gloves +1",
  286. body="Amini Caban +1",
  287. ring1="Hajduk Ring +1",
  288. legs="Adhemar Kecks",
  289. })
  290.  
  291. -- Samurai Roll sets
  292. sets.midcast.RA.SamRoll = set_combine(sets.midcast.RA, {
  293. body="Arcadian Jerkin +1",
  294. ring2="Longshot Ring",
  295. })
  296. sets.midcast.RA.Mid.SamRoll = set_combine(sets.midcast.RA.SamRoll, {
  297. ring2="Longshot Ring",
  298. back="Lutian Cape",hands="Amini Glovelettes +1",
  299. legs="Amini Brague +1",
  300. })
  301. sets.midcast.RA.Acc.SamRoll = set_combine(sets.midcast.RA.Mid.SamRoll, {
  302. neck="Ej Necklace",
  303. ring1="Hajduk Ring +1",
  304. ring2="Longshot Ring",
  305. legs="Adhemar Kecks",
  306. })
  307.  
  308. -- SAM Subjob
  309. sets.midcast.RA.SAM = {
  310. head="Arcadian Beret +1",
  311. neck="Ocachi Gorget",
  312. ear1="Enervating Earring",
  313. ear2="Telos Earring",
  314. body="Pursuer's Doublet",
  315. hands="Amini Glovelettes +1",
  316. ring1="Rajas Ring",
  317. ring2="K'ayres Ring",
  318. back="Lutian Cape",
  319. waist="Elanid Belt",
  320. legs="Amini Brague +1",
  321. feet="Thereoid Greaves"
  322. }
  323. sets.midcast.RA.SAM.Mid = set_combine(sets.midcast.RA.SAM, {
  324. hands="Amini Glovelettes +1",
  325. body="Amini Caban +1",
  326. feet="Orion Socks +1"
  327. })
  328. sets.midcast.RA.SAM.Acc = set_combine(sets.midcast.RA.SAM.Mid, {
  329. back="Lutian Cape",
  330. neck="Ej Necklace",
  331. ring2="Longshot Ring"
  332. })
  333.  
  334. -- Samurai Roll for /sam, assume we're using a staff
  335. sets.midcast.RA.SAM.SamRoll = set_combine(sets.midcast.RA.SAM, {
  336. hands="Amini Glovelettes +1"
  337. })
  338. sets.midcast.RA.SAM.Mid.SamRoll = set_combine(sets.midcast.RA.SAM.Mid, {
  339. ear1="Enervating Earring",
  340. hands="Alruna's Gloves +1",
  341. legs="Adhemar Kecks",
  342. })
  343. sets.midcast.RA.SAM.Acc.SamRoll = set_combine(sets.midcast.RA.SAM.Acc, {
  344. hands="Alruna's Gloves +1",
  345. })
  346.  
  347. -- Bow base set.
  348. sets.midcast.RA.Bow = {
  349. head="Arcadian Beret +1",
  350. body="Amini Caban +1",
  351. hands={ name="Taeon Gloves", augments={'Rng.Acc.+19 Rng.Atk.+19','Crit.hit rate+3','STR+6 VIT+6',}},
  352. ear2="Enervating Earring",
  353. ear1="Volley Earring",
  354. back="Lutian Cape",
  355. neck="Ocachi Gorget",
  356. ring2="Hajduk Ring +1",ring1="Longshot Ring",
  357. legs="Amini Brague +1",
  358. waist="Eschan Stone",
  359. feet={ name="Taeon Boots", augments={'Rng.Acc.+17 Rng.Atk.+17','Crit.hit rate+2','Weapon skill damage +3%',}}
  360. }
  361.  
  362. sets.midcast.RA.Bow.Mid = set_combine(sets.midcast.RA.Bow, {
  363. head="Amini Gapette +1",
  364. body="Amini Caban +1",
  365. hands="Floral Gauntlets",
  366. ear2="Enervating Earring",
  367. ear1="Volley Earring",
  368. back="Lutian Cape",
  369. neck="Ocachi Gorget",
  370. ring2="Hajduk Ring +1",ring1="Longshot Ring",
  371. legs="Amini Brague +1",
  372. waist="Eschan Stone",
  373. feet={ name="Taeon Boots", augments={'Rng.Acc.+17 Rng.Atk.+17','Crit.hit rate+2','Weapon skill damage +3%',}}
  374. })
  375.  
  376. sets.midcast.RA.Bow.Acc = set_combine(sets.midcast.RA.Bow.Mid, {
  377. head="Amini Gapette +1",
  378. body="Amini Caban +1",
  379. hands="Floral Gauntlets",
  380. ear2="Enervating Earring",
  381. ear1="Volley Earring",
  382. back="Lutian Cape",
  383. neck="Marked Gorget",
  384. ring2="Hajduk Ring +1",ring1="Longshot Ring",
  385. legs="Pursuer's Pants",
  386. waist="Eschan Stone",
  387. feet={ name="Taeon Boots", augments={'Rng.Acc.+17 Rng.Atk.+17','Crit.hit rate+2','Weapon skill damage +3%',}}
  388. })
  389.  
  390. -- Bow Sam roll
  391. sets.midcast.RA.Bow.SamRoll = set_combine(sets.midcast.RA.Bow, {
  392. })
  393. sets.midcast.RA.Bow.Mid.SamRoll = set_combine(sets.midcast.RA.Bow.SamRoll, {
  394. })
  395. sets.midcast.RA.Bow.Acc.SamRoll = set_combine(sets.midcast.RA.Bow.Mid.SamRoll, {
  396. })
  397.  
  398. -- Sam SJ / Bow
  399. sets.midcast.RA.SAM.Bow = set_combine(sets.midcast.RA.SAM, {
  400. })
  401. sets.midcast.RA.SAM.Bow.Mid = set_combine(sets.midcast.RA.SAM.Mid, {
  402. })
  403. sets.midcast.RA.SAM.Bow.Acc = set_combine(sets.midcast.RA.SAM.Acc, {})
  404.  
  405. -- Sam SJ / Bow / Sam's Roll
  406. sets.midcast.RA.SAM.Bow.SamRoll = set_combine(sets.midcast.RA.SAM.Bow, {
  407.  
  408. })
  409.  
  410. sets.midcast.RA.SAM.Bow.Mid.SamRoll = set_combine(sets.midcast.RA.SAM.Bow.Mid, {
  411. })
  412. sets.midcast.RA.SAM.Bow.Acc.SamRoll = set_combine(sets.midcast.RA.SAM.Bow.Acc, {})
  413.  
  414.  
  415. -- Weaponskill sets
  416. sets.precast.WS = {
  417. ear1="Flame Pearl",
  418. ear2="Flame Pearl",
  419. ring1="Ifrit Ring",
  420. ring2="Ifrit Ring",
  421. neck="Fotia Gorget",
  422. head="Pursuer's Beret",
  423. body={ name="Herculean Vest", augments={'Attack+16','Weapon skill damage +4%','AGI+1',}},
  424. feet={ name="Herculean Boots", augments={'Accuracy+22','Weapon skill damage +4%','DEX+2','Attack+1',}},
  425. waist="Fotia Belt",
  426. hands="Floral Gauntlets",
  427. legs="Pursuer's Pants",
  428. back="Lutian Cape"
  429.  
  430.  
  431. }
  432. sets.precast.WS.Mid = set_combine(sets.precast.WS, {
  433. ear1="Enervating Earring",
  434. legs="Adhemar Kecks",
  435. feet="Orion Socks +1",
  436. })
  437. sets.precast.WS.Acc = set_combine(sets.precast.WS.Mid, {
  438. back="Lutian Cape"
  439. })
  440.  
  441. -- WILDFIRE
  442. sets.Wildfire = {
  443. head="Umbani Cap",
  444. body="Samnuha Coat",
  445. ear1="Crematio Earring",
  446. ear2="Friomisi Earring",
  447. neck="Stoicheion Medal",
  448. hands="Leyline Gloves",
  449. ring1="Acumen Ring",
  450. ring2="Garuda Ring",
  451. back="Argochampsa Mantle",
  452. waist="Yamabuki-no-Obi",
  453. legs="Shned. Tights +1",
  454. feet="Taeon Boots"
  455. }
  456. sets.precast.WS['Wildfire'] = set_combine(sets.precast.WS, sets.Wildfire)
  457. sets.precast.WS['Wildfire'].Mid = set_combine(sets.precast.WS.Mid, sets.Wildfire)
  458. sets.precast.WS['Wildfire'].Acc = set_combine(sets.precast.WS.Acc, sets.Wildfire)
  459.  
  460. sets.Trueflight = {
  461. head="Umbani Cap",
  462. body="Samnuha Coat",
  463. ear1="Crematio Earring",
  464. ear2="Friomisi Earring",
  465. neck="Stoicheion Medal",
  466. hands="Leyline Gloves",
  467. ring1="Acumen Ring",
  468. ring2="Garuda Ring",
  469. back="Argochampsa Mantle",
  470. waist="Fotia Belt",
  471. legs="Shned. Tights +1",
  472. feet="Taeon Boots"
  473. }
  474. sets.precast.WS['Trueflight'] = set_combine(sets.precast.WS, sets.Trueflight)
  475. sets.precast.WS['Trueflight'].Mid = set_combine(sets.precast.WS.Mid, sets.Trueflight)
  476. sets.precast.WS['Trueflight'].Acc = set_combine(sets.precast.WS.Acc, sets.Trueflight)
  477.  
  478. -- CORONACH
  479. sets.Coronach = {
  480. neck="Fotia Gorget",
  481. waist="Fotia Belt",
  482. }
  483. sets.precast.WS['Coronach'] = set_combine(sets.precast.WS, sets.Coronach)
  484. sets.precast.WS['Coronach'].Mid = set_combine(sets.precast.WS.Mid, sets.Coronach)
  485. sets.precast.WS['Coronach'].Acc = set_combine(sets.precast.WS.Acc, sets.Coronach)
  486.  
  487. sets.precast.WS['Coronach'].SAM = set_combine(sets.precast.WS, {
  488. neck="Ocachi Gorget",
  489. ear1="Enervating Earring",
  490. ear2="Telos Earring",
  491. hands="Amini Glovelettes +1",
  492. legs="Amini Brague +1",
  493. })
  494.  
  495. -- LAST STAND
  496. sets.LastStand = {
  497. neck="Fotia Gorget",
  498. ear2="Moonshade Earring",
  499. ring2="Garuda Ring",
  500. waist="Fotia Belt",
  501. feet="Orion Socks +1"
  502. }
  503. sets.precast.WS['Last Stand'] = set_combine(sets.precast.WS, sets.LastStand)
  504. sets.precast.WS['Last Stand'].Mid = set_combine(sets.precast.WS.Mid, sets.LastStand)
  505. sets.precast.WS['Last Stand'].Acc = set_combine(sets.precast.WS.Acc, sets.LastStand)
  506.  
  507. sets.precast.WS['Last Stand'].SAM = set_combine(sets.precast.WS, {
  508. neck="Fotia Gorget",
  509. ear1="Telos Earring",
  510. ear2="Moonshade Earring",
  511. hands="Amini Glovelettes +1",
  512. ring2="Garuda Ring",
  513. waist="Fotia Belt",
  514. legs="Amini Brague +1",
  515. })
  516.  
  517. -- DETONATOR
  518. sets.Detonator = {
  519. ear2="Moonshade Earring",
  520. neck="Fotia Gorget",
  521. waist="Fotia Belt",
  522. feet="Arcadian Socks +1"
  523. }
  524. sets.precast.WS['Detonator'] = set_combine(sets.precast.WS, sets.Detonator)
  525. sets.precast.WS['Detonator'].Mid = set_combine(sets.precast.WS.Mid, sets.Detonator)
  526. sets.precast.WS['Detonator'].Acc = set_combine(sets.precast.WS.Acc, sets.Detonator)
  527.  
  528. -- SLUG SHOT
  529. sets.SlugShot = {
  530. neck="Fotia Gorget",
  531. ear2="Moonshade Earring",
  532. waist="Fotia Belt",
  533. feet="Arcadian Socks +1"
  534. }
  535. sets.precast.WS['Slug Shot'] = set_combine(sets.precast.WS, sets.SlugShot)
  536. sets.precast.WS['Slug Shot'].Mid = set_combine(sets.precast.WS.Mid, sets.SlugShot)
  537. sets.precast.WS['Slug Shot'].Acc = set_combine(sets.precast.WS.Acc, sets.SlugShot)
  538.  
  539. sets.precast.WS['Heavy Shot'] = set_combine(sets.precast.WS, sets.SlugShot)
  540. sets.precast.WS['Heavy Shot'].Mid = set_combine(sets.precast.WS.Mid, sets.SlugShot)
  541. sets.precast.WS['Heavy Shot'].Acc = set_combine(sets.precast.WS.Acc, sets.SlugShot)
  542.  
  543. -- NAMAS
  544. sets.Namas = {
  545. neck="Fotia Gorget",
  546. waist="Fotia Belt",
  547. hands="Amini Glovelettes +1", -- override since we don't want sigyns in Mid or Acc
  548. back="Sylvan Chlamys",
  549. feet="Arcadian Socks +1"
  550. }
  551. sets.precast.WS['Namas Arrow'] = set_combine(sets.precast.WS, sets.Namas)
  552. sets.precast.WS['Namas Arrow'].Mid = set_combine(sets.precast.WS.Mid, sets.Namas)
  553. sets.precast.WS['Namas Arrow'].Acc = set_combine(sets.precast.WS.Acc, sets.Namas)
  554.  
  555. sets.precast.WS['Namas Arrow'].SAM = set_combine(sets.precast.WS, {
  556. neck="Fotia Gorget",
  557. ear1="Enervating Earring",
  558. ear2="Telos Earring",
  559. waist="Fotia Belt",
  560. back="Sylvan Chlamys",
  561. legs="Amini Brague +1",
  562. })
  563.  
  564. -- JISHNUS
  565. sets.Jishnus = {
  566. neck="Fotia Gorget",
  567. head="Pursuer's Beret",
  568. ear1="Moonshade Earring",
  569. body={ name="Herculean Vest", augments={'Attack+16','Weapon skill damage +4%','AGI+1',}},
  570. feet={ name="Herculean Boots", augments={'Accuracy+22','Weapon skill damage +4%','DEX+2','Attack+1',}},
  571. ear2="Jupiter's Pearl",
  572. waist="Fotia Belt",
  573. hands="Floral Gauntlets",
  574. legs="Pursuer's Pants",
  575. ring1="Hajduk Ring +1",
  576. ring2="Ramuh Ring",
  577. back="Lutian Cape"
  578. }
  579.  
  580. sets.precast.WS['Jishnu\'s Radiance'] = set_combine(sets.precast.WS, sets.Jishnus)
  581.  
  582. sets.precast.WS['Jishnu\'s Radiance'].Mid = set_combine(sets.precast.WS.Mid, {
  583. neck="Fotia Gorget",
  584. head="Pursuer's Beret",
  585. ear1="Moonshade Earring",
  586. body="Amini Caban +1",
  587. feet={ name="Taeon Boots", augments={'Rng.Acc.+17 Rng.Atk.+17','Crit.hit rate+2','Weapon skill damage +3%',}},
  588. ear2="Enervating Earring",
  589. waist="Fotia Belt",
  590. hands="Floral Gauntlets",
  591. legs="Pursuer's Pants",
  592. ring1="Hajduk Ring +1",
  593. back="Lutian Cape"
  594. })
  595.  
  596. sets.precast.WS['Jishnu\'s Radiance'].Acc = set_combine(sets.precast.WS.Acc, {
  597. neck="Fotia Gorget",
  598. head="Pursuer's Beret",
  599. ear1="Moonshade Earring",
  600. body="Amini Caban +1",
  601. feet={ name="Taeon Boots", augments={'Rng.Acc.+17 Rng.Atk.+17','Crit.hit rate+2','Weapon skill damage +3%',}},
  602. ear2="Enervating Earring",
  603. waist="Fotia Belt",
  604. hands="Floral Gauntlets",
  605. legs="Pursuer's Pants",
  606. ring1="Hajduk Ring +1",
  607. ring2="Longshot Ring",
  608. back="Lutian Cape"})
  609.  
  610. -- SIDEWINDER
  611. sets.Sidewinder = {
  612. neck="Fotia Gorget",
  613. ear2="Moonshade Earring",
  614. waist="Fotia Belt",
  615. hands="Arcadian Bracers +1",
  616. back="Buquwik Cape",
  617. feet="Arcadian Socks +1"
  618. }
  619. sets.precast.WS['Sidewinder'] = set_combine(sets.precast.WS, sets.Sidewinder)
  620. sets.precast.WS['Sidewinder'].Mid = set_combine(sets.precast.WS.Mid, sets.Sidewinder)
  621. sets.precast.WS['Sidewinder'].Acc = set_combine(sets.precast.WS.Acc, sets.Sidewinder)
  622.  
  623. sets.precast.WS['Refulgent Arrow'] = sets.precast.WS['Sidewinder']
  624. sets.precast.WS['Refulgent Arrow'].Mid = sets.precast.WS['Sidewinder'].Mid
  625. sets.precast.WS['Refulgent Arrow'].Acc = sets.precast.WS['Sidewinder'].Acc
  626.  
  627. -- Resting sets
  628. sets.resting = {}
  629.  
  630. -- Defense sets
  631. sets.defense.PDT = set_combine(sets.idle, {})
  632. sets.defense.MDT = set_combine(sets.idle, {})
  633. --sets.Kiting = {feet="Fajin Boots"}
  634.  
  635. sets.buff.Barrage = {
  636. head="Uk'uxkaj Cap",
  637. neck="Rancor Collar",
  638. ear1="Flame Pearl",
  639. ear2="Flame Pearl",
  640. body="Pursuer's Doublet",
  641. hands="Orion Bracers +1",
  642. ring1="Ifrit Ring",
  643. ring2="Longshot Ring",
  644. back="Lutian Cape",
  645. waist="Elanid Belt",
  646. legs="Adhemar Kecks",
  647. feet="Orion Socks +1"
  648. }
  649.  
  650. -- placeholder until I can get to it
  651. sets.buff.Barrage.Mid = set_combine(sets.buff.Barrage, {
  652. ring1="Hajduk Ring +1",
  653. neck="Ej Necklace"
  654. })
  655. sets.buff.Barrage.Acc = set_combine(sets.buff.Barrage.Mid, {
  656. ear1="Volley Earring",
  657. ear2="Enervating Earring"
  658. })
  659.  
  660. sets.buff.Camouflage = {body="Orion Jerkin +1"}
  661.  
  662. sets.Overkill = {
  663. body="Arcadian Jerkin +1"
  664. }
  665. sets.Overkill.Preshot = set_combine(sets.precast.RA, sets.Overkill)
  666.  
  667. end
  668.  
  669. function job_pretarget(spell, action, spellMap, eventArgs)
  670. -- If autora enabled, use WS automatically at 100+ TP
  671. if spell.action_type == 'Ranged Attack' then
  672. if player.tp >= 1000 and state.AutoRA.value == 'WS' and not buffactive.amnesia then
  673. cancel_spell()
  674. use_weaponskill()
  675. end
  676. end
  677. end
  678. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  679. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  680.  
  681. function job_precast(spell, action, spellMap, eventArgs)
  682.  
  683. if state.Buff[spell.english] ~= nil then
  684. state.Buff[spell.english] = true
  685. end
  686. --add_to_chat(8, state.CombatForm)
  687. if sam_sj then
  688. classes.CustomClass = 'SAM'
  689. end
  690.  
  691. if spell.action_type == 'Ranged Attack' and player.equipment.range == gear.Bow then
  692. state.CombatWeapon:set('Bow')
  693. end
  694. -- add support for RangedMode toggles to EES
  695. if spell.english == 'Eagle Eye Shot' then
  696. classes.JAMode = state.RangedMode.value
  697. end
  698. -- Safety checks for weaponskills
  699. if spell.type:lower() == 'weaponskill' then
  700. if player.tp < 1000 then
  701. eventArgs.cancel = true
  702. return
  703. end
  704. if ((spell.target.distance >8 and spell.skill ~= 'Archery' and spell.skill ~= 'Marksmanship') or (spell.target.distance >21)) then
  705. -- Cancel Action if distance is too great, saving TP
  706. add_to_chat(122,"Outside WS Range! /Canceling")
  707. eventArgs.cancel = true
  708. return
  709.  
  710. elseif state.DefenseMode.value ~= 'None' then
  711. -- Don't gearswap for weaponskills when Defense is on.
  712. eventArgs.handled = true
  713. end
  714. end
  715. -- Ammo checks
  716. if spell.action_type == 'Ranged Attack' or
  717. (spell.type == 'WeaponSkill' and (spell.skill == 'Marksmanship' or spell.skill == 'Archery')) then
  718. check_ammo(spell, action, spellMap, eventArgs)
  719. end
  720. end
  721.  
  722. -- Run after the default precast() is done.
  723. -- eventArgs is the same one used in job_precast, in case information needs to be persisted.
  724. -- This is where you place gear swaps you want in precast but applied on top of the precast sets
  725. function job_post_precast(spell, action, spellMap, eventArgs)
  726. if state.Buff.Camouflage then
  727. equip(sets.buff.Camouflage)
  728. elseif state.Buff.Overkill then
  729. equip(sets.Overkill.Preshot)
  730. end
  731. if spell.type == 'WeaponSkill' then
  732. if state.CapacityMode.value then
  733. equip(sets.CapacityMantle)
  734. end
  735. end
  736. end
  737.  
  738. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  739. function job_midcast(spell, action, spellMap, eventArgs)
  740. -- Barrage
  741. if spell.action_type == 'Ranged Attack' and state.Buff.Barrage then
  742. if state.RangedMode.current == 'Mid' then
  743. equip(sets.buff.Barrage.Mid)
  744. elseif state.RangedMode.current == 'Acc' then
  745. equip(sets.buff.Barrage.Acc)
  746. else
  747. equip(sets.buff.Barrage.Acc)
  748. end
  749. eventArgs.handled = true
  750. end
  751. if state.Buff.Camouflage then
  752. equip(sets.buff.Camouflage)
  753. end
  754. if state.Buff.Overkill then
  755. equip(sets.Overkill)
  756. end
  757. if spell.action_type == 'Ranged Attack' then
  758. if state.CapacityMode.value then
  759. equip(sets.CapacityMantle)
  760. end
  761. end
  762. end
  763.  
  764.  
  765. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  766. function job_aftercast(spell, action, spellMap, eventArgs)
  767. -- autora
  768. if state.AutoRA.value ~= 'Normal' then
  769. use_ra(spell)
  770. end
  771.  
  772. if state.Buff[spell.name] ~= nil then
  773. state.Buff[spell.name] = not spell.interrupted or buffactive[spell.english]
  774. end
  775.  
  776. end
  777.  
  778. -- Called when a player gains or loses a buff.
  779. -- buff == buff gained or lost
  780. -- gain == true if the buff was gained, false if it was lost.
  781. function job_buff_change(buff, gain)
  782. --if S{"courser's roll"}:contains(buff:lower()) then
  783. --if string.find(buff:lower(), 'samba') then
  784.  
  785. if state.Buff[buff] ~= nil then
  786. state.Buff[buff] = gain
  787. handle_equipping_gear(player.status)
  788. end
  789. if buff == 'Velocity Shot' and gain then
  790. windower.send_command('wait 290;input /echo **VELOCITY SHOT** Wearing off in 10 Sec.')
  791. elseif buff == 'Double Shot' and gain then
  792. windower.send_command('wait 90;input /echo **DOUBLE SHOT OFF**;wait 90;input /echo **DOUBLE SHOT READY**')
  793. elseif buff == 'Decoy Shot' and gain then
  794. windower.send_command('wait 170;input /echo **DECOY SHOT** Wearing off in 10 Sec.];wait 120;input /echo **DECOY SHOT READY**')
  795. end
  796.  
  797. if buff == "Samurai Roll" or buff == "Courser's Roll" or string.find(buff:lower(), 'flurry') then
  798. classes.CustomRangedGroups:clear()
  799.  
  800. if (buff == "Samurai Roll" and gain) or buffactive['Samurai Roll'] then
  801. classes.CustomRangedGroups:append('SamRoll')
  802. end
  803.  
  804. end
  805.  
  806. if buff == "Camouflage" then
  807. if gain then
  808. equip(sets.buff.Camouflage)
  809. disable('body')
  810. else
  811. enable('body')
  812. end
  813. end
  814.  
  815. if buff == "Camouflage" or buff == "Overkill" or buff == "Samurai Roll" or buff == "Courser's Roll" then
  816. if not midaction() then
  817. handle_equipping_gear(player.status)
  818. end
  819. end
  820. end
  821.  
  822. -- Called before the Include starts constructing melee/idle/resting sets.
  823. -- Can customize state or custom melee class values at this point.
  824. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  825. function job_handle_equipping_gear(status, eventArgs)
  826. --select_earring()
  827. end
  828.  
  829. function customize_idle_set(idleSet)
  830. if state.HybridMode.value == 'PDT' then
  831. state.IdleMode.value = 'PDT'
  832. elseif state.HybridMode.value ~= 'PDT' then
  833. state.IdleMode.value = 'Normal'
  834. end
  835. if state.Buff.Camouflage then
  836. idleSet = set_combine(idleSet, sets.buff.Camouflage)
  837. end
  838. if player.hpp < 90 then
  839. idleSet = set_combine(idleSet, sets.idle.Regen)
  840. end
  841. return idleSet
  842. end
  843.  
  844. function customize_melee_set(meleeSet)
  845. if state.Buff.Camouflage then
  846. meleeSet = set_combine(meleeSet, sets.buff.Camouflage)
  847. end
  848. if state.Buff.Overkill then
  849. meleeSet = set_combine(meleeSet, sets.Overkill)
  850. end
  851. if state.CapacityMode.value then
  852. meleeSet = set_combine(meleeSet, sets.CapacityMantle)
  853. end
  854. return meleeSet
  855. end
  856.  
  857. function job_status_change(newStatus, oldStatus, eventArgs)
  858. if newStatus == "Engaged" and player.equipment.range == gear.Bow then
  859. state.CombatWeapon:set('Bow')
  860. end
  861.  
  862. if camo_active() then
  863. disable('body')
  864. else
  865. enable('body')
  866. end
  867. end
  868.  
  869.  
  870. -------------------------------------------------------------------------------------------------------------------
  871. -- User code that supplements self-commands.
  872. -------------------------------------------------------------------------------------------------------------------
  873.  
  874. -- Called for custom player commands.
  875. function job_self_command(cmdParams, eventArgs)
  876. end
  877.  
  878. -- Called by the 'update' self-command, for common needs.
  879. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  880. function job_update(cmdParams, eventArgs)
  881. get_combat_form()
  882. get_custom_ranged_groups()
  883. sam_sj = player.sub_job == 'SAM' or false
  884. -- called here incase buff_change failed to update value
  885. state.Buff.Camouflage = buffactive.camouflage or false
  886. state.Buff.Overkill = buffactive.overkill or false
  887.  
  888. if camo_active() then
  889. disable('body')
  890. else
  891. enable('body')
  892. end
  893. end
  894.  
  895. ---- Job-specific toggles.
  896. --function job_toggle_state(field)
  897. -- if field:lower() == 'autora' then
  898. -- state.AutoRA = not state.AutoRA
  899. -- return state.AutoRA
  900. -- end
  901. --end
  902.  
  903. ---- Request job-specific mode lists.
  904. ---- Return the list, and the current value for the requested field.
  905. --function job_get_option_modes(field)
  906. -- if field:lower() == 'autora' then
  907. -- return state.AutoRA
  908. -- end
  909. --end
  910. --
  911. ---- Set job-specific mode values.
  912. ---- Return true if we recognize and set the requested field.
  913. --function job_set_option_mode(field, val)
  914. -- if field:lower() == 'autora' then
  915. -- state.AutoRA = val
  916. -- return true
  917. -- end
  918. --end
  919.  
  920. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  921. function display_current_job_state(eventArgs)
  922. local msg = ''
  923. if state.AutoRA.value ~= 'Normal' then
  924. msg = '[Auto RA: ON]['..state.AutoRA.value..']'
  925. else
  926. msg = '[Auto RA: OFF]'
  927. end
  928.  
  929. add_to_chat(122, 'Ranged: '..state.RangedMode.value..'/'..state.HybridMode.value..', WS: '..state.WeaponskillMode.value..', '..msg)
  930.  
  931. eventArgs.handled = true
  932.  
  933. end
  934. -- Special WS mode for Sam subjob
  935. function get_custom_wsmode(spell, spellMap, ws_mode)
  936. if spell.skill == 'Archery' or spell.skill == 'Marksmanship' then
  937. if player.sub_job == 'SAM' then
  938. return 'SAM'
  939. end
  940. end
  941. end
  942. -------------------------------------------------------------------------------------------------------------------
  943. -- Utility functions specific to this job.
  944. -------------------------------------------------------------------------------------------------------------------
  945. function get_combat_form()
  946. if S{'NIN', 'DNC'}:contains(player.sub_job) and rng_sub_weapons:contains(player.equipment.sub) then
  947. state.CombatForm:set("DW")
  948. else
  949. state.CombatForm:reset()
  950. end
  951. end
  952.  
  953. function get_custom_ranged_groups()
  954. classes.CustomRangedGroups:clear()
  955.  
  956. if buffactive['Samurai Roll'] then
  957. classes.CustomRangedGroups:append('SamRoll')
  958. end
  959.  
  960. end
  961.  
  962. function use_weaponskill()
  963. if player.equipment.range == gear.Bow then
  964. send_command('input /ws "'..auto_bow_ws..'" <t>')
  965. elseif player.equipment.range == gear.Gun then
  966. send_command('input /ws "'..auto_gun_ws..'" <t>')
  967. end
  968. end
  969.  
  970. function job_state_change(stateField, newValue, oldValue)
  971. if stateField == 'Auto RA' then
  972. if newValue ~= 'Normal' then
  973. send_command('@wait 2.5; input /ra <t>')
  974. end
  975. end
  976. end
  977.  
  978. function use_ra(spell)
  979.  
  980. local delay = '2.2'
  981. -- BOW
  982. if player.equipment.range == gear.Bow then
  983. if spell.type:lower() == 'weaponskill' then
  984. delay = '2.25'
  985. else
  986. if buffactive["Courser's Roll"] then
  987. delay = '0.7' -- MAKE ADJUSTMENT HERE
  988. elseif buffactive["Flurry II"] or buffactive.Overkill then
  989. delay = '0.5'
  990. else
  991. delay = '1.05' -- MAKE ADJUSTMENT HERE
  992. end
  993. end
  994. else
  995. -- GUN
  996. if spell.type:lower() == 'weaponskill' then
  997. delay = '2.25'
  998. else
  999. if buffactive["Courser's Roll"] then
  1000. delay = '0.7' -- MAKE ADJUSTMENT HERE
  1001. elseif buffactive.Overkill or buffactive['Flurry II'] then
  1002. delay = '0.5'
  1003. else
  1004. delay = '1.05' -- MAKE ADJUSTMENT HERE
  1005. end
  1006. end
  1007. end
  1008. send_command('@wait '..delay..'; input /ra <t>')
  1009. end
  1010.  
  1011. function camo_active()
  1012. return state.Buff['Camouflage']
  1013. end
  1014. -- Check for proper ammo when shooting or weaponskilling
  1015. function check_ammo(spell, action, spellMap, eventArgs)
  1016. -- Filter ammo checks depending on Unlimited Shot
  1017. if state.Buff['Unlimited Shot'] then
  1018. if player.equipment.ammo ~= U_Shot_Ammo[player.equipment.range] then
  1019. if player.inventory[U_Shot_Ammo[player.equipment.range]] or player.wardrobe[U_Shot_Ammo[player.equipment.range]] then
  1020. add_to_chat(122,"Unlimited Shot active. Using custom ammo.")
  1021. equip({ammo=U_Shot_Ammo[player.equipment.range]})
  1022. elseif player.inventory[DefaultAmmo[player.equipment.range]] or player.wardrobe[DefaultAmmo[player.equipment.range]] then
  1023. add_to_chat(122,"Unlimited Shot active but no custom ammo available. Using default ammo.")
  1024. equip({ammo=DefaultAmmo[player.equipment.range]})
  1025. else
  1026. add_to_chat(122,"Unlimited Shot active but unable to find any custom or default ammo.")
  1027. end
  1028. end
  1029. else
  1030. if player.equipment.ammo == U_Shot_Ammo[player.equipment.range] and player.equipment.ammo ~= DefaultAmmo[player.equipment.range] then
  1031. if DefaultAmmo[player.equipment.range] then
  1032. if player.inventory[DefaultAmmo[player.equipment.range]] then
  1033. add_to_chat(122,"Unlimited Shot not active. Using Default Ammo")
  1034. equip({ammo=DefaultAmmo[player.equipment.range]})
  1035. else
  1036. add_to_chat(122,"Default ammo unavailable. Removing Unlimited Shot ammo.")
  1037. equip({ammo=empty})
  1038. end
  1039. else
  1040. add_to_chat(122,"Unable to determine default ammo for current weapon. Removing Unlimited Shot ammo.")
  1041. equip({ammo=empty})
  1042. end
  1043. elseif player.equipment.ammo == 'empty' then
  1044. if DefaultAmmo[player.equipment.range] then
  1045. if player.inventory[DefaultAmmo[player.equipment.range]] then
  1046. add_to_chat(122,"Using Default Ammo")
  1047. equip({ammo=DefaultAmmo[player.equipment.range]})
  1048. else
  1049. add_to_chat(122,"Default ammo unavailable. Leaving empty.")
  1050. end
  1051. else
  1052. add_to_chat(122,"Unable to determine default ammo for current weapon. Leaving empty.")
  1053. end
  1054. elseif player.inventory[player.equipment.ammo].count < 15 then
  1055. add_to_chat(122,"Ammo '"..player.inventory[player.equipment.ammo].shortname.."' running low ("..player.inventory[player.equipment.ammo].count..")")
  1056. end
  1057. end
  1058. end
  1059. -- Orestes uses Samurai Roll. The total comes to 5!
  1060. --function detect_cor_rolls(old,new,color,newcolor)
  1061. -- if string.find(old,'uses Samurai Roll. The total comes to') then
  1062. -- add_to_chat(122,"SAM Roll")
  1063. -- end
  1064. --end
  1065. -- Select default macro book on initial load or subjob change.
  1066. function select_default_macro_book()
  1067. -- Default macro set/book
  1068. if player.sub_job == 'WAR'then
  1069. set_macro_page(1, 5)
  1070. elseif player.sub_job == 'SAM' then
  1071. set_macro_page(1, 5)
  1072. else
  1073. set_macro_page(1, 5)
  1074. end
  1075. end
Advertisement
Add Comment
Please, Sign In to add comment