Ballzack

BLU.lua

Jun 18th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 46.49 KB | None | 0 0
  1. -- Original: Motenten / Modified: Ballzack
  2. -- Haste/DW Detection Requires Gearinfo Addon
  3.  
  4. -------------------------------------------------------------------------------------------------------------------
  5. -- Keybinds
  6. -------------------------------------------------------------------------------------------------------------------
  7.  
  8. -- Modes: [ F9 ] Cycle Offense Modes
  9. -- [ CTRL+F9 ] Cycle Hybrid Modes
  10. -- [ WIN+F9 ] Cycle Weapon Skill Modes
  11. -- [ F10 ] Emergency -PDT Mode
  12. -- [ ALT+F10 ] Toggle Kiting Mode
  13. -- [ F11 ] Emergency -MDT Mode
  14. -- [ F12 ] Update Current Gear / Report Current Status
  15. -- [ CTRL+F12 ] Cycle Idle Modes
  16. -- [ ALT+F12 ] Cancel Emergency -PDT/-MDT Mode
  17. -- [ WIN+C ] Toggle Capacity Points Mode
  18. --
  19. -- Abilities: [ ] Chain Affinity
  20. -- [ ] Burst Affinity
  21. -- [ ] Efflux
  22. -- [ ] Diffusion
  23. -- [ ] Unbridled Learning
  24. -- [ CTRL+B ] Berserk
  25. -- [ CTRL+W ] Warcry
  26. -- [ CTRL+A ] Aggressor
  27. -- [ WIN+` ] Provoke
  28. --
  29. -- Spells: [ ] Blank Gaze
  30. -- [ WIN+N ] Nature's Meditation/Fantod
  31. -- [ WIN+C ] Cocoon/Reactor Cool
  32. -- [ WIN+E ] Erratic Flutter
  33. -- [ WIN+R ] Battery Charge/Refresh
  34. -- [ WIN+O ] Occultation
  35. -- [ WIN+B ] Barrier Tusk/Phalanx
  36. -- [ WIN+D ] Diamondhide/Stoneskin
  37. -- [ WIN+M ] Mighty Guard/Carcharian Verve
  38. -- [ ] Utsusemi: Ichi
  39. -- [ ] Utsusemi: Ni
  40. --
  41. -- WS: [ Home ] Savage Blade
  42. -- [ Delete ] Chant Du Cygne
  43. -- [ End ] Sanguine Blade
  44. --
  45. --
  46.  
  47.  
  48. --------------------------------------------------------------------------------------------------------------------
  49. -- Setup functions for this job. Generally should not be modified.
  50. -------------------------------------------------------------------------------------------------------------------
  51.  
  52. -- Initialization function for this job file.
  53. function get_sets()
  54. mote_include_version = 2
  55.  
  56. -- Load and initialize the include file.
  57. include('Mote-Include.lua')
  58. end
  59.  
  60. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  61. function job_setup()
  62. state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
  63. state.Buff['Chain Affinity'] = buffactive['Chain Affinity'] or false
  64. state.Buff.Convergence = buffactive.Convergence or false
  65. state.Buff.Diffusion = buffactive.Diffusion or false
  66. state.Buff.Efflux = buffactive.Efflux or false
  67.  
  68. state.Buff['Unbridled Learning'] = buffactive['Unbridled Learning'] or false
  69. blue_magic_maps = {}
  70.  
  71. -- Mappings for gear sets to use for various blue magic spells.
  72. -- While Str isn't listed for each, it's generally assumed as being at least
  73. -- moderately signficant, even for spells with other mods.
  74.  
  75. -- Physical spells with no particular (or known) stat mods
  76. blue_magic_maps.Physical = S{'Bilgestorm'}
  77.  
  78. -- Spells with heavy accuracy penalties, that need to prioritize accuracy first.
  79. blue_magic_maps.PhysicalAcc = S{'Heavy Strike'}
  80.  
  81. -- Physical spells with Str stat mod
  82. blue_magic_maps.PhysicalStr = S{'Battle Dance','Bloodrake','Death Scissors','Dimensional Death',
  83. 'Empty Thrash','Quadrastrike','Saurian Slide','Sinker Drill','Spinal Cleave','Sweeping Gouge',
  84. 'Uppercut','Vertical Cleave'}
  85.  
  86. -- Physical spells with Dex stat mod
  87. blue_magic_maps.PhysicalDex = S{'Amorphic Spikes','Asuran Claws','Barbed Crescent','Claw Cyclone',
  88. 'Disseverment','Foot Kick','Frenetic Rip','Goblin Rush','Hysteric Barrage','Paralyzing Triad',
  89. 'Seedspray','Sickle Slash','Smite of Rage','Terror Touch','Thrashing Assault','Vanity Dive'}
  90.  
  91. -- Physical spells with Vit stat mod
  92. blue_magic_maps.PhysicalVit = S{'Body Slam','Cannonball','Delta Thrust','Glutinous Dart','Grand Slam',
  93. 'Power Attack','Quad. Continuum','Sprout Smack','Sub-zero Smash'}
  94.  
  95. -- Physical spells with Agi stat mod
  96. blue_magic_maps.PhysicalAgi = S{'Benthic Typhoon','Feather Storm','Helldive','Hydro Shot','Jet Stream',
  97. 'Pinecone Bomb','Spiral Spin','Wild Oats'}
  98.  
  99. -- Physical spells with Int stat mod
  100. blue_magic_maps.PhysicalInt = S{'Mandibular Bite','Queasyshroom'}
  101.  
  102. -- Physical spells with Mnd stat mod
  103. blue_magic_maps.PhysicalMnd = S{'Ram Charge','Screwdriver','Tourbillion'}
  104.  
  105. -- Physical spells with Chr stat mod
  106. blue_magic_maps.PhysicalChr = S{'Bludgeon'}
  107.  
  108. -- Physical spells with HP stat mod
  109. blue_magic_maps.PhysicalHP = S{'Final Sting'}
  110.  
  111. -- Magical spells with the typical Int mod
  112. blue_magic_maps.Magical = S{'Anvil Lightning','Blastbomb','Blazing Bound','Bomb Toss','Cursed Sphere',
  113. 'Droning Whirlwind','Embalming Earth','Entomb','Firespit','Foul Waters','Ice Break','Leafstorm',
  114. 'Maelstrom','Molting Plumage','Nectarous Deluge','Regurgitation','Rending Deluge','Scouring Spate',
  115. 'Silent Storm','Spectral Floe','Searing Tempest','Subduction','Tem. Upheaval','Water Bomb'}
  116.  
  117. blue_magic_maps.MagicalDark = S{'Dark Orb','Death Ray','Eyes On Me','Evryone. Grudge','Palling Salvo',
  118. 'Tenebral Crush'}
  119.  
  120. blue_magic_maps.MagicalLight = S{'Blinding Fulgor','Diffusion Ray','Radiant Breath','Rail Cannon',
  121. 'Retinal Glare'}
  122.  
  123. -- Magical spells with a primary Mnd mod
  124. blue_magic_maps.MagicalMnd = S{'Acrid Stream','Magic Hammer','Mind Blast'}
  125.  
  126. -- Magical spells with a primary Chr mod
  127. blue_magic_maps.MagicalChr = S{'Mysterious Light'}
  128.  
  129. -- Magical spells with a Vit stat mod (on top of Int)
  130. blue_magic_maps.MagicalVit = S{'Thermal Pulse'}
  131.  
  132. -- Magical spells with a Dex stat mod (on top of Int)
  133. blue_magic_maps.MagicalDex = S{'Charged Whisker','Gates of Hades'}
  134.  
  135. -- Magical spells (generally debuffs) that we want to focus on magic accuracy over damage.
  136. -- Add Int for damage where available, though.
  137. blue_magic_maps.MagicAccuracy = S{'1000 Needles','Absolute Terror','Actinic Burst','Atra. Libations',
  138. 'Auroral Drape','Awful Eye', 'Blank Gaze','Blistering Roar','Blood Saber','Chaotic Eye',
  139. 'Cimicine Discharge','Cold Wave','Corrosive Ooze','Demoralizing Roar','Digest','Dream Flower',
  140. 'Enervation','Feather Tickle','Filamented Hold','Frightful Roar','Geist Wall','Hecatomb Wave',
  141. 'Infrasonics','Jettatura','Light of Penance','Lowing','Mind Blast','Mortal Ray','MP Drainkiss',
  142. 'Osmosis','Reaving Wind','Sandspin','Sandspray','Sheep Song','Soporific','Sound Blast',
  143. 'Stinking Gas','Sub-zero Smash','Venom Shell','Voracious Trunk','Yawn'}
  144.  
  145. -- Breath-based spells
  146. blue_magic_maps.Breath = S{'Bad Breath','Flying Hip Press','Frost Breath','Heat Breath','Hecatomb Wave',
  147. 'Magnetite Cloud','Poison Breath','Self-Destruct','Thunder Breath','Vapor Spray','Wind Breath'}
  148.  
  149. -- Stun spells
  150. blue_magic_maps.Stun = S{'Blitzstrahl','Frypan','Head Butt','Sudden Lunge','Tail slap','Temporal Shift',
  151. 'Thunderbolt','Whirl of Rage'}
  152.  
  153. -- Healing spells
  154. blue_magic_maps.Healing = S{'Healing Breeze','Magic Fruit','Plenilune Embrace','Pollen','Restoral',
  155. 'White Wind','Wild Carrot'}
  156.  
  157. -- Buffs that depend on blue magic skill
  158. blue_magic_maps.SkillBasedBuff = S{'Barrier Tusk','Diamondhide','Magic Barrier','Metallic Body',
  159. 'Plasma Charge','Pyric Bulwark','Reactor Cool','Occultation'}
  160.  
  161. -- Other general buffs
  162. blue_magic_maps.Buff = S{'Amplification','Animating Wail','Carcharian Verve','Cocoon',
  163. 'Erratic Flutter','Exuviation','Fantod','Feather Barrier','Harden Shell','Memento Mori',
  164. 'Nat. Meditation','Orcish Counterstance','Refueling','Regeneration','Saline Coat','Triumphant Roar',
  165. 'Warm-Up','Winds of Promyvion','Zephyr Mantle'}
  166.  
  167. blue_magic_maps.Refresh = S{'Battery Charge'}
  168.  
  169. -- Spells that require Unbridled Learning to cast.
  170. unbridled_spells = S{'Absolute Terror','Bilgestorm','Blistering Roar','Bloodrake','Carcharian Verve','Cesspool',
  171. 'Crashing Thunder','Cruel Joke','Droning Whirlwind','Gates of Hades','Harden Shell','Mighty Guard',
  172. 'Polar Roar','Pyric Bulwark','Tearing Gust','Thunderbolt','Tourbillion','Uproot'}
  173.  
  174. include('Mote-TreasureHunter')
  175.  
  176. -- For th_action_check():
  177. -- JA IDs for actions that always have TH: Provoke, Animated Flourish
  178. info.default_ja_ids = S{35, 204}
  179. -- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
  180. info.default_u_ja_ids = S{201, 202, 203, 205, 207}
  181.  
  182. lockstyleset = 13
  183. end
  184.  
  185. -------------------------------------------------------------------------------------------------------------------
  186. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  187. -------------------------------------------------------------------------------------------------------------------
  188.  
  189. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  190. function user_setup()
  191. state.OffenseMode:options('Normal', 'MidAcc', 'HighAcc')
  192. state.HybridMode:options('Normal', 'DT')
  193. state.RangedMode:options('Normal', 'Acc')
  194. state.WeaponskillMode:options('Normal', 'Acc')
  195. state.CastingMode:options('Normal', 'Resistant')
  196. state.PhysicalDefenseMode:options('PDT', 'MDT')
  197. state.IdleMode:options('Normal', 'DT')--, 'Learning')
  198.  
  199. state.MagicBurst = M(false, 'Magic Burst')
  200. --state.CP = M(false, "Capacity Points Mode")
  201.  
  202. state.HasteMode = M(false, 'Block Haste Reset')
  203.  
  204. -- Additional local binds
  205.  
  206. send_command('bind @t gs c cycle treasuremode')
  207. send_command('bind !` gs c toggle MagicBurst')
  208. send_command('bind ^` input /ma "Sudden Lunge" <t>; wait 0.5; input /p Stun (ใ‚นใ‚ฟใƒณ) <t>')
  209. send_command('bind @e input /ma "Erratic Flutter" <me>')
  210. send_command('bind @o input /ma "Occultation" <me>')
  211.  
  212. if player.sub_job == "RDM" then
  213. send_command('bind @n input /ma "Fantod" <me>')
  214. send_command('bind @c input /ma "Reactor Cool" <me>')
  215. send_command('bind @r input /ma "Refresh" <stpc>')
  216. send_command('bind @b input /ma "Phalanx" <me>')
  217. send_command('bind @d input /ma "Stoneskin" <me>')
  218. send_command('bind @m input /ma "Carcharian Verve" <me>')
  219. else
  220. send_command('bind @n input /ma "Nat. Meditation" <me>')
  221. send_command('bind @c input /ma "Cocoon" <me>')
  222. send_command('bind @r input /ma "Battery Charge" <me>')
  223. send_command('bind @b input /ma "Barrier Tusk" <me>')
  224. send_command('bind @d input /ma "Diamondhide" <me>')
  225. send_command('bind @m input /ma "Mighty Guard" <me>')
  226. end
  227.  
  228. --send_command('bind @c gs c toggle CP')
  229.  
  230. if player.sub_job == 'WAR' then
  231. send_command('bind ^b input /ja "Berserk" <me>')
  232. send_command('bind ^w input /ja "Warcry" <me>')
  233. send_command('bind ^a input /ja "Aggressor" <me>')
  234. send_command('bind @` input /ja "Provoke" <t>')
  235. end
  236.  
  237. send_command('bind Home input /ws "Savage Blade" <t>')
  238. send_command('bind Delete input /ws "Chant du Cygne" <t>')
  239. send_command('bind End input /ws "Sanguine Blade" <t>')
  240.  
  241. select_default_macro_book()
  242. set_lockstyle()
  243.  
  244. Haste = 0
  245. DW_needed = 0
  246. DW = false
  247. moving = false
  248. update_combat_form()
  249. determine_haste_group()
  250. end
  251.  
  252. -- Called when this job file is unloaded (eg: job change)
  253. function user_unload()
  254. send_command('unbind @t')
  255. send_command('unbind !`')
  256. send_command('bind @e input /ma Haste <stpc>')
  257. send_command('bind @o input /ma Blink <me>')
  258. send_command('unbind @n')
  259. send_command('unbind @c')
  260. send_command('bind @r input /ma Refresh <stpc>')
  261. send_command('bind @b input /ma Phalanx <me>')
  262. send_command('bind @d input /ma Stoneskin <me>')
  263. send_command('unbind @m')
  264. send_command('unbind @c')
  265. send_command('unbind ^b')
  266. send_command('unbind ^w')
  267. send_command('unbind ^a')
  268. send_command('unbind @`')
  269. send_command('unbind Home')
  270. send_command('unbind Delete')
  271. send_command('unbind End')
  272.  
  273. end
  274.  
  275. -- Define sets and vars used by this job file.
  276. function init_gear_sets()
  277. include('augmented-items.lua')
  278. ------------------------------------------------------------------------------------------------
  279. ---------------------------------------- Precast Sets ------------------------------------------
  280. ------------------------------------------------------------------------------------------------
  281.  
  282. -- Precast sets to enhance JAs
  283.  
  284. -- Enmity set
  285. sets.Enmity = {ammo="Sapience Orb"}
  286.  
  287. sets.precast.JA['Provoke'] = sets.Enmity
  288.  
  289. sets.buff['Burst Affinity'] = {legs="Assim. Shalwar +2", feet="Hashi. Basmak +1"}
  290. sets.buff['Diffusion'] = {feet="Luhlaza Charuqs +1"}
  291. sets.buff['Efflux'] = {back=RosmertaDA,legs="Hashishin Tayt +1"}
  292.  
  293. --sets.precast.JA['Azure Lore'] = {hands="Luhlaza Bazubands"}
  294. sets.precast.JA['Chain Affinity'] = {ring2="Mujin Band",feet="Assim. Charuqs +2"}
  295. --sets.precast.JA['Convergence'] = {head="Luh. Keffiyeh +1"}
  296. --sets.precast.JA['Enchainment'] = {body="Luhlaza Jubbah +1"}
  297.  
  298. sets.precast.FC = {
  299. ammo="Sapience Orb",
  300. head="Carmine Mask +1",
  301. neck="Orunmila's Torque",
  302. ear1="Loquac. Earring",
  303. ear2="Etiolation Earring",
  304. body=TaeonTabardFC,
  305. hands="Leyline Gloves",
  306. ring1="Prolix Ring",
  307. ring2="Lebeche Ring",
  308. back="Perimede Cape",
  309. waist="Witful Belt",
  310. legs="Psycloth Lappas",
  311. feet="Carmine Greaves +1"}
  312.  
  313. sets.precast.FC['Blue Magic'] = sets.precast.FC
  314. sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  315. sets.precast.FC.Cure = set_combine(sets.precast.FC, {ammo="Impatiens", ear2="Mendi. Earring"})
  316.  
  317. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
  318. ammo="Impatiens",
  319. neck="Magoraga Beads"})
  320.  
  321.  
  322. ------------------------------------------------------------------------------------------------
  323. ------------------------------------- Weapon Skill Sets ----------------------------------------
  324. ------------------------------------------------------------------------------------------------
  325.  
  326. sets.precast.WS = {
  327. ammo="Floestone",
  328. head="Adhemar Bonnet +1",
  329. neck="Fotia Gorget",
  330. ear1="Moonshade Earring",
  331. ear2="Brutal Earring",
  332. body="Adhemar Jacket +1",
  333. hands=AdhemarWristbandsB,
  334. ring1="Epona's Ring",
  335. ring2="Shukuyu Ring",
  336. back=RosmertaDA,
  337. waist="Fotia Belt",
  338. legs="Samnuha Tights",
  339. feet=HerculeanBootsTA}
  340.  
  341. sets.precast.WS.Acc = set_combine(sets.precast.WS, {
  342. ammo="Falcon Eye",
  343. head="Dampening Tam",
  344. ear2="Telos Earring"})
  345.  
  346. sets.precast.WS['Chant du Cygne'] = set_combine(sets.precast.WS, {
  347. ammo="Jukukik Feather",
  348. ear2="Mache Earring +1",
  349. body="Abnoba Kaftan",
  350. ring2="Ilabrat Ring",
  351. back=RosmertaCrit,
  352. feet="Thereoid Greaves"})
  353.  
  354. sets.precast.WS['Chant du Cygne'].Acc = set_combine(sets.precast.WS['Chant du Cygne'], {
  355. ammo="Falcon Eye",
  356. head="Dampening Tam",
  357. ring2="Ramuh Ring +1",
  358. feet=HerculeanBootsTA})
  359.  
  360. sets.precast.WS['Vorpal Blade'] = sets.precast.WS['Chant du Cygne']
  361. sets.precast.WS['Vorpal Blade'].Acc = sets.precast.WS['Chant du Cygne'].Acc
  362.  
  363. sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {
  364. head="Lilitu Headpiece",
  365. neck="Caro Necklace",
  366. ear2="Ishvara Earring",
  367. body="Assim. Jubbah +2",
  368. hands="Jhakri Cuffs +2",
  369. ring1="Ifrit Ring +1",
  370. back=RosmertaWSD,
  371. waist="Prosilio Belt +1",
  372. feet=HerculeanBootsWSD})
  373.  
  374. sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {
  375. ammo="Falcon Eye",
  376. neck="Combatant's Torque",
  377. ear2="Telos Earring",
  378. waist="Grunfeld Rope"})
  379.  
  380. sets.precast.WS['Requiescat'] = {
  381. ammo="Hydrocera",
  382. head="Jhakri Coronal +2",
  383. neck="Fotia Gorget",
  384. ear1="Moonshade Earring",
  385. ear2="Brutal Earring",
  386. body="Jhakri Robe +2",
  387. hands="Jhakri Cuffs +2",
  388. ring1="Rufescent Ring",
  389. ring2="Epona's Ring",
  390. back=RosmertaDA,
  391. waist="Fotia Belt",
  392. legs="Jhakri Slops +2",
  393. feet="Jhakri Pigaches +2"}
  394.  
  395. sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS['Requiescat'], {
  396. ammo="Falcon Eye",
  397. head="Dampening Tam",
  398. legs="Carmine Cuisses +1",
  399. ear2="Telos Earring"})
  400.  
  401. sets.precast.WS['Expiacion'] = sets.precast.WS['Savage Blade']
  402. sets.precast.WS['Expiacion'].Acc = sets.precast.WS['Expiacion']
  403.  
  404. sets.precast.WS['Sanguine Blade'] = {
  405. ammo="Pemphredo Tathlum",
  406. head="Pixie Hairpin +1",
  407. neck="Baetyl Pendant",
  408. ear1="Friomisi Earring",
  409. ear2="Regal Earring",
  410. body="Amalric Doublet +1",
  411. hands="Jhakri Cuffs +2",
  412. ring1="Shiva Ring +1",
  413. ring2="Archon Ring",
  414. back=RosmertaINT,
  415. waist="Yamabuki-no-Obi",
  416. legs="Amalric Slops +1",
  417. feet="Amalric Nails +1"}
  418.  
  419. sets.precast.WS['True Strike'] = sets.precast.WS['Savage Blade']
  420. sets.precast.WS['True Strike'].Acc = sets.precast.WS['Savage Blade'].Acc
  421. sets.precast.WS['Judgment'] = sets.precast.WS['True Strike']
  422. sets.precast.WS['Judgment'].Acc = sets.precast.WS['True Strike'].Acc
  423. sets.precast.WS['Black Halo'] = sets.precast.WS['True Strike']
  424. sets.precast.WS['Black Halo'].Acc = sets.precast.WS['True Strike'].Acc
  425. sets.precast.WS['Realmrazer'] = sets.precast.WS['Requiescat']
  426. sets.precast.WS['Realmrazer'].Acc = sets.precast.WS['Requiescat'].Acc
  427.  
  428. sets.precast.WS['Flash Nova'] = set_combine(sets.precast.WS['Sanguine Blade'], {head="Jhakri Coronal +2"})
  429.  
  430. ------------------------------------------------------------------------------------------------
  431. ---------------------------------------- Midcast Sets ------------------------------------------
  432. ------------------------------------------------------------------------------------------------
  433.  
  434. sets.midcast.FastRecast = sets.precast.FC
  435.  
  436. sets.midcast.SpellInterrupt = {
  437. ammo="Impatiens",
  438. ring1="Evanescence Ring"}
  439.  
  440. sets.midcast['Blue Magic'] = {
  441. ammo="Mavi Tathlum",
  442. head="Luh. Keffiyeh +1",
  443. neck="Incanter's Torque",
  444. body="Assim. Jubbah +2",
  445. hands="Rawhide Gloves",
  446. ring1="Stikini Ring +1",
  447. ring2="Stikini Ring +1",
  448. back="Cornflower Cape",
  449. legs="Hashishin Tayt +1",
  450. feet="Luhlaza Charuqs +1"}
  451.  
  452. sets.midcast['Blue Magic'].Physical = {
  453. ammo="Floestone",
  454. head="Jhakri Coronal +2",
  455. neck="Caro Necklace",
  456. body="Jhakri Robe +2",
  457. hands="Jhakri Cuffs +2",
  458. ring1="Shukuyu Ring",
  459. ring2="Ifrit Ring +1",
  460. back="Cornflower Cape",
  461. waist="Prosilio Belt +1",
  462. legs="Jhakri Slops +2",
  463. feet="Jhakri Pigaches +2"}
  464.  
  465. sets.midcast['Blue Magic'].PhysicalAcc = set_combine(sets.midcast['Blue Magic'].Physical, {
  466. ammo="Falcon Eye",
  467. head="Carmine Mask +1",
  468. neck="Sanctity Necklace",
  469. ear1="Telos Earring",
  470. ear2="Digni. Earring",
  471. body="Adhemar Jacket +1",
  472. hands=AdhemarWristbandsB,
  473. ring1="Ramuh Ring +1",
  474. ring2="Ramuh Ring +1",
  475. back=RosmertaDA,
  476. waist="Grunfeld Rope",
  477. legs="Carmine Cuisses +1",
  478. feet=HerculeanBootsWSD})
  479.  
  480. sets.midcast['Blue Magic'].PhysicalStr = sets.midcast['Blue Magic'].Physical
  481.  
  482. sets.midcast['Blue Magic'].PhysicalDex = set_combine(sets.midcast['Blue Magic'].Physical, {
  483. ammo="Falcon Eye",
  484. ear1="Mache Earring +1",
  485. ring1="Ramuh Ring +1",
  486. ring2="Ilabrat Ring",
  487. back=RosmertaCrit,
  488. waist="Grunfeld Rope"})
  489.  
  490. sets.midcast['Blue Magic'].PhysicalVit = sets.midcast['Blue Magic'].Physical
  491.  
  492. sets.midcast['Blue Magic'].PhysicalAgi = set_combine(sets.midcast['Blue Magic'].Physical, {
  493. ring1="Petrov Ring",
  494. ring2="Ilabrat Ring"})
  495.  
  496. sets.midcast['Blue Magic'].PhysicalInt = set_combine(sets.midcast['Blue Magic'].Physical, {
  497. ear1="Regal Earring",
  498. ring1="Shiva Ring +1",
  499. ring2="Shiva Ring +1",
  500. back=RosmertaINT})
  501.  
  502. sets.midcast['Blue Magic'].PhysicalMnd = set_combine(sets.midcast['Blue Magic'].Physical, {ear1="Regal Earring"})
  503.  
  504. sets.midcast['Blue Magic'].PhysicalChr = set_combine(sets.midcast['Blue Magic'].Physical, {ear1="Regal Earring", ear2="Enchntr. Earring +1"})
  505.  
  506. sets.midcast['Blue Magic'].Magical = {
  507. ammo="Pemphredo Tathlum",
  508. head=HerculeanHelmMAB,
  509. neck="Sanctity Necklace",
  510. ear1="Regal Earring",
  511. ear2="Crematio Earring",
  512. body="Amalric Doublet +1",
  513. hands=AmalricD,
  514. ring1="Shiva Ring +1",
  515. ring2="Shiva Ring +1",
  516. back=RosmertaINT,
  517. waist="Yamabuki-no-Obi",
  518. legs="Amalric Slops +1",
  519. feet="Amalric Nails +1"}
  520.  
  521. sets.midcast['Blue Magic'].Magical.Resistant = set_combine(sets.midcast['Blue Magic'].Magical, {
  522. head="Assim. Keffiyeh +2",
  523. neck="Erra Pendant",
  524. ear1="Digni. Earring",
  525. waist="Yamabuki-no-Obi"})
  526.  
  527. sets.midcast['Blue Magic'].MagicalDark = set_combine(sets.midcast['Blue Magic'].Magical, {
  528. head="Pixie Hairpin +1",
  529. ring1="Archon Ring"})
  530.  
  531. sets.midcast['Blue Magic'].MagicalLight = sets.midcast['Blue Magic'].Magical
  532.  
  533. sets.midcast['Blue Magic'].MagicalMnd = sets.midcast['Blue Magic'].Magical
  534.  
  535. sets.midcast['Blue Magic'].MagicalDex = sets.midcast['Blue Magic'].Magical
  536.  
  537. sets.midcast['Blue Magic'].MagicalVit = sets.midcast['Blue Magic'].Magical
  538.  
  539. sets.midcast['Blue Magic'].MagicalChr = sets.midcast['Blue Magic'].Magical
  540.  
  541. sets.midcast['Blue Magic'].MagicAccuracy = {
  542. ammo="Pemphredo Tathlum",
  543. head="Carmine Mask +1",
  544. neck="Erra Pendant",
  545. ear1="Gwati Earring",
  546. ear2="Digni. Earring",
  547. body="Jhakri Robe +2",
  548. hands="Rawhide Gloves",
  549. ring1="Stikini Ring +1",
  550. ring2="Stikini Ring +1",
  551. back=RosmertaINT,
  552. waist="Luminary Sash",
  553. legs="Jhakri Slops +2",
  554. feet="Jhakri Pigaches +2"}
  555.  
  556. sets.midcast['Blue Magic'].Breath = sets.midcast['Blue Magic'].Magical
  557.  
  558. sets.midcast['Blue Magic'].Stun = set_combine(sets.midcast['Blue Magic'].MagicAccuracy,{
  559. ammo="Falcon Eye",
  560. ear1="Regal Earring",
  561. back="Cornflower Cape"})
  562.  
  563. sets.midcast['Blue Magic'].Healing = {
  564. ammo="Hydrocera",
  565. head="Carmine Mask +1",
  566. neck="Phalaina Locket",
  567. ear2="Mendi. Earring",
  568. body=TaeonTabardFC,
  569. hands="Telchine Gloves",
  570. ring1="Rufescent Ring",
  571. ring2="Lebeche Ring",
  572. back="Tempered Cape +1",
  573. waist="Luminary Sash",
  574. legs="Gyve Trousers",
  575. feet="Medium's Sabots"}
  576.  
  577. sets.midcast['Blue Magic'].HealingSelf = set_combine(sets.midcast['Blue Magic'].Healing, {
  578. neck="Phalaina Locket",
  579. ring1="Asklepian Ring",
  580. ring2="Kunaji Ring",
  581. waist="Gishdubar Sash",
  582. legs="Telchine Braconi"})
  583.  
  584.  
  585. sets.midcast['Blue Magic'].Buff = sets.midcast['Blue Magic']
  586. sets.midcast['Blue Magic'].Refresh = set_combine(sets.midcast['Blue Magic'], {
  587. head="Amalric Coif +1",
  588. waist="Gishdubar Sash"})
  589. sets.midcast['Blue Magic'].SkillBasedBuff = sets.midcast['Blue Magic']
  590.  
  591. sets.midcast['Blue Magic']['Occultation'] = set_combine(sets.midcast['Blue Magic'], {
  592. ammo="Sapience Orb",
  593. hands="Hashi. Bazubands",
  594. feet="Carmine Greaves +1"})
  595.  
  596. sets.midcast['Blue Magic']['Carcharian Verve'] = set_combine(sets.midcast['Blue Magic'].Buff, {
  597. head="Amalric Coif +1",
  598. waist="Emphatikos Rope"})
  599.  
  600. sets.midcast['Enhancing Magic'] = {
  601. head="Carmine Mask +1",
  602. neck="Incanter's Torque",
  603. ear1="Andoaa Earring",
  604. ear2="Augment. Earring",
  605. body="Telchine Chas.",
  606. ring1="Stikini Ring +1",
  607. ring2="Stikini Ring +1",
  608. back="Perimede Cape",
  609. waist="Olympus Sash",
  610. legs="Carmine Cuisses +1"}
  611.  
  612. sets.midcast.EnhancingDuration = {
  613. head="Telchine Cap",
  614. body="Telchine Chas.",
  615. hands="Telchine Gloves",
  616. legs="Telchine Braconi",
  617. feet="Telchine Pigaches"}
  618.  
  619. sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {
  620. head="Amalric Coif +1",
  621. waist="Gishdubar Sash"})
  622. sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {waist="Siegel Sash"})
  623. sets.midcast.Phalanx = set_combine(sets.midcast['Enhancing Magic'], {})
  624. sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {
  625. head="Amalric Coif +1",
  626. waist="Emphatikos Rope"})
  627.  
  628. sets.midcast.Protect = {ring1="Sheltered Ring"}
  629. sets.midcast.Protectra = sets.midcast.Protect
  630. sets.midcast.Shell = sets.midcast.Protect
  631. sets.midcast.Shellra = sets.midcast.Protect
  632.  
  633. sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
  634.  
  635. ------------------------------------------------------------------------------------------------
  636. ----------------------------------------- Idle Sets --------------------------------------------
  637. ------------------------------------------------------------------------------------------------
  638.  
  639. sets.idle = {
  640. ammo="Staunch Tathlum +1",
  641. head="Rawhide Mask",
  642. neck="Loricate Torque +1",
  643. ear1="Sanare Earring",
  644. ear2="Hearty Earring",
  645. body="Jhakri Robe +2",
  646. hands="Aya. Manopolas +2",
  647. ring1="Stikini Ring +1",
  648. ring2="Stikini Ring +1",
  649. back="Moonlight Cape",
  650. waist="Flume Belt +1",
  651. legs="Lengo Pants",
  652. feet=HerculeanBootsDT}
  653.  
  654. sets.idle.DT = set_combine(sets.idle, {
  655. head="Aya. Zucchetto +2",
  656. body="Ayanmo Corazza +2",
  657. ring1="Vocane Ring",
  658. ring2="Defending Ring",
  659. legs=HerculeanTrousersDT})
  660.  
  661. sets.idle.Town = set_combine(sets.idle, {
  662. head="Adhemar Bonnet +1",
  663. neck="Combatant's Torque",
  664. ear1="Mache Earring +1",
  665. ear2="Telos Earring",
  666. body="Amalric Doublet +1",
  667. hands=AmalricD,
  668. ring1="Chirich Ring +1",
  669. ring2="Stikini Ring +1",
  670. back="Moonlight Cape",
  671. waist="Flume Belt +1",
  672. legs="Carmine Cuisses +1",
  673. feet="Adhe. Gamashes +1"})
  674.  
  675. sets.idle.Weak = sets.idle.DT
  676.  
  677. --sets.idle.Learning = set_combine(sets.idle, sets.Learning)
  678.  
  679. ------------------------------------------------------------------------------------------------
  680. ---------------------------------------- Defense Sets ------------------------------------------
  681. ------------------------------------------------------------------------------------------------
  682.  
  683. sets.defense.PDT = sets.idle.DT
  684. sets.defense.MDT = sets.idle.DT
  685.  
  686. ------------------------------------------------------------------------------------------------
  687. ---------------------------------------- Engaged Sets ------------------------------------------
  688. ------------------------------------------------------------------------------------------------
  689.  
  690. -- Engaged sets
  691.  
  692. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  693. -- sets if more refined versions aren't defined.
  694. -- If you create a set with both offense and defense modes, the offense mode should be first.
  695. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  696.  
  697. sets.engaged = {
  698. ammo="Ginsen",
  699. head="Adhemar Bonnet +1",
  700. neck="Asperity Necklace",
  701. ear1="Suppanomimi",
  702. ear2="Brutal Earring",
  703. body="Adhemar Jacket +1",
  704. hands=AdhemarWristbandsB,
  705. ring1="Epona's Ring",
  706. ring2="Hetairoi Ring",
  707. back=RosmertaSTP,
  708. waist="Windbuffet Belt +1",
  709. legs="Samnuha Tights",
  710. feet=HerculeanBootsTA}
  711.  
  712. sets.engaged.MidAcc = set_combine(sets.engaged, {})
  713.  
  714. sets.engaged.HighAcc = set_combine(sets.engaged.MidAcc, {})
  715.  
  716. -- Base Dual-Wield Values:
  717. -- * DW6: +37%
  718. -- * DW5: +35%
  719. -- * DW4: +30%
  720. -- * DW3: +25% (NIN Subjob)
  721. -- * DW2: +15% (DNC Subjob)
  722. -- * DW1: +10%
  723.  
  724. -- No Magic Haste (74% DW to cap)
  725. sets.engaged.DW = {
  726. ammo="Ginsen",
  727. head=HerculeanHelmDW,
  728. neck="Asperity Necklace",
  729. ear1="Suppanomimi",
  730. ear2="Eabani Earring",
  731. body="Adhemar Jacket +1",
  732. hands=AdhemarWristbandsB,
  733. ring1="Epona's Ring",
  734. ring2="Hetairoi Ring",
  735. back=RosmertaDW,
  736. waist="Reiki Yotai",
  737. legs="Carmine Cuisses +1",
  738. feet=HerculeanBootsDW}
  739.  
  740. sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW, {
  741. ammo="Falcon Eye",
  742. neck="Lissome Necklace",
  743. ring2="Chirich Ring +1"})
  744.  
  745. sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW.MidAcc, {
  746. neck="Combatant's Torque"})
  747.  
  748. -- 15% Magic Haste (67% DW to cap)
  749. sets.engaged.DW.LowHaste = set_combine(sets.engaged.DW, {
  750. ammo="Ginsen",
  751. head="Adhemar Bonnet +1",
  752. neck="Asperity Necklace",
  753. ear1="Suppanomimi",
  754. ear2="Eabani Earring",
  755. body="Adhemar Jacket +1",
  756. hands=AdhemarWristbandsB,
  757. ring1="Epona's Ring",
  758. ring2="Hetairoi Ring",
  759. back=RosmertaDW,
  760. waist="Reiki Yotai",
  761. legs="Carmine Cuisses +1",
  762. feet=HerculeanBootsDW})
  763.  
  764. sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, {
  765. ammo="Falcon Eye",
  766. head="Dampening Tam",
  767. neck="Lissome Necklace",
  768. ring2="Chirich Ring +1"})
  769.  
  770. sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, {
  771. head="Carmine Mask +1",
  772. neck="Combatant's Torque"})
  773.  
  774. -- 30% Magic Haste (56% DW to cap)
  775. sets.engaged.DW.MidHaste = {
  776. ammo="Ginsen",
  777. head="Adhemar Bonnet +1",
  778. neck="Asperity Necklace",
  779. ear1="Suppanomimi",
  780. ear2="Eabani Earring",
  781. body="Adhemar Jacket +1",
  782. hands=AdhemarWristbandsB,
  783. ring1="Epona's Ring",
  784. ring2="Hetairoi Ring",
  785. back=RosmertaDW,
  786. waist="Reiki Yotai",
  787. legs="Samnuha Tights",
  788. feet=HerculeanBootsTA}
  789.  
  790. sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, {
  791. ammo="Falcon Eye",
  792. head="Dampening Tam",
  793. neck="Lissome Necklace",
  794. ring2="Chirich Ring +1"})
  795.  
  796. sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, {
  797. head="Carmine Mask +1",
  798. neck="Combatant's Torque",
  799. ear1="Mache Earring +1",
  800. ear2="Telos Earring",
  801. waist="Grunfeld Rope",
  802. legs="Carmine Cuisses +1"})
  803.  
  804. -- 35% Magic Haste (51% DW to cap)
  805. sets.engaged.DW.HighHaste = {
  806. ammo="Ginsen",
  807. head="Adhemar Bonnet +1",
  808. neck="Asperity Necklace",
  809. ear1="Suppanomimi",
  810. ear2="Eabani Earring",
  811. body="Adhemar Jacket +1",
  812. hands=AdhemarWristbandsB,
  813. ring1="Epona's Ring",
  814. ring2="Hetairoi Ring",
  815. back=RosmertaDW,
  816. waist="Windbuffet Belt +1",
  817. legs="Samnuha Tights",
  818. feet=HerculeanBootsTA}
  819.  
  820. sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, {
  821. ammo="Falcon Eye",
  822. head="Dampening Tam",
  823. neck="Lissome Necklace",
  824. ring2="Chirich Ring +1",
  825. waist="Kentarch Belt +1"})
  826.  
  827. sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, {
  828. head="Carmine Mask +1",
  829. neck="Combatant's Torque",
  830. ear1="Mache Earring +1",
  831. ear2="Telos Earring",
  832. waist="Grunfeld Rope",
  833. legs="Carmine Cuisses +1"})
  834.  
  835. -- 45% Magic Haste (36% DW to cap)
  836. sets.engaged.DW.MaxHaste = {
  837. ammo="Ginsen",
  838. head="Adhemar Bonnet +1",
  839. neck="Asperity Necklace",
  840. ear1="Suppanomimi",
  841. ear2="Brutal Earring",
  842. body="Adhemar Jacket +1",
  843. hands=AdhemarWristbandsB,
  844. ring1="Epona's Ring",
  845. ring2="Hetairoi Ring",
  846. back=RosmertaSTP,
  847. waist="Windbuffet Belt +1",
  848. legs="Samnuha Tights",
  849. feet=HerculeanBootsTA} -- 6%
  850.  
  851. sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, {
  852. ammo="Falcon Eye",
  853. head="Dampening Tam",
  854. neck="Lissome Necklace",
  855. ear2="Cessance Earring",
  856. waist="Kentarch Belt +1"})
  857.  
  858. sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {
  859. head="Carmine Mask +1",
  860. neck="Combatant's Torque",
  861. ear1="Telos Earring",
  862. ear2="Mache Earring +1",
  863. ring2="Chirich Ring +1",
  864. waist="Grunfeld Rope",
  865. legs="Carmine Cuisses +1"})
  866.  
  867. ------------------------------------------------------------------------------------------------
  868. ---------------------------------------- Hybrid Sets -------------------------------------------
  869. ------------------------------------------------------------------------------------------------
  870.  
  871. sets.engaged.Hybrid = {
  872. ammo="Staunch Tathlum +1", --2/2
  873. neck="Loricate Torque +1", --6/6
  874. hands="Aya. Manopolas +2", --3/3
  875. ring1="Vocane Ring", --7/7
  876. ring2="Defending Ring", --10/10
  877. legs="Aya. Cosciales +2"} --5/5
  878.  
  879. sets.engaged.DT = set_combine(sets.engaged, sets.engaged.Hybrid)
  880. sets.engaged.MidAcc.DT = set_combine(sets.engaged.MidAcc, sets.engaged.Hybrid)
  881. sets.engaged.HighAcc.DT = set_combine(sets.engaged.HighAcc, sets.engaged.Hybrid)
  882.  
  883. sets.engaged.DW.DT = set_combine(sets.engaged.DW, sets.engaged.Hybrid)
  884. sets.engaged.DW.MidAcc.DT = set_combine(sets.engaged.DW.MidAcc, sets.engaged.Hybrid)
  885. sets.engaged.DW.HighAcc.DT = set_combine(sets.engaged.DW.HighAcc, sets.engaged.Hybrid)
  886.  
  887. sets.engaged.DW.DT.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Hybrid)
  888. sets.engaged.DW.MidAcc.DT.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.Hybrid)
  889. sets.engaged.DW.HighAcc.DT.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.Hybrid)
  890.  
  891. sets.engaged.DW.DT.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Hybrid)
  892. sets.engaged.DW.MidAcc.DT.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.Hybrid)
  893. sets.engaged.DW.HighAcc.DT.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.Hybrid)
  894.  
  895. sets.engaged.DW.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Hybrid)
  896. sets.engaged.DW.MidAcc.DT.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.Hybrid)
  897. sets.engaged.DW.HighAcc.DT.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.Hybrid)
  898.  
  899. sets.engaged.DW.DT.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.Hybrid)
  900. sets.engaged.DW.MidAcc.DT.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.Hybrid)
  901. sets.engaged.DW.HighAcc.DT.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.Hybrid)
  902.  
  903. ------------------------------------------------------------------------------------------------
  904. ---------------------------------------- Special Sets ------------------------------------------
  905. ------------------------------------------------------------------------------------------------
  906.  
  907. sets.magic_burst = set_combine(sets.midcast['Blue Magic'].Magical, {
  908. ear2="Static Earring", --5
  909. body="Samnuha Coat", --(8)
  910. hands=AmalricD, --(5)
  911. ring1="Mujin Band", --(5)
  912. ring2="Locus Ring", --5
  913. back="Seshaw Cape", --5
  914. legs="Assim. Shalwar +2", --5
  915. feet="Jhakri Pigaches +2"}) --5
  916.  
  917. sets.Kiting = {legs="Carmine Cuisses +1"}
  918. --sets.Learning = {hands="Assim. Bazu. +1"}
  919. sets.latent_refresh = {waist="Fucho-no-obi"}
  920.  
  921. sets.buff.Doom = {ring1="Eshmun's Ring", ring2="Eshmun's Ring", waist="Gishdubar Sash"}
  922.  
  923. --sets.CP = {back="Mecisto. Mantle"}
  924. --sets.Reive = {neck="Ygnas's Resolve +1"}
  925. sets.TreasureHunter = {head="Wh. Rarab Cap +1", waist="Chaac Belt", feet=HerculeanBootsTH}
  926.  
  927. sets.midcast.Diaga = sets.TreasureHunter
  928.  
  929. end
  930.  
  931.  
  932. -------------------------------------------------------------------------------------------------------------------
  933. -- Job-specific hooks for standard casting events.
  934. -------------------------------------------------------------------------------------------------------------------
  935.  
  936. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  937. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  938. function job_precast(spell, action, spellMap, eventArgs)
  939. if unbridled_spells:contains(spell.english) and not state.Buff['Unbridled Learning'] then
  940. eventArgs.cancel = true
  941. windower.send_command('@input /ja "Unbridled Learning" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
  942. end
  943. if spellMap == 'Utsusemi' then
  944. if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
  945. cancel_spell()
  946. add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
  947. eventArgs.handled = true
  948. return
  949. elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
  950. send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
  951. end
  952. end
  953. end
  954.  
  955. -- Run after the default midcast() is done.
  956. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
  957. function job_post_midcast(spell, action, spellMap, eventArgs)
  958. -- Add enhancement gear for Chain Affinity, etc.
  959. if spell.skill == 'Blue Magic' then
  960. for buff,active in pairs(state.Buff) do
  961. if active and sets.buff[buff] then
  962. equip(sets.buff[buff])
  963. end
  964. end
  965. if spellMap == 'Healing' and spell.target.type == 'SELF' then
  966. equip(sets.midcast['Blue Magic'].HealingSelf)
  967. end
  968. end
  969.  
  970. if spell.skill == 'Enhancing Magic' and classes.NoSkillSpells:contains(spell.english) then
  971. equip(sets.midcast.EnhancingDuration)
  972. if spellMap == 'Refresh' then
  973. equip(sets.midcast.Refresh)
  974. end
  975. end
  976. end
  977.  
  978. function job_post_midcast(spell, action, spellMap, eventArgs)
  979. if not spell.interrupted then
  980. if spell.english == "Dream Flower" then
  981. send_command('@timers c "Dream Flower ['..spell.target.name..']" 90 down spells/00098.png')
  982. elseif spell.english == "Soporific" then
  983. send_command('@timers c "Sleep ['..spell.target.name..']" 90 down spells/00259.png')
  984. elseif spell.english == "Sheep Song" then
  985. send_command('@timers c "Sheep Song ['..spell.target.name..']" 60 down spells/00098.png')
  986. elseif spell.english == "Yawn" then
  987. send_command('@timers c "Yawn ['..spell.target.name..']" 60 down spells/00098.png')
  988. elseif spell.english == "Entomb" then
  989. send_command('@timers c "Entomb ['..spell.target.name..']" 60 down spells/00547.png')
  990. end
  991. end
  992. end
  993.  
  994. -------------------------------------------------------------------------------------------------------------------
  995. -- Job-specific hooks for non-casting events.
  996. -------------------------------------------------------------------------------------------------------------------
  997.  
  998. -- Called when a player gains or loses a buff.
  999. -- buff == buff gained or lost
  1000. -- gain == true if the buff was gained, false if it was lost.
  1001. function job_buff_change(buff,gain)
  1002.  
  1003. -- if buffactive['Reive Mark'] then
  1004. -- if gain then
  1005. -- equip(sets.Reive)
  1006. -- disable('neck')
  1007. -- else
  1008. -- enable('neck')
  1009. -- end
  1010. -- end
  1011.  
  1012. if buff == "doom" then
  1013. if gain then
  1014. equip(sets.buff.Doom)
  1015. disable('ring1','ring2','waist')
  1016. else
  1017. enable('ring1','ring2','waist')
  1018. handle_equipping_gear(player.status)
  1019. end
  1020. end
  1021.  
  1022. end
  1023.  
  1024. -------------------------------------------------------------------------------------------------------------------
  1025. -- User code that supplements standard library decisions.
  1026. -------------------------------------------------------------------------------------------------------------------
  1027.  
  1028. -- Called by the 'update' self-command, for common needs.
  1029. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  1030. function job_handle_equipping_gear(playerStatus, eventArgs)
  1031. update_combat_form()
  1032. determine_haste_group()
  1033. end
  1034.  
  1035. function job_update(cmdParams, eventArgs)
  1036. handle_equipping_gear(player.status)
  1037. th_update(cmdParams, eventArgs)
  1038. end
  1039.  
  1040. function update_combat_form()
  1041. if DW == true then
  1042. state.CombatForm:set('DW')
  1043. elseif DW == false then
  1044. state.CombatForm:reset()
  1045. end
  1046. end
  1047.  
  1048. -- Custom spell mapping.
  1049. -- Return custom spellMap value that can override the default spell mapping.
  1050. -- Don't return anything to allow default spell mapping to be used.
  1051. function job_get_spell_map(spell, default_spell_map)
  1052. if spell.skill == 'Blue Magic' then
  1053. for category,spell_list in pairs(blue_magic_maps) do
  1054. if spell_list:contains(spell.english) then
  1055. return category
  1056. end
  1057. end
  1058. end
  1059. end
  1060.  
  1061. -- Modify the default idle set after it was constructed.
  1062. function customize_idle_set(idleSet)
  1063. if player.mpp < 51 then
  1064. idleSet = set_combine(idleSet, sets.latent_refresh)
  1065. end
  1066. --if state.CP.current == 'on' then
  1067. --equip(sets.CP)
  1068. --disable('back')
  1069. --else
  1070. --enable('back')
  1071. --end
  1072. --if state.IdleMode.value == 'Learning' then
  1073. -- equip(sets.Learning)
  1074. -- disable('hands')
  1075. --else
  1076. -- enable('hands')
  1077. --end
  1078.  
  1079. return idleSet
  1080. end
  1081.  
  1082. -- Modify the default melee set after it was constructed.
  1083. function customize_melee_set(meleeSet)
  1084. if state.TreasureMode.value == 'Fulltime' then
  1085. meleeSet = set_combine(meleeSet, sets.TreasureHunter)
  1086. end
  1087.  
  1088. return meleeSet
  1089. end
  1090.  
  1091. -- Function to display the current relevant user state when doing an update.
  1092. -- Return true if display was handled, and you don't want the default info shown.
  1093. function display_current_job_state(eventArgs)
  1094. local msg = '[ Melee'
  1095.  
  1096. if state.CombatForm.has_value then
  1097. msg = msg .. ' (' .. state.CombatForm.value .. ')'
  1098. end
  1099.  
  1100. msg = msg .. ': '
  1101.  
  1102. msg = msg .. state.OffenseMode.value
  1103. if state.HybridMode.value ~= 'Normal' then
  1104. msg = msg .. '/' .. state.HybridMode.value
  1105. end
  1106. msg = msg .. ' ][ WS: ' .. state.WeaponskillMode.value .. ' ]'
  1107.  
  1108. if state.DefenseMode.value ~= 'None' then
  1109. msg = msg .. '[ Defense: ' .. state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ' ]'
  1110. end
  1111.  
  1112. if state.IdleMode.value ~= 'None' then
  1113. msg = msg .. '[ Idle: ' .. state.IdleMode.value .. ' ]'
  1114. end
  1115.  
  1116. if state.Kiting.value then
  1117. msg = msg .. '[ Kiting Mode: ON ]'
  1118. end
  1119.  
  1120. add_to_chat(122, msg)
  1121.  
  1122. eventArgs.handled = true
  1123. end
  1124.  
  1125.  
  1126. -------------------------------------------------------------------------------------------------------------------
  1127. -- Utility functions specific to this job.
  1128. -------------------------------------------------------------------------------------------------------------------
  1129.  
  1130. function determine_haste_group()
  1131. classes.CustomMeleeGroups:clear()
  1132. if DW == true then
  1133. if DW_needed <= 11 then
  1134. classes.CustomMeleeGroups:append('MaxHaste')
  1135. elseif DW_needed > 11 and DW_needed <= 21 then
  1136. classes.CustomMeleeGroups:append('HighHaste')
  1137. elseif DW_needed > 21 and DW_needed <= 31 then
  1138. classes.CustomMeleeGroups:append('MidHaste')
  1139. elseif DW_needed > 31 and DW_needed <= 37 then
  1140. classes.CustomMeleeGroups:append('LowHaste')
  1141. elseif DW_needed > 37 then
  1142. classes.CustomMeleeGroups:append('')
  1143. end
  1144. end
  1145. end
  1146.  
  1147. function job_self_command(cmdParams, eventArgs)
  1148. gearinfo(cmdParams, eventArgs)
  1149. end
  1150.  
  1151. function gearinfo(cmdParams, eventArgs)
  1152. if cmdParams[1] == 'gearinfo' then
  1153. if type(tonumber(cmdParams[2])) == 'number' then
  1154. if tonumber(cmdParams[2]) ~= DW_needed then
  1155. DW_needed = tonumber(cmdParams[2])
  1156. DW = true
  1157. end
  1158. elseif type(cmdParams[2]) == 'string' then
  1159. if cmdParams[2] == 'false' then
  1160. DW_needed = 0
  1161. DW = false
  1162. end
  1163. end
  1164. if type(tonumber(cmdParams[3])) == 'number' then
  1165. if tonumber(cmdParams[3]) ~= Haste then
  1166. Haste = tonumber(cmdParams[3])
  1167. end
  1168. end
  1169. if type(cmdParams[4]) == 'string' then
  1170. if cmdParams[4] == 'true' then
  1171. moving = true
  1172. elseif cmdParams[4] == 'false' then
  1173. moving = false
  1174. end
  1175. end
  1176. if not midaction() then
  1177. job_update()
  1178. end
  1179. end
  1180. end
  1181.  
  1182. function update_active_abilities()
  1183. state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
  1184. state.Buff['Efflux'] = buffactive['Efflux'] or false
  1185. state.Buff['Diffusion'] = buffactive['Diffusion'] or false
  1186. end
  1187.  
  1188. -- State buff checks that will equip buff gear and mark the event as handled.
  1189. function apply_ability_bonuses(spell, action, spellMap)
  1190. if state.Buff['Burst Affinity'] and (spellMap == 'Magical' or spellMap == 'MagicalLight' or spellMap == 'MagicalDark' or spellMap == 'Breath') then
  1191. if state.MagicBurst.value then
  1192. equip(sets.magic_burst)
  1193. end
  1194. equip(sets.buff['Burst Affinity'])
  1195. end
  1196. if state.Buff.Efflux and spellMap == 'Physical' then
  1197. equip(sets.buff['Efflux'])
  1198. end
  1199. if state.Buff.Diffusion and (spellMap == 'Buffs' or spellMap == 'BlueSkill') then
  1200. equip(sets.buff['Diffusion'])
  1201. end
  1202.  
  1203. if state.Buff['Burst Affinity'] then equip (sets.buff['Burst Affinity']) end
  1204. if state.Buff['Efflux'] then equip (sets.buff['Efflux']) end
  1205. if state.Buff['Diffusion'] then equip (sets.buff['Diffusion']) end
  1206. end
  1207.  
  1208. -- Check for various actions that we've specified in user code as being used with TH gear.
  1209. -- This will only ever be called if TreasureMode is not 'None'.
  1210. -- Category and Param are as specified in the action event packet.
  1211. function th_action_check(category, param)
  1212. if category == 2 or -- any ranged attack
  1213. --category == 4 or -- any magic action
  1214. (category == 3 and param == 30) or -- Aeolian Edge
  1215. (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
  1216. (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
  1217. then return true
  1218. end
  1219. end
  1220.  
  1221. -- Select default macro book on initial load or subjob change.
  1222. function select_default_macro_book()
  1223. -- Default macro set/book
  1224. if player.sub_job == 'WAR' then
  1225. set_macro_page(1, 5)
  1226. elseif player.sub_job == 'RDM' then
  1227. set_macro_page(2, 5)
  1228. else
  1229. set_macro_page(1, 5)
  1230. end
  1231. end
  1232.  
  1233. function set_lockstyle()
  1234. send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  1235. end
Add Comment
Please, Sign In to add comment