Advertisement
Ballzack

THF.lua

Jun 18th, 2017
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.04 KB | None | 0 0
  1. --[[
  2. Dagger Light:
  3. Rudra's Storm > Mandalic Stab > Exenterator > Exenterator = Radiance
  4.  
  5. Dagger Darkness:
  6. Exenterator > Rudra's Storm > Evisceration > Rudra's Storm = Umbra
  7. --]]
  8.  
  9. -------------------------------------------------------------------------------------------------------------------
  10. -- Initialization function that defines sets and variables to be used.
  11. -------------------------------------------------------------------------------------------------------------------
  12.  
  13. -- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
  14.  
  15. -- Initialization function for this job file.
  16. function get_sets()
  17. -- Load and initialize the include file.
  18. mote_include_version = 2
  19. include('Mote-Include.lua')
  20. end
  21.  
  22. -- Setup vars that are user-independent.
  23. function job_setup()
  24. state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
  25. state.Buff['Trick Attack'] = buffactive['trick attack'] or false
  26. state.Buff['Feint'] = buffactive['feint'] or false
  27. state.HasteMode = M{['description']='Haste Mode', 'Normal', 'Hi'}
  28. include('Mote-TreasureHunter')
  29.  
  30. -- For th_action_check():
  31. -- JA IDs for actions that always have TH: Provoke, Animated Flourish
  32. info.default_ja_ids = S{35, 204}
  33. -- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
  34. info.default_u_ja_ids = S{201, 202, 203, 205, 207}
  35.  
  36. lockstyleset = 10
  37. end
  38.  
  39.  
  40. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  41. function user_setup()
  42. -- Options: Override default values
  43. state.OffenseMode:options('Normal', 'Mid')
  44. state.HybridMode:options('Normal', 'PDT')
  45. state.WeaponskillMode:options('Normal')
  46. state.IdleMode:options('Normal', 'Regen')
  47. state.PhysicalDefenseMode:options('PDT')
  48. state.MagicalDefenseMode:options('MDT')
  49.  
  50. -- Additional local binds
  51. send_command('bind Delete input /ws "Rudra\s Storm" <t>')
  52. send_command('bind End input /ws "Evisceration" <t>')
  53. send_command('bind Home input /ws "Exenterator" <t>')
  54. send_command('bind ^= gs c cycle treasuremode')
  55. send_command('bind @h gs c cycle HasteMode')
  56. send_command('bind @home gs c warpring')
  57.  
  58. select_default_macro_book()
  59. set_lockstyle()
  60. end
  61.  
  62. -- Called when this job file is unloaded (eg: job change)
  63. function file_unload()
  64. send_command('unbind Delete')
  65. send_command('unbind End')
  66. send_command('unbind Home')
  67. send_command('unbind ^=')
  68. send_command('unbind @h')
  69. send_command('unbind @home')
  70. end
  71.  
  72. function init_gear_sets()
  73. include('augmented-items.lua')
  74.  
  75. sets.buff['Sneak Attack'] = {
  76. ammo="Yetshila",
  77. head="Adhemar Bonnet +1",
  78. neck="Caro Necklace",
  79. ear1="Mache Earring +1",
  80. ear2="Dawn Earring",
  81. body="Meg. Cuirie +2",
  82. hands="Plun. Armlets +1",
  83. ring1="Regal Ring",
  84. ring2="Ilabrat Ring",
  85. back=ToutatisSTP,
  86. waist="Artful Belt +1",
  87. legs="Lustr. Subligar +1",
  88. feet="Skulk. Poulaines +1"}
  89.  
  90. sets.buff['Trick Attack'] = set_combine(sets.buff['Sneak Attack'],{
  91. neck="Anu Torque",
  92. ear1="Infused Earring",
  93. waist="Svelt. Gouriz +1",
  94. legs="Meg. Chausses +2"})
  95.  
  96. -- Precast sets to enhance JAs
  97. sets.precast.JA['Collaborator'] = {head="Skulker's Bonnet +1"}
  98. sets.precast.JA['Accomplice'] = {head="Skulker's Bonnet +1"}
  99. sets.precast.JA['Flee'] = {feet="Pill. Poulaines +1"}
  100. sets.precast.JA['Hide'] = {body="Pillager's Vest +1"}
  101. sets.precast.JA['Conspirator'] = {body="Skulker's Vest +1"}
  102. sets.precast.JA['Steal'] = {hands="Pill. Armlets +1",legs="Pill. Culottes +1",feet="Pill. Poulaines +1",}
  103. sets.precast.JA['Despoil'] = {legs="Skulk. Culottes +1",feet="Skulk. Poulaines +1"}
  104. sets.precast.JA['Perfect Dodge'] = {hands="Plun. Armlets +1"}
  105. sets.precast.JA['Feint'] = {legs="Plun. Culottes +1"}
  106.  
  107. sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
  108. sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
  109.  
  110. -- TH actions
  111. sets.precast.Step = sets.TreasureHunter
  112. sets.precast.Flourish1 = sets.TreasureHunter
  113. sets.precast.JA.Provoke = sets.TreasureHunter
  114.  
  115. -- Fast cast sets for spells
  116. sets.precast.FC = {
  117. ammo="Sapience Orb",
  118. head="Herculean Helm",
  119. neck="Orunmila's Torque",
  120. ear1="Loquac. Earring",
  121. ear2="Enchntr. Earring +1",
  122. body=TaeonTabardFC,
  123. hands="Leyline Gloves",
  124. ring1="Lebeche Ring",
  125. ring2="Prolix Ring",
  126. back="Moonlight Cape",
  127. waist="Flume Belt +1",
  128. feet="Meg. Jam. +2"}
  129.  
  130. sets.precast.FC.Utsusemi = sets.precast.FC
  131.  
  132. -- Weaponskill sets
  133. -- Default set for any weaponskill that isn't any more specifically defined
  134. sets.precast.WS = {
  135. ammo="Falcon Eye",
  136. head="Adhemar Bonnet +1",
  137. neck="Fotia Gorget",
  138. ear1="Moonshade Earring",
  139. ear2="Sherida Earring",
  140. body="Adhemar Jacket +1",
  141. hands="Meg. Gloves +2",
  142. ring1="Regal Ring",
  143. ring2="Ilabrat Ring",
  144. back=ToutatisWSD,
  145. waist="Fotia Belt",
  146. legs="Lustr. Subligar +1",
  147. feet="Lustra. Leggings +1"}
  148.  
  149. -- Specific weaponskill sets. Uses the base set if an appropriate WSMid version isn't found.
  150. sets.precast.WS['Exenterator'] = {
  151. ammo="Seeth. Bomblet +1",
  152. head="Adhemar Bonnet +1",
  153. neck="Fotia Gorget",
  154. ear1="Moonshade Earring",
  155. ear2="Sherida Earring",
  156. body="Meg. Cuirie +2",
  157. hands="Meg. Gloves +2",
  158. ring1="Regal Ring",
  159. ring2="Ilabrat Ring",
  160. back=ToutatisSTP,
  161. waist="Fotia Belt",
  162. legs="Meg. Chausses +2",
  163. feet="Meg. Jam. +2"}
  164.  
  165. sets.precast.WS['Exenterator'].SA = set_combine(sets.precast.WS['Exenterator'], {})
  166. sets.precast.WS['Exenterator'].TA = set_combine(sets.precast.WS['Exenterator'], {})
  167. sets.precast.WS['Exenterator'].SATA = set_combine(sets.precast.WS['Exenterator'].SA, {})
  168.  
  169. sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {
  170. ammo="Yetshila",
  171. head="Adhemar Bonnet +1",
  172. neck="Fotia Gorget",
  173. ear1="Moonshade Earring",
  174. ear2="Sherida Earring",
  175. body="Abnoba Kaftan",
  176. hands=AdhemarWristbandsB,
  177. ring1="Begrudging Ring",
  178. ring2="Regal Ring",
  179. back=ToutatisCrit,
  180. waist="Fotia Belt",
  181. legs="Lustr. Subligar +1",
  182. feet="Lustra. Leggings +1"})
  183. sets.precast.WS['Evisceration'].SA = set_combine(sets.precast.WS['Evisceration'], {})
  184. sets.precast.WS['Evisceration'].TA = set_combine(sets.precast.WS['Evisceration'], {})
  185. sets.precast.WS['Evisceration'].SATA = set_combine(sets.precast.WS['Evisceration'].SA, {})
  186.  
  187. sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {
  188. ammo="Falcon Eye",
  189. head="Adhemar Bonnet +1",
  190. neck="Caro Necklace",
  191. ear1="Moonshade Earring",
  192. ear2="Sherida Earring",
  193. body="Adhemar Jacket +1",
  194. hands="Meg. Gloves +2",
  195. ring1="Regal Ring",
  196. ring2="Ilabrat Ring",
  197. back=ToutatisWSD,
  198. waist="Grunfeld Rope",
  199. legs="Lustr. Subligar +1",
  200. feet="Lustra. Leggings +1"})
  201.  
  202. sets.precast.WS["Rudra's Storm"].SA = set_combine(sets.precast.WS["Rudra's Storm"], {
  203. ammo="Yetshila",
  204. body="Meg. Cuirie +2",
  205. waist="Artful Belt +1"})
  206.  
  207. sets.precast.WS["Rudra's Storm"].TA = sets.precast.WS["Rudra's Storm"].SA
  208. sets.precast.WS["Rudra's Storm"].SATA = sets.precast.WS["Rudra's Storm"].SA
  209.  
  210. sets.precast.WS['Mandalic Stab'] = {
  211. ammo="Falcon Eye",
  212. head="Adhemar Bonnet +1",
  213. neck="Caro Necklace",
  214. ear1="Moonshade Earring",
  215. ear2="Sherida Earring",
  216. body="Adhemar Jacket +1",
  217. hands="Meg. Gloves +2",
  218. ring1="Regal Ring",
  219. ring2="Ilabrat Ring",
  220. back=ToutatisWSD,
  221. waist="Grunfeld Rope",
  222. legs="Lustr. Subligar +1",
  223. feet="Lustra. Leggings +1"}
  224. sets.precast.WS["Mandalic Stab"].SA = set_combine(sets.precast.WS["Mandalic Stab"], {})
  225. sets.precast.WS["Mandalic Stab"].TA = set_combine(sets.precast.WS["Mandalic Stab"], {})
  226. sets.precast.WS["Mandalic Stab"].SATA = set_combine(sets.precast.WS["Mandalic Stab"].SA, {})
  227.  
  228. sets.precast.WS['Aeolian Edge'] = {
  229. ammo="Pemphredo Tathlum",
  230. head=HerculeanHelmMAB,
  231. neck="Sanctity Necklace",
  232. ear1="Moonshade Earring",
  233. ear2="Friomisi Earring",
  234. body=HerculeanVestMAB,
  235. hands="Leyline Gloves",
  236. ring1="Shiva Ring +1",
  237. ring2="Shiva Ring +1",
  238. back="Izdubar Mantle",
  239. waist="Eschan Stone",
  240. legs=HerculeanTrousersMAB,
  241. feet=HerculeanBootsMAB}
  242.  
  243. -- Midcast Sets
  244. sets.midcast.FastRecast = sets.precast.FC
  245.  
  246. -- Specific spells
  247. sets.midcast.Utsusemi = sets.midcast.FastRecast
  248.  
  249. -- Ranged gear -- acc + TH
  250. sets.midcast.RA.TH = set_combine(sets.midcast.RA, set.TreasureHunter)
  251.  
  252. sets.midcast.RA.Acc = sets.midcast.RA
  253.  
  254. -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  255. sets.idle = {
  256. ammo="Staunch Tathlum",
  257. head="Meghanada Visor +2",
  258. neck="Loricate Torque +1",
  259. ear1="Sanare Earring",
  260. ear2="Hearty Earring",
  261. body=HerculeanVestDT,
  262. hands=HerculeanGlovesPDT,
  263. ring1="Moonbeam Ring",
  264. ring2="Defending Ring",
  265. back="Moonlight Cape",
  266. waist="Flume Belt +1",
  267. legs=HerculeanTrousersDT,
  268. feet="Jute Boots +1"}
  269.  
  270. sets.idle.Regen = set_combine(sets.idle, {
  271. head="Meghanada Visor +2",
  272. neck="Sanctity Necklace",
  273. ear1="Infused Earring",
  274. ear2="Dawn Earring",
  275. body="Meg. Cuirie +2",
  276. hands="Meg. Gloves +2",
  277. ring1="Sheltered Ring",
  278. ring2="Paguroidea Ring",
  279. legs="Meg. Chausses +2"})
  280.  
  281. -- Defense sets
  282. sets.defense.PDT = {
  283. ammo="Staunch Tathlum",
  284. head="Skulker's Bonnet +1",
  285. neck="Loricate Torque +1",
  286. ear1="Telos Earring",
  287. ear2="Sherida Earring",
  288. body=HerculeanVestDT,
  289. hands=HerculeanGlovesPDT,
  290. ring1="Moonbeam Ring",
  291. ring2="Defending Ring",
  292. back="Moonlight Cape",
  293. waist="Flume belt +1",
  294. legs="Mummu Kecks +2",
  295. feet=HerculeanBootsDT}
  296.  
  297. sets.defense.MDT = set_combine(sets.PDT,{
  298. ammo="Vanir Battery",
  299. ear1="Sanare Earring",
  300. ear2="Hearty Earring",
  301. body="Adhemar Jacket +1",
  302. hands="Leyline Gloves",
  303. ring1="Shadow Ring",
  304. back="Engulfer Cape +1",
  305. waist="Resolute Belt",
  306. feet="Jute Boots +1"})
  307.  
  308. -- Engaged sets
  309.  
  310. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  311. -- sets if more refined versions aren't defined.
  312. -- If you create a set with both offense and defense modes, the offense mode should be first.
  313. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  314.  
  315. -- Normal Melee Group --
  316. -- 0% Haste --
  317. sets.engaged = {
  318. ammo="Yamarang",
  319. head=HerculeanHelmDW,
  320. neck="Anu Torque",
  321. ear1="Eabani Earring",
  322. ear2="Suppanomimi",
  323. body="Adhemar Jacket +1",
  324. hands="Floral Gauntlets",
  325. ring1="Petrov Ring",
  326. ring2="Epona's Ring",
  327. back=ToutatisSTP,
  328. waist="Reiki Yotai",
  329. legs=HerculeanTrousersDW,
  330. feet=HerculeanBootsDW}
  331.  
  332. sets.engaged.Mid = set_combine(sets.engaged, {
  333. neck="Erudit. Necklace",
  334. ring1="Ilabrat Ring"})
  335.  
  336. -- Defensive Sets --
  337. sets.engaged.PDT = set_combine(sets.engaged, {
  338. neck="Loricate Torque +1",
  339. ring1="Moonbeam Ring",
  340. ring2="Defending Ring",
  341. back="Moonlight Cape"})
  342.  
  343. sets.engaged.Mid.PDT = sets.engaged.PDT
  344.  
  345. -- 43% Haste --
  346. sets.engaged.MaxHaste = set_combine(sets.engaged, {
  347. ammo="Yamarang",
  348. head="Adhemar Bonnet +1",
  349. neck="Anu Torque",
  350. ear1="Telos Earring",
  351. ear2="Sherida Earring",
  352. body="Adhemar Jacket +1",
  353. hands=AdhemarWristbandsB,
  354. ring1="Petrov Ring",
  355. ring2="Epona's Ring",
  356. back=ToutatisSTP,
  357. waist="Windbuffet Belt +1",
  358. legs="Samnuha Tights",
  359. feet=HerculeanBootsTA})
  360.  
  361. sets.engaged.Mid.MaxHaste = set_combine(sets.engaged.MaxHaste, {
  362. head="Skulker's Bonnet +1",
  363. neck="Erudit. Necklace",
  364. ring1="Ilabrat Ring"})
  365.  
  366. sets.engaged.PDT.MaxHaste = set_combine(sets.engaged.MaxHaste, {
  367. head="Meghanada Visor +2",
  368. neck="Loricate Torque +1",
  369. hands="Meg. Gloves +2",
  370. ring1="Moonbeam Ring",
  371. ring2="Defending Ring",
  372. legs="Meg. Chausses +2",
  373. feet="Meg. Jam. +2"})
  374.  
  375. sets.engaged.Mid.PDT.MaxHaste = sets.engaged.PDT.MaxHaste
  376.  
  377. -- 30% Haste --
  378. sets.engaged.Haste_30 = set_combine(sets.engaged.MaxHaste, {
  379. ear1="Eabani Earring",
  380. ear2="Suppanomimi",
  381. hands="Floral Gauntlets",
  382. waist="Reiki Yotai"})
  383.  
  384. sets.engaged.Mid.Haste_30 = set_combine(sets.engaged.Haste_30, {
  385. head="Skulker's Bonnet +1",
  386. neck="Erudit. Necklace",
  387. ring1="Ilabrat Ring"})
  388.  
  389. sets.engaged.PDT.Haste_30 = set_combine(sets.engaged.Haste_30, {
  390. head="Meghanada Visor +2",
  391. neck="Loricate Torque +1",
  392. ring1="Moonbeam Ring",
  393. ring2="Defending Ring",
  394. legs="Meg. Chausses +2",
  395. feet="Meg. Jam. +2"})
  396.  
  397. sets.engaged.Mid.PDT.Haste_30 = sets.engaged.PDT.Haste_30
  398.  
  399. -- 15% Haste --
  400. sets.engaged.Haste_15 = set_combine(sets.engaged.Haste_30, {
  401. head=HerculeanHelmDW,
  402. legs=HerculeanTrousersDW})
  403.  
  404. sets.engaged.Mid.Haste_15 = set_combine(sets.engaged.Haste_15, {
  405. neck="Erudit. Necklace",
  406. ring1="Ilabrat Ring"})
  407.  
  408. sets.engaged.PDT.Haste_15 = set_combine(sets.engaged.Haste_15, {
  409. neck="Loricate Torque +1",
  410. ring1="Moonbeam Ring",
  411. ring2="Defending Ring",
  412. back="Moonlight Cape"})
  413.  
  414. sets.engaged.Mid.PDT.Haste_15 = sets.engaged.PDT.Haste_15
  415.  
  416. sets.TreasureHunter = {hands="Plun. Armlets +1",feet="Skulk. Poulaines +1"}
  417. sets.buff.Doom = {ring1="Eshmun's Ring", ring2="Eshmun's Ring", waist="Gishdubar Sash"}
  418. sets.Reive = {neck="Ygnas's Resolve +1"}
  419. end
  420.  
  421. function job_pretarget(spell, action, spellMap, eventArgs)
  422. if spell.english == "Berserk" and buffactive.Berserk then -- Change Berserk To Aggressor If Berserk Is On --
  423. cancel_spell()
  424. send_command('Aggressor')
  425. end
  426. end
  427.  
  428. function job_precast(spell, action, spellMap, eventArgs)
  429. if state.Buff[spell.english] ~= nil then
  430. state.Buff[spell.english] = true
  431. end
  432. end
  433.  
  434. function job_post_precast(spell, action, spellMap, eventArgs)
  435. if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then
  436. equip(sets.TreasureHunter)
  437. elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
  438. if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
  439. equip(sets.TreasureHunter)
  440. end
  441. end
  442. if spell.action_type=="Magic" and buffactive.Silence then
  443. eventArgs.cancel = true
  444. send_command('input /item "Echo Drops" <me>')
  445. end
  446. if spell.type == "WeaponSkill" and player.tp > 2500 then
  447. equip({ear1="Brutal Earring"})
  448. end
  449. if spell.english == 'Evisceration' and player.tp > 2500 then
  450. equip({ear1="Mache Earring +1"})
  451. end
  452. --[[ Lock weaponskill if you are to far from the mob as to not lose TP ]]
  453. if spell.type == 'WeaponSkill' then
  454. if spell.target.distance > 6 then
  455. cancel_spell()
  456. add_to_chat(123, 'Target to far away. Move closer nub')
  457. return
  458. end
  459. end
  460. end
  461.  
  462. function job_post_midcast(spell, action, spellMap, eventArgs)
  463. if state.TreasureMode.value ~= 'None' and spell.action_type == 'Ranged Attack' then
  464. equip(sets.TreasureHunter)
  465. end
  466. end
  467.  
  468. function job_aftercast(spell, action, spellMap, eventArgs)
  469. if state.Buff[spell.english] ~= nil then
  470. state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
  471. end
  472. -- Weaponskills wipe SATA/Feint. Turn those state vars off before default gearing is attempted.
  473. if spell.type == 'WeaponSkill' and not spell.interrupted then
  474. state.Buff['Sneak Attack'] = false
  475. state.Buff['Trick Attack'] = false
  476. state.Buff['Feint'] = false
  477. end
  478. end
  479.  
  480. function job_post_aftercast(spell, action, spellMap, eventArgs)
  481. -- If Feint is active, put that gear set on on top of regular gear.
  482. -- This includes overlaying SATA gear.
  483. check_buff('Feint', eventArgs)
  484. end
  485.  
  486. function get_custom_wsmode(spell, spellMap, defaut_wsmode)
  487. local wsmode
  488. if state.Buff['Sneak Attack'] then
  489. wsmode = 'SA'
  490. end
  491. if state.Buff['Trick Attack'] then
  492. wsmode = (wsmode or '') .. 'TA'
  493. end
  494. return wsmode
  495. end
  496.  
  497. function job_handle_equipping_gear(playerStatus, eventArgs)
  498. -- Check that ranged slot is locked, if necessary
  499. check_range_lock()
  500. -- Check for SATA when equipping gear. If either is active, equip
  501. -- that gear specifically, and block equipping default gear.
  502. check_buff('Sneak Attack', eventArgs)
  503. check_buff('Trick Attack', eventArgs)
  504. end
  505.  
  506. function customize_idle_set(idleSet)
  507. if state.Buff.Doom then
  508. idleSet = set_combine(idleSet, sets.buff.Doom)
  509. end
  510. return idleSet
  511. end
  512.  
  513. function customize_melee_set(meleeSet)
  514. if state.TreasureMode.value == 'Fulltime' then
  515. meleeSet = set_combine(meleeSet, sets.TreasureHunter)
  516. end
  517. if state.Buff.Doom then
  518. meleeSet = set_combine(meleeSet, sets.buff.Doom)
  519. end
  520. return meleeSet
  521. end
  522.  
  523. function job_buff_change(buff, gain)
  524. if buff:lower()=='terror' or buff:lower()=='petrification' or buff:lower()=='sleep' or buff:lower()=='stun' then
  525. if gain then
  526. equip(sets.defense.PDT)
  527. elseif not gain then
  528. handle_equipping_gear(player.status)
  529. end
  530. end
  531. -- If we gain or lose any haste buffs, adjust which gear set we target.
  532. if S{'haste', 'march', 'mighty guard', 'embrava', 'haste samba', 'geo-haste', 'indi-haste'}:contains(buff:lower()) then
  533. determine_haste_group()
  534. handle_equipping_gear(player.status)
  535. end
  536. if state.Buff[buff] ~= nil then
  537. state.Buff[buff] = gain
  538. if not midaction() then
  539. handle_equipping_gear(player.status)
  540. end
  541. end
  542. if buff == "doom" then
  543. if gain then
  544. equip(sets.buff.Doom)
  545. send_command('@input /item "Holy Water" <me>')
  546. disable('ring1','ring2','waist')
  547. else
  548. enable('ring1','ring2','waist')
  549. handle_equipping_gear(player.status)
  550. end
  551. end
  552. if buffactive['Reive Mark'] then
  553. equip(sets.Reive)
  554. disable('neck')
  555. else
  556. enable('neck')
  557. end
  558. end
  559.  
  560. function job_update(cmdParams, eventArgs)
  561. th_update(cmdParams, eventArgs)
  562. determine_haste_group()
  563. end
  564.  
  565. function display_current_job_state(eventArgs)
  566. local msg = ''
  567. if state.OffenseMode.value ~= 'None' then
  568. msg = msg .. 'Melee: ['..state.OffenseMode.value..']'
  569.  
  570. msg = msg .. ', '
  571. end
  572.  
  573. if state.DefenseMode.value ~= 'None' then
  574. local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
  575. msg = msg .. 'Defense: ['..state.DefenseMode.value..']'
  576.  
  577. msg = msg .. ', '
  578. end
  579.  
  580. msg = msg .. 'Idle: ['..state.IdleMode.value..']'
  581.  
  582. msg = msg .. ', TH: ' .. state.TreasureMode.value
  583.  
  584. add_to_chat(122, msg)
  585. eventArgs.handled = true
  586. end
  587.  
  588. function job_self_command(cmdParams, eventArgs)
  589. command = cmdParams[1]:lower()
  590. if command == 'warpring' then
  591. equip({left_ring="Warp Ring"})
  592. send_command('gs disable left_ring;wait 10;input /item "Warp Ring" <me>;wait 1;input /item "Warp Ring" <me>;wait 1;input /item "Warp Ring" <me>;wait 10;gs enable left_ring')
  593. end
  594. end
  595.  
  596. function check_buff(buff_name, eventArgs)
  597. if state.Buff[buff_name] then
  598. equip(sets.buff[buff_name] or {})
  599. if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
  600. equip(sets.TreasureHunter)
  601. end
  602. eventArgs.handled = true
  603. end
  604. end
  605.  
  606. function determine_haste_group()
  607. classes.CustomMeleeGroups:clear()
  608. -- assuming +4 for marches (ghorn has +5)
  609. -- Haste (white magic) 15%
  610. -- Haste Samba (Sub) 5%
  611. -- Haste (Merited DNC) 10% (never account for this)
  612. -- Victory March +0/+3/+4/+5 9.4/14%/15.6%/17.1% +0
  613. -- Advancing March +0/+3/+4/+5 6.3/10.9%/12.5%/14% +0
  614. -- Embrava 30% with 500 enhancing skill
  615. -- Mighty Guard - 15%
  616. -- buffactive[580] = geo haste
  617. -- buffactive[33] = regular haste
  618. -- buffactive[604] = mighty guard
  619. -- state.HasteMode = toggle for when you know Haste II is being cast on you
  620. -- Hi = Haste II is being cast. This is clunky to use when both haste II and haste I are being cast
  621. if state.HasteMode.value == 'Hi' then
  622. if ( ( (buffactive[33] or buffactive[580] or buffactive.embrava) and (buffactive.march or buffactive[604]) ) or
  623. ( buffactive[33] and (buffactive[580] or buffactive.embrava) ) or
  624. ( buffactive.march == 2 and buffactive[604] ) ) then
  625. --add_to_chat(8, '-------------Max-Haste Mode Enabled--------------')
  626. classes.CustomMeleeGroups:append('MaxHaste')
  627. elseif ( ( buffactive[580] or buffactive[33] or buffactive.march == 2 ) or
  628. ( buffactive.march == 1 and buffactive[604] ) ) then
  629. --add_to_chat(8, '-------------Haste 30%-------------')
  630. classes.CustomMeleeGroups:append('Haste_30')
  631. elseif ( buffactive.march == 1 or buffactive[604] ) then
  632. --add_to_chat(8, '-------------Haste 15%-------------')
  633. classes.CustomMeleeGroups:append('Haste_15')
  634. end
  635. else
  636. if ( buffactive[580] and ( buffactive.march or buffactive[33] or buffactive.embrava or buffactive[604]) ) or -- geo haste + anything
  637. ( buffactive.embrava and (buffactive.march or buffactive[33] or buffactive[604]) ) or -- embrava + anything
  638. ( buffactive.march == 2 and (buffactive[33] or buffactive[604]) ) or -- two marches + anything
  639. ( buffactive[33] and buffactive[604] and buffactive.march ) then -- haste + mighty guard + any marches
  640. --add_to_chat(8, '-------------Max Haste Mode Enabled--------------')
  641. classes.CustomMeleeGroups:append('MaxHaste')
  642. elseif ( buffactive.march == 2 ) or -- two marches from ghorn
  643. ( (buffactive[33] or buffactive[604]) and buffactive.march == 1 ) or -- MG or haste + 1 march
  644. ( buffactive[580] ) or -- geo haste
  645. ( buffactive[33] and buffactive[604] ) then -- haste with MG
  646. --add_to_chat(8, '-------------Haste 30%-------------')
  647. classes.CustomMeleeGroups:append('Haste_30')
  648. elseif buffactive[33] or buffactive[604] or buffactive.march == 1 then
  649. --add_to_chat(8, '-------------Haste 15%-------------')
  650. classes.CustomMeleeGroups:append('Haste_15')
  651. end
  652. end
  653. end
  654.  
  655. function th_action_check(category, param)
  656. if category == 2 or -- any ranged attack
  657. --category == 4 or -- any magic action
  658. (category == 3 and param == 30) or -- Aeolian Edge
  659. (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
  660. (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
  661. then return true
  662. end
  663. end
  664.  
  665. function check_range_lock()
  666. if player.equipment.range ~= 'empty' then
  667. disable('range', 'ammo')
  668. else
  669. enable('range', 'ammo')
  670. end
  671. end
  672.  
  673. -- Select default macro book on initial load or subjob change.
  674. function select_default_macro_book()
  675. -- Default macro set/book
  676. if player.sub_job == 'WAR' then
  677. set_macro_page(1, 7)
  678. elseif player.sub_job == 'NIN' then
  679. set_macro_page(2, 7)
  680. elseif player.sub_job == 'DNC' then
  681. set_macro_page(3, 7)
  682. else
  683. set_macro_page(1, 7)
  684. end
  685. end
  686.  
  687. function set_lockstyle()
  688. send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  689. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement