bongarippa

DNC

Oct 26th, 2017 (edited)
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.23 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job. Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. --[[
  6. Custom commands:
  7.  
  8. gs c step
  9. Uses the currently configured step on the target, with either <t> or <stnpc> depending on setting.
  10. gs c step t
  11. Uses the currently configured step on the target, but forces use of <t>.
  12.  
  13.  
  14. Configuration commands:
  15.  
  16. gs c cycle mainstep
  17. Cycles through the available steps to use as the primary step when using one of the above commands.
  18.  
  19. gs c cycle altstep
  20. Cycles through the available steps to use for alternating with the configured main step.
  21.  
  22. gs c toggle usealtstep
  23. Toggles whether or not to use an alternate step.
  24.  
  25. gs c toggle selectsteptarget
  26. Toggles whether or not to use <stnpc> (as opposed to <t>) when using a step.
  27. --]]
  28.  
  29.  
  30. -- Initialization function for this job file.
  31. function get_sets()
  32. include('organizer-lib')
  33. mote_include_version = 2
  34.  
  35. -- Load and initialize the include file.
  36. include('Mote-Include.lua')
  37. end
  38.  
  39.  
  40. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  41. function job_setup()
  42. state.Buff['Climactic Flourish'] = buffactive['climactic flourish'] or false
  43.  
  44. state.MainStep = M{['description']='Main Step', 'Box Step', 'Quickstep', 'Feather Step', 'Stutter Step'}
  45. state.AltStep = M{['description']='Alt Step', 'Quickstep', 'Feather Step', 'Stutter Step', 'Box Step'}
  46. state.UseAltStep = M(false, 'Use Alt Step')
  47. state.SelectStepTarget = M(false, 'Select Step Target')
  48. state.IgnoreTargetting = M(false, 'Ignore Targetting')
  49.  
  50. state.CurrentStep = M{['description']='Current Step', 'Main', 'Alt'}
  51. state.SkillchainPending = M(false, 'Skillchain Pending')
  52.  
  53. determine_haste_group()
  54. end
  55.  
  56. -------------------------------------------------------------------------------------------------------------------
  57. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  58. -------------------------------------------------------------------------------------------------------------------
  59.  
  60. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  61. function user_setup()
  62. state.OffenseMode:options('Normal', 'Acc', 'Fodder')
  63. state.HybridMode:options('Normal', 'Evasion', 'PDT', 'Aminon')
  64. state.WeaponskillMode:options('Normal', 'Acc', 'Fodder', 'Attack')
  65. state.PhysicalDefenseMode:options('Evasion', 'PDT')
  66. state.IdleMode:options('Normal', 'Aminon', 'Craft')
  67.  
  68.  
  69. gear.default.weaponskill_neck = "Asperity Necklace"
  70. gear.default.weaponskill_waist = "Caudata Belt"
  71. gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
  72.  
  73. -- Additional local binds
  74. send_command('bind ^= gs c cycle mainstep')
  75. send_command('bind != gs c cycle altstep')
  76. send_command('bind ^- gs c toggle selectsteptarget')
  77. send_command('bind !- gs c toggle usealtstep')
  78. send_command('bind ^` input /ja "Chocobo Jig" <me>')
  79. send_command('bind !` input /ja "Chocobo Jig II" <me>')
  80.  
  81. send_command('lua l gearinfo')
  82.  
  83. select_default_macro_book()
  84. end
  85.  
  86.  
  87. -- Called when this job file is unloaded (eg: job change)
  88. function user_unload()
  89. send_command('unbind ^`')
  90. send_command('unbind !`')
  91. send_command('unbind ^=')
  92. send_command('unbind !=')
  93. send_command('unbind ^-')
  94. send_command('unbind !-')
  95. end
  96.  
  97. function user_unload()
  98. send_command('lua u gearinfo')
  99. end
  100.  
  101.  
  102. -- Define sets and vars used by this job file.
  103. function init_gear_sets()
  104. --------------------------------------
  105. -- Start defining the sets
  106. --------------------------------------
  107.  
  108. -- Precast Sets
  109.  
  110. -- Precast sets to enhance JAs
  111.  
  112. sets.precast.JA['No Foot Rise'] = {body="Horos Casaque +3"}
  113. sets.precast.JA['Trance'] = {head="Horos Tiara +3"}
  114. sets.precast.JA['Fan Dance'] = {hands="Horos Bangles +3"}
  115. sets.precast.JA['Saber Dance'] = {legs="Horos Tights +3"}
  116.  
  117. -- Waltz set (chr and vit)
  118. sets.precast.Waltz = {ammo="Yamarang",
  119. head="Horos Tiara +3",
  120. body="Maxixi Casaque +3",
  121. hands="Regal Gloves",
  122. legs="Horos Tights +3",
  123. feet="Maxixi Toe Shoes +2",
  124. neck="Etoile Gorget +2",
  125. waist="Chaac Belt",
  126. left_ear="Infused Earring",
  127. right_ear="Roundel Earring",
  128. left_ring="Regal Ring",
  129. right_ring="Metamor. Ring +1",
  130. back={ name="Senuna's Mantle", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Waltz" potency +10%','Mag. Evasion+15',}}}
  131.  
  132. -- Don't need any special gear for Healing Waltz.
  133. sets.precast.Waltz['Healing Waltz'] = set_combine(sets.precast.Waltz, {})
  134.  
  135. sets.precast.Samba = {head="Maxixi Tiara +3"}
  136.  
  137. sets.precast.Jig = {feet="Maxixi Toe Shoes +2",
  138. legs="Horos Tights +3"}
  139.  
  140. sets.precast.Step = {ammo="C. Palug Stone",
  141. head="Maculele Tiara +2",
  142. body="Gleti's Cuirass",
  143. hands="Maxixi Bangles +2",
  144. legs="Gleti's Breeches",
  145. feet="Horos T. Shoes +3",
  146. neck="Etoile Gorget +2",
  147. waist="Kentarch Belt +1",
  148. left_ear="Mache Earring +1",
  149. right_ear="Mache Earring +1",
  150. left_ring="Regal Ring",
  151. right_ring="Chirich Ring +1",
  152. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
  153. sets.precast.Step['Feather Step'] = {feet="Macu. Toe Sh. +2"}
  154.  
  155. sets.precast.Flourish1 = {ammo="Sapience Orb",
  156. head="Halitus Helm",
  157. body={ name="Gleti's Cuirass", augments={'Path: A',}},
  158. hands="Horos Bangles +3",
  159. legs={ name="Gleti's Breeches", augments={'Path: A',}},
  160. feet="Ahosi Leggings",
  161. neck="Warder's Charm +1",
  162. waist="Goading Belt",
  163. left_ear="Trux Earring",
  164. right_ear="Cryptic Earring",
  165. left_ring="Supershear Ring",
  166. right_ring="Eihwaz Ring",
  167. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
  168.  
  169. sets.precast.Flourish1['Violent Flourish'] = {ammo="Yamarang",
  170. head="Maculele Tiara +2",
  171. body="Macu. Casaque +2",
  172. hands="Macu. Bangles +2",
  173. legs="Maculele Tights +2",
  174. feet="Macu. Toe Sh. +2",
  175. neck="Etoile Gorget +2",
  176. waist="Skrymir Cord +1",
  177. left_ear="Crep. Earring",
  178. right_ear="Macu. Earring +1",
  179. left_ring="Stikini Ring +1",
  180. right_ring="Metamor. Ring +1",
  181. back={ name="Senuna's Mantle", augments={'CHR+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Waltz" potency +10%','Mag. Evasion+15',}}} -- magic accuracy
  182. sets.precast.Flourish1['Desperate Flourish'] = set_combine(sets.precast.Step, {}) -- acc gear
  183.  
  184. sets.precast.Flourish2 = {}
  185. sets.precast.Flourish2['Reverse Flourish'] = {hands="Macu. Bangles +2"}
  186.  
  187. sets.precast.Flourish3 = {}
  188. sets.precast.Flourish3['Striking Flourish'] = {body="Macu. Casaque +2"}
  189. sets.precast.Flourish3['Climactic Flourish'] = {head="Maculele Tiara +2"}
  190.  
  191. -- Fast cast sets for spells
  192.  
  193. sets.precast.FC = {}
  194.  
  195. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  196.  
  197.  
  198. -- Weaponskill sets
  199. -- Default set for any weaponskill that isn't any more specifically defined
  200. sets.precast.WS = {ammo="Oshasha's Treatise",
  201. head="Nyame Helm",
  202. body="Gleti's Cuirass",
  203. hands="Nyame Gauntlets",
  204. legs="Nyame Flanchard",
  205. feet="Nyame Sollerets",
  206. neck="Etoile Gorget +2",
  207. waist="Sailfi Belt +1",
  208. left_ear="Moonshade Earring",
  209. right_ear="Sherida Earring",
  210. left_ring="Regal Ring",
  211. right_ring="Cornelia's Ring",
  212. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}}
  213. sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
  214.  
  215. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  216. sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {})
  217. sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {})
  218. sets.precast.WS['Exenterator'].Fodder = set_combine(sets.precast.WS['Exenterator'], {})
  219.  
  220. sets.precast.WS['Pyrrhic Kleos'] = set_combine(sets.precast.WS, {})
  221. sets.precast.WS['Pyrrhic Kleos'].Acc = set_combine(sets.precast.WS.Acc, {})
  222.  
  223. sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {ammo="Coiste Bodhar",
  224. neck="Fotia Gorget",
  225. waist="Fotia Belt",
  226. left_ear="Mache Earring +1",
  227. right_ear="Odr Earring",
  228. left_ring="Regal Ring",
  229. right_ring="Gere Ring",
  230. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}})
  231. sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {})
  232. sets.precast.WS['Evisceration'].Attack = set_combine(sets.precast.WS['Evisceration'], {ammo="Crepuscular Pebble",
  233. hands="Gleti's Gauntlets",
  234. legs="Gleti's Breeches",
  235. waist="Kentarch Belt +1"})
  236.  
  237. sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {ammo="Coiste Bodhar",
  238. body="Nyame Mail",
  239. waist="Kentarch Belt +1",
  240. right_ear="Odr Earring",
  241. left_ring="Epaminondas's Ring",})
  242. sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {})
  243. sets.precast.WS["Rudra's Storm"].Attack = set_combine(sets.precast.WS["Rudra's Storm"], {ammo="Crepuscular Pebble",
  244. hands="Gleti's Gauntlets",
  245. legs="Gleti's Breeches",
  246. waist="Kentarch Belt +1"})
  247.  
  248. sets.precast.WS['Shark Bite'] = set_combine(sets.precast.WS, {})
  249. sets.precast.WS['Shark Bite'].Acc = set_combine(sets.precast.WS['Shark Bite'], {})
  250. sets.precast.WS['Shark Bite'].Attack = set_combine(sets.precast.WS['Shark Bite'], {ammo="Crepuscular Pebble",
  251. hands="Gleti's Gauntlets",
  252. legs="Gleti's Breeches",
  253. waist="Kentarch Belt +1"})
  254.  
  255. sets.precast.WS['Aeolian Edge'] = {ammo="Pemphredo Tathlum",
  256. head="Nyame Helm",
  257. body="Nyame Mail",
  258. hands="Nyame Gauntlets",
  259. legs="Nyame Flanchard",
  260. feet="Nyame Sollerets",
  261. neck="Baetyl Pendant",
  262. waist="Orpheus's Sash",
  263. left_ear="Moonshade Earring",
  264. right_ear="Friomisi Earring",
  265. left_ring="Epaminondas's Ring",
  266. right_ring="Cornelia's Ring",
  267. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}}
  268.  
  269. sets.precast.Skillchain = {}
  270.  
  271.  
  272. -- Midcast Sets
  273.  
  274. sets.midcast.FastRecast = {}
  275.  
  276. -- Specific spells
  277. sets.midcast.Utsusemi = {}
  278.  
  279.  
  280. -- Sets to return to when not performing an action.
  281.  
  282. -- Resting sets
  283. sets.resting = {}
  284. sets.ExtraRegen = {}
  285.  
  286.  
  287. -- Idle sets
  288.  
  289. sets.idle = {ammo="Staunch Tathlum +1",
  290. head="Gleti's Mask",
  291. body="Gleti's Cuirass",
  292. hands="Gleti's Gauntlets",
  293. legs="Gleti's Breeches",
  294. feet="Skd. Jambeaux +1",
  295. neck="Loricate Torque +1",
  296. waist="Plat. Mog. Belt",
  297. left_ear="Infused Earring",
  298. right_ear="Sanare Earring",
  299. left_ring="Gelatinous Ring +1",
  300. right_ring="Paguroidea Ring",
  301. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
  302.  
  303. sets.idle.Aminon = set_combine(sets.idle, {hands="Regal Gloves",
  304. feet="Gleti's Boots",})
  305.  
  306. sets.idle.Craft = { ammo="Staunch Tathlum +1",
  307. head="Magnifying Specs.",
  308. body="Weaver's Smock",
  309. hands="Weaver's Cuffs",
  310. legs={ name="Gleti's Breeches", augments={'Path: A',}},
  311. feet="Skd. Jambeaux +1",
  312. neck="Weaver's Torque",
  313. waist="Weaver's Belt",
  314. left_ring="Orvail Ring +1",
  315. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},}
  316.  
  317. sets.idle.Weak = set_combine(sets.idle, {})
  318.  
  319. -- Defense sets
  320.  
  321. sets.defense.Evasion = {}
  322.  
  323. sets.defense.PDT = {}
  324.  
  325. sets.defense.MDT = {}
  326.  
  327. sets.Kiting = {}
  328.  
  329. -- Engaged sets
  330.  
  331. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  332. -- sets if more refined versions aren't defined.
  333. -- If you create a set with both offense and defense modes, the offense mode should be first.
  334. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  335.  
  336. -- Normal melee group
  337. sets.engaged = {ammo="Aurgelmir Orb +1",
  338. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  339. body="Gleti's Cuirass",
  340. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  341. legs="Gleti's Breeches",
  342. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  343. neck="Etoile Gorget +2",
  344. waist="Reiki Yotai",
  345. left_ear="Suppanomimi",
  346. right_ear="Sherida Earring",
  347. left_ring="Gere Ring",
  348. right_ring="Chirich Ring +1",
  349. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
  350.  
  351. sets.engaged.Fodder = {ammo="Yamarang",
  352. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  353. body={ name="Herculean Vest", augments={'Accuracy+22','"Triple Atk."+4','DEX+5','Attack+11',}},
  354. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  355. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  356. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  357. neck="Anu Torque",
  358. waist="Reiki Yotai",
  359. left_ear="Suppanomimi",
  360. right_ear="Sherida Earring",
  361. left_ring="Epona's Ring",
  362. right_ring="Gere Ring",
  363. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}}}
  364. sets.engaged.Fodder.Evasion = {}
  365.  
  366. sets.engaged.Acc = set_combine(sets.engaged, {})
  367. sets.engaged.Evasion = set_combine(sets.engaged, {})
  368. sets.engaged.PDT = set_combine(sets.engaged, {head="Malignance Chapeau",
  369. hands={ name="Gleti's Gauntlets", augments={'Path: A',}},
  370. feet="Malignance Boots",
  371. left_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
  372. right_ring="Moonlight Ring",})
  373. sets.engaged.Acc.Evasion = set_combine(sets.engaged.Evasion, {})
  374. sets.engaged.Acc.PDT = set_combine(sets.engaged.PDT, {})
  375. sets.engaged.Aminon = set_combine(sets.engaged.PDT, {head="Gleti's Mask",
  376. hands="Regal Gloves",
  377. feet="Gleti's Boots",})
  378.  
  379.  
  380. -- Custom melee group: High Haste (2x March or Haste)
  381. sets.engaged.HighHaste = {ammo="Aurgelmir Orb +1",
  382. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  383. body="Gleti's Cuirass",
  384. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  385. legs="Gleti's Breeches",
  386. feet="Malignance Boots",
  387. neck="Etoile Gorget +2",
  388. waist="Sailfi Belt +1",
  389. left_ear="Telos Earring",
  390. right_ear="Sherida Earring",
  391. left_ring="Gere Ring",
  392. right_ring="Chirich Ring +1",
  393. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
  394.  
  395. sets.engaged.Fodder.HighHaste = set_combine(sets.engaged.HighHaste, {})
  396. sets.engaged.Fodder.Evasion.HighHaste = set_combine(sets.engaged.HighHaste, {})
  397. sets.engaged.Acc.HighHaste = set_combine(sets.engaged.HighHaste, {})
  398. sets.engaged.Evasion.HighHaste = set_combine(sets.engaged.HighHaste, {})
  399. sets.engaged.Acc.Evasion.HighHaste = set_combine(sets.engaged.HighHaste.Evasion, {})
  400. sets.engaged.PDT.HighHaste = set_combine(sets.engaged.HighHaste, {head="Malignance Chapeau",
  401. hands={ name="Gleti's Gauntlets", augments={'Path: A',}},
  402. left_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
  403. right_ring="Moonlight Ring",})
  404. sets.engaged.Acc.PDT.HighHaste = set_combine(sets.engaged.HighHaste.PDT, {})
  405.  
  406.  
  407. -- Custom melee group: Max Haste (2x March + Haste)
  408. sets.engaged.MaxHaste = {ammo="Aurgelmir Orb +1",
  409. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  410. body="Gleti's Cuirass",
  411. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  412. legs="Gleti's Breeches",
  413. feet="Malignance Boots",
  414. neck="Etoile Gorget +2",
  415. waist="Sailfi Belt +1",
  416. left_ear="Telos Earring",
  417. right_ear="Sherida Earring",
  418. left_ring="Gere Ring",
  419. right_ring="Chirich Ring +1",
  420. back={ name="Senuna's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
  421.  
  422. -- Getting Marches+Haste from Trust NPCs, doesn't cap delay.
  423. sets.engaged.Fodder.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
  424. sets.engaged.Fodder.Evasion.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
  425.  
  426. sets.engaged.Acc.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
  427. sets.engaged.Evasion.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
  428. sets.engaged.Acc.Evasion.MaxHaste = set_combine(sets.engaged.MaxHaste.Evasion, {})
  429. sets.engaged.PDT.MaxHaste = set_combine(sets.engaged.MaxHaste, {head="Malignance Chapeau",
  430. hands={ name="Gleti's Gauntlets", augments={'Path: A',}},
  431. left_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
  432. right_ring="Moonlight Ring",})
  433. sets.engaged.Acc.PDT.MaxHaste = set_combine(sets.engaged.MaxHaste.PDT, {})
  434.  
  435.  
  436.  
  437. -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  438. sets.buff['Saber Dance'] = {legs="Horos Tights +3"}
  439. sets.buff['Climactic Flourish'] = {head="Maculele Tiara +2"}
  440. end
  441.  
  442.  
  443. -------------------------------------------------------------------------------------------------------------------
  444. -- Job-specific hooks for standard casting events.
  445. -------------------------------------------------------------------------------------------------------------------
  446.  
  447. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  448. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  449. function job_precast(spell, action, spellMap, eventArgs)
  450. --auto_presto(spell)
  451. end
  452.  
  453.  
  454. function job_post_precast(spell, action, spellMap, eventArgs)
  455. if spell.type == "WeaponSkill" then
  456. if state.Buff['Climactic Flourish'] then
  457. equip(sets.buff['Climactic Flourish'])
  458. end
  459. if state.SkillchainPending.value == true then
  460. equip(sets.precast.Skillchain)
  461. end
  462. end
  463. end
  464.  
  465.  
  466. -- Return true if we handled the aftercast work. Otherwise it will fall back
  467. -- to the general aftercast() code in Mote-Include.
  468. function job_aftercast(spell, action, spellMap, eventArgs)
  469. if not spell.interrupted then
  470. if spell.english == "Wild Flourish" then
  471. state.SkillchainPending:set()
  472. send_command('wait 5;gs c unset SkillchainPending')
  473. elseif spell.type:lower() == "weaponskill" then
  474. state.SkillchainPending:toggle()
  475. send_command('wait 6;gs c unset SkillchainPending')
  476. end
  477. end
  478. end
  479.  
  480. -------------------------------------------------------------------------------------------------------------------
  481. -- Job-specific hooks for non-casting events.
  482. -------------------------------------------------------------------------------------------------------------------
  483.  
  484. -- Called when a player gains or loses a buff.
  485. -- buff == buff gained or lost
  486. -- gain == true if the buff was gained, false if it was lost.
  487. function job_buff_change(buff,gain)
  488. -- If we gain or lose any haste buffs, adjust which gear set we target.
  489. if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
  490. determine_haste_group()
  491. handle_equipping_gear(player.status)
  492. elseif buff == 'Saber Dance' or buff == 'Climactic Flourish' then
  493. handle_equipping_gear(player.status)
  494. end
  495. end
  496.  
  497.  
  498. function job_status_change(new_status, old_status)
  499. if new_status == 'Engaged' then
  500. determine_haste_group()
  501. end
  502. end
  503.  
  504.  
  505. -------------------------------------------------------------------------------------------------------------------
  506. -- User code that supplements standard library decisions.
  507. -------------------------------------------------------------------------------------------------------------------
  508.  
  509. -- Called by the default 'update' self-command.
  510. function job_update(cmdParams, eventArgs)
  511. determine_haste_group()
  512. end
  513.  
  514.  
  515. function customize_idle_set(idleSet)
  516. if player.hpp < 80 and not areas.Cities:contains(world.area) then
  517. idleSet = set_combine(idleSet, sets.ExtraRegen)
  518. end
  519.  
  520. return idleSet
  521. end
  522.  
  523. function customize_melee_set(meleeSet)
  524. if state.DefenseMode.value ~= 'None' then
  525. if buffactive['saber dance'] then
  526. meleeSet = set_combine(meleeSet, sets.buff['Saber Dance'])
  527. end
  528. if state.Buff['Climactic Flourish'] then
  529. meleeSet = set_combine(meleeSet, sets.buff['Climactic Flourish'])
  530. end
  531. end
  532.  
  533. return meleeSet
  534. end
  535.  
  536. -- Handle auto-targetting based on local setup.
  537. function job_auto_change_target(spell, action, spellMap, eventArgs)
  538. if spell.type == 'Step' then
  539. if state.IgnoreTargetting.value == true then
  540. state.IgnoreTargetting:reset()
  541. eventArgs.handled = true
  542. end
  543.  
  544. eventArgs.SelectNPCTargets = state.SelectStepTarget.value
  545. end
  546. end
  547.  
  548.  
  549. -- Function to display the current relevant user state when doing an update.
  550. -- Set eventArgs.handled to true if display was handled, and you don't want the default info shown.
  551. function display_current_job_state(eventArgs)
  552. local msg = 'Melee'
  553.  
  554. if state.CombatForm.has_value then
  555. msg = msg .. ' (' .. state.CombatForm.value .. ')'
  556. end
  557.  
  558. msg = msg .. ': '
  559.  
  560. msg = msg .. state.OffenseMode.value
  561. if state.HybridMode.value ~= 'Normal' then
  562. msg = msg .. '/' .. state.HybridMode.value
  563. end
  564. msg = msg .. ', WS: ' .. state.WeaponskillMode.value
  565.  
  566. if state.DefenseMode.value ~= 'None' then
  567. msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  568. end
  569.  
  570. if state.Kiting.value then
  571. msg = msg .. ', Kiting'
  572. end
  573.  
  574. msg = msg .. ', ['..state.MainStep.current
  575.  
  576. if state.UseAltStep.value == true then
  577. msg = msg .. '/'..state.AltStep.current
  578. end
  579.  
  580. msg = msg .. ']'
  581.  
  582. if state.SelectStepTarget.value == true then
  583. steps = steps..' (Targetted)'
  584. end
  585.  
  586. add_to_chat(122, msg)
  587.  
  588. eventArgs.handled = true
  589. end
  590.  
  591.  
  592. -------------------------------------------------------------------------------------------------------------------
  593. -- User self-commands.
  594. -------------------------------------------------------------------------------------------------------------------
  595.  
  596. -- Called for custom player commands.
  597. function job_self_command(cmdParams, eventArgs)
  598. if cmdParams[1] == 'step' then
  599. if cmdParams[2] == 't' then
  600. state.IgnoreTargetting:set()
  601. end
  602.  
  603. local doStep = ''
  604. if state.UseAltStep.value == true then
  605. doStep = state[state.CurrentStep.current..'Step'].current
  606. state.CurrentStep:cycle()
  607. else
  608. doStep = state.MainStep.current
  609. end
  610.  
  611. send_command('@input /ja "'..doStep..'" <t>')
  612. end
  613. end
  614.  
  615. -------------------------------------------------------------------------------------------------------------------
  616. -- Utility functions specific to this job.
  617. -------------------------------------------------------------------------------------------------------------------
  618.  
  619. function determine_haste_group()
  620. -- We have three groups of DW in gear: Charis body, Charis neck + DW earrings, and Patentia Sash.
  621.  
  622. -- For high haste, we want to be able to drop one of the 10% groups (body, preferably).
  623. -- High haste buffs:
  624. -- 2x Marches + Haste
  625. -- 2x Marches + Haste Samba
  626. -- 1x March + Haste + Haste Samba
  627. -- Embrava + any other haste buff
  628.  
  629. -- For max haste, we probably need to consider dropping all DW gear.
  630. -- Max haste buffs:
  631. -- Embrava + Haste/March + Haste Samba
  632. -- 2x March + Haste + Haste Samba
  633.  
  634. classes.CustomMeleeGroups:clear()
  635.  
  636. if buffactive.embrava and (buffactive.haste or buffactive.march) and buffactive['haste samba'] then
  637. classes.CustomMeleeGroups:append('MaxHaste')
  638. elseif buffactive.march == 2 and buffactive.haste and buffactive['haste samba'] then
  639. classes.CustomMeleeGroups:append('MaxHaste')
  640. elseif buffactive.embrava and (buffactive.haste or buffactive.march or buffactive['haste samba']) then
  641. classes.CustomMeleeGroups:append('HighHaste')
  642. elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
  643. classes.CustomMeleeGroups:append('HighHaste')
  644. elseif buffactive.march == 2 and (buffactive.haste or buffactive['haste samba']) then
  645. classes.CustomMeleeGroups:append('HighHaste')
  646. end
  647. end
  648.  
  649. -- Select default macro book on initial load or subjob change.
  650. function select_default_macro_book()
  651. -- Default macro set/book
  652. if player.sub_job == 'WAR' then
  653. set_macro_page(1, 9)
  654. elseif player.sub_job == 'NIN' then
  655. set_macro_page(1, 9)
  656. elseif player.sub_job == 'SAM' then
  657. set_macro_page(1, 9)
  658. else
  659. set_macro_page(1, 9)
  660. end
  661. end
  662.  
  663. -- Automatically use Presto for steps when it's available and we have less than 3 finishing moves
  664. function auto_presto(spell)
  665. if spell.type == 'Step' then
  666. local allRecasts = windower.ffxi.get_ability_recasts()
  667. local prestoCooldown = allRecasts[236]
  668. local under3FMs = not buffactive['Finishing Move 3'] and not buffactive['Finishing Move 4'] and not buffactive['Finishing Move 5']
  669.  
  670. if player.main_job_level >= 77 and prestoCooldown < 1 and under3FMs then
  671. cast_delay(1.1)
  672. send_command('@input /ja "Presto" <me>')
  673. end
  674. end
  675. end
  676.  
  677. function gearinfo(cmdParams, eventArgs)
  678. if cmdParams[1] == 'gearinfo' then
  679. if type(cmdParams[4]) == 'string' then
  680. if cmdParams[4] == 'true' then
  681. moving = true
  682. elseif cmdParams[4] == 'false' then
  683. moving = false
  684. end
  685. end
  686. if not midaction() then
  687. job_update()
  688. end
  689. end
  690. end
  691.  
  692. function check_moving()
  693. if state.DefenseMode.value == 'None' and state.Kiting.value == false then
  694. if state.Auto_Kite.value == false and moving then
  695. state.Auto_Kite:set(true)
  696. elseif state.Auto_Kite.value == true and moving == false then
  697. state.Auto_Kite:set(false)
  698. end
  699. end
  700. end
  701.  
  702. function check_gear()
  703. if no_swap_gear:contains(player.equipment.left_ring) then
  704. disable("left_ring")
  705. else
  706. enable("left_ring")
  707. end
  708. if no_swap_gear:contains(player.equipment.right_ring) then
  709. disable("right_ring")
  710. else
  711. enable("right_ring")
  712. end
  713. end
  714.  
  715.  
  716.  
Advertisement
Add Comment
Please, Sign In to add comment