Hello, I've been looking around on forums and cannot find anything similar to this. My game crashed shortly after today's update. I was able to play for a while with no issues. However, after I tried to get back into the game the windower.exe file was corrupted so I needed to reinstall. After my reinstall and when im using gearswap with the same .lua files as before I am unable to use certain WS "Chant du Cygne" or "Requiescat". I didn't make any modifications to the lua file so I'm sure thats not the problem. If I unload gearswap I can use the WS so its quite frustating. Has anyone experienced anything similar to this or know the solution offhand. I've attached my lua file in case anyone is interested in or needs it to help troubleshoot. Thank you. Please let me know if you need further information.
--[[*************************************************************************** Change Log: 08/23/2015 - Changed naming magic haste capped and uncapped for DW 07/21/2015 - Removed Realmrazer gear set 07/03/2015 - Added June spells to spall map - Updated AzureSet spells 03/09/2015 - Adjusted how attack speed gear is changed based on accuracy needs, this should allow you to stay as close to delay cap as possible no matter accuracy level and marches - Renamed DelayCap to "Magic Haste Uncapped" and "Magic Haste Uncapped" to better clarify what they are - Lowered the TP threshold from 749 to 349 in the 'tp change' to allow for quicker event actions after engaging target 03/07/2015 - Adjusted the relaxed_play_mode() logic 03/02/2015 - Removed Waltz gear and rule to equip it 03/01/2015 - Adjusted Normal and DelayCap set gear - Simplified the Augments listed to just one, used the one that was the main defining augment for the item 02/28/2015 - Moved Final Sting to AGI and Self Destruct to Nuke - Removed MAXHP and combined the additional HP+ gear used for White Wind to HealingMAXHP - Added NukeLightAff and Moved: Diffusion Ray, Rail Cannon, Retinal Glare to use Weather. Ring due to the +10 Light Affinity when nuking 02/20/2015 - Convert all instances of buffactive to check_buffs() - Convert all instances of cancel_buff number ID to proper name - With the aid of Arcon moved recast timer logic to three "do" statements to handle both spells and job abilities using spell name instead of the recast ID 02/01/2015 - Changed sub sword to Usonmunku 01/17/2015 - Removed WARSERK help text, refined commenting - Refined how recast time check is handled, added new function to allow multiple checks at once 01/05/2015 - Changed spell.prefix == '/jobability' and spell.prefix == '/weaponskill' to: sets.precast.JA[spell.name] sets.precast.WS[spell.name] 01/03/2015 - New function: relaxed_play_mode(), this acts like a miniature bot allowing job ability, spell casting, and weaponskill use based on rules set the two new register_event: tp change and time change go along with this new function - Added new varible toggle: auto_action, used to turn on and off the call function for relaxed_play_mode() - Added two new AutoExec style events that work with new relaxed_play_mode() function: tp change: will call on any tp change above 749 tp time change: Moved Hasso activation to here, this will reapply while still engaged during long fights since tp change only parses when you gain or loss tp a time check was added if sitting at 3000 tp 12/31/2014 - Changed check_buff to check_buffs - Moddified the spell set check introduced in 12/11/2014 update to work as a function check: check_set_spells 12/28/2014 - Ygnas's Resolve +1 when in Reives: Added gear set for item and two rules to check of it locations of rules are gear_sets() idle check and during weaponskill set check - Added Weather. Ring to appropriate sets 12/11/2014 - Added AzureSets spellsets to comment section to give an idea of what sets on could use - Dual Wield IV check added, if all spells are set along with Haste II and one March then will use Windbuffet Belt +1 12/09/2014 - Added spells to map: Atra. Libations, Molting Plumage, Nectarous Deluge, Sweeping Gouge - Added set: SkillDarkAff for the spell Atra. Libations - Adjusted set names: MagicAcc is now MagicACC - Removed AutoExe style event that was added 11/07/2014, kept the gear_change_ok check. 11/07/2014 - Added SphereRefresh set and moved Mekosu. Harness to that set, Idle refresh body is now Hagondes Coat +1 - Added party count check for the set mentioned above - Added new AutoExe style event: When 100% MP is reached while idle gear will change from refresh to more DT- pieces - Added new gear_change_ok, this is used in new event to allow gear to change but only if no action is taking place; this also allows for no gear changing if you are in the middle of casting but your status changes This usually happens when casting but the enemy dies forcing a gear change - Changed else to elseif in gear_modes() when checking Idle status, Idle gear shouldn't try and change when Dead/Zoning - Changed variable naming from PascalCase to snake_case to reflect the internal naming conversions NOTE: Your ingame macro toggles for the various modes will need renaming 11/04/2014 - Refined most spells that use wildcard expression to startswith 11/02/2014 - Refined count_msg_mecisto 10/25/2014 - Removed pretarget() and re-added slot_disabling() - Added a counter to display a reminder message that back slot is disabled when using Mecistopins mantle 10/24/2014 - Moved comments into their own functions to facilitate better readability and cleaner look when folding code - Moved all maps to new function called get_maps() 10/23/2014 - Adjusted Berserk/Warcry automation by adding a check_buff() function and spell map WARSERK comment tag added to serve as a link between the sections 10/22/2014 - Adopted 80 character width for right margin and began reworking all areas <?xml version="1.1" ?> <settings> <global> <language>English</language> <spellsets> <aoe> <slot01>barbed crescent</slot01> <slot02>benthic typhoon</slot02> <slot03>delta thrust</slot03> <slot04>empty thrash</slot04> <slot05>glutinous dart</slot05> <slot06>heavy strike</slot06> <slot07>quad. continuum</slot07> <slot08>sudden lunge</slot08> <slot09>whirl of rage</slot09> <slot10>blazing bound</slot10> <slot11>fantod</slot11> <slot12>animating wail</slot12> <slot13>erratic flutter</slot13> <slot14>occultation</slot14> <slot15>subduction</slot15> <slot16>white wind</slot16> <slot17>cocoon</slot17> <slot18>charged whisker</slot18> <slot19>winds of promy.</slot19> <slot20>mortal ray</slot20> </aoe> <default> </default> <dw3> <slot01>barbed crescent</slot01> <slot02>delta thrust</slot02> <slot03>empty thrash</slot03> <slot04>heavy strike</slot04> <slot05>thrashing assault</slot05> <slot06>fantod</slot06> <slot07>sudden lunge</slot07> <slot08>sickle slash</slot08> <slot09>tail slap</slot09> <slot10>diffusion ray</slot10> <slot11>cocoon</slot11> <slot12>erratic flutter</slot12> <slot13>nat. meditation</slot13> <slot14>occultation</slot14> <slot15>sinker drill</slot15> <slot16>winds of promy.</slot16> <slot17>white wind</slot17> <slot18>paralyzing triad</slot18> <slot19>sweeping gouge</slot19> </dw3> <nin> <slot01>barrier tusk</slot01> <slot02>empty thrash</slot02> <slot03>heavy strike</slot03> <slot04>thrashing assault</slot04> <slot05>fantod</slot05> <slot06>sudden lunge</slot06> <slot07>sickle slash</slot07> <slot08>tail slap</slot08> <slot09>diffusion ray</slot09> <slot10>cocoon</slot10> <slot11>erratic flutter</slot11> <slot12>nat. meditation</slot12> <slot13>occultation</slot13> <slot14>sinker drill</slot14> <slot15>winds of promy.</slot15> <slot16>white wind</slot16> <slot17>paralyzing triad</slot17> <slot18>sweeping gouge</slot18> </nin> <nuke> <slot01>barbed crescent</slot01> <slot02>delta thrust</slot02> <slot03>actinic burst</slot03> <slot04>winds of promy.</slot04> <slot05>cocoon</slot05> <slot06>dream flower</slot06> <slot07>cursed sphere</slot07> <slot08>magic hammer</slot08> <slot09>memento mori</slot09> <slot10>subduction</slot10> <slot11>spectral floe</slot11> <slot12>anvil lightning</slot12> <slot13>entomb</slot13> <slot14>tenebral crush</slot14> <slot15>occultation</slot15> <slot16>rail cannon</slot16> </nuke> <vw1> <slot01>Firespit</slot01> <slot02>Heat Breath</slot02> <slot03>Thermal Pulse</slot03> <slot04>Blastbomb</slot04> <slot05>Infrasonics</slot05> <slot06>Frost Breath</slot06> <slot07>Ice Break</slot07> <slot08>Cold Wave</slot08> <slot09>Sandspin</slot09> <slot10>Magnetite Cloud</slot10> <slot11>Cimicine Discharge</slot11> <slot12>Bad Breath</slot12> <slot13>Acrid Stream</slot13> <slot14>Maelstrom</slot14> <slot15>Corrosive Ooze</slot15> <slot16>Cursed Sphere</slot16> <slot17>Awful Eye</slot17> </vw1> <vw2> <slot01>Hecatomb Wave</slot01> <slot02>Mysterious Light</slot02> <slot03>Leafstorm</slot03> <slot04>Reaving Wind</slot04> <slot05>Temporal Shift</slot05> <slot06>Mind Blast</slot06> <slot07>Blitzstrahl</slot07> <slot08>Charged Whisker</slot08> <slot09>Blank Gaze</slot09> <slot10>Radiant Breath</slot10> <slot11>Light of Penance</slot11> <slot12>Actinic Burst</slot12> <slot13>Death Ray</slot13> <slot14>Eyes On Me</slot14> <slot15>Sandspray</slot15> </vw2> </spellsets> </global> </settings> Recommended in game macros to use: Macro Syntax States -----------------------|---------------------- /con gs c auto_action | Off / On /con gs c cure | Dynamic Cure macro - Will use currently set spell /con gs c dt_mode | None / Active /con gs c tp_mode | Normal / Accuracy Mid / Accuracy High /con gs c weapon_combo | Almace / Medeina TIMERS PLUGIN: File includes custom timers: Type Location ------------------|-------------------------- Mythic Aftermath | buff_change / aftercast Dream Flower | aftercast Transcendency | buff_change Weakness | buff_change F10 is bound as a weaponskill macro, I use a controller and remap the R1 button to F10 for fast weaponskills button to F10 for fast weaponskills *****************************************************************************]] function get_sets() -- Spell maps are moved to their own function to assit in easier navigation get_maps() windower.send_command('input /macro book 1; wait .1; input /macro set 8') windower.send_command('input /echo [ Job Changed to BLU ]') windower.send_command('bind f10 gs c tryweaponskill') windower.send_command('input /blockhelp on') windower.register_event('tp change', function(new, old) if new > 349 and auto_action == 'On' and player.status == 'Engaged' then relaxed_play_mode() end end) windower.register_event('time change', function(time) if player.tp == 3000 and auto_action == 'On' and player.status == 'Engaged' then relaxed_play_mode() end end) -- Start defining actual gear sets to be used below -- -- WEAPON TYPES -- sets.weapon = {} sets.weapon.Almace = { main="Almace", sub="Colada"} sets.weapon.Medeina = { main="Medeina Kilij", sub="Nibiru Cudgel"} -- MISCELLANEOUS SETS -- sets.misc = {} sets.misc.DT = {} sets.misc.DT.None = {} sets.misc.DT.Active = { head="Iuitl Headgear +1", neck="Loricate Torque +1", left_ear="Etiolation Earring", right_ear="Static Earring", body="Emet Harness +1", hands={ name="Hagondes Cuffs +1", augments={'Phys. dmg. taken -4%','Magic dmg. taken -4%','"Mag.Atk.Bns."+25',}}, lring="Dark Ring", rring="Defending Ring", back="Xucau Mantle", waist="Flume Belt", legs={ name="Herculean Trousers", augments={'Accuracy+23','Damage taken-3%','DEX+10','Attack+6',}}, feet={ name="Herculean Boots", augments={'Accuracy+15','Magic dmg. taken -5%','STR+1','Attack+14',}},} sets.misc['Burst Affinity'] = { feet="Hashi. Basmak +1"} sets.misc['Chain Affinity'] = { feet="Assim. Charuqs +1"} sets.misc.Efflux = { head="Hashishin Kavuk +1", legs="Hashishin Tayt +1"} sets.misc.Diffusion = { feet="Luhlaza Charuqs +1"} sets.misc.Movement = { legs="Carmine Cuisses"} sets.misc.Learn = { ammo="Mavi Tathlum", head="Luh. Keffiyeh +1", body="Assim. Jubbah +1", hands="Assim. Bazu. +1", back="Cornflower Cape", legs="Hashishin Tayt +1", feet="Luhlaza Charuqs +1"} sets.misc.Cape_Obi = { back="Twilight Cape", waist="Hachirin-no-Obi"} sets.misc.Reive = { neck="Ygnas's Resolve +1"} -- PRECAST SETS -- sets.precast = {} sets.precast.JA = {} sets.precast.JA['Azure Lore'] = { hands="Luh. Bazubands +1"} sets.precast.WS = {} sets.precast.WS['Chant du Cygne'] = { ammo="Jukukik Feather", head="Adhemar Bonnet", neck="Fotia Gorget", ear1="Moonshade Earring", ear2="Brutal Earring", body={ name="Herculean Vest", augments={'Crit. hit damage +4%','DEX+14','Accuracy+12',}}, hands="Adhemar Wristbands", ring1="Begrudging Ring", ring2="Epona's Ring", back="Kayapa Cape", waist="Fotia Belt", legs="Samnuha Tights", feet="Herculean Boots", augments={'Attack+20','Weapon skill damage +3%','DEX+7',}} sets.precast.WS['Expiacion'] = { ammo="Floestone", head="Adhemar Bonnet", neck="Fotia Gorget", lear="Brutal Earring", rear="Moonshade Earring", body="Adhemar Jacket", hands="Adhemar Wristbands", lring="Ifrit Ring +1", rring="Epona's Ring", back="Lupine Cape", waist="Fotia Belt", legs="Samnuha Tights", feet={name="Taeon Boots", augments={'"Triple Atk."+2'}}} sets.precast.WS['Requiescat'] = { ammo="Quartz Tathlum +1", head="Adhemar Bonnet", neck="Fotia Gorget", lear="Brutal Earring", rear="Moonshade Earring", body={name="Taeon Tabard", augments={'"Triple Atk."+2'}}, hands="Adhemar Wristbands", lring="Levia. Ring +1", rring="Epona's Ring", back="Lupine Cape", waist="Fotia Belt", legs={name="Taeon Tights", augments={'"Triple Atk."+2'}}, feet="Luhlaza Charuqs +1"} sets.precast.WS['Sanguine Blade'] = { ammo="Pemphredo Tathlum", head="Pixie Hairpin +1", neck="Sanctity Necklace", lear="Friomisi Earring", rear="Hecate's Earring", body="Amalric Doublet", hands="Amalric Gages", lring="Archon Ring", rring="Shiva Ring +1", back="Cornflower Cape", waist="Yamabuki-no-Obi", legs="Hagondes Pants +1", feet="Amalric Nails"} sets.precast.WS['Savage Blade'] = { ammo="Jukukik Feather", head="Adhemar Bonnet", neck="Fotia Gorget", ear1="Moonshade Earring", ear2="Brutal Earring", body={ name="Herculean Vest", augments={'Crit. hit damage +4%','DEX+14','Accuracy+12',}}, hands="Adhemar Wristbands", ring1="Ifrit Ring", ring2="Epona's Ring", back="Kayapa Cape", waist="Fotia Belt", legs="Samnuha Tights", feet="Herculean Boots", augments={'Attack+20','Weapon skill damage +3%','DEX+7',}} sets.precast.FastCast = { ammo="Sapience Orb", head={ name="Herculean Helm", augments={'"Fast Cast"+4','INT+9','Accuracy+10 Attack+10','Mag. Acc.+3 "Mag.Atk.Bns."+3',}}, body="Dread Jupon", hands={ name="Telchine Gloves", augments={'"Fast Cast"+5',}}, legs={ name="Psycloth Lappas", augments={'MP+80','Mag. Acc.+15','"Fast Cast"+7',}}, feet={ name="Herculean Boots", augments={'Accuracy+14 Attack+14','"Triple Atk."+3','DEX+5','Attack+4',}}, neck="Orunmila's Torque", waist="Witful Belt", left_ear="Loquac. Earring", right_ear="Etiolation Earring", left_ring="Defending Ring", right_ring="Prolix Ring", back="Swith Cape +1",} sets.precast.FastCast.BlueMagic = set_combine(sets.precast.FastCast, { body="Hashishin Mintan"}) -- MIDCAST SETS -- sets.midcast = {} sets.midcast.BlueMagic = {} sets.midcast.BlueMagic.Skill = { ammo="Mavi Tathlum", head="Luh. Keffiyeh +1", neck="Incanter's Torque", body="Assim. Jubbah +1", hands="Rawhide Gloves", back="Cornflower Cape", legs="Hashishin Tayt +1", feet="Luhlaza Charuqs +1"} sets.midcast.BlueMagic.SkillDarkAff = set_combine(sets.midcast.BlueMagic.Skill, { head="Pixie Hairpin +1", lring="Archon Ring"}) sets.midcast.BlueMagic.STR = set_combine(sets.midcast.BlueMagic.Skill, { ammo="Floestone", head="Whirlpool Mask", neck="Caro Necklace", lear="Vulcan's Pearl", rear="Vulcan's Pearl", hands="Adhemar Wristbands", lring="Ifrit Ring +1", rring="Ifrit Ring +1", waist="Prosilio Belt +1", legs="Samnuha Tights", feet={name="Herculean Boots", augments={'Accuracy+17','"Triple Atk."+3','DEX+5','Attack+6',}}}) sets.midcast.BlueMagic.DEX = set_combine(sets.midcast.BlueMagic.STR, { }) sets.midcast.BlueMagic.VIT = set_combine(sets.midcast.BlueMagic.STR, { }) sets.midcast.BlueMagic.AGI = set_combine(sets.midcast.BlueMagic.STR, { }) sets.midcast.BlueMagic.MND = set_combine(sets.midcast.BlueMagic.STR, { ammo="Quartz Tathlum +1", neck="Phalaina Locket", hands="Luh. Bazubands +1", rring="Levia. Ring +1", legs="Hashishin Tayt +1"}) sets.midcast.BlueMagic.INT = set_combine(sets.midcast.BlueMagic.STR, { }) sets.midcast.BlueMagic.CHR = set_combine(sets.midcast.BlueMagic.STR, { }) sets.midcast.BlueMagic.PhysACC = set_combine(sets.midcast.BlueMagic.STR, { ammo="Hasty Pinion +1", lear="Zennaroi Earring", body="Mekosu. Harness"}) sets.midcast.BlueMagic.MagicACC = set_combine(sets.midcast.BlueMagic.Skill, { ammo="Ghastly Tathlum +1", head="Jhakri Coronal +1", body="Jhakri Robe +1", hands={ name="Rawhide Gloves", augments={'Mag. Acc.+15','INT+7','MND+7',}}, legs="Jhakri Slops +1", feet="Jhakri Pigaches +1", neck="Sanctity Necklace", waist="Rumination Sash", left_ear="Gwati Earring", right_ear="Hermetic Earring", left_ring="Vertigo Ring", right_ring="Adoulin Ring", back={ name="Cornflower Cape", augments={'MP+18','Accuracy+1',}}}) sets.midcast.BlueMagic.PhysMagicACC = set_combine(sets.midcast.BlueMagic.MagicACC, { neck="Combatant's Torque", rear="Enchntr. Earring +1", lear="Zennaroi Earring", body="Mekosu. Harness", hands="Leyline Gloves", waist="Olseni Belt"}) sets.midcast.BlueMagic.Nuke = { ammo="Ghastly Tathlum +1", head="Jhakri Coronal +1", body="Jhakri Robe +1", hands={name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}}, legs="Jhakri Slops +1", feet="Jhakri Pigaches +1", neck="Deceiver's Torque", waist="Yamabuki-no-Obi", left_ear="Hermetic Earring", right_ear="Friomisi Earring", left_ring="Shiva Ring", right_ring="Shiva Ring", back={name="Cornflower Cape", augments={'MP+19','DEX+2','Accuracy+7','Blue Magic skill +9',}}} sets.midcast.BlueMagic.NukeDarkAff = set_combine(sets.midcast.BlueMagic.Nuke, { head="Pixie Hairpin +1", lring="Archon Ring"}) sets.midcast.BlueMagic.NukeLightAff = set_combine(sets.midcast.BlueMagic.Nuke, { rring="Weather. Ring"}) sets.midcast.BlueMagic.Breath = set_combine(sets.midcast.BlueMagic.Nuke, { ammo="Mavi Tathlum", head="Luh. Keffiyeh +1"}) sets.midcast.BlueMagic.Healing = { ammo="Quartz Tathlum +1", head="Hashishin Kavuk +1", neck="Phalaina Locket", lear="Loquac. Earring", rear="Enchntr. Earring +1", body="Vrikodara Jupon", hands="Telchine Gloves", lring="Levia. Ring +1", rring="Levia. Ring +1", back="Swith Cape +1", waist="Cascade Belt", legs="Telchine Braconi", feet="Telchine Pigaches"} sets.midcast.BlueMagic.Healing.Self = set_combine(sets.midcast.BlueMagic.Healing, { lring="Kunaji Ring", rring='Asklepian Ring', waist="Gishdubar Sash"}) sets.midcast.BlueMagic.HealingMAXHP = set_combine(sets.midcast.BlueMagic.Healing, { ammo="Egoist's Tathlum", head="Luh. Keffiyeh +1", lear="Cassie Earring", rear="Upsurge Earring", lring="Meridian Ring", rring="K'ayres Ring", back="Xucau Mantle", waist="Oneiros Belt"}) sets.midcast.BlueMagic.Recast = { body={name="Taeon Tabard", augments={'"Fast Cast"+5'}}, hands="Hashi. Bazu. +1"} -- AFTERCAST SETS -- -- Labelled to show either TP or idle -- --[[ After looking into different ways to set_combine the different levels of Accuracy and Uncapped/Capped Magic Haste it seemed cleaner and easier to hardcode each set There is a fair amount of redundancy however this way should be easier on the end user ]] sets.TP = {} sets.TP['Dual Wield'] = {} sets.TP['Multiattack'] = {} sets.TP['Dual Wield']['Normal'] = { ammo="Ginsen", head="Adhemar Bonnet", neck="Combatant's Torque", left_ear="Dedition Earring", right_ear="Telos Earring", body={ name="Herculean Vest", augments={'Attack+13','"Triple Atk."+4','DEX+1','Accuracy+11',}}, hands="Adhemar Wristbands", lring="Petrov Ring", rring="Epona's Ring", back={name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}}, waist="Windbuffet Belt +1", legs={name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}}, feet={name="Herculean Boots", augments={'Accuracy+17','"Triple Atk."+3','DEX+5','Attack+6',}}} sets.TP['Multiattack']['Normal'] = { ammo="Ginsen", head="Adhemar Bonnet", neck="Combatant's Torque", left_ear="Dedition Earring", right_ear="Telos Earring", body={ name="Herculean Vest", augments={'Attack+13','"Triple Atk."+4','DEX+1','Accuracy+11',}}, hands="Adhemar Wristbands", lring="Petrov Ring", rring="Epona's Ring", back={name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}}, waist="Windbuffet Belt +1", legs={name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}}, feet={name="Herculean Boots", augments={'Accuracy+17','"Triple Atk."+3','DEX+5','Attack+6',}}} sets.TP['Dual Wield']['Accuracy Mid'] = { ammo="Falcon Eye", head="Adhemar Bonnet", neck="Asperity Necklace", lear="Cessance Earring", rear="Suppanomimi", body="Herculean Vest", hands={name="Taeon Gloves", augments={'"Dual Wield"+5'}}, lring="Ramuh Ring +1", rring="Epona's Ring", back="Lupine Cape", waist="Shetal Stone", legs={name="Taeon Tights", augments={'"Dual Wield"+5'}}, feet={name="Taeon Boots", augments={'"Triple Atk."+2'}}} sets.TP['Multiattack']['Accuracy Mid'] = { ammo="Falcon Eye", head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}}, body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}}, hands={ name="Adhemar Wristbands", augments={'DEX+10','AGI+10','Accuracy+15',}}, legs={ name="Herculean Trousers", augments={'Accuracy+16 Attack+16','Crit. hit damage +2%','DEX+8','Accuracy+10','Attack+12',}}, feet={ name="Herculean Boots", augments={'Accuracy+14 Attack+14','"Triple Atk."+3','DEX+5','Attack+4',}}, neck="Iqabi Necklace", waist="Kentarch Belt +1", left_ear="Steelflash Earring", right_ear="Cessance Earring", left_ring="Begrudging Ring", right_ring="Portus Annulet", back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10',}}} sets.TP['Dual Wield']['Accuracy High'] = { ammo="Falcon Eye", head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}}, body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}}, hands={ name="Adhemar Wristbands", augments={'DEX+10','AGI+10','Accuracy+15',}}, legs={name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}}, feet="Jhakri Pigaches +1", neck="Combatant's Torque", waist="Olseni Belt", left_ear="Telos Earring", right_ear="Digni. Earring", left_ring="Cacoethic Ring +1", right_ring="Defending Ring", back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10',}},} sets.TP['Multiattack']['Accuracy High'] = { ammo="Falcon Eye", head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}}, body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}}, hands={ name="Adhemar Wristbands", augments={'DEX+10','AGI+10','Accuracy+15',}}, legs={name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}}, feet="Jhakri Pigaches +1", neck="Combatant's Torque", waist="Olseni Belt", left_ear="Telos Earring", right_ear="Digni. Earring", left_ring="Cacoethic Ring +1", right_ring="Defending Ring", back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10',}},} sets.idle = { ammo="Egoist's Tathlum", head="Spurrina Coif", neck="Twilight Torque", lear="Loquac. Earring", rear="Colossus's Earring", body="Jhakri Robe +1", hands="Serpentes Cuffs", legs={ name="Herculean Trousers", augments={'VIT+9','STR+4','"Refresh"+2','Mag. Acc.+17 "Mag.Atk.Bns."+17',}}, lring="Dark Ring", rring="Defending Ring", back="Shadow Mantle", waist="Flume Belt +1", feet="Serpentes Sabots"} sets.idle.SphereRefresh = { body="Mekosu. Harness"} sets.idle.under_50mpp = { waist="Fucho-no-Obi"} -- VARIABLES -- auto_action = 'Off' count_msg_mecisto = 0 dt_mode = 'None' gear_change_ok = true shadow_type = 'None' tp_mode = 'Normal' weapon_combo = 'Almace' end function get_maps() -- Map for Aftermath times mythic_aftermath_times = { ["Aftermath: Lv.1"]=90, ["Aftermath: Lv.2"]=270, ["Aftermath: Lv.3"]=180} -- Map for auto activation of Berserk/Warcry based -- on Weaponskills listed berserk_warcry_automation = S{ 'Chant du Cygne', 'Expiacion', 'Realmrazer', 'Requiescat'} -- Maps Blue Mage spell Stats per spell for the midcast function, -- Currently 178 spells mapped, can change mapping as needed modifiers = {} -- PHYSICAL MODIFIERS modifiers.STR = S{ 'Battle Dance', 'Bloodrake', 'Death Scissors', 'Dimensional Death', 'Empty Thrash', 'Quadrastrike', 'Sinker Drill', 'Smite of Rage', 'Spinal Cleave', 'Uppercut', 'Vertical Cleave'} modifiers.DEX = S{ 'Amorphic Spikes', 'Asuran Claws', 'Barbed Crescent', 'Claw Cyclone', 'Disseverment', 'Foot Kick', 'Frenetic Rip', 'Goblin Rush', 'Hysteric Barrage', 'Paralyzing Triad', 'Seedspray', 'Sickle Slash', 'Terror Touch', 'Thrashing Assault', 'Vanity Dive'} modifiers.VIT = S{ 'Body Slam', 'Cannonball', 'Delta Thrust', 'Glutinous Dart', 'Grand Slam', 'Power Attack', 'Quad. Continuum', 'Saurian Slide', 'Sprout Smack', 'Sub-zero Smash'} modifiers.AGI = S{ 'Benthic Typhoon', 'Feather Storm', 'Final Sting', 'Helldive', 'Hydro Shot', 'Jet Stream', 'Pinecone Bomb', 'Spiral Spin', 'Wild Oats'} modifiers.INT = S{ 'Mandibular Bite', 'Queasyshroom'} modifiers.MND = S{ 'Ram Charge', 'Screwdriver'} modifiers.CHR = S{ 'Bludgeon'} modifiers.PhysACC = S{ 'Heavy Strike'} modifiers.PhysMagicACC = S{ 'Bilgestorm', 'Frypan', 'Head Butt', 'Sudden Lunge', 'Sweeping Gouge', 'Tail Slap', 'Whirl of Rage'} -- MAGICAL MODIFIERS modifiers.MagicACC = S{ '1000 Needles', 'Absolute Terror', 'Actinic Burst', 'Auroral Drape', 'Awful Eye', 'Blank Gaze', 'Blistering Roar', 'Blitzstrahl', 'Chaotic Eye', 'Cimicine Discharge', 'Cold Wave', 'Corrosive Ooze', 'Demoralizing Roar', 'Dream Flower', 'Enervation', 'Feather Tickle', 'Filamented Hold', 'Frightful Roar', 'Geist Wall', 'Infrasonics', 'Jettatura', 'Light of Penance', 'Lowing', 'Mind Blast', 'Mortal Ray', 'Mysterious Light', 'Polar Roar', 'Reaving Wind', 'Sandspin', 'Sandspray', 'Sheep Song', 'Silent Storm', 'Soporific', 'Sound Blast', 'Stinking Gas', 'Temporal Shift', 'Tourbillion', 'Venom Shell', 'Voracious Trunk', 'Yawn'} modifiers.Nuke = S{ 'Acrid Stream', 'Anvil Lightning', 'Blastbomb', 'Blazing Bound', 'Bomb Toss', 'Charged Whisker', 'Crashing Thunder', 'Cursed Sphere', 'Droning Whirlwind', 'Embalming Earth', 'Entomb', 'Firespit', 'Foul Waters', 'Gates of Hades', 'Ice Break', 'Leafstorm', 'Maelstrom', 'Magic Hammer', 'Molting Plumage', 'Nectarous Deluge', 'Regurgitation', 'Rending Deluge', 'Scouring Spate', 'Searing Tempest', 'Self-Destruct', 'Spectral Floe', 'Subduction', 'Tempest Upheaval', 'Thermal Pulse', 'Thunderbolt', 'Uproot', 'Water Bomb'} modifiers.NukeDarkAff = S{ 'Blood Drain', 'Blood Saber', 'Dark Orb', 'Death Ray', 'Digest', 'Evryone. Grudge', 'Eyes On Me', 'MP Drainkiss', 'Osmosis', 'Palling Salvo', 'Tenebral Crush'} modifiers.NukeLightAff = S{ 'Blinding Fulgor', 'Diffusion Ray', 'Rail Cannon', 'Retinal Glare'} modifiers.Breath = S{ 'Bad Breath', 'Flying Hip Press', 'Frost Breath', 'Heat Breath', 'Hecatomb Wave', 'Magnetite Cloud', 'Poison Breath', 'Radiant Breath', 'Thunder Breath', 'Vapor Spray', 'Wind Breath'} modifiers.Skill = S{ 'Barrier Tusk', 'Diamondhide', 'Magic Barrier', 'Mighty Guard', 'Carcharian Verve', 'Metallic Body', 'Occultation', 'Plasma Charge', 'Pyric Bulwark', 'Reactor Cool'} modifiers.SkillDarkAff = S{ 'Atra. Libations'} modifiers.Healing = S{ 'Healing Breeze', 'Magic Fruit', 'Plenilune Embrace', 'Pollen', 'Restoral', 'Wild Carrot'} modifiers.HealingMAXHP = S{ 'White Wind'} modifiers.Recast = S{ 'Amplification', 'Animating Wail', 'Battery Charge', 'Carcharian Verve', 'Cocoon', 'Erratic Flutter', 'Exuviation', 'Fantod', 'Feather Barrier', 'Harden Shell', 'Memento Mori', 'Mighty Guard', 'Nat. Meditation', 'Orcish Counterstance', 'Refueling', 'Regeneration', 'Saline Coat', 'Triumphant Roar', 'Warm-Up', 'Winds of Promy.', 'Zephyr Mantle'} physical = S{ 'STR', 'DEX', 'VIT', 'AGI', 'INT', 'MND', 'CHR', 'PhysACC', 'PhysMagicACC'} magical = S{ 'MagicACC', 'Nuke', 'NukeDarkAff', 'NukeLightAff', 'Breath', 'Skill', 'SkillDarkAff', 'Healing', 'HealingMAXHP', 'Recast'} end function check_buffs(...) --[[ Function Author: Arcon Simple check before attempting to auto activate Job Abilities that check active buffs and debuffs ]] return table.any({...}, table.get+{buffactive}) end function check_set_spells(...) --[[ Function Author: Arcon Used to pull list of currently set spells, this is useful for determining traits such as Dual Wield IV Also used to determine the Cure spell set, when used with a self_command ]] set_spells = set_spells or gearswap.res.spells:type('BlueMagic'):rekey('name') return table.all({...}, function(name) return S(windower.ffxi.get_mjob_data().spells) :contains(set_spells[name].id) end) end do --[[ Author: Arcon The three next "do" sections are used to aid in checking recast times, can check multiple recast times at once ]] local cache = {} function j(str) if not cache[str] then cache[str] = gearswap.res.job_abilities:with('name', str) end return cache[str] end end do local cache = {} function s(str) if not cache[str] then cache[str] = gearswap.res.spells:with('name', str) end return cache[str] end end do local ja_types = S(gearswap.res.job_abilities:map(table.get-{'type'})) function check_recasts(...) local spells = S{...} for spell in spells:it() do local fn = 'get_' .. (ja_types:contains(spell.type) and 'ability' or 'spell') ..'_recasts' if windower.ffxi[fn]()[spell.recast_id] > 0 then return false end end return true end end function self_command(str) -- Use an in game macro "/con gs c auto_action" to toggle bot Off and On if str == 'auto_action' then if auto_action == 'Off' then auto_action = 'On' else auto_action = 'Off' end windower.add_to_chat(8,'Auto fire event set to: '..auto_action) --[[ Use an in game macro "/con gs c cure" to dynamically use currently set cure spell The list below is limited to the most used spells, can expand list as needed Please be aware if multiple cures are set the first one listed will be the one used so plan accordingly ]] elseif str == 'cure' then if check_set_spells('Magic Fruit') then if party.count > 1 then windower.send_command('input /ma "Magic Fruit" <stpc>') else windower.send_command('input /ma "Magic Fruit" <me>') end elseif check_set_spells('Plenilune Embrace') then if party.count > 1 then windower.send_command('input /ma "Plenilune Embrace" <stpc>') else windower.send_command('input /ma "Plenilune Embrace" <me>') end elseif check_set_spells('Restoral') then windower.send_command('restoral') elseif check_set_spells('White Wind') then windower.send_command('white wind') else if player.sub_job == 'RDM' then if party.count > 1 then windower.send_command('input /ma "Cure IV" <stpc>') else windower.send_command('input /ma "Cure IV" <me>') end else windower.add_to_chat(8,'WARNING: No Cure spell is' ..' currently set!') end end -- Use an in game macro "/con gs c dt_mode" to toggle Damage Taken set elseif str == 'dt_mode' then if dt_mode == 'None' then dt_mode = 'Active' else dt_mode = 'None' end windower.add_to_chat(8,'Damage taken set to: '..dt_mode) gear_modes() -- Use an in game macro "/con gs c tp_mode" -- to cycle between Normal and Accuracy sets elseif str == 'tp_mode' then if tp_mode == 'Normal' then tp_mode = 'Accuracy Mid' elseif tp_mode == 'Accuracy Mid' then tp_mode = 'Accuracy High' else tp_mode = 'Normal' end windower.add_to_chat(8,'Engaged melee set mode: '..tp_mode) gear_modes() -- Will call function when F10 in pressed, initial bind is performed near -- the top of this file elseif str == 'tryweaponskill' then try_weaponskill() -- Use an in game macro "/con gs c weapon_combo" to set weapon preference, -- Swords or Clubs. Useful when enemy uses TP move to remove them elseif str == 'weapon_combo' then if weapon_combo == 'Almace' then weapon_combo = 'Medeina' else weapon_combo = 'Almace' end windower.add_to_chat(8,'Weapon type set to: '..weapon_combo) end end function gear_modes() -- User created bridge for aftercast and status_change functions -- Sequential gear sets used to easily allow for changing player needs slot_disabling() local attack_preference = 'null' if player.status == 'Engaged' then --[[ This will adjust the amount of Dual Wield used based on if Magic Haste is capped from March song, It is assumed that March is sung with an instrument that will allow you to hit the cap ]] if (check_buffs('Haste') and check_buffs('March')) or (check_buffs('Haste') and check_buffs('Mighty Guard')) or buffactive.haste == 2 then attack_preference = 'Multiattack' else attack_preference = 'Dual Wield' end equip(sets.TP[attack_preference][tp_mode], sets.misc.DT[dt_mode]) elseif player.status == 'Idle' then equip(sets.idle, sets.misc.DT[dt_mode], sets.misc.Movement) if dt_mode == 'None' then --print(party.count) if party.count > 1 then equip(sets.idle.SphereRefresh) end if player.mpp < 50 then equip(sets.idle.under_50mpp) end if check_buffs('Reive Mark') then equip(sets.misc.Reive) end end end -- Will inform you if no weapon is equiped and re-equip once able if player.equipment.main == 'empty' then equip(sets.weapon[weapon_combo]) windower.add_to_chat(8,'No Weapon, trying to re-equip: '..weapon_combo) end end function relaxed_play_mode() -- This can be used as a mini bot to automate actions if not midaction() then if player.hpp < 50 and not check_buffs('silence', 'mute') and check_recasts(s('White Wind')) then windower.send_command('white wind') elseif player.target.hpp < 40 and player.target.hpp > 15 and not check_buffs('silence', 'mute') and player.target.distance < 5 then windower.send_command('sinker drill') elseif not check_buffs('Haste') and not check_buffs('silence', 'mute') and check_recasts(s('Erratic Flutter')) then windower.send_command('erratic flutter') elseif not check_buffs('Attack Boost') and not check_buffs('silence', 'mute') and check_recasts(s('Nat. Meditation')) then windower.send_command('nat. meditation') elseif player.equipment.main == 'Almace' and not check_buffs('Aftermath: Lv.3') and player.tp < 3000 then return elseif player.equipment.main == 'Almace' and not check_buffs('Aftermath: Lv.3') and player.target.hpp > 40 and player.tp == 3000 then windower.send_command('expiacion') elseif player.tp > 999 and player.target.hpp > 40 and player.target.distance < 5 then windower.send_command('chant du cygne') end end end function try_weaponskill() --[[ F10 bind: One button press has the ability to perform one of three Weaponskills: Chant du Cygne will change to Expiacion when AM3 is down and at 3000 TP and will hold TP if over 2000 but below 3000 A Club in main hand it will change to Realmrazer, If Idle and F10 is pressed you will change to current Idle/DT set, useful as a fast way to equip proper gear ]] if player.status == 'Engaged' then if player.equipment.main == 'Almace' then if player.tp == 3000 and not check_buffs('Aftermath: Lv.3') then windower.send_command('expiacion') elseif player.tp > 2000 and not check_buffs('Aftermath: Lv.3') then windower.add_to_chat(8,'Holding TP til 3000' ..' to gain Aftermath: Lv.3') return else windower.send_command('chant du cygne') end else windower.send_command('chant du cygne') end else gear_modes() end end function slot_disabling() -- Disable slots for items you don't want removed when performing actions if player.equipment.head == 'Reraise Hairpin' then disable('head') windower.add_to_chat(8,'Reraise Hairpin equiped on head') else enable('head') end if player.equipment.left_ear == 'Reraise Earring' then disable('left_ear') windower.add_to_chat(8,'Reraise Earring equiped on left ear') else enable('left_ear') end if player.equipment.right_ear == 'Reraise Earring' then disable('right_ear') windower.add_to_chat(8,'Reraise Earring equiped on right ear') else enable('right_ear') end --[[ count_msg_mecisto can be adjusted to the value you want for periodic reminders that you have slot locked, count is incresed twice by most actions due to slot_disabling() being called in precast and again after the cast in gear_modes() ]] if player.equipment.back == 'Mecisto. Mantle' then disable('back') if count_msg_mecisto == 0 then windower.add_to_chat(8,'REMINDER: ' ..'Mecistopins mantle equiped on back') end count_msg_mecisto = (count_msg_mecisto + 1) % 30 else enable('back') count_msg_mecisto = 0 end end function status_change(new,old) if T{'Idle','Engaged'}:contains(new) and gear_change_ok then gear_modes() end end function buff_change(buff,gain) -- When encumbrance wears off will re-equip current gear set if buff == 'encumbrance' and not gain then gear_modes() -- TIMERS PLUGIN: Create and delete custom timers for aftermath levels elseif player.equipment.main == 'Almace' and buff:startswith('Aftermath') then if gain then windower.send_command('timers c "'..buff..'" ' ..mythic_aftermath_times[buff]..' down abilities/00027.png') else windower.send_command('timers d "'..buff..'"') end -- TIMERS PLUGIN: Primeval Brew (Transcendency) elseif buff == 'Transcendency' then if gain then windower.send_command('timers c "Transcendency" 180' ..'down abilities/00018.png') else windower.send_command('timers d "Transcendency"') end -- If you have spells under a different macro set in game this will let -- you change to that set quickly and then change back once finished elseif buff:startswith('Unbridled') and not gain then windower.send_command('input /macro set 8') -- TIMERS PLUGIN: Weakness elseif buff == 'weakness' then if gain then windower.send_command('timers c "Weakness" 300 down' ..'abilities/00255.png') else windower.send_command('timers d "Weakness"') end end end function precast(spell,arg) gear_change_ok = false slot_disabling() -- Automates Berserk/Warcry for Warrior sub job if berserk_warcry_automation:contains(spell.name) and player.status == 'Engaged' and player.sub_job == 'WAR' and check_recasts(j('Berserk')) and not check_buffs( 'Amnesia', 'Berserk', 'Obliviscence', 'Paralysis') then windower.send_command('berserk; wait 1; warcry; wait 1;' ..spell.name..' '..spell.target.raw) cancel_spell() return end --[[ Generic equip command for Job Abilities and Weaponskills that have a gear set listed in get_sets() If Idle and a weaponskill macro is pressed you will change to current Idle/DT set, useful as a fast way to equip proper gear For then in game macros the quotations("") and <t> aren't needed EX: /ws Expiacion ]] if sets.precast.JA[spell.name] then equip(sets.precast.JA[spell.name]) elseif sets.precast.WS[spell.name] then if player.status == 'Engaged' then equip(sets.precast.WS[spell.name]) if check_buffs('Reive Mark') then equip(sets.misc.Reive) end else cancel_spell() gear_modes() return end end -- Magic spell gear handling(Precast) if spell.prefix == '/magic' or spell.prefix == '/ninjutsu' or spell.prefix == '/song' then if spell.type == 'BlueMagic' then equip(sets.precast.FastCast.BlueMagic) else equip(sets.precast.FastCast) end if spell.name == 'Utsusemi: Ichi' and check_recasts(spell) and shadow_type == 'Ni' then if check_buffs( 'Copy Image', 'Copy Image (2)', 'Copy Image (3)') then windower.send_command('cancel copy image;' ..'cancel copy image (2); cancel copy image (3)') end elseif (spell.name == 'Monomi: Ichi' or spell.name == 'Sneak') and check_buffs('Sneak') and check_recasts(spell) and spell.target.type == 'SELF' then windower.send_command('cancel sneak') elseif (spell.name == 'Diamondhide' or spell.name == 'Metallic body' or spell.name == 'Stoneskin') and check_buffs('Stoneskin') and check_recasts(spell) then windower.send_command('cancel stoneskin') end end -- Dancer Sub Job if spell.name == 'Spectral Jig' and check_buffs('Sneak') and check_recasts(spell) then windower.send_command('cancel sneak') cast_delay(0.3) elseif windower.wc_match(spell.name,'*Step') then equip(sets.TP['Accuracy High']) end end function midcast(spell,arg) -- Special handling for Spell Mappings outlined in get_maps() local stat for key, set in pairs(modifiers) do if set:contains(spell.name) then stat = key end end local physical = stat and physical:contains(stat) local magical = stat and magical:contains(stat) -- Magic spell gear handling(Midcast) if physical then equip(sets.midcast.BlueMagic[stat]) if check_buffs('Chain Affinity') then equip(sets.misc['Chain Affinity']) end if check_buffs('Efflux') then equip(sets.misc.Efflux) end if tp_mode == 'Accuracy High' and stat ~= 'PhysMagicACC' then equip(sets.midcast.BlueMagic.PhysACC) end elseif magical then equip(sets.midcast.BlueMagic[stat]) if stat == 'Healing' and spell.target.type == 'SELF' then equip(sets.midcast.BlueMagic.Healing.Self) elseif stat == 'Nuke' then if check_buffs('Burst Affinity') then equip(sets.misc['Burst Affinity']) end if spell.element == world.day_element or spell.element == world.weather_element then equip(sets.misc.Cape_Obi) end elseif check_buffs('Diffusion') then equip(sets.misc.Diffusion) end end if spell.skill == 'Healing Magic' or spell.skill == 'Enhancing Magic' or spell.type == 'Trust' then equip(sets.midcast.BlueMagic.Recast) if spell.name:startswith('Cure') then equip(sets.midcast.BlueMagic.Healing) if spell.target.type == 'SELF' then equip(sets.midcast.BlueMagic.Healing.Self) end end elseif spell.skill == 'Elemental Magic' then equip(sets.midcast.BlueMagic.Nuke) end if spell.name:startswith('Utsusemi') then equip(sets.misc.DT.Active) end end function aftercast(spell,arg) gear_change_ok = true gear_modes() -- Gear info, useful if using DressUp or BlinkMeNot if dt_mode ~= 'None' or tp_mode ~= 'Normal' then windower.add_to_chat(8,'Melee = '..tp_mode.. ' | Damage Taken = '..dt_mode) end if not spell.interrupted then -- Changes shadow type variable to allow cancel Copy Image -- if last cast was Utsusemi: Ni if spell.name == 'Utsusemi: Ni' then shadow_type = 'Ni' elseif spell.name == 'Utsusemi: Ichi' then shadow_type = 'Ichi' end -- If you have spells under a different macro set in game this will let -- you change to that set quickly and then change back once finished if spell.name:startswith('Unbridled') then windower.send_command('input /macro set 3') end -- TIMERS PLUGIN: Dream Flower if spell.name == 'Dream Flower' then windower.add_to_chat(8,'NOTE: 1:30 general timer set, ' ..'max sleep can last 2:00') windower.send_command('timers c "Dream Flower" 90 down' ..'spells/00521.png') end -- TIMERS PLUGIN: Since Aftermath: Lv.1 can overwrite itself this -- will delete and re-create this specific timer if spell.name == 'Expiacion' and player.equipment.main == 'Almace' and check_buffs('Aftermath: Lv.1') then windower.send_command('timers d "Aftermath: Lv.1"; wait 0.3;' ..'timers c "Aftermath: Lv.1" 90 down abilities/00027.png') end end end