Pergatory

Pergatory's RDM Gearswap

May 31st, 2025
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 31.67 KB | None | 0 0
  1. -- ~~~~~~~~~~~~~~ Red Mage Lua ~~~~~~~~~~~~~~              ~by Pergatory~ https://pastebin.com/u/pergatory
  2. -- //gs c tp <TPMode> - Determines the set used after casting when engaged to a mosnter.
  3. -- //gs c idle <IdleMode> - Determines the set used after casting.
  4.  
  5. -- Additional Bindings:
  6. -- F9 - Toggles between a subset of TP Modes (TP > Hybrid > HybridEnspell)
  7. -- F10 - Toggles between a subset of Idle Modes (Kite > Refresh > Regain)
  8. -- F11 - Panacea
  9. -- F12 - Holy Water
  10. -- Ctrl+F9 - Weapon Lock to prevent TP loss
  11. --    //gs c naeg - Equip Naegling & Gleti's Knife
  12. --    //gs c tauret - Equip Tauret & Bunzi's Rod
  13. --    //gs c max - Equip Maxentius & Ammurapi Shield
  14. --    //gs c crocea - Equip Crocea & Ammurapi Shield
  15. -- Ctrl+F10 - Treasure Hunter toggle
  16.  
  17. function file_unload()
  18.     send_command('unbind f9')
  19.     send_command('unbind f10')
  20.     send_command('unbind f11')
  21.     send_command('unbind f12')
  22.     send_command('unbind ^f9')
  23.     send_command('unbind ^f10')
  24.     send_command('unbind ^f11')
  25.     send_command('unbind ^f12')
  26.     send_command('unbind !f9')
  27.     send_command('unbind !f10')
  28.     send_command('unbind !f11')
  29.     enable("main","sub","range","ammo","head","neck","ear1","ear2","body","hands","ring1","ring2","back","waist","legs","feet")
  30. end
  31.  
  32. function get_sets()
  33.     send_command('bind f9 gs c ToggleTP')
  34.     send_command('bind f10 gs c ToggleIdle')
  35.     send_command('bind f11 input /item "Panacea" <me>')
  36.     send_command('bind f12 input /item "Holy Water" <me>')
  37.     send_command('bind ^f9 gs c MeleeMode')
  38.     send_command('bind ^f10 gs c TH') -- Treasure Hunter toggle. Only equips for spells in the "THSpells" list below.
  39.     send_command('bind ^f11 gs c CureObjective') -- Use to toggle high-HP cure build to complete 500HP cure objectives in Omen
  40.     send_command('bind ^f12 input /item "Remedy" <me>')
  41.     send_command('bind !f9 gs c LockEffect') -- Used to lock in enfeebling potency gear. I use this for Chainspell Gravity on Aita.
  42.     send_command('bind !f10 gs c MB') -- Magic Burst Mode
  43.     send_command('bind !f11 gs c LowDmg') -- Low Dmg toggle for stuff like Omen objectives
  44.  
  45.     StartLockStyle = '78'
  46.     IdleMode = 'Kite'
  47.     TPMode = 'Hybrid'
  48.     MeleeMode = false
  49.     AccMode = false
  50.     MagicBurst = true
  51.     OccultMode = false
  52.     TreasureHunter = false
  53.     CureObjective = false
  54.     LowDmg = false
  55.     LockEffect = false
  56.     THSpells = S{"Dia","Dia II","Diaga","Dispelga"} -- If you want Treasure Hunter gear to swap for a spell/ability, add it here.
  57.  
  58.     IdleModeCommands = {'Refresh','DT','Kite','MDB','Regain'}
  59.     TPModeCommands = {'TP','Hybrid','DT','KC','Enspell','HybridEnspell','Odin'}
  60.  
  61.     -- ===================================================================================================================
  62.     --      Sets
  63.     -- ===================================================================================================================
  64.  
  65.     sets.precast = {}
  66.  
  67.     -- Main fast cast set
  68.     sets.precast.FC = {
  69.         ammo="Impatiens",
  70.         head="Bunzi's Hat", -- +10
  71.         neck="Loricate Torque +1",
  72.         ear1="Malignance Earring", -- +4
  73.         ear2="Lethargy Earring +2", -- +8
  74.         body="Vitiation Tabard +3", -- +15
  75.         hands="Leyline Gloves", -- +8
  76.         ring1="Lebeche Ring",
  77.         ring2="Kishar Ring", -- +4
  78.         back="Perimede Cape",
  79.         waist="Witful Belt", -- +3
  80.         legs={ name="Kaykaus Tights +1", augments={'INT+12','"Mag.Atk.Bns."+20','Enmity-6',}}, -- +7
  81.         feet="Carmine Greaves +1" -- +8
  82.     }
  83.  
  84.     sets.precast['Impact'] = set_combine(sets.precast.FC, { -- Make sure to leave the head empty --
  85.         head=empty,
  86.         body="Crepuscular Cloak"
  87.     })
  88.    
  89.     sets.precast["Dispelga"] = set_combine(sets.precast.FC, {
  90.         main="Daybreak",
  91.         sub="Ammurapi Shield"
  92.     })
  93.  
  94.     sets.midcast = {}
  95.  
  96.     -- Cure potency build.
  97.     sets.midcast.Cure = {
  98.         main="Daybreak",
  99.         sub="Genmei Shield",
  100.         ammo="Pemphredo Tathlum",
  101.         head="Kaykaus Mitra +1",
  102.         neck="Nodens Gorget",
  103.         ear1="Meili Earring",
  104.         ear2="Beatific Earring",
  105.         body="Adamantite Armor",
  106.         hands="Kaykaus Cuffs +1",
  107.         ring1="Defending Ring",
  108.         ring2="Naji's Loop",
  109.         back={ name="Moonlight Cape", priority=1 },
  110.         waist="Witful Belt",
  111.         legs="Kaykaus Tights +1",
  112.         feet="Kaykaus Boots +1"
  113.     }
  114.    
  115.     sets.midcast.Cure.Weather = set_combine(sets.midcast.Cure, {
  116.         main="Chatoyant Staff",
  117.         sub="Clerisy Strap +1",
  118.         waist="Hachirin-no-Obi",
  119.     })
  120.    
  121.     -- Cure set used for 500HP Cure Objective. Make sure it has 500HP more than your "aftercast.CureObjective" set.
  122.     sets.midcast.CureObjective = set_combine(sets.midcast.Cure, {
  123.         ear1="Tuisto Earring",
  124.         ear2="Odnowa Earring +1",
  125.         back="Moonlight Cape"
  126.     })
  127.  
  128.     -- Enhancing set
  129.     sets.midcast.Enhancing = {
  130.         main="Pukulatmuj +1",
  131.         sub="Forfend +1",
  132.         ammo="Pemphredo Tathlum",
  133.         head="Befouled Crown",
  134.         neck="Incanter's Torque",
  135.         ear1="Mimir Earring",
  136.         ear2="Andoaa Earring",
  137.         body="Vitiation Tabard +3",
  138.         hands="Vitiation Gloves +3",
  139.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  140.         ring2={name="Stikini Ring +1", bag="wardrobe4"},
  141.         back="Ghostfyre Cape",
  142.         waist="Olympus Sash",
  143.         legs="Atrophy Tights +3",
  144.         feet="Lethargy Houseaux +3"
  145.     }
  146.    
  147.     sets.midcast.Enhancing.Self = set_combine(sets.midcast.Enhancing, {
  148.     })
  149.    
  150.     sets.midcast.EnhancingDuration = set_combine(sets.midcast.Enhancing, {
  151.         sub="Ammurapi Shield",
  152.         ammo="Sapience Orb",
  153.         head="Lethargy Chappel +3",
  154.         neck="Duelist's Torque +2",
  155.         ear2="Lethargy Earring +2",
  156.         body="Lethargy Sayon +3",
  157.         hands="Atrophy Gloves +3",
  158.         waist="Embla Sash",
  159.         legs="Lethargy Fuseau +3",
  160.     })
  161.    
  162.     sets.midcast.EnhancingDuration.Self = set_combine(sets.midcast.EnhancingDuration, {
  163.         head={ name="Telchine Cap", augments={'Mag. Evasion+24','"Conserve MP"+4','Enh. Mag. eff. dur. +10',}},
  164.         body="Vitiation Tabard +3",
  165.         hands="Atrophy Gloves +3",
  166.         legs={ name="Telchine Braconi", augments={'Mag. Evasion+25','"Conserve MP"+4','Enh. Mag. eff. dur. +10',}},
  167.     })
  168.    
  169.     -- Make sure this set has 500 skill as well.
  170.     sets.midcast.BarElement = set_combine(sets.midcast.EnhancingDuration, {
  171.     })
  172.    
  173.     sets.midcast.BarAilment = set_combine(sets.midcast.EnhancingDuration, {
  174.         neck="Sroda Necklace"
  175.     })
  176.  
  177.     sets.midcast.Regen = set_combine(sets.midcast.EnhancingDuration, {
  178.         main="Bolelabunga",
  179.         sub="Ammurapi Shield"
  180.     })
  181.    
  182.     -- Make sure this set has 500 skill as well.
  183.     sets.midcast.Phalanx = set_combine(sets.midcast.EnhancingDuration, {
  184.     })
  185.    
  186.     sets.midcast.Phalanx.Self = set_combine(sets.midcast.Phalanx, {
  187.         body={ name="Taeon Tabard", augments={'Mag. Evasion+20','Spell interruption rate down -10%','Phalanx +3',}},
  188.         hands={ name="Taeon Gloves", augments={'Mag. Evasion+20','Enemy crit. hit rate -3','Phalanx +3',}},
  189.         back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','MND+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}},
  190.         feet={ name="Taeon Boots", augments={'Mag. Evasion+20','Spell interruption rate down -10%','Phalanx +3',}}
  191.     })
  192.  
  193.     sets.midcast.Stoneskin = set_combine(sets.midcast.EnhancingDuration, {
  194.         neck="Nodens Gorget",
  195.         ear2="Earthcry Earring",
  196.         waist="Siegel Sash"
  197.     })
  198.  
  199.     sets.midcast.Refresh = set_combine(sets.midcast.EnhancingDuration, {
  200.         head="Amalric Coif +1",
  201.         body="Atrophy Tabard +3",
  202.     })
  203.     sets.midcast.Refresh.Self = set_combine(sets.midcast.EnhancingDuration.Self, {
  204.         head="Amalric Coif +1",
  205.         body="Atrophy Tabard +3",
  206.         waist="Gishdubar Sash"
  207.     })
  208.  
  209.     sets.midcast.Aquaveil = set_combine(sets.midcast.EnhancingDuration, {
  210.         main="Vadose Rod",
  211.         head="Amalric Coif +1",
  212.         hands="Regal Cuffs",
  213.         waist="Emphatikos Rope",
  214.         --legs="Shedir Seraweels"
  215.     })
  216.  
  217.     sets.midcast.Enfeebling = {
  218.         main="Contemplator +1",
  219.         sub="Enki Strap",
  220.         ammo="Regal Gem",
  221.         head="Vitiation Chapeau +3",
  222.         neck="Duelist's Torque +2",
  223.         ear1="Snotra Earring",
  224.         ear2="Lethargy Earring +2",
  225.         body="Lethargy Sayon +3",
  226.         --body="Atrophy Tabard +3",
  227.         hands="Lethargy Gantherots +3",
  228.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  229.         ring2="Kishar Ring",
  230.         back={ name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','MND+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}},
  231.         waist="Obstinate Sash",
  232.         legs={ name="Chironic Hose", augments={'Mag. Acc.+23 "Mag.Atk.Bns."+23','Haste+1','MND+10','Mag. Acc.+7','"Mag.Atk.Bns."+11',}},
  233.         feet="Vitiation Boots +3"
  234.     }
  235.    
  236.     sets.midcast.EnfeeblingMND = set_combine(sets.midcast.Enfeebling, {
  237.         main="Daybreak",
  238.         sub="Ammurapi Shield",
  239.         waist="Luminary Sash",
  240.         ring2="Metamorph Ring +1",
  241.     })
  242.    
  243.     sets.midcast.EnfeeblingINT = set_combine(sets.midcast.Enfeebling, {
  244.         main="Naegling",
  245.         sub="Ammurapi Shield",
  246.         ring1="Kishar Ring",
  247.     })
  248.    
  249.     -- Set for Gravity
  250.     sets.midcast.EnfeeblingPotency = set_combine(sets.midcast.Enfeebling, {
  251.         body="Lethargy Sayon +3",
  252.         back={ name="Sucellos's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+10','"Mag.Atk.Bns."+10','Phys. dmg. taken-10%',}},
  253.     })
  254.  
  255.     -- Put Saboteur+ gear here, leave other slots empty. This overrides your normal enfeebling gear.
  256.     sets.midcast.Enfeebling.Saboteur = {
  257.         hands="Lethargy Gantherots +3"
  258.     }
  259.    
  260.     sets.midcast.EnfeeblingDuration = set_combine(sets.midcast.Enfeebling, {
  261.         hands="Regal Cuffs",
  262.     })
  263.    
  264.     sets.midcast.Cursna = {
  265.         main="Daybreak",
  266.         sub="Genmei Shield",
  267.         ammo="Sapience Orb",
  268.         head={ name="Vanya Hood", augments={'Healing magic skill +20','"Cure" spellcasting time -7%','Magic dmg. taken -3',}},
  269.         neck="Debilis Medallion",
  270.         ear1="Meili Earring",
  271.         ear2="Beatific Earring",
  272.         --body="Ebers Bliaut +3",
  273.         hands="Hieros Mittens",
  274.         ring1="Menelaus's Ring",
  275.         ring2="Haoma's Ring",
  276.         back="Tempered Cape +1",
  277.         waist="Bishop's Sash",
  278.         legs="Carmine Cuisses +1",
  279.         feet={ name="Vanya Clogs", augments={'Healing magic skill +20','"Cure" spellcasting time -7%','Magic dmg. taken -3',}}
  280.     }
  281.  
  282.     sets.midcast.Elemental = {
  283.         main="Bunzi's Rod",
  284.         sub="Ammurapi Shield",
  285.         ammo="Pemphredo Tathlum",
  286.         head="Lethargy Chappel +3",
  287.         neck="Sibyl Scarf",
  288.         ear1="Malignance Earring",
  289.         ear2="Regal Earring",
  290.         body="Lethargy Sayon +3",
  291.         hands="Bunzi's Gloves",
  292.         ring1="Freke Ring",
  293.         ring2="Metamorph Ring +1",
  294.         back={ name="Sucellos's Cape", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+10','"Mag.Atk.Bns."+10','Phys. dmg. taken-10%',}},
  295.         waist="Acuity Belt +1",
  296.         legs="Lethargy Fuseau +3",
  297.         feet="Lethargy Houseaux +3",
  298.     }
  299.     sets.midcast.Elemental.Weather = set_combine(sets.midcast.Elemental, {
  300.         waist="Hachirin-no-Obi"
  301.     })
  302.     sets.midcast.Elemental.MagicBurst = set_combine(sets.midcast.Elemental, {
  303.         head="Bunzi's Hat",
  304.         ring1="Mujin Band",
  305.         feet="Bunzi's Sabots",
  306.     })
  307.     sets.midcast.Elemental.MagicBurst.Weather = set_combine(sets.midcast.Elemental.MagicBurst, {
  308.         waist="Hachirin-no-Obi"
  309.     })
  310.  
  311.     sets.midcast.Elemental.Occult = set_combine(sets.midcast.Elemental, {
  312.         neck="Combatant's Torque",
  313.         ear1="Telos Earring",
  314.         ear2="Crepuscular Earring",
  315.         hands={ name="Merlinic Dastanas", augments={'"Mag.Atk.Bns."+17','"Occult Acumen"+11','INT+1','Mag. Acc.+11',}},
  316.         ring1="Crepuscular Ring",
  317.         ring2={name="Chirich Ring +1", bag="wardrobe4"},
  318.         waist="Oneiros Rope",
  319.         legs="Perdition Slops",
  320.         feet={ name="Merlinic Crackows", augments={'Accuracy+4','"Occult Acumen"+11','INT+4','Mag. Acc.+15','"Mag.Atk.Bns."+1',}}
  321.     })
  322.     sets.midcast.Elemental.Occult.Weather = set_combine(sets.midcast.Elemental.Occult, {
  323.         waist="Hachirin-no-Obi"
  324.     })
  325.  
  326.     sets.midcast["Impact"] = set_combine(sets.midcast.Elemental, {  -- Make sure to leave the head empty --
  327.         head=empty,
  328.         neck="Duelist's Torque +2",
  329.         ear2="Snotra Earring",
  330.         body="Crepuscular Cloak",
  331.         hands="Lethargy Gantherots +3",
  332.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  333.         back="Aurist's Cape +1",
  334.         waist="Acuity Belt +1",
  335.     })
  336.  
  337.     sets.midcast["Impact"].Occult = set_combine(sets.midcast["Impact"], {
  338.         neck="Combatant's Torque",
  339.         ear1="Telos Earring",
  340.         ear2="Crepuscular Earring",
  341.         hands={ name="Merlinic Dastanas", augments={'"Mag.Atk.Bns."+17','"Occult Acumen"+11','INT+1','Mag. Acc.+11',}},
  342.         ring1="Crepuscular Ring",
  343.         ring2={name="Chirich Ring +1", bag="wardrobe4"},
  344.         waist="Oneiros Rope",
  345.         legs="Perdition Slops",
  346.         feet={ name="Merlinic Crackows", augments={'Accuracy+4','"Occult Acumen"+11','INT+4','Mag. Acc.+15','"Mag.Atk.Bns."+1',}}
  347.     })
  348.  
  349.     sets.midcast["Protect V"] = set_combine(sets.midcast.EnhancingDuration, {
  350.     })
  351.     sets.midcast["Protect V"].Self = set_combine(sets.midcast["Protect V"], {
  352.         ring2="Sheltered Ring"
  353.     })
  354.  
  355.     sets.midcast["Shell V"] = set_combine(sets.midcast.EnhancingDuration, {
  356.     })
  357.     sets.midcast["Shell V"].Self = set_combine(sets.midcast["Shell V"], {
  358.         ring2="Sheltered Ring"
  359.     })
  360.  
  361.     sets.midcast["Dispelga"] = set_combine(sets.midcast.EnfeeblingINT, {
  362.         main="Daybreak",
  363.         sub="Ammurapi Shield"
  364.     })
  365.  
  366.     sets.midcast["Absorb-TP"] = set_combine(sets.precast.FC, {
  367.         ammo="Pemphredo Tathlum",
  368.         head="Bunzi's Hat",
  369.         neck="Erra Pendant",
  370.         body="Vitiation Tabard +3",
  371.         hands="Lethargy Gantherots +3",
  372.         ring1="Metamorph Ring +1",
  373.         ring2="Kishar Ring",
  374.         back="Aurist's Cape +1",
  375.         waist="Acuity Belt +1",
  376.         legs="Lethargy Fuseau +3",
  377.         feet="Lethargy Houseaux +3",
  378.     })
  379.  
  380.     sets.midcast["Aspir"] = {
  381.         head="Bunzi's Hat",
  382.         neck="Erra Pendant",
  383.         ear1="Mani Earring",
  384.         ear2="Regal Earring",
  385.         body={ name="Merlinic Jubbah", augments={'Mag. Acc.+30','"Drain" and "Aspir" potency +11','INT+2','"Mag.Atk.Bns."+11',}},
  386.         hands="Lethargy Gantherots +3",
  387.         ring1="Archon Ring",
  388.         ring2="Evanescence Ring",
  389.         back="Aurist's Cape +1",
  390.         waist="Fucho-no-Obi",
  391.         legs="Lethargy Fuseau +3",
  392.         feet={ name="Merlinic Crackows", augments={'Attack+5','"Drain" and "Aspir" potency +10','MND+9','Mag. Acc.+3','"Mag.Atk.Bns."+5',}}
  393.     }
  394.  
  395.     -- Job Abilities
  396.     sets.midcast["Chainspell"] = { body="Vitiation Tabard +3" }
  397.  
  398.     -- Base weaponskill set, use WSD for this since most stuff is single or double hit.
  399.     sets.midcast.Weaponskill = {
  400.         ammo="Oshasha's Treatise",
  401.         head="Nyame Helm",
  402.         neck="Fotia Gorget",
  403.         ear1="Ishvara Earring",
  404.         ear2="Telos Earring",
  405.         body="Nyame Mail",
  406.         hands="Nyame Gauntlets",
  407.         ring1="Epaminondas's Ring",
  408.         ring2="Ilabrat Ring",
  409.         back={ name="Sucellos's Cape", augments={'MND+20','Accuracy+20 Attack+20','MND+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}},
  410.         waist="Fotia Belt",
  411.         legs="Nyame Flanchard",
  412.         feet="Nyame Sollerets"
  413.     }
  414.  
  415.     sets.midcast.Weaponskill.MAB = {
  416.         ammo="Oshasha's Treatise",
  417.         head="Nyame Helm",
  418.         neck="Sibyl Scarf",
  419.         ear1="Malignance Earring",
  420.         ear2="Regal Earring",
  421.         body="Nyame Mail",
  422.         hands="Nyame Gauntlets",
  423.         ring1="Epaminondas's Ring",
  424.         ring2="Freke Ring",
  425.         back={ name="Sucellos's Cape", augments={'MND+20','Accuracy+20 Attack+20','MND+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}},
  426.         waist="Orpheus's Sash",
  427.         legs="Nyame Flanchard",
  428.         feet="Nyame Sollerets"
  429.     }
  430.  
  431.     sets.midcast['Savage Blade'] = set_combine(sets.midcast.Weaponskill, {
  432.         neck="Rep. Plat. Medal",
  433.         ear2="Regal Earring",
  434.         --back="Aurist's Cape +1",
  435.         waist="Sailfi Belt +1",
  436.         ring2="Sroda Ring",
  437.     })
  438.  
  439.     sets.midcast["Chant du Cygne"] = set_combine(sets.midcast.Weaponskill, {
  440.         ear1="Sherida Earring",
  441.     })
  442.  
  443.     sets.midcast["Sanguine Blade"] = set_combine(sets.midcast.Weaponskill.MAB, {
  444.         head="Pixie Hairpin +1",
  445.         neck="Sanctity Necklace",
  446.         ring1="Archon Ring",
  447.         ring2="Metamorph Ring +1",
  448.         waist="Orpheus's Sash",
  449.     })
  450.  
  451.     sets.midcast["Seraph Blade"] = set_combine(sets.midcast.Weaponskill.MAB, {
  452.         ammo="Regal Gem",
  453.         ring1="Metamorph Ring +1",
  454.     })
  455.  
  456.     sets.midcast["Red Lotus Blade"] = set_combine(sets.midcast.Weaponskill.MAB, {
  457.         ammo="Pemphredo Tathlum",
  458.         ear2="Friomisi Earring",
  459.         ring1="Metamorph Ring +1",
  460.     })
  461.  
  462.     sets.midcast['Aeolian Edge'] = set_combine(sets.midcast.Weaponskill.MAB, {
  463.     })
  464.  
  465.     sets.midcast['Black Halo'] = set_combine(sets.midcast.Weaponskill, {
  466.         --neck="Duelist's Torque +2",
  467.         neck="Republican Platinum Medal",
  468.         ear1="Regal Earring",
  469.         ear2="Lethargy Earring +2",
  470.         ring2="Metamorph Ring +1",
  471.         --ring2="Sroda Ring",
  472.         waist="Grunfeld Rope",
  473.         feet="Lethargy Houseaux +3",
  474.     })
  475.  
  476.     -- Low-damage WS sets for making skillchains
  477.     sets.midcast.LowDmg = set_combine(sets.precast.FC, {})
  478.     sets.midcast['Burning Blade'] = set_combine(sets.midcast.LowDmg, {})
  479.     sets.midcast['Flat Blade'] = set_combine(sets.midcast.LowDmg, {})
  480.    
  481.     -- Treasure Hunter set. Don't put anything in here except TH+ gear.
  482.     -- It overwrites slots in other sets when TH toggle is on (Ctrl+F10).
  483.     sets.midcast.TH = {
  484.         head="Volte Cap",
  485.         waist="Chaac Belt",
  486.         hands="Volte Bracers",
  487.         feet="Volte Boots"
  488.     }
  489.  
  490.     -- Aftercast Sets
  491.     sets.aftercast = {
  492.         main="Mpaca's Staff",
  493.         sub="Oneiros Grip",
  494.         ammo="Homiliary",
  495.         head="Vitiation Chapeau +3",
  496.         neck="Loricate Torque +1",
  497.         ear1="Moonshade Earring",
  498.         ear2="Etiolation Earring",
  499.         body="Lethargy Sayon +3",
  500.         hands={ name="Chironic Gloves", augments={'Pet: INT+10','AGI+12','"Refresh"+2','Accuracy+6 Attack+6',}},
  501.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  502.         ring2="Shneddick Ring +1",
  503.         back={ name="Sucellos's Cape", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Mag. Evasion+10','Phys. dmg. taken-10%',}},
  504.         waist="Carrier's Sash",
  505.         legs={ name="Chironic Hose", augments={'AGI+8','Pet: Mag. Acc.+14','"Refresh"+2','Accuracy+16 Attack+16','Mag. Acc.+15 "Mag.Atk.Bns."+15',}},
  506.         --legs="Carmine Cuisses +1",
  507.         feet={ name="Chironic Slippers", augments={'Pet: INT+6','"Snapshot"+1','"Refresh"+2','Accuracy+12 Attack+12','Mag. Acc.+4 "Mag.Atk.Bns."+4',}}
  508.     }
  509.  
  510.     sets.aftercast.Sub50 = set_combine(sets.aftercast, {
  511.         waist="Fucho-no-obi",
  512.     })
  513.  
  514.     -- Perp Down set, used when you have a pet out
  515.     sets.aftercast.Avatar = set_combine(sets.aftercast, {
  516.         waist="Avatar Belt",
  517.     })
  518.  
  519.     sets.aftercast.DT = set_combine(sets.aftercast, {
  520.         main="Bolelabunga",
  521.         --sub="Genmei Shield",
  522.         sub="Diamond Aspis",
  523.         ammo="Staunch Tathlum +1",
  524.         --body="Adamantite Armor",
  525.         hands="Nyame Gauntlets",
  526.         legs="Nyame Flanchard",
  527.         feet="Nyame Sollerets"
  528.     })
  529.    
  530.     sets.aftercast.Kite = set_combine(sets.aftercast.DT, {
  531.         --legs="Carmine Cuisses +1",
  532.     })
  533.    
  534.     sets.aftercast.MDB = set_combine(sets.aftercast.DT, {
  535.         head="Vitiation Chapeau +3",
  536.         body="Adamantite Armor",
  537.         hands="Lethargy Gantherots +3",
  538.         waist="Flume Belt +1",
  539.         legs="Lethargy Fuseau +3",
  540.         feet="Lethargy Houseaux +3",
  541.     })
  542.    
  543.     sets.aftercast.Regain = set_combine(sets.aftercast.DT, {
  544.         head="Null Masque",
  545.         ring1="Roller's Ring",
  546.     })
  547.  
  548.     -- Used for CureObjective mode. If you plan to use that mode, ensure this set has 500HP less than "midcast.CureObjective".
  549.     sets.aftercast.CureObjective = set_combine(sets.aftercast.Refresh, {
  550.         ring1="Metamorph Ring +1",
  551.     })
  552.  
  553.     -- Aftercast Engaged sets
  554.     sets.aftercast.Engaged = set_combine(sets.aftercast, {
  555.     })
  556.  
  557.     sets.aftercast.Engaged.TP = {
  558.         ammo="Coiste Bodhar",
  559.         head="Malignance Chapeau",
  560.         neck="Anu Torque",
  561.         ear1="Telos Earring",
  562.         ear2="Sherida Earring",
  563.         body="Malignance Tabard",
  564.         hands="Malignance Gloves",
  565.         ring1={name="Chirich Ring +1", bag="wardrobe2"},
  566.         ring2={name="Chirich Ring +1", bag="wardrobe4"},
  567.         back="Null Shawl",
  568.         waist="Sailfi Belt +1",
  569.         legs={ name="Chironic Hose", augments={'Rng.Atk.+28','Accuracy+23','"Store TP"+6','Accuracy+17 Attack+17',}},
  570.         feet="Malignance Boots",
  571.         --feet={ name="Chironic Slippers", augments={'"Dual Wield"+4','Rng.Acc.+21 Rng.Atk.+21','Quadruple Attack +3','Accuracy+17 Attack+17',}}
  572.     }
  573.  
  574.     sets.aftercast.Engaged.Hybrid = set_combine(sets.aftercast.Engaged.TP, {
  575.         back={ name="Sucellos's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%',}},
  576.         legs="Nyame Flanchard",
  577.     })
  578.    
  579.     sets.aftercast.Engaged.DT = set_combine(sets.aftercast.DT, {
  580.     })
  581.  
  582.     sets.aftercast.Engaged.KC = set_combine(sets.aftercast.Engaged.TP, {
  583.         ammo="Aurgelmir Orb +1",
  584.         ear2="Crepuscular Earring",
  585.         back={ name="Sucellos's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%',}},
  586.     })
  587.  
  588.     sets.aftercast.Engaged.Enspell = set_combine(sets.aftercast.Engaged.TP, {
  589.         ear1="Cessance Earring",
  590.         hands="Ayanmo Manopolas +2",
  591.         waist="Orpheus's Sash",
  592.     })
  593.  
  594.     sets.aftercast.Engaged.HybridEnspell = set_combine(sets.aftercast.Engaged.Hybrid, {
  595.         ear1="Cessance Earring",
  596.         neck="Loricate Torque +1",
  597.         hands="Ayanmo Manopolas +2",
  598.         waist="Orpheus's Sash",
  599.     })
  600.  
  601.     -- For Lv1 enspell weapon strategy to feed 0 TP. Drop Store TP and pick up multi-attack and magic accuracy.
  602.     sets.aftercast.Engaged.Odin = set_combine(sets.aftercast.Engaged.Enspell, {
  603.         ammo="Ghastly Tathlum +1",
  604.         head="Nyame Helm",
  605.         neck="Null Loop",
  606.         ear1="Eabani Earring",
  607.         ear2="Suppanomimi",
  608.         body="Nyame Mail",
  609.         ring1={name="Stikini Ring +1", bag="wardrobe2"},
  610.         ring2="Metamorph Ring +1",
  611.         legs="Nyame Flanchard",
  612.         --legs={ name="Chironic Hose", augments={'Mag. Acc.+23 "Mag.Atk.Bns."+23','Haste+1','MND+10','Mag. Acc.+7','"Mag.Atk.Bns."+11',}},
  613.         feet="Nyame Sollerets",
  614.     })
  615.  
  616.     -- ===================================================================================================================
  617.     --      End of Sets
  618.     -- ===================================================================================================================
  619.  
  620.     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"}
  621.     EnhancingSpells = S{"Temper","Temper II","Enfire","Enfire II","Enstone","Enstone II","Enwater","Enwater II","Enaero","Enaero II","Enblizzard","Enblizzard II","Enthunder","Enthunder II"}
  622.     EnfeeblingMND = S{"Addle", "Addle II", "Distract", "Distract II", "Distract III", "Frazzle", "Frazzle II", "Frazzle III", "Paralyze", "Paralyze II", "Silence", "Slow", "Slow II"}
  623.     EnfeeblingPotency = S{"Gravity","Gravity II"}
  624.     EnfeeblingDuration = S{"Sleep","Sleepga","Sleep II","Sleepga II","Bind","Silence","Break"}
  625.     BarElement = S{"Barfira","Barstonra","Barwatera","Baraera","Barblizzara","Barthundra","Barfire","Barstone","Barwater","Baraero","Barblizzard","Barthunder"}
  626.  
  627.     send_command('input /macro book 20;wait .1;input /macro set 1;wait 3;input /lockstyleset '..StartLockStyle)
  628.     send_command('console_echo "TP Mode: ['..TPMode..'] ~ Idle Mode: ['..IdleMode..']"')
  629. end
  630.  
  631. function precast(spell)
  632.     --if midaction() then
  633.         --cancel_spell()
  634.         --return
  635.     --end
  636.     if spell.type=="Item" then
  637.         return
  638.     end
  639.     -- Spell fast cast
  640.     if spell.action_type=="Magic" and not buffactive["Chainspell"] then
  641.         if sets.precast[spell.english] then
  642.             equip(sets.precast[spell.english])
  643.         else
  644.             equip(sets.precast.FC)
  645.         end
  646.     end
  647. end
  648.  
  649. function midcast(spell)
  650.     if spell.type=="Item" then
  651.         return
  652.     end
  653.     if spell.type=="WeaponSkill" and LowDmg then
  654.         equip(sets.midcast.LowDmg)
  655.     -- Check for a specific set
  656.     elseif sets.midcast[spell.english] then
  657.         equipSet = sets.midcast[spell.english]
  658.         if spell.target.type=="SELF" and equipSet.Self then
  659.             equipSet = equipSet.Self
  660.         end
  661.         if OccultMode and equipSet.Occult then
  662.             equipSet = equipSet.Occult
  663.         end
  664.         equip(equipSet)
  665.     -- Specific Spells
  666.     elseif string.find(spell.name,"Cure") or string.find(spell.name,"Cura") then
  667.         if CureObjective then
  668.             equip(sets.midcast.CureObjective)
  669.         elseif spell.element==world.weather_element or buffactive['Aurorastorm'] then
  670.             equip(sets.midcast.Cure.Weather)
  671.         else
  672.             equip(sets.midcast.Cure)
  673.         end
  674.     -- Spells by Type/Skill
  675.     elseif spell.skill=="Enfeebling Magic" then
  676.         equipSet = sets.midcast.Enfeebling
  677.         if EnfeeblingPotency:contains(spell.name) then
  678.             equipSet = sets.midcast.EnfeeblingPotency
  679.         elseif EnfeeblingDuration:contains(spell.name) then
  680.             equipSet = sets.midcast.EnfeeblingDuration
  681.         elseif EnfeeblingMND:contains(spell.name) then
  682.             equipSet = sets.midcast.EnfeeblingMND
  683.         elseif spell.type=="BlackMagic" then
  684.             equipSet = sets.midcast.EnfeeblingINT
  685.         end
  686.         equip(equipSet)
  687.         if buffactive["Saboteur"] and not EnfeeblingDuration:contains(spell.name) then
  688.             equip(sets.midcast.Enfeebling.Saboteur)
  689.         end
  690.     elseif spell.skill=="Enhancing Magic" then
  691.         equipSet = sets.midcast.EnhancingDuration
  692.         if EnhancingSpells:contains(spell.name) then
  693.             equipSet = sets.midcast.Enhancing
  694.         elseif string.find(spell.name,"Regen") then
  695.             equipSet = sets.midcast.Regen
  696.         elseif string.find(spell.name,"Refresh") then
  697.             equipSet = sets.midcast.Refresh
  698.         elseif string.sub(spell.name,1,3)=="Bar" then
  699.             if BarElement:contains(spell.name) then
  700.                 equipSet = sets.midcast.BarElement
  701.             else
  702.                 equipSet = sets.midcast.BarAilment
  703.             end
  704.         elseif string.find(spell.name,"Phalanx") then
  705.             equipSet = sets.midcast.Phalanx
  706.         end
  707.         if spell.target.type=="SELF" and equipSet.Self then
  708.             equipSet = equipSet.Self
  709.         end
  710.         equip(equipSet)
  711.     elseif spell.skill=='Elemental Magic' then
  712.         equipSet = sets.midcast.Elemental
  713.         if OccultMode and equipSet.Occult then
  714.             equipSet = equipSet.Occult
  715.         end
  716.         if MagicBurst and equipSet.MagicBurst then
  717.             equipSet = equipSet.MagicBurst
  718.         end
  719.         if (spell.element == world.weather_element or spell.element == world.day_element) and equipSet.Weather then
  720.             equipSet = equipSet.Weather
  721.         end
  722.         equip(equipSet)
  723.     elseif spell.type=="WeaponSkill" then
  724.         equip(sets.midcast.Weaponskill)
  725.     else
  726.         idle()
  727.     end
  728.     -- Treasure Hunter
  729.     if THSpells:contains(spell.name) then
  730.         equip(sets.midcast.TH)
  731.     end
  732.     -- Auto-cancel existing buffs
  733.     if spell.name=="Stoneskin" and buffactive["Stoneskin"] then
  734.         windower.send_command('cancel 37;')
  735.     elseif spell.name=="Sneak" and buffactive["Sneak"] and spell.target.type=="SELF" then
  736.         windower.send_command('cancel 71;')
  737.     elseif spell.name=="Utsusemi: Ichi" and buffactive["Copy Image"] then
  738.         windower.send_command('wait 1;cancel 66;')
  739.     end
  740. end
  741.  
  742. function aftercast(spell)
  743.     if spell.type=="Item" then
  744.         return
  745.     end
  746.     idle()
  747. end
  748.  
  749. function status_change(new,old)
  750.     idle()
  751. end
  752.  
  753. function buff_change(name,gain)
  754.     -- Auto-cancel Stoneskin if slept with Sublimation active.
  755.     if name=="sleep" and gain and buffactive["Sublimation: Activated"] and buffactive["Stoneskin"] then
  756.         windower.send_command('cancel 37;')
  757.     end
  758. end
  759.  
  760. function self_command(command)
  761.     is_valid = command:lower()=="idle"
  762.     announceModes = false
  763.     skip_idle = false
  764.  
  765.     if command:lower()=="toggletp" then
  766.         is_valid = true
  767.         if TPMode=="TP" then
  768.             TPMode = "Hybrid"
  769.         elseif TPMode=="Hybrid" then
  770.             TPMode = "HybridEnspell"
  771.         else
  772.             TPMode = "TP"
  773.         end
  774.         announceModes = true
  775.     elseif command:lower()=="toggleidle" then
  776.         is_valid = true
  777.         if IdleMode=="Regain" then
  778.             IdleMode = "Kite"
  779.         elseif IdleMode=="Kite" then
  780.             IdleMode = "Refresh"
  781.         else
  782.             IdleMode = "Regain"
  783.         end
  784.         announceModes = true
  785.     -- "gs c TP <mode>" to change TP mode
  786.     elseif string.sub(command:lower(),1,2)=="tp" and string.len(command) > 3 then
  787.         tpCommand = string.sub(command,4,string.len(command))
  788.         for _, v in ipairs(TPModeCommands) do
  789.             if tpCommand:lower()==v:lower() then
  790.                 is_valid = true
  791.                 TPMode = v
  792.                 announceModes = true
  793.             end
  794.         end
  795.     -- "gs c Idle <mode>" to change Idle mode
  796.     elseif string.sub(command:lower(),1,4)=="idle" and string.len(command) > 5 then
  797.         idleCommand = string.sub(command,6,string.len(command))
  798.         for _, v in ipairs(IdleModeCommands) do
  799.             if idleCommand:lower()==v:lower() then
  800.                 is_valid = true
  801.                 IdleMode = v
  802.                 announceModes = true
  803.             end
  804.         end
  805.     elseif command:lower()=="togglemeva" then
  806.         if IdleMode=="Kite" then
  807.             IdleMode = "Refresh"
  808.         elseif IdleMode=="Refresh" then
  809.             IdleMode = "DT"
  810.         else
  811.             IdleMode = "Kite"
  812.         end
  813.         is_valid = true
  814.         send_command('console_echo "Idle Mode: '..IdleMode..'"')
  815.     elseif command:lower()=="meleemode" then
  816.         if MeleeMode then
  817.             enable("main","sub","range","ammo")
  818.             MeleeMode = false
  819.             send_command('console_echo "Melee Mode: false"')
  820.         else
  821.             disable("main","sub")
  822.             MeleeMode = true
  823.             send_command('console_echo "Melee Mode: true"')
  824.         end
  825.         is_valid = true
  826.     elseif command:lower()=="th" then
  827.         TreasureHunter = TreasureHunter==false
  828.         is_valid = true
  829.         send_command('console_echo "Treasure Hunter Mode: '..tostring(TreasureHunter)..'"')
  830.     elseif command:lower()=="mb" then
  831.         MagicBurst = MagicBurst==false
  832.         is_valid = true
  833.         send_command('console_echo "Magic Burst Mode: '..tostring(MagicBurst)..'"')
  834.     elseif command:lower()=="lowdmg" then
  835.         LowDmg = LowDmg==false
  836.         is_valid = true
  837.         send_command('console_echo "Low Dmg Mode: '..tostring(LowDmg)..'"')
  838.     elseif command:lower()=="cureobjective" then
  839.         CureObjective = CureObjective==false
  840.         is_valid = true
  841.         send_command('console_echo "Cure Objective Mode: '..tostring(CureObjective)..'"')
  842.     elseif command:lower()=="occult" then
  843.         OccultMode = OccultMode==false
  844.         is_valid = true
  845.         send_command('console_echo "Occult Acumen Mode: '..tostring(OccultMode)..'"')
  846.     -- Weapon commands
  847.     elseif command:lower()=="naeg" then
  848.         is_valid = true
  849.         enable("main","sub","range","ammo")
  850.         equip({main="Naegling",sub="Gleti's Knife"})
  851.         if MeleeMode then
  852.             disable("main","sub")
  853.         end
  854.     elseif command:lower()=="naegullr" then
  855.         is_valid = true
  856.         enable("main","sub","range","ammo")
  857.         equip({main="Naegling",sub="Ammurapi Shield",range="Ullr",ammo=empty})
  858.         if MeleeMode then
  859.             disable("main","sub","range","ammo")
  860.         end
  861.     elseif command:lower()=="tauret" then
  862.         is_valid = true
  863.         enable("main","sub","range","ammo")
  864.         equip({main="Tauret",sub="Bunzi's Rod"})
  865.         if MeleeMode then
  866.             disable("main","sub")
  867.         end
  868.     elseif command:lower()=="fermion" then
  869.         is_valid = true
  870.         enable("main","sub","range","ammo")
  871.         equip({main="Fermion Sword",sub="Kraken Club"})
  872.         if MeleeMode then
  873.             disable("main","sub")
  874.         end
  875.     elseif command:lower()=="aern" then
  876.         is_valid = true
  877.         enable("main","sub","range","ammo")
  878.         equip({main="Aern Dagger",sub="Kraken Club"})
  879.         if MeleeMode then
  880.             disable("main","sub")
  881.         end
  882.     elseif command:lower()=="max" then
  883.         is_valid = true
  884.         enable("main","sub","range","ammo")
  885.         equip({main="Maxentius",sub="Ammurapi Shield"})
  886.         if MeleeMode then
  887.             disable("main","sub")
  888.         end
  889.     elseif command:lower()=="crocea" then
  890.         is_valid = true
  891.         enable("main","sub","range","ammo")
  892.         equip({main="Crocea Mors",sub="Ammurapi Shield"})
  893.         if MeleeMode then
  894.             disable("main","sub")
  895.         end
  896.     elseif command:lower()=="lockeffect" then
  897.         LockEffect = LockEffect==false
  898.         is_valid = true
  899.         send_command('console_echo "Lock Enfeebling Effect Gear: '..tostring(LockEffect)..'"')
  900.         if LockEffect then
  901.             enable("head","neck","ear1","ear2","body","hands","ring1","ring2","back","waist","legs","feet")
  902.             equip(sets.midcast.EnfeeblingPotency, sets.midcast.Enfeebling.Saboteur)
  903.             disable("main","sub","range","ammo","head","neck","ear1","ear2","body","hands","ring1","ring2","back","waist","legs","feet")
  904.         else
  905.             enable("range","ammo","head","neck","ear1","ear2","body","hands","ring1","ring2","back","waist","legs","feet")
  906.             if not MeleeMode then
  907.                 enable("main","sub")
  908.             end
  909.         end
  910.     end
  911.  
  912.     if is_valid then
  913.         if announceModes then
  914.             send_command('console_echo "TP Mode: ['..TPMode..'] ~ Idle Mode: ['..IdleMode..']"')
  915.         end
  916.         if not midaction() and not pet_midaction() and not skip_idle then
  917.             idle()
  918.         end
  919.     else
  920.         sanitized = command:gsub("\"", "")
  921.         send_command('console_echo "Invalid self_command: '..sanitized..'"')
  922.     end
  923. end
  924.  
  925. function idle()
  926.     equipSet = sets.aftercast
  927.     if equipSet[player.status] then
  928.         equipSet = equipSet[player.status]
  929.     end
  930.     if equipSet[TPMode] and player.status=="Engaged" then
  931.         equipSet = equipSet[TPMode]
  932.     elseif equipSet[IdleMode] then
  933.         equipSet = equipSet[IdleMode]
  934.     end
  935.     if pet.isvalid and equipSet["Avatar"] then
  936.         equipSet = equipSet["Avatar"]
  937.     end
  938.     if player.mpp < 50 and equipSet["LowMP"] then
  939.         equipSet = equipSet["LowMP"]
  940.     end
  941.     equip(equipSet)
  942.     -- CureObjective Mode takes precedence over everything else
  943.     if CureObjective then
  944.         equip(sets.aftercast.CureObjective)
  945.     end
  946. end
Add Comment
Please, Sign In to add comment