Ballzack

BLM.lua

Jun 18th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.63 KB | None | 0 0
  1. -- Original: Motenten / Modified: Ballzack
  2.  
  3. -------------------------------------------------------------------------------------------------------------------
  4. -- Keybinds
  5. -------------------------------------------------------------------------------------------------------------------
  6.  
  7. -- Modes: [ F10 ] Emergency -PDT Mode
  8. -- [ ALT+F10 ] Toggle Kiting Mode
  9. -- [ F11 ] Emergency -MDT Mode
  10. -- [ CTRL+F11 ] Cycle Casting Modes
  11. -- [ F12 ] Update Current Gear / Report Current Status
  12. -- [ CTRL+F12 ] Cycle Idle Modes
  13. -- [ ALT+F12 ] Cancel Emergency -PDT/-MDT Mode
  14. -- [ ALT+` ] Toggle Magic Burst Mode
  15. -- [ WIN+D ] Toggle Death Casting Mode Toggle
  16. -- [ WIN+C ] Toggle Capacity Points Mode
  17. --
  18. -- Spells: [ CTRL+` ] Stun
  19. -- [ ALT+P ] Shock Spikes
  20. --
  21. -- Weapons: [ CTRL+W ] Toggles Weapon Lock
  22. --
  23. -- WS: [ Delete ] Myrkr
  24. --
  25. --
  26.  
  27.  
  28. -------------------------------------------------------------------------------------------------------------------
  29. -- Setup functions for this job. Generally should not be modified.
  30. -------------------------------------------------------------------------------------------------------------------
  31.  
  32. -- Initialization function for this job file.
  33. function get_sets()
  34. mote_include_version = 2
  35.  
  36. -- Load and initialize the include file.
  37. include('Mote-Include.lua')
  38. end
  39.  
  40.  
  41. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  42. function job_setup()
  43.  
  44. state.Staff = M{['description']='Current Staff', 'Lathi', 'Grioavolr'}
  45. --state.CP = M(false, "Capacity Points Mode")
  46. lockstyleset = 11
  47.  
  48. end
  49.  
  50. -------------------------------------------------------------------------------------------------------------------
  51. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  52. -------------------------------------------------------------------------------------------------------------------
  53.  
  54. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  55. function user_setup()
  56. state.CastingMode:options('Normal', 'Resistant', 'Occult')
  57. state.IdleMode:options('Normal', 'DT')
  58.  
  59. state.WeaponLock = M(false, 'Weapon Lock')
  60. state.MagicBurst = M(false, 'Magic Burst')
  61. state.DeathMode = M(false, 'Death Mode')
  62. state.ConsMP = M(false, 'AF Body')
  63.  
  64. lowTierNukes = S{'Stone', 'Water', 'Aero', 'Fire', 'Blizzard', 'Thunder'}
  65.  
  66. degrade_array = {
  67. ['Fire'] = {'Fire','Fire II','Fire III','Fire IV','Fire V','Fire VI'},
  68. ['Firega'] = {'Firaga','Firaga II','Firaga III','Firaja'},
  69. ['Ice'] = {'Blizzard','Blizzard II','Blizzard III','Blizzard IV','Blizzard V','Blizzard VI'},
  70. ['Icega'] = {'Blizzaga','Blizzaga II','Blizzaga III','Blizzaja'},
  71. ['Wind'] = {'Aero','Aero II','Aero III','Aero IV','Aero V','Aero VI'},
  72. ['Windga'] = {'Aeroga','Aeroga II','Aeroga III','Aeroja'},
  73. ['Earth'] = {'Stone','Stone II','Stone III','Stone IV','Stone V','Stone VI'},
  74. ['Earthga'] = {'Stonega','Stonega II','Stonega III','Stoneja'},
  75. ['Lightning'] = {'Thunder','Thunder II','Thunder III','Thunder IV','Thunder V','Thunder VI'},
  76. ['Lightningga'] = {'Thundaga','Thundaga II','Thundaga III','Thundaja'},
  77. ['Water'] = {'Water', 'Water II','Water III', 'Water IV','Water V','Water VI'},
  78. ['Waterga'] = {'Waterga','Waterga II','Waterga III','Waterja'},
  79. ['Aspirs'] = {'Aspir','Aspir II','Aspir III'},
  80. ['Sleepgas'] = {'Sleepga','Sleepga II'}
  81. }
  82.  
  83. send_command('bind ^` input /ma Stun <t>; wait 0.5; input /p Stun (ใ‚นใ‚ฟใƒณ) <t>')
  84. send_command('bind !` gs c toggle MagicBurst')
  85. send_command('bind ^= gs c toggle ConsMP')
  86. --send_command('bind !p input /ma "Shock Spikes" <me>')
  87. send_command('bind @d gs c toggle DeathMode')
  88. --send_command('bind @c gs c toggle CP')
  89. send_command('bind @w gs c toggle WeaponLock')
  90. send_command('bind delete input /ja "Myrkr"')
  91. send_command('bind @s gs c cycle Staff')
  92.  
  93. select_default_macro_book()
  94. set_lockstyle()
  95. end
  96.  
  97. -- Called when this job file is unloaded (eg: job change)
  98. function user_unload()
  99. send_command('unbind ^`')
  100. send_command('unbind !`')
  101. send_command('unbind ^=')
  102. --send_command('unbind !p')
  103. send_command('unbind @d')
  104. send_command('unbind @c')
  105. send_command('unbind @w')
  106. send_command('unbind delete')
  107. send_command('unbind @s')
  108. end
  109.  
  110.  
  111. -- Define sets and vars used by this job file.
  112. function init_gear_sets()
  113. include('augmented-items.lua')
  114. --------------------------------------
  115. -- Start defining the sets
  116. --------------------------------------
  117.  
  118. ---- Precast Sets ----
  119.  
  120. -- Precast sets to enhance JAs
  121. sets.precast.JA['Mana Wall'] = {
  122. back=TaranusINT,
  123. feet="Wicce Sabots +1"}
  124.  
  125. sets.precast.JA.Manafont = {body="Arch. Coat +1"}
  126.  
  127. -- Fast cast sets for spells
  128. -- FC +69%, Quick Magic +9%
  129. -- /RDM --15 /SCH --2
  130. sets.precast.FC = {
  131. ammo="Sapience Orb", -- 2%
  132. head=MerlinicHoodFC, -- 14%
  133. neck="Orunmila's Torque", -- 5%
  134. ear1="Loquac. Earring", -- 2%
  135. ear2="Enchntr. Earring +1", -- 2%
  136. body="Zendik Robe", -- 13%
  137. hands=MerlinicDastanasFC, -- 6%
  138. ring1="Lebeche Ring",
  139. ring2="Kishar Ring", -- 4%
  140. back="Perimede Cape",
  141. waist="Witful Belt", -- 3%
  142. legs="Psycloth Lappas", -- 7%
  143. feet=MerlinicCrackowsFC} -- 11%}
  144.  
  145. sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  146.  
  147. sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {ear2="Barkaro. Earring"})
  148.  
  149. sets.precast.FC.Cure = set_combine(sets.precast.FC, {ear1="Mendi. Earring"})
  150.  
  151. sets.precast.FC.Curaga = sets.precast.FC.Cure
  152. sets.precast.FC.Impact = set_combine(sets.precast.FC, {head=empty, body="Twilight Cloak"})
  153. sets.precast.Storm = set_combine(sets.precast.FC, {ring1="Prolix Ring"}) -- stop quick cast
  154.  
  155. sets.precast.FC.DeathMode = {
  156. ammo="Psilomene",
  157. head={name="Amalric Coif +1",priority=11},
  158. neck={name="Orunmila's Torque",priority=1},
  159. ear1={name="Loquac. Earring",priority=2},
  160. ear2={name="Etiolation Earring",priority=3},
  161. body={name="Zendik Robe",priority=4},
  162. hands={name="Helios Gloves",priority=6},
  163. ring1={name="Mephitas's Ring +1",priority=8},
  164. ring2={name="Mephitas's Ring",priority=7},
  165. back={name="Taranus's Cape", augments={'MP+60','Eva.+20 /Mag. Eva.+20','MP+20','"Fast Cast"+10',},priority=5},
  166. waist="Witful Belt",
  167. legs={name="Psycloth Lappas",priority=10},
  168. feet={name="Amalric Nails +1",priority=9}}
  169.  
  170. sets.precast.FC.Impact.DeathMode = set_combine(sets.precast.FC.DeathMode, {head=empty, body="Twilight Cloak"})
  171.  
  172. -- Weaponskill sets
  173.  
  174. -- Default set for any weaponskill that isn't any more specifically defined
  175. sets.precast.WS = {
  176. ammo="Floestone",
  177. head="Jhakri Coronal +2",
  178. neck="Fotia Gorget",
  179. ear1="Moonshade Earring",
  180. ear2="Telos Earring",
  181. body="Jhakri Robe +2",
  182. hands="Jhakri Cuffs +2",
  183. ring1="",
  184. ring2="",
  185. back="",
  186. waist="Fotia Belt",
  187. legs="Telchine Braconi",
  188. feet="Jhakri Pigaches +2"}
  189.  
  190. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  191.  
  192. sets.precast.WS['Vidohunir'] = {
  193. head="Pixie Hairpin +1",
  194. neck="Baetyl Pendant",
  195. ear1="Barkaro. Earring",
  196. ear2="Moonshade Earring",
  197. body="Amalric Doublet +1",
  198. hands="Amalric Gages +1",
  199. ring1="Shiva Ring +1",
  200. ring2="Archon Ring",
  201. back=TaranusINT,
  202. waist="Yamabuki-no-Obi",
  203. legs="Amalric Slops +1",
  204. feet="Merlinic Crackows"} -- INT
  205.  
  206. sets.precast.WS['Myrkr'] = {
  207. ammo="Psilomene",
  208. head="Kaabnax Hat",
  209. neck="Dualism Collar +1",
  210. ear1="Etiolation Earring",
  211. ear2="Influx Earring",
  212. body="Weather. Robe +1",
  213. hands="Otomi Gloves",
  214. ring1="Mephitas's Ring +1",
  215. ring2="Mephitas's Ring",
  216. back="Bane Cape",
  217. waist="Shinjutsu-no-Obi +1",
  218. legs="Amalric Slops +1",
  219. feet="Psycloth Boots"} -- Max MP
  220.  
  221. ---- Midcast Sets ----
  222.  
  223. sets.midcast.FastRecast = {
  224. head="Amalric Coif +1",
  225. ear1="Etiolation Earring",
  226. ear2="Loquacious Earring",
  227. hands="Merlinic Dastanas",
  228. ring1="Kishar Ring",
  229. ring2="Prolix Ring",
  230. waist="Witful Belt",
  231. legs="Psycloth Lappas"} -- Haste
  232.  
  233. sets.midcast.Cure = {
  234. ammo="Hydrocera",
  235. head="Vanya Hood",
  236. neck="Incanter's Torque",
  237. ear1="Healing Earring",
  238. ear2="Beatific Earring",
  239. body="Vanya Robe",
  240. hands="Telchine Gloves",
  241. ring1="Stikini Ring +1",
  242. ring2="Sirona's Ring",
  243. back="Tempered Cape +1",
  244. waist="Bishop's Sash",
  245. legs="Vanya Slops",
  246. feet="Vanya Clogs"}
  247.  
  248. sets.midcast.Curaga = set_combine(sets.midcast.Cure, {
  249. ring1="Stikini Ring +1",
  250. ring2="Stikini Ring +1",
  251. waist="Luminary Sash"})
  252.  
  253. sets.midcast.Cursna = set_combine(sets.midcast.Cure,{
  254. ammo="Sapience Orb",
  255. hands=MerlinicDastanasFC})
  256.  
  257. sets.midcast['Enhancing Magic'] = {
  258. main="Gada",
  259. sub="Ammurapi Shield",
  260. head="Befouled Crown",
  261. neck="Incanter's Torque",
  262. ear1="Andoaa Earring",
  263. ear2="Augment. Earring",
  264. body="Telchine Chas.",
  265. ring1="Stikini Ring +1",
  266. ring2="Stikini Ring +1",
  267. back="Perimede Cape",
  268. waist="Olympus Sash"}
  269.  
  270. sets.midcast.EnhancingDuration = {
  271. main="Gada",
  272. sub="Ammurapi Shield",
  273. head="Telchine Cap",
  274. body="Telchine Chas.",
  275. hands="Telchine Gloves",
  276. legs="Telchine Braconi",
  277. feet="Telchine Pigaches"}
  278.  
  279. sets.midcast.Regen = set_combine(sets.midcast['Enhancing Magic'], {
  280. sub="Ammurapi Shield",
  281. body="Telchine Chas."})
  282.  
  283. sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {
  284. head="Amalric Coif +1",
  285. waist="Gishdubar Sash"})
  286.  
  287. sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {waist="Siegel Sash"})
  288.  
  289. sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {
  290. main="Vadose Rod",
  291. head="Amalric Coif +1",
  292. waist="Emphatikos Rope"})
  293.  
  294. sets.midcast.MndEnfeebles = {
  295. ammo="Hydrocera",
  296. head="Befouled Crown",
  297. neck="Incanter's Torque",
  298. ear1="Digni. Earring",
  299. ear2="Regal Earring",
  300. body="Spaekona's Coat +3",
  301. hands="Jhakri Cuffs +2",
  302. ring1="Stikini Ring +1",
  303. ring2="Kishar Ring",
  304. back=TaranusINT,
  305. waist="Luminary Sash",
  306. legs="Psycloth Lappas",
  307. feet="Medium's Sabots"} -- MND/Magic accuracy
  308.  
  309. sets.midcast.IntEnfeebles = set_combine(sets.midcast.MndEnfeebles, {
  310. ammo="Pemphredo Tathlum"}) -- INT/Magic accuracy
  311.  
  312. sets.midcast.ElementalEnfeeble = sets.midcast.IntEnfeebles
  313.  
  314. sets.midcast['Dark Magic'] = {
  315. ammo="Pemphredo Tathlum",
  316. head=MerlinicHoodBurst,
  317. neck="Erra Pendant",
  318. ear1="Digni. Earring",
  319. ear2="Barkaro. Earring",
  320. body="Shango Robe",
  321. hands="Jhakri Cuffs +2",
  322. ring1="Stikini Ring +1",
  323. ring2="Evanescence Ring",
  324. back="Bane Cape",
  325. waist="Luminary Sash",
  326. legs=MerlinicShalwarNuke,
  327. feet="Wicce Sabots +1"}
  328.  
  329. sets.midcast.Drain = set_combine(sets.midcast['Dark Magic'], {
  330. head="Pixie Hairpin +1",
  331. ear1="Hirudinea Earring",
  332. hands=MerlinicDastanasDrainAspir,
  333. ring1="Archon Ring",
  334. back=TaranusINT,
  335. waist="Fucho-no-Obi",
  336. feet=MerlinicCrackowsDrainAspir})
  337.  
  338. sets.midcast.Aspir = sets.midcast.Drain
  339.  
  340. sets.midcast.Stun = set_combine(sets.midcast['Dark Magic'], {back=TaranusINT})
  341.  
  342. sets.midcast.Death = {
  343. ammo="Psilomene",
  344. head="Pixie Hairpin +1",
  345. neck="Mizu. Kubikazari",
  346. ear1="Static Earring",
  347. ear2="Barkaro. Earring",
  348. body="Amalric Doublet +1",
  349. hands="Amalric Gages +1",
  350. ring1="Mephitas's Ring +1",
  351. ring2="Archon Ring",
  352. back=TaranusMP,
  353. waist="Hachirin-no-Obi",
  354. legs="Amalric Slops +1",
  355. feet="Amalric Nails +1"}
  356.  
  357. sets.midcast.Death.Resistant = set_combine(sets.midcast.Death, {
  358. ammo="Elis Tome"})
  359.  
  360. sets.midcast.Death.Aspir = {
  361. ammo="Hydrocera",
  362. head="Pixie Hairpin +1",
  363. neck="Incanter's Torque",
  364. ear1="Gwati Earring",
  365. ear2="Barkaro. Earring",
  366. body=MerlinicJubbahBurst,
  367. hands="Amalric Gages +1",
  368. ring1="Evanescence Ring",
  369. ring2="Mephitas's Ring +1",
  370. back="Bane Cape",
  371. waist="Fucho-no-Obi",
  372. legs="Amalric Slops +1",
  373. feet=MerlinicCrackowsDrainAspir}
  374.  
  375. sets.midcast.Death.Aspir.Resistant = set_combine(sets.midcast.Death.Aspir,{})
  376.  
  377. sets.midcast.Death.Occult = set_combine(sets.midcast.Death, {
  378. ammo="Seraphic Ampulla",
  379. head="Mall. Chapeau +2",
  380. neck="Combatant's Torque",
  381. ear1="Telos Earring",
  382. ear2="Dedition Earring",
  383. body="Helios Jacket",
  384. hands="Helios Gloves",
  385. ring1="Chirich Ring +1",
  386. ring2="Chirich Ring +1",
  387. back=TaranusINT,
  388. waist="Oneiros Rope",
  389. legs="Perdition Slops",
  390. feet="Helios Boots"})
  391.  
  392. -- Elemental Magic sets --
  393.  
  394. sets.midcast['Elemental Magic'] = {
  395. ammo="Pemphredo Tathlum",
  396. head=MerlinicHoodBurst,
  397. neck="Saevus Pendant +1",
  398. ear1="Regal Earring",
  399. ear2="Barkaro. Earring",
  400. body=MerlinicJubbahBurst,
  401. hands="Amalric Gages +1",
  402. ring1="Shiva Ring +1",
  403. ring2="Shiva Ring +1",
  404. back=TaranusINT,
  405. waist="Refoccilation Stone",
  406. legs="Amalric Slops +1",
  407. feet="Amalric Nails +1"}
  408.  
  409. sets.midcast['Elemental Magic'].DeathMode = set_combine(sets.midcast['Elemental Magic'], {})
  410.  
  411. sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'], {
  412. neck="Sanctity Necklace",
  413. body=MerlinicJubbahBurst,
  414. waist="Eschan Stone",
  415. legs=MerlinicShalwarNuke,
  416. feet=MerlinicCrackowsNuke})
  417.  
  418. sets.midcast['Elemental Magic'].Occult = set_combine(sets.midcast['Elemental Magic'], {
  419. ammo="Seraphic Ampulla",
  420. head="Mall. Chapeau +2",
  421. neck="Combatant's Torque",
  422. ear1="Telos Earring",
  423. ear2="Dedition Earring",
  424. body="Helios Jacket",
  425. hands="Helios Gloves",
  426. ring1="Chirich Ring +1",
  427. ring2="Chirich Ring +1",
  428. back=TaranusINT,
  429. waist="Oneiros Rope",
  430. legs="Perdition Slops",
  431. feet="Helios Boots"})
  432.  
  433. sets.midcast.Impact = set_combine(sets.midcast['Elemental Magic'], {
  434. head=empty,
  435. body="Twilight Cloak",
  436. ring2="Archon Ring"})
  437.  
  438. sets.midcast.Impact.Resistant = set_combine(sets.midcast['Elemental Magic'].Resistant, {
  439. head=empty,
  440. body="Twilight Cloak"})
  441.  
  442. sets.midcast.Impact.Occult = set_combine(sets.midcast.Impact, {
  443. ammo="Seraphic Ampulla",
  444. neck="Combatant's Torque",
  445. ear1="Telos Earring",
  446. ear2="Dedition Earring",
  447. body="Twilight Cloak",
  448. hands="Helios Gloves",
  449. ring1="Chirich Ring +1",
  450. ring2="Chirich Ring +1",
  451. back=TaranusINT,
  452. waist="Oneiros Rope",
  453. legs="Perdition Slops",
  454. feet="Helios Boots"})
  455.  
  456. -- Initializes trusts at iLvl 119
  457. sets.midcast.Trust = sets.precast.FC
  458.  
  459. -- Idle Sets --
  460.  
  461. sets.idle = {
  462. ammo="Staunch Tathlum +1",
  463. head="Befouled Crown",
  464. neck="Loricate Torque +1",
  465. ear1="Lugalbanda Earring",
  466. ear2="Hearty Earring",
  467. body="Jhakri Robe +2",
  468. hands=MerlinicDastanasDT,
  469. ring1="Stikini Ring +1",
  470. ring2="Stikini Ring +1",
  471. back="Moonlight Cape",
  472. waist="Slipor Sash",
  473. legs="Assid. Pants +1",
  474. feet="Herald's Gaiters"}
  475.  
  476. sets.idle.DT = set_combine(sets.idle, {
  477. head=MerlinicHoodDT,
  478. body="Mallquis Saio +2",
  479. ring1="Gelatinous Ring +1",
  480. ring2="Defending Ring",
  481. legs=MerlinicShalwarDT,
  482. feet="Hag. Sabots +1"})
  483.  
  484. sets.idle.ManaWall = {
  485. back=TaranusINT,
  486. feet="Wicce Sabots +1"}
  487.  
  488. sets.idle.DeathMode = {
  489. ammo="Psilomene",
  490. head="Amalric Coif +1",
  491. neck="Loricate Torque +1",
  492. ear1="Etiolation Earring",
  493. ear2="Barkaro. Earring",
  494. body="Amalric Doublet +1",
  495. hands="Amalric Gages +1",
  496. ring1="Defending Ring",
  497. ring2="Mephitas's Ring",
  498. back="Bane Cape",
  499. waist="Slipor Sash",
  500. legs="Amalric Slops +1",
  501. feet="Amalric Nails +1"}
  502.  
  503. sets.idle.Weak = sets.idle.DT
  504.  
  505. -- Defense sets
  506.  
  507. sets.defense.PDT = sets.idle.DT
  508. sets.defense.MDT = sets.idle.DT
  509.  
  510. sets.Kiting = {feet="Herald's Gaiters"}
  511. sets.latent_refresh = {waist="Fucho-no-obi"}
  512. --sets.latent_dt = {ear2="Sorcerer's Earring"}
  513.  
  514. sets.magic_burst = {
  515. head=MerlinicHoodBurst,
  516. neck="Mizu. Kubikazari",
  517. body=MerlinicJubbahBurst,
  518. ring2="Mujin Band",
  519. back=TaranusINT,
  520. feet=MerlinicCrackowsBurst}
  521.  
  522. sets.magic_burst.Resistant = set_combine(sets.magic_burst,{})
  523.  
  524. -- Engaged sets
  525.  
  526. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  527. -- sets if more refined versions aren't defined.
  528. -- If you create a set with both offense and defense modes, the offense mode should be first.
  529. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  530.  
  531. -- Normal melee group
  532.  
  533. sets.engaged = {}
  534.  
  535. sets.buff.Doom = {ring1="Eshmun's Ring", ring2="Eshmun's Ring", waist="Gishdubar Sash"}
  536.  
  537. sets.DarkAffinity = {head="Pixie Hairpin +1",ring2="Archon Ring"}
  538. sets.ConsMP = {body="Spaekona's Coat +3"}
  539. sets.Obi = {waist="Hachirin-no-Obi"}
  540. --sets.CP = {back="Mecisto. Mantle"}
  541.  
  542. end
  543.  
  544. -------------------------------------------------------------------------------------------------------------------
  545. -- Job-specific hooks for standard casting events.
  546. -------------------------------------------------------------------------------------------------------------------
  547. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  548. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  549. function job_precast(spell, action, spellMap, eventArgs)
  550. if spell.action_type == 'Magic' and state.DeathMode.value then
  551. eventArgs.handled = true
  552. equip(sets.precast.FC.DeathMode)
  553. if spell.english == "Impact" then
  554. equip(sets.precast.FC.Impact.DeathMode)
  555. end
  556. end
  557.  
  558. if buffactive['Mana Wall'] then
  559. equip(sets.precast.JA['Mana Wall'])
  560. end
  561. if spell.type == 'BlackMagic' and spell.target.type == 'MONSTER' then
  562. refine_various_spells(spell, action, spellMap, eventArgs)
  563. end
  564. end
  565.  
  566. function job_post_precast(spell, action, spellMap, eventArgs)
  567. if spell.name == 'Impact' then
  568. equip(sets.precast.FC.Impact)
  569. end
  570. end
  571.  
  572. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  573. function job_midcast(spell, action, spellMap, eventArgs)
  574. if spell.action_type == 'Magic' and state.DeathMode.value then
  575. eventArgs.handled = true
  576. if spell.skill == 'Elemental Magic' then
  577. equip(sets.midcast['Elemental Magic'].DeathMode)
  578. else
  579. if state.CastingMode.value == "Resistant" then
  580. equip(sets.midcast.Death.Resistant)
  581. else
  582. equip(sets.midcast.Death)
  583. end
  584. end
  585. end
  586. if spell.action_type == 'Magic' and state.DeathMode.value then
  587. eventArgs.handled = true
  588. if S{"Aspir", "Aspir II", "Aspir III"}:contains(spell.english) then
  589. if state.CastingMode.value == "Resistant" then
  590. equip(sets.midcast.Death.Aspir.Resistant)
  591. else
  592. equip(sets.midcast.Death.Aspir)
  593. end
  594. end
  595. end
  596. if buffactive['Mana Wall'] then
  597. equip(sets.precast.JA['Mana Wall'])
  598. end
  599. end
  600.  
  601. function job_post_midcast(spell, action, spellMap, eventArgs)
  602. if spell.skill == 'Enhancing Magic' and classes.NoSkillSpells:contains(spell.english) and not state.DeathMode.value then
  603. equip(sets.midcast.EnhancingDuration)
  604. if spellMap == 'Refresh' then
  605. equip(sets.midcast.Refresh)
  606. end
  607. end
  608. if spell.skill == 'Elemental Magic' and spell.english == "Comet" then
  609. equip(sets.DarkAffinity)
  610. end
  611. if spell.skill == 'Elemental Magic' then
  612. if state.MagicBurst.value and spell.english ~= 'Death' then
  613. --if state.CastingMode.value == "Resistant" then
  614. --equip(sets.magic_burst.Resistant)
  615. --else
  616. equip(sets.magic_burst)
  617. --end
  618. if spell.english == "Impact" then
  619. equip(sets.midcast.Impact)
  620. end
  621. end
  622. if (spell.element == world.day_element or spell.element == world.weather_element) then
  623. equip(sets.Obi)
  624. end
  625. if spell.skill == 'Elemental Magic' and state.ConsMP.value then
  626. equip(sets.ConsMP)
  627. end
  628. end
  629. if buffactive['Mana Wall'] then
  630. equip(sets.precast.JA['Mana Wall'])
  631. end
  632. end
  633.  
  634. function job_aftercast(spell, action, spellMap, eventArgs)
  635. if not spell.interrupted then
  636. if spell.english == "Sleep II" or spell.english == "Sleepga II" then
  637. send_command('@timers c "Sleep II ['..spell.target.name..']" 90 down spells/00259.png')
  638. elseif spell.english == "Sleep" or spell.english == "Sleepga" then -- Sleep & Sleepga Countdown --
  639. send_command('@timers c "Sleep ['..spell.target.name..']" 60 down spells/00253.png')
  640. elseif spell.english == "Break" or spell.english == "Breakga" then
  641. send_command('@timers c "Break ['..spell.target.name..']" 30 down spells/00255.png')
  642. end
  643. end
  644. end
  645.  
  646. -------------------------------------------------------------------------------------------------------------------
  647. -- Job-specific hooks for non-casting events.
  648. -------------------------------------------------------------------------------------------------------------------
  649.  
  650. -- Called when a player gains or loses a buff.
  651. -- buff == buff gained or lost
  652. -- gain == true if the buff was gained, false if it was lost.
  653. function job_buff_change(buff, gain)
  654. -- Unlock armor when Mana Wall buff is lost.
  655. if buff== "Mana Wall" then
  656. if gain then
  657. --send_command('gs enable all')
  658. equip(sets.precast.JA['Mana Wall'])
  659. --send_command('gs disable all')
  660. else
  661. --send_command('gs enable all')
  662. handle_equipping_gear(player.status)
  663. end
  664. end
  665.  
  666. if buff == "doom" then
  667. if gain then
  668. equip(sets.buff.Doom)
  669. disable('ring1','ring2','waist')
  670. else
  671. enable('ring1','ring2','waist')
  672. handle_equipping_gear(player.status)
  673. end
  674. end
  675.  
  676. end
  677.  
  678. -- Handle notifications of general user state change.
  679. function job_state_change(stateField, newValue, oldValue)
  680. if state.WeaponLock.value == true then
  681. disable('main','sub')
  682. else
  683. enable('main','sub')
  684. end
  685. end
  686.  
  687. -- latent DT set auto equip on HP% change
  688. --windower.register_event('hpp change', function(new, old)
  689. --if new<=25 then
  690. --equip(sets.latent_dt)
  691. --end
  692. --end)
  693.  
  694.  
  695. -------------------------------------------------------------------------------------------------------------------
  696. -- User code that supplements standard library decisions.
  697. -------------------------------------------------------------------------------------------------------------------
  698.  
  699. -- Custom spell mapping.
  700. function job_get_spell_map(spell, default_spell_map)
  701. if spell.action_type == 'Magic' then
  702. if spell.skill == "Enfeebling Magic" then
  703. if spell.type == "WhiteMagic" then
  704. return "MndEnfeebles"
  705. else
  706. return "IntEnfeebles"
  707. end
  708. end
  709. end
  710. end
  711.  
  712. -- Modify the default idle set after it was constructed.
  713. function customize_idle_set(idleSet)
  714. if state.DeathMode.value then
  715. idleSet = sets.idle.DeathMode
  716. end
  717. if state.Staff.current == 'Lathi' then
  718. equip({main="Lathi",sub="Enki Strap"})
  719. elseif state.Staff.current == 'Grioavolr' then
  720. equip({main="Grioavolr",sub="Enki Strap"})
  721. end
  722. if player.mpp < 51 then
  723. idleSet = set_combine(idleSet, sets.latent_refresh)
  724. end
  725. --if player.hpp <= 25 then
  726. --idleSet = set_combine(idleSet, sets.latent_dt)
  727. --end
  728. --if state.CP.current == 'on' then
  729. --equip(sets.CP)
  730. --disable('back')
  731. --else
  732. --enable('back')
  733. --end
  734. if buffactive['Mana Wall'] then
  735. idleSet = set_combine(idleSet, sets.precast.JA['Mana Wall'])
  736. end
  737.  
  738. return idleSet
  739. end
  740.  
  741. -- Modify the default melee set after it was constructed.
  742. function customize_melee_set(meleeSet)
  743. if buffactive['Mana Wall'] then
  744. meleeSet = set_combine(meleeSet, sets.precast.JA['Mana Wall'])
  745. end
  746.  
  747. return meleeSet
  748. end
  749.  
  750. function customize_defense_set(defenseSet)
  751. if buffactive['Mana Wall'] then
  752. defenseSet = set_combine(defenseSet, sets.precast.JA['Mana Wall'])
  753. end
  754.  
  755. return defenseSet
  756. end
  757.  
  758.  
  759. function refine_various_spells(spell, action, spellMap, eventArgs)
  760. local aspirs = S{'Aspir','Aspir II','Aspir III'}
  761. local sleeps = S{'Sleep','Sleep II'}
  762. local sleepgas = S{'Sleepga','Sleepga II'}
  763.  
  764. local newSpell = spell.english
  765. local spell_recasts = windower.ffxi.get_spell_recasts()
  766. local cancelling = 'All '..spell.english..' spells are on cooldown. Cancelling spell casting.'
  767.  
  768. local spell_index
  769.  
  770. if spell_recasts[spell.recast_id] > 0 then
  771. if spell.skill == 'Elemental Magic' then
  772. local ele = tostring(spell.element):append('ga')
  773. --local ele2 = string.sub(ele,1,-2)
  774. if table.find(degrade_array[ele],spell.name) then
  775. spell_index = table.find(degrade_array[ele],spell.name)
  776. if spell_index > 1 then
  777. newSpell = degrade_array[ele][spell_index - 1]
  778. add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..newSpell..' instead.')
  779. send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
  780. eventArgs.cancel = true
  781. end
  782. else
  783. spell_index = table.find(degrade_array[spell.element],spell.name)
  784. if spell_index > 1 then
  785. newSpell = degrade_array[spell.element][spell_index - 1]
  786. add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..newSpell..' instead.')
  787. send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
  788. eventArgs.cancel = true
  789. end
  790. end
  791. elseif aspirs:contains(spell.name) then
  792. spell_index = table.find(degrade_array['Aspirs'],spell.name)
  793. if spell_index > 1 then
  794. newSpell = degrade_array['Aspirs'][spell_index - 1]
  795. add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..newSpell..' instead.')
  796. send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
  797. eventArgs.cancel = true
  798. end
  799. elseif sleepgas:contains(spell.name) then
  800. spell_index = table.find(degrade_array['Sleepgas'],spell.name)
  801. if spell_index > 1 then
  802. newSpell = degrade_array['Sleepgas'][spell_index - 1]
  803. add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..newSpell..' instead.')
  804. send_command('@input /ma '..newSpell..' '..tostring(spell.target.raw))
  805. eventArgs.cancel = true
  806. end
  807. end
  808. end
  809. end
  810.  
  811. function display_current_job_state(eventArgs)
  812. eventArgs.handled = true
  813. local msg = ''
  814.  
  815. msg = msg .. 'Casting ['..state.CastingMode.value..'], Idle ['..state.IdleMode.value..']'
  816.  
  817. if state.MagicBurst.value then
  818. msg = msg .. ', MB [ON]'
  819. else
  820. msg = msg .. ', MB [OFF]'
  821. end
  822. if state.ConsMP.value then
  823. msg = msg .. ', AF Body [ON]'
  824. else
  825. msg = msg .. ', AF Body [OFF]'
  826. end
  827. if state.DefenseMode.value ~= 'None' then
  828. msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  829. end
  830.  
  831. add_to_chat(122, msg)
  832. end
  833.  
  834.  
  835. -------------------------------------------------------------------------------------------------------------------
  836. -- Utility functions specific to this job.
  837. -------------------------------------------------------------------------------------------------------------------
  838.  
  839. -- Select default macro book on initial load or subjob change.
  840. function select_default_macro_book()
  841. set_macro_page(1, 8)
  842. end
  843. function set_lockstyle()
  844. send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  845. end
Add Comment
Please, Sign In to add comment