Guest User

Untitled

a guest
Dec 19th, 2014
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.05 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job. Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. --[[
  6. Custom commands:
  7. gs c cycle treasuremode (set on ctrl-= by default): Cycles through the available treasure hunter modes.
  8.  
  9. Treasure hunter modes:
  10. None - Will never equip TH gear
  11. Tag - Will equip TH gear sufficient for initial contact with a mob (either melee, ranged hit, or Aeolian Edge AOE)
  12. SATA - Will equip TH gear sufficient for initial contact with a mob, and when using SATA
  13. Fulltime - Will keep TH gear equipped fulltime
  14. --]]
  15.  
  16. -- Initialization function for this job file.
  17. function get_sets()
  18. mote_include_version = 2
  19.  
  20. -- Load and initialize the include file.
  21. include('Mote-Include.lua')
  22. end
  23.  
  24. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  25. function job_setup()
  26. state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
  27. state.Buff['Trick Attack'] = buffactive['trick attack'] or false
  28. state.Buff['Feint'] = buffactive['feint'] or false
  29.  
  30. include('Mote-TreasureHunter')
  31.  
  32. -- For th_action_check():
  33. -- JA IDs for actions that always have TH: Provoke, Animated Flourish
  34. info.default_ja_ids = S{35, 204}
  35. -- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
  36. info.default_u_ja_ids = S{201, 202, 203, 205, 207}
  37. end
  38.  
  39. -------------------------------------------------------------------------------------------------------------------
  40. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  41. -------------------------------------------------------------------------------------------------------------------
  42.  
  43. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  44. function user_setup()
  45. state.OffenseMode:options('Normal', 'Acc', 'Mod')
  46. state.HybridMode:options('Normal', 'Evasion', 'PDT')
  47. state.RangedMode:options('Normal', 'Acc')
  48. state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
  49. state.PhysicalDefenseMode:options('Evasion', 'PDT')
  50.  
  51.  
  52. gear.default.weaponskill_neck = "Asperity Necklace"
  53. gear.default.weaponskill_waist = "Caudata Belt"
  54. gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
  55.  
  56. -- Additional local binds
  57. send_command('bind ^` input /ja "Flee" <me>')
  58. send_command('bind ^= gs c cycle treasuremode')
  59. send_command('bind !- gs c cycle targetmode')
  60.  
  61. select_default_macro_book()
  62. end
  63.  
  64. -- Called when this job file is unloaded (eg: job change)
  65. function user_unload()
  66. send_command('unbind ^`')
  67. send_command('unbind !-')
  68. end
  69.  
  70. -- Define sets and vars used by this job file.
  71. function init_gear_sets()
  72. --------------------------------------
  73. -- Special sets (required by rules)
  74. --------------------------------------
  75.  
  76. sets.TreasureHunter = {hands="Plunderer's Armlets +1", feet="Raider's Poulaines +2"}
  77. sets.ExtraRegen = {neck="Wiglen Gorget",ring1="Sheltered Ring",ring2="Paguroidea ring"}
  78. sets.Kiting = {feet="Skadi's Jambeaux +1"}
  79.  
  80. sets.buff['Sneak Attack'] = {ammo="Yetshila",
  81. head="Pillager's Bonnet +1",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  82. body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Epona's Ring",ring2="Rajas Ring",
  83. back="Canny Cape",waist="Chiner's Belt +1",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  84.  
  85. sets.buff['Trick Attack'] = {ammo="Yetshila",
  86. head="Pillager's Bonnet +1",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  87. body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Epona's Ring",ring2="Rajas Ring",
  88. back="Canny Cape",waist="Chiner's Belt +1",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  89.  
  90. -- Actions we want to use to tag TH.
  91. sets.precast.Step = sets.TreasureHunter
  92. sets.precast.Flourish1 = sets.TreasureHunter
  93. sets.precast.JA.Provoke = sets.TreasureHunter
  94.  
  95.  
  96. --------------------------------------
  97. -- Precast sets
  98. --------------------------------------
  99.  
  100. -- Precast sets to enhance JAs
  101. sets.precast.JA['Collaborator'] = {head="Raider's Bonnet +2"}
  102. sets.precast.JA['Accomplice'] = {head="Raider's Bonnet +2"}
  103. sets.precast.JA['Flee'] = {feet="Pillager's Poulaines +1"}
  104. sets.precast.JA['Hide'] = {body="Pillager's Vest +1"}
  105. sets.precast.JA['Conspirator'] = {} -- {body="Raider's Vest +2"}
  106. sets.precast.JA['Steal'] = {head="Plunderer's Bonnet",hands="Pillager's Armlets +1",legs="Pillager's Culottes +1",feet="Pillager's Poulaines +1"}
  107. sets.precast.JA['Despoil'] = {legs="Raider's Culottes +2",feet="Raider's Poulaines +2"}
  108. sets.precast.JA['Perfect Dodge'] = {hands="Plunderer's Armlets +1"}
  109. sets.precast.JA['Feint'] = {} -- {legs="Assassin's Culottes +2"}
  110.  
  111. sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
  112. sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
  113.  
  114.  
  115. -- Waltz set (chr and vit)
  116. sets.precast.Waltz = {ammo="Sonia's Plectrum",
  117. head="Whirlpool Mask",
  118. body="Pillager's Vest +1",hands="Pillager's Armlets +1",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
  119.  
  120. -- Don't need any special gear for Healing Waltz.
  121. sets.precast.Waltz['Healing Waltz'] = {}
  122.  
  123.  
  124. -- Fast cast sets for spells
  125. sets.precast.FC = {ear2="Loquacious Earring",legs="Homam Cosciales"}
  126.  
  127. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  128.  
  129.  
  130. -- Ranged snapshot gear
  131. sets.precast.RA = {}
  132.  
  133.  
  134. -- Weaponskill sets
  135.  
  136. -- Default set for any weaponskill that isn't any more specifically defined
  137. sets.precast.WS = {ammo="Yetshila",
  138. head="Pill. Bonnet +1",neck="Love Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
  139. body="Pillager's vest +1",hands="Pill. Armlets +1",ring1="Ramuh Ring",ring2="Rajas Ring",
  140. back="Kayapa cape",waist="Chiner's belt +1",legs="Pill. Culottes +1",feet="Plun. Poulaines +1"}
  141. sets.precast.WS.Acc = set_combine(sets.precast.WS, {ammo="Honed Tathlum", back="Letalis Mantle"})
  142.  
  143. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  144. sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {head="Lithelimb Cap",neck="Ej Necklace",hands="Qaaxo Mitaines",ring1="Beeline Ring",back="Canny Cape",waist="Soil Belt"})
  145. sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {ammo="Honed Tathlum", back="Canny Cape"})
  146. sets.precast.WS['Exenterator'].Mod = set_combine(sets.precast.WS['Exenterator'], {waist=gear.ElementalBelt})
  147. sets.precast.WS['Exenterator'].SA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Yetshila"})
  148. sets.precast.WS['Exenterator'].TA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Yetshila"})
  149. sets.precast.WS['Exenterator'].SATA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Yetshila"})
  150.  
  151. sets.precast.WS['Dancing Edge'] = set_combine(sets.precast.WS, {})
  152. sets.precast.WS['Dancing Edge'].Acc = set_combine(sets.precast.WS['Dancing Edge'], {ammo="Honed Tathlum", back="Canny Cape"})
  153. sets.precast.WS['Dancing Edge'].Mod = set_combine(sets.precast.WS['Dancing Edge'], {waist=gear.ElementalBelt})
  154. sets.precast.WS['Dancing Edge'].SA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Yetshila"})
  155. sets.precast.WS['Dancing Edge'].TA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Yetshila"})
  156. sets.precast.WS['Dancing Edge'].SATA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Yetshila"})
  157.  
  158. sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {ammo="Yetshila",
  159. head="Sukeroku Hachi.",neck="Soil Gorget"})
  160. sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {ammo="Honed Tathlum"})
  161. sets.precast.WS['Evisceration'].Mod = set_combine(sets.precast.WS['Evisceration'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  162. sets.precast.WS['Evisceration'].SA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  163. sets.precast.WS['Evisceration'].TA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  164. sets.precast.WS['Evisceration'].SATA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
  165.  
  166. sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",neck="Love Torque"})
  167. sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {})
  168. sets.precast.WS["Rudra's Storm"].Mod = set_combine(sets.precast.WS["Rudra's Storm"], {back="Kayapa Cape",waist=gear.ElementalBelt})
  169. sets.precast.WS["Rudra's Storm"].SA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Yetshila",
  170. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  171. sets.precast.WS["Rudra's Storm"].TA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Yetshila",
  172. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  173. sets.precast.WS["Rudra's Storm"].SATA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Yetshila",
  174. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  175.  
  176. sets.precast.WS["Shark Bite"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1"})
  177. sets.precast.WS['Shark Bite'].Acc = set_combine(sets.precast.WS['Shark Bite'], {ammo="Honed Tathlum"})
  178. sets.precast.WS['Shark Bite'].Mod = set_combine(sets.precast.WS['Shark Bite'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  179. sets.precast.WS['Shark Bite'].SA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Yetshila",
  180. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  181. sets.precast.WS['Shark Bite'].TA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Yetshila",
  182. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  183. sets.precast.WS['Shark Bite'].SATA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Yetshila",
  184. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  185.  
  186. sets.precast.WS['Mandalic Stab'] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1"})
  187. sets.precast.WS['Mandalic Stab'].Acc = set_combine(sets.precast.WS['Mandalic Stab'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  188. sets.precast.WS['Mandalic Stab'].Mod = set_combine(sets.precast.WS['Mandalic Stab'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  189. sets.precast.WS['Mandalic Stab'].SA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Yetshila",
  190. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  191. sets.precast.WS['Mandalic Stab'].TA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Yetshila",
  192. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  193. sets.precast.WS['Mandalic Stab'].SATA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Yetshila",
  194. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  195.  
  196. sets.precast.WS['Aeolian Edge'] = {
  197. head="Sukeroku Hachi.",neck="Soil Gorget",ear1="Hecate's Earring",ear2="Ethereal Earring",
  198. back="Toro Cape",waist=gear.ElementalBelt}
  199.  
  200. sets.precast.WS['Aeolian Edge'].TH = set_combine(sets.precast.WS['Aeolian Edge'], sets.TreasureHunter)
  201.  
  202.  
  203. --------------------------------------
  204. -- Midcast sets
  205. --------------------------------------
  206.  
  207. sets.midcast.FastRecast = {
  208. head="Pill. Bonnet +1",ear2="Loquacious Earring",
  209. body="Pillager's Vest +1",hands="Pillager's Armlets +1",
  210. back="Canny Cape"}
  211.  
  212. -- Specific spells
  213. sets.midcast.Utsusemi = {
  214. head="Whirlpool Mask",neck="Ej Necklace",ear2="Loquacious Earring",
  215. body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",
  216. back="Canny Cape"}
  217.  
  218. -- Ranged gear
  219. sets.midcast.RA = {
  220. head="Whirlpool Mask",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
  221. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Hajduk Ring",
  222. back="Libeccio Mantle",waist="Aquiline Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  223.  
  224. sets.midcast.RA.Acc = {
  225. head="Pillager's Bonnet +1",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
  226. body="Iuitl Vest",hands="Buremte Gloves",ring1="Beeline Ring",ring2="Hajduk Ring",
  227. back="Libeccio Mantle",waist="Aquiline Belt",legs="Thurandaut Tights +1",feet="Pillager's Poulaines +1"}
  228.  
  229.  
  230. --------------------------------------
  231. -- Idle/resting/defense sets
  232. --------------------------------------
  233.  
  234. -- Resting sets
  235. sets.resting = {neck="Wiglen Gorget",
  236. ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  237.  
  238.  
  239. -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  240.  
  241. sets.idle = {
  242. head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  243. body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  244. back="Canny Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
  245.  
  246. sets.idle.Town = {
  247. head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  248. body="Pillager's Vest +1",hands="Pill. Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  249. back="Canny Cape",waist="Chiner's Belt +1",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
  250.  
  251. sets.idle.Weak = {
  252. head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  253. body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  254. back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
  255.  
  256.  
  257. -- Defense sets
  258.  
  259. sets.defense.Evasion = {
  260. head="Pill. Bonnet +1",neck="Ej Necklace",ear1="Ethereal Earring",ear2="Heartseeker Earring",
  261. body="Qaaxo Harness",hands="Pill. Armlets +1",ring1="Beeline Ring",ring2="Defending Ring",
  262. back="Canny Cape",waist="Chiner's Belt +1",legs="Qaaxo Tights",feet="Plunderer's Poulaines +1"}
  263.  
  264. sets.defense.PDT = {
  265. head="Lithelimb Cap",neck="Twilight Torque",ear1="Flashward Earring",ear2="Ethereal Earring",
  266. body="Qaaxo harness",hands="Qaaxo Mitaines",ring1="Patricius Ring",ring2="Defending Ring",
  267. back="Mollusca Mantle",waist="Flume Belt",legs="Qaaxo Tights",feet="Plun. Poulaines +1"}
  268.  
  269. sets.defense.MDT = {ammo="Demonry Stone",
  270. head="Pillager's Bonnet +1",neck="Twilight Torque",ear1="Flashward Earring",ear2="Ethereal Earring",
  271. body="Qaaxo harness",hands="Qaaxo Mitaines",ring1="Lunette Ring +1",ring2="Defending Ring",
  272. back="Mollusca Mantle",waist="Carrier's Sash",legs="Qaaxo Tights",feet="Plun. Poulaines +1"}
  273.  
  274.  
  275. --------------------------------------
  276. -- Melee sets
  277. --------------------------------------
  278.  
  279. -- Normal melee group
  280. sets.engaged = {
  281. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
  282. body="Qaaxo Harness",hands="Pill. Armlets +1",ring1="Epona's Ring",ring2="Rajas Ring",
  283. back="Canny Cape",waist="Chiner's Belt +1",legs="Pill. Culottes +1",feet="Plunderer's Poulaines +1"}
  284. sets.engaged.Acc = {ammo="Honed Tathlum",
  285. head="Whirlpool Mask",neck="Ej Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
  286. body="Qaaxo Harness",hands="Qaaxo Mitaines",ring1="Epona's Ring",ring2="Rajas Ring",
  287. back="Canny Cape",waist="Chiner's Belt +1",legs="Pill. Culottes +1",feet="Plun. Poulaines +1"}
  288.  
  289. -- Mod set for trivial mobs (Skadi+1)
  290. sets.engaged.Mod = {
  291. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
  292. body="Qaaxo Harness",hands="Pill. Armlets +1",ring1="Epona's Ring",ring2="Rajas Ring",
  293. back="Canny Cape",waist="Chiner's Belt +1",legs="Pill. Culottes +1",feet="Plunderer's Poulaines +1"}
  294.  
  295. -- Mod set for trivial mobs (Thaumas)
  296. sets.engaged.Mod2 = {ammo="Thew Bomblet",
  297. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
  298. body="Qaaxo Harness",hands="Pill. Armlets +1",ring1="Epona's Ring",ring2="Rajas Ring",
  299. back="Canny Cape",waist="Chiner's Belt +1",legs="Pill. Culottes +1",feet="Plunderer's Poulaines +1"}
  300.  
  301. sets.engaged.Evasion = {ammo="Thew Bomblet",
  302. head="Pill. Bonnet +1",neck="Ej Necklace",ear1="Ethereal Earring",ear2="Heartseeker Earring",
  303. body="Qaaxo Harness",hands="Pill. Armlets +1",ring1="Beeline Ring",ring2="Defending Ring",
  304. back="Canny Cape",waist="Chiner's Belt +1",legs="Qaaxo Tights",feet="Plunderer's Poulaines +1"}
  305. sets.engaged.Acc.Evasion = {ammo="Honed Tathlum",
  306. head="Pill. Bonnet +1",neck="Ej Necklace",ear1="Ethereal Earring",ear2="Heartseeker Earring",
  307. body="Qaaxo Harness",hands="Pill. Armlets +1",ring1="Beeline Ring",ring2="Defending Ring",
  308. back="Canny Cape",waist="Chiner's Belt +1",legs="Qaaxo Tights",feet="Plunderer's Poulaines +1"}
  309.  
  310. sets.engaged.PDT = {ammo="Thew Bomblet",
  311. head="Lithelimb Cap",neck="Twilight Torque",ear1="Flashward Earring",ear2="Ethereal Earring",
  312. body="Qaaxo harness",hands="Qaaxo Mitaines",ring1="Patricius Ring",ring2="Defending Ring",
  313. back="Mollusca Mantle",waist="Flume Belt",legs="Qaaxo Tights",feet="Plun. Poulaines +1"}
  314. sets.engaged.Acc.PDT = {ammo="Honed Tathlum",
  315. head="Lithelimb Cap",neck="Ej Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
  316. body="Qaaxo harness",hands="Qaaxo Mitaines",ring1="Patricius Ring",ring2="Defending Ring",
  317. back="Mollusca Mantle",waist="Flume Belt",legs="Qaaxo Tights",feet="Plun. Poulaines +1"}
  318.  
  319. end
  320.  
  321.  
  322. -------------------------------------------------------------------------------------------------------------------
  323. -- Job-specific hooks for standard casting events.
  324. -------------------------------------------------------------------------------------------------------------------
  325.  
  326. -- Run after the general precast() is done.
  327. function job_post_precast(spell, action, spellMap, eventArgs)
  328. if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then
  329. equip(sets.TreasureHunter)
  330. elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
  331. if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
  332. equip(sets.TreasureHunter)
  333. end
  334. end
  335. end
  336.  
  337. -- Run after the general midcast() set is constructed.
  338. function job_post_midcast(spell, action, spellMap, eventArgs)
  339. if state.TreasureMode.value ~= 'None' and spell.action_type == 'Ranged Attack' then
  340. equip(sets.TreasureHunter)
  341. end
  342. end
  343.  
  344. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  345. function job_aftercast(spell, action, spellMap, eventArgs)
  346. -- Weaponskills wipe SATA/Feint. Turn those state vars off before default gearing is attempted.
  347. if spell.type == 'WeaponSkill' and not spell.interrupted then
  348. state.Buff['Sneak Attack'] = false
  349. state.Buff['Trick Attack'] = false
  350. state.Buff['Feint'] = false
  351. end
  352. end
  353.  
  354. -- Called after the default aftercast handling is complete.
  355. function job_post_aftercast(spell, action, spellMap, eventArgs)
  356. -- If Feint is active, put that gear set on on top of regular gear.
  357. -- This includes overlaying SATA gear.
  358. check_buff('Feint', eventArgs)
  359. end
  360.  
  361. -------------------------------------------------------------------------------------------------------------------
  362. -- Job-specific hooks for non-casting events.
  363. -------------------------------------------------------------------------------------------------------------------
  364.  
  365. -- Called when a player gains or loses a buff.
  366. -- buff == buff gained or lost
  367. -- gain == true if the buff was gained, false if it was lost.
  368. function job_buff_change(buff, gain)
  369. if state.Buff[buff] ~= nil then
  370. if not midaction() then
  371. handle_equipping_gear(player.status)
  372. end
  373. end
  374. end
  375.  
  376.  
  377. -------------------------------------------------------------------------------------------------------------------
  378. -- User code that supplements standard library decisions.
  379. -------------------------------------------------------------------------------------------------------------------
  380.  
  381. function get_custom_wsmode(spell, spellMap, defaut_wsmode)
  382. local wsmode
  383.  
  384. if state.Buff['Sneak Attack'] then
  385. wsmode = 'SA'
  386. end
  387. if state.Buff['Trick Attack'] then
  388. wsmode = (wsmode or '') .. 'TA'
  389. end
  390.  
  391. return wsmode
  392. end
  393.  
  394.  
  395. -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
  396. function job_handle_equipping_gear(playerStatus, eventArgs)
  397. -- Check that ranged slot is locked, if necessary
  398. check_range_lock()
  399.  
  400. -- Check for SATA when equipping gear. If either is active, equip
  401. -- that gear specifically, and block equipping default gear.
  402. check_buff('Sneak Attack', eventArgs)
  403. check_buff('Trick Attack', eventArgs)
  404. end
  405.  
  406.  
  407. function customize_idle_set(idleSet)
  408. if player.hpp < 80 then
  409. idleSet = set_combine(idleSet, sets.ExtraRegen)
  410. end
  411.  
  412. return idleSet
  413. end
  414.  
  415.  
  416. function customize_melee_set(meleeSet)
  417. if state.TreasureMode.value == 'Fulltime' then
  418. meleeSet = set_combine(meleeSet, sets.TreasureHunter)
  419. end
  420.  
  421. return meleeSet
  422. end
  423.  
  424.  
  425. -- Called by the 'update' self-command.
  426. function job_update(cmdParams, eventArgs)
  427. th_update(cmdParams, eventArgs)
  428. end
  429.  
  430. -- Function to display the current relevant user state when doing an update.
  431. -- Return true if display was handled, and you don't want the default info shown.
  432. function display_current_job_state(eventArgs)
  433. local msg = 'Melee'
  434.  
  435. if state.CombatForm.has_value then
  436. msg = msg .. ' (' .. state.CombatForm.value .. ')'
  437. end
  438.  
  439. msg = msg .. ': '
  440.  
  441. msg = msg .. state.OffenseMode.value
  442. if state.HybridMode.value ~= 'Normal' then
  443. msg = msg .. '/' .. state.HybridMode.value
  444. end
  445. msg = msg .. ', WS: ' .. state.WeaponskillMode.value
  446.  
  447. if state.DefenseMode.value ~= 'None' then
  448. msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  449. end
  450.  
  451. if state.Kiting.value == true then
  452. msg = msg .. ', Kiting'
  453. end
  454.  
  455. if state.PCTargetMode.value ~= 'default' then
  456. msg = msg .. ', Target PC: '..state.PCTargetMode.value
  457. end
  458.  
  459. if state.SelectNPCTargets.value == true then
  460. msg = msg .. ', Target NPCs'
  461. end
  462.  
  463. msg = msg .. ', TH: ' .. state.TreasureMode.value
  464.  
  465. add_to_chat(122, msg)
  466.  
  467. eventArgs.handled = true
  468. end
  469.  
  470. -------------------------------------------------------------------------------------------------------------------
  471. -- Utility functions specific to this job.
  472. -------------------------------------------------------------------------------------------------------------------
  473.  
  474. -- State buff checks that will equip buff gear and mark the event as handled.
  475. function check_buff(buff_name, eventArgs)
  476. if state.Buff[buff_name] then
  477. equip(sets.buff[buff_name] or {})
  478. if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
  479. equip(sets.TreasureHunter)
  480. end
  481. eventArgs.handled = true
  482. end
  483. end
  484.  
  485.  
  486. -- Check for various actions that we've specified in user code as being used with TH gear.
  487. -- This will only ever be called if TreasureMode is not 'None'.
  488. -- Category and Param are as specified in the action event packet.
  489. function th_action_check(category, param)
  490. if category == 2 or -- any ranged attack
  491. --category == 4 or -- any magic action
  492. (category == 3 and param == 30) or -- Aeolian Edge
  493. (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
  494. (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
  495. then return true
  496. end
  497. end
  498.  
  499.  
  500. -- Function to lock the ranged slot if we have a ranged weapon equipped.
  501. function check_range_lock()
  502. if player.equipment.range ~= 'empty' then
  503. disable('range', 'ammo')
  504. else
  505. enable('range', 'ammo')
  506. end
  507. end
  508.  
  509.  
  510. -- Select default macro book on initial load or subjob change.
  511. function select_default_macro_book()
  512. -- Default macro set/book
  513. if player.sub_job == 'DNC' then
  514. set_macro_page(2, 2)
  515. elseif player.sub_job == 'WAR' then
  516. set_macro_page(4, 2)
  517. elseif player.sub_job == 'NIN' then
  518. set_macro_page(3, 2)
  519. else
  520. set_macro_page(1, 2)
  521. end
  522. end
Advertisement
Add Comment
Please, Sign In to add comment