Advertisement
Alistrianna

SCH_lua

Apr 16th, 2014
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.52 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Initialization function that defines sets and variables to be used.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
  6.  
  7. --[[
  8. Custom commands:
  9.  
  10. Shorthand versions for each strategem type that uses the version appropriate for
  11. the current Arts.
  12.  
  13. Light Arts Dark Arts
  14.  
  15. gs c scholar cost Penury Parsimony
  16. gs c scholar speed Celerity Alacrity
  17. gs c scholar aoe Accession Manifestation
  18. gs c scholar power Rapture Ebullience
  19. gs c scholar duration Perpetuance
  20. gs c scholar accuracy Altruism Focalization
  21. gs c scholar enmity Tranquility Equanimity
  22. gs c scholar skillchain Immanence
  23. gs c scholar addendum Addendum:White Addendum:Black
  24. --]]
  25.  
  26.  
  27.  
  28. -- Initialization function for this job file.
  29. function get_sets()
  30. -- Load and initialize the include file.
  31. include('Mote-Include.lua')
  32. end
  33.  
  34. -- Called when this job file is unloaded (eg: job change)
  35. function file_unload()
  36. if binds_on_unload then
  37. binds_on_unload()
  38. end
  39. end
  40.  
  41.  
  42. -- Define sets and vars used by this job file.
  43. function init_gear_sets()
  44. -- Default macro set/book
  45. set_macro_page(1, 17)
  46.  
  47. -- Options: Override default values
  48. options.CastingModes = {'Normal', 'Resistant'}
  49. options.OffenseModes = {'Normal'}
  50. options.DefenseModes = {'Normal'}
  51. options.WeaponskillModes = {'Normal'}
  52. options.IdleModes = {'Normal', 'PDT', 'Stun'}
  53. options.RestingModes = {'Normal'}
  54. options.PhysicalDefenseModes = {'PDT'}
  55. options.MagicalDefenseModes = {'MDT'}
  56.  
  57. state.Defense.PhysicalMode = 'PDT'
  58.  
  59. state.Buff.Sublimation = buffactive['Sublimation: Activated'] or false
  60.  
  61. update_active_strategems()
  62.  
  63. --------------------------------------
  64. -- Start defining the sets
  65. --------------------------------------
  66.  
  67. -- Precast Sets
  68.  
  69. -- Precast sets to enhance JAs
  70.  
  71. sets.precast.JA['Tabula Rasa'] = {legs="Argute Pants +2"}
  72.  
  73. sets.precast.JA['Enlightenment'] = {body="Pedagogy Gown"}
  74.  
  75.  
  76. -- Fast cast sets for spells
  77.  
  78. sets.precast.FC = {ammo="Incantor Stone",
  79. head="Nahtirah Hat",ear2="Loquacious Earring",
  80. body="Anhur Robe",hands="Gendewitha Gages",ring1="Prolix Ring",
  81. back="Swith Cape",legs="Orvail Pants +1",feet="Pedagogy Loafers"}
  82.  
  83. sets.precast.FC.EnhancingMagic = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  84.  
  85. sets.precast.FC.ElementalMagic = set_combine(sets.precast.FC, {})
  86.  
  87. sets.precast.FC.Cure = set_combine(sets.precast.FC, {body="Heka's Kalasiris",back="Pahtli Cape"})
  88.  
  89. sets.precast.FC.Curaga = sets.precast.FC.Cure
  90.  
  91. sets.precast.FC.Impact = set_combine(sets.precast.FC.ElementalMagic, {head=empty,body="Twilight Cloak"})
  92.  
  93.  
  94. -- Midcast Sets
  95.  
  96. sets.midcast.FastRecast = {ammo="Incantor Stone",
  97. head="Pedagogy Mortarboard",ear2="Loquacious Earring",
  98. body="Hedera Cotehardie",hands="Gendewitha Gages",ring1="Prolix Ring",
  99. back="Swith Cape",waist="Goading Belt",legs="",feet="Academic's Loafers"}
  100.  
  101. sets.midcast.Cure = {main="Tamaxchi",sub="Genbu's Shield",ammo="Incantor Stone",
  102. head="Nahtirah Hat",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Loquacious Earring",
  103. body="Heka's Kalasiris",hands="Bokwus Gloves",ring1="Prolix Ring",ring2="Sirona's Ring",
  104. back="Swith Cape",waist="Goading Belt",legs="Orvail Pants +1",feet="Pedagogy Loafers"}
  105.  
  106. sets.midcast.CureWithLightWeather = {main="Chatoyant Staff",sub="Achaq Grip",ammo="Incantor Stone",
  107. head="Gendewitha Caubeen",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Loquacious Earring",
  108. body="Heka's Kalasiris",hands="Bokwus Gloves",ring1="Prolix Ring",ring2="Sirona's Ring",
  109. back="Twilight Cape",waist="Korin Obi",legs="Nares Trews",feet="Pedagogy Loafers"}
  110.  
  111. sets.midcast.Curaga = sets.midcast.Cure
  112.  
  113. sets.midcast.Regen = {head="Savant's Bonnet +2"}
  114.  
  115. sets.midcast.Cursna = {
  116. neck="Malison Medallion",
  117. ring1="Ephedra Ring",ring2="Ephedra Ring",
  118. feet="Gendewitha Galoshes"}
  119.  
  120. sets.midcast.EnhancingMagic = {main="Kirin's Pole",sub="Fulcio Grip",ammo="Savant's Treatise",
  121. head="Savant's Bonnet +2",neck="Colossus's Torque",
  122. body="Anhur Robe",hands="Augur's Gloves",
  123. back="Merciful Cape",waist="Olympus Sash",legs="Scholar's Pants",feet="Rubeus Boots"}
  124.  
  125. sets.midcast.Stoneskin = set_combine(sets.midcast.EnhancingMagic, {waist="Siegel Sash"})
  126.  
  127. sets.midcast.Storm = set_combine(sets.midcast.EnhancingMagic, {feet="Pedagogy Loafers"})
  128.  
  129. sets.midcast.Protect = {ring1="Sheltered Ring"}
  130. sets.midcast.Protectra = sets.midcast.Protect
  131.  
  132. sets.midcast.Shell = {ring1="Sheltered Ring"}
  133. sets.midcast.Shellra = sets.midcast.Shell
  134.  
  135.  
  136. -- Custom spell classes
  137. sets.midcast.MndEnfeebles = {main="Atinian Staff",sub="Mephitis Grip",
  138. head="Nahtirah Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  139. body="Artsieq Jubbah",hands="Gendewitha Gages",ring1="Strendu Ring",ring2="Balrahn Ring",
  140. back="Refraction Cape",legs="Orvail Pants +1",feet="Bokwus Boots"}
  141.  
  142. sets.midcast.IntEnfeebles = {main="Atinian Staff",sub="Mephitis Grip",
  143. head="Nahtirah Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  144. body="Artsieq Jubbah",hands="Gendewitha Gages",ring1="Strendu Ring",ring2="Balrahn Ring",
  145. back="Refraction Cape",waist="Wanion Belt",legs="Orvail Pants +1",feet="Bokwus Boots"}
  146.  
  147. sets.midcast.ElementalEnfeeble = sets.midcast.IntEnfeebles
  148.  
  149. sets.midcast.DarkMagic = {main="Atinian Staff",sub="Mephitis Grip",ammo="Incantor Stone",
  150. head="Nahtirah Hat",neck="Aesir Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  151. body="Hedera Cotehardie",hands="Yaoyotl Gloves",ring1="Strendu Ring",ring2="Sangoma Ring",
  152. back="Refraction Cape",waist="Goading Belt",legs="Bokwus Slops",feet="Bokwus Boots"}
  153.  
  154. sets.midcast.Kaustra = {main="Atinian Staff",sub="Skrati Grip",ammo="Erlene's Notebook",
  155. head="Hagondes Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Friomisi Earring",
  156. body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Strendu Ring",
  157. back="Taubran Cape",waist="Wanion Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}
  158.  
  159. sets.midcast.Drain = {main="Atinian Staff",sub="Mephitis Grip",ammo="Impatiens",
  160. head="Nahtirah Hat",neck="Aesir Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  161. body="Vanir Cotehardie",hands="Gendewitha Gages",ring1="Excelsis Ring",ring2="Sangoma Ring",
  162. back="Refraction Cape",waist="Goading Belt",legs="Bokwus Slops",feet="Academic's Loafers"}
  163.  
  164. sets.midcast.Aspir = sets.midcast.Drain
  165.  
  166. sets.midcast.Stun = {main="Apamajas II",sub="Mephitis Grip",ammo="Incantor Stone",
  167. head="Nahtirah Hat",neck="Orunmila's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  168. body="Artsieq Jubbah",hands="Gendewitha Gages",ring1="Prolix Ring",ring2="Balrahn's Ring",
  169. back="Refraction Cape",waist="Goading Belt",legs="Orvail Pants +1",feet="Pedagogy Loafers"}
  170.  
  171. sets.midcast.Stun.Resistant = set_combine(sets.midcast.Stun, {main="Atinian Staff"})
  172.  
  173.  
  174. -- Elemental Magic sets are default for handling low-tier nukes.
  175.  
  176. gear.default.obi_waist = "Wanion Belt"
  177.  
  178. sets.midcast.ElementalMagic = {main="Atinian Staff",sub="Skrati Grip",ammo="Erlene's Notebook",
  179. head="Hagondes Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Friomisi Earring",
  180. body="Hagondes Coat",hands="Otomi Gloves",ring1="Balrahn's Ring",ring2="Strendu Ring",
  181. back="Taubran Cape",waist=gear.ElementalObi,legs="Hagondes Pants",feet="Gendewitha Galoshes"}
  182.  
  183. sets.midcast.ElementalMagic.Resistant = {main="Atinian Staff",sub="Skrati Grip",ammo="Erlene's Notebook",
  184. head="Hagondes Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  185. body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Balrahn's Ring",ring2="Strendu Ring",
  186. back="Taubran Cape",waist=gear.ElementalObi,legs="Hagondes Pants",feet="Bokwus Boots"}
  187.  
  188. -- Custom classes for high-tier nukes.
  189. sets.midcast.HighTierNuke = {main="Atinian Staff",sub="Skrati Grip",ammo="Erlene's Notebook",
  190. head="Hagondes Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Friomisi Earring",
  191. body="Hagondes Coat",hands="Otomi Gloves",ring1="Balrahn's Ring",ring2="Strendu Ring",
  192. back="Taubran Cape",waist=gear.ElementalObi,legs="Hagondes Pants",feet="Gendewitha Galoshes"}
  193.  
  194. sets.midcast.HighTierNuke.Resistant = {main="Atinian Staff",sub="Mephitis Grip",ammo="Erlene's Notebook",
  195. head="Hagondes Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  196. body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Strendu Ring",
  197. back="Taubran Cape",waist=gear.ElementalObi,legs="Hagondes Pants",feet="Gendewitha Galoshes"}
  198.  
  199. -- Sets for helixes
  200. sets.midcast.Helix = {main="Atinian Staff",sub="Skrati Grip",ammo="Erlene's Notebook",
  201. head="Hagondes Hat",neck="Eddy Necklace",ear1="Strophadic Earring",ear2="Friomisi Earring",
  202. body="Hagondes Coat",hands="Otomi Gloves",ring1="Icesoul Ring",ring2="Strendu Ring",
  203. back="Taubran Cape",waist="Wanion Belt",legs="Hagondes Pants",feet="Gendewitha Galoshes"}
  204.  
  205. sets.midcast.Helix.Resistant = {main="Atinian Staff",sub="Mephitis Grip",ammo="Erlene's Notebook",
  206. head="Hagondes Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  207. body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Strendu Ring",
  208. back="Taubran Cape",waist="Wanion Belt",legs="Hagondes Pants",feet="Bokwus Boots"}
  209.  
  210. sets.midcast.Impact = {main="Atinian Staff",sub="Mephitis Grip",ammo="Erlene's Notebook",
  211. head=empty,neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  212. body="Twilight Cloak",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Strendu Ring",
  213. back="Taubran Cape",waist=gear.ElementalObi,legs="Hagondes Pants",feet="Bokwus Boots"}
  214.  
  215.  
  216. -- Sets to return to when not performing an action.
  217.  
  218. -- Resting sets
  219. sets.resting = {main="Chatoyant Staff",sub="Mephitis Grip",
  220. head="Nefer Khat",neck="Wiglen Gorget",
  221. body="Heka's Kalasiris",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  222. legs="Nares Tres",feet="Serpentes Sabots"}
  223.  
  224.  
  225. -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  226.  
  227. sets.idle.Town = {main="Tamaxchi",sub="Genbu's Shield",ammo="Incantor Stone",
  228. head="Savant's Bonnet +2",neck="Wiglen Gorget",ear1="Magnetic Earring",ear2="Loquacious Earring",
  229. body="Hagondes Coat",hands="Savant's Bracers +2",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  230. back="Repulse Mantle",waist="Goading Belt",legs="Savant's Pants +2",feet="Savant's Loafers +2"}
  231.  
  232. sets.idle.Field = {main="Tamaxchi",sub="Genbu's Shield",ammo="Incantor Stone",
  233. head="Nefer Khat",neck="Wiglen Gorget",ear1="Magnetic Earring",ear2="Loquacious Earring",
  234. body="Heka's Kalasiris",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  235. back="Repulse Mantle",waist="Goading Belt",legs="Nares Trews",feet="Serpentes Sabots"}
  236.  
  237. sets.idle.Field.PDT = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Incantor Stone",
  238. head="Hagondes Hat",neck="Wiglen Gorget",ear1="Magnetic Earring",ear2="Loquacious Earring",
  239. body="Hagondes Coat",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  240. back="Repulse Mantle",waist="Goading Belt",legs="Hagondes Pants",feet="Serpentes Sabots"}
  241.  
  242. sets.idle.Field.Stun = {main="Apamajas II",sub="Mephitis Grip",ammo="Incantor Stone",
  243. head="Nahtirah Hat",neck="Orunmila's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  244. body="Artsieq Jubbah",hands="Gendewitha Gages",ring1="Prolix Ring",ring2="Balrahn's Ring",
  245. back="Refraction Cape",waist="Goading Belt",legs="Orvail Pants +1",feet="Pedagogy Loafers"}
  246.  
  247. sets.idle.Weak = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Incantor Stone",
  248. head="Nahtirah Hat",neck="Wiglen Gorget",ear1="Magnetic Earring",ear2="Loquacious Earring",
  249. body="Hagondes Coat",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  250. back="Repulse Mantle",waist="Goading Belt",legs="Nares Trews",feet="Serpentes Sabots"}
  251.  
  252. -- Defense sets
  253.  
  254. sets.defense.PDT = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Incantor Stone",
  255. head="Hagondes Hat",neck="Twilight Torque",ear1="Magnetic Earring",ear2="Loquacious Earring",
  256. body="Hagondes Coat",hands="Hagondes Cuffs",ring1="Dark Ring",ring2="Dark Ring",
  257. back="Repulse Mantle",waist="Goading Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}
  258.  
  259. sets.defense.MDT = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Incantor Stone",
  260. head="Nahtirah Hat",neck="Twilight Torque",ear1="Merman's Earring",ear2="Merman's Earring",
  261. body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Dark Ring",ring2="Minerva's Ring",
  262. back="Engulfer Cape",waist="Goading Belt",legs="Bokwus Slops",feet="Hagondes Sabots"}
  263.  
  264. sets.Kiting = {}
  265.  
  266. -- Engaged sets
  267.  
  268. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  269. -- sets if more refined versions aren't defined.
  270. -- If you create a set with both offense and defense modes, the offense mode should be first.
  271. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  272.  
  273. -- Normal melee group
  274. sets.engaged = {
  275. head="Zelus Tiara",
  276. body="Vanir Cotehardie",hands="Bokwus Gloves",ring1="Rajas Ring",
  277. waist="Goading Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}
  278.  
  279.  
  280.  
  281. -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  282. sets.buff['Ebullience'] = {head="Savant's Bonnet +2"}
  283. sets.buff['Rapture'] = {head="Savant's Bonnet +2"}
  284. sets.buff['Perpetuance'] = {hands="Savant's Bracers +2"}
  285. sets.buff['Immanence'] = {hands="Savant's Bracers +2"}
  286. sets.buff['Penury'] = {legs="Savant's Pants +2"}
  287. sets.buff['Parsimony'] = {legs="Savant's Pants +2"}
  288. sets.buff['Celerity'] = {feet="Pedagogy Loafers"}
  289. sets.buff['Alacrity'] = {feet="Pedagogy Loafers"}
  290.  
  291. sets.buff['Klimaform'] = {feet="Savant's Loafers +2"}
  292.  
  293. sets.buff.FullSublimation = {}
  294. sets.buff.PDTSublimation = {}
  295.  
  296. --sets.buff['Sandstorm'] = {feet="Desert Boots"}
  297.  
  298. addendumNukes = S{"Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",
  299. "Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  300. end
  301.  
  302. -------------------------------------------------------------------------------------------------------------------
  303. -- Job-specific hooks that are called to process player actions at specific points in time.
  304. -------------------------------------------------------------------------------------------------------------------
  305.  
  306. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  307. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  308. function job_precast(spell, action, spellMap, eventArgs)
  309. if spellMap == 'Cure' or spellMap == 'Curaga' then
  310. if world.weather_element == 'Light' then
  311. classes.CustomClass = 'CureWithLightWeather'
  312. end
  313. end
  314. end
  315.  
  316.  
  317. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  318. function job_midcast(spell, action, spellMap, eventArgs)
  319. if spell.action_type == 'Magic' then
  320. equip(sets.midcast.FastRecast)
  321. end
  322. end
  323.  
  324. -- Run after the general midcast() is done.
  325. function job_post_midcast(spell, action, spellMap, eventArgs)
  326. if spell.action_type == 'Magic' then
  327. apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
  328. end
  329. end
  330.  
  331. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  332. function job_aftercast(spell, action, spellMap, eventArgs)
  333. if not spell.interrupted then
  334. if state.Buff[spell.english] ~= nil then
  335. state.Buff[spell.english] = true
  336. end
  337. end
  338. end
  339.  
  340.  
  341. -------------------------------------------------------------------------------------------------------------------
  342. -- Customization hooks for idle and melee sets, after they've been automatically constructed.
  343. -------------------------------------------------------------------------------------------------------------------
  344.  
  345. function customize_idle_set(idleSet)
  346. if state.Buff.Sublimation then
  347. if state.IdleMode == 'Normal' then
  348. idleSet = set_combine(idleSet, sets.buff.FullSublimation)
  349. elseif state.IdleMode == 'PDT' then
  350. idleSet = set_combine(idleSet, sets.buff.PDTSublimation)
  351. end
  352. end
  353.  
  354. return idleSet
  355. end
  356.  
  357. -------------------------------------------------------------------------------------------------------------------
  358. -- General hooks for other events.
  359. -------------------------------------------------------------------------------------------------------------------
  360.  
  361. -- Called when a player gains or loses a buff.
  362. -- buff == buff gained or lost
  363. -- gain == true if the buff was gained, false if it was lost.
  364. function job_buff_change(buff, gain)
  365. if buff == "Sublimation: Activated" then
  366. state.Buff.Sublimation = gain
  367. handle_equipping_gear(player.status)
  368. elseif state.Buff[buff] ~= nil then
  369. state.Buff[buff] = gain
  370. end
  371. end
  372.  
  373.  
  374. -------------------------------------------------------------------------------------------------------------------
  375. -- User code that supplements self-commands.
  376. -------------------------------------------------------------------------------------------------------------------
  377.  
  378. -- Called for direct player commands.
  379. function job_self_command(cmdParams, eventArgs)
  380. if cmdParams[1]:lower() == 'scholar' then
  381. handle_strategems(cmdParams)
  382. eventArgs.handled = true
  383. end
  384. end
  385.  
  386.  
  387. -- Called by the 'update' self-command.
  388. function job_update(cmdParams, eventArgs)
  389. if cmdParams[1] == 'user' and not (buffactive['light arts'] or buffactive['dark arts'] or
  390. buffactive['addendum: white'] or buffactive['addendum: black']) then
  391. if state.IdleMode == 'Stun' then
  392. send_command('@input /ja "Dark Arts" <me>')
  393. else
  394. send_command('@input /ja "Light Arts" <me>')
  395. end
  396. end
  397.  
  398. update_active_strategems()
  399. end
  400.  
  401.  
  402. -- Function to display the current relevant user state when doing an update.
  403. -- Return true if display was handled, and you don't want the default info shown.
  404. function display_current_job_state(eventArgs)
  405. local defenseString = ''
  406. if state.Defense.Active then
  407. local defMode = state.Defense.PhysicalMode
  408. if state.Defense.Type == 'Magical' then
  409. defMode = state.Defense.MagicalMode
  410. end
  411.  
  412. defenseString = 'Defense: '..state.Defense.Type..' '..defMode..', '
  413. end
  414.  
  415. local meleeString = ''
  416. if state.OffenseMode == 'Normal' then
  417. meleeString = 'Melee: Weapons locked, '
  418. end
  419.  
  420. add_to_chat(122,'Casting ['..state.CastingMode..'], '..meleeString..'Idle ['..state.IdleMode..'], '..defenseString..
  421. 'Kiting: '..on_off_names[state.Kiting])
  422.  
  423. eventArgs.handled = true
  424. end
  425.  
  426. -------------------------------------------------------------------------------------------------------------------
  427. -- Utility functions specific to this job.
  428. -------------------------------------------------------------------------------------------------------------------
  429.  
  430. -- Reset the state vars tracking strategems.
  431. function update_active_strategems()
  432. state.Buff['Ebullience'] = buffactive['Ebullience'] or false
  433. state.Buff['Rapture'] = buffactive['Rapture'] or false
  434. state.Buff['Perpetuance'] = buffactive['Perpetuance'] or false
  435. state.Buff['Immanence'] = buffactive['Immanence'] or false
  436. state.Buff['Penury'] = buffactive['Penury'] or false
  437. state.Buff['Parsimony'] = buffactive['Parsimony'] or false
  438. state.Buff['Celerity'] = buffactive['Celerity'] or false
  439. state.Buff['Alacrity'] = buffactive['Alacrity'] or false
  440.  
  441. state.Buff['Klimaform'] = buffactive['Klimaform'] or false
  442. end
  443.  
  444.  
  445. -- Equip sets appropriate to the active buffs, relative to the spell being cast.
  446. function apply_grimoire_bonuses(spell, action, spellMap)
  447. if state.Buff.Perpetuance and spell.skill == 'EnhancingMagic' then
  448. equip(sets.buff['Perpetuance'])
  449. end
  450. if state.Buff.Rapture and spellMap == 'Cure' or spellMap == 'Curaga' then
  451. equip(sets.buff['Rapture'])
  452. end
  453. if spell.skill == 'ElementalMagic' and spellMap ~= 'ElementalEnfeeble' then
  454. if state.Buff.Ebullience and spell.english ~= 'Impact' then
  455. equip(sets.buff['Ebullience'])
  456. end
  457. if state.Buff.Immanence then
  458. equip(sets.buff['Immanence'])
  459. end
  460. if state.Buff.Klimaform and spell.element == world.weather_element then
  461. equip(sets.buff['Klimaform'])
  462. end
  463. end
  464.  
  465. if state.Buff.Penury then equip(sets.buff['Penury']) end
  466. if state.Buff.Parsimony then equip(sets.buff['Parsimony']) end
  467. if state.Buff.Celerity then equip(sets.buff['Celerity']) end
  468. if state.Buff.Alacrity then equip(sets.buff['Alacrity']) end
  469. end
  470.  
  471.  
  472. -- General handling of strategems in an Arts-agnostic way.
  473. -- Format: gs c scholar <strategem>
  474. function handle_strategems(cmdParams)
  475. -- cmdParams[1] == 'scholar'
  476. -- cmdParams[2] == strategem to use
  477.  
  478. if not cmdParams[2] then
  479. add_to_chat(123,'Error: No strategem command given.')
  480. return
  481. end
  482. local strategem = cmdParams[2]:lower()
  483.  
  484. if buffactive['light arts'] or buffactive['addendum: white'] then
  485. if strategem == 'cost' then
  486. send_command('@input /ja Penury <me>')
  487. elseif strategem == 'speed' then
  488. send_command('@input /ja Celerity <me>')
  489. elseif strategem == 'aoe' then
  490. send_command('@input /ja Accession <me>')
  491. elseif strategem == 'power' then
  492. send_command('@input /ja Rapture <me>')
  493. elseif strategem == 'duration' then
  494. send_command('@input /ja Perpetuance <me>')
  495. elseif strategem == 'accuracy' then
  496. send_command('@input /ja Altruism <me>')
  497. elseif strategem == 'enmity' then
  498. send_command('@input /ja Tranquility <me>')
  499. elseif strategem == 'skillchain' then
  500. add_to_chat(122,'Error: Light Arts does not have a skillchain strategem.')
  501. elseif strategem == 'addendum' then
  502. send_command('@input /ja "Addendum: White" <me>')
  503. else
  504. add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  505. end
  506. elseif buffactive['dark arts'] or buffactive['addendum: black'] then
  507. if strategem == 'cost' then
  508. send_command('@input /ja Parsimony <me>')
  509. elseif strategem == 'speed' then
  510. send_command('@input /ja Alacrity <me>')
  511. elseif strategem == 'aoe' then
  512. send_command('@input /ja Manifestation <me>')
  513. elseif strategem == 'power' then
  514. send_command('@input /ja Ebullience <me>')
  515. elseif strategem == 'duration' then
  516. add_to_chat(122,'Error: Dark Arts does not have a duration strategem.')
  517. elseif strategem == 'accuracy' then
  518. send_command('@input /ja Focalization <me>')
  519. elseif strategem == 'enmity' then
  520. send_command('@input /ja Equanimity <me>')
  521. elseif strategem == 'skillchain' then
  522. send_command('@input /ja Immanence <me>')
  523. elseif strategem == 'addendum' then
  524. send_command('@input /ja "Addendum: Black" <me>')
  525. else
  526. add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  527. end
  528. else
  529. add_to_chat(123,'No arts has been activated yet.')
  530. end
  531. end
  532.  
  533.  
  534. -- Gets the current number of available strategems based on the recast remaining
  535. -- and the level of the sch.
  536. function get_current_strategem_count()
  537. -- returns recast in seconds.
  538. local allRecasts = windower.ffxi.get_ability_recasts()
  539. local stratsRecast = allRecasts[231]
  540.  
  541. local maxStrategems
  542.  
  543. if player.main_job_level >= 90 then
  544. maxStrategems = 5
  545. elseif player.main_job_level >= 70 then
  546. maxStrategems = 4
  547. elseif player.main_job_level >= 50 then
  548. maxStrategems = 3
  549. elseif player.main_job_level >= 30 then
  550. maxStrategems = 2
  551. elseif player.main_job_level >= 10 then
  552. maxStrategems = 1
  553. else
  554. maxStrategems = 0
  555. end
  556.  
  557. local fullRechargeTime = 4*60
  558.  
  559. local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
  560.  
  561. return currentCharges
  562. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement