Guest User

Untitled

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