Advertisement
Guest User

SCH.lua

a guest
Nov 15th, 2017
478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.27 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job. Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. --[[
  6. Custom commands:
  7. Shorthand versions for each strategem type that uses the version appropriate for
  8. the current Arts.
  9. Light Arts Dark Arts
  10. gs c scholar light Light Arts/Addendum
  11. gs c scholar dark Dark Arts/Addendum
  12. gs c scholar cost Penury Parsimony
  13. gs c scholar speed Celerity Alacrity
  14. gs c scholar aoe Accession Manifestation
  15. gs c scholar power Rapture Ebullience
  16. gs c scholar duration Perpetuance
  17. gs c scholar accuracy Altruism Focalization
  18. gs c scholar enmity Tranquility Equanimity
  19. gs c scholar skillchain Immanence
  20. gs c scholar addendum Addendum: White Addendum: Black
  21. --]]
  22.  
  23.  
  24.  
  25. -- Initialization function for this job file.
  26. function get_sets()
  27. -- Begin Kuvo code.
  28. arts = {}
  29. arts.Light = {}
  30. arts.Light.Types = {'Divine Magic','Healing Magic','Enhancing Magic','Enfeebling Magic'}
  31. arts.Dark = {}
  32. arts.Dark.Types = {'Elemental Magic','Dark Magic','Enfeebling Magic'}
  33. -- End Kuvo code.
  34.  
  35. mote_include_version = 2
  36.  
  37. -- Load and initialize the include file.
  38. include('Mote-Include.lua')
  39. end
  40.  
  41. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  42. function job_setup()
  43. info.addendumNukes = S{"Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",
  44. "Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  45.  
  46. state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
  47. update_active_strategems()
  48. end
  49.  
  50. -------------------------------------------------------------------------------------------------------------------
  51. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  52. -------------------------------------------------------------------------------------------------------------------
  53.  
  54. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  55. function user_setup()
  56. state.OffenseMode:options('None', 'Normal')
  57. state.CastingMode:options('Normal', 'Resistant', 'Burst', 'Enfeebling')
  58. state.IdleMode:options('Normal', 'PDT')
  59.  
  60.  
  61. info.low_nukes = S{"Stone", "Water", "Aero", "Fire", "Blizzard", "Thunder"}
  62. info.mid_nukes = S{"Stone II", "Water II", "Aero II", "Fire II", "Blizzard II", "Thunder II",
  63. "Stone III", "Water III", "Aero III", "Fire III", "Blizzard III", "Thunder III",
  64. "Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",}
  65. info.high_nukes = S{"Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  66.  
  67.  
  68.  
  69. send_command('bind ^` input /ma Stun <t>') --(Ctrl - `)
  70.  
  71. select_default_macro_book() --Set your default book and table on line 825
  72. end
  73.  
  74. function user_unload()
  75. send_command('unbind ^`')
  76. end
  77.  
  78.  
  79. -- Define sets and vars used by this job file.
  80. function init_gear_sets()
  81. --------------------------------------
  82. -- Start defining the sets
  83. --------------------------------------
  84.  
  85. -- Precast Sets
  86.  
  87. -- Precast sets to enhance JAs
  88. -- Input what you have for each JA below, I've input BiS
  89. -- You'll have to input these again in the buffs section starting at line 548
  90. sets.precast.JA['Tabula Rasa'] = {legs="Argute Pants +2"}
  91. sets.precast.JA['Parsimony'] = {legs="Arbatel Pants"}
  92. sets.precast.JA['Penury'] = {legs="Arbatel Pants"}
  93. sets.precast.JA['Perpetuance'] = {hands="Arbatel Bracers +1"}
  94. sets.precast.JA['Sublimation'] = {
  95. main="Siriti",
  96. head="Acad. Mortarboard",
  97. ody="Pedagogy Gown +1",
  98. --right_ear="Savant's Earring",
  99. }
  100. sets.precast.JA['Rapture'] = {head="Arbatel Bonnet +1"}
  101. sets.precast.JA['Ebullience'] = {head="Arbatel Bonnet +1"}
  102.  
  103.  
  104. -- Fast cast sets for spells
  105.  
  106. sets.precast.FC = { -- All forms of Fastcast cap at 80% do NOT us quickcast
  107. main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  108. sub="Clerisy Strap",
  109. ammo="Incantor Stone",
  110. head={ name="Merlinic Hood", augments={'"Fast Cast"+5','STR+10','"Mag.Atk.Bns."+15',}},
  111. body={ name="Merlinic Jubbah", augments={'Mag. Acc.+21 "Mag.Atk.Bns."+21','Magic burst dmg.+10%','CHR+8','Mag. Acc.+14','"Mag.Atk.Bns."+11',}},
  112. hands={ name="Telchine Gloves", augments={'"Fast Cast"+5',}},
  113. legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
  114. feet={ name="Merlinic Crackows", augments={'Mag. Acc.+17 "Mag.Atk.Bns."+17','"Fast Cast"+7','INT+6',}},
  115. neck="Loricate Torque +1",
  116. waist="Channeler's Stone",
  117. left_ear="Loquac. Earring",
  118. --right_ear="Ethereal Earring",
  119. left_ring="Prolix Ring",
  120. right_ring="Mallquis Ring",
  121. back={ name="Lugh's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+3','"Fast Cast"+10',}},
  122. }
  123.  
  124. sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {
  125. waist="Siegel Sash", -- Only piece worth getting for this set
  126. })
  127.  
  128. sets.precast.FC.Stoneskin = set_combine(sets.precast.FC['Enhancing Magic'], {
  129. --head="Umuthi Hat", -- The two I found so far for this set
  130. --legs="Doyen Pants",
  131. })
  132.  
  133. sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {-- Use when an item has more Elemental Magic Cast
  134. neck="Stoicheion Medal",
  135. body="Mallquis Saio +2",
  136. right_ear="Barkaro. Earring", -- Reduction then fast cast
  137. })
  138.  
  139. sets.precast.FC.Cure = set_combine(sets.precast.FC, { -- Same as above but for Cure Cast Time reduction
  140. back="Pahtli Cape",
  141. --legs="Doyen Pants",
  142. })
  143.  
  144. sets.precast.FC.Curaga = sets.precast.FC.Cure
  145.  
  146. sets.precast.FC.Impact = set_combine(sets.precast.FC['Elemental Magic'], { -- Equips and locks the Twilight Cloak when the Impact command is sent
  147. head=empty,
  148. body="Twilight Cloak"
  149. })
  150.  
  151. sets.precast.Klimaform = {feet="Arbatel Loafers +1"}
  152.  
  153. sets.precast.WS['Myrkr'] = { --Restores MP based on a percentage so stack Max MP
  154. --main="",
  155. --sub="",
  156. ammo="Ghastly Tathlum +1",
  157. head="Pixie Hairpin +1",
  158. body={ name="Amalric Doublet", augments={'MP+60','"Mag.Atk.Bns."+20','"Fast Cast"+3',}},
  159. hands={ name="Telchine Gloves", augments={'Enh. Mag. eff. dur. +7',}},
  160. legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
  161. feet="Arbatel Loafers +1",
  162. neck="Nodens Gorget",
  163. waist="Acuity Belt +1",
  164. left_ear="Gifted Earring",
  165. right_ear="Barkaro. Earring",
  166. left_ring="Etana Ring",
  167. right_ring="Mephitas's Ring",
  168. back="Pahtli Cape",
  169. }-- There is nothing else useful for a SCH to spend TP on
  170.  
  171.  
  172.  
  173. ---- Midcast Sets ----
  174.  
  175. sets.midcast.FastRecast = { -- Fall back set for any future missing pieces, You'll want to aim for capped Haste and Fastcast
  176. --main="",
  177. --sub="",
  178. ammo="Hasty Pinion +1",
  179. head={ name="Merlinic Hood", augments={'"Fast Cast"+5','STR+10','"Mag.Atk.Bns."+15',}},
  180. body={ name="Merlinic Jubbah", augments={'Mag. Acc.+21 "Mag.Atk.Bns."+21','Magic burst dmg.+10%','CHR+8','Mag. Acc.+14','"Mag.Atk.Bns."+11',}},
  181. hands={ name="Telchine Gloves", augments={'"Fast Cast"+5',}},
  182. legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
  183. feet={ name="Merlinic Crackows", augments={'Mag. Acc.+17 "Mag.Atk.Bns."+17','"Fast Cast"+7','INT+6',}},
  184. waist="Witful Belt",
  185. left_ear="Loquac. Earring",
  186. left_ring="Prolix Ring",
  187. back={ name="Lugh's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+3','"Fast Cast"+10',}},
  188. }
  189.  
  190. sets.midcast.Cure = { -- Cure potency is capped at 50%, Recieved at 30%
  191. main={ name="Tamaxchi", augments={'Occ. atk. twice+8','Enmity-10',}},
  192. sub="Sors Shield",
  193. ammo="Hydrocera",
  194. head="Vanya Hood",
  195. body={ name="Peda. Gown +1", augments={'Enhances "Enlightenment" effect',}},
  196. hands={ name="Telchine Gloves", augments={'"Fast Cast"+5',}},
  197. legs={ name="Vanya Slops", augments={'MP+50','"Cure" potency +7%','Enmity-6',}},
  198. feet={ name="Medium's Sabots", augments={'MP+50','MND+8','"Conserve MP"+6','"Cure" potency +3%',}},
  199. neck="Incanter's Torque",
  200. waist="Gishdubar Sash",
  201. left_ear="Flashward Earring",
  202. right_ear="Spellbr. Earring",
  203. left_ring="Ephedra Ring",
  204. right_ring="Ephedra Ring",
  205. back="Tempered Cape",
  206. }
  207.  
  208. sets.midcast.CureWithLightWeather = set_combine(sets.midcast.Cure, { --Use this set to modify Weather Effects for Cure Spells
  209. --main="",
  210. --sub="",
  211. --ammo="",
  212. --head="",
  213. --body="",
  214. --hands="",
  215. --legs="",
  216. --feet="",
  217. --neck="",
  218. --waist="",
  219. --left_ear="",
  220. --right_ear="",
  221. --left_ring="",
  222. --right_ring="",
  223. --back="",
  224. })
  225. -------------------------------------------------------------------------
  226. -- With set_combine sets do NOT leave blank fields or gear you don't have
  227. -- GearSwap will leave whatever you just happen to be wearing on and we
  228. -- want it to fall back to your sets.midcast.FastRecast set
  229. -- I've left examples with the exclusions "--" before them.
  230. -------------------------------------------------------------------------
  231.  
  232. sets.midcast.Curaga = set_combine(sets.midcast.Cure, { --Doubt you'll need this set as a SCH
  233. })
  234.  
  235. sets.midcast.Cursna = set_combine(sets.midcast.Cure, { --Cursna+ and Healing Magic Skill
  236. })
  237.  
  238. sets.midcast['Enhancing Magic'] = { -- Enh. Ma. Skill > Conserve MP
  239. --main="",
  240. --sub="",
  241. ammo="Staunch Tathlum",
  242. head="Arbatel Bonnet +1",
  243. body={ name="Peda. Gown +1", augments={'Enhances "Enlightenment" effect',}},
  244. hands="Chironic Gloves",
  245. legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
  246. feet="Regal Pumps",
  247. neck="Incanter's Torque",
  248. waist="Olympus Sash",
  249. left_ear="Calamitous Earring",
  250. right_ear="Lempo Earring",
  251. left_ring="Stikini Ring",
  252. right_ring="Stikini Ring",
  253. back="Solemnity Cape",
  254. }
  255.  
  256. sets.midcast.Duration = set_combine(sets.midcast['Enhancing Magic'],{ -- Enh. Ma. Dur. (exclusivly for set_combine, nothing will directly call this set)
  257. --main={ name="Gada", augments={'Enh. Mag. eff. dur. +6'}},
  258. main="Bolelabunga",
  259. sub="Ammurapi Shield",
  260. head={ name="Telchine Cap", augments={'Enh. Mag. eff. dur. +9',}},
  261. body={ name="Telchine Chas.", augments={'"Regen"+2','Enh. Mag. eff. dur. +10',}},
  262. hands={ name="Telchine Gloves", augments={'Enh. Mag. eff. dur. +7',}},
  263. legs={ name="Telchine Braconi", augments={'Enh. Mag. eff. dur. +8',}},
  264. feet={ name="Telchine Pigaches", augments={'Enh. Mag. eff. dur. +9',}},
  265. })
  266.  
  267. sets.midcast.Stoneskin = set_combine(sets.midcast.Duration,{
  268. neck="Nodens Gorget",
  269. waist="Siegel Sash",
  270. })
  271. -- Used to force duration onto Haste
  272. sets.midcast.Haste = set_combine(sets.midcast.Duration,{-- Fill slots not used in Duration set with Haste > Fastcast
  273. --Example
  274. ammo="Hasty Pinion +1",
  275. --neck="Voltsurge Torque",
  276. waist="Witful Belt",
  277. right_ear="Loquac. Earring",
  278. left_ring="Prolix Ring",
  279. --right_ring="Kishar Ring",
  280. })
  281.  
  282. sets.midcast.Aquaveil = set_combine(sets.midcast.Duration, { -- Aquaveil Set
  283. head="Amalric Coif",
  284. })
  285.  
  286. sets.midcast.Refresh = set_combine(sets.midcast.Duration, { -- Refresh Set
  287. head="Amalric Coif",
  288. waist="Gishdubar Sash",
  289. })
  290.  
  291. sets.midcast.Phalanx = set_combine(sets.midcast.Duration, { -- Balance potency/duration how you choose, Formula is: F = 28 + Floor( (Enhancing Magic Skill - 300.5) / 28.5)
  292. })
  293.  
  294. sets.midcast.Storm = set_combine(sets.midcast.Duration, { -- Storm Set
  295. Feet="Argute Loafers +2",
  296. })
  297.  
  298. sets.midcast.Regen = set_combine(sets.midcast.Duration,{ -- Fill with Regen Potency
  299. main="Bolelabunga",
  300. head="Arbatel Bonnet +1",
  301. back={ name="Bookworm's Cape", augments={'INT+2','MND+1','"Regen" potency+9',}},
  302. })
  303.  
  304. sets.midcast.Protect = set_combine(sets.midcast.Duration, { --Protect/Shell set
  305. left_ring="Sheltered Ring",
  306. })
  307. sets.midcast.Protectra = sets.midcast.Protect
  308. sets.midcast.Shell = sets.midcast.Protect
  309. sets.midcast.Shellra = sets.midcast.Protect
  310.  
  311. -- Custom spell classes
  312.  
  313. sets.midcast.MndEnfeebles = { -- MND/Magic Accuracy
  314. main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  315. sub="Mephitis Grip",
  316. ammo="Hydrocera",
  317. head={ name="Merlinic Hood", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','INT+10','Mag. Acc.+7','"Mag.Atk.Bns."+9',}},
  318. body={ name="Merlinic Jubbah", augments={'Mag. Acc.+21 "Mag.Atk.Bns."+21','Magic burst dmg.+10%','CHR+8','Mag. Acc.+14','"Mag.Atk.Bns."+11',}},
  319. hands="Mallquis Cuffs +1",
  320. legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
  321. feet={ name="Medium's Sabots", augments={'MP+50','MND+8','"Conserve MP"+6','"Cure" potency +3%',}},
  322. neck="Erra Pendant",
  323. waist="Rumination Sash",
  324. left_ear="Barkaro. Earring",
  325. right_ear="Gwati Earring",
  326. left_ring="Stikini Ring",
  327. right_ring="Stikini Ring",
  328. back={ name="Lugh's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+3','"Fast Cast"+10',}},
  329. }
  330.  
  331. sets.midcast.IntEnfeebles = set_combine(sets.midcast.MndEnfeebles, { -- INT/Magic Accuracy
  332. --ammo="Pemphredo Tathlum",
  333. })
  334.  
  335. sets.midcast['Dark Magic'] = {
  336. main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  337. sub="Clerisy Strap",
  338. ammo="Ghastly Tathlum +1",
  339. head="Pixie Hairpin +1",
  340. body="Jhakri Robe +2",
  341. hands="Jhakri Cuffs +2",
  342. legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}},
  343. feet={ name="Medium's Sabots", augments={'MP+50','MND+8','"Conserve MP"+6','"Cure" potency +3%',}},
  344. neck="Erra Pendant",
  345. waist="Casso Sash",
  346. left_ear="Barkaro. Earring",
  347. right_ear="Gwati Earring",
  348. left_ring="Stikini Ring",
  349. right_ring="Excelsis Ring",
  350. back={ name="Bookworm's Cape", augments={'INT+3','MND+4','Helix eff. dur. +19',}},
  351. }
  352.  
  353. sets.midcast.Drain = set_combine(sets.midcast['Dark Magic'], { -- Drain/Aspir Potency set
  354. body={ name="Merlinic Jubbah", augments={'"Mag.Atk.Bns."+3','"Drain" and "Aspir" potency +10','CHR+9','Mag. Acc.+5',}},
  355. hands={ name="Merlinic Dastanas", augments={'Mag. Acc.+25','"Drain" and "Aspir" potency +10','"Mag.Atk.Bns."+4',}},
  356. legs={ name="Merlinic Shalwar", augments={'Mag. Acc.+12 "Mag.Atk.Bns."+12','"Drain" and "Aspir" potency +10','MND+2',}},
  357. feet={ name="Merlinic Crackows", augments={'Mag. Acc.+1 "Mag.Atk.Bns."+1','"Drain" and "Aspir" potency +8','INT+9','Mag. Acc.+3','"Mag.Atk.Bns."+3',}},
  358. waist="Fucho-no-Obi",
  359. })
  360.  
  361. sets.midcast.Aspir = sets.midcast.Drain
  362.  
  363. sets.midcast.Stun = set_combine(sets.midcast['Dark Magic'], { -- Stun set, Use this to swap out Drain/Aspir Potency from your Dark
  364. }) -- set if any
  365.  
  366. sets.midcast.Kaustra = { --INT to 300 > Darkness Elemental Potency > Magic Attack Bonus
  367. main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  368. sub="Zuuxowu Grip",
  369. ammo="Ghastly Tathlum +1",
  370. head="Pixie Hairpin +1",
  371. body="Mallquis Saio +2",
  372. hands="Amalric Gages",
  373. legs="Jhakri Slops +2",
  374. feet={ name="Merlinic Crackows", augments={'Mag. Acc.+1 "Mag.Atk.Bns."+1','"Drain" and "Aspir" potency +8','INT+9','Mag. Acc.+3','"Mag.Atk.Bns."+3',}},
  375. neck="Mizu. Kubikazari",
  376. waist="Acuity Belt +1",
  377. left_ear="Friomisi Earring",
  378. right_ear="Barkaro. Earring",
  379. left_ring="Acumen Ring",
  380. right_ring="Shiva Ring",
  381. back={ name="Lugh's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+3','"Fast Cast"+10',}},
  382. }
  383.  
  384. sets.midcast['Elemental Magic'] = { -- Primary Nuke set
  385. main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  386. sub="Clerisy Strap",
  387. ammo="Ghastly Tathlum +1",
  388. head={ name="Merlinic Hood", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','INT+10','Mag. Acc.+7','"Mag.Atk.Bns."+9',}},
  389. body={ name="Merlinic Jubbah", augments={'Mag. Acc.+21 "Mag.Atk.Bns."+21','Magic burst dmg.+10%','CHR+8','Mag. Acc.+14','"Mag.Atk.Bns."+11',}},
  390. hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
  391. legs="Jhakri Slops +2",
  392. feet="Jhakri Pigaches +2",
  393. neck="Eddy Necklace",
  394. waist="Acuity Belt +1",
  395. left_ear="Friomisi Earring",
  396. right_ear="Barkaro. Earring",
  397. left_ring="Acumen Ring",
  398. right_ring="Shiva Ring",
  399. back={ name="Lugh's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+3','"Fast Cast"+10',}},
  400. }
  401.  
  402. sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'], { -- SCH equivalent to a Melee High Accuracy set
  403. --neck="Sanctity Necklace",
  404. --sub="Enki Strap",
  405. --right_ear="Strophadic Earring",
  406. })
  407.  
  408. -- Custom refinements for certain nuke tiers
  409. sets.midcast['Elemental Magic'].HighTierNuke = set_combine(sets.midcast['Elemental Magic'], { -- SCH does not get as many nuke Traits, Gifts, & JP
  410. --sub="Wizzan Grip" -- Bonuses as BLM, use this to compensate if you so choose
  411. })
  412.  
  413. sets.midcast['Elemental Magic'].HighTierNuke.Resistant = set_combine(sets.midcast['Elemental Magic'].Resistant, {
  414. --sub="Wizzan Grip"
  415. })
  416.  
  417. sets.midcast.Impact = set_combine(sets.midcast['Elemental Magic'], { -- Gearset that Impact rules call on
  418. head=empty,
  419. body="Twilight Cloak",
  420. })
  421.  
  422. sets.midcast['Elemental Magic'].Burst = { -- Magic Burst Set(Magic Burst caps at 40%, Magic Burst II Doesn't cap)
  423. main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  424. sub="Clerisy Strap",
  425. ammo="Ghastly Tathlum +1",
  426. head={ name="Merlinic Hood", augments={'Mag. Acc.+22 "Mag.Atk.Bns."+22','INT+10','Mag. Acc.+7','"Mag.Atk.Bns."+9',}},
  427. body={ name="Merlinic Jubbah", augments={'Mag. Acc.+21 "Mag.Atk.Bns."+21','Magic burst dmg.+10%','CHR+8','Mag. Acc.+14','"Mag.Atk.Bns."+11',}},
  428. hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
  429. legs={ name="Merlinic Shalwar", augments={'Mag. Acc.+24 "Mag.Atk.Bns."+24','Magic burst dmg.+5%','"Mag.Atk.Bns."+4',}},
  430. feet="Jhakri Pigaches +2",
  431. neck="Mizu. Kubikazari",
  432. waist="Acuity Belt +1",
  433. left_ear="Friomisi Earring",
  434. right_ear="Barkaro. Earring",
  435. left_ring="Locus Ring",
  436. right_ring="Mujin Band",
  437. back={ name="Lugh's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+3','"Fast Cast"+10',}},
  438. }
  439.  
  440. sets.midcast['Elemental Magic'].Helix = { -- Helix Set
  441. main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  442. sub="Zuuxowu Grip",
  443. ammo="Ghastly Tathlum +1",
  444. head={ name="Merlinic Hood", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Magic burst dmg.+10%','Mag. Acc.+15',}},
  445. body="Mallquis Saio +2",
  446. hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
  447. legs="Mallquis Trews +1",
  448. feet="Jhakri Pigaches +2",
  449. neck="Mizu. Kubikazari",
  450. waist="Acuity Belt +1",
  451. left_ear="Friomisi Earring",
  452. right_ear="Barkaro. Earring",
  453. left_ring="Locus Ring",
  454. right_ring="Mujin Band",
  455. back={ name="Lugh's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+3','"Fast Cast"+10',}},
  456. }
  457.  
  458. -- Sets to return to when not performing an action.
  459.  
  460. -- Resting sets
  461. sets.resting = { --Resting set, Would you rather have it and not need it or need it and not have it?
  462. main="Dark Staff",
  463. sub="Mensch Strap",
  464. --head="Azimuth Hood",
  465. body="Jhakri Robe +2",
  466. --hands="Bagua Mitaines",
  467. legs="Assid. Pants +1",
  468. feet="Chelona Boots",
  469. neck="Bathy Choker",
  470. --waist="Witful Belt",
  471. --left_ear="Ethereal Earring",
  472. --right_ear="Spellbr. Earring",
  473. left_ring="Sheltered Ring",
  474. right_ring="Kunaji Ring",
  475. back="Cheviot Cape",
  476. }
  477.  
  478. -- Idle sets
  479.  
  480. sets.idle = { -- Refresh, Regen, and DT
  481. main="Bolelabunga",
  482. sub="Genbu's Shield",
  483. ammo="Homiliary",
  484. head="Hike Khat +1",
  485. body="Jhakri Robe +2",
  486. hands={ name="Telchine Gloves", augments={'Mag. Evasion+21','Pet: "Regen"+3','Pet: Damage taken -3%',}},
  487. legs="Assid. Pants +1",
  488. feet="Herald's Gaiters",
  489. neck="Bathy Choker",
  490. waist="Slipor Sash",
  491. left_ear="Merman's Earring",
  492. right_ear="Flashward Earring",
  493. left_ring="Defending Ring",
  494. right_ring={ name="Dark Ring", augments={'Magic dmg. taken -4%','Phys. dmg. taken -4%',}},
  495. back="Solemnity Cape",
  496. }
  497.  
  498. sets.idle.DT = set_combine(sets.idle, { -- Swap out Refresh & Regen for additional DT
  499. --main="",
  500. --sub="",
  501. ammo="Staunch Tathlum",
  502. body="Mallquis Saio +2",
  503. neck="Loricate Torque",
  504. legs={ name="Hagondes Pants +1", augments={'Phys. dmg. taken -2%','Magic dmg. taken -3%','"Avatar perpetuation cost" -3',}},
  505. feet="Battlecast Gaiters",
  506. })
  507.  
  508. sets.idle.Town = set_combine(sets.idle, { -- Remove the "--" for the pieces you use
  509. --main="",
  510. --sub="",
  511. --ammo="",
  512. --head="",
  513. body="Councilor's Garb",
  514. --hands="",
  515. --legs="",
  516. --feet="",
  517. --neck="",
  518. --waist="",
  519. --left_ear="",
  520. --right_ear="",
  521. --left_ring="",
  522. --right_ring="",
  523. --back="",
  524. })
  525.  
  526. sets.idle.Weak = sets.idle.DT
  527.  
  528. -- Defense sets
  529.  
  530. sets.defense.PDT = sets.idle.DT
  531. sets.defense.MDT = sets.idle.DT
  532.  
  533. sets.Kiting = {feet="Herald's Gaiters"}
  534. sets.latent_refresh = {waist="Fucho-no-obi"}
  535.  
  536. -- Engaged sets
  537.  
  538. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  539. -- sets if more refined versions aren't defined.
  540. -- If you create a set with both offense and defense modes, the offense mode should be first.
  541. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  542.  
  543. -- Normal melee group
  544.  
  545. sets.engaged = { --Engaged melee set, Jhakri can be useful here
  546. main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  547. sub="Tzacab Grip",
  548. ammo="Hasty Pinion +1",
  549. head="Jhakri Coronal +2",
  550. body="Jhakri Robe +2",
  551. hands="Jhakri Cuffs +2",
  552. legs="Jhakri Slops +2",
  553. feet="Battlecast Gaiters",
  554. neck="Asperity Necklace",
  555. waist="Windbuffet Belt +1",
  556. left_ear="Mache Earring",
  557. right_ear="Brutal Earring",
  558. left_ring="Hetairoi Ring",
  559. right_ring="Petrov Ring",
  560. back="Solemnity Cape",
  561. }
  562.  
  563.  
  564.  
  565. -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  566. -- Input what you have for each JA below, I've input BiS
  567. sets.buff['Ebullience'] = {head="Arbatel Bonnet +1"}
  568. sets.buff['Rapture'] = {head="Arbatel Bonnet +1"}
  569. sets.buff['Perpetuance'] = {hands="Arbatel Bracers +1"}
  570. sets.buff['Penury'] = {legs="Arbatel Pants"}
  571. sets.buff['Parsimony'] = {legs="Arbatel Pants"}
  572. sets.buff['Celerity'] = {feet="Argute Loafers +2"}
  573. sets.buff['Alacrity'] = {feet="Argute Loafers +2"}
  574. sets.buff['Klimaform'] = {feet="Arbatel Loafers +1"}
  575. sets.buff.FullSublimation = {
  576. main="Siriti",
  577. head="Acad. Mortarboard",
  578. body="Pedagogy Gown +1",
  579. --right_ear="Savant's Earring",
  580. }
  581. sets.buff.PDTSublimation = {
  582. main="Siriti",
  583. head="Acad. Mortarboard",
  584. body="Pedagogy Gown +1",
  585. --right_ear="Savant's Earring",
  586. }
  587.  
  588. sets.Obi = {waist="Hachirin-no-Obi"}
  589.  
  590. --sets.buff['Sandstorm'] = {feet="Desert Boots"}
  591. end
  592.  
  593. -------------------------------------------------------------------------------------------------------------------
  594. -- Job-specific hooks for standard casting events.
  595. -------------------------------------------------------------------------------------------------------------------
  596.  
  597. -- Run after the general midcast() is done.
  598. function job_post_midcast(spell, action, spellMap, eventArgs)
  599. -- Begin Kuvo code.
  600. if spell.action_type == 'Magic' then
  601. local activeArt = getActiveArt()
  602.  
  603. -- Warn if magic type is not valid for active art.
  604. if activeArt ~= 'None' and T(arts[activeArt].Types):contains(spell.skill) == false then
  605. add_to_chat(8,'--------- Wrong Art Active ---------')
  606. end
  607. end
  608. -- End Kuvo code.
  609. if spell.skill == 'Elemental Magic' then
  610. if (spell.element == world.day_element or spell.element == world.weather_element) and
  611. not string.find(spell.english,'helix') then
  612. equip(sets.Obi)
  613. end
  614. end
  615. if spell.action_type == 'Magic' then
  616. apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
  617. end
  618. end
  619.  
  620. -------------------------------------------------------------------------------------------------------------------
  621. -- Job-specific hooks for non-casting events.
  622. -------------------------------------------------------------------------------------------------------------------
  623.  
  624. -- Called when a player gains or loses a buff.
  625. -- buff == buff gained or lost
  626. -- gain == true if the buff was gained, false if it was lost.
  627. function job_buff_change(buff, gain)
  628. if buff == "Sublimation: Activated" then
  629. handle_equipping_gear(player.status)
  630. end
  631. end
  632.  
  633. -- Handle notifications of general user state change.
  634. function job_state_change(stateField, newValue, oldValue)
  635. if stateField == 'Offense Mode' then
  636. if newValue == 'Normal' then
  637. disable('main','sub','range')
  638. else
  639. enable('main','sub','range')
  640. end
  641. end
  642. end
  643.  
  644. -------------------------------------------------------------------------------------------------------------------
  645. -- User code that supplements standard library decisions.
  646. -------------------------------------------------------------------------------------------------------------------
  647.  
  648. -- Custom spell mapping.
  649. function job_get_spell_map(spell, default_spell_map)
  650. if spell.action_type == 'Magic' then
  651. if default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
  652. if world.weather_element == 'Light' then
  653. return 'CureWithLightWeather'
  654. end
  655. elseif spell.skill == 'Elemental Magic' then
  656. if info.low_nukes:contains(spell.english) then
  657. return 'LowTierNuke'
  658. elseif info.mid_nukes:contains(spell.english) then
  659. return 'MidTierNuke'
  660. elseif info.high_nukes:contains(spell.english) then
  661. return 'HighTierNuke'
  662. end
  663. end
  664. end
  665. end
  666.  
  667. function customize_idle_set(idleSet)
  668. if state.Buff['Sublimation: Activated'] then
  669. if state.IdleMode.value == 'Normal' then
  670. idleSet = set_combine(idleSet, sets.buff.FullSublimation)
  671. elseif state.IdleMode.value == 'PDT' then
  672. idleSet = set_combine(idleSet, sets.buff.PDTSublimation)
  673. end
  674. end
  675.  
  676. if player.mpp < 51 then
  677. idleSet = set_combine(idleSet, sets.latent_refresh)
  678. end
  679.  
  680. return idleSet
  681. end
  682.  
  683. -- Called by the 'update' self-command.
  684. function job_update(cmdParams, eventArgs)
  685. if cmdParams[1] == 'user' and not (buffactive['light arts'] or buffactive['dark arts'] or
  686. buffactive['addendum: white'] or buffactive['addendum: black']) then
  687. if state.IdleMode.value == 'Stun' then
  688. send_command('@input /ja "Dark Arts" <me>')
  689. else
  690. send_command('@input /ja "Light Arts" <me>')
  691. end
  692. end
  693.  
  694. update_active_strategems()
  695. update_sublimation()
  696. end
  697.  
  698. -- Function to display the current relevant user state when doing an update.
  699. -- Return true if display was handled, and you don't want the default info shown.
  700. function display_current_job_state(eventArgs)
  701. display_current_caster_state()
  702. eventArgs.handled = true
  703. end
  704.  
  705. -------------------------------------------------------------------------------------------------------------------
  706. -- User code that supplements self-commands.
  707. -------------------------------------------------------------------------------------------------------------------
  708.  
  709. -- Called for direct player commands.
  710. function job_self_command(cmdParams, eventArgs)
  711. if cmdParams[1]:lower() == 'scholar' then
  712. handle_strategems(cmdParams)
  713. eventArgs.handled = true
  714. end
  715. end
  716.  
  717. -------------------------------------------------------------------------------------------------------------------
  718. -- Utility functions specific to this job.
  719. -------------------------------------------------------------------------------------------------------------------
  720.  
  721. -- Reset the state vars tracking strategems.
  722. function update_active_strategems()
  723. state.Buff['Ebullience'] = buffactive['Ebullience'] or false
  724. state.Buff['Rapture'] = buffactive['Rapture'] or false
  725. state.Buff['Perpetuance'] = buffactive['Perpetuance'] or false
  726. state.Buff['Immanence'] = buffactive['Immanence'] or false
  727. state.Buff['Penury'] = buffactive['Penury'] or false
  728. state.Buff['Parsimony'] = buffactive['Parsimony'] or false
  729. state.Buff['Celerity'] = buffactive['Celerity'] or false
  730. state.Buff['Alacrity'] = buffactive['Alacrity'] or false
  731.  
  732. state.Buff['Klimaform'] = buffactive['Klimaform'] or false
  733. end
  734.  
  735. function update_sublimation()
  736. state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
  737. end
  738.  
  739. -- Equip sets appropriate to the active buffs, relative to the spell being cast.
  740. function apply_grimoire_bonuses(spell, action, spellMap)
  741. if state.Buff.Perpetuance and spell.type =='WhiteMagic' and spell.skill == 'Enhancing Magic' then
  742. equip(sets.buff['Perpetuance'])
  743. end
  744. if state.Buff.Rapture and (spellMap == 'Cure' or spellMap == 'Curaga') then
  745. equip(sets.buff['Rapture'])
  746. end
  747. if spell.skill == 'Elemental Magic' and spellMap ~= 'ElementalEnfeeble' then
  748. if state.Buff.Ebullience and spell.english ~= 'Impact' then
  749. equip(sets.buff['Ebullience'])
  750. end
  751. if state.Buff.Immanence then
  752. equip(sets.buff['Immanence'])
  753. end
  754. if state.Buff.Klimaform and spell.element == world.weather_element then
  755. equip(sets.buff['Klimaform'])
  756. end
  757. end
  758.  
  759. if state.Buff.Penury then equip(sets.buff['Penury']) end
  760. if state.Buff.Parsimony then equip(sets.buff['Parsimony']) end
  761. if state.Buff.Celerity then equip(sets.buff['Celerity']) end
  762. if state.Buff.Alacrity then equip(sets.buff['Alacrity']) end
  763. end
  764.  
  765.  
  766. -- General handling of strategems in an Arts-agnostic way.
  767. -- Format: gs c scholar <strategem>
  768. function handle_strategems(cmdParams)
  769. -- cmdParams[1] == 'scholar'
  770. -- cmdParams[2] == strategem to use
  771.  
  772. if not cmdParams[2] then
  773. add_to_chat(123,'Error: No strategem command given.')
  774. return
  775. end
  776. local strategem = cmdParams[2]:lower()
  777.  
  778. if strategem == 'light' then
  779. if buffactive['light arts'] then
  780. send_command('input /ja "Addendum: White" <me>')
  781. elseif buffactive['addendum: white'] then
  782. add_to_chat(122,'Error: Addendum: White is already active.')
  783. else
  784. send_command('input /ja "Light Arts" <me>')
  785. end
  786. elseif strategem == 'dark' then
  787. if buffactive['dark arts'] then
  788. send_command('input /ja "Addendum: Black" <me>')
  789. elseif buffactive['addendum: black'] then
  790. add_to_chat(122,'Error: Addendum: Black is already active.')
  791. else
  792. send_command('input /ja "Dark Arts" <me>')
  793. end
  794. elseif buffactive['light arts'] or buffactive['addendum: white'] then
  795. if strategem == 'cost' then
  796. send_command('input /ja Penury <me>')
  797. elseif strategem == 'speed' then
  798. send_command('input /ja Celerity <me>')
  799. elseif strategem == 'aoe' then
  800. send_command('input /ja Accession <me>')
  801. elseif strategem == 'power' then
  802. send_command('input /ja Rapture <me>')
  803. elseif strategem == 'duration' then
  804. send_command('input /ja Perpetuance <me>')
  805. elseif strategem == 'accuracy' then
  806. send_command('input /ja Altruism <me>')
  807. elseif strategem == 'enmity' then
  808. send_command('input /ja Tranquility <me>')
  809. elseif strategem == 'skillchain' then
  810. add_to_chat(122,'Error: Light Arts does not have a skillchain strategem.')
  811. elseif strategem == 'addendum' then
  812. send_command('input /ja "Addendum: White" <me>')
  813. else
  814. add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  815. end
  816. elseif buffactive['dark arts'] or buffactive['addendum: black'] then
  817. if strategem == 'cost' then
  818. send_command('input /ja Parsimony <me>')
  819. elseif strategem == 'speed' then
  820. send_command('input /ja Alacrity <me>')
  821. elseif strategem == 'aoe' then
  822. send_command('input /ja Manifestation <me>')
  823. elseif strategem == 'power' then
  824. send_command('input /ja Ebullience <me>')
  825. elseif strategem == 'duration' then
  826. add_to_chat(122,'Error: Dark Arts does not have a duration strategem.')
  827. elseif strategem == 'accuracy' then
  828. send_command('input /ja Focalization <me>')
  829. elseif strategem == 'enmity' then
  830. send_command('input /ja Equanimity <me>')
  831. elseif strategem == 'skillchain' then
  832. send_command('input /ja Immanence <me>')
  833. elseif strategem == 'addendum' then
  834. send_command('input /ja "Addendum: Black" <me>')
  835. else
  836. add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  837. end
  838. else
  839. add_to_chat(123,'No arts has been activated yet.')
  840. end
  841. end
  842.  
  843.  
  844. -- Gets the current number of available strategems based on the recast remaining
  845. -- and the level of the sch.
  846. function get_current_strategem_count()
  847. -- returns recast in seconds.
  848. local allRecasts = windower.ffxi.get_ability_recasts()
  849. local stratsRecast = allRecasts[231]
  850.  
  851. local maxStrategems = (player.main_job_level + 10) / 20
  852.  
  853. local fullRechargeTime = 4*60
  854.  
  855. local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
  856.  
  857. return currentCharges
  858. end
  859.  
  860.  
  861. -- Select default macro book on initial load or subjob change.
  862. function select_default_macro_book()
  863. set_macro_page(1, 10)
  864. end
  865.  
  866. -- Kuvo Code
  867. function getActiveArt()
  868. if buffactive['Light Arts'] or buffactive['Addendum: White'] then
  869. return "Light"
  870. elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
  871. return "Dark"
  872. else
  873. return "None"
  874. end
  875. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement