Advertisement
Moose8758

Mooze_BRD

Aug 6th, 2022
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.14 KB | None | 0 0
  1. -- Original: Motenten / Modified: Arislan
  2.  
  3. -------------------------------------------------------------------------------------------------------------------
  4. -- Keybinds -- Moose's Key -- ^ = CTRL @ = Windows key ! = ALT ~ = Shift
  5. -------------------------------------------------------------------------------------------------------------------
  6.  
  7. -- Modes: [ F9 ] Cycle Offense Mode
  8. -- [ CTRL+F9 ] Cycle Hybrid Modes
  9. -- [ WIN+F9 ] Cycle Weapon Skill Modes
  10. -- [ F10 ] Emergency -PDT Mode
  11. -- [ ALT+F10 ] Toggle Kiting Mode
  12. -- [ F11 ] Emergency -MDT Mode
  13. -- [ CTRL+F11 ] Cycle Casting Modes
  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: [ CTRL+` ] Cycle SongMode
  20. --
  21. -- Songs: [ ALT+` ] Chocobo Mazurka
  22. -- [ WIN+, ] Utsusemi: Ichi
  23. -- [ WIN+. ] Utsusemi: Ni
  24. --
  25. -- Weapons: [ CTRL+W ] Toggles Weapon Lock
  26. --
  27. -- WS: [ CTRL+Numpad7 ] Mordant Rime
  28. -- [ CTRL+Numpad4 ] Evisceration
  29. -- [ CTRL+Numpad5 ] Rudra's Storm
  30. -- [ CTRL+Numpad1 ] Aeolian Edge
  31. --
  32. --
  33. -- (Global-Binds.lua contains additional non-job-related keybinds)
  34.  
  35.  
  36. -------------------------------------------------------------------------------------------------------------------
  37. -- Setup functions for this job. Generally should not be modified.
  38. -------------------------------------------------------------------------------------------------------------------
  39.  
  40. --[[
  41. Custom commands:
  42.  
  43. SongMode may take one of three values: None, Placeholder, FullLength
  44.  
  45. You can set these via the standard 'set' and 'cycle' self-commands. EG:
  46. gs c cycle SongMode
  47. gs c set SongMode Placeholder
  48.  
  49. The Placeholder state will equip the bonus song instrument and ensure non-duration gear is equipped.
  50. The FullLength state will simply equip the bonus song instrument on top of standard gear.
  51.  
  52.  
  53. Simple macro to cast a placeholder Daurdabla song:
  54. /console gs c set SongMode Placeholder
  55. /ma "Shining Fantasia" <me>
  56.  
  57. To use a Terpander rather than Daurdabla, set the info.ExtraSongInstrument variable to
  58. 'Terpander', and info.ExtraSongs to 1.
  59. --]]
  60.  
  61. -- Initialization function for this job file.
  62. function get_sets()
  63. mote_include_version = 2
  64.  
  65. -- Load and initialize the include file.
  66. include('Mote-Include.lua')
  67. res = require 'resources'
  68. end
  69.  
  70.  
  71. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  72. function job_setup()
  73. state.SongMode = M{['description']='Song Mode', 'None', 'Placeholder'}
  74.  
  75. state.Buff['Pianissimo'] = buffactive['pianissimo'] or false
  76.  
  77. no_swap_gear = S{"Warp Ring", "Dim. Ring (Dem)", "Dim. Ring (Holla)", "Dim. Ring (Mea)",
  78. "Trizek Ring", "Echad Ring", "Facility Ring", "Capacity Ring"}
  79. elemental_ws = S{"Aeolian Edge"}
  80.  
  81.  
  82. lockstyleset = 14
  83. end
  84.  
  85. -------------------------------------------------------------------------------------------------------------------
  86. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  87. -------------------------------------------------------------------------------------------------------------------
  88.  
  89. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  90. function user_setup()
  91. state.OffenseMode:options('Normal', 'Acc')
  92. state.HybridMode:options('Normal', 'DT')
  93. state.WeaponskillMode:options('Normal', 'Acc')
  94. state.CastingMode:options('Normal', 'Resistant')
  95. state.IdleMode:options('Normal', 'DT', 'MEva')
  96.  
  97. state.LullabyMode = M{['description']='Lullaby Instrument', 'Harp', 'Horn'}
  98.  
  99. state.Carol = M{['description']='Carol',
  100. 'Fire Carol', 'Fire Carol II', 'Ice Carol', 'Ice Carol II', 'Wind Carol', 'Wind Carol II',
  101. 'Earth Carol', 'Earth Carol II', 'Lightning Carol', 'Lightning Carol II', 'Water Carol', 'Water Carol II',
  102. 'Light Carol', 'Light Carol II', 'Dark Carol', 'Dark Carol II',
  103. }
  104.  
  105. state.Threnody = M{['description']='Threnody',
  106. 'Fire Threnody II', 'Ice Threnody II', 'Wind Threnody II', 'Earth Threnody II',
  107. 'Ltng. Threnody II', 'Water Threnody II', 'Light Threnody II', 'Dark Threnody II',
  108. }
  109.  
  110. state.Etude = M{['description']='Etude', 'Sinewy Etude', 'Herculean Etude', 'Learned Etude', 'Sage Etude',
  111. 'Quick Etude', 'Swift Etude', 'Vivacious Etude', 'Vital Etude', 'Dextrous Etude', 'Uncanny Etude',
  112. 'Spirited Etude', 'Logical Etude', 'Enchanting Etude', 'Bewitching Etude'}
  113.  
  114. state.WeaponSet = M{['description']='Weapon Set', 'Carnwenhan', 'Twashtar', 'Tauret', 'Naegling'}
  115. state.WeaponLock = M(false, 'Weapon Lock')
  116. -- state.CP = M(false, "Capacity Points Mode")
  117.  
  118. -- Additional local binds
  119. include('Global-Binds.lua') -- OK to remove this line
  120. include('Global-GEO-Binds.lua') -- OK to remove this line
  121.  
  122. -- Adjust this if using the Terpander (new +song instrument)
  123. --info.ExtraSongInstrument = 'Daurdabla'
  124. -- How many extra songs we can keep from Daurdabla/Terpander
  125. --info.ExtraSongs = 2
  126.  
  127. send_command('bind ^` gs c cycle SongMode')
  128. send_command('bind !` input /ma "Chocobo Mazurka" <me>')
  129. send_command('bind !p input /ja "Pianissimo" <me>')
  130.  
  131. send_command('bind ^insert gs c cycleback Etude')
  132. send_command('bind ^delete gs c cycle Etude')
  133. send_command('bind ^home gs c cycleback Carol')
  134. send_command('bind ^end gs c cycle Carol')
  135. send_command('bind ^pageup gs c cycleback Threnody')
  136. send_command('bind ^pagedown gs c cycle Threnody')
  137.  
  138. send_command('bind @` gs c cycle LullabyMode')
  139. send_command('bind @w gs c toggle WeaponLock')
  140. -- send_command('bind @c gs c toggle CP')
  141. send_command('bind @e gs c cycleback WeaponSet')
  142. send_command('bind @r gs c cycle WeaponSet')
  143.  
  144. --send_command('bind ^numpad7 input /ws "Savage Blade" <t>')
  145. send_command('bind ^numpad7 input /ws "Mordant Rime" <t>')
  146. send_command('bind ^numpad4 input /ws "Evisceration" <t>')
  147. send_command('bind ^numpad5 input /ws "Rudra\'s Storm" <t>')
  148. send_command('bind ^numpad1 input /ws "Aeolian Edge" <t>')
  149.  
  150. select_default_macro_book()
  151. set_lockstyle()
  152.  
  153. state.Auto_Kite = M(false, 'Auto_Kite')
  154. Haste = 0
  155. DW_needed = 0
  156. DW = false
  157. moving = false
  158. update_combat_form()
  159. determine_haste_group()
  160. end
  161.  
  162.  
  163. -- Called when this job file is unloaded (eg: job change)
  164. function user_unload()
  165. send_command('unbind ^`')
  166. send_command('unbind !`')
  167. send_command('unbind ^backspace')
  168. send_command('unbind !insert')
  169. send_command('unbind !delete')
  170. send_command('unbind ^insert')
  171. send_command('unbind ^delete')
  172. send_command('unbind ^home')
  173. send_command('unbind ^end')
  174. send_command('unbind ^pageup')
  175. send_command('unbind ^pagedown')
  176. send_command('unbind @`')
  177. send_command('unbind @w')
  178. -- send_command('unbind @c')
  179. send_command('unbind @e')
  180. send_command('unbind @r')
  181. send_command('unbind ^numpad7')
  182. send_command('unbind ^numpad4')
  183. send_command('unbind ^numpad5')
  184. send_command('unbind ^numpad1')
  185. end
  186.  
  187.  
  188. -- Define sets and vars used by this job file.
  189. function init_gear_sets()
  190.  
  191. ------------------------------------------------------------------------------------------------
  192. ---------------------------------------- Precast Sets ------------------------------------------
  193. ------------------------------------------------------------------------------------------------
  194.  
  195. -- Fast cast sets for spells
  196. sets.precast.FC = {
  197. head="Nares Cap",
  198. body="Anhur Robe",
  199. legs="Aya. Cosciales +1",
  200. feet="Rostrum Pumps",
  201. waist="Tempus Fugit",
  202. right_ear="Loquac. Earring",
  203. }
  204.  
  205. sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  206.  
  207. sets.precast.FC.Cure = set_combine(sets.precast.FC, {
  208. feet="Kaykaus Boots +1", --0/7
  209. ear2="Mendi. Earring", --0/5
  210. })
  211.  
  212. sets.precast.FC.BardSong = set_combine(sets.precast.FC, {
  213. main="Felibre's Dague",
  214. head="Aoidos' Calot +1",
  215. hands="Schellenband",
  216. neck="Aoidos' Matinee",
  217. left_ear="Aoidos' Earring",
  218. })
  219.  
  220. sets.precast.FC.SongPlaceholder = set_combine(sets.precast.FC.BardSong, {range=info.ExtraSongInstrument})
  221.  
  222. sets.precast.FC.Dispelga = set_combine(sets.precast.FC, {main="Daybreak", sub="Ammurapi Shield", waist="Shinjutsu-no-Obi +1"})
  223.  
  224. -- Precast sets to enhance JAs
  225.  
  226. sets.precast.JA.Nightingale = {feet="Bihu Slippers +3"}
  227. sets.precast.JA.Troubadour = {body="Bihu Jstcorps. +3"}
  228. sets.precast.JA['Soul Voice'] = {legs="Bihu Cannions +3"}
  229.  
  230. -- Waltz set (chr and vit)
  231. sets.precast.Waltz = {}
  232.  
  233.  
  234. ------------------------------------------------------------------------------------------------
  235. ------------------------------------- Weapon Skill Sets ----------------------------------------
  236. ------------------------------------------------------------------------------------------------
  237.  
  238. -- Default set for any weaponskill that isn't any more specifically defined
  239. sets.precast.WS = {
  240. --ammo="Cheruski Needle",
  241. head="Aya. Zucchetto +1",
  242. body="Ayanmo Corazza +1",
  243. hands="Aya. Manopolas +1",
  244. legs="Aya. Cosciales +1",
  245. feet="Aya. Gambieras +1",
  246. neck="Kubira Beads",
  247. waist="Anguinus Belt",
  248. left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  249. right_ear="Loquac. Earring",
  250. left_ring="Rufescent Ring",
  251. right_ring="Rajas Ring",
  252. back="Atheling Mantle",
  253. }
  254.  
  255. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  256. sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {
  257. left_ring="Thundersoul Ring",
  258. neck="Shadow Gorget",
  259. waist="Shadow Belt",
  260. })
  261.  
  262. sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {
  263. neck="Light Gorget",
  264. waist="Light Belt",
  265. ring1="Stormsoul Ring",
  266. ring2="Blobnag Ring",
  267. })
  268.  
  269. sets.precast.WS['Mordant Rime'] = set_combine(sets.precast.WS, {
  270. neck="Bard's Charm +2",
  271. ear2="Regal Earring",
  272. ring2="Metamor. Ring +1",
  273. waist="Grunfeld Rope",
  274. })
  275.  
  276. sets.precast.WS['Rudra\'s Storm'] = set_combine(sets.precast.WS, {
  277. left_ring="Thundersoul Ring",
  278. neck="Love Torque",
  279. waist="Cuchulain's Belt",
  280. })
  281.  
  282. sets.precast.WS['Aeolian Edge'] = set_combine(sets.precast.WS, {
  283. --ammo="Witchstone",
  284. head="Welkin Crown",
  285. body="Wayfarer Robe",
  286. hands="Wayfarer Cuffs",
  287. legs="Wayfarer Slops",
  288. feet="Wayfarer Clogs",
  289. neck="Stoicheion Medal",
  290. waist="Cognition Belt",
  291. left_ear="Hecate's Earring",
  292. right_ear="Novio Earring",
  293. left_ring={ name="Diamond Ring", augments={'INT+2','MND+2',}},
  294. right_ring={ name="Demon's Ring", augments={'"Mag.Atk.Bns."+2','"Resist Curse"+2','Light resistance-5 Dark resistance+5',}},
  295. back="Romanus Cape",
  296. })
  297.  
  298. sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {
  299. })
  300.  
  301.  
  302. ------------------------------------------------------------------------------------------------
  303. ---------------------------------------- Midcast Sets ------------------------------------------
  304. ------------------------------------------------------------------------------------------------
  305.  
  306. -- General set for recast times.
  307. sets.midcast.FastRecast = sets.precast.FC
  308.  
  309. sets.midcast.SpellInterrupt = {
  310. ammo="Staunch Tathlum +1", --11
  311. --body="Ros. Jaseran +1", --25
  312. hands=gear.Chironic_WSD_hands, --20
  313. --legs="Querkening Brais" --15
  314. neck="Loricate Torque +1", --5
  315. ear1="Halasz Earring", --5
  316. ear2="Magnetic Earring", --8
  317. ring2="Evanescence Ring", --5
  318. waist="Rumination Sash", --10
  319. }
  320.  
  321. sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
  322.  
  323. -- Gear to enhance certain classes of songs.
  324. sets.midcast.Ballad = {legs="Aoidos' Rhingrave +2"}
  325. sets.midcast.Carol = {hands="Mousai Gages +1"}
  326. sets.midcast.Etude = {head="Mousai Turban +1"}
  327. sets.midcast.HonorMarch = {range="Marsyas", hands="Fili Manchettes +1"}
  328. sets.midcast.Lullaby = {body="Aoidos' Hongreline +2", hands="Brioso Cuffs +3"}
  329. sets.midcast.Madrigal = {head="Aoidos' Calot +2"}
  330. sets.midcast.Mambo = {feet="Mou. Crackows +1"}
  331. sets.midcast.March = {hands="Aoidos' Manchettes +2"}
  332. sets.midcast.Minne = {legs="Mou. Seraweels +1"}
  333. sets.midcast.Minuet = {body="Aoidos' Hongreline +2"}
  334. sets.midcast.Paeon = {head="Brioso Roundlet +3"}
  335. sets.midcast.Threnody = {body="Mou. Manteel +1"}
  336. sets.midcast['Adventurer\'s Dirge'] = {range="Marsyas", hands="Bihu Cuffs +3"}
  337. sets.midcast['Foe Sirvente'] = {head="Bihu Roundlet +3"}
  338. sets.midcast['Magic Finale'] = {legs="Fili Rhingrave +1"}
  339. sets.midcast["Sentinel's Scherzo"] = {feet="Fili Cothurnes +1"}
  340. sets.midcast["Chocobo Mazurka"] = {range="Marsyas"}
  341.  
  342. -- For song buffs (duration and AF3 set bonus)
  343. sets.midcast.SongEnhancing = {
  344. --main="Carnwenhan",
  345. range="Gjallarhorn",
  346. head="Aoidos' Calot +1",
  347. body="Aoidos' Hngrln. +2",
  348. hands="Ad. Mnchtte. +2",
  349. legs="Aoidos' Rhing. +2",
  350. feet="Aoidos' Cothrn. +2",
  351. neck="Aoidos' Matinee",
  352. waist="Tempus Fugit",
  353. left_ear="Aoidos' Earring",
  354. }
  355.  
  356. -- For song defbuffs (duration primary, accuracy secondary)
  357. sets.midcast.SongEnfeeble = {
  358. main="Twebuliij",
  359. sub="Reign Grip",
  360. range="Gjallarhorn",
  361. head="Aya. Zucchetto +1",
  362. body="Ayanmo Corazza +1",
  363. hands="Aya. Manopolas +1",
  364. legs="Aya. Cosciales +1",
  365. feet="Aya. Gambieras +1",
  366. neck="Stoicheion Medal",
  367. waist="Porous Rope",
  368. left_ear="Aoidos' Earring",
  369. left_ring="Angel's Ring",
  370. back="Ixion Cape",
  371. }
  372.  
  373. -- For song defbuffs (accuracy primary, duration secondary)
  374. sets.midcast.SongEnfeebleAcc = set_combine(sets.midcast.SongEnfeeble, {legs="Brioso Cannions +3"})
  375.  
  376. -- For Horde Lullaby maxiumum AOE range.
  377. sets.midcast.SongStringSkill = {
  378. ear1="Gersemi Earring",
  379. ear2="Darkside Earring",
  380. ring2={name="Stikini Ring +1", bag="wardrobe4"},
  381. }
  382.  
  383. -- Placeholder song; minimize duration to make it easy to overwrite.
  384. sets.midcast.SongPlaceholder = set_combine(sets.midcast.SongEnhancing, {range=info.ExtraSongInstrument})
  385.  
  386. -- Other general spells and classes.
  387. sets.midcast.Cure = {
  388. main="Daybreak", --30
  389. sub="Ammurapi Shield",
  390. head="Kaykaus Mitra +1", --11
  391. body="Kaykaus Bliaut +1", --(+4)/(-6)
  392. hands="Kaykaus Cuffs +1", --11(+2)/(-6)
  393. legs="Kaykaus Tights +1", --11/(+2)/(-6)
  394. feet="Kaykaus Boots +1", --11(+2)/(-12)
  395. neck="Incanter's Torque",
  396. ear1="Beatific Earring",
  397. ear2="Meili Earring",
  398. ring1="Menelaus's Ring",
  399. ring2="Haoma's Ring",
  400. back="Solemnity Cape", --7
  401. waist="Bishop's Sash",
  402. }
  403.  
  404. sets.midcast.Curaga = set_combine(sets.midcast.Cure, {
  405. neck="Nuna Gorget +1",
  406. ring1={name="Stikini Ring +1", bag="wardrobe3"},
  407. ring2="Metamor. Ring +1",
  408. waist="Luminary Sash",
  409. })
  410.  
  411. sets.midcast.StatusRemoval = {
  412. head="Vanya Hood",
  413. body="Vanya Robe",
  414. legs="Aya. Cosciales +2",
  415. feet="Vanya Clogs",
  416. neck="Incanter's Torque",
  417. ear2="Meili Earring",
  418. ring1="Menelaus's Ring",
  419. ring2="Haoma's Ring",
  420. back=gear.BRD_Song_Cape,
  421. waist="Bishop's Sash",
  422. }
  423.  
  424. sets.midcast.Cursna = set_combine(sets.midcast.StatusRemoval, {
  425. hands="Hieros Mittens",
  426. neck="Debilis Medallion",
  427. ear1="Beatific Earring",
  428. back="Oretan. Cape +1",
  429. })
  430.  
  431. sets.midcast['Enhancing Magic'] = {
  432. main="Carnwenhan",
  433. sub="Ammurapi Shield",
  434. head=gear.Telchine_ENH_head,
  435. body=gear.Telchine_ENH_body,
  436. hands=gear.Telchine_ENH_hands,
  437. legs=gear.Telchine_ENH_legs,
  438. feet=gear.Telchine_ENH_feet,
  439. neck="Incanter's Torque",
  440. ear1="Mimir Earring",
  441. ear2="Andoaa Earring",
  442. ring1={name="Stikini Ring +1", bag="wardrobe3"},
  443. ring2={name="Stikini Ring +1", bag="wardrobe4"},
  444. back="Fi Follet Cape +1",
  445. waist="Embla Sash",
  446. }
  447.  
  448. sets.midcast.Regen = set_combine(sets.midcast['Enhancing Magic'], {head="Inyanga Tiara +2"})
  449. sets.midcast.Haste = sets.midcast['Enhancing Magic']
  450. sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {waist="Gishdubar Sash", back="Grapevine Cape"})
  451. sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {neck="Nodens Gorget", waist="Siegel Sash"})
  452. sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {waist="Emphatikos Rope"})
  453. sets.midcast.Protect = set_combine(sets.midcast['Enhancing Magic'], {ring2="Sheltered Ring"})
  454. sets.midcast.Protectra = sets.midcast.Protect
  455. sets.midcast.Shell = sets.midcast.Protect
  456. sets.midcast.Shellra = sets.midcast.Shell
  457.  
  458. sets.midcast['Enfeebling Magic'] = {
  459. main="Carnwenhan",
  460. sub="Ammurapi Shield",
  461. head=empty;
  462. body="Cohort Cloak +1",
  463. hands="Brioso Cuffs +3",
  464. legs="Brioso Cannions +3",
  465. feet="Brioso Slippers +3",
  466. neck="Mnbw. Whistle +1",
  467. ear1="Digni. Earring",
  468. ear2="Vor Earring",
  469. ring1="Kishar Ring",
  470. ring2="Metamor. Ring +1",
  471. waist="Acuity Belt +1",
  472. back="Aurist's Cape +1",
  473. }
  474.  
  475. sets.midcast.Dispelga = set_combine(sets.midcast['Enfeebling Magic'], {main="Daybreak", sub="Ammurapi Shield", waist="Shinjutsu-no-Obi +1"})
  476.  
  477. ------------------------------------------------------------------------------------------------
  478. ----------------------------------------- Idle Sets --------------------------------------------
  479. ------------------------------------------------------------------------------------------------
  480.  
  481. sets.idle = {
  482. main="Earth Staff",
  483. sub="Light Grip",
  484. range="Gjallarhorn",
  485. head="Welkin Crown",
  486. body="Rubeus Jacket",
  487. hands="Serpentes Cuffs",
  488. legs="Nares Trews",
  489. feet="Serpentes Sabots",
  490. neck="Twilight Torque",
  491. waist="Porous Rope",
  492. left_ear="Bloodgem Earring",
  493. right_ear="Loquac. Earring",
  494. left_ring="Bifrost Ring",
  495. right_ring="Serket Ring",
  496. back="Ixion Cape",
  497. }
  498.  
  499. sets.idle.DT = {
  500. main="Earth Staff",
  501. sub="Light Grip",
  502. range="Gjallarhorn",
  503. head="Aya. Zucchetto +1",
  504. body="Ayanmo Corazza +1",
  505. hands="Aya. Manopolas +1",
  506. legs="Aya. Cosciales +1",
  507. feet="Aoidos' Cothrn. +2",
  508. neck="Twilight Torque",
  509. waist="Cuchulain's Belt",
  510. left_ear="Ethereal Earring",
  511. right_ear="Loquac. Earring",
  512. left_ring="Shadow Ring",
  513. right_ring="Meridian Ring",
  514. back="Shadow Mantle",
  515. }
  516.  
  517. sets.idle.MEva = {
  518. head="Inyanga Tiara +2", --0/5
  519. body="Inyanga Jubbah +2", --0/8
  520. hands="Raetic Bangles +1",
  521. legs="Inyanga Shalwar +2", --0/6
  522. feet="Inyan. Crackows +2", --0/3
  523. neck="Warder's Charm +1",
  524. ear1="Eabani Earring",
  525. ear2="Sanare Earring",
  526. ring1="Purity Ring",
  527. ring2="Inyanga Ring",
  528. back="Moonlight Cape", --6/6
  529. waist="Carrier's Sash",
  530. }
  531.  
  532. sets.idle.Town = set_combine(sets.idle, {
  533. range="Gjallarhorn",
  534. head="Mousai Turban +1",
  535. body="Ashera Harness",
  536. legs="Mou. Seraweels +1",
  537. feet="Mou. Crackows +1",
  538. neck="Bard's Charm +2",
  539. ear1="Enchntr. Earring +1",
  540. ear2="Regal Earring",
  541. back=gear.BRD_Song_Cape,
  542. waist="Acuity Belt +1",
  543. })
  544.  
  545. ------------------------------------------------------------------------------------------------
  546. ---------------------------------------- Defense Sets ------------------------------------------
  547. ------------------------------------------------------------------------------------------------
  548.  
  549. sets.defense.PDT = sets.idle.DT
  550. sets.defense.MDT = sets.idle.DT
  551.  
  552. sets.Kiting = {feet="Fili Cothurnes +1"}
  553. sets.latent_refresh = {waist="Fucho-no-obi"}
  554.  
  555. ------------------------------------------------------------------------------------------------
  556. ---------------------------------------- Engaged Sets ------------------------------------------
  557. ------------------------------------------------------------------------------------------------
  558.  
  559. -- Engaged sets
  560.  
  561. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  562. -- sets if more refined versions aren't defined.
  563. -- If you create a set with both offense and defense modes, the offense mode should be first.
  564. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  565.  
  566. sets.engaged = {
  567. range="Gjallarhorn",
  568. head="Aya. Zucchetto +1",
  569. body="Ayanmo Corazza +1",
  570. hands="Aya. Manopolas +1",
  571. legs="Aya. Cosciales +1",
  572. feet="Aya. Gambieras +1",
  573. neck="Agasaya's Collar",
  574. waist="Windbuffet Belt",
  575. left_ear="Suppanomimi",
  576. right_ear="Brutal Earring",
  577. left_ring="Mars's Ring",
  578. right_ring="Rajas Ring",
  579. back="Atheling Mantle",
  580. }
  581.  
  582. sets.engaged.Acc = set_combine(sets.engaged, {
  583. head="Aya. Zucchetto +2",
  584. hands="Gazu Bracelet +1",
  585. feet="Bihu Slippers +3",
  586. waist="Kentarch Belt +1",
  587. })
  588.  
  589. -- * DNC Subjob DW Trait: +15%
  590. -- * NIN Subjob DW Trait: +25%
  591.  
  592. -- No Magic Haste (74% DW to cap)
  593. sets.engaged.DW = {
  594. range=gear.Linos_TP,
  595. head="Volte Tiara",
  596. body="Ayanmo Corazza +2",
  597. hands="Gazu Bracelet +1",
  598. legs="Zoar Subligar +1",
  599. feet=gear.Chironic_QA_feet,
  600. neck="Bard's Charm +2",
  601. ear1="Eabani Earring", --4
  602. ear2="Suppanomimi", --5
  603. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  604. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  605. back=gear.BRD_DW_Cape, --10
  606. waist="Reiki Yotai", --7
  607. } -- 26%
  608.  
  609. sets.engaged.DW.Acc = set_combine(sets.engaged.DW, {
  610. head="Aya. Zucchetto +2",
  611. feet="Bihu Slippers +3",
  612. })
  613.  
  614. -- 15% Magic Haste (67% DW to cap)
  615. sets.engaged.DW.LowHaste = sets.engaged.DW
  616. sets.engaged.DW.Acc.LowHaste = sets.engaged.DW.Acc
  617.  
  618. -- 30% Magic Haste (56% DW to cap)
  619. sets.engaged.DW.MidHaste = sets.engaged.DW
  620. sets.engaged.DW.Acc.MidHaste = sets.engaged.DW.Acc
  621.  
  622. -- 35% Magic Haste (51% DW to cap)
  623. sets.engaged.DW.HighHaste = sets.engaged.DW
  624. sets.engaged.DW.Acc.HighHaste = sets.engaged.DW.Acc
  625.  
  626. -- 45% Magic Haste (36% DW to cap)
  627. sets.engaged.DW.MaxHaste = {
  628. range=gear.Linos_TP,
  629. head="Volte Tiara",
  630. body="Ayanmo Corazza +2",
  631. hands="Gazu Bracelet +1",
  632. legs="Zoar Subligar +1",
  633. feet=gear.Chironic_QA_feet,
  634. neck="Bard's Charm +2",
  635. ear1="Eabani Earring", --4
  636. ear2="Telos Earring",
  637. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  638. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  639. back=gear.BRD_STP_Cape,
  640. waist="Reiki Yotai", --7
  641. }
  642.  
  643. sets.engaged.DW.MaxHaste.Acc = set_combine(sets.engaged.DW.MaxHaste, {
  644. head="Aya. Zucchetto +2",
  645. feet="Bihu Slippers +3",
  646. ear1="Cessance Earring",
  647. back=gear.BRD_DW_Cape,
  648. waist="Kentarch Belt +1",
  649. })
  650.  
  651. sets.engaged.DW.MaxHastePlus = set_combine(sets.engaged.DW.MaxHaste, {ear1="Cessance Earring", back=gear.BRD_DW_Cape})
  652. sets.engaged.DW.Acc.MaxHastePlus = set_combine(sets.engaged.DW.Acc.MaxHaste, {ear1="Cessance Earring", back=gear.BRD_DW_Cape})
  653.  
  654. sets.engaged.Aftermath = {
  655. head="Volte Tiara",
  656. body="Ashera Harness",
  657. hands=gear.Telchine_STP_hands,
  658. legs="Aya. Cosciales +2",
  659. feet="Volte Spats",
  660. neck="Bard's Charm +2",
  661. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  662. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  663. back=gear.BRD_STP_Cape,
  664. }
  665.  
  666. ------------------------------------------------------------------------------------------------
  667. ---------------------------------------- Hybrid Sets -------------------------------------------
  668. ------------------------------------------------------------------------------------------------
  669.  
  670. sets.engaged.Hybrid = {
  671. neck="Loricate Torque +1", --6/6
  672. ring1="Moonlight Ring", --5/5
  673. ring2="Defending Ring", --10/10
  674. }
  675.  
  676. sets.engaged.DT = set_combine(sets.engaged, sets.engaged.Hybrid)
  677. sets.engaged.Acc.DT = set_combine(sets.engaged.Acc, sets.engaged.Hybrid)
  678.  
  679. sets.engaged.DW.DT = set_combine(sets.engaged.DW, sets.engaged.Hybrid)
  680. sets.engaged.DW.Acc.DT = set_combine(sets.engaged.DW.Acc, sets.engaged.Hybrid)
  681.  
  682. sets.engaged.DW.DT.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Hybrid)
  683. sets.engaged.DW.Acc.DT.LowHaste = set_combine(sets.engaged.DW.Acc.LowHaste, sets.engaged.Hybrid)
  684.  
  685. sets.engaged.DW.DT.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Hybrid)
  686. sets.engaged.DW.Acc.DT.MidHaste = set_combine(sets.engaged.DW.Acc.MidHaste, sets.engaged.Hybrid)
  687.  
  688. sets.engaged.DW.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Hybrid)
  689. sets.engaged.DW.Acc.DT.HighHaste = set_combine(sets.engaged.DW.Acc.HighHaste, sets.engaged.Hybrid)
  690.  
  691. sets.engaged.DW.DT.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.Hybrid)
  692. sets.engaged.DW.Acc.DT.MaxHaste = set_combine(sets.engaged.DW.Acc.MaxHaste, sets.engaged.Hybrid)
  693.  
  694. sets.engaged.DW.DT.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.Hybrid)
  695. sets.engaged.DW.Acc.DT.MaxHastePlus = set_combine(sets.engaged.DW.Acc.MaxHastePlus, sets.engaged.Hybrid)
  696.  
  697.  
  698. ------------------------------------------------------------------------------------------------
  699. ---------------------------------------- Special Sets ------------------------------------------
  700. ------------------------------------------------------------------------------------------------
  701.  
  702. sets.SongDWDuration = {main="Carnwenhan", sub="Kali"}
  703.  
  704. sets.buff.Doom = {
  705. neck="Nicander's Necklace", --20
  706. ring1={name="Eshmun's Ring", bag="wardrobe3"}, --20
  707. ring2={name="Eshmun's Ring", bag="wardrobe4"}, --20
  708. waist="Gishdubar Sash", --10
  709. }
  710.  
  711. sets.Obi = {waist="Hachirin-no-Obi"}
  712. -- sets.CP = {back="Mecisto. Mantle"}
  713. --sets.Reive = {neck="Ygnas's Resolve +1"}
  714.  
  715. sets.Carnwenhan = {main="Carnwenhan", sub="Ternion Dagger +1"}
  716. sets.Twashtar = {main="Twashtar", sub="Taming Sari"}
  717. sets.Tauret = {main="Tauret", sub="Ternion Dagger +1"}
  718. sets.Naegling = {main="Naegling", sub="Centovente"}
  719.  
  720. sets.DefaultShield = {sub="Genmei Shield"}
  721.  
  722. end
  723.  
  724.  
  725. -------------------------------------------------------------------------------------------------------------------
  726. -- Job-specific hooks for standard casting events.
  727. -------------------------------------------------------------------------------------------------------------------
  728.  
  729. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  730. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  731. function job_precast(spell, action, spellMap, eventArgs)
  732. if spell.type == 'BardSong' then
  733. --[[ Auto-Pianissimo
  734. if ((spell.target.type == 'PLAYER' and not spell.target.charmed) or (spell.target.type == 'NPC' and spell.target.in_party)) and
  735. not state.Buff['Pianissimo'] then
  736.  
  737. local spell_recasts = windower.ffxi.get_spell_recasts()
  738. if spell_recasts[spell.recast_id] < 2 then
  739. send_command('@input /ja "Pianissimo" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
  740. eventArgs.cancel = true
  741. return
  742. end
  743. end]]
  744. if spell.name == 'Honor March' then
  745. equip({range="Marsyas"})
  746. end
  747. if string.find(spell.name,'Lullaby') then
  748. if buffactive.Troubadour then
  749. equip({range="Marsyas"})
  750. elseif state.LullabyMode.value == 'Harp' and spell.english:contains('Horde') then
  751. equip({range="Daurdabla"})
  752. else
  753. equip({range="Gjallarhorn"})
  754. end
  755. end
  756. end
  757. if spellMap == 'Utsusemi' then
  758. if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
  759. cancel_spell()
  760. add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
  761. eventArgs.handled = true
  762. return
  763. elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
  764. send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
  765. end
  766. end
  767. end
  768.  
  769. function job_post_precast(spell, action, spellMap, eventArgs)
  770. if spell.type == 'WeaponSkill' then
  771. if elemental_ws:contains(spell.name) then
  772. -- Matching double weather (w/o day conflict).
  773. if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
  774. equip({waist="Hachirin-no-Obi"})
  775. -- Target distance under 1.7 yalms.
  776. elseif spell.target.distance < (1.7 + spell.target.model_size) then
  777. equip({waist="Orpheus's Sash"})
  778. -- Matching day and weather.
  779. elseif spell.element == world.day_element and spell.element == world.weather_element then
  780. equip({waist="Hachirin-no-Obi"})
  781. -- Target distance under 8 yalms.
  782. elseif spell.target.distance < (8 + spell.target.model_size) then
  783. equip({waist="Orpheus's Sash"})
  784. -- Match day or weather.
  785. elseif spell.element == world.day_element or spell.element == world.weather_element then
  786. equip({waist="Hachirin-no-Obi"})
  787. end
  788. end
  789. end
  790. end
  791.  
  792. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  793. function job_midcast(spell, action, spellMap, eventArgs)
  794. if spell.type == 'BardSong' then
  795. -- layer general gear on first, then let default handler add song-specific gear.
  796. local generalClass = get_song_class(spell)
  797. if generalClass and sets.midcast[generalClass] then
  798. equip(sets.midcast[generalClass])
  799. end
  800. if spell.name == 'Honor March' then
  801. equip({range="Marsyas"})
  802. end
  803. if string.find(spell.name,'Lullaby') then
  804. if buffactive.Troubadour then
  805. equip({range="Marsyas"})
  806. elseif state.LullabyMode.value == 'Harp' and spell.english:contains('Horde') then
  807. equip({range="Daurdabla"})
  808. equip(sets.midcast.SongStringSkill)
  809. else
  810. equip({range="Gjallarhorn"})
  811. end
  812. end
  813. end
  814. end
  815.  
  816. function job_post_midcast(spell, action, spellMap, eventArgs)
  817. if spell.type == 'BardSong' then
  818. if player.status ~= 'Engaged' and state.WeaponLock.value == false and (player.sub_job == 'DNC' or player.sub_job == 'NIN') then
  819. equip(sets.SongDWDuration)
  820. end
  821. end
  822. end
  823.  
  824. function job_aftercast(spell, action, spellMap, eventArgs)
  825. if spell.english:contains('Lullaby') and not spell.interrupted then
  826. get_lullaby_duration(spell)
  827. end
  828. if player.status ~= 'Engaged' and state.WeaponLock.value == false then
  829. check_weaponset()
  830. end
  831. end
  832.  
  833. function job_buff_change(buff,gain)
  834.  
  835. -- if buffactive['Reive Mark'] then
  836. -- if gain then
  837. -- equip(sets.Reive)
  838. -- disable('neck')
  839. -- else
  840. -- enable('neck')
  841. -- end
  842. -- end
  843.  
  844. if buff == "doom" then
  845. if gain then
  846. equip(sets.buff.Doom)
  847. send_command('@input /p Doomed.')
  848. disable('ring1','ring2','waist')
  849. else
  850. enable('ring1','ring2','waist')
  851. handle_equipping_gear(player.status)
  852. end
  853. end
  854.  
  855. end
  856.  
  857. -- Handle notifications of general user state change.
  858. function job_state_change(stateField, newValue, oldValue)
  859. if state.WeaponLock.value == true then
  860. disable('main','sub')
  861. else
  862. enable('main','sub')
  863. end
  864.  
  865. check_weaponset()
  866. end
  867.  
  868. -------------------------------------------------------------------------------------------------------------------
  869. -- User code that supplements standard library decisions.
  870. -------------------------------------------------------------------------------------------------------------------
  871.  
  872. -- Called by the 'update' self-command, for common needs.
  873. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  874. function job_handle_equipping_gear(playerStatus, eventArgs)
  875. check_gear()
  876. update_combat_form()
  877. determine_haste_group()
  878. check_moving()
  879. end
  880.  
  881. function job_update(cmdParams, eventArgs)
  882. handle_equipping_gear(player.status)
  883. end
  884.  
  885. function update_combat_form()
  886. if DW == true then
  887. state.CombatForm:set('DW')
  888. elseif DW == false then
  889. state.CombatForm:reset()
  890. end
  891. end
  892.  
  893. -- Called for direct player commands.
  894. function job_self_command(cmdParams, eventArgs)
  895. if cmdParams[1]:lower() == 'etude' then
  896. send_command('@input /ma '..state.Etude.value..' <stpc>')
  897. elseif cmdParams[1]:lower() == 'carol' then
  898. send_command('@input /ma '..state.Carol.value..' <stpc>')
  899. elseif cmdParams[1]:lower() == 'threnody' then
  900. send_command('@input /ma '..state.Threnody.value..' <stnpc>')
  901. end
  902.  
  903. gearinfo(cmdParams, eventArgs)
  904. end
  905.  
  906. -- Modify the default melee set after it was constructed.
  907. function customize_melee_set(meleeSet)
  908. if buffactive['Aftermath: Lv.3'] and player.equipment.main == "Carnwenhan" then
  909. meleeSet = set_combine(meleeSet, sets.engaged.Aftermath)
  910. end
  911.  
  912. check_weaponset()
  913.  
  914. return meleeSet
  915. end
  916.  
  917. function get_custom_wsmode(spell, action, spellMap)
  918. local wsmode
  919. if state.OffenseMode.value == 'MidAcc' or state.OffenseMode.value == 'HighAcc' then
  920. wsmode = 'Acc'
  921. end
  922.  
  923. return wsmode
  924. end
  925.  
  926. -- Modify the default idle set after it was constructed.
  927. function customize_idle_set(idleSet)
  928. -- if state.CP.current == 'on' then
  929. -- equip(sets.CP)
  930. -- disable('back')
  931. -- else
  932. -- enable('back')
  933. -- end
  934. if player.mpp < 51 then
  935. idleSet = set_combine(idleSet, sets.latent_refresh)
  936. end
  937. if state.Auto_Kite.value == true then
  938. idleSet = set_combine(idleSet, sets.Kiting)
  939. end
  940.  
  941. return idleSet
  942. end
  943.  
  944. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  945. function display_current_job_state(eventArgs)
  946. local cf_msg = ''
  947. if state.CombatForm.has_value then
  948. cf_msg = ' (' ..state.CombatForm.value.. ')'
  949. end
  950.  
  951. local m_msg = state.OffenseMode.value
  952. if state.HybridMode.value ~= 'Normal' then
  953. m_msg = m_msg .. '/' ..state.HybridMode.value
  954. end
  955.  
  956. local ws_msg = state.WeaponskillMode.value
  957.  
  958. local c_msg = state.CastingMode.value
  959.  
  960. local d_msg = 'None'
  961. if state.DefenseMode.value ~= 'None' then
  962. d_msg = state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value
  963. end
  964.  
  965. local i_msg = state.IdleMode.value
  966.  
  967. local msg = ''
  968. if state.Kiting.value then
  969. msg = msg .. ' Kiting: On |'
  970. end
  971.  
  972. add_to_chat(002, '| ' ..string.char(31,210).. 'Melee' ..cf_msg.. ': ' ..string.char(31,001)..m_msg.. string.char(31,002).. ' |'
  973. ..string.char(31,207).. ' WS: ' ..string.char(31,001)..ws_msg.. string.char(31,002).. ' |'
  974. ..string.char(31,060).. ' Magic: ' ..string.char(31,001)..c_msg.. string.char(31,002).. ' |'
  975. ..string.char(31,004).. ' Defense: ' ..string.char(31,001)..d_msg.. string.char(31,002).. ' |'
  976. ..string.char(31,008).. ' Idle: ' ..string.char(31,001)..i_msg.. string.char(31,002).. ' |'
  977. ..string.char(31,002)..msg)
  978.  
  979. eventArgs.handled = true
  980. end
  981.  
  982. -------------------------------------------------------------------------------------------------------------------
  983. -- Utility functions specific to this job.
  984. -------------------------------------------------------------------------------------------------------------------
  985.  
  986. -- Determine the custom class to use for the given song.
  987. function get_song_class(spell)
  988. -- Can't use spell.targets:contains() because this is being pulled from resources
  989. if set.contains(spell.targets, 'Enemy') then
  990. if state.CastingMode.value == 'Resistant' then
  991. return 'SongEnfeebleAcc'
  992. else
  993. return 'SongEnfeeble'
  994. end
  995. elseif state.SongMode.value == 'Placeholder' then
  996. return 'SongPlaceholder'
  997. else
  998. return 'SongEnhancing'
  999. end
  1000. end
  1001.  
  1002. function get_lullaby_duration(spell)
  1003. local self = windower.ffxi.get_player()
  1004.  
  1005. local troubadour = false
  1006. local clarioncall = false
  1007. local soulvoice = false
  1008. local marcato = false
  1009.  
  1010. for i,v in pairs(self.buffs) do
  1011. if v == 348 then troubadour = true end
  1012. if v == 499 then clarioncall = true end
  1013. if v == 52 then soulvoice = true end
  1014. if v == 231 then marcato = true end
  1015. end
  1016.  
  1017. local mult = 1
  1018.  
  1019. if player.equipment.range == 'Daurdabla' then mult = mult + 0.3 end -- change to 0.25 with 90 Daur
  1020. if player.equipment.range == "Gjallarhorn" then mult = mult + 0.4 end -- change to 0.3 with 95 Gjall
  1021. if player.equipment.range == "Marsyas" then mult = mult + 0.5 end
  1022.  
  1023. if player.equipment.main == "Carnwenhan" then mult = mult + 0.5 end -- 0.1 for 75, 0.4 for 95, 0.5 for 99/119
  1024. if player.equipment.main == "Legato Dagger" then mult = mult + 0.05 end
  1025. if player.equipment.main == "Kali" then mult = mult + 0.05 end
  1026. if player.equipment.sub == "Kali" then mult = mult + 0.05 end
  1027. if player.equipment.sub == "Legato Dagger" then mult = mult + 0.05 end
  1028. if player.equipment.neck == "Aoidos' Matinee" then mult = mult + 0.1 end
  1029. if player.equipment.neck == "Mnbw. Whistle" then mult = mult + 0.2 end
  1030. if player.equipment.neck == "Mnbw. Whistle +1" then mult = mult + 0.3 end
  1031. if player.equipment.body == "Fili Hongreline +1" then mult = mult + 0.12 end
  1032. if player.equipment.legs == "Inyanga Shalwar +1" then mult = mult + 0.15 end
  1033. if player.equipment.legs == "Inyanga Shalwar +2" then mult = mult + 0.17 end
  1034. if player.equipment.feet == "Brioso Slippers" then mult = mult + 0.1 end
  1035. if player.equipment.feet == "Brioso Slippers +1" then mult = mult + 0.11 end
  1036. if player.equipment.feet == "Brioso Slippers +2" then mult = mult + 0.13 end
  1037. if player.equipment.feet == "Brioso Slippers +3" then mult = mult + 0.15 end
  1038. if player.equipment.hands == 'Brioso Cuffs +1' then mult = mult + 0.1 end
  1039. if player.equipment.hands == 'Brioso Cuffs +2' then mult = mult + 0.1 end
  1040. if player.equipment.hands == 'Brioso Cuffs +3' then mult = mult + 0.2 end
  1041.  
  1042. --JP Duration Gift
  1043. if self.job_points.brd.jp_spent >= 1200 then
  1044. mult = mult + 0.05
  1045. end
  1046.  
  1047. if troubadour then
  1048. mult = mult * 2
  1049. end
  1050.  
  1051. if spell.en == "Foe Lullaby II" or spell.en == "Horde Lullaby II" then
  1052. base = 60
  1053. elseif spell.en == "Foe Lullaby" or spell.en == "Horde Lullaby" then
  1054. base = 30
  1055. end
  1056.  
  1057. totalDuration = math.floor(mult * base)
  1058.  
  1059. -- Job Points Buff
  1060. totalDuration = totalDuration + self.job_points.brd.lullaby_duration
  1061. if troubadour then
  1062. totalDuration = totalDuration + self.job_points.brd.lullaby_duration
  1063. -- adding it a second time if Troubadour up
  1064. end
  1065.  
  1066. if clarioncall then
  1067. if troubadour then
  1068. totalDuration = totalDuration + (self.job_points.brd.clarion_call_effect * 2 * 2)
  1069. -- Clarion Call gives 2 seconds per Job Point upgrade. * 2 again for Troubadour
  1070. else
  1071. totalDuration = totalDuration + (self.job_points.brd.clarion_call_effect * 2)
  1072. -- Clarion Call gives 2 seconds per Job Point upgrade.
  1073. end
  1074. end
  1075.  
  1076. if marcato and not soulvoice then
  1077. totalDuration = totalDuration + self.job_points.brd.marcato_effect
  1078. end
  1079.  
  1080. -- Create the custom timer
  1081. if spell.english == "Foe Lullaby II" or spell.english == "Horde Lullaby II" then
  1082. send_command('@timers c "Lullaby II ['..spell.target.name..']" ' ..totalDuration.. ' down spells/00377.png')
  1083. elseif spell.english == "Foe Lullaby" or spell.english == "Horde Lullaby" then
  1084. send_command('@timers c "Lullaby ['..spell.target.name..']" ' ..totalDuration.. ' down spells/00376.png')
  1085. end
  1086. end
  1087.  
  1088. function determine_haste_group()
  1089. classes.CustomMeleeGroups:clear()
  1090. if DW == true then
  1091. if DW_needed <= 12 then
  1092. classes.CustomMeleeGroups:append('MaxHaste')
  1093. elseif DW_needed > 12 and DW_needed <= 21 then
  1094. classes.CustomMeleeGroups:append('MaxHastePlus')
  1095. elseif DW_needed > 21 and DW_needed <= 27 then
  1096. classes.CustomMeleeGroups:append('HighHaste')
  1097. elseif DW_needed > 27 and DW_needed <= 31 then
  1098. classes.CustomMeleeGroups:append('MidHaste')
  1099. elseif DW_needed > 31 and DW_needed <= 42 then
  1100. classes.CustomMeleeGroups:append('LowHaste')
  1101. elseif DW_needed > 42 then
  1102. classes.CustomMeleeGroups:append('')
  1103. end
  1104. end
  1105. end
  1106.  
  1107. function gearinfo(cmdParams, eventArgs)
  1108. if cmdParams[1] == 'gearinfo' then
  1109. if type(tonumber(cmdParams[2])) == 'number' then
  1110. if tonumber(cmdParams[2]) ~= DW_needed then
  1111. DW_needed = tonumber(cmdParams[2])
  1112. DW = true
  1113. end
  1114. elseif type(cmdParams[2]) == 'string' then
  1115. if cmdParams[2] == 'false' then
  1116. DW_needed = 0
  1117. DW = false
  1118. end
  1119. end
  1120. if type(tonumber(cmdParams[3])) == 'number' then
  1121. if tonumber(cmdParams[3]) ~= Haste then
  1122. Haste = tonumber(cmdParams[3])
  1123. end
  1124. end
  1125. if type(cmdParams[4]) == 'string' then
  1126. if cmdParams[4] == 'true' then
  1127. moving = true
  1128. elseif cmdParams[4] == 'false' then
  1129. moving = false
  1130. end
  1131. end
  1132. if not midaction() then
  1133. job_update()
  1134. end
  1135. end
  1136. end
  1137.  
  1138. function check_moving()
  1139. if state.DefenseMode.value == 'None' and state.Kiting.value == false then
  1140. if state.Auto_Kite.value == false and moving then
  1141. state.Auto_Kite:set(true)
  1142. elseif state.Auto_Kite.value == true and moving == false then
  1143. state.Auto_Kite:set(false)
  1144. end
  1145. end
  1146. end
  1147.  
  1148. function check_gear()
  1149. if no_swap_gear:contains(player.equipment.left_ring) then
  1150. disable("ring1")
  1151. else
  1152. enable("ring1")
  1153. end
  1154. if no_swap_gear:contains(player.equipment.right_ring) then
  1155. disable("ring2")
  1156. else
  1157. enable("ring2")
  1158. end
  1159. end
  1160.  
  1161. function check_weaponset()
  1162. equip(sets[state.WeaponSet.current])
  1163. if player.sub_job ~= 'NIN' and player.sub_job ~= 'DNC' then
  1164. equip(sets.DefaultShield)
  1165. end
  1166. end
  1167.  
  1168. windower.register_event('zone change',
  1169. function()
  1170. if no_swap_gear:contains(player.equipment.left_ring) then
  1171. enable("ring1")
  1172. equip(sets.idle)
  1173. end
  1174. if no_swap_gear:contains(player.equipment.right_ring) then
  1175. enable("ring2")
  1176. equip(sets.idle)
  1177. end
  1178. end
  1179. )
  1180.  
  1181. -- Select default macro book on initial load or subjob change.
  1182. function select_default_macro_book()
  1183. set_macro_page(1, 10)
  1184. end
  1185.  
  1186. function set_lockstyle()
  1187. send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  1188. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement