Advertisement
FalownPSA

KEME_SCH

Sep 22nd, 2014
620
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 26.47 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. -- Variable bot
  28.  
  29.  
  30.  
  31.  
  32. -- Initialization function for this job file.
  33. function get_sets()
  34.     -- Load and initialize the include file.
  35.     include('Mote-Include.lua')
  36. end
  37.  
  38. -- Setup vars that are user-independent.
  39. function job_setup()
  40.     state.Buff.Sublimation = buffactive['Sublimation: Activated'] or false
  41.  
  42.     addendumNukes = S{"Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",
  43.         "Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  44.  
  45.     update_active_strategems()
  46. end
  47.  
  48.  
  49. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  50. function user_setup()
  51.     -- Options: Override default values
  52.     options.CastingModes = {'Normal', 'Resistant'}
  53.     options.OffenseModes = {'None', 'Normal'}
  54.     options.DefenseModes = {'Normal'}
  55.     options.WeaponskillModes = {'Normal'}
  56.     options.IdleModes = {'Normal', 'PDT', 'Stun'}
  57.     options.RestingModes = {'Normal'}
  58.     options.PhysicalDefenseModes = {'PDT'}
  59.     options.MagicalDefenseModes = {'MDT'}
  60.  
  61.     state.OffenseMode = 'None'
  62.     state.Defense.PhysicalMode = 'PDT'
  63.  
  64.     info.low_nukes = S{"Stone", "Water", "Aero", "Fire", "Blizzard", "Thunder"}
  65.     info.mid_nukes = S{"Stone II", "Water II", "Aero II", "Fire II", "Blizzard II", "Thunder II",
  66.                        "Stone III", "Water III", "Aero III", "Fire III", "Blizzard III", "Thunder III",
  67.                        "Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",}
  68.     info.high_nukes = S{"Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  69.  
  70.     gear.macc_hagondes = {name="Hagondes Cuffs", augments={'Phys. dmg. taken -3%','Mag. Acc.+29'}}
  71.  
  72.  
  73.     -- Default macro set/book
  74.     set_macro_page(3, 6)
  75. end
  76.  
  77.  
  78. -- Called when this job file is unloaded (eg: job change)
  79. function file_unload()
  80.     if binds_on_unload then
  81.         binds_on_unload()
  82.     end
  83. end
  84.  
  85.  
  86. -- Define sets and vars used by this job file.
  87. function init_gear_sets()
  88.     --------------------------------------
  89.     -- Start defining the sets
  90.     --------------------------------------
  91.  
  92.     -- Precast Sets
  93.  
  94.     -- Precast sets to enhance JAs
  95.  
  96.     sets.precast.JA['Tabula Rasa'] = {legs="Argute Pants +2"}
  97.  
  98.  
  99.     -- Fast cast sets for spells
  100.  
  101.     sets.precast.FC = {ammo="Incantor Stone",
  102.         head="Nahtirah Hat",ear2="Loquacious Earring",
  103.         body="Hedera Cotehardie",hands="Gende. Gages +1",ring1="Prolix Ring",
  104.         back="Swith Cape",waist="Witful Belt",legs="Orvail Pants +1",feet="Academic's Loafers"}
  105.  
  106.     sets.precast.FC.EnhancingMagic = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  107.  
  108.     sets.precast.FC.ElementalMagic = set_combine(sets.precast.FC, {neck="Eddy Necklace"})
  109.  
  110.     sets.precast.FC.Cure = set_combine(sets.precast.FC, {body="Heka's Kalasiris"}) -- back="Pahtli Cape"
  111.  
  112.     sets.precast.FC.Curaga = sets.precast.FC.Cure
  113.  
  114.     sets.precast.FC.Impact = set_combine(sets.precast.FC.ElementalMagic, {head=empty,body="Twilight Cloak"})
  115.  
  116.        
  117.     -- Midcast Sets
  118.  
  119.     sets.midcast.FastRecast = {ammo="Incantor Stone",
  120.         head="Nahtirah Hat",ear2="Loquacious Earring",
  121.         body="Hedera Cotehardie",hands="Gende. Gages +1",ring1="Prolix Ring",
  122.         back="Swith Cape",waist="Cetl Belt",legs="",feet="Academic's Loafers"}
  123.  
  124.     sets.midcast.Cure = {main="Keraunos",sub="Mephitis Grip",ammo="Incantor Stone",
  125.         head="Nahtirah Hat",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Loquacious Earring",
  126.         body="Heka's Kalasiris",hands="Bokwus Gloves",ring1="Prolix Ring",ring2="Sirona's Ring",
  127.         back="Swith Cape",waist="Cetl Belt",legs="Orvail Pants +1",feet="Academic's Loafers"}
  128.  
  129.     sets.midcast.CureWithLightWeather = {main="Chatoyant Staff",sub="Achaq Grip",ammo="Incantor Stone",
  130.         head="Gendewitha Caubeen",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Loquacious Earring",
  131.         body="Heka's Kalasiris",hands="Bokwus Gloves",ring1="Prolix Ring",ring2="Sirona's Ring",
  132.         back="Twilight Cape",waist="Korin Obi",legs="Nares Trews",feet="Academic's Loafers"}
  133.  
  134.     sets.midcast.Curaga = sets.midcast.Cure
  135.  
  136.     sets.midcast.Regen = {main="Coeus", head="Savant's Bonnet +2"}
  137.  
  138.     sets.midcast.Cursna = {
  139.         neck="Malison Medallion",
  140.         hands="Hieros Mittens",ring1="Ephedra Ring",
  141.         feet="Gendewitha Galoshes"}
  142.  
  143.     sets.midcast.EnhancingMagic = {ammo="Savant's Treatise",
  144.         head="Savant's Bonnet +2",neck="Colossus's Torque",
  145.         body="Anhur Robe",hands="Ayao's Gages",
  146.         waist="Olympus Sash",legs="Portent Pants"}
  147.  
  148.     sets.midcast.Stoneskin = set_combine(sets.midcast.EnhancingMagic, {waist="Siegel Sash"})
  149.  
  150.     sets.midcast.Storm = set_combine(sets.midcast.EnhancingMagic, {feet="Peda. Loafers +1"})
  151.  
  152.     sets.midcast.Protect = {ring1="Sheltered Ring"}
  153.     sets.midcast.Protectra = sets.midcast.Protect
  154.  
  155.     sets.midcast.Shell = {ring1="Sheltered Ring"}
  156.     sets.midcast.Shellra = sets.midcast.Shell
  157.  
  158.  
  159.     -- Custom spell classes
  160.     sets.midcast.MndEnfeebles = {main="Keraunos",sub="Mephitis Grip",ammo="Sturm's Report",
  161.         head="Nahtirah Hat",neck="Weike Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  162.         body="Artsieq Jubbah",hands="Yaoyotl Gloves",ring1="Aquasoul Ring",ring2="Sangoma Ring",
  163.         back="Refraction Cape",waist="Demonry Sash",legs="Artsieq Hose",feet="Bokwus Boots"}
  164.  
  165.     sets.midcast.IntEnfeebles = {main="Keraunos",sub="Mephitis Grip",ammo="Sturm's Report",
  166.         head="Nahtirah Hat",neck="Weike Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  167.         body="Artsieq Jubbah",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Sangoma Ring",
  168.         back="Refraction Cape",waist="Demonry Sash",legs="Artsieq Hose",feet="Bokwus Boots"}
  169.  
  170.     sets.midcast.ElementalEnfeeble = sets.midcast.IntEnfeebles
  171.  
  172.     sets.midcast.DarkMagic = {main="Keraunos",sub="Mephitis Grip",ammo="Impatiens",
  173.         head="Nahtirah Hat",neck="Aesir Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  174.         body="Hedera Cotehardie",hands="Yaoyotl Gloves",ring1="Acumen Ring",ring2="Sangoma Ring",
  175.         back="Refraction Cape",waist="Cetl Belt",legs="Artsieq Hose",feet="Bokwus Boots"}
  176.  
  177.     sets.midcast.Kaustra = {main="Keraunos",sub="Zuuxowu Grip",ammo="Witchstone",
  178.         head="Hagondes Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Friomisi Earring",
  179.         body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Acumen Ring",
  180.         back="Bookworm's Cape",waist="Tengu-no-Obi",legs="Hagondes Pants",feet="Umbani Boots"}
  181.  
  182.     sets.midcast.Drain = {main="Keraunos",sub="Mephitis Grip",ammo="Impatiens",
  183.         head="Nahtirah Hat",neck="Aesir Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  184.         body="Hedera Cotehardie",hands="Gende. Gages +1",ring1="Excelsis Ring",ring2="Sangoma Ring",
  185.         back="Refraction Cape",waist="Cetl Belt",legs="Artsieq Hose",feet="Academic's Loafers"}
  186.  
  187.     sets.midcast.Aspir = sets.midcast.Drain
  188.  
  189.     sets.midcast.Stun = {main="Apamajas II",sub="Mephitis Grip",ammo="Impatiens",
  190.         head="Peda. M.Board +1",neck="Weike Torque",ear1="Gwati Earring",ear2="Loq. Earring",
  191.         body="Hedera Cotehardie",hands="Gende. Gages +1",ring1="Prolix Ring",ring2="Sangoma Ring",
  192.         back="Swith Cape",waist="Cetl Belt",legs="Artsieq Hose",feet="Acad. Loafers +1"}
  193.  
  194.     sets.midcast.Stun.Resistant = set_combine(sets.midcast.Stun, {main="Keraunos"})
  195.  
  196.  
  197.     -- Elemental Magic sets are default for handling low-tier nukes.
  198.     sets.midcast['Elemental Magic'] = {main="Keraunos",sub="Zuuxowu Grip",ammo="Witchstone",
  199.         head="Buremte Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Friomisi Earring",
  200.         body="Hagondes Coat",hands="Otomi Gloves",ring1="Locus Ring",ring2="Acumen Ring",
  201.         back="Bookworm's Cape",waist="Tengu-no-Obi",legs="Hagondes Pants",feet="Umbani Boots"}
  202.  
  203.     sets.midcast['Elemental Magic'].Resistant = {main="Keraunos",sub="Zuuxowu Grip",ammo="Witchstone",
  204.         head="Buremte Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  205.         body="Hagondes Coat",hands="Otomi Gloves",ring1="Locus Ring",ring2="Acumen Ring",
  206.         back="Bookworm's Cape",waist="Tengu-no-Obi",legs="Hagondes Pants",feet="Bokwus Boots"}
  207.  
  208.     -- Custom classes for high-tier nukes.
  209.     sets.midcast['Elemental Magic'].HighTierNuke = {main="Keraunos",sub="Zuuxowu Grip",ammo="Witchstone",
  210.         head="Hagondes Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Friomisi Earring",
  211.         body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Acumen Ring",
  212.         back="Bookworm's Cape",waist="Tengu-no-Obi",legs="Hagondes Pants",feet="Umbani Boots"}
  213.  
  214.     sets.midcast['Elemental Magic'].HighTierNuke.Resistant = {main="Keraunos",sub="Mephitis Grip",ammo="Witchstone",
  215.         head="Hagondes Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  216.         body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Acumen Ring",
  217.         back="Bookworm's Cape",waist="Tengu-no-Obi",legs="Hagondes Pants",feet="Bokwus Boots"}
  218.  
  219.     -- Sets for helixes
  220.     sets.midcast.Helix = {main="Keraunos",sub="Zuuxowu Grip",ammo="Witchstone",
  221.         head="Buremte Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Friomisi Earring",
  222.         body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Acumen Ring",
  223.         back="Bookworm's Cape",waist="Tengu-no-Obi",legs="Hagondes Pants",feet="Umbani Boots"}
  224.  
  225.     sets.midcast.Helix.Resistant = {main="Keraunos",sub="Mephitis Grip",ammo="Witchstone",
  226.         head="Buremte Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  227.         body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Acumen Ring",
  228.         back="Bookworm's Cape",waist="Tengu-no-Obi",legs="Hagondes Pants",feet="Bokwus Boots"}
  229.  
  230.     sets.midcast.Impact = {main="Keraunos",sub="Mephitis Grip",ammo="Witchstone",
  231.         head=empty,neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
  232.         body="Twilight Cloak",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Acumen Ring",
  233.         back="Bookworm's Cape",waist="Tengu-no-Obi",legs="Hagondes Pants",feet="Umbani Boots"}
  234.  
  235.  
  236.     -- Sets to return to when not performing an action.
  237.  
  238.     -- Resting sets
  239.     sets.resting = {main="Chatoyant Staff",sub="Mephitis Grip",
  240.         head="Wivre Hairpin",neck="Wiglen Gorget",
  241.         body="Heka's Kalasiris",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  242.         waist="Austerity Belt",legs="Nares Trews",feet="Serpentes Sabots"}
  243.  
  244.  
  245.     -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  246.  
  247.     sets.idle.Town = {main="Tamaxchi",sub="Genbu's Shield",ammo="Incantor Stone",
  248.         head="Savant's Bonnet +2",neck="Wiglen Gorget",ear1="Bloodgem Earring",ear2="Loquacious Earring",
  249.         body="Savant's Gown +2",hands="Savant's Bracers +2",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  250.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Savant's Pants +2",feet="Herald's Gaiters"}
  251.  
  252.     sets.idle.Field = {main="Keraunos",sub="Mephitis Grip",ammo="Incantor Stone",
  253.         head="Wivre Hairpin",neck="Wiglen Gorget",ear1="Bloodgem Earring",ear2="Loquacious Earring",
  254.         body="Artsieq Jubbah",hands="Serpentes Cuffs",ring1="Balrahn's Ring",ring2="Paguroidea Ring",
  255.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Herald's Gaiters"}
  256.  
  257.     sets.idle.Field.PDT = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Incantor Stone",
  258.         head="Nahtirah Hat",neck="Wiglen Gorget",ear1="Bloodgem Earring",ear2="Loquacious Earring",
  259.         body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  260.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Herald's Gaiters"}
  261.  
  262.     sets.idle.Field.Stun = {main="Apamajas II",sub="Mephitis Grip",ammo="Incantor Stone",
  263.         head="Nahtirah Hat",neck="Aesir Torque",ear1="Gwati Earring",ear2="Loquac. Earring",
  264.         body="Hedera Cotehardie",hands="Gende. Gages +1",ring1="Prolix Ring",ring2="Sangoma Ring",
  265.         back="Swith Cape",waist="Cetl Belt",legs="Artsieq Hose",feet="Academic's Loafers"}
  266.  
  267.     sets.idle.Weak = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Incantor Stone",
  268.         head="Nahtirah Hat",neck="Wiglen Gorget",ear1="Bloodgem Earring",ear2="Loquacious Earring",
  269.         body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Sheltered Ring",ring2="Meridian Ring",
  270.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Herald's Gaiters"}
  271.  
  272.     -- Defense sets
  273.  
  274.     sets.defense.PDT = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Incantor Stone",
  275.         head="Nahtirah Hat",neck="Twilight Torque",ear1="Bloodgem Earring",ear2="Loquacious Earring",
  276.         body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Dark Ring",ring2="Dark Ring",
  277.         back="Umbra Cape",waist="Fucho-no-Obi",legs="Hagondes Pants",feet="Umbani Boots"}
  278.  
  279.     sets.defense.MDT = {main=gear.Staff.PDT,sub="Achaq Grip",ammo="Incantor Stone",
  280.         head="Nahtirah Hat",neck="Twilight Torque",ear1="Bloodgem Earring",ear2="Loquacious Earring",
  281.         body="Hedera Cotehardie",hands="Yaoyotl Gloves",ring1="Dark Ring",ring2="Shadow Ring",
  282.         back="Tuilha Cape",waist="Fucho-no-Obi",legs="Artsieq Hose",feet="Umbani Boots"}
  283.  
  284.     sets.Kiting = {feet="Herald's Gaiters"}
  285.  
  286.     -- Engaged sets
  287.  
  288.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  289.     -- sets if more refined versions aren't defined.
  290.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  291.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  292.  
  293.     -- Normal melee group
  294.     sets.engaged = {
  295.         head="Zelus Tiara",
  296.         body="Hedera Cotehardie",hands="Bokwus Gloves",ring1="Rajas Ring",
  297.         waist="Cetl Belt",legs="Hagondes Pants",feet="Umbani Boots"}
  298.  
  299.  
  300.  
  301.     -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  302.     sets.buff['Ebullience'] = {head="Savant's Bonnet +2"}
  303.     sets.buff['Rapture'] = {head="Savant's Bonnet +2"}
  304.     sets.buff['Perpetuance'] = {hands="Savant's Bracers +2"}
  305.     sets.buff['Immanence'] = {hands="Savant's Bracers +2"}
  306.     sets.buff['Penury'] = {legs="Savant's Pants +2"}
  307.     sets.buff['Parsimony'] = {legs="Savant's Pants +2"}
  308.     sets.buff['Celerity'] = {feet="Peda. Loafers +1"}
  309.     sets.buff['Alacrity'] = {feet="Peda. Loafers +1"}
  310.  
  311.     sets.buff['Klimaform'] = {feet="Savant's Loafers +2"}
  312.  
  313.     sets.buff.FullSublimation = {head="Academic's Mortarboard",ear1="Savant's Earring",body="Pedagogic Gown"}
  314.     sets.buff.PDTSublimation = {head="Academic's Mortarboard",ear1="Savant's Earring"}
  315.  
  316.     --sets.buff['Sandstorm'] = {feet="Desert Boots"}
  317. end
  318.  
  319. -------------------------------------------------------------------------------------------------------------------
  320. -- Job-specific hooks that are called to process player actions at specific points in time.
  321. -------------------------------------------------------------------------------------------------------------------
  322.  
  323. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  324. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  325. function job_precast(spell, action, spellMap, eventArgs)
  326.     if state.Buff[spell.english] ~= nil then
  327.         state.Buff[spell.english] = true
  328.     end
  329. end
  330.  
  331. -- Run after the general midcast() is done.
  332. function job_post_midcast(spell, action, spellMap, eventArgs)
  333.     if spell.action_type == 'Magic' then
  334.         apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
  335.     end
  336. end
  337.  
  338. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  339. function job_aftercast(spell, action, spellMap, eventArgs)
  340.     if state.Buff[spell.english] ~= nil then
  341.         state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
  342.     end
  343. end
  344.  
  345.  
  346. -------------------------------------------------------------------------------------------------------------------
  347. -- Customization hooks for idle and melee sets, after they've been automatically constructed.
  348. -------------------------------------------------------------------------------------------------------------------
  349.  
  350. -- Custom spell mapping.
  351. function job_get_spell_map(spell, default_spell_map)
  352.     if spell.action_type == 'Magic' then
  353.         if default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
  354.             if world.weather_element == 'Light' then
  355.                 return 'CureWithLightWeather'
  356.             end
  357.         elseif spell.skill == 'Enfeebling Magic' then
  358.             if spell.type == 'WhiteMagic' then
  359.                 return 'MndEnfeebles'
  360.             else
  361.                 return 'IntEnfeebles'
  362.             end
  363.         elseif spell.skill == 'Elemental Magic' then
  364.             if info.low_nukes:contains(spell.english) then
  365.                 return 'LowTierNuke'
  366.             elseif info.mid_nukes:contains(spell.english) then
  367.                 return 'MidTierNuke'
  368.             elseif info.high_nukes:contains(spell.english) then
  369.                 return 'HighTierNuke'
  370.             end
  371.         end
  372.     end
  373. end
  374.  
  375. function customize_idle_set(idleSet)
  376.     if state.Buff.Sublimation then
  377.         if state.IdleMode == 'Normal' then
  378.             idleSet = set_combine(idleSet, sets.buff.FullSublimation)
  379.         elseif state.IdleMode == 'PDT' then
  380.             idleSet = set_combine(idleSet, sets.buff.PDTSublimation)
  381.         end
  382.     end
  383.  
  384.     if player.mpp < 51 then
  385.         idleSet = set_combine(idleSet, sets.latent_refresh)
  386.     end
  387.  
  388.     return idleSet
  389. end
  390.  
  391. -------------------------------------------------------------------------------------------------------------------
  392. -- General hooks for change events.
  393. -------------------------------------------------------------------------------------------------------------------
  394.  
  395. -- Called when a player gains or loses a buff.
  396. -- buff == buff gained or lost
  397. -- gain == true if the buff was gained, false if it was lost.
  398. function job_buff_change(buff, gain)
  399.     if buff == "Sublimation: Activated" then
  400.         state.Buff.Sublimation = gain
  401.         handle_equipping_gear(player.status)
  402.     elseif state.Buff[buff] ~= nil then
  403.         state.Buff[buff] = gain
  404.     end
  405. end
  406.  
  407. -- Handle notifications of general user state change.
  408. function job_state_change(stateField, newValue, oldValue)
  409.     if stateField == 'OffenseMode' then
  410.         if newValue == 'Normal' then
  411.             disable('main','sub')
  412.         else
  413.             enable('main','sub')
  414.         end
  415.     elseif stateField == 'Reset' then
  416.         if state.OffenseMode == 'None' then
  417.             enable('main','sub')
  418.         end
  419.     end
  420. end
  421.  
  422.  
  423. -------------------------------------------------------------------------------------------------------------------
  424. -- User code that supplements self-commands.
  425. -------------------------------------------------------------------------------------------------------------------
  426.  
  427. -- Called for direct player commands.
  428. function job_self_command(cmdParams, eventArgs)
  429.     if cmdParams[1]:lower() == 'scholar' then
  430.         handle_strategems(cmdParams)
  431.         eventArgs.handled = true
  432.     end
  433. end
  434.  
  435.  
  436. -- Called by the 'update' self-command.
  437. function job_update(cmdParams, eventArgs)
  438.     if cmdParams[1] == 'user' and not (buffactive['light arts']      or buffactive['dark arts'] or
  439.                        buffactive['addendum: white'] or buffactive['addendum: black']) then
  440.         if state.IdleMode == 'Stun' then
  441.             send_command('@input /ja "Dark Arts" <me>')
  442.         else
  443.             send_command('@input /ja "Light Arts" <me>')
  444.         end
  445.     end
  446.  
  447.     update_active_strategems()
  448. end
  449.  
  450.  
  451. -- Function to display the current relevant user state when doing an update.
  452. -- Return true if display was handled, and you don't want the default info shown.
  453. function display_current_job_state(eventArgs)
  454.     local defenseString = ''
  455.     if state.Defense.Active then
  456.         local defMode = state.Defense.PhysicalMode
  457.         if state.Defense.Type == 'Magical' then
  458.             defMode = state.Defense.MagicalMode
  459.         end
  460.  
  461.         defenseString = 'Defense: '..state.Defense.Type..' '..defMode..', '
  462.     end
  463.  
  464.     local meleeString = ''
  465.     if state.OffenseMode == 'Normal' then
  466.         meleeString = 'Melee: Weapons locked, '
  467.     end
  468.  
  469.     add_to_chat(122,'Casting ['..state.CastingMode..'], '..meleeString..'Idle ['..state.IdleMode..'], '..defenseString..
  470.         'Kiting: '..on_off_names[state.Kiting])
  471.  
  472.     eventArgs.handled = true
  473. end
  474.  
  475. -------------------------------------------------------------------------------------------------------------------
  476. -- Utility functions specific to this job.
  477. -------------------------------------------------------------------------------------------------------------------
  478.  
  479. -- Reset the state vars tracking strategems.
  480. function update_active_strategems()
  481.     state.Buff['Ebullience'] = buffactive['Ebullience'] or false
  482.     state.Buff['Rapture'] = buffactive['Rapture'] or false
  483.     state.Buff['Perpetuance'] = buffactive['Perpetuance'] or false
  484.     state.Buff['Immanence'] = buffactive['Immanence'] or false
  485.     state.Buff['Penury'] = buffactive['Penury'] or false
  486.     state.Buff['Parsimony'] = buffactive['Parsimony'] or false
  487.     state.Buff['Celerity'] = buffactive['Celerity'] or false
  488.     state.Buff['Alacrity'] = buffactive['Alacrity'] or false
  489.  
  490.     state.Buff['Klimaform'] = buffactive['Klimaform'] or false
  491. end
  492.  
  493.  
  494. -- Equip sets appropriate to the active buffs, relative to the spell being cast.
  495. function apply_grimoire_bonuses(spell, action, spellMap)
  496.     if state.Buff.Perpetuance and spell.type =='WhiteMagic' and spell.skill == 'Enhancing Magic' then
  497.         equip(sets.buff['Perpetuance'])
  498.     end
  499.     if state.Buff.Rapture and (spellMap == 'Cure' or spellMap == 'Curaga') then
  500.         equip(sets.buff['Rapture'])
  501.     end
  502.     if spell.skill == 'Elemental Magic' and spellMap ~= 'ElementalEnfeeble' then
  503.         if state.Buff.Ebullience and spell.english ~= 'Impact' then
  504.             equip(sets.buff['Ebullience'])
  505.         end
  506.         if state.Buff.Immanence then
  507.             equip(sets.buff['Immanence'])
  508.         end
  509.         if state.Buff.Klimaform and spell.element == world.weather_element then
  510.             equip(sets.buff['Klimaform'])
  511.         end
  512.     end
  513.  
  514.     if state.Buff.Penury then equip(sets.buff['Penury']) end
  515.     if state.Buff.Parsimony then equip(sets.buff['Parsimony']) end
  516.     if state.Buff.Celerity then equip(sets.buff['Celerity']) end
  517.     if state.Buff.Alacrity then equip(sets.buff['Alacrity']) end
  518. end
  519.  
  520.  
  521. -- General handling of strategems in an Arts-agnostic way.
  522. -- Format: gs c scholar <strategem>
  523. function handle_strategems(cmdParams)
  524.     -- cmdParams[1] == 'scholar'
  525.     -- cmdParams[2] == strategem to use
  526.  
  527.     if not cmdParams[2] then
  528.         add_to_chat(123,'Error: No strategem command given.')
  529.         return
  530.     end
  531.     local strategem = cmdParams[2]:lower()
  532.  
  533.     if buffactive['light arts'] or buffactive['addendum: white'] then
  534.         if strategem == 'cost' then
  535.             send_command('@input /ja Penury <me>')
  536.         elseif strategem == 'speed' then
  537.             send_command('@input /ja Celerity <me>')
  538.         elseif strategem == 'aoe' then
  539.             send_command('@input /ja Accession <me>')
  540.         elseif strategem == 'power' then
  541.             send_command('@input /ja Rapture <me>')
  542.         elseif strategem == 'duration' then
  543.             send_command('@input /ja Perpetuance <me>')
  544.         elseif strategem == 'accuracy' then
  545.             send_command('@input /ja Altruism <me>')
  546.         elseif strategem == 'enmity' then
  547.             send_command('@input /ja Tranquility <me>')
  548.         elseif strategem == 'skillchain' then
  549.             add_to_chat(122,'Error: Light Arts does not have a skillchain strategem.')
  550.         elseif strategem == 'addendum' then
  551.             send_command('@input /ja "Addendum: White" <me>')
  552.         else
  553.             add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  554.         end
  555.     elseif buffactive['dark arts']  or buffactive['addendum: black'] then
  556.         if strategem == 'cost' then
  557.             send_command('@input /ja Parsimony <me>')
  558.         elseif strategem == 'speed' then
  559.             send_command('@input /ja Alacrity <me>')
  560.         elseif strategem == 'aoe' then
  561.             send_command('@input /ja Manifestation <me>')
  562.         elseif strategem == 'power' then
  563.             send_command('@input /ja Ebullience <me>')
  564.         elseif strategem == 'duration' then
  565.             add_to_chat(122,'Error: Dark Arts does not have a duration strategem.')
  566.         elseif strategem == 'accuracy' then
  567.             send_command('@input /ja Focalization <me>')
  568.         elseif strategem == 'enmity' then
  569.             send_command('@input /ja Equanimity <me>')
  570.         elseif strategem == 'skillchain' then
  571.             send_command('@input /ja Immanence <me>')
  572.         elseif strategem == 'addendum' then
  573.             send_command('@input /ja "Addendum: Black" <me>')
  574.         else
  575.             add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  576.         end
  577.     else
  578.         add_to_chat(123,'No arts has been activated yet.')
  579.     end
  580. end
  581.  
  582.  
  583. -- Gets the current number of available strategems based on the recast remaining
  584. -- and the level of the sch.
  585. function get_current_strategem_count()
  586.     -- returns recast in seconds.
  587.     local allRecasts = windower.ffxi.get_ability_recasts()
  588.     local stratsRecast = allRecasts[231]
  589.  
  590.     local maxStrategems
  591.  
  592.     if player.main_job_level >= 90 then
  593.         maxStrategems = 5
  594.     elseif player.main_job_level >= 70 then
  595.         maxStrategems = 4
  596.     elseif player.main_job_level >= 50 then
  597.         maxStrategems = 3
  598.     elseif player.main_job_level >= 30 then
  599.         maxStrategems = 2
  600.     elseif player.main_job_level >= 10 then
  601.         maxStrategems = 1
  602.     else
  603.         maxStrategems = 0
  604.     end
  605.  
  606.     local fullRechargeTime = 4*60
  607.  
  608.     local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
  609.  
  610.     return currentCharges
  611. end
  612.  
  613. NMtoStun = S{"Perdurable Raptor", "Shimmering Tarichuk", "Tutewehiwehi", "Tojil", "Unfettered Twitherym", "Supernal Chapuli", "Mastop", "Muyingwa","Faded Craklaw"," Aberrant Uragnite","Divagating Jagil", "Nerrivik","Krabakarpo", "Dakuwaqa" }
  614. SpelltoStun = S{"Impact", "Breakga", "Meteor", "Kaustra", "Slowga"}
  615.  
  616. --- Stun Bot
  617. windower.register_event('incoming text', function(original, modified, mode)
  618.     local match
  619.        
  620.        
  621.        
  622.        
  623.         --- NM Move trigger
  624.         if NMtoStun:contains(player.target.name) then
  625.         match = original:match(''..player.target.name..' readies ([%s%w]+)%.')
  626.        
  627.         if match then
  628.             send_command('input /ma "Stun" <t> ')
  629.             add_to_chat(204, '*-*-*-*-*-*-*-*-* [ '..player.target.name..' : '..match..' - Stunned ] *-*-*-*-*-*-*-*-*')
  630.        
  631.         end
  632.        
  633.         --- NM Move trigger
  634.        
  635.         match = original:match(''..player.target.name..' ready ([%s%w]+)%.')
  636.        
  637.         if match then
  638.             send_command('input /ma "Stun" <t> ')
  639.             add_to_chat(204, '*-*-*-*-*-*-*-*-* [ '..player.target.name..' : '..match..' - Stunned ] *-*-*-*-*-*-*-*-*')
  640.        
  641.         end
  642.        
  643.         --- NM Spell trigger
  644.         match = original:match(''..player.target.name..' starts casting ([%s%w]+)%.')
  645.        
  646.         if SpelltoStun:contains(match) then
  647.             send_command('input /ma "Stun" <t> ')
  648.             add_to_chat(204, '*-*-*-*-*-*-*-*-* [ '..player.target.name..' : '..match..' - Stunned ] *-*-*-*-*-*-*-*-*')
  649.        
  650.         end
  651.         end
  652.        
  653.  
  654.     return modified, mode
  655. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement