Advertisement
Guest User

ThF

a guest
Apr 18th, 2015
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.57 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.  
  71.  
  72. sets.weapon_skill = {head="Whirlpool mask",neck="Shadow gorget",ear1="Moonshade earring",ear2="Brutal Earring",
  73. body="Manibozho jerkin",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's ring",
  74. back="Atheling mantle",waist="Anguinus belt",legs="Manibozho brais",feet="Manibozho boots"}
  75. sets["Rudra's Storm 3000"] = {left_ear="Jupiter's pearl"}
  76. sets["Rudra's Storm"] = {head="Whirlpool mask",neck="Shadow gorget",ear1="Moonshade earring",ear2="Brutal Earring",
  77. body="Manibozho jerkin",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's ring",
  78. back="Atheling mantle",waist="Anguinus belt",legs="Manibozho brais",feet="Manibozho boots"}
  79.  
  80.  
  81. if spell.type == 'WeaponSkill' then
  82. if player.tp > 2999 and sets[spell.name..' 3000'] then
  83. equip(sets[spell.name..' 3000'])
  84. elseif player.tp < 2999 and sets[spell.name] then
  85. equip(sets[spell.name])
  86. else
  87. equip(sets.weapon_skill)
  88. end
  89. end
  90.  
  91. -- Define sets and vars used by this job file.
  92. function init_gear_sets()
  93. --------------------------------------
  94. -- Special sets (required by rules)
  95. --------------------------------------
  96.  
  97. sets.TreasureHunter = {hands="Plunderer's Armlets",feet="Skulker's poulaines"}
  98. sets.ExtraRegen = {head="Ocelomeh Headpiece +1"}
  99. sets.Kiting = {feet="Skadi's Jambeaux +1"}
  100.  
  101.  
  102.  
  103. -- Actions we want to use to tag TH.
  104. sets.precast.Step = sets.TreasureHunter
  105. sets.precast.Flourish1 = sets.TreasureHunter
  106. sets.precast.JA.Provoke = sets.TreasureHunter
  107.  
  108.  
  109. --------------------------------------
  110. -- Precast sets
  111. --------------------------------------
  112.  
  113. -- Precast sets to enhance JAs
  114. sets.precast.JA['Collaborator'] = {head="Skulker's bonnet"}
  115. sets.precast.JA['Accomplice'] = {head="Skulker's bonnet"}
  116. sets.precast.JA['Flee'] = {feet="Pillager's Poulaines +1"}
  117. sets.precast.JA['Hide'] = {body="Pillager's Vest +1"}
  118. sets.precast.JA['Conspirator'] = {body="Raider's Vest +2"}
  119. sets.precast.JA['Steal'] = {head="Plunderer's Bonnet",hands="Pillager's Armlets +1",legs="Pillager's Culottes +1",feet="Pillager's Poulaines +1"}
  120. sets.precast.JA['Despoil'] = {legs="Raider's Culottes +2",feet="Skulker's Poulaines"}
  121. sets.precast.JA['Perfect Dodge'] = {hands="Plunderer's Armlets +1"}
  122. sets.precast.JA['Feint'] = {} -- {legs="Assassin's Culottes +2"}
  123.  
  124. sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
  125. sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
  126.  
  127.  
  128. -- Waltz set (chr and vit)
  129. sets.precast.Waltz = {ammo="Sonia's Plectrum",
  130. head="Whirlpool Mask",
  131. body="Pillager's Vest +1",hands="Pillager's Armlets",ring1="Asklepian Ring",
  132. back="Iximulew Cape",waist="Caudata Belt",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines"}
  133.  
  134. -- Don't need any special gear for Healing Waltz.
  135. sets.precast.Waltz['Healing Waltz'] = {}
  136.  
  137.  
  138. -- Fast cast sets for spells
  139. sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring",legs="Enif Cosciales"}
  140.  
  141. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  142.  
  143.  
  144. -- Ranged snapshot gear
  145. sets.precast.RA = {head="Aurore Beret",hands="Iuitl Wristbands",legs="Nahtirah Trousers",feet="Wurrukatte Boots"}
  146.  
  147.  
  148. -- Weaponskill sets
  149.  
  150. -- Default set for any weaponskill that isn't any more specifically defined
  151.  
  152.  
  153. sets.precast.WS = {head="Whirlpool mask",neck="Asperity necklace",ear1="Moonshade earring",ear2="Brutal Earring",
  154. body="Manibozho jerkin",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's ring",
  155. back="Atheling mantle",waist="Anguinus belt",legs="Manibozho brais",feet="Manibozho boots"}
  156.  
  157.  
  158.  
  159. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  160. sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {head="Whirlpool mask",neck="Breeze gorget",ear1="Moonshade earring",ear2="Brutal Earring",
  161. body="Manibozho jerkin",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's ring",
  162. back="Canny cape",waist="Windbuffet belt",legs="Manibozho brais",feet="Manibozho boots"})
  163. sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {})
  164. sets.precast.WS['Exenterator'].Mod = set_combine(sets.precast.WS['Exenterator'], {})
  165. sets.precast.WS['Exenterator'].SA = set_combine(sets.precast.WS['Exenterator'].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  166. sets.precast.WS['Exenterator'].TA = set_combine(sets.precast.WS['Exenterator'].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  167. sets.precast.WS['Exenterator'].SATA = set_combine(sets.precast.WS['Exenterator'].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  168.  
  169.  
  170.  
  171. sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {head="Whirlpool mask",neck="Shadow gorget",ear1="Moonshade earring",ear2="Brutal Earring",
  172. body="Manibozho jerkin",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's ring",
  173. back="Rancorous mantle",waist="Anguinus belt",legs="Manibozho brais",feet="Manibozho boots"})
  174. sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {})
  175. sets.precast.WS['Evisceration'].Mod = set_combine(sets.precast.WS['Evisceration'], {})
  176. sets.precast.WS['Evisceration'].SA = set_combine(sets.precast.WS['Evisceration'].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  177. sets.precast.WS['Evisceration'].TA = set_combine(sets.precast.WS['Evisceration'].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  178. sets.precast.WS['Evisceration'].SATA = set_combine(sets.precast.WS['Evisceration'].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  179.  
  180. sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {head="Whirlpool mask",neck="Shadow gorget",ear1="Moonshade earring",ear2="Brutal Earring",
  181. body="Manibozho jerkin",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's ring",
  182. back="Atheling mantle",waist="Anguinus belt",legs="Manibozho brais",feet="Manibozho boots"})
  183. sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {})
  184. sets.precast.WS["Rudra's Storm"].Mod = set_combine(sets.precast.WS["Rudra's Storm"], {})
  185. sets.precast.WS["Rudra's Storm"].SA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  186. sets.precast.WS["Rudra's Storm"].TA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  187. sets.precast.WS["Rudra's Storm"].SATA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {hands="Skulker's armlets", body="Plunderer's vest"})
  188.  
  189. sets.precast.WS["Shark Bite"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
  190. sets.precast.WS['Shark Bite'].Acc = set_combine(sets.precast.WS['Shark Bite'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  191. sets.precast.WS['Shark Bite'].Mod = set_combine(sets.precast.WS['Shark Bite'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  192. sets.precast.WS['Shark Bite'].SA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
  193. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  194. sets.precast.WS['Shark Bite'].TA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
  195. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  196. sets.precast.WS['Shark Bite'].SATA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
  197. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  198.  
  199. sets.precast.WS['Mandalic Stab'] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
  200. sets.precast.WS['Mandalic Stab'].Acc = set_combine(sets.precast.WS['Mandalic Stab'], {ammo="Honed Tathlum", back="Letalis Mantle"})
  201. sets.precast.WS['Mandalic Stab'].Mod = set_combine(sets.precast.WS['Mandalic Stab'], {back="Kayapa Cape",waist=gear.ElementalBelt})
  202. sets.precast.WS['Mandalic Stab'].SA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
  203. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  204. sets.precast.WS['Mandalic Stab'].TA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
  205. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  206. sets.precast.WS['Mandalic Stab'].SATA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
  207. body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
  208.  
  209. sets.precast.WS['Aeolian Edge'] = {ammo="Jukukik Feather",
  210. head="Wayfarer Circlet",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Moonshade Earring",
  211. body="Wayfarer Robe",hands="Pillager's Armlets +1",ring1="Acumen Ring",ring2="Demon's Ring",
  212. back="Toro Cape",waist=gear.ElementalBelt,legs="Shneddick Tights +1",feet="Wayfarer Clogs"}
  213.  
  214. sets.precast.WS['Aeolian Edge'].TH = set_combine(sets.precast.WS['Aeolian Edge'], sets.TreasureHunter)
  215.  
  216.  
  217. --------------------------------------
  218. -- Midcast sets
  219. --------------------------------------
  220.  
  221. sets.midcast.FastRecast = {
  222. head="Whirlpool Mask",ear2="Loquacious Earring",
  223. body="Pillager's Vest +1",hands="Pillager's Armlets +1",
  224. back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
  225.  
  226. -- Specific spells
  227. sets.midcast.Utsusemi = {
  228. head="Whirlpool Mask",neck="Ej Necklace",ear2="Loquacious Earring",
  229. body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",
  230. back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
  231.  
  232. -- Ranged gear
  233. sets.midcast.RA = {
  234. head="Whirlpool Mask",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
  235. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Hajduk Ring",
  236. back="Libeccio Mantle",waist="Aquiline Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  237.  
  238. sets.midcast.RA.Acc = {
  239. head="Pillager's Bonnet +1",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
  240. body="Iuitl Vest",hands="Buremte Gloves",ring1="Beeline Ring",ring2="Hajduk Ring",
  241. back="Libeccio Mantle",waist="Aquiline Belt",legs="Thurandaut Tights +1",feet="Pillager's Poulaines +1"}
  242.  
  243.  
  244. --------------------------------------
  245. -- Idle/resting/defense sets
  246. --------------------------------------
  247.  
  248. -- Resting sets
  249. sets.resting = {head="Ocelomeh Headpiece +1",neck="Wiglen Gorget",
  250. ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  251.  
  252.  
  253. -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  254.  
  255. sets.idle = {head="Ocelomeh headpiece +1",neck="Wiglen Gorget",ear1="Merman's Earring",ear2="Merman's Earring",
  256. body="Manibozho jerkin",hands="Iuitl Wristbands +1",ring1="Paguroidea Ring",ring2="Sheltered Ring",
  257. back="Engulfer cape +1",waist="Muscle belt +1",legs="Nahtirah Trousers",feet="Fajin boots"}
  258.  
  259. sets.idle.Town = {main="Izhiikoh", sub="Sabebus",head="Ocelomeh headpiece +1",neck="Wiglen Gorget",ear1="Merman's Earring",ear2="Merman's Earring",
  260. body="Manibozho jerkin",hands="Iuitl Wristbands +1",ring1="Paguroidea Ring",ring2="Sheltered Ring",
  261. back="Engulfer cape +1",waist="Muscle belt +1",legs="Nahtirah Trousers",feet="Fajin boots"}
  262.  
  263. sets.idle.Weak = {head="Ocelomeh headpiece +1",neck="Wiglen Gorget",ear1="Merman's Earring",ear2="Merman's Earring",
  264. body="Manibozho jerkin",hands="Iuitl Wristbands +1",ring1="Paguroidea Ring",ring2="Sheltered Ring",
  265. back="Engulfer cape +1",waist="Muscle belt +1",legs="Nahtirah Trousers",feet="Fajin boots"}
  266.  
  267.  
  268. -- Defense sets
  269.  
  270. sets.defense.Evasion = {head="Whirlpool Mask",neck="Torero torque",ear1="Suppanomimi",ear2="Brutal Earring",
  271. body="Plunderer's vest",hands="Plun. Armlets",ring1="Rajas Ring",ring2="Epona's Ring",
  272. back="Canny Cape",waist="Phasmida belt",legs="Manibozho brais",feet="Skulker's Poulaines"}
  273.  
  274. sets.defense.PDT = {head="Whirlpool Mask",neck="Wiglen Gorget",ear1="Suppanomimi",ear2="Brutal Earring",
  275. body="Plunderer's vest",hands="Plun. Armlets",ring1="Dark ring",ring2="Dark ring",
  276. back="Canny cape",waist="Phasmida belt",legs="Manibozho brais",feet="Plunderer's Poulaines"}
  277.  
  278. sets.defense.MDT = {head="Whirlpool Mask",neck="Twilight torque",left_ear="Merman's earring",
  279. right_ear="Merman's earring",body="Avalon Breastplate",hands="Plun. Armlets",ring1="Dark ring",ring2="Dark ring",
  280. back="Engulfer cape +1",waist="Phasmida belt",legs="Manibozho brais",feet="Plunderer's Poulaines"}
  281.  
  282.  
  283. --------------------------------------
  284. -- Melee sets
  285. --------------------------------------
  286.  
  287. -- Normal melee group
  288. sets.engaged = {range="Raider's Bmrng.",
  289. head="Skulker's bonnet",neck="Asperity necklace",ear1="Suppanomimi",ear2="Brutal Earring",
  290. body="Thaumas coat",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's Ring",
  291. back="Canny Cape",waist="Windbuffet belt",legs="Manibozho brais",feet="Plunderer's Poulaines"}
  292. sets.engaged.Acc = {range="Raider's Bmrng.",
  293. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Suppanomimi",ear2="Brutal Earring",
  294. body="Manibozho Jerkin",hands="Plun. Armlets",ring1="Rajas Ring",ring2="Epona's Ring",
  295. back="Canny Cape",waist="Anguinus belt",legs="Manibozho brais",feet="Manibozho boots"}
  296.  
  297. -- Mod set for trivial mobs (Skadi+1)
  298. sets.engaged.Mod = {range="Raider's Bmrng.",
  299. head="Skulker's bonnet",neck="Asperity necklace",ear1="Suppanomimi",ear2="Brutal Earring",
  300. body="Thaumas coat",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's Ring",
  301. back="Canny Cape",waist="Windbuffet belt",legs="Manibozho brais",feet="Plunderer's Poulaines"}
  302.  
  303. -- Mod set for trivial mobs (Thaumas)
  304. sets.engaged.Mod2 = {range="Raider's Bmrng.",
  305. head="Skulker's bonnet",neck="Asperity necklace",ear1="Suppanomimi",ear2="Brutal Earring",
  306. body="Thaumas coat",hands="Skulker's armlets",ring1="Rajas Ring",ring2="Epona's Ring",
  307. back="Canny Cape",waist="Windbuffet belt",legs="Manibozho brais",feet="Plunderer's Poulaines"}
  308.  
  309. sets.engaged.Evasion = {
  310. head="Whirlpool Mask",neck="Torero torque",ear1="Suppanomimi",ear2="Brutal Earring",
  311. body="Plunderer's vest",hands="Plun. Armlets",ring1="Rajas Ring",ring2="Epona's Ring",
  312. back="Canny Cape",waist="Phasmida belt",legs="Manibozho brais",feet="Skulker's Poulaines"}
  313. sets.engaged.Acc.Evasion = {range="Raider's Bmrng.",
  314. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Suppanomimi",ear2="Brutal Earring",
  315. body="Manibozho Jerkin",hands="Plun. Armlets",ring1="Rajas Ring",ring2="Epona's Ring",
  316. back="Canny Cape",waist="Anguinus belt",legs="Manibozho brais",feet="Manibozho boots"}
  317.  
  318. sets.engaged.PDT = {head="Whirlpool Mask",neck="Wiglen Gorget",ear1="Suppanomimi",ear2="Brutal Earring",
  319. body="Plunderer's vest",hands="Plun. Armlets",ring1="Dark ring",ring2="Dark ring",
  320. back="Canny cape",waist="Phasmida belt",legs="Manibozho brais",feet="Plunderer's Poulaines"}
  321. sets.engaged.Acc.PDT = {head="Whirlpool Mask",neck="Wiglen Gorget",ear1="Suppanomimi",ear2="Brutal Earring",
  322. body="Plunderer's vest",hands="Plun. Armlets",ring1="Dark ring",ring2="Dark ring",
  323. back="Canny cape",waist="Phasmida belt",legs="Manibozho brais",feet="Plunderer's Poulaines"}
  324.  
  325. end
  326.  
  327.  
  328. -------------------------------------------------------------------------------------------------------------------
  329. -- Job-specific hooks for standard casting events.
  330. -------------------------------------------------------------------------------------------------------------------
  331.  
  332. -- Run after the general precast() is done.
  333. function job_post_precast(spell, action, spellMap, eventArgs)
  334. if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then
  335. equip(sets.TreasureHunter)
  336. elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
  337. if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
  338. equip(sets.TreasureHunter)
  339. end
  340. end
  341. end
  342.  
  343. -- Run after the general midcast() set is constructed.
  344. function job_post_midcast(spell, action, spellMap, eventArgs)
  345. if state.TreasureMode.value ~= 'None' and spell.action_type == 'Ranged Attack' then
  346. equip(sets.TreasureHunter)
  347. end
  348. end
  349.  
  350. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  351. function job_aftercast(spell, action, spellMap, eventArgs)
  352. -- Weaponskills wipe SATA/Feint. Turn those state vars off before default gearing is attempted.
  353. if spell.type == 'WeaponSkill' and not spell.interrupted then
  354. state.Buff['Sneak Attack'] = false
  355. state.Buff['Trick Attack'] = false
  356. state.Buff['Feint'] = false
  357. end
  358. end
  359.  
  360. -- Called after the default aftercast handling is complete.
  361. function job_post_aftercast(spell, action, spellMap, eventArgs)
  362. -- If Feint is active, put that gear set on on top of regular gear.
  363. -- This includes overlaying SATA gear.
  364. check_buff('Feint', eventArgs)
  365. end
  366.  
  367. -------------------------------------------------------------------------------------------------------------------
  368. -- Job-specific hooks for non-casting events.
  369. -------------------------------------------------------------------------------------------------------------------
  370.  
  371. -- Called when a player gains or loses a buff.
  372. -- buff == buff gained or lost
  373. -- gain == true if the buff was gained, false if it was lost.
  374. function job_buff_change(buff, gain)
  375. if state.Buff[buff] ~= nil then
  376. if not midaction() then
  377. handle_equipping_gear(player.status)
  378. end
  379. end
  380. end
  381.  
  382.  
  383. -------------------------------------------------------------------------------------------------------------------
  384. -- User code that supplements standard library decisions.
  385. -------------------------------------------------------------------------------------------------------------------
  386.  
  387. function get_custom_wsmode(spell, spellMap, defaut_wsmode)
  388. local wsmode
  389.  
  390. if state.Buff['Sneak Attack'] then
  391. wsmode = 'SA'
  392. end
  393. if state.Buff['Trick Attack'] then
  394. wsmode = (wsmode or '') .. 'TA'
  395. end
  396.  
  397. return wsmode
  398. end
  399.  
  400.  
  401. -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
  402. function job_handle_equipping_gear(playerStatus, eventArgs)
  403. -- Check that ranged slot is locked, if necessary
  404. check_range_lock()
  405.  
  406. -- Check for SATA when equipping gear. If either is active, equip
  407. -- that gear specifically, and block equipping default gear.
  408. check_buff('Sneak Attack', eventArgs)
  409. check_buff('Trick Attack', eventArgs)
  410. end
  411.  
  412.  
  413. function customize_idle_set(idleSet)
  414. if player.hpp < 80 then
  415. idleSet = set_combine(idleSet, sets.ExtraRegen)
  416. end
  417.  
  418. return idleSet
  419. end
  420.  
  421.  
  422. function customize_melee_set(meleeSet)
  423. if state.TreasureMode.value == 'Fulltime' then
  424. meleeSet = set_combine(meleeSet, sets.TreasureHunter)
  425. end
  426.  
  427. return meleeSet
  428. end
  429.  
  430.  
  431. -- Called by the 'update' self-command.
  432. function job_update(cmdParams, eventArgs)
  433. th_update(cmdParams, eventArgs)
  434. end
  435.  
  436. -- Function to display the current relevant user state when doing an update.
  437. -- Return true if display was handled, and you don't want the default info shown.
  438. function display_current_job_state(eventArgs)
  439. local msg = 'Melee'
  440.  
  441. if state.CombatForm.has_value then
  442. msg = msg .. ' (' .. state.CombatForm.value .. ')'
  443. end
  444.  
  445. msg = msg .. ': '
  446.  
  447. msg = msg .. state.OffenseMode.value
  448. if state.HybridMode.value ~= 'Normal' then
  449. msg = msg .. '/' .. state.HybridMode.value
  450. end
  451. msg = msg .. ', WS: ' .. state.WeaponskillMode.value
  452.  
  453. if state.DefenseMode.value ~= 'None' then
  454. msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  455. end
  456.  
  457. if state.Kiting.value == true then
  458. msg = msg .. ', Kiting'
  459. end
  460.  
  461. if state.PCTargetMode.value ~= 'default' then
  462. msg = msg .. ', Target PC: '..state.PCTargetMode.value
  463. end
  464.  
  465. if state.SelectNPCTargets.value == true then
  466. msg = msg .. ', Target NPCs'
  467. end
  468.  
  469. msg = msg .. ', TH: ' .. state.TreasureMode.value
  470.  
  471. add_to_chat(122, msg)
  472.  
  473. eventArgs.handled = true
  474. end
  475.  
  476. -------------------------------------------------------------------------------------------------------------------
  477. -- Utility functions specific to this job.
  478. -------------------------------------------------------------------------------------------------------------------
  479.  
  480. -- State buff checks that will equip buff gear and mark the event as handled.
  481. function check_buff(buff_name, eventArgs)
  482. if state.Buff[buff_name] then
  483. equip(sets.buff[buff_name] or {})
  484. if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
  485. equip(sets.TreasureHunter)
  486. end
  487. eventArgs.handled = true
  488. end
  489. end
  490.  
  491.  
  492. -- Check for various actions that we've specified in user code as being used with TH gear.
  493. -- This will only ever be called if TreasureMode is not 'None'.
  494. -- Category and Param are as specified in the action event packet.
  495. function th_action_check(category, param)
  496. if category == 2 or -- any ranged attack
  497. --category == 4 or -- any magic action
  498. (category == 3 and param == 30) or -- Aeolian Edge
  499. (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
  500. (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
  501. then return true
  502. end
  503. end
  504.  
  505.  
  506. -- Function to lock the ranged slot if we have a ranged weapon equipped.
  507. function check_range_lock()
  508. if player.equipment.range ~= 'empty' then
  509. disable('range', 'ammo')
  510. else
  511. enable('range', 'ammo')
  512. end
  513. end
  514.  
  515.  
  516. -- Select default macro book on initial load or subjob change.
  517. -- Select default macro book on initial load or subjob change.
  518. function select_default_macro_book()
  519. -- Default macro set/book
  520. if player.sub_job == 'DNC' then
  521. set_macro_page(1, 10)
  522. elseif player.sub_job == 'WAR' then
  523. set_macro_page(3, 10)
  524. elseif player.sub_job == 'NIN' then
  525. set_macro_page(4, 5)
  526. else
  527. set_macro_page(2, 5)
  528. end
  529. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement