Advertisement
Guest User

Untitled

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