Guest User

ThF

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