Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. function get_sets()
  6. mote_include_version = 2
  7.  
  8. -- Load and initialize the include file
  9. include('Xathe-Include')
  10. end
  11.  
  12. -------------------------------------------------------------------------------------------------------------------
  13. -- User setup functions for this job.
  14. -------------------------------------------------------------------------------------------------------------------
  15.  
  16. function user_setup()
  17. state.OffenseMode:options('Normal', 'Acc')
  18. state.WeaponskillMode:options('Normal', 'Acc')
  19. state.HybridMode:options('Normal', 'DT')
  20.  
  21. -- Additional local binds
  22. send_command('bind %` gs c cycle HybridMode')
  23.  
  24. set_lockstyle()
  25. toggle_display()
  26. end
  27.  
  28. function user_unload()
  29. send_command('unbind %`')
  30. end
  31.  
  32. function init_gear_sets()
  33.  
  34. -- Precast sets
  35. sets.precast.JA['Dark Seal'] = {head="Fall. Burgeonet +1"}
  36. sets.precast.JA['Last Resort'] = {back="Ankou's Mantle", feet="Fall. Sollerets +1"}
  37. sets.precast.JA['Nether Void'] = {legs="Heath. Flanchard +1"}
  38.  
  39. sets.precast.FC_Base = { -- 50
  40. head="Carmine Mask +1", --14
  41. neck="Voltsurge Torque", -- 4
  42. ear2="Loquac. Earring", -- 2
  43. body="Odyss. Chestplate", -- 5
  44. hands="Leyline Gloves", -- 5
  45. ring2="Weather. Ring", -- 5
  46. back=Ankou.FC, -- 10
  47. legs="Eschite Cuisses" -- 5
  48. }
  49.  
  50. sets.precast.QuickMagic = { -- 7
  51. ammo="Impatiens", -- 2
  52. ring1="Lebeche Ring", -- 2
  53. ring2="Weather. Ring" -- 3
  54. }
  55.  
  56. sets.precast.FC = set_combine(sets.precast.FC_Base, sets.precast.QuickMagic)
  57.  
  58. -- Midcast sets
  59. sets.midcast['Dark Magic'] = {
  60. ammo="Pemphredo Tathlum",
  61. head="Carmine Mask +1",
  62. neck="Erra Pendant", -- 10
  63. ear2="Digni. Earring",
  64. body="Carm. Sc. Mail +1", -- 16
  65. hands="Fall. Fin. Gaunt. +2", -- 16
  66. ring1="Evanescence Ring", -- 10
  67. ring2="Stikini Ring", -- 5
  68. back="Niht Mantle", -- 10
  69. legs="Fall. Flanchard +3", -- 18
  70. feet="Ratri Sollerets"
  71. }
  72.  
  73. sets.midcast.Absorb = set_combine(sets.midcast['Dark Magic'], {
  74. hands="Pavor Gauntlets",
  75. ring2="Kishar Ring",
  76. back="Chuparrosa Mantle"
  77. })
  78.  
  79. gear.default.obi_waist = "Austerity Belt +1"
  80.  
  81. sets.midcast.Aspir = set_combine(sets.midcast['Dark Magic'], {
  82. ear1="Hirudinea Earring",
  83. ring2="Archon Ring",
  84. waist=gear.ElementalObi
  85. })
  86.  
  87. sets.midcast.Drain = sets.midcast.Aspir
  88.  
  89. sets.midcast['Dread Spikes'] = { -- 2933
  90. head="Odyssean Helm",
  91. body="Heath. Cuirass +1",
  92. hands="Flam. Manopolas +2",
  93. ring2="Moonlight Ring",
  94. back="Moonbeam Cape",
  95. legs="Flamma Dirs +1",
  96. feet="Ratri Sollerets"
  97. }
  98.  
  99. sets.midcast.Endark = set_combine(sets.midcast['Dark Magic'], {legs="Eschite Cuisses"})
  100.  
  101. -- Idle sets
  102. sets.idle = {
  103. main="Caladbolg",
  104. sub="Utu Grip",
  105. ammo="Ginsen",
  106. head="Sulevia's Mask +2",
  107. neck="Loricate Torque +1",
  108. ear1="Brutal Earring",
  109. ear2="Cessance Earring",
  110. body="Sulevia's Plate. +1",
  111. hands="Sulev. Gauntlets +2",
  112. ring1="Defending Ring",
  113. ring2="Moonlight Ring",
  114. back=Ankou.DA,
  115. waist="Flume Belt +1",
  116. legs="Carmine Cuisses +1",
  117. feet="Sulev. Leggings +2"
  118. }
  119.  
  120. sets.Kiting = {legs="Carmine Cuisses +1"}
  121.  
  122. -- Defense sets
  123. sets.DT_Base = { -- 39
  124. head="Sulevia's Mask +2", -- 6
  125. neck="Loricate Torque +1", -- 6
  126. hands="Sulev. Gauntlets +2", -- 5
  127. ring1="Defending Ring", -- 10
  128. ring2="Moonlight Ring", -- 5
  129. back=Ankou.DA, -- [10]
  130. legs="Sulev. Cuisses +2" -- 7
  131. }
  132.  
  133. sets.defense.PDT = set_combine(sets.DT_Base, {body="Sulevia's Plate. +1", feet="Sulev. Leggings +2"}) -- 50
  134. sets.defense.MDT = sets.defense.PDT
  135.  
  136. -- Engaged sets
  137. sets.engaged = set_combine(sets.idle, {
  138. head="Flam. Zucchetto +2",
  139. neck="Abyssal Beads +1",
  140. body=Valorous.Body.DA,
  141. hands="Flam. Manopolas +2",
  142. ring1="Hetairoi Ring",
  143. ring2="Niqmaddu Ring",
  144. waist="Ioskeha Belt +1",
  145. legs=Odyssean.Legs.DA,
  146. feet="Flam. Gambieras +2"
  147. })
  148.  
  149. sets.engaged.Acc = set_combine(sets.engaged, { -- 86 (1236)
  150. ammo="Seeth. Bomblet +1", -- 8
  151. ear1="Telos Earring", -- 10
  152. body="Emicho Haubert +1", -- 23
  153. hands="Emi. Gauntlets +1", -- 8
  154. ring1="Flamma Ring", -- 12
  155. legs="Flamma Dirs +1" -- 25
  156. })
  157.  
  158. -- Weaponskill sets
  159. sets.precast.WS = set_combine(sets.engaged, {
  160. ammo="Knobkierrie",
  161. head=Odyssean.Head.WSD,
  162. ear1="Ishvara Earring",
  163. ear2="Brutal Earring",
  164. body="Ignominy Cuirass +3",
  165. hands=Odyssean.Hands.WSD,
  166. ring1="Regal Ring",
  167. back=Ankou.WSD,
  168. legs="Fall. Flanchard +3",
  169. feet="Sulev. Leggings +2"
  170. })
  171.  
  172. sets.precast.WS.Acc = set_combine(sets.precast.WS, { -- 106 (1175)
  173. head="Flam. Zucchetto +2", -- 21
  174. ear1="Telos Earring", -- 10
  175. ear2="Ishvara Earring",
  176. hands="Emi. Gauntlets +1" -- 46
  177. })
  178.  
  179. sets.precast.WS['Resolution'] = set_combine(sets.precast.WS, {
  180. head="Flam. Zucchetto +2",
  181. ear1="Brutal Earring",
  182. ear2="Ishvara Earring",
  183. hands="Sulev. Gauntlets +2",
  184. waist="Soil Belt",
  185. feet="Flam. Gambieras +2"
  186. })
  187.  
  188. sets.precast.WS['Resolution'].Acc = set_combine(sets.precast.WS.Acc, {
  189. ear2="Brutal Earring",
  190. hands="Sulev. Gauntlets +2",
  191. waist="Soil Belt",
  192. feet="Flam. Gambieras +2"
  193. })
  194.  
  195. sets.precast.WS['Torcleaver'] = set_combine(sets.precast.WS, {waist="Light Belt"})
  196. sets.precast.WS['Torcleaver'].Acc = set_combine(sets.precast.WS.Acc, {waist="Light Belt"})
  197. end
  198.  
  199. -------------------------------------------------------------------------------------------------------------------
  200. -- Job-specific hooks for standard casting events.
  201. -------------------------------------------------------------------------------------------------------------------
  202.  
  203. function job_precast(spell, action, spellMap, eventArgs)
  204. if spell.type == 'WeaponSkill' and range_check(spell) then
  205. print_message('Canceled %s (Too Far)':format(spell.name), 167)
  206. eventArgs.cancel = true
  207. end
  208.  
  209. if spell.name == 'Torcleaver' and dynamis_zone() then
  210. eventArgs.handled = true
  211. end
  212. end
  213.  
  214. function job_post_precast(spell, action, spellMap, eventArgs)
  215. if spell.type == 'WeaponSkill' and moonshade_ws(spell) then
  216. equip({ear2="Moonshade Earring"})
  217. end
  218. end
  219.  
  220. function job_post_midcast(spell, action, spellMap, eventArgs)
  221. if spell.name == 'Drain III' then
  222. if buffactive['Dark Seal'] then
  223. if buffactive['Nether Void'] and player.tp < 600 and not buffactive['Aftermath: Lv.3'] then
  224. equip({main="Dacnomania"})
  225. end
  226. equip({head="Fall. Burgeonet +1"})
  227. end
  228. end
  229. end
  230.  
  231. function job_aftercast(spell, action, spellMap, eventArgs)
  232. if not buffactive['Last Resort'] then
  233. if windower.ffxi.get_ability_recasts()[87] == 0 and spell.name ~= 'Last Resort' then
  234. print_message('Last Resort is ready!', 167)
  235. elseif not buffactive.Hasso and spell.name ~= 'Hasso' and player.sub_job == 'SAM' then
  236. print_message('Hasso is inactive!', 167)
  237. end
  238. end
  239. end
  240.  
  241. -------------------------------------------------------------------------------------------------------------------
  242. -- Job-specific hooks for non-casting events.
  243. -------------------------------------------------------------------------------------------------------------------
  244.  
  245. function job_buff_change(buff, gain, eventArgs)
  246. local name = buff:lower()
  247.  
  248. if disables:contains(name) then
  249. if gain then
  250. equip(sets.defense.PDT)
  251. elseif not has_any_buff_of(disables) then
  252. handle_equipping_gear(player.status)
  253. end
  254. elseif name == 'aftermath: lv.3' then
  255. if gain then
  256. send_command('timers c "Aftermath: Lv.3" 180')
  257. print_message('==== Aftermath: Lv.3 Gained ====')
  258. end
  259. elseif name == 'blood weapon' then
  260. if not gain then
  261. enable('main')
  262. equip({main="Caladbolg"})
  263. send_command('cancel souleater')
  264. end
  265. elseif name == 'last resort' or name == 'hasso' then
  266. if not gain and not buffactive.Hasso then
  267. print_message('Hasso is inactive!', 167)
  268. end
  269. end
  270. end
  271.  
  272. function job_state_change(stateField, newValue, oldValue)
  273. update_display()
  274. end
  275.  
  276. -------------------------------------------------------------------------------------------------------------------
  277. -- User code that supplements standard library decisions.
  278. -------------------------------------------------------------------------------------------------------------------
  279.  
  280. function customize_melee_set(meleeSet)
  281. if buffactive['Blood Weapon'] and buffactive['Souleater'] and player.max_hp > 8000 then
  282. meleeSet = set_combine(meleeSet, {main="Dacnomania"})
  283. end
  284. if state.HybridMode.value == 'DT' then
  285. meleeSet = set_combine(meleeSet, sets.DT_Base)
  286. end
  287. if state.Kiting.value then
  288. meleeSet = set_combine(meleeSet, sets.Kiting)
  289. end
  290. return meleeSet
  291. end
  292.  
  293. function display_current_job_state(eventArgs)
  294. print_message('Refreshed gear.')
  295. eventArgs.handled = true
  296. end
  297.  
  298. -------------------------------------------------------------------------------------------------------------------
  299. -- User code that supplements self-commands.
  300. -------------------------------------------------------------------------------------------------------------------
  301.  
  302. function job_self_command(cmdParams, eventArgs)
  303. if cmdParams[1] == 'dac' then
  304. equip({main="Dacnomania"})
  305. disable('main')
  306. print_message('Locked %s %s':format('Dacnomania':color(258), 'to main.':color(207)))
  307. elseif cmdParams[1] == 'raetic' then
  308. equip({main="Raetic Algol +1"})
  309. disable('main')
  310. print_message('Locked %s %s':format('Raetic Algol +1':color(258), 'to main.':color(207)))
  311. elseif cmdParams[1] == 'dyna' then
  312. handle_equipping_gear(player.status)
  313. print_message('Forcing gear update.', 167)
  314. end
  315. end