Pergatory

Pergatory's RDM Gearswap

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