Advertisement
icydeath-ffxi

Pergatory's SMN Lua w/ AutoBP

Jan 13th, 2020
1,813
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 42.29 KB | None | 0 0
  1. -- IdleMode determines the set used after casting. You change it with "/console gs c <IdleMode>"
  2. -- The modes are:
  3. -- Refresh: Uses the most refresh available.
  4. -- DT: A mix of refresh, PDT, and MDT to help when you can't avoid AOE.
  5. -- PetDT: Sacrifice refresh to reduce avatar's damage taken. WARNING: Selenian Cap drops you below 119, use with caution!
  6. -- DD: When melee mode is on and you're engaged, uses TP gear. Otherwise, avatar melee gear.
  7. -- Favor: Uses Beckoner's Horn +1 and max smn skill to boost the favor effect.
  8. -- 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)
  9.  
  10. -- Additional Bindings:
  11. -- F9 - Toggles between a subset of IdleModes (Refresh > DT > PetDT)
  12. -- F10 - Toggles MeleeMode (When enabled, equips Nirvana and Elan+1, then disables those 2 slots from swapping)
  13. --       NOTE: If you don't already have the Nirvana & Elan+1 equipped, YOU WILL LOSE TP
  14.  
  15. -- Additional Commands:
  16. -- /console gs c AccMode - Toggles high-accuracy sets to be used where appropriate.
  17. -- /console gs c ImpactMode - Toggles between using normal magic BP set for Fenrir's Impact or a custom high-skill set for debuffs.
  18. -- /console gs c ForceIlvl - I have this set up to override a few specific slots where I normally use non-ilvl pieces.
  19. -- /console gs c LagMode - Used to help BPs land in the right gear in high-lag situations.
  20. --                          Sets a timer to swap gear 0.2s after the BP is used rather than waiting for server response.
  21.  
  22. function file_unload()
  23.     send_command('unbind f9')
  24.     send_command('unbind f10')
  25.     send_command('unbind ^f10')
  26. end
  27.  
  28. function get_sets()
  29.     send_command('bind f9 gs c ToggleIdle')
  30.     send_command('bind f10 gs c MeleeMode')
  31.     send_command('bind ^f10 gs c ForceIlvl')
  32.  
  33.     -- Set your merits here. This is used in deciding between Enticer's Pants or Apogee Slacks +1.
  34.     -- To change in-game, "/console gs c MeteorStrike3" will change Meteor Strike to 3/5 merits.
  35.     -- The damage difference is very minor unless you're over 2400 TP.
  36.     -- It's ok to just always use Enticer's Pants and ignore this section.
  37.     MeteorStrike = 1
  38.     HeavenlyStrike = 1
  39.     WindBlade = 1
  40.     Geocrush = 1
  41.     Thunderstorm = 5
  42.     GrandFall = 1
  43.  
  44.     StartLockStyle = '85'
  45.     IdleMode = 'Refresh'
  46.     AccMode = false
  47.     ImpactDebuff = false
  48.     MeleeMode = false
  49.     ForceIlvl = false
  50.     LagMode = false -- Default LagMode. If you have a lot of lag issues, change to "true".
  51.     AutoRemedy = false -- Auto Remedy when using an ability while Paralyzed.
  52.     AutoEcho = false -- Auto Echo Drop when using an ability while Silenced.
  53.    
  54.     -- Macro cmd: /con gs c AutoBP
  55.     AutoBP = true -- AutoBP will make your gearswap spam BPs under Apogee and or Conduit
  56.  
  57.     -- ===================================================================================================================
  58.     --      Sets
  59.     -- ===================================================================================================================
  60.  
  61.     -- Base Damage Taken Set - Mainly used when IdleMode is "DT"
  62.     sets.DT_Base = {
  63.         main="Nirvana",
  64.         sub="Khonsu",
  65.         head="Convoker's Horn +3",
  66.         neck="Loricate Torque +1",
  67.         ear1="Genmei Earring",
  68.         ear2="Etiolation Earring",
  69.         body="Udug Jacket",
  70.         hands={ name="Merlinic Dastanas", augments={'Pet: Crit.hit rate +2','"Mag.Atk.Bns."+25','"Refresh"+2','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
  71.         ring1="Vocane Ring +1",
  72.         ring2="Defending Ring",
  73.         back={ name="Campestres's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Haste+10','Phys. dmg. taken-10%',}},
  74.         waist="Regal Belt",
  75.         legs="Assiduity Pants +1",
  76.         feet={ name="Merlinic Crackows", augments={'DEX+10','Phys. dmg. taken -2%','"Refresh"+2','Accuracy+3 Attack+3',}}
  77.     }
  78.  
  79.     sets.precast = {}
  80.  
  81.     -- Fast Cast
  82.     sets.precast.FC = {
  83.         main={ name="Grioavolr", augments={'"Fast Cast"+6','INT+2','"Mag.Atk.Bns."+17',}}, -- +10
  84.         sub="Clerisy Strap +1", -- +3
  85.         --ammo="Sapience Orb",
  86.         head="Amalric Coif +1", -- +11
  87.         neck="Orunmila's Torque", -- +5
  88.         ear1="Malignance Earring", -- +4
  89.         ear2="Loquacious Earring", -- +2
  90.         hands={ name="Telchine Gloves", augments={'"Fast Cast"+5','Enh. Mag. eff. dur. +10',}},
  91.         body="Inyanga Jubbah +2", -- +14
  92.         ring1="Lebeche Ring",
  93.         ring2="Kishar Ring", -- +4
  94.         back={ name="Campestres's Cape", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Accuracy+20 Attack+20','Pet: Mag. Acc.+10','"Fast Cast"+10',}},
  95.         waist="Witful Belt", -- +3
  96.         legs={ name="Merlinic Shalwar", augments={'"Fast Cast"+6','CHR+6','Mag. Acc.+14','"Mag.Atk.Bns."+14',}},
  97.         feet="Regal Pumps +1" -- +5~7
  98.     }
  99.  
  100.     sets.precast["Dispelga"] = set_combine(sets.precast.FC, {
  101.         main="Daybreak",
  102.         sub="Ammurapi Shield"
  103.     })
  104.  
  105.     sets.midcast = {}
  106.  
  107.     -- BP Timer Gear
  108.     sets.midcast.BP = {
  109.         main={ name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}},
  110.         sub="Vox Grip",
  111.         ammo="Sancus Sachet +1",
  112.         head="Beckoner's Horn +1",
  113.         neck="Incanter's Torque",
  114.         ear1="Cath Palug Earring",
  115.         ear2="Lodurr Earring",
  116.         body="Baayami Robe +1",
  117.         hands="Baayami Cuffs +1",
  118.         ring1="Stikini Ring +1",
  119.         ring2="Evoker's Ring",
  120.         back={ name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+12','Blood Pact Dmg.+2',}},
  121.         waist="Kobo Obi",
  122.         legs="Baayami Slops +1",
  123.         feet="Baayami Sabots +1"
  124.     }
  125.  
  126.     -- Elemental Siphon sets. Zodiac Ring is affected by day, Chatoyant Staff by weather, and Twilight Cape by both.
  127.     sets.midcast.Siphon = {
  128.         main={ name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}},
  129.         sub="Vox Grip",
  130.         ammo="Esper Stone +1",
  131.         head="Baayami Hat +1",
  132.         neck="Incanter's Torque",
  133.         ear1="Cath Palug Earring",
  134.         ear2="Lodurr Earring",
  135.         body="Baayami Robe +1",
  136.         hands="Baayami Cuffs +1",
  137.         ring1="Stikini Ring +1",
  138.         ring2="Evoker's Ring",
  139.         back={ name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+12','Blood Pact Dmg.+2',}},
  140.         waist="Kobo Obi",
  141.         legs="Baayami Slops +1",
  142.         feet="Beck. Pigaches +1"
  143.     }
  144.  
  145.     sets.midcast.SiphonZodiac = set_combine(sets.midcast.Siphon, { ring1="Zodiac Ring" })
  146.  
  147.     sets.midcast.SiphonWeather = set_combine(sets.midcast.Siphon, { main="Chatoyant Staff" })
  148.    
  149.     sets.midcast.SiphonWeatherZodiac = set_combine(sets.midcast.SiphonZodiac, { main="Chatoyant Staff" })
  150.  
  151.     -- Summoning Midcast, cap spell interruption if possible (Baayami Robe gives 100, need 2 more)
  152.     -- PDT isn't a bad idea either, so don't overwrite a lot from the DT set it inherits from.
  153.     sets.midcast.Summon = set_combine(sets.DT_Base, {
  154.         body="Baayami Robe +1",
  155.         legs="Lengo Pants"
  156.     })
  157.  
  158.     -- If you ever lock your weapon, keep that in mind when building cure potency set.
  159.     sets.midcast.Cure = {
  160.         main="Nirvana",
  161.         sub="Oneiros Grip",
  162.         ammo="Sancus Sachet +1",
  163.         head={ name="Vanya Hood", augments={'MP+50','"Cure" potency +7%','Enmity-6',}},
  164.         neck="Nodens Gorget",
  165.         ear1="Mendi. Earring",
  166.         ear2="Novia Earring",
  167.         body="Zendik Robe",
  168.         hands={ name="Telchine Gloves", augments={'"Fast Cast"+5','Enh. Mag. eff. dur. +10',}},
  169.         ring1="Lebeche Ring",
  170.         ring2="Menelaus's Ring",
  171.         back="Tempered Cape +1",
  172.         waist="Witful Belt",
  173.         legs="Assiduity Pants +1",
  174.         feet={ name="Vanya Clogs", augments={'MP+50','"Cure" potency +7%','Enmity-6',}}
  175.     }
  176.  
  177.     sets.midcast.Cursna = set_combine(sets.precast.FC, {
  178.         neck="Debilis Medallion",
  179.         ear1="Healing Earring",
  180.         ear2="Beatific Earring",
  181.         ring1="Menelaus's Ring",
  182.         ring2="Haoma's Ring",
  183.         back="Tempered Cape +1",
  184.         waist="Bishop's Sash",
  185.         feet={ name="Vanya Clogs", augments={'Healing magic skill +20','"Cure" spellcasting time -7%','Magic dmg. taken -3',}}
  186.     })
  187.    
  188.     -- Just a standard set for spells that have no set
  189.     sets.midcast.EnmityRecast = set_combine(sets.precast.FC, {
  190.         main="Nirvana",
  191.         ear1="Novia Earring",
  192.         body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}}
  193.     })
  194.  
  195.     sets.midcast.Enfeeble = {
  196.         main={ name="Gada", augments={'"Fast Cast"+2','MND+13','Mag. Acc.+20','"Mag.Atk.Bns."+14',}},
  197.         sub="Ammurapi Shield",
  198.         head="Inyanga Tiara +2",
  199.         neck="Erra Pendant",
  200.         ear1="Malignance Earring",
  201.         ear2="Dignitary's Earring",
  202.         body="Inyanga Jubbah +2",
  203.         hands="Inyanga Dastanas +2",
  204.         ring1="Stikini Ring +1",
  205.         ring2="Stikini Ring +1",
  206.         back={ name="Campestres's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Haste+10','Phys. dmg. taken-10%',}},
  207.         waist="Luminary Sash",
  208.         legs="Inyanga Shalwar +2",
  209.         feet="Skaoi Boots"
  210.     }
  211.  
  212.     sets.midcast.Enhancing = {
  213.         main={ name="Gada", augments={'Enh. Mag. eff. dur. +6','DEX+1','Mag. Acc.+5','"Mag.Atk.Bns."+18','DMG:+4',}},
  214.         sub="Ammurapi Shield",
  215.         head={ name="Telchine Cap", augments={'Pet: "Mag.Atk.Bns."+19','"Elemental Siphon"+25','Enh. Mag. eff. dur. +10',}},
  216.         neck="Incanter's Torque",
  217.         ear1="Mimir Earring",
  218.         ear2="Andoaa Earring",
  219.         body={ name="Telchine Chas.", augments={'"Conserve MP"+5','Enh. Mag. eff. dur. +10',}},
  220.         hands={ name="Telchine Gloves", augments={'"Fast Cast"+5','Enh. Mag. eff. dur. +10',}},
  221.         ring1="Stikini Ring +1",
  222.         ring2="Stikini Ring +1",
  223.         back="Merciful Cape",
  224.         waist="Embla Sash",
  225.         legs={ name="Telchine Braconi", augments={'"Conserve MP"+4','Enh. Mag. eff. dur. +10',}},
  226.         feet={ name="Telchine Pigaches", augments={'"Conserve MP"+3','Enh. Mag. eff. dur. +9',}}
  227.     }
  228.  
  229.     sets.midcast.Stoneskin = set_combine(sets.midcast.Enhancing, {
  230.         neck="Nodens Gorget",
  231.         ear2="Earthcry Earring",
  232.         waist="Siegel Sash",
  233.         --legs="Shedir Seraweels"
  234.     })
  235.  
  236.     sets.midcast.Nuke = {
  237.         main={ name="Grioavolr", augments={'"Fast Cast"+6','INT+2','"Mag.Atk.Bns."+17',}},
  238.         sub="Niobid Strap",
  239.         head="Cath Palug Crown",
  240.         neck="Eddy Necklace",
  241.         ear1="Malignance Earring",
  242.         ear2="Friomisi Earring",
  243.         body={ name="Amalric Doublet +1", augments={'MP+80','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
  244.         hands={ name="Amalric Gages +1", augments={'INT+12','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
  245.         ring1="Freke Ring",
  246.         ring2="Shiva Ring +1",
  247.         back={ name="Campestres's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Haste+10','Phys. dmg. taken-10%',}},
  248.         waist="Eschan Stone",
  249.         legs={ name="Amalric Slops +1", augments={'MP+80','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
  250.         feet={ name="Amalric Nails +1", augments={'Mag. Acc.+20','"Mag.Atk.Bns."+20','"Conserve MP"+7',}}
  251.     }
  252.  
  253.     sets.midcast["Refresh"] = set_combine(sets.midcast.Enhancing, {
  254.         head="Amalric Coif +1",
  255.         waist="Gishdubar Sash"
  256.     })
  257.  
  258.     sets.midcast["Aquaveil"] = set_combine(sets.midcast.Enhancing, {
  259.         main="Vadose Rod",
  260.         head="Amalric Coif +1"
  261.     })
  262.  
  263.     sets.midcast["Dispelga"] = set_combine(sets.midcast.Enfeeble, {
  264.         main="Daybreak",
  265.         sub="Ammurapi Shield"
  266.     })
  267.  
  268.     sets.midcast["Mana Cede"] = { hands="Beckoner's Bracers +1" }
  269.  
  270.     sets.midcast["Astral Flow"] = { head="Glyphic Horn +3" }
  271.    
  272.     -- ===================================================================================================================
  273.     --  Weaponskills
  274.     -- ===================================================================================================================
  275.  
  276.     -- I stack magic accuracy here to land the defense down effect, rather than MAB for damage.
  277.     -- It's a personal preference, use whatever you prefer.
  278.     sets.midcast["Garland of Bliss"] = {
  279.         head="Inyanga Tiara +2",
  280.         neck="Sanctity Necklace",
  281.         ear1="Malignance Earring",
  282.         ear2="Dignitary's Earring",
  283.         body="Inyanga Jubbah +2",
  284.         hands="Inyanga Dastanas +2",
  285.         ring1="Stikini Ring +1",
  286.         ring2="Stikini Ring +1",
  287.         back={ name="Campestres's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Haste+10','Phys. dmg. taken-10%',}},
  288.         waist="Eschan Stone",
  289.         legs="Inyanga Shalwar +2",
  290.         feet="Inyanga Crackows +2"
  291.     }
  292.  
  293.     -- My set focuses on accuracy here to make skillchains with Ifrit
  294.     -- Just like Garland, it's not hard to improve on the damage from this set if that's what you're after.
  295.     sets.midcast["Shattersoul"] = {
  296.         head="Convoker's Horn +3",
  297.         neck="Fotia Gorget",
  298.         ear1="Zennaroi Earring",
  299.         ear2="Telos Earring",
  300.         body="Tali'ah Manteel +2",
  301.         hands="Tali'ah Gages +2",
  302.         ring1="Freke Ring",
  303.         ring2="Shiva Ring +1",
  304.         back={ name="Campestres's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10',}},
  305.         waist="Fotia Belt",
  306.         legs={ name="Telchine Braconi", augments={'Accuracy+17','Weapon Skill Acc.+14','Weapon skill damage +3%',}},
  307.         feet="Convoker's Pigaches +3"
  308.     }
  309.  
  310.     sets.midcast["Cataclysm"] = sets.midcast.Nuke
  311.  
  312.     sets.pet_midcast = {}
  313.  
  314.     -- Main physical pact set (Volt Strike, Pred Claws, etc.)
  315.     -- Prioritize BP Damage & Pet: DA
  316.     -- Strong Alternatives:
  317.     -- Apogee Crown, Apogee Pumps, Convoker's Doublet, Apogee Dalmatica, Shulmanu Collar
  318.     sets.pet_midcast.Physical_BP = {
  319.         main="Nirvana",
  320.         sub="Elan Strap +1",
  321.         ammo="Sancus Sachet +1",
  322.         head={ name="Helios Band", augments={'Pet: Attack+30 Pet: Rng.Atk.+30','Pet: "Dbl. Atk."+8','Blood Pact Dmg.+7',}},
  323.         neck="Summoner's Collar +2",
  324.         ear1="Lugalbanda Earring",
  325.         ear2="Kyrene's Earring",
  326.         --body="Convoker's Doublet +3",
  327.         body="Glyphic Doublet +3",
  328.         hands={ name="Merlinic Dastanas", augments={'Pet: Attack+24 Pet: Rng.Atk.+24','Blood Pact Dmg.+9','Pet: STR+10','Pet: Mag. Acc.+7',}},
  329.         ring1="Cath Palug Ring",
  330.         ring2="Varar Ring +1",
  331.         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',}},
  332.         waist="Incarnation Sash",
  333.         legs={ name="Apogee Slacks +1", augments={'Pet: STR+20','Blood Pact Dmg.+14','Pet: "Dbl. Atk."+4',}},
  334.         feet={ name="Helios Boots", augments={'Pet: Accuracy+28 Pet: Rng. Acc.+28','Pet: "Dbl. Atk."+8','Blood Pact Dmg.+7',}}
  335.     }
  336.  
  337.     -- Physical Pact AM3 set, less emphasis on Pet:DA
  338.     sets.pet_midcast.Physical_BP_AM3 = set_combine(sets.pet_midcast.Physical_BP, {
  339.         ear2="Gelos Earring",
  340.         body="Convoker's Doublet +3",
  341.         ring1="Varar Ring +1",
  342.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}}
  343.     })
  344.  
  345.     -- Physical pacts which benefit more from TP than Pet:DA (like single-hit BP)
  346.     sets.pet_midcast.Physical_BP_TP = set_combine(sets.pet_midcast.Physical_BP, {
  347.         head={ name="Apogee Crown +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}},
  348.         ear2="Gelos Earring",
  349.         body="Convoker's Doublet +3",
  350.         ring1="Varar Ring +1",
  351.         waist="Regal Belt",
  352.         legs="Enticer's Pants",
  353.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}}
  354.     })
  355.  
  356.     -- Used for all physical pacts when AccMode is true
  357.     sets.pet_midcast.Physical_BP_Acc = set_combine(sets.pet_midcast.Physical_BP, {
  358.         head={ name="Apogee Crown +1", augments={'MP+80','Pet: Attack+35','Blood Pact Dmg.+8',}},
  359.         body="Convoker's Doublet +3",
  360.         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',}},
  361.         --feet="Convoker's Pigaches +3"
  362.     })
  363.  
  364.     -- Base magic pact set
  365.     -- Prioritize BP Damage & Pet:MAB
  366.     -- Strong Alternatives:
  367.     -- Apogee Crown, Adad Amulet
  368.     sets.pet_midcast.Magic_BP_Base = {
  369.         main={ name="Grioavolr", augments={'Blood Pact Dmg.+10','Pet: STR+5','Pet: Mag. Acc.+18','Pet: "Mag.Atk.Bns."+25',}},
  370.         sub="Elan Strap +1",
  371.         ammo="Sancus Sachet +1",
  372.         head="Cath Palug Crown",
  373.         neck="Summoner's Collar +2",
  374.         ear1="Lugalbanda Earring",
  375.         ear2="Gelos Earring",
  376.         body={ name="Apo. Dalmatica +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
  377.         hands={ name="Merlinic Dastanas", augments={'Pet: Mag. Acc.+25 Pet: "Mag.Atk.Bns."+25','Blood Pact Dmg.+10','Pet: "Mag.Atk.Bns."+7',}},
  378.         ring1="Varar Ring +1",
  379.         ring2="Varar Ring +1",
  380.         back={ name="Campestres's Cape", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Accuracy+20 Attack+20','Pet: Mag. Acc.+10','"Fast Cast"+10',}},
  381.         waist="Regal Belt",
  382.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  383.     }
  384.    
  385.     -- Some magic pacts benefit more from TP than others.
  386.     -- Note: This set will only be used on merit pacts if you have less than 4 merits.
  387.     --       Make sure to update your merit values at the top of this Lua.
  388.     sets.pet_midcast.Magic_BP_TP = set_combine(sets.pet_midcast.Magic_BP_Base, {
  389.         legs="Enticer's Pants"
  390.     })
  391.  
  392.     -- NoTP set used when you don't need Enticer's
  393.     sets.pet_midcast.Magic_BP_NoTP = set_combine(sets.pet_midcast.Magic_BP_Base, {
  394.         legs={ name="Apogee Slacks +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  395.     })
  396.  
  397.     sets.pet_midcast.Magic_BP_TP_Acc = set_combine(sets.pet_midcast.Magic_BP_TP, {
  398.         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',}},
  399.         body="Convoker's Doublet +3",
  400.         hands={ name="Merlinic Dastanas", augments={'Pet: Mag. Acc.+29','Blood Pact Dmg.+10','Pet: INT+7','Pet: "Mag.Atk.Bns."+10',}}
  401.     })
  402.  
  403.     sets.pet_midcast.Magic_BP_NoTP_Acc = set_combine(sets.pet_midcast.Magic_BP_NoTP, {
  404.         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',}},
  405.         body="Convoker's Doublet +3",
  406.         hands={ name="Merlinic Dastanas", augments={'Pet: Mag. Acc.+29','Blood Pact Dmg.+10','Pet: INT+7','Pet: "Mag.Atk.Bns."+10',}}
  407.     })
  408.  
  409.     -- Favor BP Damage above all. Pet:MAB also very strong.
  410.     -- Pet: Accuracy, Attack, Magic Accuracy moderately important.
  411.     -- Strong Alternatives:
  412.     -- Apogee Crown, Apogee Dalmatica
  413.     sets.pet_midcast.FlamingCrush = {
  414.         main="Nirvana",
  415.         sub="Elan Strap +1",
  416.         ammo="Sancus Sachet +1",
  417.         head="Cath Palug Crown",
  418.         neck="Summoner's Collar +2",
  419.         ear1="Lugalbanda Earring",
  420.         ear2="Gelos Earring",
  421.         body="Convoker's Doublet +3",
  422.         hands={ name="Merlinic Dastanas", augments={'Pet: Mag. Acc.+25 Pet: "Mag.Atk.Bns."+25','Blood Pact Dmg.+10','Pet: "Mag.Atk.Bns."+7',}},
  423.         ring1="Varar Ring +1",
  424.         ring2="Varar Ring +1",
  425.         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',}},
  426.         waist="Regal Belt",
  427.         legs={ name="Apogee Slacks +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
  428.         --legs={ name="Apogee Slacks +1", augments={'Pet: STR+20','Blood Pact Dmg.+14','Pet: "Dbl. Atk."+4',}},
  429.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  430.     }
  431.  
  432.     sets.pet_midcast.FlamingCrush_Acc = set_combine(sets.pet_midcast.FlamingCrush, {
  433.         ear2="Kyrene's Earring",
  434.         body="Convoker's Doublet +3",
  435.         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',}},
  436.         --feet="Convoker's Pigaches +3"
  437.     })
  438.  
  439.     -- Pet: Magic Acc set - Mainly used for debuff pacts like Shock Squall
  440.     sets.pet_midcast.MagicAcc_BP = {
  441.         main="Nirvana",
  442.         sub="Vox Grip",
  443.         ammo="Sancus Sachet +1",
  444.         head="Convoker's Horn +3",
  445.         neck="Summoner's Collar +2",
  446.         ear1="Lugalbanda Earring",
  447.         ear2="Enmerkar Earring",
  448.         body="Convoker's Doublet +3",
  449.         hands="Apogee Mitts +1",
  450.         ring1="Cath Palug Ring",
  451.         ring2="Evoker's Ring",
  452.         back={ name="Campestres's Cape", augments={'Pet: M.Acc.+20 Pet: M.Dmg.+20','Accuracy+20 Attack+20','Pet: Mag. Acc.+10','"Fast Cast"+10',}},
  453.         waist="Regal Belt",
  454.         legs="Convoker's Spats +3",
  455.         feet="Convoker's Pigaches +3"
  456.     }
  457.  
  458.     sets.pet_midcast.Debuff_Rage = sets.pet_midcast.MagicAcc_BP
  459.  
  460.     -- Pure summoning magic set, mainly used for buffs like Hastega II.
  461.     -- Strong Alternatives:
  462.     -- Andoaa Earring, Summoning Earring, Lamassu Mitts +1, Caller's Pendant
  463.     sets.pet_midcast.SummoningMagic = {
  464.         main={ name="Espiritus", augments={'Summoning magic skill +15','Pet: Mag. Acc.+30','Pet: Damage taken -4%',}},
  465.         sub="Vox Grip",
  466.         ammo="Sancus Sachet +1",
  467.         head="Baayami Hat +1",
  468.         neck="Incanter's Torque",
  469.         ear1="Cath Palug Earring",
  470.         ear2="Lodurr Earring",
  471.         body="Baayami Robe +1",
  472.         hands="Baayami Cuffs +1",
  473.         ring1="Stikini Ring +1",
  474.         ring2="Evoker's Ring",
  475.         back={ name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+12','Blood Pact Dmg.+2',}},
  476.         waist="Kobo Obi",
  477.         legs="Baayami Slops +1",
  478.         feet="Baayami Sabots +1"
  479.     }
  480.  
  481.     sets.pet_midcast.Buff = sets.pet_midcast.SummoningMagic
  482.  
  483.     -- I use Apogee gear for healing BPs because the amount healed is affected by avatar max HP.
  484.     -- I'm probably stupid. It puts you in yellow HP after using a healing move.
  485.     sets.pet_midcast.Buff_Healing = set_combine(sets.pet_midcast.SummoningMagic, {
  486.         main="Nirvana",
  487.         head="Cath Palug Crown",
  488.         body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}},
  489.         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',}},
  490.         feet={ name="Apogee Pumps +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}}
  491.     })
  492.  
  493.     -- This set is used for certain blood pacts when ImpactDebuff mode is ON. (/console gs c ImpactDebuff)
  494.     -- These pacts are normally used as nukes, but they're also strong debuffs which are enhanced by smn skill.
  495.     sets.pet_midcast.Impact = set_combine(sets.pet_midcast.SummoningMagic, {
  496.         main="Nirvana",
  497.         head="Convoker's Horn +3",
  498.         ear1="Lugalbanda Earring",
  499.         ear2="Enmerkar Earring"
  500.     })
  501.  
  502.     sets.aftercast = {}
  503.  
  504.     -- Idle set with no avatar out.
  505.     sets.aftercast.Idle = {
  506.         main="Contemplator +1",
  507.         sub="Oneiros Grip",
  508.         ammo="Sancus Sachet +1",
  509.         head="Convoker's Horn +3",
  510.         neck="Loricate Torque +1",
  511.         ear1="Cath Palug Earring",
  512.         ear2="Moonshade Earring",
  513.         body={ name="Apo. Dalmatica +1", augments={'MP+80','Pet: "Mag.Atk.Bns."+35','Blood Pact Dmg.+8',}},
  514.         hands={ name="Merlinic Dastanas", augments={'Pet: Crit.hit rate +2','"Mag.Atk.Bns."+25','"Refresh"+2','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
  515.         ring1="Stikini Ring +1",
  516.         ring2="Defending Ring",
  517.         back={ name="Campestres's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','Haste+10','Phys. dmg. taken-10%',}},
  518.         waist="Regal Belt",
  519.         legs="Assiduity Pants +1",
  520.         feet="Herald's Gaiters"
  521.     }
  522.    
  523.     -- Idle set used when ForceIlvl is ON. Use this mode to avoid Gaiters dropping ilvl.
  524.     sets.aftercast.Idle_Ilvl = set_combine(sets.aftercast.Idle, {
  525.         feet="Baayami Sabots +1"
  526.     })
  527.    
  528.     sets.aftercast.DT = sets.DT_Base
  529.  
  530.     -- Many idle sets inherit from this set.
  531.     -- Put common items here so you don't have to repeat them over and over.
  532.     -- Strong Alternatives:
  533.     -- Asteria Mitts, Shomonjijoe
  534.     sets.aftercast.Perp_Base = {
  535.         main="Nirvana",
  536.         sub="Oneiros Grip",
  537.         ammo="Sancus Sachet +1",
  538.         head="Convoker's Horn +3",
  539.         neck="Caller's Pendant",
  540.         ear1="Cath Palug Earring",
  541.         ear2="Moonshade Earring",
  542.         body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}},
  543.         hands={ name="Merlinic Dastanas", augments={'Pet: Crit.hit rate +2','"Mag.Atk.Bns."+25','"Refresh"+2','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
  544.         ring1="Stikini Ring +1",
  545.         ring2="Evoker's Ring",
  546.         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',}},
  547.         waist="Lucidity Sash",
  548.         legs="Assiduity Pants +1",
  549.         feet="Baayami Sabots +1"
  550.     }
  551.  
  552.     -- Avatar Melee set. Equipped when IdleMode is "DD" and MeleeMode is OFF.
  553.     -- You really don't need this set. It's only here because I can't bring myself to throw it away.
  554.     sets.aftercast.Perp_DD = set_combine(sets.aftercast.Perp_Base, {
  555.         ear2="Rimeice Earring",
  556.         body="Glyphic Doublet +3",
  557.         hands={ name="Helios Gloves", augments={'Pet: Accuracy+22 Pet: Rng. Acc.+22','Pet: "Dbl. Atk."+8','Pet: Haste+6',}},
  558.         waist="Klouskap Sash",
  559.         feet={ name="Helios Boots", augments={'Pet: Accuracy+21 Pet: Rng. Acc.+21','Pet: "Dbl. Atk."+8','Pet: Haste+6',}}
  560.     })
  561.  
  562.     -- Refresh set with avatar out. Equipped when IdleMode is "Refresh".
  563.     sets.aftercast.Perp_Refresh = set_combine(sets.aftercast.Perp_Base, {
  564.         body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}}
  565.     })
  566.  
  567.     -- Refresh set when MP is under 50%
  568.     sets.aftercast.Perp_RefreshSub50 = set_combine(sets.aftercast.Perp_Refresh, {
  569.         --waist="Fucho-no-obi"
  570.     })
  571.    
  572.     sets.aftercast.Perp_Favor = set_combine(sets.aftercast.Perp_Refresh, {
  573.         head="Beckoner's Horn +1",
  574.         ear2="Lodurr Earring",
  575.         ring1="Stikini Ring +1",
  576.         ring2="Evoker's Ring",
  577.         legs="Baayami Slops +1",
  578.         feet="Baayami Sabots +1"
  579.     })
  580.  
  581.     sets.aftercast.Perp_Zendik = set_combine(sets.aftercast.Perp_Favor, {
  582.         body="Zendik Robe"
  583.     })
  584.  
  585.     -- TP set. Equipped when IdleMode is "DD" and MeleeMode is ON.
  586.     sets.aftercast.Perp_Melee = set_combine(sets.aftercast.Perp_Refresh, {
  587.         head="Convoker's Horn +3",
  588.         neck="Shulmanu Collar",
  589.         ear1="Telos Earring",
  590.         ear2="Cessance Earring",
  591.         body="Tali'ah Manteel +2",
  592.         hands={ name="Merlinic Dastanas", augments={'"Mag.Atk.Bns."+3','Accuracy+12','"Store TP"+7','Accuracy+7 Attack+7',}},
  593.         ring1="Rajas Ring",
  594.         ring2="Petrov Ring",
  595.         back={ name="Campestres's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10',}},
  596.         waist="Cetl Belt",
  597.         legs="Convoker's Spats +3",
  598.         feet="Convoker's Pigaches +3"
  599.     })
  600.  
  601.     -- Pet:DT build. Equipped when IdleMode is "PetDT".
  602.     sets.aftercast.Avatar_DT = {
  603.         main="Nirvana",
  604.         sub="Oneiros Grip",
  605.         ammo="Sancus Sachet +1",
  606.         head={ name="Apogee Crown +1", augments={'Pet: Accuracy+25','"Avatar perpetuation cost"+7','Pet: Damage taken -4%',}},
  607.         neck="Summoner's Collar +2",
  608.         ear1="Cath Palug Earring",
  609.         ear2="Enmerkar Earring",
  610.         body={ name="Apo. Dalmatica +1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',}},
  611.         hands={ name="Telchine Gloves", augments={'Pet: Mag. Evasion+18','Pet: "Regen"+3','Pet: Damage taken -4%',}},
  612.         ring1="Stikini Ring +1",
  613.         ring2="Stikini Ring +1",
  614.         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',}},
  615.         waist="Isa Belt",
  616.         legs="Enticer's Pants",
  617.         feet={ name="Telchine Pigaches", augments={'Pet: Mag. Evasion+20','Pet: "Regen"+3','Pet: Damage taken -4%',}}
  618.     }
  619.  
  620.     -- Perp down set used when ForceIlvl is ON. If you use Selenian Cap for Pet:DT, you can make another set here without it.
  621.     sets.aftercast.Avatar_DT_Ilvl = set_combine(sets.aftercast.Avatar_DT, {
  622.     })
  623.  
  624.     -- DT build with avatar out. Equipped when IdleMode is "DT".
  625.     sets.aftercast.Perp_DT = set_combine(sets.DT_Base, {
  626.         ear2="Evans Earring",
  627.         body="Udug Jacket",
  628.         waist="Lucidity Sash"
  629.     })
  630.  
  631.     sets.aftercast.Spirit = {
  632.         main="Nirvana",
  633.         sub="Vox Grip",
  634.         ammo="Sancus Sachet +1",
  635.         head="Convoker's Horn +3",
  636.         neck="Incanter's Torque",
  637.         ear1="Cath Palug Earring",
  638.         ear2="Evans Earring",
  639.         body="Baayami Robe +1",
  640.         hands="Baayami Cuffs +1",
  641.         ring1="Stikini Ring +1",
  642.         ring2="Evoker's Ring",
  643.         back={ name="Conveyance Cape", augments={'Summoning magic skill +5','Pet: Enmity+12','Blood Pact Dmg.+2',}},
  644.         waist="Lucidity Sash",
  645.         legs="Glyphic Spats +3",
  646.         feet="Baayami Sabots +1"
  647.     }
  648.  
  649.     -- ===================================================================================================================
  650.     --      End of Sets
  651.     -- ===================================================================================================================
  652.  
  653.     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'}
  654.     Buff_BPs_Healing = S{'Healing Ruby','Healing Ruby II','Whispering Wind','Spring Water'}
  655.     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'}
  656.     Debuff_Rage_BPs = S{'Moonlit Charge','Tail Whip'}
  657.  
  658.     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'}
  659.     Magic_BPs_TP = S{'Impact','Conflag Strike','Level ? Holy','Lunar Bay'}
  660.     Merit_BPs = S{'Meteor Strike','Geocrush','Grand Fall','Wind Blade','Heavenly Strike','Thunderstorm'}
  661.     Physical_BPs_TP = S{'Rock Buster','Mountain Buster','Crescent Fang','Spinning Dive'}
  662.    
  663.     ZodiacElements = S{'Fire','Earth','Water','Wind','Ice','Lightning'}
  664.  
  665.     --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"}
  666.     --Salvage = S{"Bhaflau Remnants","Zhayolm Remnants","Arrapago Remnants","Silver Sea Remnants"}
  667.  
  668.     -- Select initial macro set and set lockstyle
  669.     -- This section likely requires changes or removal if you aren't Pergatory
  670.     if pet.isvalid then
  671.         if pet.name=='Fenrir' then
  672.             send_command('input /macro book 10;wait .1;input /macro set 2;wait 3;input /lockstyleset '..StartLockStyle)
  673.         elseif pet.name=='Ifrit' then
  674.             send_command('input /macro book 10;wait .1;input /macro set 3;wait 3;input /lockstyleset '..StartLockStyle)
  675.         elseif pet.name=='Titan' then
  676.             send_command('input /macro book 10;wait .1;input /macro set 4;wait 3;input /lockstyleset '..StartLockStyle)
  677.         elseif pet.name=='Leviathan' then
  678.             send_command('input /macro book 10;wait .1;input /macro set 5;wait 3;input /lockstyleset '..StartLockStyle)
  679.         elseif pet.name=='Garuda' then
  680.             send_command('input /macro book 10;wait .1;input /macro set 6;wait 3;input /lockstyleset '..StartLockStyle)
  681.         elseif pet.name=='Shiva' then
  682.             send_command('input /macro book 10;wait .1;input /macro set 7;wait 3;input /lockstyleset '..StartLockStyle)
  683.         elseif pet.name=='Ramuh' then
  684.             send_command('input /macro book 10;wait .1;input /macro set 8;wait 3;input /lockstyleset '..StartLockStyle)
  685.         elseif pet.name=='Diabolos' then
  686.             send_command('input /macro book 10;wait .1;input /macro set 9;wait 3;input /lockstyleset '..StartLockStyle)
  687.         elseif pet.name=='Cait Sith' then
  688.             send_command('input /macro book 11;wait .1;input /macro set 2;wait 3;input /lockstyleset '..StartLockStyle)
  689.         end
  690.     else
  691.         send_command('input /macro book 10;wait .1;input /macro set 1;wait 3;input /lockstyleset '..StartLockStyle)
  692.     end
  693.     -- End macro set / lockstyle section
  694. end
  695.  
  696. -- ===================================================================================================================
  697. --      Gearswap rules below this point - Modify at your own peril
  698. -- ===================================================================================================================
  699.  
  700. function pet_change(pet,gain)
  701.     idle()
  702. end
  703.  
  704. function pretarget(spell,action)
  705.     if not buffactive['Muddle'] then
  706.         -- Auto Remedy --
  707.         if AutoRemedy and (spell.action_type == 'Magic' or spell.type == 'JobAbility') then
  708.             if buffactive['Paralysis'] or (buffactive['Silence'] and not AutoEcho) then
  709.                 cancel_spell()
  710.                 send_command('input /item "Remedy" <me>')
  711.             end
  712.         end
  713.         -- Auto Echo Drop --
  714.         if AutoEcho and spell.action_type == 'Magic' and buffactive['Silence'] then
  715.             cancel_spell()
  716.             send_command('input /item "Echo Drops" <me>')
  717.         end
  718.     end
  719. end
  720.  
  721. function precast(spell)
  722.     if (pet.isvalid and pet_midaction()) or spell.type=="Item" then
  723.         return
  724.     end
  725.     -- Spell fast cast
  726.     if sets.precast[spell.english] then
  727.         equip(sets.precast[spell.english])
  728.     elseif spell.action_type=="Magic" then
  729.         if spell.name=="Stoneskin" then
  730.             equip(sets.precast.FC,{waist="Siegel Sash"})
  731.         else
  732.             equip(sets.precast.FC)
  733.         end
  734.     end
  735. end
  736.  
  737. function midcast(spell)
  738.     if (pet.isvalid and pet_midaction()) or spell.type=="Item" then
  739.         return
  740.     end
  741.     -- BP Timer gear needs to swap here
  742.     if (spell.type=="BloodPactWard" or spell.type=="BloodPactRage") then
  743.         if not buffactive["Astral Conduit"] then
  744.             equip(sets.midcast.BP)
  745.         end
  746.         -- If lag compensation mode is on, set up a timer to equip the BP gear.
  747.         if LagMode then
  748.             send_command('wait 0.5;gs c EquipBP '..spell.name)
  749.         end
  750.     -- Spell Midcast & Potency Stuff
  751.     elseif sets.midcast[spell.english] then
  752.         equip(sets.midcast[spell.english])
  753.     elseif spell.name=="Elemental Siphon" then
  754.         if pet.element==world.day_element and ZodiacElements:contains(pet.element) then
  755.             if pet.element==world.weather_element then
  756.                 equip(sets.midcast.SiphonWeatherZodiac)
  757.             else
  758.                 equip(sets.midcast.SiphonZodiac)
  759.             end
  760.         else
  761.             if pet.element==world.weather_element then
  762.                 equip(sets.midcast.SiphonWeather)
  763.             else
  764.                 equip(sets.midcast.Siphon)
  765.             end
  766.         end
  767.     elseif spell.type=="SummonerPact" then
  768.         equip(sets.midcast.Summon)
  769.     elseif spell.type=="WhiteMagic" then
  770.         if string.find(spell.name,"Cure") or string.find(spell.name,"Curaga") then
  771.             equip(sets.midcast.Cure)
  772.         elseif string.find(spell.name,"Protect") or string.find(spell.name,"Shell") then
  773.             equip(sets.midcast.Enhancing,{ring2="Sheltered Ring"})
  774.         elseif spell.skill=="Enfeebling Magic" then
  775.             equip(sets.midcast.Enfeeble)
  776.         elseif spell.skill=="Enhancing Magic" then
  777.             equip(sets.midcast.Enhancing)
  778.         else
  779.             idle()
  780.         end
  781.     elseif spell.type=="BlackMagic" then
  782.         if spell.skill=="Elemental Magic" then
  783.             equip(sets.midcast.Nuke)
  784.         end
  785.     elseif spell.action_type=="Magic" then
  786.         equip(sets.midcast.EnmityRecast)
  787.     else
  788.         idle()
  789.     end
  790.     -- Auto-cancel existing buffs
  791.     if spell.name=="Stoneskin" and buffactive["Stoneskin"] then
  792.         windower.send_command('cancel 37;')
  793.     elseif spell.name=="Sneak" and buffactive["Sneak"] and spell.target.type=="SELF" then
  794.         windower.send_command('cancel 71;')
  795.     elseif spell.name=="Utsusemi: Ichi" and buffactive["Copy Image"] then
  796.         windower.send_command('wait 1;cancel 66;')
  797.     end
  798. end
  799.  
  800. function aftercast(spell)
  801.     if pet_midaction() or spell.type=="Item" then
  802.         return
  803.     end
  804.     if not string.find(spell.type,"BloodPact") then
  805.         idle()
  806.     end
  807. end
  808.  
  809. function status_change(new,old)
  810.     if new=="Idle" then
  811.         idle()
  812.     end
  813. end
  814.  
  815. function buff_change(name,gain)
  816.     if name=="Quickening" then
  817.         idle()
  818.     end
  819. end
  820.  
  821. function pet_midcast(spell)
  822.     if not LagMode then
  823.         equipBPGear(spell.name)
  824.     end
  825. end
  826.  
  827. function pet_aftercast(spell)
  828.     -- Pet aftercast is simply a check for whether Conduit and Apogee are up, and then a call to our aftercast function
  829.     -- We have a variable called AutoBP that we set to true or false with commands to auto repeat BPs for us
  830.     if (buffactive['Apogee'] or buffactive['Astral Conduit']) and AutoBP then
  831.         send_command('input /pet "%s" <t>':format(spell.name))
  832.         return
  833.     end
  834.  
  835.     idle()
  836. end
  837.  
  838. function equipBPGear(spell)
  839.     if spell=="Perfect Defense" then
  840.         equip(sets.pet_midcast.SummoningMagic)
  841.     elseif Debuff_BPs:contains(spell) then
  842.         equip(sets.pet_midcast.MagicAcc_BP)
  843.     elseif Buff_BPs_Healing:contains(spell) then
  844.         equip(sets.pet_midcast.Buff_Healing)
  845.     elseif Buff_BPs_Duration:contains(spell) then
  846.         equip(sets.pet_midcast.Buff)
  847.     elseif spell=="Flaming Crush" then
  848.         if AccMode then
  849.             equip(sets.pet_midcast.FlamingCrush_Acc)
  850.         else
  851.             equip(sets.pet_midcast.FlamingCrush)
  852.         end
  853.     elseif ImpactDebuff and (spell=="Impact" or spell=="Conflag Strike") then
  854.         equip(sets.pet_midcast.Impact)
  855.     elseif Magic_BPs_TP:contains(spell) or string.find(spell," II") or string.find(spell," IV") then
  856.         if AccMode then
  857.             equip(sets.pet_midcast.Magic_BP_TP_Acc)
  858.         else
  859.             equip(sets.pet_midcast.Magic_BP_TP)
  860.         end
  861.     elseif Magic_BPs_NoTP:contains(spell) then
  862.         if AccMode then
  863.             equip(sets.pet_midcast.Magic_BP_NoTP_Acc)
  864.         else
  865.             equip(sets.pet_midcast.Magic_BP_NoTP)
  866.         end
  867.     elseif Merit_BPs:contains(spell) then
  868.         if AccMode then
  869.             equip(sets.pet_midcast.Magic_BP_TP_Acc)
  870.         elseif spell=="Meteor Strike" and MeteorStrike>4 then
  871.             equip(sets.pet_midcast.Magic_BP_NoTP)
  872.         elseif spell=="Geocrush" and Geocrush>4 then
  873.             equip(sets.pet_midcast.Magic_BP_NoTP)
  874.         elseif spell=="Grand Fall" and GrandFall>4 then
  875.             equip(sets.pet_midcast.Magic_BP_NoTP)
  876.         elseif spell=="Wind Blade" and WindBlade>4 then
  877.             equip(sets.pet_midcast.Magic_BP_NoTP)
  878.         elseif spell=="Heavenly Strike" and HeavenlyStrike>4 then
  879.             equip(sets.pet_midcast.Magic_BP_NoTP)
  880.         elseif spell=="Thunderstorm" and Thunderstorm>4 then
  881.             equip(sets.pet_midcast.Magic_BP_NoTP)
  882.         else
  883.             equip(sets.pet_midcast.Magic_BP_TP)
  884.         end
  885.     elseif Debuff_Rage_BPs:contains(spell) then
  886.         equip(sets.pet_midcast.Debuff_Rage)
  887.     else
  888.         if AccMode then
  889.             equip(sets.pet_midcast.Physical_BP_Acc)
  890.         elseif Physical_BPs_TP:contains(spell) then
  891.             equip(sets.pet_midcast.Physical_BP_TP)
  892.         elseif buffactive["Aftermath: Lv.3"] then
  893.             equip(sets.pet_midcast.Physical_BP_AM3)
  894.         else
  895.             equip(sets.pet_midcast.Physical_BP)
  896.         end
  897.     end
  898. end
  899.  
  900. -- This command is called whenever you input "gs c <command>"
  901. function self_command(command)
  902.     IdleModeCommands = {'DD','Refresh','DT','Favor','PetDT','Zendik'}
  903.     is_valid = false
  904.    
  905.     for _, v in ipairs(IdleModeCommands) do
  906.         if command:lower()==v:lower() then
  907.             IdleMode = v
  908.             send_command('console_echo "Idle Mode: ['..IdleMode..']"')
  909.             idle()
  910.             return
  911.         end
  912.     end
  913.     if string.sub(command,1,7)=="EquipBP" then
  914.         equipBPGear(string.sub(command,9,string.len(command)))
  915.         return
  916.     elseif command:lower()=="accmode" then
  917.         AccMode = AccMode==false
  918.         is_valid = true
  919.         send_command('console_echo "AccMode: '..tostring(AccMode)..'"')
  920.     elseif command:lower()=="impactmode" then
  921.         ImpactDebuff = ImpactDebuff==false
  922.         is_valid = true
  923.         send_command('console_echo "Impact Debuff: '..tostring(ImpactDebuff)..'"')
  924.     elseif command:lower()=="forceilvl" then
  925.         ForceIlvl = ForceIlvl==false
  926.         is_valid = true
  927.         send_command('console_echo "Force iLVL: '..tostring(ForceIlvl)..'"')
  928.     elseif command:lower()=="lagmode" then
  929.         LagMode = LagMode==false
  930.         is_valid = true
  931.         send_command('console_echo "Lag Compensation Mode: '..tostring(LagMode)..'"')
  932.     elseif command:lower()=="meleemode" then
  933.         if MeleeMode then
  934.             MeleeMode = false
  935.             enable("main","sub")
  936.             send_command('console_echo "Melee Mode: false"')
  937.         else
  938.             MeleeMode = true
  939.             equip({main="Nirvana",sub="Elan Strap +1"})
  940.             disable("main","sub")
  941.             send_command('console_echo "Melee Mode: true"')
  942.         end
  943.         is_valid = true
  944.     elseif command:lower()=="toggleidle" then
  945.         is_valid = true
  946.         -- If you want to change the sets cycled with F9, this is where you do it
  947.         if IdleMode=="Refresh" then
  948.             IdleMode = "DT"
  949.         elseif IdleMode=="DT" then
  950.             IdleMode = "PetDT"
  951.         elseif IdleMode=="PetDT" then
  952.             IdleMode = "DD"
  953.         else
  954.             IdleMode = "Refresh"
  955.         end
  956.         send_command('console_echo "Idle Mode: ['..IdleMode..']"')
  957.     elseif command:lower()=="autobp" then
  958.         is_valid = true
  959.         if not AutoBP then
  960.             AutoBP = true
  961.         else
  962.             AutoBP = false
  963.         end
  964.         local msg = "AutoBP set to: "..tostring(AutoBP):upper()
  965.         add_to_chat(10, msg)
  966.     elseif command:lower()=="lowhp" then
  967.         -- Use for "Cure 500 HP" objectives in Omen
  968.         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"})
  969.         return
  970.     elseif string.sub(command:lower(),1,12)=="meteorstrike" then
  971.         MeteorStrike = string.sub(command,13,13)
  972.         send_command('console_echo "Meteor Strike: '..MeteorStrike..'/5"')
  973.         is_valid = true
  974.     elseif string.sub(command:lower(),1,8)=="geocrush" then
  975.         Geocrush = string.sub(command,9,9)
  976.         send_command('console_echo "Geocrush: '..Geocrush..'/5"')
  977.         is_valid = true
  978.     elseif string.sub(command:lower(),1,9)=="grandfall" then
  979.         GrandFall = string.sub(command,10,10)
  980.         send_command('console_echo "Grand Fall: '..GrandFall..'/5"')
  981.         is_valid = true
  982.     elseif string.sub(command:lower(),1,9)=="windblade" then
  983.         WindBlade = +string.sub(command,10,10)
  984.         send_command('console_echo "Wind Blade: '..WindBlade..'/5"')
  985.         is_valid = true
  986.     elseif string.sub(command:lower(),1,14)=="heavenlystrike" then
  987.         HeavenlyStrike = string.sub(command,15,15)
  988.         send_command('console_echo "Heavenly Strike: '..HeavenlyStrike..'/5"')
  989.         is_valid = true
  990.     elseif string.sub(command:lower(),1,12)=="thunderstorm" then
  991.         Thunderstorm = string.sub(command,13,13)
  992.         send_command('console_echo "Thunderstorm: '..Thunderstorm..'/5"')
  993.         is_valid = true
  994.     elseif command=="TestMode" then
  995.         Test = Test + 1
  996.         if Test==3 then
  997.             Test = 0
  998.         end
  999.         is_valid = true
  1000.         send_command('console_echo "Test Mode: '..tostring(Test)..'"')
  1001.     end
  1002.  
  1003.     if not is_valid then
  1004.         send_command('console_echo "gs c {Refresh|DT|DD|PetDT|Favor} {AccMode} {ImpactMode} {MeleeMode}"')
  1005.     end
  1006.     idle()
  1007. end
  1008.  
  1009. -- This function is for returning to aftercast gear after an action/event.
  1010. function idle()
  1011.     --if TownIdle:contains(world.area:lower()) then
  1012.     --  return
  1013.     --end
  1014.     if pet.isvalid then
  1015.         if IdleMode=='DT' then
  1016.             equip(sets.aftercast.Perp_DT)
  1017.         elseif string.find(pet.name,'Spirit') then
  1018.             equip(sets.aftercast.Spirit)
  1019.         elseif IdleMode=='PetDT' then
  1020.             if ForceIlvl then
  1021.                 equip(sets.aftercast.Avatar_DT_Ilvl)
  1022.             else
  1023.                 equip(sets.aftercast.Avatar_DT)
  1024.             end
  1025.         elseif IdleMode=='Refresh' then
  1026.             if player.mpp < 50 then
  1027.                 equip(sets.aftercast.Perp_RefreshSub50)
  1028.             else
  1029.                 equip(sets.aftercast.Perp_Refresh)
  1030.             end
  1031.         elseif IdleMode=='Favor' then
  1032.             equip(sets.aftercast.Perp_Favor)
  1033.         elseif IdleMode=='Zendik' then
  1034.             equip(sets.aftercast.Perp_Zendik)
  1035.         elseif MeleeMode then
  1036.             equip(sets.aftercast.Perp_Melee)
  1037.         elseif IdleMode=='DD' then
  1038.             equip(sets.aftercast.Perp_DD)
  1039.         end
  1040.         -- Gaiters if Fleet Wind is up
  1041.         if buffactive['Quickening'] and IdleMode~='DT' and not ForceIlvl then
  1042.             equip({feet="Herald's Gaiters"})
  1043.         end
  1044.     else
  1045.         if IdleMode=='DT' then
  1046.             equip(sets.aftercast.DT)
  1047.         elseif MeleeMode and IdleMode=='DD' then
  1048.             equip(sets.aftercast.Perp_Melee)
  1049.         elseif ForceIlvl then
  1050.             equip(sets.aftercast.Idle_Ilvl)
  1051.         else
  1052.             equip(sets.aftercast.Idle)
  1053.         end
  1054.     end
  1055.     -- Balrahn's Ring
  1056.     --if Salvage:contains(world.area) then
  1057.     --  equip({ring2="Balrahn's Ring"})
  1058.     --end
  1059.     -- Maquette Ring
  1060.     --if world.area=='Maquette Abdhaljs-Legion' and not IdleMode=='DT' then
  1061.     --  equip({ring2="Maquette Ring"})
  1062.     --end
  1063. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement