midash

Yellowbear_SCH

Mar 5th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.89 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job. Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. --[[
  6. Custom commands:
  7.  
  8. Shorthand versions for each strategem type that uses the version appropriate for
  9. the current Arts.
  10.  
  11. Light Arts Dark Arts
  12.  
  13. gs c scholar light Light Arts/Addendum
  14. gs c scholar dark Dark Arts/Addendum
  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. include('organizer-lib')
  26.  
  27.  
  28. -- Initialization function for this job file.
  29. function get_sets()
  30. mote_include_version = 2
  31.  
  32. -- Load and initialize the include file.
  33. include('Mote-Include.lua')
  34. end
  35.  
  36. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  37. function job_setup()
  38. info.addendumNukes = S{"Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",
  39. "Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  40.  
  41. state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
  42. update_active_strategems()
  43. end
  44.  
  45. -------------------------------------------------------------------------------------------------------------------
  46. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  47. -------------------------------------------------------------------------------------------------------------------
  48.  
  49. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  50. function user_setup()
  51. state.OffenseMode:options('None', 'Normal')
  52. state.CastingMode:options('Normal', 'Resistant')
  53. state.IdleMode:options('Normal', 'PDT')
  54.  
  55. state.MagicBurst = M(false, 'Magic Burst')
  56. state.ArtifactBody = M(false, 'Use AF Body')
  57. state.Kiting = M(false, 'Use Heralds Gaiters')
  58.  
  59. info.low_nukes = S{"Stone", "Water", "Aero", "Fire", "Blizzard", "Thunder"}
  60. spell_maps = "Helix"
  61. info.mid_nukes = S{"Stone II", "Water II", "Aero II", "Fire II", "Blizzard II", "Thunder II",
  62. "Stone III", "Water III", "Aero III", "Fire III", "Blizzard III", "Thunder III",
  63. "Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",}
  64. info.high_nukes = S{"Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  65.  
  66. gear.macc_hagondes = {name="Hagondes Cuffs +1", augments={'Phys. dmg. taken -3%','Magic dmg. taken -4%','Mag. Acc.+20'}}
  67.  
  68. -- Additional local binds
  69. send_command('bind ^` gs c toggle Kiting') -- Control ` turns AF body on and off
  70. send_command('bind f9 input /equip main "Akademos"; input /equip sub "Niobid Strap"; gs disable main; gs disable sub;') -- F9 Locks your staff and grip slots so you wont lose TP
  71. send_command('bind !` gs c toggle MagicBurst') -- Alt ` turns magic burst set on and off
  72. send_command('bind !f9 gs enable main; gs enable sub;') -- Alt F9 enables staff and grip , so other weapons/grip can swap
  73. send_command('bind f10 gs c set DefenseMode Physical') -- F10 turns PDT gear on, after spells/JAs you will return to PDT set automatically
  74. send_command('bind f11 gs c set DefenseMode Magical') -- F11 turns MDT gear on, same as above for PDT
  75. send_command('bind ^f11 gs c cycle CastingMode') -- Control F11 changes your casting mode between normal and resistant (magic accuracy)
  76. send_command('bind f12 gs c update user') -- F12 forces an update (gear changes and other file options), also displays some current info
  77. send_command('bind ^f12 gs c cycle IdleMode') -- Control F12 changes idle mode between idle and idle PDT, you shouldn't need to use this
  78. send_command('bind !f12 gs c reset DefenseMode') -- Alt F12 clears your PDT or MDT and turns you to normal idle sets
  79.  
  80. send_command('bind ^- gs c toggle selectnpctargets')
  81. send_command('bind ^= gs c cycle pctargetmode')
  82.  
  83.  
  84. select_default_macro_book()
  85.  
  86. end
  87.  
  88. function user_unload()
  89. send_command('unbind ^`')
  90. send_command('unbind !`')
  91. end
  92.  
  93.  
  94. -- Define sets and vars used by this job file.
  95. function init_gear_sets()
  96. --------------------------------------
  97. -- Start defining the sets
  98. --------------------------------------
  99. organizer_items = {
  100. echos="Echo Drops",
  101. remedy="Remedy",
  102. Crepe="Pear Crepe",
  103. }
  104. -- Precast Sets
  105. sets.precast.WS['Myrkr'] = {ammo="Ghastly Tathlum",
  106. head="Merlinic Hood",neck="Fotia Gorget",ear1="Influx Earring",ear2="Moonshade Earring",
  107. body="Helios Jacket",hands="Otomi Gloves",ring1="Sangoma Ring",ring2="Fenrir Ring +1",
  108. back="Pahtli Cape",waist="Fotia Belt",legs="Merlinic Shalwar",feet="Regal Pumps +1"}
  109. -- Precast sets to enhance JAs
  110.  
  111. sets.precast.JA['Tabula Rasa'] = {legs="Pedagogy Pants"}
  112.  
  113.  
  114. -- Fast cast sets for spells
  115.  
  116. sets.precast.FC = {main="Marin Staff",sub="Vivid Strap",ammo="Impatiens",
  117. head="Nahtirah Hat",neck="Orunmila's Torque",ear2="Loquacious Earring",
  118. body="Vanir Cotehardie",hands="Gende. Gages +1",ring1="Lebeche Ring",ring2="Weather. Ring",
  119. back="Swith Cape +1",waist="Witful Belt",legs="Psycloth Lappas",feet="Regal Pumps +1"}
  120.  
  121. sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  122.  
  123. sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {ear1="Barkarole Earring",neck="Stoicheion Medal"})
  124.  
  125. sets.precast.FC.Cure = set_combine(sets.precast.FC, {body="Heka's Kalasiris",back="Pahtli Cape"})
  126.  
  127. sets.precast.FC.Curaga = sets.precast.FC.Cure
  128.  
  129. sets.precast.FC.Impact = set_combine(sets.precast.FC['Elemental Magic'], {head=empty,body="Twilight Cloak"})
  130.  
  131. sets.precast.Stoneskin = set_combine(sets.precast.FC['Enhancing Magic'], {head="Umuthi Hat"})
  132.  
  133. -- Midcast Sets
  134.  
  135. sets.midcast.FastRecast = {ammo="Incantor Stone",
  136. head="Nahtirah Hat",neck="Orunmila's Torque",ear1="Gifted Earring",ear2="Loquacious Earring",
  137. body="Vanir Cotehardie",hands="Amalric Gages",ring1="Prolix Ring",ring2="Weather. Ring",
  138. back="Swith Cape +1",waist="Goading Belt",legs="Psycloth Lappas",feet="Regal Pumps +1"}
  139.  
  140. sets.midcast.Cure = {main="Tamaxchi",sub="Sors Shield",ammo="Oreiad's Tathlum",
  141. head="Gende. Caubeen +1",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Novia Earring",
  142. body="Gendewitha Bliaut +1",hands="Amalric Gages",ring1="Weather. Ring",ring2="Sirona's Ring",
  143. back="Tempered Cape +1",waist="Bishop's Sash",legs="Perdition Slops",feet="Peda. Loafers +1"}
  144.  
  145. sets.midcast.CureWithLightWeather = {main="Chatoyant Staff",sub="Achaq Grip",ammo="Oreiad's Tathlum",
  146. head="Gende. Caubeen +1",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Novia Earring",
  147. body="Gendewitha Bliaut +1",hands="Bokwus Gloves",ring1="Weather. Ring",ring2="Sirona's Ring",
  148. back="Tempered Cape +1",waist="Bishop's Sash",legs="Perdition Slops",feet="Peda. Loafers +1"}
  149.  
  150. sets.midcast.Curaga = sets.midcast.Cure
  151.  
  152. sets.midcast.Regen = {main="Bolelabunga",head="Savant's Bonnet +2",body="Telchine Chas.",back="Bookworm's Cape"}
  153.  
  154. sets.midcast.Cursna = {
  155. neck="Debilis Medallion",ear1="Beatific Earring",ear2="Healing Earring",
  156. hands="Hieros Mittens",ring1="Haoma's Ring",ring2="Sirona's Ring",
  157. back="Tempered Cape +1",waist="Bishop's Sash",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  158.  
  159. sets.midcast['Enhancing Magic'] = {ammo="Savant's Treatise",
  160. head="Telchine Cap",neck="Colossus's Torque",ear1="Andoaa Earring",ear2="Gifted Earring",
  161. body="Telchine Chas.",hands="Ayao's Gages",
  162. back="Merciful Cape",waist="Olympus Sash",legs="Shedir Seraweels", feet="Regal Pumps +1"}
  163.  
  164. sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {head="Umuthi Hat",waist="Siegel Sash"})
  165.  
  166. sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {main="Vadose Rod",legs="Shedir Seraweels"})
  167.  
  168. sets.midcast.Storm = set_combine(sets.midcast['Enhancing Magic'], {feet="Pedagogy Loafers +1"})
  169.  
  170. sets.midcast.Protect = {ring1="Sheltered Ring"}
  171. sets.midcast.Protectra = sets.midcast.Protect
  172.  
  173. sets.midcast.Shell = {ring1="Sheltered Ring"}
  174. sets.midcast.Shellra = sets.midcast.Shell
  175.  
  176.  
  177. -- Custom spell classes
  178. sets.midcast.MndEnfeebles = {main="Lehbrailg +2",sub="Mephitis Grip",range="Aureole",
  179. head="Befouled Crown",neck="Weike Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  180. body="Vanya Robe",hands="Lurid Mitts",ring1="Weather. Ring",ring2="Leviathan Ring",
  181. back="Refraction Cape",waist="Rumination Sash",legs="Psycloth Lappas",feet="Artsieq Boots"}
  182.  
  183. sets.midcast.IntEnfeebles = {main="Akademos",sub="Mephitis Grip",range="Ghastly Tathlum",
  184. head="Befouled Crown",neck="Weike Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  185. body="Vanya Robe",hands="Lurid Mitts",ring1="Weather. Ring",ring2="Sangoma Ring",
  186. back="Refraction Cape",waist="Yamabuki-no-obi",legs="Psycloth Lappas",feet="Umbani Boots"}
  187.  
  188. sets.midcast.ElementalEnfeeble = sets.midcast.IntEnfeebles
  189.  
  190. sets.midcast['Dark Magic'] = {main="Akademos",sub="Mephitis Grip",range="Ghastly Tathlum",
  191. head="Nahtirah Hat",neck="Weike Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  192. body="Vanya Robe",hands="Lurid Mitts",ring1="Weather. Ring",ring2="Sangoma Ring",
  193. back="Bookworm's Cape",waist="Ninurta's Sash",legs="Psycloth Lappas",feet="Umbani Boots"}
  194.  
  195. sets.midcast.Kaustra = {main="Akademos",sub="Niobid Strap",ammo="Ghastly Tathlum",
  196. head="Hagondes Hat +1",neck="Eddy Necklace",ear1="Strophadic Earring",ear2="Friomisi Earring",
  197. body="Hagondes Coat +1",hands="Amalric Gages",ring1="Shiva Ring +1",ring2="Acumen Ring",
  198. back="Bookworm's Cape",waist="Yamabuki-no-obi",legs="Hagondes Pants +1",feet="Umbani Boots"}
  199.  
  200. sets.midcast.Drain = {main="Marin Staff",sub="Mephitis Grip",range="Ghastly Tathlum",
  201. head="Befouled Crown",neck="Weike Torque",ear1="Gwati Earring",ear2="Hirudinea Earring",
  202. body="Vanya Robe",hands="Lurid Mitts",ring1="Weather. Ring",ring2="Sangoma Ring",
  203. back="Bookworm's Cape",waist="Fucho-no-Obi",legs="Psycloth Lappas",feet="Umbani Boots"}
  204.  
  205. sets.midcast.Aspir = sets.midcast.Drain
  206.  
  207. sets.midcast.Stun = {main="Lehbrailg +2",sub="Mephitis Grip",ammo="Hasty Pinion +1",
  208. head="Nahtirah Hat",neck="Orunmila's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  209. body="Vanya Robe",hands="Amalric Gages",ring1="Prolix Ring",ring2="Sangoma Ring",
  210. back="Refraction Cape",waist="Ninurta's Sash",legs="Psycloth Lappas",feet="Regal Pumps +1"}
  211.  
  212. sets.midcast.Stun.Resistant = set_combine(sets.midcast.Stun, {main="Lehbrailg +2"})
  213.  
  214.  
  215. -- Elemental Magic sets are default for handling low-tier nukes.
  216. sets.midcast['Elemental Magic'] = {main="Akademos",sub="Niobid Strap",ammo="Ghastly Tathlum",
  217. head="Merlinic Hood",neck="Eddy Necklace",ear1="Barkarole Earring",ear2="Friomisi Earring",
  218. body="Witching Robe",hands="Helios Gloves",ring1="Shiva Ring +1",ring2="Acumen Ring",
  219. back="Bookworm's Cape",waist="Yamabuki-no-Obi",legs="Merlinic Shalwar",feet="Amalric Nails"}
  220.  
  221. sets.midcast['Elemental Magic'].Resistant = {main="Akademos",sub="Niobid Strap",ammo="Ghastly Tathlum",
  222. head="Merlinic Hood",neck="Eddy Necklace",ear1="Strophadic Earring",ear2="Friomisi Earring",
  223. body="Witching Robe",hands="Amalric Gages",ring1="Shiva Ring +1",ring2="Acumen Ring",
  224. back="Bookworm's Cape",waist="Hachirin-no-Obi",legs="Merlinic Shalwar",feet="Amalric Nails"}
  225.  
  226. sets.midcast['Elemental Magic'].HelixNuke = {main="Akademos",sub="Niobid Strap",ammo="Ghastly Tathlum",
  227. head="Merlinic Hood",neck="Eddy Necklace",ear1="Crematio Earring",ear2="Friomisi Earring",
  228. body="Witching Robe",hands="Amalric Gages",ring1="Shiva Ring +1",ring2="Shiva Ring",
  229. back="Bookworm's Cape",waist="Yamabuki-no-Obi",legs="Merlinic Shalwar",feet="Amalric Nails"}
  230.  
  231. -- Custom refinements for certain nuke tiers
  232. sets.midcast['Elemental Magic'].HighTierNuke = set_combine(sets.midcast['Elemental Magic'], {sub="Niobid Strap"})
  233.  
  234. sets.midcast['Elemental Magic'].HighTierNuke.Resistant = set_combine(sets.midcast['Elemental Magic'].Resistant, {sub="Niobid Strap"})
  235.  
  236. sets.midcast.Impact = {main="Akademos",sub="Mephitis Grip",ammo="Ghastly Tathlum",
  237. head=empty,neck="Eddy Necklace",ear1="Barkarole Earring",ear2="Friomisi Earring",
  238. body="Twilight Cloak",hands="Amalric Gages",ring1="Shiva Ring +1",ring2="Weather. Ring",
  239. back="Bookworm's Cape",waist="Yamabuki-no-obi",legs="Merlinic Shalwar",feet="Amalric Nails"}
  240.  
  241. sets.af_body = {}
  242.  
  243.  
  244. -- Sets to return to when not performing an action.
  245.  
  246. -- Resting sets
  247. sets.resting = {main="Akademos",sub="Oneiros Grip",
  248. head=empty,neck="Wiglen Gorget",
  249. body="Respite Cloak",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  250. waist="Austerity Belt",legs="Assiduity Pants +1",feet="Serpentes Sabots"}
  251.  
  252.  
  253. -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  254.  
  255. sets.idle.Town = {main="Akademos",sub="Oneiros Grip",ammo="Ghastly Tathlum",
  256. neck="Loricate Torque +1",ear1="Loquac. Earring",ear2="Moonshade Earring",
  257. head='Befouled Crown',body="Witching Robe",hands="Amalric Gages",ring1="Dark Ring",ring2="Dark Ring",
  258. back="Kumbira Cape",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  259.  
  260. sets.idle.Field = {main="Akademos",sub="Oneiros Grip",ammo="Homiliary",
  261. neck="Wiglen Gorget",ear1="Infused Earring",ear2="Dawn Earring",
  262. head='Befouled Crown',body="Witching Robe",
  263. hands="Serpentes Cuffs",ring1="Dark Ring",ring2="Dark Ring",
  264. back="Kumbira Cape",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Serpentes Sabots"}
  265.  
  266. sets.idle.Field.PDT = {main="Terra's Staff",sub="Oneiros Grip",ammo="Homiliary",
  267. neck="Loricate Torque +1",ear1="Black Earring",ear2="Moonshade Earring",
  268. head='Befouled Crown',body="Witching Robe",hands="Amalric Gages",ring1="Dark Ring",ring2="Dark Ring",
  269. back="Repulse Mantle",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  270.  
  271. sets.idle.Field.Stun = {main="Lehbrailg +2",sub="Mephitis Grip",ammo="Homiliary",
  272. head="Nahtirah Hat",neck="Orunmila's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  273. body="Ischemia Chasu.",hands="Amalric Gages",ring1="Prolix Ring",ring2="Sangoma Ring",
  274. back="Refraction Cape",waist="Ninurta's Sash",legs="Psycloth Lappas",feet="Regal Pumps +1"}
  275.  
  276. sets.idle.Weak = {main="Akademos",sub="Oneiros Grip",ammo="Homiliary",
  277. neck="Loricate Torque +1",ear1="Black Earring",ear2="Moonshade Earring",
  278. head='Befouled Crown',body="Witching Robe",hands="Amalric Gages",ring1="Dark Ring",ring2="Dark Ring",
  279. back="Repulse Mantle",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  280.  
  281. -- defense sets
  282.  
  283. sets.defense.PDT = {main="Terra's Staff",sub="Oneiros Grip",ammo="Ghastly Tathlum",
  284. neck="Loricate Torque +1",ear1="Black Earring",ear2="Moonshade Earring",
  285. body="Respite Cloak",hands="Amalric Gages",ring1="Dark Ring",ring2="Dark Ring",
  286. back="Repulse Mantle",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  287.  
  288. sets.defense.MDT = {main="Terra's Staff",sub="Oneiros Grip",ammo="Ghastly Tathlum",
  289. neck="Loricate Torque +1",ear1="Black Earring",ear2="Moonshade Earring",
  290. body="Respite Cloak",hands="Amalric Gages",ring1="Dark Ring",ring2="Dark Ring",
  291. back="Repulse Mantle",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  292.  
  293. sets.Kiting = {feet="Herald's Gaiters"}
  294.  
  295. sets.latent_refresh = {waist="Fucho-no-obi"}
  296.  
  297. sets.magic_burst = {main="Akademos",sub="Niobid Strap",
  298. head="Merlinic Hood",neck="Mizukage-no-Kubikazari",
  299. body="Witching Robe",hands="Amalric Gages",
  300. ring1="Locus Ring",ring2="Mujin Band",
  301. feet="Helios Boots",back="Toro Cape"}
  302.  
  303. -- Engaged sets
  304.  
  305. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  306. -- sets if more refined versions aren't defined.
  307. -- If you create a set with both offense and defense modes, the offense mode should be first.
  308. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  309.  
  310. -- Normal melee group
  311. sets.engaged = {ammo="Ghastly Tathlum",
  312. neck="Loricate Torque +1",ear1="Black Earring",ear2="Black Earring",
  313. body="Respite Cloak",hands="Lurid Mitts",ring1="Dark Ring",ring2="Dark Ring",
  314. back="Repulse Mantle",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  315.  
  316.  
  317.  
  318. -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  319. sets.buff['Ebullience'] = {head="Savant's Bonnet +2"}
  320. sets.buff['Rapture'] = {head="Savant's Bonnet +2"}
  321. sets.buff['Perpetuance'] = {hands="Savant's Bracers +2"}
  322. sets.buff['Immanence'] = {hands="Savant's Bracers +2"}
  323. sets.buff['Penury'] = {legs="Savant's Pants +2"}
  324. sets.buff['Parsimony'] = {legs="Savant's Pants +2"}
  325. sets.buff['Celerity'] = {feet="Pedagogy Loafers +1"}
  326. sets.buff['Alacrity'] = {feet="Pedagogy Loafers +1"}
  327.  
  328. sets.buff['Klimaform'] = {feet="Savant's Loafers +2"}
  329.  
  330. sets.buff.FullSublimation = {ear1="Savant's Earring"}
  331. -- head="Academic's Mortarboard",ear1="Savant's Earring",body="Pedagogy Gown
  332. sets.buff.PDTSublimation = {ear1="Savant's Earring"}
  333. -- head="Academic's Mortarboard",ear1="Savant's Earring"
  334. --sets.buff['Sandstorm'] = {feet="Desert Boots"}
  335. end
  336.  
  337. -------------------------------------------------------------------------------------------------------------------
  338. -- Job-specific hooks for standard casting events.
  339. -------------------------------------------------------------------------------------------------------------------
  340.  
  341. -- Run after the general midcast() is done.
  342. function job_post_midcast(spell, action, spellMap, eventArgs)
  343. if spell.action_type == 'Magic' then
  344. apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
  345. end
  346. end
  347.  
  348. function job_post_midcast(spell, action, spellMap, eventArgs)
  349. if spell.skill == 'Elemental Magic' and state.MagicBurst.value then
  350. equip(sets.magic_burst)
  351. elseif spell.skill == 'Elemental Magic' and state.ArtifactBody.value then
  352. equip(sets.af_body)
  353. end
  354. end
  355.  
  356. -------------------------------------------------------------------------------------------------------------------
  357. -- Job-specific hooks for non-casting events.
  358. -------------------------------------------------------------------------------------------------------------------
  359.  
  360. -- Called when a player gains or loses a buff.
  361. -- buff == buff gained or lost
  362. -- gain == true if the buff was gained, false if it was lost.
  363. function job_buff_change(buff, gain)
  364. if buff == "Sublimation: Activated" then
  365. handle_equipping_gear(player.status)
  366. end
  367. end
  368.  
  369. -- Handle notifications of general user state change.
  370. function job_state_change(stateField, newValue, oldValue)
  371. if stateField == 'Offense Mode' then
  372. if newValue == 'Normal' then
  373. disable('main','sub','range')
  374. else
  375. enable('main','sub','range')
  376. end
  377. end
  378. end
  379.  
  380. -------------------------------------------------------------------------------------------------------------------
  381. -- User code that supplements standard library decisions.
  382. -------------------------------------------------------------------------------------------------------------------
  383.  
  384. -- Custom spell mapping.
  385. function job_get_spell_map(spell, default_spell_map)
  386. if spell.action_type == 'Magic' then
  387. if default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
  388. if world.weather_element == 'Light' then
  389. return 'CureWithLightWeather'
  390. end
  391. elseif spell.skill == 'Enfeebling Magic' then
  392. if spell.type == 'WhiteMagic' then
  393. return 'MndEnfeebles'
  394. else
  395. return 'IntEnfeebles'
  396. end
  397. elseif spell.skill == 'Elemental Magic' then
  398. if info.low_nukes:contains(spell.english) then
  399. return 'LowTierNuke'
  400. elseif info.mid_nukes:contains(spell.english) then
  401. return 'MidTierNuke'
  402. elseif info.high_nukes:contains(spell.english) then
  403. return 'HighTierNuke'
  404. end
  405. end
  406. end
  407. end
  408.  
  409. function customize_idle_set(idleSet)
  410. if state.Buff['Sublimation: Activated'] then
  411. if state.IdleMode.value == 'Normal' then
  412. idleSet = set_combine(idleSet, sets.buff.FullSublimation)
  413. elseif state.IdleMode.value == 'PDT' then
  414. idleSet = set_combine(idleSet, sets.buff.PDTSublimation)
  415. end
  416. end
  417.  
  418. if player.mpp < 51 then
  419. idleSet = set_combine(idleSet, sets.latent_refresh)
  420. end
  421.  
  422. return idleSet
  423. end
  424.  
  425. -- Called by the 'update' self-command.
  426. function job_update(cmdParams, eventArgs)
  427. if cmdParams[1] == 'user' and not (buffactive['light arts'] or buffactive['dark arts'] or
  428. buffactive['addendum: white'] or buffactive['addendum: black']) then
  429. if state.IdleMode.value == 'Stun' then
  430. send_command('@input /ja "Dark Arts" <me>')
  431. else
  432. send_command('@input /ja "Light Arts" <me>')
  433. end
  434. end
  435.  
  436. update_active_strategems()
  437. update_sublimation()
  438. end
  439.  
  440. -- Function to display the current relevant user state when doing an update.
  441. -- Return true if display was handled, and you don't want the default info shown.
  442. function display_current_job_state(eventArgs)
  443. display_current_caster_state()
  444. eventArgs.handled = true
  445. end
  446.  
  447. -------------------------------------------------------------------------------------------------------------------
  448. -- User code that supplements self-commands.
  449. -------------------------------------------------------------------------------------------------------------------
  450.  
  451. -- Called for direct player commands.
  452. function job_self_command(cmdParams, eventArgs)
  453. if cmdParams[1]:lower() == 'scholar' then
  454. handle_strategems(cmdParams)
  455. eventArgs.handled = true
  456. end
  457. end
  458.  
  459. -------------------------------------------------------------------------------------------------------------------
  460. -- Utility functions specific to this job.
  461. -------------------------------------------------------------------------------------------------------------------
  462. -- Select default macro book on initial load or subjob change.
  463. function select_default_macro_book()
  464. set_macro_page(1, 17)
  465. end
  466.  
  467.  
  468. -- Reset the state vars tracking strategems.
  469. function update_active_strategems()
  470. state.Buff['Ebullience'] = buffactive['Ebullience'] or false
  471. state.Buff['Rapture'] = buffactive['Rapture'] or false
  472. state.Buff['Perpetuance'] = buffactive['Perpetuance'] or false
  473. state.Buff['Immanence'] = buffactive['Immanence'] or false
  474. state.Buff['Penury'] = buffactive['Penury'] or false
  475. state.Buff['Parsimony'] = buffactive['Parsimony'] or false
  476. state.Buff['Celerity'] = buffactive['Celerity'] or false
  477. state.Buff['Alacrity'] = buffactive['Alacrity'] or false
  478.  
  479. state.Buff['Klimaform'] = buffactive['Klimaform'] or false
  480. end
  481.  
  482. function update_sublimation()
  483. state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
  484. end
  485.  
  486. -- Equip sets appropriate to the active buffs, relative to the spell being cast.
  487. function apply_grimoire_bonuses(spell, action, spellMap)
  488. if state.Buff.Perpetuance and spell.type =='WhiteMagic' and spell.skill == 'Enhancing Magic' then
  489. equip(sets.buff['Perpetuance'])
  490. end
  491. if state.Buff.Rapture and (spellMap == 'Cure' or spellMap == 'Curaga') then
  492. equip(sets.buff['Rapture'])
  493. end
  494. if spell.skill == 'Elemental Magic' and spellMap ~= 'ElementalEnfeeble' then
  495. if state.Buff.Ebullience and spell.english ~= 'Impact' then
  496. equip(sets.buff['Ebullience'])
  497. end
  498. if state.Buff.Immanence then
  499. equip(sets.buff['Immanence'])
  500. end
  501. if state.Buff.Klimaform and spell.element == world.weather_element then
  502. equip(sets.buff['Klimaform'])
  503. end
  504. end
  505.  
  506. if state.Buff.Penury then equip(sets.buff['Penury']) end
  507. if state.Buff.Parsimony then equip(sets.buff['Parsimony']) end
  508. if state.Buff.Celerity then equip(sets.buff['Celerity']) end
  509. if state.Buff.Alacrity then equip(sets.buff['Alacrity']) end
  510. end
  511.  
  512.  
  513. -- General handling of strategems in an Arts-agnostic way.
  514. -- Format: gs c scholar <strategem>
  515. function handle_strategems(cmdParams)
  516. -- cmdParams[1] == 'scholar'
  517. -- cmdParams[2] == strategem to use
  518.  
  519. if not cmdParams[2] then
  520. add_to_chat(123,'Error: No strategem command given.')
  521. return
  522. end
  523. local strategem = cmdParams[2]:lower()
  524.  
  525. if strategem == 'light' then
  526. if buffactive['light arts'] then
  527. send_command('input /ja "Addendum: White" <me>')
  528. elseif buffactive['addendum: white'] then
  529. add_to_chat(122,'Error: Addendum: White is already active.')
  530. else
  531. send_command('input /ja "Light Arts" <me>')
  532. end
  533. elseif strategem == 'dark' then
  534. if buffactive['dark arts'] then
  535. send_command('input /ja "Addendum: Black" <me>')
  536. elseif buffactive['addendum: black'] then
  537. add_to_chat(122,'Error: Addendum: Black is already active.')
  538. else
  539. send_command('input /ja "Dark Arts" <me>')
  540. end
  541. elseif buffactive['light arts'] or buffactive['addendum: white'] then
  542. if strategem == 'cost' then
  543. send_command('input /ja Penury <me>')
  544. elseif strategem == 'speed' then
  545. send_command('input /ja Celerity <me>')
  546. elseif strategem == 'aoe' then
  547. send_command('input /ja Accession <me>')
  548. elseif strategem == 'power' then
  549. send_command('input /ja Rapture <me>')
  550. elseif strategem == 'duration' then
  551. send_command('input /ja Perpetuance <me>')
  552. elseif strategem == 'accuracy' then
  553. send_command('input /ja Altruism <me>')
  554. elseif strategem == 'enmity' then
  555. send_command('input /ja Tranquility <me>')
  556. elseif strategem == 'skillchain' then
  557. add_to_chat(122,'Error: Light Arts does not have a skillchain strategem.')
  558. elseif strategem == 'addendum' then
  559. send_command('input /ja "Addendum: White" <me>')
  560. else
  561. add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  562. end
  563. elseif buffactive['dark arts'] or buffactive['addendum: black'] then
  564. if strategem == 'cost' then
  565. send_command('input /ja Parsimony <me>')
  566. elseif strategem == 'speed' then
  567. send_command('input /ja Alacrity <me>')
  568. elseif strategem == 'aoe' then
  569. send_command('input /ja Manifestation <me>')
  570. elseif strategem == 'power' then
  571. send_command('input /ja Ebullience <me>')
  572. elseif strategem == 'duration' then
  573. add_to_chat(122,'Error: Dark Arts does not have a duration strategem.')
  574. elseif strategem == 'accuracy' then
  575. send_command('input /ja Focalization <me>')
  576. elseif strategem == 'enmity' then
  577. send_command('input /ja Equanimity <me>')
  578. elseif strategem == 'skillchain' then
  579. send_command('input /ja Immanence <me>')
  580. elseif strategem == 'addendum' then
  581. send_command('input /ja "Addendum: Black" <me>')
  582. else
  583. add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  584. end
  585. else
  586. add_to_chat(123,'No arts has been activated yet.')
  587. end
  588. end
  589.  
  590.  
  591. -- Gets the current number of available strategems based on the recast remaining
  592. -- and the level of the sch.
  593. function get_current_strategem_count()
  594. -- returns recast in seconds.
  595. local allRecasts = windower.ffxi.get_ability_recasts()
  596. local stratsRecast = allRecasts[231]
  597.  
  598. local maxStrategems = (player.main_job_level + 10) / 20
  599.  
  600. local fullRechargeTime = 4*60
  601.  
  602. local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
  603.  
  604. return currentCharges
  605. end
  606.  
  607.  
  608. -- Puts in Aftercast timers for sleep and stun lines in linkshell.
  609. function job_aftercast(spell, action, spellMap, eventArgs)
  610. if not spell.interrupted then
  611. if spell.english == "Sleep II" then
  612. send_command('timers create "Sleep 2 '..spell.target.name..'" 90 down')
  613. elseif spell.english == "Sleep" then
  614. send_command('timers create "Sleep '..spell.target.name..'" 60 down')
  615. elseif spell.english == "Sleepga" then
  616. send_command('timers create "Sleepga '..spell.target.name..'" 60 down')
  617. elseif spell.english == "Stun" then
  618. send_command('exec StunningBear.txt')
  619. end
  620. end
  621. end
Add Comment
Please, Sign In to add comment