Pergatory

Pergatory's SMN Gearswap

Jan 27th, 2017 (edited)
21,017
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 49.55 KB | None | 0 0
  1. -- Summoner Gearswap Lua by Pergatory - http://pastebin.com/u/pergatory
  2. -- IdleMode determines the set used after casting. You change it with "/console gs c <IdleMode>"
  3. -- The out-of-the-box modes are:
  4. -- Refresh: Uses the most refresh available.
  5. -- DT: A mix of refresh, PDT, and MDT to help when you can't avoid AOE.
  6. -- PetDT: Sacrifice refresh to reduce avatar's damage taken. WARNING: Selenian Cap drops you below 119, use with caution!
  7. -- DD: When melee mode is on and you're engaged, uses TP gear. Otherwise, avatar melee gear.
  8. -- Favor: Uses Beckoner's Horn and max smn skill to boost the favor effect.
  9. -- Zendik: Favor build with the Zendik Robe added in, for Shiva's Favor in manaburn parties. (Shut up, it sounded like a good idea at the time)
  10.  
  11. -- You can add your own modes in the IdleModes list, just make sure to add corresponding sets as well.
  12.  
  13. -- Additional Bindings:
  14. -- F9 - Toggles between a subset of IdleModes (Refresh > DT > PetDT)
  15. -- Ctrl+F9 - Toggles WeaponLock (When enabled, equips Nirvana and Elan+1, then disables those 2 slots from swapping)
  16. --       NOTE: If you don't already have the Nirvana & Elan+1 equipped, YOU WILL LOSE TP
  17.  
  18. -- Additional Commands:
  19. -- /console gs c AccMode - Toggles high-accuracy sets to be used where appropriate.
  20. -- /console gs c ImpactMode - Toggles between using normal magic BP set for Fenrir's Impact or a custom high-skill set for debuffs.
  21. -- /console gs c ForceIlvl - I have this set up to override a few specific slots where I normally use non-ilvl pieces.
  22. -- /console gs c TH - Treasure Hunter toggle. By default, this is only used for Dia, Dia II, and Diaga.
  23. -- /console gs c LagMode - Used to help BPs land in the right gear in high-lag situations.
  24. --                          Sets a timer to swap gear 0.5s after the BP is used rather than waiting for server response.
  25.  
  26. function file_unload()
  27.     send_command('unbind f9')
  28.     send_command('unbind f11')
  29.     send_command('unbind ^f9')
  30.     send_command('unbind ^f10')
  31.     enable("main","sub","range","ammo","head","neck","ear1","ear2","body","hands","ring1","ring2","back","waist","legs","feet")
  32. end
  33.  
  34. function get_sets()
  35.     send_command('bind f9 gs c ToggleIdle') -- F9 = Cycle through commonly used idle modes
  36.     send_command('bind f11 gs c ForceIlvl') -- Ctrl+F9 = Toggle ForceIlvl
  37.     send_command('bind ^f9 gs c WeaponLock') -- F10 = Toggle Melee Mode
  38.     send_command('bind ^f10 gs c TH') -- Ctrl+F10 = Treasure Hunter toggle
  39.  
  40.     -- Set your merits here. This is used in deciding between Enticer's Pants or Apogee Slacks +1.
  41.     -- To change in-game, "/console gs c MeteorStrike3" will change Meteor Strike to 3/5 merits.
  42.     -- The damage difference is very minor unless you're over 2400 TP.
  43.     -- It's ok to just always use Enticer's Pants and ignore this section.
  44.     MeteorStrike = 1
  45.     HeavenlyStrike = 1
  46.     WindBlade = 1
  47.     Geocrush = 1
  48.     Thunderstorm = 5
  49.     GrandFall = 1
  50.  
  51.     StartLockStyle = '85'
  52.     IdleMode = 'Refresh'
  53.     AccMode = false
  54.     ImpactDebuff = false
  55.     WeaponLock = false
  56.     TreasureHunter = false
  57.     THSpells = S{"Dia","Dia II","Diaga","Bio","Bio II"} -- If you want Treasure Hunter gear to swap for a spell/ability, add it here.
  58.     ForceIlvl = false
  59.     LagMode = false -- Default LagMode. If you have a lot of lag issues, change to "true".
  60.         -- Warning: LagMode can cause problems if you spam BPs during Conduit because it doesn't trust server packets to say whether the BP is readying or not.
  61.     SacTorque = true -- If you have Sacrifice Torque, this will auto-equip it when slept in order to wake up.
  62.     AutoRemedy = false -- Auto Remedy when using an ability while Paralyzed.
  63.     AutoEcho = false -- Auto Echo Drop when using an ability while Silenced.
  64.  
  65.     -- Add idle modes here if you need more options for your sets
  66.     IdleModes = {'Refresh','DT','DD','PetDT','PetDD','Favor','Zendik','MEva','Enspell'}
  67.  
  68.     -- ===================================================================================================================
  69.     --      Sets
  70.     -- ===================================================================================================================
  71.  
  72.     -- Base Damage Taken Set - Mainly used when IdleMode is "DT"
  73.     sets.DT_Base = {
  74.         main="Nirvana",
  75.         sub="Oneiros Grip",
  76.         ammo="Epitaph",
  77.         head="Beckoner's Horn +3",
  78.         neck="Summoner's Collar +2",
  79.         ear1="Cath Palug Earring",
  80.         ear2="Beckoner's Earring +1",
  81.         body="Beckoner's Doublet +3",
  82.         hands={ name="Merlinic Dastanas", augments={'Pet: Crit.hit rate +2','"Mag.Atk.Bns."+25','"Refresh"+2','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
  83.         ring1="Inyanga Ring",
  84.         ring2="Defending Ring",
  85.         back={ name="Campestres's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Mag.Atk.Bns."+10','Phys. dmg. taken-10%',}},
  86.         waist="Carrier's Sash",
  87.         legs="Inyanga Shalwar +2",
  88.         feet="Baayami Sabots +1"
  89.     }
  90.  
  91.     -- Treasure Hunter set. Don't put anything in here except TH+ gear.
  92.     -- It overwrites slots in other sets when TH toggle is on (Ctrl+F10).
  93.     sets.TH = {
  94.         head="Volte Cap",
  95.         waist="Chaac Belt",
  96.         body="Nyame Mail", -- Because otherwise Cohort Cloak and such mess up the swap
  97.         hands="Volte Bracers",
  98.         feet="Volte Boots"
  99.     }
  100.    
  101.     -- This gets equipped automatically when you have Sneak/Invis or Quickening such as from Fleet Wind.
  102.     sets.Movement = {
  103.         feet="Herald's Gaiters"
  104.     }
  105.  
  106.     sets.precast = {}
  107.  
  108.     -- Fast Cast
  109.     sets.precast.FC = {
  110.         main={ name="Grioavolr", augments={'"Fast Cast"+6','INT+2','"Mag.Atk.Bns."+17',}}, -- +10
  111.         sub="Clerisy Strap +1", -- +3
  112.         --ammo="Sapience Orb",
  113.         head="Amalric Coif +1", -- +11
  114.         neck="Orunmila's Torque", -- +5
  115.         ear1="Malignance Earring", -- +4
  116.         ear2="Loquacious Earring", -- +2
  117.         hands={ name="Telchine Gloves", augments={'Mag. Evasion+25','"Fast Cast"+5','Enh. Mag. eff. dur. +10',}},
  118.         body="Inyanga Jubbah +2", -- +14
  119.         ring1="Lebeche Ring",
  120.         ring2="Kishar Ring", -- +4
  121.         back={ name="Campestres's Cape", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Eva.+20 /Mag. Eva.+20','Pet: Mag. Acc.+10','"Fast Cast"+10',}},
  122.         waist="Witful Belt", -- +3
  123.         legs={ name="Merlinic Shalwar", augments={'"Fast Cast"+6','CHR+6','Mag. Acc.+14','"Mag.Atk.Bns."+14',}},
  124.         feet="Regal Pumps +1" -- +5~7
  125.     }
  126.  
  127.     sets.precast["Dispelga"] = set_combine(sets.precast.FC, {
  128.         main="Daybreak",
  129.         sub="Ammurapi Shield"
  130.     })
  131.  
  132.     sets.midcast = {}
  133.  
  134.     -- BP Timer Gear
  135.     -- Use BP Recast Reduction here, along with Avatar's Favor gear.
  136.     -- Avatar's Favor skill tiers are 512 / 575 / 670.
  137.     sets.midcast.BP = {
  138.         main={ name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}},
  139.         sub="Vox Grip",
  140.         ammo="Sancus Sachet +1",
  141.         head="Beckoner's Horn +3", -- Always use Beckoner's Horn here.
  142.         neck="Incanter's Torque",
  143.         ear1="Cath Palug Earring",
  144.         ear2="Lodurr Earring",
  145.         body="Baayami Robe +1",
  146.         hands="Baayami Cuffs +1",
  147.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  148.         ring2="Evoker's Ring",
  149.         back={ name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+12','Blood Pact Dmg.+2',}},
  150.         waist="Kobo Obi",
  151.         legs="Baayami Slops +1",
  152.         feet="Baayami Sabots +1"
  153.     }
  154.    
  155.     -- Shock Squall is too fast to swap gear in pet_midcast() or otherwise. It'll generally land in your BP timer set.
  156.     -- I settle for the 670 skill favor tier in this set, so that I can fit more Pet:MAcc although it's usually not necessary.
  157.     sets.midcast.BP["Shock Squall"] = set_combine(sets.midcast.BP, {
  158.         neck="Summoner's Collar +2",
  159.         ear1="Enmerkar Earring",
  160.         ear2="Lugalbanda Earring",
  161.         ring1="Cath Palug Ring",
  162.         ring2="Fickblix's Ring",
  163.         back={ name="Campestres's Cape", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Eva.+20 /Mag. Eva.+20','Pet: Mag. Acc.+10','"Fast Cast"+10',}},
  164.         waist="Incarnation Sash",
  165.     })
  166.  
  167.     -- Elemental Siphon sets. Zodiac Ring is affected by day, Chatoyant Staff by weather, and Twilight Cape by both.
  168.     sets.midcast.Siphon = {
  169.         main={ name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}},
  170.         sub="Vox Grip",
  171.         ammo="Esper Stone +1",
  172.         head="Baayami Hat +1",
  173.         neck="Incanter's Torque",
  174.         ear1="Cath Palug Earring",
  175.         ear2="Lodurr Earring",
  176.         body="Baayami Robe +1",
  177.         hands="Baayami Cuffs +1",
  178.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  179.         ring2="Evoker's Ring",
  180.         back={ name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+12','Blood Pact Dmg.+2',}},
  181.         waist="Kobo Obi",
  182.         legs="Baayami Slops +1",
  183.         feet="Beckoner's Pigaches +3"
  184.     }
  185.  
  186.     sets.midcast.SiphonZodiac = set_combine(sets.midcast.Siphon, { ring1="Zodiac Ring" })
  187.  
  188.     sets.midcast.SiphonWeather = set_combine(sets.midcast.Siphon, { main="Chatoyant Staff" })
  189.    
  190.     sets.midcast.SiphonWeatherZodiac = set_combine(sets.midcast.SiphonZodiac, { main="Chatoyant Staff" })
  191.  
  192.     -- Summoning Midcast, cap spell interruption if possible (Baayami Robe gives 100, need 2 more)
  193.     -- PDT isn't a bad idea either, so don't overwrite a lot from the DT set it inherits from.
  194.     sets.midcast.Summon = set_combine(sets.DT_Base, {
  195.         body="Baayami Robe +1",
  196.         waist="Rumination Sash"
  197.     })
  198.  
  199.     -- If you ever lock your weapon, keep that in mind when building cure potency set.
  200.     sets.midcast.Cure = {
  201.         main="Nirvana",
  202.         sub="Clerisy Strap +1",
  203.         head={ name="Vanya Hood", augments={'MP+50','"Cure" potency +7%','Enmity-6',}},
  204.         neck="Orunmila's Torque",
  205.         ear1="Meili Earring",
  206.         ear2="Novia Earring",
  207.         body="Zendik Robe",
  208.         hands={ name="Telchine Gloves", augments={'Mag. Evasion+25','"Fast Cast"+5','Enh. Mag. eff. dur. +10',}},
  209.         ring1="Lebeche Ring",
  210.         ring2="Menelaus's Ring",
  211.         back="Tempered Cape +1",
  212.         waist="Luminary Sash",
  213.         legs="Convoker's Spats +3",
  214.         feet={ name="Vanya Clogs", augments={'MP+50','"Cure" potency +7%','Enmity-6',}}
  215.     }
  216.  
  217.     sets.midcast.Cursna = set_combine(sets.precast.FC, {
  218.         neck="Debilis Medallion",
  219.         ear1="Meili Earring",
  220.         ear2="Beatific Earring",
  221.         ring1="Menelaus's Ring",
  222.         ring2="Haoma's Ring",
  223.         back="Tempered Cape +1",
  224.         waist="Bishop's Sash",
  225.         feet={ name="Vanya Clogs", augments={'Healing magic skill +20','"Cure" spellcasting time -7%','Magic dmg. taken -3',}}
  226.     })
  227.    
  228.     -- Just a standard set for spells that have no set
  229.     sets.midcast.EnmityRecast = set_combine(sets.precast.FC, {
  230.         main="Nirvana",
  231.         ear1="Novia Earring",
  232.         body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}}
  233.     })
  234.  
  235.     -- Strong alternatives: Daybreak and Ammurapi Shield, Cath Crown, Gwati Earring
  236.     sets.midcast.Enfeeble = {
  237.         main="Contemplator +1",
  238.         sub="Enki Strap",
  239.         head=empty,
  240.         neck="Erra Pendant",
  241.         ear1="Malignance Earring",
  242.         ear2="Dignitary's Earring",
  243.         body="Cohort Cloak +1",
  244.         hands="Inyanga Dastanas +2",
  245.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  246.         ring2={name="Stikini Ring +1", bag="wardrobe4"},
  247.         back="Aurist's Cape +1",
  248.         waist="Luminary Sash",
  249.         legs="Inyanga Shalwar +2",
  250.         feet="Skaoi Boots"
  251.     }
  252.     sets.midcast.Enfeeble.INT = set_combine(sets.midcast.Enfeeble, {
  253.         waist="Acuity Belt +1"
  254.     })
  255.  
  256.     sets.midcast.Enhancing = {
  257.         main={ name="Gada", augments={'Enh. Mag. eff. dur. +6','DEX+1','Mag. Acc.+5','"Mag.Atk.Bns."+18','DMG:+4',}},
  258.         sub="Ammurapi Shield",
  259.         head={ name="Telchine Cap", augments={'Mag. Evasion+24','"Conserve MP"+4','Enh. Mag. eff. dur. +10',}},
  260.         neck="Incanter's Torque",
  261.         ear1="Mimir Earring",
  262.         ear2="Andoaa Earring",
  263.         body={ name="Telchine Chas.", augments={'Mag. Evasion+25','"Conserve MP"+5','Enh. Mag. eff. dur. +10',}},
  264.         hands={ name="Telchine Gloves", augments={'Mag. Evasion+25','"Fast Cast"+5','Enh. Mag. eff. dur. +10',}},
  265.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  266.         ring2={name="Stikini Ring +1", bag="wardrobe4"},
  267.         back="Merciful Cape",
  268.         waist="Embla Sash",
  269.         legs={ name="Telchine Braconi", augments={'Mag. Evasion+25','"Conserve MP"+4','Enh. Mag. eff. dur. +10',}},
  270.         feet={ name="Telchine Pigaches", augments={'Mag. Evasion+24','"Conserve MP"+3','Enh. Mag. eff. dur. +10',}}
  271.     }
  272.  
  273.     sets.midcast.Stoneskin = set_combine(sets.midcast.Enhancing, {
  274.         neck="Nodens Gorget",
  275.         ear2="Earthcry Earring",
  276.         waist="Siegel Sash",
  277.         --legs="Shedir Seraweels"
  278.     })
  279.  
  280.     sets.midcast.Nuke = {
  281.         main={ name="Grioavolr", augments={'"Fast Cast"+6','INT+2','"Mag.Atk.Bns."+17',}},
  282.         sub="Niobid Strap",
  283.         head="Cath Palug Crown",
  284.         neck="Sanctity Necklace",
  285.         ear1="Malignance Earring",
  286.         ear2="Friomisi Earring",
  287.         body={ name="Amalric Doublet +1", augments={'MP+80','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
  288.         hands={ name="Amalric Gages +1", augments={'INT+12','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
  289.         ring1="Freke Ring",
  290.         ring2="Shiva Ring +1",
  291.         back={ name="Campestres's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Mag.Atk.Bns."+10','Phys. dmg. taken-10%',}},
  292.         waist="Eschan Stone",
  293.         legs={ name="Amalric Slops +1", augments={'MP+80','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
  294.         feet={ name="Amalric Nails +1", augments={'Mag. Acc.+20','"Mag.Atk.Bns."+20','"Conserve MP"+7',}}
  295.     }
  296.  
  297.     sets.midcast["Refresh"] = set_combine(sets.midcast.Enhancing, {
  298.         head="Amalric Coif +1",
  299.         waist="Gishdubar Sash"
  300.     })
  301.  
  302.     sets.midcast["Aquaveil"] = set_combine(sets.midcast.Enhancing, {
  303.         main="Vadose Rod",
  304.         head="Amalric Coif +1",
  305.         waist="Emphatikos Rope",
  306.     })
  307.  
  308.     sets.midcast["Dispelga"] = set_combine(sets.midcast.Enfeeble, {
  309.         main="Daybreak",
  310.         sub="Ammurapi Shield"
  311.     })
  312.  
  313.     sets.midcast["Mana Cede"] = { hands="Beckoner's Bracers +3" }
  314.  
  315.     sets.midcast["Astral Flow"] = { head="Glyphic Horn +3" }
  316.    
  317.     -- ===================================================================================================================
  318.     --  Weaponskills
  319.     -- ===================================================================================================================
  320.  
  321.     -- Magic accuracy can be nice here to land the defense down effect. Also keep in mind big damage Garland can make it
  322.     -- harder for multiple people to get AM3 on trash mobs before popping an NM.
  323.     sets.midcast["Garland of Bliss"] = {
  324.         head="Nyame Helm",
  325.         neck="Sanctity Necklace",
  326.         ear1="Malignance Earring",
  327.         ear2="Dignitary's Earring",
  328.         body="Nyame Mail",
  329.         hands="Nyame Gauntlets",
  330.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  331.         ring2={name="Stikini Ring +1", bag="wardrobe4"},
  332.         back="Aurist's Cape +1",
  333.         waist="Eschan Stone",
  334.         legs="Nyame Flanchard",
  335.         feet="Nyame Sollerets"
  336.     }
  337.  
  338.     -- My set focuses on accuracy here to make skillchains with Ifrit
  339.     -- Just like Garland, it's not hard to improve on the damage from this set if that's what you're after.
  340.     sets.midcast["Shattersoul"] = {
  341.         head="Beckoner's Horn +3",
  342.         neck="Fotia Gorget",
  343.         ear1="Zennaroi Earring",
  344.         ear2="Telos Earring",
  345.         body="Tali'ah Manteel +2",
  346.         hands="Nyame Gauntlets",
  347.         ring1="Freke Ring",
  348.         ring2="Metamorph Ring +1",
  349.         back={ name="Campestres's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
  350.         waist="Fotia Belt",
  351.         legs="Nyame Flanchard",
  352.         feet="Convoker's Pigaches +3"
  353.     }
  354.  
  355.     sets.midcast["Cataclysm"] = set_combine(sets.midcast.Nuke, {})
  356.    
  357.     sets.midcast["Shell Crusher"] = set_combine(sets.midcast["Garland of Bliss"], {})
  358.    
  359.     sets.midcast["Black Halo"] = set_combine(sets.midcast["Garland of Bliss"], {})
  360.  
  361.     sets.pet_midcast = {}
  362.  
  363.     -- Main physical pact set (Volt Strike, Pred Claws, etc.)
  364.     -- Prioritize BP Damage & Pet: Double Attack
  365.     -- Strong Alternatives:
  366.     --   Gridarvor, Apogee Crown, Apogee Pumps, AF body, Apogee Dalmatica, Shulmanu Collar (equal to ~R15 Collar), Gelos Earring,
  367.     --   Regal Belt, Varar Ring, Kyrene's Earring
  368.     sets.pet_midcast.Physical_BP = {
  369.         main="Nirvana",
  370.         sub="Elan Strap +1",
  371.         ammo="Epitaph",
  372.         head={ name="Helios Band", augments={'Pet: Attack+30 Pet: Rng.Atk.+30','Pet: "Dbl. Atk."+8','Blood Pact Dmg.+7',}},
  373.         neck="Summoner's Collar +2",
  374.         ear1="Lugalbanda Earring",
  375.         ear2="Beckoner's Earring +1",
  376.         body="Glyphic Doublet +3",
  377.         hands={ name="Merlinic Dastanas", augments={'Pet: Attack+24 Pet: Rng.Atk.+24','Blood Pact Dmg.+9','Pet: STR+10','Pet: Mag. Acc.+7',}},
  378.         ring1="Cath Palug Ring",
  379.         ring2="Fickblix's Ring",
  380.         back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: "Regen"+10','Pet: Damage taken -5%',}},
  381.         waist="Incarnation Sash",
  382.         legs={ name="Apogee Slacks +1", augments={'Pet: STR+20','Blood Pact Dmg.+14','Pet: "Dbl. Atk."+4',}},
  383.         feet={ name="Helios Boots", augments={'Pet: Accuracy+28 Pet: Rng. Acc.+28','Pet: "Dbl. Atk."+8','Blood Pact Dmg.+7',}}
  384.     }
  385.  
  386.     -- Physical Pact AM3 set, less emphasis on Pet:DA
  387.     sets.pet_midcast.Physical_BP_AM3 = set_combine(sets.pet_midcast.Physical_BP, {
  388.         body="Convoker's Doublet +3",
  389.         ring1="Varar Ring +1",
  390.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}}
  391.     })
  392.  
  393.     -- Physical pacts which benefit more from TP than Pet:DA (like Spinning Dive and other pacts you never use except that one time)
  394.     sets.pet_midcast.Physical_BP_TP = set_combine(sets.pet_midcast.Physical_BP, {
  395.         head={ name="Apogee Crown +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}},
  396.         body="Convoker's Doublet +3",
  397.         ring1="Varar Ring +1",
  398.         waist="Regal Belt",
  399.         legs="Enticer's Pants",
  400.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}}
  401.     })
  402.  
  403.     -- Used for all physical pacts when AccMode is true
  404.     sets.pet_midcast.Physical_BP_Acc = set_combine(sets.pet_midcast.Physical_BP, {
  405.         head={ name="Apogee Crown +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}},
  406.         body="Convoker's Doublet +3",
  407.         hands={ name="Merlinic Dastanas", augments={'Pet: Accuracy+28 Pet: Rng. Acc.+28','Blood Pact Dmg.+10','Pet: DEX+9','Pet: Mag. Acc.+9','Pet: "Mag.Atk.Bns."+3',}},
  408.         feet="Beckoner's Pigaches +3"
  409.     })
  410.  
  411.     -- Base magic pact set
  412.     -- Prioritize BP Damage & Pet:MAB
  413.     -- Strong Alternatives:
  414.     -- Espiritus, Apogee Crown, Adad Amulet (equal to ~R12 Collar)
  415.     sets.pet_midcast.Magic_BP_Base = {
  416.         main={ name="Grioavolr", augments={'Blood Pact Dmg.+10','Pet: STR+5','Pet: Mag. Acc.+18','Pet: "Mag.Atk.Bns."+25',}},
  417.         sub="Elan Strap +1",
  418.         ammo="Epitaph",
  419.         head="Cath Palug Crown",
  420.         neck="Summoner's Collar +2",
  421.         ear1="Lugalbanda Earring",
  422.         ear2="Beckoner's Earring +1",
  423.         body={ name="Apo. Dalmatica +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
  424.         hands={ name="Merlinic Dastanas", augments={'Pet: Mag. Acc.+25 Pet: "Mag.Atk.Bns."+25','Blood Pact Dmg.+10','Pet: "Mag.Atk.Bns."+7',}},
  425.         ring1={name="Varar Ring +1", bag="wardrobe2"},
  426.         --ring2={name="Varar Ring +1", bag="wardrobe4"},
  427.         ring2="Fickblix's Ring",
  428.         back={ name="Campestres's Cape", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Eva.+20 /Mag. Eva.+20','Pet: Mag. Acc.+10','"Fast Cast"+10',}},
  429.         waist="Regal Belt",
  430.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  431.     }
  432.    
  433.     -- Some magic pacts benefit more from TP than others.
  434.     -- Note: This set will only be used on merit pacts if you have less than 4 merits.
  435.     --       Make sure to update your merit values at the top of this Lua.
  436.     sets.pet_midcast.Magic_BP_TP = set_combine(sets.pet_midcast.Magic_BP_Base, {
  437.         legs="Enticer's Pants"
  438.     })
  439.  
  440.     -- NoTP set used when you don't need Enticer's
  441.     sets.pet_midcast.Magic_BP_NoTP = set_combine(sets.pet_midcast.Magic_BP_Base, {
  442.         legs={ name="Apogee Slacks +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  443.     })
  444.  
  445.     sets.pet_midcast.Magic_BP_TP_Acc = set_combine(sets.pet_midcast.Magic_BP_TP, {
  446.         head={ name="Merlinic Hood", augments={'Pet: Mag. Acc.+21 Pet: "Mag.Atk.Bns."+21','Blood Pact Dmg.+7','Pet: INT+6','Pet: "Mag.Atk.Bns."+11',}},
  447.         body="Convoker's Doublet +3",
  448.         hands={ name="Merlinic Dastanas", augments={'Pet: Mag. Acc.+29','Blood Pact Dmg.+10','Pet: INT+7','Pet: "Mag.Atk.Bns."+10',}}
  449.     })
  450.  
  451.     sets.pet_midcast.Magic_BP_NoTP_Acc = set_combine(sets.pet_midcast.Magic_BP_NoTP, {
  452.         head={ name="Merlinic Hood", augments={'Pet: Mag. Acc.+21 Pet: "Mag.Atk.Bns."+21','Blood Pact Dmg.+7','Pet: INT+6','Pet: "Mag.Atk.Bns."+11',}},
  453.         body="Convoker's Doublet +3",
  454.         hands={ name="Merlinic Dastanas", augments={'Pet: Mag. Acc.+29','Blood Pact Dmg.+10','Pet: INT+7','Pet: "Mag.Atk.Bns."+10',}}
  455.     })
  456.  
  457.     -- Favor BP Damage above all. Pet:MAB also very strong.
  458.     -- Pet: Accuracy, Attack, Magic Accuracy moderately important.
  459.     -- Strong Alternatives:
  460.     -- Keraunos, Grioavolr, Espiritus, Was, Apogee Crown, Apogee Dalmatica, Adad Amulet
  461.     sets.pet_midcast.FlamingCrush = {
  462.         main="Nirvana",
  463.         sub="Elan Strap +1",
  464.         ammo="Epitaph",
  465.         head="Cath Palug Crown",
  466.         neck="Summoner's Collar +2",
  467.         ear1="Lugalbanda Earring",
  468.         ear2="Beckoner's Earring +1",
  469.         body="Convoker's Doublet +3",
  470.         hands={ name="Merlinic Dastanas", augments={'Pet: Mag. Acc.+25 Pet: "Mag.Atk.Bns."+25','Blood Pact Dmg.+10','Pet: "Mag.Atk.Bns."+7',}},
  471.         ring1={name="Varar Ring +1", bag="wardrobe2"},
  472.         ring2="Fickblix's Ring",
  473.         back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: "Regen"+10','Pet: Damage taken -5%',}},
  474.         waist="Regal Belt",
  475.         legs={ name="Apogee Slacks +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
  476.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  477.     }
  478.  
  479.     sets.pet_midcast.FlamingCrush_Acc = set_combine(sets.pet_midcast.FlamingCrush, {
  480.         body="Convoker's Doublet +3",
  481.         hands={ name="Merlinic Dastanas", augments={'Pet: Accuracy+28 Pet: Rng. Acc.+28','Blood Pact Dmg.+10','Pet: DEX+9','Pet: Mag. Acc.+9','Pet: "Mag.Atk.Bns."+3',}},
  482.         --feet="Convoker's Pigaches +3"
  483.     })
  484.  
  485.     -- Pet: Magic Acc set - Mainly used for debuff pacts like Bitter Elegy
  486.     sets.pet_midcast.MagicAcc_BP = {
  487.         main="Nirvana",
  488.         sub="Vox Grip",
  489.         ammo="Epitaph",
  490.         head="Beckoner's Horn +3",
  491.         neck="Summoner's Collar +2",
  492.         ear1="Enmerkar Earring",
  493.         ear2="Lugalbanda Earring",
  494.         body="Convoker's Doublet +3",
  495.         hands="Lamassu Mitts +1",
  496.         ring1="Cath Palug Ring",
  497.         ring2="Fickblix's Ring",
  498.         back={ name="Campestres's Cape", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Eva.+20 /Mag. Eva.+20','Pet: Mag. Acc.+10','"Fast Cast"+10',}},
  499.         waist="Regal Belt",
  500.         legs="Convoker's Spats +3",
  501.         feet="Bunzi's Sabots"
  502.     }
  503.  
  504.     sets.pet_midcast.Debuff_Rage = sets.pet_midcast.MagicAcc_BP
  505.  
  506.     -- Pure summoning magic set, mainly used for buffs like Hastega II.
  507.     -- Strong Alternatives:
  508.     -- Andoaa Earring, Summoning Earring, Lamassu Mitts +1, Caller's Pendant
  509.     sets.pet_midcast.SummoningMagic = {
  510.         main={ name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}},
  511.         sub="Vox Grip",
  512.         ammo="Epitaph",
  513.         head="Baayami Hat +1",
  514.         neck="Incanter's Torque",
  515.         ear1="Cath Palug Earring",
  516.         ear2="Lodurr Earring",
  517.         body="Baayami Robe +1",
  518.         hands="Baayami Cuffs +1",
  519.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  520.         ring2="Evoker's Ring",
  521.         back={ name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+12','Blood Pact Dmg.+2',}},
  522.         waist="Kobo Obi",
  523.         legs="Baayami Slops +1",
  524.         feet="Baayami Sabots +1"
  525.     }
  526.  
  527.     sets.pet_midcast.Buff = sets.pet_midcast.SummoningMagic
  528.    
  529.     -- Wind's Blessing set. Pet:MND increases potency.
  530.     sets.pet_midcast.Buff_MND = set_combine(sets.pet_midcast.Buff, {
  531.         main="Nirvana",
  532.         neck="Summoner's Collar +2",
  533.         ear2="Beckoner's Earring +1",
  534.         hands="Lamassu Mitts +1",
  535.         back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: "Regen"+10','Pet: Damage taken -5%',}},
  536.         legs="Assiduity Pants +1",
  537.         feet="Bunzi's Sabots"
  538.     })
  539.  
  540.     -- Don't drop Avatar level in this set if you can help it.
  541.     -- You can use Avatar:HP+ gear to increase the HP recovered, but most of it will decrease your own max HP.
  542.     sets.pet_midcast.Buff_Healing = set_combine(sets.pet_midcast.Buff, {
  543.         main="Nirvana",
  544.         back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: "Regen"+10','Pet: Damage taken -5%',}},
  545.         --body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}},
  546.         --feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  547.     })
  548.  
  549.     -- This set is used for certain blood pacts when ImpactDebuff mode is turned ON. (/console gs c ImpactDebuff)
  550.     -- These pacts are normally used with magic damage gear, but they're also strong debuffs when enhanced by summoning skill.
  551.     -- This set is safe to ignore.
  552.     sets.pet_midcast.Impact = set_combine(sets.pet_midcast.SummoningMagic, {
  553.         main="Nirvana",
  554.         head="Beckoner's Horn +3",
  555.         ear1="Enmerkar Earring",
  556.         ear2="Lugalbanda Earring",
  557.         hands="Lamassu Mitts +1"
  558.     })
  559.  
  560.     -- ===================================================================================================================
  561.     -- Aftercast Sets
  562.     -- ===================================================================================================================
  563.     -- Syntax: sets.aftercast.{IdleMode}.{PetName|Spirit|Avatar}.{PlayerStatus}.{LowMP}.{ForceIlvl}
  564.  
  565.     -- Example: sets.aftercast.DT["Cait Sith"] will be a set used when IdleMode is "DT" and you have Cait Sith summoned.
  566.  
  567.     -- This is your main idle set with no avatar out. Focus on refresh and defensive stats.
  568.     sets.aftercast = {
  569.         main="Mpaca's Staff",
  570.         sub="Oneiros Grip",
  571.         ammo="Epitaph",
  572.         head="Beckoner's Horn +3",
  573.         neck="Loricate Torque +1",
  574.         ear1="Cath Palug Earring",
  575.         ear2="Beckoner's Earring +1",
  576.         body={ name="Apo. Dalmatica +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
  577.         hands={ name="Merlinic Dastanas", augments={'Pet: Crit.hit rate +2','"Mag.Atk.Bns."+25','"Refresh"+2','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
  578.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  579.         ring2="Defending Ring",
  580.         back={ name="Campestres's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Mag.Atk.Bns."+10','Phys. dmg. taken-10%',}},
  581.         waist="Regal Belt",
  582.         legs="Assiduity Pants +1",
  583.         feet="Herald's Gaiters"
  584.     }
  585.    
  586.     sets.aftercast.ForceIlvl = set_combine(sets.aftercast, {
  587.         feet="Baayami Sabots +1"
  588.     })
  589.     sets.aftercast.LowMP = set_combine(sets.aftercast, {
  590.         waist="Fucho-no-obi"
  591.     })
  592.     sets.aftercast.LowMP.ForceIlvl = set_combine(sets.aftercast.LowMP, {
  593.         feet="Baayami Sabots +1"
  594.     })
  595.    
  596.     -- Main perpetuation set ~~ Strong Alternatives:
  597.     -- Gridarvor, Asteria Mitts, Shomonjijoe, Convoker's Horn, Evans Earring, Isa Belt
  598.     sets.aftercast.Avatar = {
  599.         main="Nirvana",
  600.         sub="Oneiros Grip",
  601.         ammo="Epitaph",
  602.         head="Beckoner's Horn +3",
  603.         neck="Caller's Pendant",
  604.         ear1="Cath Palug Earring",
  605.         ear2="Beckoner's Earring +1",
  606.         body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}},
  607.         hands={ name="Merlinic Dastanas", augments={'Pet: Crit.hit rate +2','"Mag.Atk.Bns."+25','"Refresh"+2','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
  608.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  609.         ring2="Evoker's Ring",
  610.         back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: "Regen"+10','Pet: Damage taken -5%',}},
  611.         waist="Lucidity Sash",
  612.         legs="Assiduity Pants +1",
  613.         feet="Baayami Sabots +1"
  614.     }
  615.     -- If you have Fucho and don't need Lucidity Sash for perp down, you can uncomment the belt here to enable using it.
  616.     sets.aftercast.Avatar.LowMP = set_combine(sets.aftercast.Avatar, {
  617.         --waist="Fucho-no-obi"
  618.     })
  619.    
  620.     -- Damage Taken set
  621.     sets.aftercast.DT = set_combine(sets.DT_Base, {
  622.     })
  623.    
  624.     sets.aftercast.DT.Avatar = set_combine(sets.aftercast.DT, {
  625.         waist="Isa Belt"
  626.     })
  627.    
  628.     -- I use this mode for Mewing Lullaby duty in V20+ Gaol. Heaviest defense possible, less attention toward MP management.
  629.     sets.aftercast.MEva = set_combine(sets.aftercast.DT, {
  630.         sub="Khonsu",
  631.         hands="Nyame Gauntlets",
  632.         feet="Baayami Sabots +1"
  633.     })
  634.  
  635.     sets.aftercast.MEva.Avatar = set_combine(sets.aftercast.MEva, {
  636.         ear1="Enmerkar Earring",
  637.         waist="Isa Belt",
  638.         back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: "Regen"+10','Pet: Damage taken -5%',}},
  639.     })
  640.    
  641.     -- You aren't likely to be in PetDT mode without an avatar for long, but I default to the DT set in that scenario.
  642.     sets.aftercast.PetDT = set_combine(sets.aftercast.DT, {
  643.     })
  644.  
  645.     -- Pet:DT build. Equipped when IdleMode is "PetDT".
  646.     -- Strong alternatives:
  647.     -- Selenian Cap, Enticer's Pants, Enmerkar Earring, Handler's Earring, Rimeice Earring, Tali'ah Seraweels
  648.     sets.aftercast.PetDT.Avatar = {
  649.         main="Nirvana",
  650.         sub="Oneiros Grip",
  651.         ammo="Epitaph",
  652.         head={ name="Apogee Crown +1", augments={'Pet: Accuracy+25','"Avatar perpetuation cost"+7','Pet: Damage taken -4%',}},
  653.         neck="Summoner's Collar +2",
  654.         ear1="Enmerkar Earring",
  655.         ear2="Beckoner's Earring +1",
  656.         body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}},
  657.         hands={ name="Telchine Gloves", augments={'Pet: DEF+17','Pet: "Regen"+3','Pet: Damage taken -4%',}},
  658.         ring1="Thurandaut Ring +1",
  659.         ring2={name="Stikini Ring +1", bag="wardrobe4"},
  660.         back={ name="Campestres's Cape", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Attack+10 Pet: Rng.Atk.+10','Pet: "Regen"+10','Pet: Damage taken -5%',}},
  661.         waist="Isa Belt",
  662.         legs="Bunzi's Pants",
  663.         feet={ name="Telchine Pigaches", augments={'Pet: DEF+14','Pet: "Regen"+3','Pet: Damage taken -4%',}}
  664.     }
  665.    
  666.     -- These 2 sets are for when you're in DD mode but not actually engaged to something.
  667.     sets.aftercast.DD = set_combine(sets.aftercast, {
  668.     })
  669.    
  670.     sets.aftercast.DD.Avatar = set_combine(sets.aftercast.Avatar, {
  671.     })
  672.    
  673.     -- Main melee set
  674.     -- If you want specific things equipped only when an avatar is out, modify "sets.aftercast.DD.Avatar.Engaged" below.
  675.     sets.aftercast.DD.Engaged = set_combine(sets.aftercast.DD.Avatar, {
  676.         --head="Beckoner's Horn +3",
  677.         head="Bunzi's Hat",
  678.         neck="Shulmanu Collar",
  679.         ear1="Telos Earring",
  680.         ear2="Cessance Earring",
  681.         body="Tali'ah Manteel +2",
  682.         hands="Bunzi's Gloves",
  683.         ring1={ name="Chirich Ring +1", bag="wardrobe2" },
  684.         ring2="Fickblix's Ring",
  685.         back={ name="Campestres's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
  686.         waist="Cetl Belt",
  687.         legs="Nyame Flanchard",
  688.         feet="Convoker's Pigaches +3"
  689.     })
  690.    
  691.     -- Main melee set when engaged with an avatar out. Usually doesn't have many changes from the above set.
  692.     sets.aftercast.DD.Avatar.Engaged = set_combine(sets.aftercast.DD.Engaged, {
  693.         --ear2="Sroda Earring"
  694.     })
  695.  
  696.     sets.aftercast.Enspell = set_combine(sets.aftercast, {})
  697.     sets.aftercast.Enspell.Avatar = set_combine(sets.aftercast.Avatar, {})
  698.    
  699.     -- Enspell set I mainly use for Peach Power. Load up on accuracy & magic accuracy. Doesn't seem to help much honestly, it's a work in progress.
  700.     sets.aftercast.Enspell.Engaged = set_combine(sets.aftercast.DD.Avatar.Engaged, {
  701.         ear1="Crepuscular Earring",
  702.         ear2="Beckoner's Earring +1",
  703.         body="Beckoner's Doublet +3", --replaces AF feet for perp cost
  704.         ring1="Metamorph Ring +1",
  705.         waist="Orpheus's Sash",
  706.         feet="Nyame Sollerets",
  707.     })
  708.     sets.aftercast.Enspell.Avatar.Engaged = set_combine(sets.aftercast.Enspell.Engaged, {})
  709.    
  710.     sets.aftercast.Favor = set_combine(sets.aftercast, {
  711.     })
  712.    
  713.     -- Used when IdleMode is "Favor" to maximize avatar's favor effect.
  714.     -- Skill tiers are 512 / 575 / 670 / 735
  715.     sets.aftercast.Favor.Avatar = set_combine(sets.aftercast.Avatar, {
  716.         head="Beckoner's Horn +3",
  717.         --ear2="Lodurr Earring",
  718.         body="Beckoner's Doublet +3",
  719.         hands="Baayami Cuffs +1",
  720.         legs="Baayami Slops +1",
  721.         feet="Baayami Sabots +1"
  722.     })
  723.  
  724.     sets.aftercast.PetDD = set_combine(sets.aftercast, {
  725.     })
  726.  
  727.     -- Avatar Melee set. You really don't need this set. It's only here because I can't bring myself to throw it away.
  728.     sets.aftercast.PetDD.Avatar = set_combine(sets.aftercast.Avatar, {
  729.         ear2="Rimeice Earring",
  730.         body="Glyphic Doublet +3",
  731.         hands={ name="Helios Gloves", augments={'Pet: Accuracy+22 Pet: Rng. Acc.+22','Pet: "Dbl. Atk."+8','Pet: Haste+6',}},
  732.         ring2="Fickblix's Ring",
  733.         waist="Klouskap Sash",
  734.         feet={ name="Helios Boots", augments={'Pet: Accuracy+21 Pet: Rng. Acc.+21','Pet: "Dbl. Atk."+8','Pet: Haste+6',}}
  735.     })
  736.  
  737.     sets.aftercast.Zendik = set_combine(sets.aftercast, {
  738.         body="Zendik Robe"
  739.     })
  740.     sets.aftercast.Zendik.ForceIlvl = set_combine(sets.aftercast.Zendik, {
  741.         feet="Baayami Sabots +1"
  742.     })
  743.     sets.aftercast.Zendik.LowMP = set_combine(sets.aftercast.Zendik, {
  744.         waist="Fucho-no-obi"
  745.     })
  746.     sets.aftercast.Zendik.LowMP.ForceIlvl = set_combine(sets.aftercast.Zendik.LowMP, {
  747.         feet="Baayami Sabots +1"
  748.     })
  749.  
  750.     sets.aftercast.Zendik.Avatar = set_combine(sets.aftercast.Favor.Avatar, {
  751.         body="Zendik Robe"
  752.     })
  753.  
  754.     -- Idle set used when you have a spirit summoned. Glyphic Spats will make them cast more frequently.
  755.     sets.aftercast.Spirit = {
  756.         main="Nirvana",
  757.         sub="Vox Grip",
  758.         ammo="Epitaph",
  759.         head="Beckoner's Horn +3",
  760.         neck="Incanter's Torque",
  761.         ear1="Cath Palug Earring",
  762.         ear2="Evans Earring",
  763.         body="Baayami Robe +1",
  764.         hands="Baayami Cuffs +1",
  765.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  766.         ring2="Evoker's Ring",
  767.         back={ name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+12','Blood Pact Dmg.+2',}},
  768.         waist="Lucidity Sash",
  769.         legs="Glyphic Spats +3",
  770.         feet="Baayami Sabots +1"
  771.     }
  772.     sets.aftercast.Favor.Spirit = set_combine(sets.aftercast.Spirit, {
  773.     })
  774.     sets.aftercast.Zendik.Spirit = set_combine(sets.aftercast.Favor.Spirit, {
  775.     })
  776.  
  777.     -- ===================================================================================================================
  778.     --      End of Sets
  779.     -- ===================================================================================================================
  780.  
  781.     Buff_BPs_Duration = S{'Shining Ruby','Aerial Armor','Frost Armor','Rolling Thunder','Crimson Howl','Lightning Armor','Ecliptic Growl','Glittering Ruby','Earthen Ward','Hastega','Noctoshield','Ecliptic Howl','Dream Shroud','Earthen Armor','Fleet Wind','Inferno Howl','Heavenward Howl','Hastega II','Soothing Current','Crystal Blessing','Katabatic Blades'}
  782.     Buff_BPs_Healing = S{'Healing Ruby','Healing Ruby II','Whispering Wind','Spring Water'}
  783.     Buff_BPs_MND = S{"Wind's Blessing"}
  784.     Debuff_BPs = S{'Mewing Lullaby','Eerie Eye','Lunar Cry','Lunar Roar','Nightmare','Pavor Nocturnus','Ultimate Terror','Somnolence','Slowga','Tidal Roar','Diamond Storm','Sleepga','Shock Squall','Bitter Elegy','Lunatic Voice'}
  785.     Debuff_Rage_BPs = S{'Moonlit Charge','Tail Whip'}
  786.  
  787.     Magic_BPs_NoTP = S{'Holy Mist','Nether Blast','Aerial Blast','Searing Light','Diamond Dust','Earthen Fury','Zantetsuken','Tidal Wave','Judgment Bolt','Inferno','Howling Moon','Ruinous Omen','Night Terror','Thunderspark','Tornado II','Sonic Buffet'}
  788.     Magic_BPs_TP = S{'Impact','Conflag Strike','Level ? Holy','Lunar Bay'}
  789.     Merit_BPs = S{'Meteor Strike','Geocrush','Grand Fall','Wind Blade','Heavenly Strike','Thunderstorm'}
  790.     Physical_BPs_TP = S{'Rock Buster','Mountain Buster','Crescent Fang','Spinning Dive','Roundhouse'}
  791.    
  792.     ZodiacElements = S{'Fire','Earth','Water','Wind','Ice','Lightning'}
  793.  
  794.     --TownIdle = S{"windurst woods","windurst waters","windurst walls","port windurst","bastok markets","bastok mines","port bastok","southern san d'oria","northern san d'oria","port san d'oria","upper jeuno","lower jeuno","port jeuno","ru'lude gardens","norg","kazham","tavnazian safehold","rabao","selbina","mhaura","aht urhgan whitegate","al zahbi","nashmau","western adoulin","eastern adoulin"}
  795.     --Salvage = S{"Bhaflau Remnants","Zhayolm Remnants","Arrapago Remnants","Silver Sea Remnants"}
  796.  
  797.     -- Select initial macro set and set lockstyle
  798.     -- This section likely requires changes or removal if you aren't Pergatory
  799.     -- NOTE: This doesn't change your macro set for you during play, your macros have to do that. This is just for when the Lua is loaded.
  800.     if pet.isvalid then
  801.         if pet.name=='Fenrir' then
  802.             send_command('input /macro book 10;wait .1;input /macro set 2;wait 3;input /lockstyleset '..StartLockStyle)
  803.         elseif pet.name=='Ifrit' then
  804.             send_command('input /macro book 10;wait .1;input /macro set 3;wait 3;input /lockstyleset '..StartLockStyle)
  805.         elseif pet.name=='Titan' then
  806.             send_command('input /macro book 10;wait .1;input /macro set 4;wait 3;input /lockstyleset '..StartLockStyle)
  807.         elseif pet.name=='Leviathan' then
  808.             send_command('input /macro book 10;wait .1;input /macro set 5;wait 3;input /lockstyleset '..StartLockStyle)
  809.         elseif pet.name=='Garuda' then
  810.             send_command('input /macro book 10;wait .1;input /macro set 6;wait 3;input /lockstyleset '..StartLockStyle)
  811.         elseif pet.name=='Shiva' then
  812.             send_command('input /macro book 10;wait .1;input /macro set 7;wait 3;input /lockstyleset '..StartLockStyle)
  813.         elseif pet.name=='Ramuh' then
  814.             send_command('input /macro book 10;wait .1;input /macro set 8;wait 3;input /lockstyleset '..StartLockStyle)
  815.         elseif pet.name=='Diabolos' then
  816.             send_command('input /macro book 10;wait .1;input /macro set 9;wait 3;input /lockstyleset '..StartLockStyle)
  817.         elseif pet.name=='Cait Sith' then
  818.             send_command('input /macro book 11;wait .1;input /macro set 2;wait 3;input /lockstyleset '..StartLockStyle)
  819.         elseif pet.name=='Siren' then
  820.             send_command('input /macro book 11;wait .1;input /macro set 4;wait 3;input /lockstyleset '..StartLockStyle)
  821.         end
  822.     else
  823.         send_command('input /macro book 10;wait .1;input /macro set 1;wait 3;input /lockstyleset '..StartLockStyle)
  824.     end
  825.     -- End macro set / lockstyle section
  826. end
  827.  
  828. -- ===================================================================================================================
  829. --      Gearswap rules below this point - Modify at your own peril
  830. -- ===================================================================================================================
  831.  
  832. function pretarget(spell,action)
  833.     if not buffactive['Muddle'] then
  834.         -- Auto Remedy --
  835.         if AutoRemedy and (spell.action_type == 'Magic' or spell.type == 'JobAbility') then
  836.             if buffactive['Paralysis'] or (buffactive['Silence'] and not AutoEcho) then
  837.                 cancel_spell()
  838.                 send_command('input /item "Remedy" <me>')
  839.             end
  840.         end
  841.         -- Auto Echo Drop --
  842.         if AutoEcho and spell.action_type == 'Magic' and buffactive['Silence'] then
  843.             cancel_spell()
  844.             send_command('input /item "Echo Drops" <me>')
  845.         end
  846.     end
  847. end
  848.  
  849. function precast(spell)
  850.     if (pet.isvalid and pet_midaction() and not spell.type=="SummonerPact") or spell.type=="Item" then
  851.         -- Do not swap if pet is mid-action. I added the type=SummonerPact check because sometimes when the avatar
  852.         -- dies mid-BP, pet.isvalid and pet_midaction() continue to return true for a brief time.
  853.         return
  854.     end
  855.     -- Spell fast cast
  856.     if sets.precast[spell.english] then
  857.         equip(sets.precast[spell.english])
  858.     elseif spell.action_type=="Magic" then
  859.         if spell.name=="Stoneskin" then
  860.             equip(sets.precast.FC,{waist="Siegel Sash"})
  861.         else
  862.             equip(sets.precast.FC)
  863.         end
  864.     end
  865. end
  866.  
  867. function midcast(spell)
  868.     if (pet.isvalid and pet_midaction()) or spell.type=="Item" then
  869.         return
  870.     end
  871.     -- BP Timer gear needs to swap here
  872.     if (spell.type=="BloodPactWard" or spell.type=="BloodPactRage") then
  873.         if not buffactive["Astral Conduit"] then
  874.             equipSet = sets.midcast.BP
  875.             if equipSet[spell.name] then
  876.                 equipSet = equipSet[spell.name]
  877.             end
  878.             equip(equipSet)
  879.         end
  880.         -- If lag compensation mode is on, set up a timer to equip the BP gear.
  881.         if LagMode then
  882.             send_command('wait 0.5;gs c EquipBP '..spell.name)
  883.         end
  884.     -- Spell Midcast & Potency Stuff
  885.     elseif sets.midcast[spell.english] then
  886.         equip(sets.midcast[spell.english])
  887.     elseif spell.name=="Elemental Siphon" then
  888.         if pet.element==world.day_element and ZodiacElements:contains(pet.element) then
  889.             if pet.element==world.weather_element then
  890.                 equip(sets.midcast.SiphonWeatherZodiac)
  891.             else
  892.                 equip(sets.midcast.SiphonZodiac)
  893.             end
  894.         else
  895.             if pet.element==world.weather_element then
  896.                 equip(sets.midcast.SiphonWeather)
  897.             else
  898.                 equip(sets.midcast.Siphon)
  899.             end
  900.         end
  901.     elseif spell.type=="SummonerPact" then
  902.         equip(sets.midcast.Summon)
  903.     elseif string.find(spell.name,"Cure") or string.find(spell.name,"Curaga") then
  904.         equip(sets.midcast.Cure)
  905.     elseif string.find(spell.name,"Protect") or string.find(spell.name,"Shell") then
  906.         equip(sets.midcast.Enhancing,{ring2="Sheltered Ring"})
  907.     elseif spell.skill=="Enfeebling Magic" then
  908.         equip(sets.midcast.Enfeeble)
  909.     elseif spell.skill=="Enhancing Magic" then
  910.         equip(sets.midcast.Enhancing)
  911.     elseif spell.skill=="Elemental Magic" then
  912.         equip(sets.midcast.Nuke)
  913.     elseif spell.action_type=="Magic" then
  914.         equip(sets.midcast.EnmityRecast)
  915.     else
  916.         idle()
  917.     end
  918.     -- Treasure Hunter
  919.     if TreasureHunter and THSpells:contains(spell.name) then
  920.         equip(sets.TH)
  921.     end
  922.     -- Auto-cancel existing buffs
  923.     if spell.name=="Stoneskin" and buffactive["Stoneskin"] then
  924.         windower.send_command('cancel 37;')
  925.     elseif spell.name=="Sneak" and buffactive["Sneak"] and spell.target.type=="SELF" then
  926.         windower.send_command('cancel 71;')
  927.     elseif spell.name=="Utsusemi: Ichi" and buffactive["Copy Image"] then
  928.         windower.send_command('wait 1;cancel 66;')
  929.     end
  930. end
  931.  
  932. function aftercast(spell)
  933.     if pet_midaction() or spell.type=="Item" then
  934.         return
  935.     end
  936.     if not string.find(spell.type,"BloodPact") then
  937.         idle()
  938.     end
  939. end
  940.  
  941. function pet_change(pet,gain)
  942.     if (not (gain and pet_midaction())) then
  943.         idle()
  944.     end
  945. end
  946.  
  947. function status_change(new,old)
  948.     if not midaction() and not pet_midaction() then
  949.         idle()
  950.     end
  951. end
  952.  
  953. function buff_change(name,gain)
  954.     if name=="quickening" and not pet_midaction() then
  955.         idle()
  956.     end
  957.     if SacTorque and name=="sleep" and gain and pet.isvalid then
  958.         equip({neck="Sacrifice Torque"})
  959.         disable("neck")
  960.         if buffactive["Stoneskin"] then
  961.             windower.send_command('cancel 37;')
  962.         end
  963.     end
  964.     if SacTorque and name=="sleep" and not gain then
  965.         enable("neck")
  966.     end
  967. end
  968.  
  969. function pet_midcast(spell)
  970.     if not LagMode then
  971.         equipBPGear(spell.name)
  972.     end
  973. end
  974.  
  975. function pet_aftercast(spell)
  976.     idle()
  977. end
  978.  
  979. function equipBPGear(spell)
  980.     if spell=="Shock Squall" then
  981.         return -- Don't bother for Shock Squall, it already went off by the time we get here
  982.     end
  983.     if spell=="Perfect Defense" then
  984.         equip(sets.pet_midcast.SummoningMagic)
  985.     elseif Debuff_BPs:contains(spell) then
  986.         equip(sets.pet_midcast.MagicAcc_BP)
  987.     elseif Buff_BPs_Healing:contains(spell) then
  988.         equip(sets.pet_midcast.Buff_Healing)
  989.     elseif Buff_BPs_Duration:contains(spell) then
  990.         equip(sets.pet_midcast.Buff)
  991.     elseif Buff_BPs_MND:contains(spell) then
  992.         equip(sets.pet_midcast.Buff_MND)
  993.     elseif spell=="Flaming Crush" then
  994.         if AccMode then
  995.             equip(sets.pet_midcast.FlamingCrush_Acc)
  996.         else
  997.             equip(sets.pet_midcast.FlamingCrush)
  998.         end
  999.     elseif ImpactDebuff and (spell=="Impact" or spell=="Conflag Strike") then
  1000.         equip(sets.pet_midcast.Impact)
  1001.     elseif Magic_BPs_NoTP:contains(spell) then
  1002.         if AccMode then
  1003.             equip(sets.pet_midcast.Magic_BP_NoTP_Acc)
  1004.         else
  1005.             equip(sets.pet_midcast.Magic_BP_NoTP)
  1006.         end
  1007.     elseif Magic_BPs_TP:contains(spell) or string.find(spell," II") or string.find(spell," IV") then
  1008.         if AccMode then
  1009.             equip(sets.pet_midcast.Magic_BP_TP_Acc)
  1010.         else
  1011.             equip(sets.pet_midcast.Magic_BP_TP)
  1012.         end
  1013.     elseif Merit_BPs:contains(spell) then
  1014.         if AccMode then
  1015.             equip(sets.pet_midcast.Magic_BP_TP_Acc)
  1016.         elseif spell=="Meteor Strike" and MeteorStrike>4 then
  1017.             equip(sets.pet_midcast.Magic_BP_NoTP)
  1018.         elseif spell=="Geocrush" and Geocrush>4 then
  1019.             equip(sets.pet_midcast.Magic_BP_NoTP)
  1020.         elseif spell=="Grand Fall" and GrandFall>4 then
  1021.             equip(sets.pet_midcast.Magic_BP_NoTP)
  1022.         elseif spell=="Wind Blade" and WindBlade>4 then
  1023.             equip(sets.pet_midcast.Magic_BP_NoTP)
  1024.         elseif spell=="Heavenly Strike" and HeavenlyStrike>4 then
  1025.             equip(sets.pet_midcast.Magic_BP_NoTP)
  1026.         elseif spell=="Thunderstorm" and Thunderstorm>4 then
  1027.             equip(sets.pet_midcast.Magic_BP_NoTP)
  1028.         else
  1029.             equip(sets.pet_midcast.Magic_BP_TP)
  1030.         end
  1031.     elseif Debuff_Rage_BPs:contains(spell) then
  1032.         equip(sets.pet_midcast.Debuff_Rage)
  1033.     else
  1034.         if AccMode then
  1035.             equip(sets.pet_midcast.Physical_BP_Acc)
  1036.         elseif Physical_BPs_TP:contains(spell) then
  1037.             equip(sets.pet_midcast.Physical_BP_TP)
  1038.         elseif buffactive["Aftermath: Lv.3"] then
  1039.             equip(sets.pet_midcast.Physical_BP_AM3)
  1040.         else
  1041.             equip(sets.pet_midcast.Physical_BP)
  1042.         end
  1043.     end
  1044.     -- Custom Timers
  1045.     if spell=="Mewing Lullaby" and string.find(world.area,"Walk of Echoes %[P") then
  1046.         send_command('timers create "Mewing Resist: can go @ 30s" 60 down') -- In Gaol, underperforms if used every 20s. 60s is full potency.
  1047.         -- Tip: I found it was best to go after 30 seconds. It doesn't fully drain them but you can't afford to wait the full 60.
  1048.         -- Use the time between this to use BP:Rages for additional damage! They feed no TP, as long as your avatar doesn't attack.
  1049.     end
  1050. end
  1051.  
  1052. -- This command is called whenever you input "gs c <command>"
  1053. function self_command(command)
  1054.     is_valid = command:lower()=="idle"
  1055.    
  1056.     for _, v in ipairs(IdleModes) do
  1057.         if command:lower()==v:lower() then
  1058.             IdleMode = v
  1059.             send_command('console_echo "Idle Mode: ['..IdleMode..']"')
  1060.             idle()
  1061.             return
  1062.         end
  1063.     end
  1064.     if string.sub(command,1,7)=="EquipBP" then
  1065.         equipBPGear(string.sub(command,9,string.len(command)))
  1066.         return
  1067.     elseif command:lower()=="accmode" then
  1068.         AccMode = AccMode==false
  1069.         is_valid = true
  1070.         send_command('console_echo "AccMode: '..tostring(AccMode)..'"')
  1071.     elseif command:lower()=="impactmode" then
  1072.         ImpactDebuff = ImpactDebuff==false
  1073.         is_valid = true
  1074.         send_command('console_echo "Impact Debuff: '..tostring(ImpactDebuff)..'"')
  1075.     elseif command:lower()=="forceilvl" then
  1076.         ForceIlvl = ForceIlvl==false
  1077.         is_valid = true
  1078.         send_command('console_echo "Force iLVL: '..tostring(ForceIlvl)..'"')
  1079.     elseif command:lower()=="lagmode" then
  1080.         LagMode = LagMode==false
  1081.         is_valid = true
  1082.         send_command('console_echo "Lag Compensation Mode: '..tostring(LagMode)..'"')
  1083.     elseif command:lower()=="th" then
  1084.         TreasureHunter = TreasureHunter==false
  1085.         is_valid = true
  1086.         send_command('console_echo "Treasure Hunter Mode: '..tostring(TreasureHunter)..'"')
  1087.     elseif command:lower()=="weaponlock" then
  1088.         if WeaponLock then
  1089.             enable("main","sub")
  1090.             WeaponLock = false
  1091.         else
  1092.             equip({main="Nirvana",sub="Elan Strap +1"})
  1093.             disable("main","sub")
  1094.             WeaponLock = true
  1095.         end
  1096.         is_valid = true
  1097.         send_command('console_echo "Weapon Lock: '..tostring(WeaponLock)..'"')
  1098.     elseif command=="ToggleIdle" then
  1099.         is_valid = true
  1100.         -- If you want to change the sets cycled with F9, this is where you do it
  1101.         if IdleMode=="Refresh" then
  1102.             IdleMode = "DT"
  1103.         elseif IdleMode=="DT" then
  1104.             IdleMode = "PetDT"
  1105.         elseif IdleMode=="PetDT" then
  1106.             IdleMode = "DD"
  1107.         else
  1108.             IdleMode = "Refresh"
  1109.         end
  1110.         send_command('console_echo "Idle Mode: ['..IdleMode..']"')
  1111.     elseif command:lower()=="lowhp" then
  1112.         -- Use for "Cure 500 HP" objectives in Omen
  1113.         equip({head="Apogee Crown +1",body={ name="Apo. Dalmatica +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},legs="Apogee Slacks +1",feet="Apogee Pumps +1",back="Campestres's Cape"})
  1114.         return
  1115.     elseif string.sub(command:lower(),1,12)=="meteorstrike" then
  1116.         MeteorStrike = string.sub(command,13,13)
  1117.         send_command('console_echo "Meteor Strike: '..MeteorStrike..'/5"')
  1118.         is_valid = true
  1119.     elseif string.sub(command:lower(),1,8)=="geocrush" then
  1120.         Geocrush = string.sub(command,9,9)
  1121.         send_command('console_echo "Geocrush: '..Geocrush..'/5"')
  1122.         is_valid = true
  1123.     elseif string.sub(command:lower(),1,9)=="grandfall" then
  1124.         GrandFall = string.sub(command,10,10)
  1125.         send_command('console_echo "Grand Fall: '..GrandFall..'/5"')
  1126.         is_valid = true
  1127.     elseif string.sub(command:lower(),1,9)=="windblade" then
  1128.         WindBlade = +string.sub(command,10,10)
  1129.         send_command('console_echo "Wind Blade: '..WindBlade..'/5"')
  1130.         is_valid = true
  1131.     elseif string.sub(command:lower(),1,14)=="heavenlystrike" then
  1132.         HeavenlyStrike = string.sub(command,15,15)
  1133.         send_command('console_echo "Heavenly Strike: '..HeavenlyStrike..'/5"')
  1134.         is_valid = true
  1135.     elseif string.sub(command:lower(),1,12)=="thunderstorm" then
  1136.         Thunderstorm = string.sub(command,13,13)
  1137.         send_command('console_echo "Thunderstorm: '..Thunderstorm..'/5"')
  1138.         is_valid = true
  1139.     end
  1140.  
  1141.     if is_valid then
  1142.         if not midaction() and not pet_midaction() then
  1143.             idle()
  1144.         end
  1145.     else
  1146.         sanitized = command:gsub("\"", "")
  1147.         send_command('console_echo "Invalid self_command: '..sanitized..'"') -- Note: If you use Gearinfo, comment out this line
  1148.     end
  1149. end
  1150.  
  1151. -- This function is for returning to aftercast gear after an action/event.
  1152. function idle()
  1153.     --if TownIdle:contains(world.area:lower()) then
  1154.     --  return
  1155.     --end
  1156.     equipSet = sets.aftercast
  1157.     if equipSet[IdleMode] then
  1158.         equipSet = equipSet[IdleMode]
  1159.     end
  1160.     if pet.isvalid then
  1161.         if equipSet[pet.name] then
  1162.             equipSet = equipSet[pet.name]
  1163.         elseif string.find(pet.name,'Spirit') and equipSet["Spirit"] then
  1164.             equipSet = equipSet["Spirit"]
  1165.         elseif equipSet["Avatar"] then
  1166.             equipSet = equipSet["Avatar"]
  1167.         end
  1168.     end
  1169.     if equipSet[player.status] then
  1170.         equipSet = equipSet[player.status]
  1171.     end
  1172.     if player.mpp < 50 and equipSet["LowMP"] then
  1173.         equipSet = equipSet["LowMP"]
  1174.     end
  1175.     if ForceIlvl and equipSet["ForceIlvl"] then
  1176.         equipSet = equipSet["ForceIlvl"]
  1177.     end
  1178.     equip(equipSet)
  1179.  
  1180.     if (buffactive['Quickening'] or buffactive['Sneak'] or buffactive['Invisible']) and IdleMode~='DT' and not ForceIlvl then
  1181.         equip(sets.Movement)
  1182.     end
  1183.     -- Balrahn's Ring
  1184.     --if Salvage:contains(world.area) then
  1185.     --  equip({ring2="Balrahn's Ring"})
  1186.     --end
  1187.     -- Maquette Ring
  1188.     --if world.area=='Maquette Abdhaljs-Legion' and not IdleMode=='DT' then
  1189.     --  equip({ring2="Maquette Ring"})
  1190.     --end
  1191. end
Add Comment
Please, Sign In to add comment