Pergatory

Pergatory's RDM Gearswap

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