Advertisement
Lygre

Sch

Dec 11th, 2016
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 35.84 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job.  Generally should not be modified.
  3. -- Original LUA by Fenrir.Motenten; edited by Odin.Speedyjim
  4. -------------------------------------------------------------------------------------------------------------------
  5.  
  6. --[[
  7.         Custom commands:64
  8.  
  9.         Shorthand versions for each strategem type that uses the version appropriate for
  10.         the current Arts.
  11.         In-game macro: /console gs c scholar xxx
  12.  
  13.                                         Light Arts              Dark Arts
  14.  
  15.         gs c scholar light              Light Arts/Addendum
  16.         gs c scholar dark                                       Dark Arts/Addendum
  17.         gs c scholar cost               Penury                  Parsimony
  18.         gs c scholar speed              Celerity                Alacrity
  19.         gs c scholar aoe                Accession               Manifestation
  20.         gs c scholar power              Rapture                 Ebullience
  21.         gs c scholar duration           Perpetuance
  22.         gs c scholar accuracy           Altruism                Focalization
  23.         gs c scholar enmity             Tranquility             Equanimity
  24.         gs c scholar skillchain                                 Immanence
  25.         gs c scholar addendum           Addendum: White         Addendum: Black
  26. --]]
  27.  
  28.  
  29.  
  30. -- Initialization function for this job file.
  31. function get_sets()
  32.     mote_include_version = 2
  33.  
  34.     -- Load and initialize the include file.
  35.     include('Mote-Include.lua')
  36.     include('organizer-lib')
  37.         -- Area mapping --
  38.     Town = S{"Ru'Lude Gardens","Upper Jeuno","Lower Jeuno","Port Jeuno","Port Winsadurst","Windurst Waters","Windurst Woods","Windurst Walls","Heavens Tower",
  39.              "Port San d'Oria","Northern San d'Oria","Southern San d'Oria","Port Bastok","Bastok Markets","Bastok Mines","Metalworks","Aht Urhgan Whitegate",
  40.              "Tavnazian Safehold","Nashmau","Selbina","Mhaura","Norg","Eastern Adoulin","Western Adoulin","Kazham","Heavens Tower"}
  41. end
  42.  
  43. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  44. function job_setup()
  45.     info.addendumNukes = S{"Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",
  46.         "Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  47.  
  48.     state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
  49.     update_active_strategems()
  50. end
  51.  
  52. -------------------------------------------------------------------------------------------------------------------
  53. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  54. -------------------------------------------------------------------------------------------------------------------
  55. function user_unload()
  56.     send_command('unbind `')
  57.     send_command('unbind ^`')
  58.     send_command('unbind ^-')
  59.     send_command('unbind ^=')
  60.     send_command('unbind !`')
  61.     send_command('unbind !-')
  62.     send_command('unbind !=')
  63.     send_command('unbind @`')
  64.     send_command('unbind @-')
  65.     send_command('unbind @=')
  66.     send_command('unbind delete')
  67.     send_command('unbind end')
  68.     send_command('unbind home')
  69.     send_command('unbind ^F1')
  70.     send_command('unbind ^F2')
  71.     send_command('unbind ^F4')
  72.     send_command('unbind ^F3')
  73.     send_command('unbind !F2')
  74.     send_command('unbind !F4')
  75.     send_command('unbind !F1')
  76.     send_command('unbind !F2')
  77.     send_command('unbind !F5')
  78.     send_command('unbind @`')
  79. end
  80. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  81. function user_setup()
  82.     state.OffenseMode:options('None', 'Normal')
  83.     state.CastingMode:options('Normal', 'Resistant')
  84.     state.IdleMode:options('Normal', 'PDT')
  85.  
  86.     state.MagicBurst = M(false, 'Magic Burst')
  87.    
  88.     info.low_nukes = S{"Stone", "Water", "Aero", "Fire", "Blizzard", "Thunder",
  89.                        "Stone II", "Water II", "Aero II", "Fire II", "Blizzard II", "Thunder II",
  90.                        "Stone III", "Water III", "Aero III", "Fire III", "Blizzard III", "Thunder III",
  91.                        "Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",
  92.                        "Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
  93.     info.mid_nukes = S{}
  94.     info.high_nukes = S{}
  95.  
  96.     --send_command('bind ` input /ma Stun <t>; wait 0.5; input /p Casting STUN → «¶«<t>«¶«.')
  97.     send_command('bind ^` gs c toggle MagicBurst')
  98.     send_command('bind !` input /ja "Sublimation" <me>')
  99.     send_command('bind ^- gs c scholar light')
  100.     send_command('bind ^= gs c scholar dark')
  101.     send_command('bind @- gs c scholar cost')
  102.     send_command('bind @= gs c scholar power')
  103.     send_command('bind delete gs c scholar speed')
  104.     send_command('bind Home gs c scholar duration')
  105.     send_command('bind End gs c scholar aoe')
  106.     send_command('bind @` gs c scholar xxx')
  107.     send_command('@wait 5;input /lockstyleset 17')
  108.  
  109.     select_default_macro_book()
  110.     send_command('input /macro book 2;wait .1;input /macro set 1') -- set macro book/set here --
  111.     send_command('bind ^F1 input /ja  Immanence <me>;  input /p STARTING SC IMPACTION MB THUNDER.; Pause 1.5;  input /ma water <t>;  wait 4.0;  input /ja  Immanence <me>; wait 2.0; input /p CLOSING SC MB  THUNDER.;  input /ma Thunder <t>;  ')
  112.     send_command('bind ^F2 input /ja  Immanence <me>;  input /p STARTING SC Induration MB ICE.; Pause 1.5;  input /ma water <t>;  wait 4;  input /ja  Immanence <me>; wait 2.0; input /p CLOSING SC MB  BLIZZARD.;  input /ma Blizzard <t>;  ')
  113.     send_command('bind ^F3 input /ja  Immanence <me>;  input /p STARTING SC FUSION MB FIRE / LIGHT.; Pause 1.5;  input /ma Fire <t>;  wait 4.0;  input /ja  Immanence <me>; wait 2.0; input /p CLOSING SC MB  FIRE / LIGHT.;  input /ma Thunder <t>;  ')
  114.     send_command('bind ^F4 input /ja  Immanence <me>;  input /p STARTING SC DISTORTION MB ICE / WATER.; Pause 1.5;  input /ma Luminohelix <t>;  wait 6;  input /ja  Immanence <me>; wait 2.5; input /p CLOSING SC  MB  ICE / WATER. ;  input /ma Stone <t>;  ')
  115.     send_command('bind !F4 input /ja  Immanence <me>;  input /p STARTING SC REVERBERATION MB  WATER.; Pause 1.5;  input /ma Stone <t>;  wait 4.0;  input /ja  Immanence <me>; wait 2.0; input /p CLOSING SC  MB  WATER. ;  input /ma Water <t>;  ')
  116.     send_command('bind !F3 input /ja  Immanence <me>;  input /p STARTING SC Gravitation  MB Dark / Stone.; Pause 1.5;  input /ma Aero <t>;  wait 4.0;  input /ja  Immanence <me>; wait 2.0; input /p CLOSING SC  MB  DARK / STONE. ;  input /ma noctohelix <t>;  ')
  117.     send_command('bind !F2 input /ja  Immanence <me>;  input /p STARTING SC Fragmantation MB WIND / Thunder.; Pause 1.5;  input /ma Blizzard <t>;  wait 4.0;  input /ja  Immanence <me>; wait 2.0; input /p CLOSING SC  MB  WIND / THUNDER. ;  input /ma Water <t>;  ')
  118.     send_command('bind !F1 input /ja  Immanence <me>;  input /p STARTING SC Detonation MB WIND.; Pause 1.5;  input /ma Stone <t>;  wait 4.0;  input /ja  Immanence <me>; wait 2.0; input /p CLOSING SC  MB  WIND. ;  input /ma Aero <t>;  ')
  119.     send_command('bind !F5 input /ja  Immanence <me>;  input /p STARTING SC Scission MB Stone.; Pause 1.5;  input /ma Aero <t>;  wait 4.0;  input /ja  Immanence <me>; wait 2.0; input /p CLOSING SC  MB  STone. ;  input /ma Stone <t>;  ')
  120. end
  121.  
  122. -- Define sets and vars used by this job file.
  123. function init_gear_sets()
  124.     --------------------------------------
  125.     -- Start defining the sets
  126.     --------------------------------------
  127.  
  128.     FC_Head = {name="Merlinic Hood", augments={'Mag. Acc.+11','"Fast Cast"+6','MND+5','"Mag.Atk.Bns."+1',}}
  129.     FC_Hands = {name="Merlinic Dastanas", augments={'"Mag.Atk.Bns."+23','"Fast Cast"+6',}}
  130.     MB_Head = {name="Merlinic Hood", augments={'"Mag.Atk.Bns."+24','Magic burst mdg.+10%','INT+6',}}
  131.     MB_Feet= { name="Merlinic Crackows", augments={'Mag. Acc.+15','Magic burst mdg.+10%',}}
  132.     FC_Feet= { name="Merlinic Crackows", augments={'"Mag.Atk.Bns."+30','"Fast Cast"+6','MND+1','Mag. Acc.+2',}}
  133.    
  134.  
  135.     -- Precast sets to enhance JAs
  136.  
  137.     sets.precast.JA['Tabula Rasa'] = {legs="Pedagogy Pants"}
  138.     sets.precast.JA['Dark Arts'] = {"Academic's Gown +1"}
  139.     sets.precast.JA['Light Arts'] = {"Academic's Pants +1"}
  140.    
  141.     organizer_items = {agown="Academic's Gown +1"}
  142.  
  143.  
  144.     -- Fast cast sets for spells
  145.     -- FC +71%, Quick Magic +10% (cap)
  146.     sets.precast.FC = {main=grio_MB,sub="Arbuda Grip",ammo="Incantor Stone",
  147.         head=FC_Head,neck="Baetyl Pendant",ear1="Enchanter Earring +1",ear2="Loquacious Earring",
  148.         body="Anhur Robe",hands=FC_Hands,ring1="Weatherspoon Ring",ring2="Prolix Ring",
  149.         back="Perimede Cape",waist="Witful Belt",legs="Psycloth Lappas",feet=FC_Feet}
  150.  
  151.     sets.precast.FC.Cure = set_combine(sets.precast.FC, {main="Serenity",head="Paean Mitra",ear1="Mendicant's Earring",body="Vanya Robe",hands="Gendewitha Gages +1",back="Pahtli Cape",feet="Vanya Clogs"})
  152.     sets.precast.FC.Curaga = sets.precast.FC.Cure
  153.     sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
  154.     sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {neck="Stoicheion Medal",ear1="Barkarole Earring"})
  155.     sets.precast.FC.Impact = set_combine(sets.precast.FC['Elemental Magic'], {head=empty,body="Twilight Cloak"})
  156.    
  157.     -- Weaponskill sets
  158.     -- Default set for any weaponskill that isn't any more specifically defined
  159.     sets.precast.WS = {}
  160.  
  161.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  162.    
  163.     -- Total MP: 2221 (Outside Escha), ???? (Inside Escha)
  164.     sets.precast.WS['Myrkr'] = {main="Akademos",sub="Niobid Strap",ammo="Ghastly Tathlum +1",
  165.         head="Kaabnax Hat",neck="Sanctity Necklace",ear1="Moonshade Earring",ear2="Etiolation Earring",
  166.         body="Amalric Doublet",hands="Otomi Gloves",ring1="Mephitas's Ring +1",ring2="Mephitas's Ring",
  167.         back="Pahtli Cape",waist="Luminary Sash",legs="Amalric Slops",feet="Medium's Sabots"}
  168.  
  169.  
  170.     -- Midcast Sets
  171.  
  172.     sets.midcast.FastRecast = {back="Swith Cape +1"}
  173.     sets.midcast['Apururu (UC)'] = set_combine(sets.midcast.FastRecast, {body="Apururu Unity Shirt"})
  174.  
  175.     -- Cure Sets
  176.    
  177.     -- Potency: +51%, Healing Skill: 610 total inc. Light Arts bonus, Enmity: -20, MND: +168, VIT: +87
  178.     sets.midcast.Cure = {main="Serenity",sub="Curatio Grip",ammo="Hydrocera",
  179.         head="Kaykaus Mitra",neck="Incanter's Torque",ear1="Lifestorm Earring",ear2="Loquacious Earring",
  180.         body="Kaykaus Bliaut",hands="Pedagogy Bracers +1",ring1="Haoma's Ring",ring2="Sirona's Ring",
  181.         back="Tempered Cape +1",waist="Bishop's Sash",legs="Academic's Pants +1",feet="Vanya Clogs"}
  182.    
  183.     -- Potency: +50%, Healing Skill: 562 total inc. Light Arts Bonus, MND: +160, VIT+ 89
  184.     sets.midcast.CureWithLightWeather = set_combine(sets.midcast.Cure, {
  185.         main="Chatoyant Staff",ear2="Mendicant's Earring",body="Kaykaus Bliaut",hands="Telchine Gloves",back="Twilight Cape",waist="Hachirin-no-Obi"})
  186.  
  187.     sets.midcast.Curaga = sets.midcast.Cure
  188.  
  189.     sets.midcast.Regen = {main="Bolelabunga",sub="Genmei Shield",ammo="Savant's Treatise",
  190.         body="Telchine Chasuble",hands="Telchine Gloves",
  191.         head="Arbatel Bonnet +1",neck="Incanter's Torque",ear1="Andoaa Earring",
  192.         back="Bookworm's Cape",waist="Cascade Belt",legs="Telchine Braconi",feet="Telchine Pigaches"}
  193.    
  194.     -- Enhancing Magic Sets
  195.    
  196.     sets.midcast['Enhancing Magic'] = {main=grio_ENH,sub="Arbuda Grip",ammo="Savant's Treatise",
  197.         head="Telchine Cap",body="Telchine Chasuble",hands="Telchine Gloves",legs="Telchine Braconi",feet="Telchine Pigaches",
  198.         ear1="Andoaa Earring",neck="Incanter's Torque",waist="Cascade Belt"}
  199.     sets.midcast.Protect = set_combine(sets.midcast['Enhancing Magic'], {ring1="Sheltered Ring"})
  200.     sets.midcast.Shell = set_combine(sets.midcast['Enhancing Magic'], {ring1="Sheltered Ring"})
  201.     sets.midcast.Haste = set_combine(sets.midcast.FastRecast, {main=grio_ENH,sub="Arbuda Grip",
  202.         head="Telchine Cap",body="Telchine Chasuble",hands="Telchine Gloves",legs="Telchine Braconi",feet="Telchine Pigaches"})
  203.  
  204.     sets.midcast.Cursna = {main="Gada",sub="Genmei Shield",
  205.         neck="Malison Medallion",body="Vanya Robe",hands="Pedagogy Bracers +1",ring1="Haoma's Ring",ring2="Ephedra Ring",
  206.         back="Tempered Cape +1",waist="Bishop's Sash",legs="Academic's Pants +1",feet="Gendewitha Galoshes +1"}
  207.  
  208.     sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {neck="Nodens Gorget", waist="Siegel Sash"})
  209.     sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {waist="Gishdubar Sash",feet="Inspirited Boots"})
  210.     sets.midcast.Erase = sets.midcast.FastRecast
  211.     sets.midcast.Klimaform = sets.midcast.FastRecast
  212.  
  213.     -- Custom spell classes
  214.     sets.midcast.MndEnfeebles = {main=grio_MB,sub="Mephitis Grip",ammo="Hydrocera",
  215.         head=MB_Head,neck="Imbodla Necklace",ear1="Barkarole Earring",ear2="Dignitary's Earring",
  216.         body="Vanya Robe",hands="Lurid Mitts",ring1="Vertigo Ring",ring2="Globidonta Ring",
  217.         back="Refraction Cape",waist="Luminary Sash",legs=chiro_legs_ENF,feet="Medium's Sabots"}
  218.  
  219.     sets.midcast.IntEnfeebles = sets.midcast.MndEnfeebles
  220.     sets.midcast.ElementalEnfeeble = sets.midcast.IntEnfeebles
  221.     sets.midcast.Kaustra = set_combine(sets.midcast['Elemental Magic'], {head="Pixie Hairpin +1",back="Lugh's Cape"})
  222.  
  223.     sets.midcast['Dark Magic'] = {main="Rubicundity",sub="Genmei Shield",ammo="Hydrocera",
  224.         head=MB_Head,neck="Incanter's Torque",ear1="Barkarole Earring",ear2="Dignitary's Earring",
  225.         body="Psycloth Vest",hands="Lurid Mitts",ring1="Weatherspoon Ring",ring2="Evanescence Ring",
  226.         back="Bookworm's Cape",waist="Fucho-no-obi",legs="Pedagogy Pants",feet="Medium's Sabots"}
  227.  
  228.     -- sets.midcast.Dark = set_combine(sets.midcast['Dark Magic'], { -- For Aspir/Drain --
  229.     --     head="Pixie Hairpin +1",
  230.     --  neck="Incanter's Torque",
  231.     --  body="Vanya Robe",
  232.     --  ring1="Evanescence Ring",
  233.     --  ring2="Stikini Ring",
  234.     --  waist="Fucho-no-obi",
  235.     --  back="Bane Cape",
  236.     --  legs="Merlinic Shalwar",
  237.     --  feet="Merlinic Crackows"})
  238.     sets.midcast.Drains = set_combine(sets.midcast['Dark Magic'], {ammo="Incantor Stone",
  239.         head="Pixie Hairpin +1",ear1="Hirudinea Earring",ear2="Loquacious Earring",body="Chironic Doublet",hands=merl_hands_AS, waist="Fucho-no-obi", legs=merl_legs_AS,feet="Merlinic crackows"})
  240.  
  241.     sets.midcast.Aspirs = sets.midcast.Drains
  242.    
  243.     sets.midcast.Stun = {main=grio_MB,sub="Arbuda Grip",ammo="Incantor Stone",
  244.         head="Pedagogy Mortarboard +1",neck="Orunmila's Torque",ear1="Enchanter Earring +1",ear2="Loquac. Earring",
  245.         body="Shango Robe",hands="Gendewitha Gages +1",ring1="Weatherspoon Ring",ring2="Prolix Ring",
  246.         back="Swith Cape +1",waist="Ninurta's Sash",legs="Psycloth Lappas",feet="Academic's Loafers +1"}
  247.  
  248.     sets.midcast.Stun.Resistant = set_combine(sets.midcast.Stun, {})
  249.  
  250.  
  251.     -- Elemental Magic sets are default for handling all-tier nukes.
  252.      sets.midcast['Elemental Magic'] = {
  253.         main={ name="Akademos", augments={'INT+15','"Mag.Atk.Bns."+15','Mag. Acc.+15',}},
  254.         sub="Niobid Strap",
  255.         ammo="Pemphredo Tathlum",
  256.         head=MB_Head,
  257.         body="Jhakri Robe +1",
  258.         hands="Amalric Gages",
  259.         legs="Merlinic Shalwar",
  260.         feet=MB_Feet,
  261.         neck="Mizu. Kubikazari",
  262.         waist="Yamabuki-no-Obi",
  263.         left_ear="Calamitous Earring",
  264.         right_ear="Friomisi Earring",
  265.         left_ring="Mujin Band",
  266.         right_ring="Shiva Ring +1",
  267.         back={ name="Lugh's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Mag.Atk.Bns."+10',}},}
  268.  
  269.      --{main="Akademos",sub="Niobid Strap",ammo="Pemphredo Tathlum",
  270.         --head=merl_head_MAB,neck="Saevus Pendant +1",ear1="Barkarole Earring",ear2="Friomisi Earring",
  271.         --body="Merlinic Jubbah",hands=chiro_hands_MAB,ring1="Shiva Ring +1",ring2="Shiva Ring +1",
  272.         --back="Toro Cape",waist="Refoccilation Stone",legs=merl_legs_MAB,feet=merl_feet_MAB}
  273.     --  sub="Zuuxowu Grip",head="Buremte Hat",body="Witching Robe",hands="Otomi Gloves",back="Bookworm's Cape",waist="Tengu-no-Obi",feet="Amalric Nails"
  274.  
  275.     sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'], {neck="Sanctity Necklace"})
  276.  
  277.     -- Custom refinements for certain nuke tiers (No longer used as of Jan/2016).
  278.     sets.midcast['Elemental Magic'].HighTierNuke = sets.midcast['Elemental Magic']
  279.     sets.midcast['Elemental Magic'].HighTierNuke.Resistant = sets.midcast['Elemental Magic'].Resistant
  280.    
  281.     sets.midcast.Helix = set_combine(sets.midcast['Elemental Magic'], {neck="Sanctity Necklace",back="Bookworm's Cape"})
  282.     sets.midcast.Noctohelix = set_combine(sets.midcast.Helix, {head="Pixie Hairpin +1"})
  283.     sets.midcast.Luminohelix = set_combine(sets.midcast.Helix, {ring1="Weatherspoon Ring"})
  284.  
  285.     sets.midcast.Impact = {main="Akademos",sub="Mephitis Grip",ammo="Hydrocera",
  286.     head=empty,neck="Sanctity Necklace",ear1="Barkarole Earring",ear2="Gwati Earring",
  287.     body="Twilight Cloak",hands=chiro_hands_MAB,ring1="Weatherspoon Ring",ring2="Sangoma Ring",
  288.     back="Refraction Cape",waist="Luminary Sash",legs=chiro_legs_ENF,feet="Medium's Sabots"}
  289.    
  290.     --  sets.midcast.Impact = {main="Akademos",sub="Mephitis Grip",ammo="Hydrocera",
  291.         --head=empty,neck="Sanctity Necklace",ear1="Barkarole Earring",ear2="Gwati Earring",
  292.         ---body="Twilight Cloak",hands=chiro_hands_MAB,ring1="Weatherspoon Ring",ring2="Sangoma Ring",
  293.         --back="Refraction Cape",waist="Luminary Sash",legs=chiro_legs_ENF,feet="Medium's Sabots"}
  294.  
  295.  
  296.     -- Sets to return to when not performing an action.
  297.  
  298.     -- Resting sets
  299.     sets.resting = {main="Chatoyant Staff",sub="Mephitis Grip",
  300.         head="Amalric coif",neck="Wiglen Gorget",body="Jhakri robe +1",hands="Serpentes Cuffs",
  301.         ring1="Sheltered Ring",ring2="Paguroidea Ring",legs="Assiduity Pants +1",feet="Serpentes Sabots"}
  302.  
  303.  
  304.     -- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
  305.  
  306.     sets.idle.Town = {main="Akademos",sub="Niobid Strap",ammo="Hydrocera",
  307.         head=MB_Head,neck="Orunmila's Torque",ear1="Enchanter Earring +1",ear2="Loquacious Earring",
  308.         body="Merlinic Jubbah",hands=chiro_hands_REF,ring1="Shiva Ring +1",ring2="Matrimony Ring",
  309.         back="Bookworm's Cape",waist="Fucho-no-obi",legs=merl_legs_MAB,feet="Herald's Gaiters"}
  310.  
  311.     sets.idle.Field = {main="Bolelabunga",sub="Sors Shield",ammo="Homiliary",
  312.         head="Amalric Coif",neck="Loricate Torque +1",ear1="Etiolation Earring",ear2="Loquacious Earring",
  313.         body="Jhakri robe +1",hands=chiro_hands_REF,ring1="Defending Ring",ring2=gear.DarkRing.physical,
  314.         back="Umbra Cape",waist="Witful Belt",legs="Assiduity Pants +1",feet="Gendewitha Galoshes +1"} 
  315.        
  316.     sets.idle.PDT = {main="Bolelabunga",sub="Sors Shield",ammo="Incantor Stone", head="Amalric Coif",
  317.         neck="Loricate Torque +1",ear1="Ethereal Earring",ring1="Defending Ring",ring2=gear.DarkRing.physical,
  318.         body="Vanya Robe",hands="Gendewitha Gages +1",back="Umbra Cape",feet="Pedagogy Loafers +1"}
  319.  
  320.     sets.idle.Weak = sets.idle.Field
  321.    
  322.     -- Defense sets
  323.  
  324.     sets.defense.PDT = {main="Bolelabunga",sub="Sors Shield",ammo="Incantor Stone",
  325.         head="Befouled Crown",neck="Loricate Torque +1",ear1="Ethereal Earring",
  326.         body="Gendewitha Bliaut +1",hands="Gendewitha Gages +1",ring1="Defending Ring",ring2=gear.DarkRing.physical,
  327.         back="Umbra Cape",legs=chiro_legs_ENF,feet="Gendewitha Galoshes +1"}
  328.  
  329.     sets.defense.MDT = {
  330.         head=MB_Head,neck="Loricate Torque +1",
  331.         body="Pedagogy Gown +1",hands=chiro_hands_MAB,ring1="Defending Ring",ring2="Shadow Ring",
  332.         back="Umbra Cape",legs=chiro_legs_ENF,feet="Arbatel Loafers +1"}
  333.  
  334.     sets.Kiting = {feet="Herald's Gaiters"}
  335.     sets.latent_refresh = {waist="Fucho-no-obi"}
  336.  
  337.     -- Engaged sets
  338.  
  339.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  340.     -- sets if more refined versions aren't defined.
  341.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  342.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  343.  
  344.     -- Normal melee group
  345.     sets.engaged = {}
  346.  
  347.  
  348.     -- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
  349.     sets.buff['Ebullience'] = {}
  350.     sets.buff['Rapture'] = {head="Arbatel Bonnet +1"}
  351.     sets.buff['Perpetuance'] = {hands="Arbatel Bracers +1"}
  352.     sets.buff['Immanence'] = {hands="Arbatel Bracers +1"}
  353.     sets.buff['Penury'] = {legs="Arbatel Pants +1"}
  354.     sets.buff['Parsimony'] = {legs="Arbatel Pants +1"}
  355.     sets.buff['Celerity'] = {feet="Pedagogy Loafers +1"}
  356.     sets.buff['Alacrity'] = {head=MB_Head,feet="Pedagogy Loafers +1"}
  357.     sets.buff['Stormsurge'] = {feet="Pedagogy Loafers +1"}
  358.     sets.buff['Klimaform'] = {waist="Hachirin-no-Obi",feet="Arbatel Loafers +1"}
  359.  
  360.     sets.buff.FullSublimation = {head="Academic's Mortarboard +1",ear1="Savant's Earring",body="Pedagogy Gown +1",neck="Wiglen Gorget",ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  361.     sets.buff.PDTSublimation = {head="Academic's Mortarboard +1",ear1="Savant's Earring",body="Pedagogy Gown +1"}
  362.    
  363.     sets.magic_burst = {main="Akademos",sub="Niobid Strap",
  364.         neck="Mizukage-no-Kubikazari",body=merl_body_MB,hands="Amalric Gages",ring1="Mujin Band",legs="Merlinic Shalwar"}
  365.     -- Cap: 40%, Cap-breaking: 23% (Gifts: 13%, Mujin: 5%, Amalric Gages: 5%)
  366.     -- Akademos: 10%, Mizukage: 10%, Merlinic Body: 10%, Merlinic Legs: 8% = 38%
  367.  
  368. end
  369.  
  370. -------------------------------------------------------------------------------------------------------------------
  371. -- Job-specific hooks for standard casting events.
  372. -------------------------------------------------------------------------------------------------------------------
  373. function refine_various_spells(spell, action, spellMap, eventArgs)
  374.     aspirs = S{'Aspir','Aspir II'}
  375.     sleeps = S{'Sleep','Sleep II'}
  376.     sleepgas = S{'Sleepga'}
  377.    
  378.     if not sleepgas:contains(spell.english) and not sleeps:contains(spell.english) and not aspirs:contains(spell.english) then
  379.         return
  380.     end
  381.    
  382.     local newSpell = spell.english
  383.     local spell_recasts = windower.ffxi.get_spell_recasts()
  384.     local cancelling = 'All '..spell.english..' spells are on cooldown. Cancelling spell casting.'
  385.    
  386.     if spell_recasts[spell.recast_id] > 0 then
  387.         if aspirs:contains(spell.english) then
  388.             if spell.english == 'Aspir' then
  389.                 add_to_chat(122,cancelling)
  390.                 eventArgs.cancel = true
  391.                 return
  392.             elseif spell.english == 'Aspir II' then
  393.                 newSpell = 'Aspir'
  394.             end        
  395.         elseif sleeps:contains(spell.english) then
  396.             if spell.english == 'Sleep' then
  397.                 add_to_chat(122,cancelling)
  398.                 eventArgs.cancel = true
  399.                 return
  400.             elseif spell.english == 'Sleep II' then
  401.                 newSpell = 'Sleep'
  402.             end
  403.         elseif sleepgas:contains(spell.english) then
  404.             if spell.english == 'Sleepga' then
  405.                 add_to_chat(122,cancelling)
  406.                 eventArgs.cancel = true
  407.                 return
  408.             end
  409.         end
  410.     end
  411.    
  412.     if newSpell ~= spell.english then
  413.         send_command('@input /ma "'..newSpell..'" '..tostring(spell.target.raw))
  414.         eventArgs.cancel = true
  415.         return
  416.     end
  417. end
  418.  
  419. function job_precast(spell, action, spellMap, eventArgs)   
  420.     refine_various_spells(spell, action, spellMap, eventArgs)
  421.     if (spell.type:endswith('Magic') or spell.type == "Ninjutsu") then
  422.        if buffactive.Silence then
  423.         cancel_spell()
  424.         send_command('input /item "Echo Drops" <me>')
  425.        end
  426.     end
  427.    
  428.     if spell.english == "Paralyna" and buffactive.Paralyzed then
  429.         -- no gear swaps if we're paralyzed, to avoid blinking while trying to remove it.
  430.         eventArgs.handled = true
  431.     end
  432.    
  433. end
  434.    
  435. -- Run after the general midcast() is done.
  436. function job_post_midcast(spell, action, spellMap, eventArgs)
  437.     if spell.action_type == 'Magic' then
  438.         apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
  439.     end
  440.     if spell.skill == 'Elemental Magic' then
  441.         if state.MagicBurst.value then
  442.         equip(sets.magic_burst)
  443.         end
  444.     end
  445.     if spell.skill == 'Elemental Magic' and spell.element == world.day_element or spell.element == world.weather_element then
  446.         equip (sets.midcast['Elemental Magic'],{waist="Hachirin-no-Obi"})
  447.     end
  448. end
  449.  
  450. function job_aftercast(spell,action)
  451.     if spell.english == 'Sleep' or spell.english == 'Sleepga' then
  452.         send_command('@wait 50;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
  453.     elseif spell.english == 'Sleep II' or spell.english == 'Sleepga II' then
  454.         send_command('@wait 80;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
  455.     elseif spell.english == 'Break' or spell.english == 'Breakga' then
  456.         send_command('@wait 20;input /echo ------- '..spell.english..' is wearing off in 10 seconds -------')
  457.     end
  458. end        
  459.  
  460. -------------------------------------------------------------------------------------------------------------------
  461. -- Job-specific hooks for non-casting events.
  462. -------------------------------------------------------------------------------------------------------------------
  463.  
  464. -- Called when a player gains or loses a buff.
  465. -- buff == buff gained or lost
  466. -- gain == true if the buff was gained, false if it was lost.
  467. function job_buff_change(buff, gain)
  468.     if buff == "Sublimation: Activated" then
  469.         handle_equipping_gear(player.status)
  470.     end
  471. end
  472.  
  473. -- Handle notifications of general user state change.
  474. function job_state_change(stateField, newValue, oldValue)
  475.     if stateField == 'Offense Mode' then
  476.         if newValue == 'Normal' then
  477.             disable('main','sub','range')
  478.         else
  479.             enable('main','sub','range')
  480.         end
  481.     end
  482. end
  483.  
  484. -------------------------------------------------------------------------------------------------------------------
  485. -- User code that supplements standard library decisions.
  486. -------------------------------------------------------------------------------------------------------------------
  487.  
  488. -- Custom spell mapping.
  489. function job_get_spell_map(spell, default_spell_map)
  490.     if spell.action_type == 'Magic' then
  491.         if default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
  492.             if world.weather_element == 'Light' then
  493.                 return 'CureWithLightWeather'
  494.             end
  495.         elseif spell.skill == 'Enfeebling Magic' then
  496.             if spell.type == 'WhiteMagic' then
  497.                 return 'MndEnfeebles'
  498.             else
  499.                 return 'IntEnfeebles'
  500.             end
  501.         elseif spell.skill == 'Elemental Magic' then
  502.             if info.low_nukes:contains(spell.english) then
  503.                 return 'LowTierNuke'
  504.             elseif info.mid_nukes:contains(spell.english) then
  505.                 return 'MidTierNuke'
  506.             elseif info.high_nukes:contains(spell.english) then
  507.                 return 'HighTierNuke'
  508.             end
  509.         end
  510.     end
  511. end
  512.  
  513. function customize_idle_set(idleSet)
  514.     if state.Buff['Sublimation: Activated'] then
  515.         if state.IdleMode.value == 'Normal' then
  516.             idleSet = set_combine(idleSet, sets.buff.FullSublimation)
  517.         elseif state.IdleMode.value == 'PDT' then
  518.             idleSet = set_combine(idleSet, sets.buff.PDTSublimation)
  519.         end
  520.     end
  521.  
  522.     if player.mpp < 51 then
  523.         idleSet = set_combine(idleSet, sets.latent_refresh)
  524.     end
  525.  
  526.     return idleSet
  527. end
  528.  
  529. -- Called by the 'update' self-command.
  530. function job_update(cmdParams, eventArgs)
  531.     if cmdParams[1] == 'user' and not (buffactive['light arts']      or buffactive['dark arts'] or
  532.                        buffactive['addendum: white'] or buffactive['addendum: black']) then
  533.         if state.IdleMode.value == 'Stun' then
  534.             send_command('@input /ja "Dark Arts" <me>')
  535.         else
  536.             send_command('@input /ja "Light Arts" <me>')
  537.         end
  538.     end
  539.  
  540.     update_active_strategems()
  541.     update_sublimation()
  542. end
  543.  
  544. -- Function to display the current relevant user state when doing an update.
  545. -- Return true if display was handled, and you don't want the default info shown.
  546. function display_current_job_state(eventArgs)
  547.     display_current_caster_state()
  548.     eventArgs.handled = true
  549. end
  550.  
  551. -------------------------------------------------------------------------------------------------------------------
  552. -- User code that supplements self-commands.
  553. -------------------------------------------------------------------------------------------------------------------
  554.  
  555. -- Called for direct player commands.
  556. function job_self_command(cmdParams, eventArgs,command)
  557.     if cmdParams[1]:lower() == 'scholar' then
  558.         handle_strategems(cmdParams)
  559.         eventArgs.handled = true
  560.     end
  561. end
  562.  
  563. -------------------------------------------------------------------------------------------------------------------
  564. -- Utility functions specific to this job.
  565. -------------------------------------------------------------------------------------------------------------------
  566.  
  567. -- Reset the state vars tracking strategems.
  568. function update_active_strategems()
  569.     state.Buff['Ebullience'] = buffactive['Ebullience'] or false
  570.     state.Buff['Rapture'] = buffactive['Rapture'] or false
  571.     state.Buff['Perpetuance'] = buffactive['Perpetuance'] or false
  572.     state.Buff['Immanence'] = buffactive['Immanence'] or false
  573.     state.Buff['Penury'] = buffactive['Penury'] or false
  574.     state.Buff['Parsimony'] = buffactive['Parsimony'] or false
  575.     state.Buff['Celerity'] = buffactive['Celerity'] or false
  576.     state.Buff['Alacrity'] = buffactive['Alacrity'] or false
  577.  
  578.     state.Buff['Klimaform'] = buffactive['Klimaform'] or false
  579. end
  580.  
  581. function update_sublimation()
  582.     state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
  583. end
  584.  
  585. -- Equip sets appropriate to the active buffs, relative to the spell being cast.
  586. function apply_grimoire_bonuses(spell, action, spellMap)
  587.     if state.Buff.Perpetuance and spell.type =='WhiteMagic' and spell.skill == 'Enhancing Magic' then
  588.         equip(sets.buff['Perpetuance'])
  589.     end
  590.     if state.Buff.Rapture and (spellMap == 'Cure' or spellMap == 'Curaga') then
  591.         equip(sets.buff['Rapture'])
  592.     end
  593.     if spell.skill == 'Elemental Magic' then --or spellMap ~= 'ElementalEnfeeble'
  594.         if state.Buff.Ebullience and spell.english ~= 'Impact' then
  595.             equip(sets.buff['Ebullience'])
  596.         end
  597.         if state.Buff.Immanence then
  598.             equip(sets.buff['Immanence'])
  599.         end
  600.         if state.Buff.Klimaform and spell.skill == "Elemental Magic" and spell.element == world.weather_element then
  601.             equip(sets.buff['Klimaform'])
  602.         end
  603.     end
  604.  
  605.     if state.Buff.Penury then equip(sets.buff['Penury']) end
  606.     if state.Buff.Parsimony then equip(sets.buff['Parsimony']) end
  607.     if state.Buff.Celerity then equip(sets.buff['Celerity']) end
  608.     if state.Buff.Alacrity then equip(sets.buff['Alacrity']) end
  609. end
  610.  
  611.  
  612. function display_current_caster_state()
  613.     local msg = ''
  614.  
  615.     if state.OffenseMode.value ~= 'None' then
  616.         msg = msg .. 'Melee'
  617.  
  618.         if state.CombatForm.has_value then
  619.             msg = msg .. ' (' .. state.CombatForm.value .. ')'
  620.         end
  621.        
  622.         msg = msg .. ', '
  623.     end
  624.  
  625.     msg = msg .. 'Idle ['..state.IdleMode.value..'], Casting ['..state.CastingMode.value..']'
  626.  
  627.     add_to_chat(122, msg)
  628.     local currentStrats = get_current_strategem_count()
  629.     local arts
  630.     if buffactive['Light Arts'] or buffactive['Addendum: White'] then
  631.         arts = 'Light Arts'
  632.     elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
  633.         arts = 'Dark Arts'
  634.     else
  635.         arts = 'No Arts Activated'
  636.     end
  637.     add_to_chat(122, 'Current Available Strategems: ['..currentStrats..'], '..arts..'')
  638. end
  639.  
  640. -- General handling of strategems in an Arts-agnostic way.
  641. -- Format: gs c scholar <strategem>
  642. function handle_strategems(cmdParams)
  643.     -- cmdParams[1] == 'scholar'
  644.     -- cmdParams[2] == strategem to use
  645.     if not cmdParams[2] then
  646.         add_to_chat(123,'Error: No strategem command given.')
  647.         return
  648.     end
  649.  
  650.     local currentStrats = get_current_strategem_count()
  651.     local newStratCount = currentStrats - 1
  652.     local strategem = cmdParams[2]:lower()
  653.    
  654.     if currentStrats > 0 and strategem ~= 'light' and strategem ~= 'dark' then
  655.         add_to_chat(122, '***Current Charges Available: ['..newStratCount..']***')
  656.     elseif currentStrats == 0 then
  657.         add_to_chat(122, '***Out of strategems! Canceling...***')
  658.         return
  659.     end
  660.  
  661.     if strategem == 'light' then
  662.         if buffactive['light arts'] then
  663.             send_command('input /ja "Addendum: White" <me>')
  664.             add_to_chat(122, '***Current Charges Available: ['..newStratCount..']***')
  665.         elseif buffactive['addendum: white'] then
  666.             add_to_chat(122,'Error: Addendum: White is already active.')
  667.         elseif buffactive['dark arts']  or buffactive['addendum: black'] then
  668.             send_command('input /ja "Light Arts" <me>')
  669.             add_to_chat(122, '***Changing Arts! Current Charges Available: ['..currentStrats..']***')
  670.         else
  671.             send_command('input /ja "Light Arts" <me>')
  672.         end
  673.     elseif strategem == 'dark' then
  674.         if buffactive['dark arts'] then
  675.             send_command('input /ja "Addendum: Black" <me>')
  676.             add_to_chat(122, '***Current Charges Available: ['..newStratCount..']***')
  677.         elseif buffactive['addendum: black'] then
  678.             add_to_chat(122,'Error: Addendum: Black is already active.')
  679.         elseif buffactive['light arts'] or buffactive['addendum: white'] then
  680.             send_command('input /ja "Dark Arts" <me>')
  681.             add_to_chat(122, '***Changing Arts! Current Charges Available: ['..currentStrats..']***')
  682.         else
  683.             send_command('input /ja "Dark Arts" <me>')
  684.         end
  685.     elseif buffactive['light arts'] or buffactive['addendum: white'] then
  686.         if strategem == 'cost' then
  687.             send_command('@input /ja Penury <me>')
  688.         elseif strategem == 'speed' then
  689.             send_command('@input /ja Celerity <me>')
  690.         elseif strategem == 'aoe' then
  691.             send_command('@input /ja Accession <me>')
  692.         elseif strategem == 'power' then
  693.             send_command('@input /ja Rapture <me>')
  694.         elseif strategem == 'duration' then
  695.             send_command('@input /ja Perpetuance <me>')
  696.         elseif strategem == 'accuracy' then
  697.             send_command('@input /ja Altruism <me>')
  698.         elseif strategem == 'enmity' then
  699.             send_command('@input /ja Tranquility <me>')
  700.         elseif strategem == 'skillchain' then
  701.             add_to_chat(122,'Error: Light Arts does not have a skillchain strategem.')
  702.         elseif strategem == 'addendum' then
  703.             send_command('@input /ja "Addendum: White" <me>')
  704.         else
  705.             add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  706.         end
  707.     elseif buffactive['dark arts']  or buffactive['addendum: black'] then
  708.         if strategem == 'cost' then
  709.             send_command('@input /ja Parsimony <me>')
  710.         elseif strategem == 'speed' then
  711.             send_command('@input /ja Alacrity <me>')
  712.         elseif strategem == 'aoe' then
  713.             send_command('@input /ja Manifestation <me>')
  714.         elseif strategem == 'power' then
  715.             send_command('@input /ja Ebullience <me>')
  716.         elseif strategem == 'duration' then
  717.             add_to_chat(122,'Error: Dark Arts does not have a duration strategem.')
  718.         elseif strategem == 'accuracy' then
  719.             send_command('@input /ja Focalization <me>')
  720.         elseif strategem == 'enmity' then
  721.             send_command('@input /ja Equanimity <me>')
  722.         elseif strategem == 'skillchain' then
  723.             send_command('@input /ja Immanence <me>')
  724.         elseif strategem == 'addendum' then
  725.             send_command('@input /ja "Addendum: Black" <me>')
  726.         else
  727.             add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
  728.         end
  729.     else
  730.         add_to_chat(123,'No arts has been activated yet.')
  731.     end
  732. end
  733.  
  734. function get_current_strategem_count()
  735.     local allRecasts = windower.ffxi.get_ability_recasts()
  736.     local stratsRecast = allRecasts[231]
  737.  
  738.     local maxStrategems = math.floor(player.main_job_level + 10) / 20
  739.  
  740.     local fullRechargeTime = 5*33
  741.  
  742.     local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
  743.    
  744.     return currentCharges
  745. end
  746. -- Automatically changes Idle gears if you zone in or out of town --
  747. windower.register_event('zone change', function()
  748.     status_change(player.status)
  749.     if Town:contains(world.zone) then  
  750.         equip(sets.idle.Town)
  751.     else
  752.         equip(sets.idle.Field)    
  753.     end
  754. end)
  755.  
  756. -- Select default macro book on initial load or subjob change.
  757. function select_default_macro_book()
  758.     if player.sub_job == 'RDM' then
  759.         set_macro_page(1, 2)
  760.     elseif player.sub_job == 'BLM' then
  761.         set_macro_page(1, 2)   
  762.     elseif player.sub_job == 'WHM' then
  763.         set_macro_page(1, 2)
  764.     end
  765. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement