Loire

SCH

Apr 7th, 2015
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 27.88 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.  
  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.  
  52.     elements.obi_of = {['Light']='Hachirin-no-Obi', ['Dark']='Hachirin-no-Obi', ['Fire']='Hachirin-no-Obi', ['Ice']='Hachirin-no-Obi', ['Wind']='Hachirin-no-Obi',
  53.      ['Earth']='Hachirin-no-Obi', ['Lightning']='Hachirin-no-Obi', ['Water']='Hachirin-no-Obi'}
  54.  
  55.     state.OffenseMode:options('None', 'Normal')
  56.     state.CastingMode:options('Normal', 'Resistant')
  57.     state.IdleMode:options('Normal', 'PDT')
  58.  
  59.  
  60.     info.low_nukes = S{"Stone", "Water", "Aero", "Fire", "Blizzard", "Thunder"}
  61.     info.helix_nukes = S{"Geohelix", "Hydrohelix", "Anemohelix", "Pyrohelix", "Cryohelix", "Ionohelix"}
  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.     gear.macc_hagondes = {name="Hagondes Cuffs", augments={'Phys. dmg. taken -3%','Mag. Acc.+29'}}
  68.  
  69.     send_command('bind ^` input /ma Stun <t>')
  70.     send_command('bind !` input /ma Stun <t>') 
  71.  
  72. end
  73.  
  74. function user_unload()
  75.     send_command('unbind ^`')
  76.     send_command('unbind !`')  
  77. end
  78.  
  79.  
  80. -- Define sets and vars used by this job file.
  81. function init_gear_sets()
  82.     --------------------------------------
  83.     -- Start defining the sets
  84.     --------------------------------------
  85.  
  86.     -- Precast Sets
  87.  
  88.     -- Precast sets to enhance JAs
  89.  
  90.     sets.precast.JA['Tabula Rasa'] = {legs="Pedagogy Pants"}
  91.  
  92.  
  93.     -- Fast cast sets for spells
  94.  
  95.     sets.precast.FC = {main="Marin Staff +1",sub="Vivid Strap",ammo="Incantor Stone",
  96.         head="Nahtirah Hat",neck="Orunmila's Torque",ear2="Loquacious Earring",
  97.         body="Anhur Robe",hands="Gende. Gages +1",ring1="Prolix Ring",ring2="Weather. Ring",
  98.         back="Swith Cape",waist="Witful Belt",legs="Orvail Pants +1",feet="Regal Pumps +1"}
  99.  
  100.     sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  101.  
  102.     sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {neck="Stoicheion Medal"})
  103.  
  104.     sets.precast.FC.Cure = set_combine(sets.precast.FC, {body="Heka's Kalasiris",back="Pahtli Cape"})
  105.  
  106.     sets.precast.FC.Curaga = sets.precast.FC.Cure
  107.  
  108.     sets.precast.FC.Impact = set_combine(sets.precast.FC['Elemental Magic'], {head=empty,body="Twilight Cloak"})
  109.    
  110.     sets.precast.Stoneskin = set_combine(sets.precast.FC['Enhancing Magic'], {head="Umuthi Hat"})  
  111.  
  112.  
  113.     -- Midcast Sets
  114.  
  115.     sets.midcast.FastRecast = {ammo="Incantor Stone",
  116.         head="Telchine Cap",neck="Orunmila's Torque",ear2="Loquacious Earring",
  117.         body="Telchine Chas.",hands="Gende. Gages +1",ring1="Prolix Ring",ring2="Weather. Ring",
  118.         back="Swith Cape",waist="Goading Belt",legs="Hagondes Pants +1",feet="Regal Pumps +1"}
  119.  
  120.     sets.midcast.Cure = {main="Arka IV",sub="Achaq Grip",ammo="Incantor Stone",
  121.         head="Gende. Caubeen",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Novia Earring",
  122.         body="Gendewitha Bliaut",hands="Bokwus Gloves",ring1="Weather. Ring",ring2="Sirona's Ring",
  123.         back="Tempered Cape",waist="Goading Belt",legs="Perdition Slops",feet="Peda. Loafers +1"}
  124.  
  125.     sets.midcast.CureWithLightWeather = {main="Chatoyant Staff",sub="Achaq Grip",ammo="Incantor Stone",
  126.         head="Gende. Caubeen",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Novia Earring",
  127.         body="Gendewitha Bliaut",hands="Bokwus Gloves",ring1="Weather. Ring",ring2="Sirona's Ring",
  128.         back="Tempered Cape",waist="Goading Belt",legs="Perdition Slops",feet="Peda. Loafers +1"}
  129.  
  130.     sets.midcast.Curaga = sets.midcast.Cure
  131.  
  132.     sets.midcast.Regen = {main="Bolelabunga",head="Savant's Bonnet +2",body="Telchine Chas.",back="Bookworm's Cape"}
  133.  
  134.     sets.midcast.Cursna = {
  135.         neck="Colossus's Torque",ear2="Loquac. Earring",
  136.         hands="Hieros Mittens",ring1="Haoma's Ring",ring2="Sirona's Ring",
  137.         back="Tempered Cape",waist="Goading Belt",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  138.  
  139.     sets.midcast['Enhancing Magic'] = {ammo="Savant's Treatise",
  140.         head="Telchine Cap",neck="Colossus's Torque",ear1="Andoaa Earring",
  141.         body="Telchine Chas.",hands="Ayao's Gages",
  142.         back="Merciful Cape",waist="Olympus Sash",legs="Portent Pants", feet="Rubeus Boots"}
  143.  
  144.     sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {head="Umuthi Hat",waist="Siegel Sash"})
  145.  
  146.     sets.midcast.Storm = set_combine(sets.midcast['Enhancing Magic'], {feet="Pedagogy Loafers +1"})
  147.  
  148.     sets.midcast.Protect = {ring1="Sheltered Ring"}
  149.     sets.midcast.Protectra = sets.midcast.Protect
  150.  
  151.     sets.midcast.Shell = {ring1="Sheltered Ring"}
  152.     sets.midcast.Shellra = sets.midcast.Shell
  153.  
  154.  
  155.     -- Custom spell classes
  156.     sets.midcast.MndEnfeebles = {main="Marin Staff +1",sub="Mephitis Grip",ammo="Incantor Stone",
  157.         head="Nahtirah Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  158.         body="Ischemia Chasu.",hands="Yaoyotl Gloves",ring1="Weather. Ring",ring2="Globidonta Ring",
  159.         back="Refraction Cape",waist="Yamabuki-no-obi",legs="Mes'yohi Slacks",feet="Regal Pumps +1"}
  160.  
  161.     sets.midcast.IntEnfeebles = {main="Marin Staff +1",sub="Mephitis Grip",ammo="Floestone",
  162.         head="Nahtirah Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  163.         body="Ischemia Chasu.",hands="Yaoyotl Gloves",ring1="Weather. Ring",ring2="Sangoma Ring",
  164.         back="Refraction Cape",waist="Yamabuki-no-obi",legs="Mes'yohi Slacks",feet="Umbani Boots"}
  165.  
  166.     sets.midcast.ElementalEnfeeble = sets.midcast.IntEnfeebles
  167.  
  168.     sets.midcast['Dark Magic'] = {main="Marin Staff +1",sub="Mephitis Grip",ammo="Incantor Stone",
  169.         head="Nahtirah Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  170.         body="Ischemia Chasu.",hands="Yaoyotl Gloves",ring1="Weather. Ring",ring2="Sangoma Ring",
  171.         back="Bookworm's Cape",waist="Goading Belt",legs="Mes'yohi Slacks",feet="Umbani Boots"}
  172.  
  173.     sets.midcast.Kaustra = {main="Marin Staff +1",sub="Wizzan Grip",ammo="Floestone",
  174.         head="Hagondes Hat +1",neck="Eddy Necklace",ear1="Crematio Earring",ear2="Friomisi Earring",
  175.         body="Count's Garb",hands="Yaoyotl Gloves",ring1="Shiva Ring +1",ring2="Acumen Ring",
  176.         back="Bookworm's Cape",waist="Yamabuki-no-obi",legs="Hagondes Pants +1",feet="Umbani Boots"}
  177.  
  178.     sets.midcast.Drain = {main="Marin Staff +1",sub="Mephitis Grip",ammo="Incantor Stone",
  179.         head="Nahtirah Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  180.         body="Ischemia Chasu.",hands="Yaoyotl Gloves",ring1="Weather. Ring",ring2="Sangoma Ring",
  181.         back="Bookworm's Cape",waist="Fucho-no-Obi",legs="Mes'yohi Slacks",feet="Umbani Boots"}
  182.  
  183.     sets.midcast.Aspir = sets.midcast.Drain
  184.  
  185.     sets.midcast.Stun = {main="Marin Staff +1",sub="Mephitis Grip",ammo="Hasty Pinion +1",
  186.         head="Nahtirah Hat",neck="Orunmila's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  187.         body="Ischemia Chasu.",hands="Gende. Gages +1",ring1="Prolix Ring",ring2="Sangoma Ring",
  188.         back="Refraction Cape",waist="Witful Belt",legs="Mes'yohi Slacks",feet="Regal Pumps +1"}
  189.  
  190.     sets.midcast.Stun.Resistant = set_combine(sets.midcast.Stun, {main="Marin Staff +1"})
  191.  
  192.  
  193.     -- Elemental Magic sets are default for handling low-tier nukes.
  194.     sets.midcast['Elemental Magic'] = {main="Marin Staff +1",sub="Wizzan Grip",ammo="Floestone",
  195.         head="Hagondes Hat +1",neck="Eddy Necklace",ear1="Crematio Earring",ear2="Friomisi Earring",
  196.         body="Count's Garb",hands="Hagondes Cuffs +1",ring1="Shiva Ring +1",ring2="Acumen Ring",
  197.         back="Bookworm's Cape",waist=gear.ElementalObi,legs="Hagondes Pants +1",feet="Umbani Boots"}
  198.  
  199.     sets.midcast['Elemental Magic'].Resistant = {main="Marin Staff +1",sub="Wizzan Grip",ammo="Floestone",
  200.         head="Hagondes Hat +1",neck="Eddy Necklace",ear1="Crematio Earring",ear2="Friomisi Earring",
  201.         body="Count's Garb",hands="Hagondes Cuffs +1",ring1="Shiva Ring +1",ring2="Acumen Ring",
  202.         back="Bookworm's Cape",waist=gear.ElementalObi,legs="Hagondes Pants +1",feet="Umbani Boots"}
  203.  
  204.     sets.midcast['Elemental Magic'].HelixNuke = {main="Marin Staff +1",sub="Wizzan Grip",ammo="Floestone",
  205.         head="Hagondes Hat +1",neck="Eddy Necklace",ear1="Crematio Earring",ear2="Friomisi Earring",
  206.         body="Count's Garb",hands="Otomi Gloves",ring1="Shiva Ring +1",ring2="Acumen Ring",
  207.         back="Bookworm's Cape",waist="Yamabuki-no-Obi",legs="Hagondes Pants +1",feet="Umbani Boots"}
  208.        
  209.     -- Custom refinements for certain nuke tiers
  210.     sets.midcast['Elemental Magic'].HighTierNuke = set_combine(sets.midcast['Elemental Magic'], {sub="Wizzan Grip"})
  211.  
  212.     sets.midcast['Elemental Magic'].HighTierNuke.Resistant = set_combine(sets.midcast['Elemental Magic'].Resistant, {sub="Wizzan Grip"})
  213.  
  214.     sets.midcast.Impact = {main="Marin Staff +1",sub="Mephitis Grip",ammo="Floestone",
  215.         head=empty,neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  216.         body="Twilight Cloak",hands="Yaoyotl Gloves",ring1="Shiva Ring +1",ring2="Weather. Ring",
  217.         back="Bookworm's Cape",waist="Yamabuki-no-obi",legs="Perdition Slops",feet="Umbani Boots"}
  218.  
  219.  
  220.     -- Sets to return to when not performing an action.
  221.  
  222.     -- Resting sets
  223.     sets.resting = {main="Chatoyant Staff",sub="Mephitis Grip",
  224.         head="Nefer Khat +1",neck="Wiglen Gorget",
  225.         body="Heka's Kalasiris",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  226.         waist="Austerity Belt",legs="Nares Trews",feet="Serpentes Sabots"}
  227.  
  228.  
  229.     -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  230.  
  231.     sets.idle.Town = {main="Mercurial Pole",sub="Bloodrain Strap",ammo="Vanir Battery",
  232.         head="Magnifying Specs.",neck="Wiglen Gorget",ear1="Black Earring",ear2="Black Earring",
  233.         body="Weaver's Apron",hands="Svnt. Bracers +2",ring1="Dark Ring",ring2="Defending Ring",
  234.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Perdition Slops",feet="Regal Pumps +1"}
  235.  
  236.     sets.idle.Field = {main="Bolelabunga",sub="Genbu's Shield",ammo="Vanir Battery",
  237.         neck="Twilight Torque",ear1="Black Earring",ear2="Black Earring",
  238.         body="Respite Cloak",hands="Hagondes Cuffs +1",ring1="Dark Ring",ring2="Defending Ring",
  239.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  240.  
  241.     sets.idle.Field.PDT = {main="Bolelabunga",sub="Genbu's Shield",ammo="Vanir Battery",
  242.         neck="Twilight Torque",ear1="Black Earring",ear2="Black Earring",
  243.         body="Respite Cloak",hands="Hagondes Cuffs +1",ring1="Dark Ring",ring2="Defending Ring",
  244.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  245.  
  246.     sets.idle.Field.Stun = {main="Marin Staff +1",sub="Mephitis Grip",ammo="Hasty Pinion +1",
  247.         head="Nahtirah Hat",neck="Orunmila's Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  248.         body="Ischemia Chasu.",hands="Gende. Gages +1",ring1="Prolix Ring",ring2="Sangoma Ring",
  249.         back="Refraction Cape",waist="Witful Belt",legs="Mes'yohi Slacks",feet="Regal Pumps +1"}
  250.  
  251.     sets.idle.Weak = {main="Bolelabunga",sub="Genbu's Shield",ammo="Vanir Battery",
  252.         neck="Twilight Torque",ear1="Black Earring",ear2="Black Earring",
  253.         body="Respite Cloak",hands="Hagondes Cuffs +1",ring1="Dark Ring",ring2="Defending Ring",
  254.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  255.  
  256.     -- Defense sets
  257.  
  258.     sets.defense.PDT = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Vanir Battery",
  259.         neck="Twilight Torque",ear1="Black Earring",ear2="Black Earring",
  260.         body="Respite Cloak",hands="Hagondes Cuffs +1",ring1="Dark Ring",ring2="Defending Ring",
  261.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  262.  
  263.     sets.defense.MDT = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Vanir Battery",
  264.         neck="Twilight Torque",ear1="Black Earring",ear2="Black Earring",
  265.         body="Respite Cloak",hands="Hagondes Cuffs +1",ring1="Dark Ring",ring2="Defending Ring",
  266.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  267.  
  268.     sets.Kiting = {feet="Herald's Gaiters"}
  269.  
  270.     sets.latent_refresh = {waist="Fucho-no-obi"}
  271.  
  272.     -- Engaged sets
  273.  
  274.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  275.     -- sets if more refined versions aren't defined.
  276.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  277.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  278.  
  279.     -- Normal melee group
  280.     sets.engaged = {ammo="Vanir Battery",
  281.         neck="Twilight Torque",ear1="Black Earring",ear2="Black Earring",
  282.         body="Respite Cloak",hands="Hagondes Cuffs +1",ring1="Dark Ring",ring2="Defending Ring",
  283.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Assiduity Pants +1",feet="Gende. Galosh. +1"}
  284.  
  285.  
  286.  
  287.     -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  288.     sets.buff['Ebullience'] = {head="Savant's Bonnet +2"}
  289.     sets.buff['Rapture'] = {head="Savant's Bonnet +2"}
  290.     sets.buff['Perpetuance'] = {hands="Savant's Bracers +2"}
  291.     sets.buff['Immanence'] = {hands="Savant's Bracers +2"}
  292.     sets.buff['Penury'] = {legs="Savant's Pants +2"}
  293.     sets.buff['Parsimony'] = {legs="Savant's Pants +2"}
  294.     sets.buff['Celerity'] = {feet="Pedagogy Loafers +1"}
  295.     sets.buff['Alacrity'] = {feet="Pedagogy Loafers +1"}
  296.  
  297.     sets.buff['Klimaform'] = {feet="Savant's Loafers +2"}
  298.  
  299.     sets.buff.FullSublimation = {body="Respite Cloak"}
  300.         -- head="Academic's Mortarboard",ear1="Savant's Earring",body="Pedagogy Gown
  301.     sets.buff.PDTSublimation = {body="Respite Cloak"}
  302.         -- head="Academic's Mortarboard",ear1="Savant's Earring"
  303.     --sets.buff['Sandstorm'] = {feet="Desert Boots"}
  304. end
  305.  
  306. -------------------------------------------------------------------------------------------------------------------
  307. -- Job-specific hooks for standard casting events.
  308. -------------------------------------------------------------------------------------------------------------------
  309.  
  310. -- Run after the general midcast() is done.
  311. function job_post_midcast(spell, action, spellMap, eventArgs)
  312.     if spell.action_type == 'Magic' then
  313.         apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
  314.     end
  315. end
  316.  
  317. -------------------------------------------------------------------------------------------------------------------
  318. -- Job-specific hooks for non-casting events.
  319. -------------------------------------------------------------------------------------------------------------------
  320.  
  321. -- Called when a player gains or loses a buff.
  322. -- buff == buff gained or lost
  323. -- gain == true if the buff was gained, false if it was lost.
  324. function job_buff_change(buff, gain)
  325.     if buff == "Sublimation: Activated" then
  326.         handle_equipping_gear(player.status)
  327.     end
  328. end
  329.  
  330. -- Handle notifications of general user state change.
  331. function job_state_change(stateField, newValue, oldValue)
  332.     if stateField == 'Offense Mode' then
  333.         if newValue == 'Normal' then
  334.             disable('main','sub','range')
  335.         else
  336.             enable('main','sub','range')
  337.         end
  338.     end
  339. end
  340.  
  341. -------------------------------------------------------------------------------------------------------------------
  342. -- User code that supplements standard library decisions.
  343. -------------------------------------------------------------------------------------------------------------------
  344.  
  345. -- Custom spell mapping.
  346. function job_get_spell_map(spell, default_spell_map)
  347.     if spell.action_type == 'Magic' then
  348.         if default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
  349.             if world.weather_element == 'Light' then
  350.                 return 'CureWithLightWeather'
  351.             end
  352.         elseif spell.skill == 'Enfeebling Magic' then
  353.             if spell.type == 'WhiteMagic' then
  354.                 return 'MndEnfeebles'
  355.             else
  356.                 return 'IntEnfeebles'
  357.             end
  358.         elseif spell.skill == 'Elemental Magic' then
  359.             if info.low_nukes:contains(spell.english) then
  360.                 return 'LowTierNuke'
  361.             elseif info.helix_nukes:contains(spell.english) then
  362.                 return 'HelixNuke' 
  363.             elseif info.mid_nukes:contains(spell.english) then
  364.                 return 'MidTierNuke'
  365.             elseif info.high_nukes:contains(spell.english) then
  366.                 return 'HighTierNuke'
  367.             end
  368.         end
  369.     end
  370. end
  371.  
  372. function customize_idle_set(idleSet)
  373.     if state.Buff['Sublimation: Activated'] then
  374.         if state.IdleMode.value == 'Normal' then
  375.             idleSet = set_combine(idleSet, sets.buff.FullSublimation)
  376.         elseif state.IdleMode.value == 'PDT' then
  377.             idleSet = set_combine(idleSet, sets.buff.PDTSublimation)
  378.         end
  379.     end
  380.  
  381.     if player.mpp < 51 then
  382.         idleSet = set_combine(idleSet, sets.latent_refresh)
  383.     end
  384.  
  385.     return idleSet
  386. end
  387.  
  388. -- Called by the 'update' self-command.
  389. function job_update(cmdParams, eventArgs)
  390.     if cmdParams[1] == 'user' and not (buffactive['light arts']      or buffactive['dark arts'] or
  391.                        buffactive['addendum: white'] or buffactive['addendum: black']) then
  392.         if state.IdleMode.value == 'Stun' then
  393.             send_command('@input /ja "Dark Arts" <me>')
  394.         else
  395.             send_command('@input /ja "Light Arts" <me>')
  396.         end
  397.     end
  398.  
  399.     update_active_strategems()
  400.     update_sublimation()
  401. end
  402.  
  403. -- Function to display the current relevant user state when doing an update.
  404. -- Return true if display was handled, and you don't want the default info shown.
  405. function display_current_job_state(eventArgs)
  406.     display_current_caster_state()
  407.     eventArgs.handled = true
  408. end
  409.  
  410. -------------------------------------------------------------------------------------------------------------------
  411. -- User code that supplements self-commands.
  412. -------------------------------------------------------------------------------------------------------------------
  413.  
  414. -- Called for direct player commands.
  415. function job_self_command(cmdParams, eventArgs)
  416.     if cmdParams[1]:lower() == 'scholar' then
  417.         handle_strategems(cmdParams)
  418.         eventArgs.handled = true
  419.     end
  420. end
  421.  
  422. -------------------------------------------------------------------------------------------------------------------
  423. -- Utility functions specific to this job.
  424. -------------------------------------------------------------------------------------------------------------------
  425.  
  426. -- Reset the state vars tracking strategems.
  427. function update_active_strategems()
  428.     state.Buff['Ebullience'] = buffactive['Ebullience'] or false
  429.     state.Buff['Rapture'] = buffactive['Rapture'] or false
  430.     state.Buff['Perpetuance'] = buffactive['Perpetuance'] or false
  431.     state.Buff['Immanence'] = buffactive['Immanence'] or false
  432.     state.Buff['Penury'] = buffactive['Penury'] or false
  433.     state.Buff['Parsimony'] = buffactive['Parsimony'] or false
  434.     state.Buff['Celerity'] = buffactive['Celerity'] or false
  435.     state.Buff['Alacrity'] = buffactive['Alacrity'] or false
  436.  
  437.     state.Buff['Klimaform'] = buffactive['Klimaform'] or false
  438. end
  439.  
  440. function update_sublimation()
  441.     state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
  442. end
  443.  
  444. -- Equip sets appropriate to the active buffs, relative to the spell being cast.
  445. function apply_grimoire_bonuses(spell, action, spellMap)
  446.     if state.Buff.Perpetuance and spell.type =='WhiteMagic' and spell.skill == 'Enhancing Magic' then
  447.         equip(sets.buff['Perpetuance'])
  448.     end
  449.     if state.Buff.Rapture and (spellMap == 'Cure' or spellMap == 'Curaga') then
  450.         equip(sets.buff['Rapture'])
  451.     end
  452.     if spell.skill == 'Elemental Magic' and spellMap ~= 'ElementalEnfeeble' then
  453.         if state.Buff.Ebullience and spell.english ~= 'Impact' then
  454.             equip(sets.buff['Ebullience'])
  455.         end
  456.         if state.Buff.Immanence then
  457.             equip(sets.buff['Immanence'])
  458.         end
  459.         if state.Buff.Klimaform and spell.element == world.weather_element then
  460.             equip(sets.buff['Klimaform'])
  461.         end
  462.     end
  463.  
  464.     if state.Buff.Penury then equip(sets.buff['Penury']) end
  465.     if state.Buff.Parsimony then equip(sets.buff['Parsimony']) end
  466.     if state.Buff.Celerity then equip(sets.buff['Celerity']) end
  467.     if state.Buff.Alacrity then equip(sets.buff['Alacrity']) end
  468. end
  469.  
  470.  
  471. -- General handling of strategems in an Arts-agnostic way.
  472. -- Format: gs c scholar <strategem>
  473. function handle_strategems(cmdParams)
  474.     -- cmdParams[1] == 'scholar'
  475.     -- cmdParams[2] == strategem to use
  476.  
  477.     if not cmdParams[2] then
  478.         add_to_chat(123,'Error: No strategem command given.')
  479.         return
  480.     end
  481.     local strategem = cmdParams[2]:lower()
  482.  
  483.     if strategem == 'light' then
  484.         if buffactive['light arts'] then
  485.             send_command('input /ja "Addendum: White" <me>')
  486.         elseif buffactive['addendum: white'] then
  487.             add_to_chat(122,'Error: Addendum: White is already active.')
  488.         else
  489.             send_command('input /ja "Light Arts" <me>')
  490.         end
  491.     elseif strategem == 'dark' then
  492.         if buffactive['dark arts'] then
  493.             send_command('input /ja "Addendum: Black" <me>')
  494.         elseif buffactive['addendum: black'] then
  495.             add_to_chat(122,'Error: Addendum: Black is already active.')
  496.         else
  497.             send_command('input /ja "Dark Arts" <me>')
  498.         end
  499.     elseif buffactive['light arts'] or buffactive['addendum: white'] then
  500.         if strategem == 'cost' then
  501.             send_command('input /ja Penury <me>')
  502.         elseif strategem == 'speed' then
  503.             send_command('input /ja Celerity <me>')
  504.         elseif strategem == 'aoe' then
  505.             send_command('input /ja Accession <me>')
  506.         elseif strategem == 'power' then
  507.             send_command('input /ja Rapture <me>')
  508.         elseif strategem == 'duration' then
  509.             send_command('input /ja Perpetuance <me>')
  510.         elseif strategem == 'accuracy' then
  511.             send_command('input /ja Altruism <me>')
  512.         elseif strategem == 'enmity' then
  513.             send_command('input /ja Tranquility <me>')
  514.         elseif strategem == 'skillchain' then
  515.             add_to_chat(122,'Error: Light Arts does not have a skillchain strategem.')
  516.         elseif strategem == 'addendum' then
  517.             send_command('input /ja "Addendum: White" <me>')
  518.         else
  519.             add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  520.         end
  521.     elseif buffactive['dark arts']  or buffactive['addendum: black'] then
  522.         if strategem == 'cost' then
  523.             send_command('input /ja Parsimony <me>')
  524.         elseif strategem == 'speed' then
  525.             send_command('input /ja Alacrity <me>')
  526.         elseif strategem == 'aoe' then
  527.             send_command('input /ja Manifestation <me>')
  528.         elseif strategem == 'power' then
  529.             send_command('input /ja Ebullience <me>')
  530.         elseif strategem == 'duration' then
  531.             add_to_chat(122,'Error: Dark Arts does not have a duration strategem.')
  532.         elseif strategem == 'accuracy' then
  533.             send_command('input /ja Focalization <me>')
  534.         elseif strategem == 'enmity' then
  535.             send_command('input /ja Equanimity <me>')
  536.         elseif strategem == 'skillchain' then
  537.             send_command('input /ja Immanence <me>')
  538.         elseif strategem == 'addendum' then
  539.             send_command('input /ja "Addendum: Black" <me>')
  540.         else
  541.             add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  542.         end
  543.     else
  544.         add_to_chat(123,'No arts has been activated yet.')
  545.     end
  546. end
  547.  
  548.  
  549. -- Gets the current number of available strategems based on the recast remaining
  550. -- and the level of the sch.
  551. function get_current_strategem_count()
  552.     -- returns recast in seconds.
  553.     local allRecasts = windower.ffxi.get_ability_recasts()
  554.     local stratsRecast = allRecasts[231]
  555.  
  556.     local maxStrategems = (player.main_job_level + 10) / 20
  557.  
  558.     local fullRechargeTime = 4*60
  559.  
  560.     local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
  561.  
  562.     return currentCharges
  563. end
  564.  
  565.  
  566. -- Puts in Aftercast timers for sleep and stun lines in linkshell.
  567. function job_aftercast(spell, action, spellMap, eventArgs)
  568.         if not spell.interrupted then
  569.                 if spell.english == "Sleep II" then
  570.                         send_command('timers create "Sleep 2 '..spell.target.name..'" 90 down')
  571.                 elseif spell.english == "Sleep" then
  572.                         send_command('timers create "Sleep '..spell.target.name..'" 60 down')
  573.                 elseif spell.english == "Sleepga" then
  574.                         send_command('timers create "Sleepga '..spell.target.name..'" 60 down')
  575.                 elseif spell.english == "Stun" then
  576.                         send_command('exec StunningBear.txt')
  577.                 end
  578.         end
  579. end
  580.  
  581. function job_precast(spell, action, spellMap, eventArgs)
  582.     if info.low_nukes:contains(spell.english) or info.mid_nukes:contains(spell.english) or info.high_nukes:contains(spell.english) then
  583.         send_command('send Tubaloth /ma "'..spell.name..' '..spell.target.id..'"')
  584.     end
  585.     if spell.english == "Klimaform" then
  586.         send_command('send Tubaloth /ma "'..spell.name..' Tubaloth"')
  587.     end
  588. end
Advertisement
Add Comment
Please, Sign In to add comment