|  | 
    Gearswap Support Thread
 
    
        
        
        
            
                
                     Lakshmi.Rumorian
                                                    
                                                                            
                                Server: Lakshmi Game: FFXI Posts: 10 
                
			
			By Lakshmi.Rumorian 2016-11-16 20:36:06			
			
						
                     
                 I'm trying to incorporate these functions (copied from Krystela of Asura's lua) into my geo.lua:
 function pretarget(spell,action)
 -- Auto-Echo drop :D --
 if spell.action_type == 'Magic' and buffactive['Silence'] then
 cancel_spell()
 send_command('input /item "Echo Drops" <me>')
 -- Auto Blaze of Glory for lazies :p --
 elseif string.find(spell.english, 'Geo-') then
 if not buffactive['Bolster'] and not buffactive['Amnesia'] and not pet.isvalid and windower.ffxi.get_ability_recasts()[247] < 1 then
 cancel_spell()
 send_command('input /ja "Blaze of Glory" <me>;wait 2;input /ma "'..spell.english..'" '..spell.target.name)
 end
 end
 end
 
 
 But the auto-BoG part doesn't work. Is there anything else I need to add?
 
            
                
                     Odin.Lygre
                                                    
                                                                            
                                Server: Odin Game: FFXI Posts: 89 
                
			
			By Odin.Lygre 2016-11-16 20:56:56			
			
						
                     
                 Code  function pretarget(spell,action)
	-- Auto-Echo drop :D --
	if spell.action_type == 'Magic' and buffactive['Silence'] then
		cancel_spell()
		send_command('input /item "Echo Drops" <me>')
	-- Auto Blaze of Glory for lazies :p -- 
	elseif string.find(spell.english, 'Geo-') then
		if not (buffactive['Bolster'] or  buffactive['Amnesia'] or pet.isvalid) and windower.ffxi.get_ability_recasts()[247] == 0 then
			cancel_spell()
			send_command('input /ja "Blaze of Glory" <me>;wait 2;input /ma "'..spell.english..'" '..spell.target.name)
		end
	end
end
Can try this                                     
            
                
                     Lakshmi.Rumorian
                                                    
                                                                            
                                Server: Lakshmi Game: FFXI Posts: 10 
                
			
			By Lakshmi.Rumorian 2016-11-17 16:36:34			
			
						
                     
                 
Thanks, but that didn't work either. I just used Krystela's geo.lua with no changes on my character and it still didn't work. I'm starting to think it's something outside that lua that makes it work and that's missing for me.                                     
            
                
                     Leviathan.Vow
                                                    
                                                                            
                                Server: Leviathan Game: FFXI Posts: 125 
                
			
			By Leviathan.Vow 2016-11-17 16:55:45			
			
						
                     
                 Aren't Geo spells cast on mobs? You'd need to use '<t>' instead of spell.target.name.                                     
            
            
                
			
			By aisukage 2016-11-19 05:05:22			
			
						
                     
                 I am looking for help with my DRK lua. 
Basically I want it to swap my gear depending what weapon I have equiped.
 
I have it set up so when the lua runs, depending which weapon I have equipped when it loads the lua it will select the appropriate gear for that weapon. but if I swap without unloading and reloading the lua it will not swap.
 
for example: 
I have my GS equipped and then load my LUA up when I engage it equips my Enaged set for GS. When I swap to my Apoc it doesn't change even if I disengage and re-engage it will still put my GS gear on. Now at this point if I were to unload and load my LUA and engage with my Apoc it will equip my scythe TP gear and if I swap to GS it will do the same thing as before but with my Scythe gear allways being put on.
 
Not sure what would cause it to lock depending on when the lua loads like this. I would of thought maybe I would of just needed to cast a spell or Weaponskill or disengage/re-engage again for it to correct the gear but this didn't help.
 
I'm not great at Gearswap but I believe these to be the important pieces from my LUA  Code  function user_setup()
   update_combat_form()
endCode  function user_setup()
   Apoc_weapons = S{'Apocalypse'}
   GS_weapons = S{'Ragnarok'}
   Anguta_weapons = S{'Anguta'}
endCode  function adjust_engaged_sets()
   state.CombatWeapon = player.equipment.main
   adjust_melee_groups()
endCode  function update_combat_form()
   if  
      Apoc_weapons:contains(player.equipment.main) then
      state.CombatForm:set('Apocalypse')
   elseif
      Anguta_weapons:contains(player.equipment.main) then
      state.CombatForm:set('Anguta')
   elseif
      GS_weapons:contains(player.equipment.main) then
      state.CombatForm:set('GreatSword')
   else
      state.CombatForm:reset()
 end
endCode  function job_update(cmdParams, eventArgs)
   update_combat_form()
end
There's obviously more in some of these functions but I just took what I feel like would be effecting my situation. I might have missed something and if need be will upload to pastebin if this isn't enough to help. 
 
Oh and for example of what my Gearset lines look like Code  sets.engaged.GreatSword = {Gear is here ect}
sets.engaged.Apocalypse = {Gear is here ect}
would really appreciate any help with this.                                     
            
            
                
			
			By aisukage 2016-11-19 17:17:54			
			
						
                     
                 Or if I can' get help with the previous question is it possible that someone could help me put a new mode into my lua so I can swap with a custom bind. something like
 state.weaponmode:option {'rag, apoc'}
 
 so I can do
 
 sets.engaged.rag
 main='ragnarok',
 ect.
 
 or
 
 sets.engaged.Apoc
 main='apocalypse',
 ect.
 
 and able to do
 sets.engaged.Apoc.Acc
 ect
 
            
                
                     Odin.Lygre
                                                    
                                                                            
                                Server: Odin Game: FFXI Posts: 89 
                
			
			By Odin.Lygre 2016-11-19 19:09:13			
			
						
                     
                 All you should need is this: Code  function job_setup()
	update_combat_form()
end
function job_update(cmdParams, eventArgs)
    update_combat_form()
end
function update_combat_form()
    state.CombatWeapon:set(player.equipment.main)
end
If you're using Montenten's include. 
You'll just need to hit F12 (job update) after changing weapons sometimes.                                     
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Asura Game: FFXI Posts: 1329 
                
			
			By Asura.Azagarth 2016-11-22 04:59:48			
			
						
                     
                 How do you get around GS not equipping rings with the same name? This is causing me tons of issues as of late. I have tried moving rings to different wardrobes, placing the rings separated by the rest of the gear in the sets. I am at a loss... It really sucs when you only end up equipping one or the 2 Chirich rings and get 99tp on a 2h job.... Or noticing your ws is only going off with one Ifrit+1 or nuke with one shiva+1, etc etc.                                     
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Sylph Game: FFXI Posts: 184 
                
			
			By Sylph.Subadai 2016-11-24 05:23:56			
			
						
                     
                 How do you get around GS not equipping rings with the same name? This is causing me tons of issues as of late. I have tried moving rings to different wardrobes, placing the rings separated by the rest of the gear in the sets. I am at a loss... It really sucs when you only end up equipping one or the 2 Chirich rings and get 99tp on a 2h job.... Or noticing your ws is only going off with one Ifrit+1 or nuke with one shiva+1, etc etc.Saw this question somewhere else, the solution I can't personally vouch for, but looks like it will work... Put your rings in different bags and try something like: Code  sets.midcast['Elemental Magic'] = {
         ring1={name="Shiva Ring", bag="wardrobe2"},
         ring2={name="Shiva Ring", bag="wardrobe3"} } 
            
                
                     Phoenix.Keido
                                                    
                                                                            
                                Server: Phoenix Game: FFXI Posts: 122 
                
			
			By Phoenix.Keido 2016-11-27 11:08:23			
			
						
                     
                 Figured it out.                                     
            
            
                
			
			By inkydo 2016-11-30 18:18:01			
			
						
                     
                 I have used this in many Gear swaps and for some reason it is not working In the new BLU one I have Mod from Kinematics/GearSwap-Jobs  Code  -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
function job_handle_equipping_gear(playerStatus, eventArgs)    	
    if player.equipment.back == 'Mecisto. Mantle' or player.equipment.back == 'Aptitude Mantle' or player.equipment.back == 'Aptitude Mantle +1' or player.equipment.back == 'Nexus Cape' then
        disable('back')
    else
        enable('back')
    end
        if player.equipment.ring1 == 'Warp Ring' or player.equipment.ring1 == 'Vocation Ring' or player.equipment.ring1 == 'Capacity Ring' then
        disable('ring1')
    else
        enable('ring1')
    end
    if player.equipment.ring2 == 'Warp Ring' or player.equipment.ring2 == 'Vocation Ring' or player.equipment.ring2 == 'Capacity Ring' then
        disable('ring2')
    else
        enable('ring2')
    end
	    if player.equipment.range == 'Soultrapper' then
        disable('range')
    else
        enable('range')
    end
		if player.equipment.ammo == 'Blank Soulplate' then
        disable('ammo')
    else
        enable('ammo')
    end
end
This is the Lua it self Code  -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job.  Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
    mote_include_version = 2
    
    -- Load and initialize the include file.
    include('Mote-Include.lua')
end
-- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
function job_setup()
    state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
    state.Buff['Chain Affinity'] = buffactive['Chain Affinity'] or false
    state.Buff.Convergence = buffactive.Convergence or false
    state.Buff.Diffusion = buffactive.Diffusion or false
    state.Buff.Efflux = buffactive.Efflux or false
    
    state.Buff['Unbridled Learning'] = buffactive['Unbridled Learning'] or false
    blue_magic_maps = {}
    
    -- Mappings for gear sets to use for various blue magic spells.
    -- While Str isn't listed for each, it's generally assumed as being at least
    -- moderately signficant, even for spells with other mods.
    
    -- Physical Spells --
    
    -- Physical spells with no particular (or known) stat mods
    blue_magic_maps.Physical = S{
        'Bilgestorm'
    }
    -- Spells with heavy accuracy penalties, that need to prioritize accuracy first.
    blue_magic_maps.PhysicalAcc = S{
        'Heavy Strike',
    }
    -- Physical spells with Str stat mod
    blue_magic_maps.PhysicalStr = S{
        'Battle Dance','Bloodrake','Death Scissors','Dimensional Death',
        'Empty Thrash','Quadrastrike','Sinker Drill','Spinal Cleave',
        'Uppercut','Vertical Cleave'
    }
        
    -- Physical spells with Dex stat mod
    blue_magic_maps.PhysicalDex = S{
        'Amorphic Spikes','Asuran Claws','Barbed Crescent','Claw Cyclone','Disseverment',
        'Foot Kick','Frenetic Rip','Goblin Rush','Hysteric Barrage','Paralyzing Triad',
        'Seedspray','Sickle Slash','Smite of Rage','Terror Touch','Thrashing Assault',
        'Vanity Dive'
    }
        
    -- Physical spells with Vit stat mod
    blue_magic_maps.PhysicalVit = S{
        'Body Slam','Cannonball','Delta Thrust','Glutinous Dart','Grand Slam',
        'Power Attack','Quad. Continuum','Sprout Smack','Sub-zero Smash'
    }
        
    -- Physical spells with Agi stat mod
    blue_magic_maps.PhysicalAgi = S{
        'Benthic Typhoon','Feather Storm','Helldive','Hydro Shot','Jet Stream',
        'Pinecone Bomb','Spiral Spin','Wild Oats'
    }
    -- Physical spells with Int stat mod
    blue_magic_maps.PhysicalInt = S{
        'Mandibular Bite','Queasyshroom'
    }
    -- Physical spells with Mnd stat mod
    blue_magic_maps.PhysicalMnd = S{
        'Ram Charge','Screwdriver','Tourbillion'
    }
    -- Physical spells with Chr stat mod
    blue_magic_maps.PhysicalChr = S{
        'Bludgeon'
    }
    -- Physical spells with HP stat mod
    blue_magic_maps.PhysicalHP = S{
        'Final Sting'
    }
    -- Magical Spells --
    -- Magical spells with the typical Int mod
    blue_magic_maps.Magical = S{
        'Blastbomb','Blazing Bound','Bomb Toss','Cursed Sphere','Dark Orb','Death Ray',
        'Diffusion Ray','Droning Whirlwind','Embalming Earth','Firespit','Foul Waters',
        'Ice Break','Leafstorm','Maelstrom','Rail Cannon','Regurgitation','Rending Deluge',
        'Retinal Glare','Subduction','Tem. Upheaval','Water Bomb'
    }
    -- Magical spells with a primary Mnd mod
    blue_magic_maps.MagicalMnd = S{
        'Acrid Stream','Evryone. Grudge','Magic Hammer','Mind Blast'
    }
    -- Magical spells with a primary Chr mod
    blue_magic_maps.MagicalChr = S{
        'Eyes On Me','Mysterious Light'
    }
    -- Magical spells with a Vit stat mod (on top of Int)
    blue_magic_maps.MagicalVit = S{
        'Thermal Pulse'
    }
    -- Magical spells with a Dex stat mod (on top of Int)
    blue_magic_maps.MagicalDex = S{
        'Charged Whisker','Gates of Hades'
    }
            
    -- Magical spells (generally debuffs) that we want to focus on magic accuracy over damage.
    -- Add Int for damage where available, though.
    blue_magic_maps.MagicAccuracy = S{
        '1000 Needles','Absolute Terror','Actinic Burst','Auroral Drape','Awful Eye',
        'Blank Gaze','Blistering Roar','Blood Drain','Blood Saber','Chaotic Eye',
        'Cimicine Discharge','Cold Wave','Corrosive Ooze','Demoralizing Roar','Digest',
        'Dream Flower','Enervation','Feather Tickle','Filamented Hold','Frightful Roar',
        'Geist Wall','Hecatomb Wave','Infrasonics','Jettatura','Light of Penance',
        'Lowing','Mind Blast','Mortal Ray','MP Drainkiss','Osmosis','Reaving Wind',
        'Sandspin','Sandspray','Sheep Song','Soporific','Sound Blast','Stinking Gas',
        'Sub-zero Smash','Venom Shell','Voracious Trunk','Yawn'
    }
        
    -- Breath-based spells
    blue_magic_maps.Breath = S{
        'Bad Breath','Flying Hip Press','Frost Breath','Heat Breath',
        'Hecatomb Wave','Magnetite Cloud','Poison Breath','Radiant Breath','Self-Destruct',
        'Thunder Breath','Vapor Spray','Wind Breath'
    }
    -- Stun spells
    blue_magic_maps.Stun = S{
        'Blitzstrahl','Frypan','Head Butt','Sudden Lunge','Tail slap','Temporal Shift',
        'Thunderbolt','Whirl of Rage'
    }
	
    -- Dark spells
    blue_magic_maps.Dark = S{
        'Tenebral Crush','Palling Salvo'
    }        
    -- Healing spells
    blue_magic_maps.Healing = S{
        'Healing Breeze','Magic Fruit','Plenilune Embrace','Pollen','Restoral','White Wind',
        'Wild Carrot'
    }
    
    -- Buffs that depend on blue magic skill
    blue_magic_maps.SkillBasedBuff = S{
        'Barrier Tusk','Diamondhide','Magic Barrier','Metallic Body','Plasma Charge',
        'Pyric Bulwark','Reactor Cool',
    }
    -- Other general buffs
    blue_magic_maps.Buff = S{
        'Amplification','Animating Wail','Battery Charge','Carcharian Verve','Cocoon',
        'Erratic Flutter','Exuviation','Fantod','Feather Barrier','Harden Shell',
        'Memento Mori','Nat. Meditation','Occultation','Orcish Counterstance','Refueling',
        'Regeneration','Saline Coat','Triumphant Roar','Warm-Up','Winds of Promyvion',
        'Zephyr Mantle'
    }
    
    
    -- Spells that require Unbridled Learning to cast.
    unbridled_spells = S{
        'Absolute Terror','Bilgestorm','Blistering Roar','Bloodrake','Carcharian Verve',
        'Crashing Thunder','Droning Whirlwind','Gates of Hades','Harden Shell','Polar Roar',
        'Pyric Bulwark','Thunderbolt','Tourbillion','Uproot'
    }
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent.  Can override this function in a sidecar file.
function user_setup()
    state.OffenseMode:options('Normal', 'Acc', 'Refresh', 'Learning')
    state.WeaponskillMode:options('Normal', 'Acc')
    state.CastingMode:options('Normal', 'Resistant')
    state.IdleMode:options('Normal', 'PDT', 'Learning')
    gear.macc_hagondes = {name="Hagondes Cuffs", augments={'Phys. dmg. taken -3%','Mag. Acc.+29'}}
    -- Additional local binds
    send_command('bind ^` input /ja "Chain Affinity" <me>')
    send_command('bind !` input /ja "Efflux" <me>')
    send_command('bind @` input /ja "Burst Affinity" <me>')
    update_combat_form()
    select_default_macro_book()
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
    send_command('unbind ^`')
    send_command('unbind !`')
    send_command('unbind @`')
end
-- Set up gear sets.
function init_gear_sets()
    --------------------------------------
    -- Start defining the sets
    --------------------------------------
    sets.buff['Burst Affinity'] = {feet="Hashi. Basmak +1"}
    sets.buff['Chain Affinity'] = {head="Hashishin Kavuk +1", feet="Assimilator's Charuqs +1"}
    sets.buff.Convergence = {head="Luhlaza Keffiyeh +1"}
    sets.buff.Diffusion = {feet="Luhlaza Charuqs"}
    sets.buff.Enchainment = {body="Luhlaza Jubbah +1"}
    sets.buff.Efflux = {legs="Hashishin Tayt +1"}
    
    -- Precast Sets
    
    -- Precast sets to enhance JAs
    sets.precast.JA['Azure Lore'] = {hands="Luh. Bazubands +1"}
    -- Waltz set (chr and vit)
    sets.precast.Waltz = {
		--ammo="Sonia's Plectrum",
        --head="Uk'uxkaj Cap",
        --body="Vanir Cotehardie",
		--hands="Buremte Gloves",
		--legs="Hagondes Pants",
		--feet="Iuitl Gaiters +1",
		--waist="Caudata Belt",
		--left_ring="Spiral Ring",
		--back="Iximulew Cape"
	}
        
    -- Don't need any special gear for Healing Waltz.
    sets.precast.Waltz['Healing Waltz'] = {}
    -- Fast cast sets for spells
    
    sets.precast.FC = {
		ammo="Impatiens",
		head={ name="Amalric Coif", augments={'MP+60','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
		body={ name="Taeon Tabard", augments={'Accuracy+14 Attack+14','"Triple Atk."+2','STR+5 DEX+5',}},
		hands={ name="Leyline Gloves", augments={'Accuracy+6','"Mag.Atk.Bns."+9',}},
		legs="Orvail Pants +1",
		feet="Chelona Boots +1",
		waist="Witful Belt",
		left_ear="Cessance Earring",
		right_ear="Loquac. Earring",
		left_ring="Prolix Ring",
		right_ring="Veneficium Ring",
		back="Swith Cape"}
        
    sets.precast.FC['Blue Magic'] = set_combine(sets.precast.FC, {body="Hashishin Mintan +1"})
       
    -- Weaponskill sets
    -- Default set for any weaponskill that isn't any more specifically defined
    sets.precast.WS = {
		ammo="Jukukik Feather",
		head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+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+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Fotia Gorget",
		waist="Caudata Belt",
		left_ear="Mache Earring",
		right_ear="Brutal Earring",
		left_ring="Ramuh Ring +1",
		right_ring="Epona's Ring",
		back={ name="Mecisto. Mantle", augments={'Cap. Point+32%','Rng.Atk.+3','DEF+11',}}}
		--back="Vespid Mantle"}
    
    sets.precast.WS.acc = set_combine(sets.precast.WS, {hands="Buremte Gloves"})
    -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
    sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {left_ring="Aquasoul Ring",feet="Luhlaza Charuqs"})
    sets.precast.WS['Sanguine Blade'] = {
		ammo="Ghastly Tathlum +1",
		head="Assim. Keffiyeh +1",
		body="Hashishin Mintan +1",
		hands={ name="Helios Gloves", augments={'"Mag.Atk.Bns."+11','Magic crit. hit rate +8',}},
		legs={ name="Luhlaza Shalwar +1", augments={'Enhances "Assimilation" effect',}},
		feet="Hashi. Basmak +1",
		neck="Sanctity Necklace",
		waist="Anguinus Belt",
		left_ear="Sortiarius Earring",
		right_ear="Friomisi Earring",
		left_ring="Fenrir Ring",
		right_ring="Acumen Ring",
		back={ name="Rosmerta's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+3','"Store TP"+10',}}}
    
    
    -- Midcast Sets
    sets.midcast.FastRecast = {
		waist="Witful Belt",
		right_ear="Loquacious Earring",
		left_ring="Prolix Ring",
        back="Swith Cape"}
        
    sets.midcast['Blue Magic'] = set_combine(sets.midcast.FastRecast, {body="Hashishin Mintan +1"})
    
    -- Physical Spells --
    
    sets.midcast['Blue Magic'].Physical = {
		ammo="Hasty Pinion +1",
		head={ name="Lilitu Headpiece", augments={'STR+8','DEX+8','Attack+14','Weapon skill damage +1%',}},
		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+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Ocachi Gorget",
		waist="Prosilio Belt",
		left_ear="Tati Earring",
		right_ear="Tati Earring",
		left_ring="Ramuh Ring +1",
		right_ring="Epona's Ring",
		back="Vespid Mantle"}
    sets.midcast['Blue Magic'].PhysicalAcc = {
		ammo="Hasty Pinion +1",
		head={ name="Lilitu Headpiece", augments={'STR+8','DEX+8','Attack+14','Weapon skill damage +1%',}},
		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+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Ocachi Gorget",
		waist="Prosilio Belt",
		left_ear="Tati Earring",
		right_ear="Tati Earring",
		left_ring="Ramuh Ring +1",
		right_ring="Epona's Ring",
		back="Vespid Mantle"}
    sets.midcast['Blue Magic'].PhysicalStr = set_combine(sets.midcast['Blue Magic'].Physical,
        {})
    sets.midcast['Blue Magic'].PhysicalDex = set_combine(sets.midcast['Blue Magic'].Physical,
        {ammo="Hasty Pinion +1"})
    sets.midcast['Blue Magic'].PhysicalVit = set_combine(sets.midcast['Blue Magic'].Physical,
        {})
		--{body="Vanir Cotehardie",hands="Assimilator's Bazubands +1",back="Iximulew Cape"})
    sets.midcast['Blue Magic'].PhysicalAgi = set_combine(sets.midcast['Blue Magic'].Physical,
        {})
		--{body="Vanir Cotehardie",hands="Iuitl Wristbands",right_ring="Stormsoul Ring",
         --waist="Chaac Belt",feet="Iuitl Gaiters +1"})
    sets.midcast['Blue Magic'].PhysicalInt = set_combine(sets.midcast['Blue Magic'].Physical,
        {back="Cornflower Cape"})
        --{left_ear="Psystorm Earring",body="Vanir Cotehardie",hands="Assimilator's Bazubands +1",
         --right_ring="Icesoul Ring",back="Toro Cape",feet="Hagondes Sabots"})
    sets.midcast['Blue Magic'].PhysicalMnd = set_combine(sets.midcast['Blue Magic'].Physical,
        {right_ring="Leviathan Ring +1",back="Cornflower Cape"})
        --{left_ear="Lifestorm Earring",body="Vanir Cotehardie",hands="Assimilator's Bazubands +1",
         --right_ring="Aquasoul Ring",back="Refraction Cape"})
    sets.midcast['Blue Magic'].PhysicalChr = set_combine(sets.midcast['Blue Magic'].Physical,
        {right_ring="Leviathan Ring +1",back="Cornflower Cape"})
        --{body="Vanir Cotehardie",hands="Assimilator's Bazubands +1",back="Refraction Cape",
         --waist="Chaac Belt"})
    sets.midcast['Blue Magic'].PhysicalHP = set_combine(sets.midcast['Blue Magic'].Physical)
    -- Magical Spells --
    
    sets.midcast['Blue Magic'].Magical = {
		ammo="Ghastly Tathlum +1",
		head={ name="Amalric Coif", augments={'MP+60','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
		body={ name="Samnuha Coat", augments={'Mag. Acc.+10','"Mag.Atk.Bns."+9','"Fast Cast"+2',}},
		hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
		legs={ name="Amalric Slops", augments={'MP+60','"Mag.Atk.Bns."+20','Enmity-5',}},
		feet={ name="Amalric Nails", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Conserve MP"+6',}},
		neck="Deviant Necklace",
		waist="Salire Belt",
		left_ear="Hecate's Earring",
		right_ear="Friomisi Earring",
		left_ring="Shiva Ring",
		right_ring="Acumen Ring",
		back={ name="Cornflower Cape", augments={'MP+30','DEX+5','Accuracy+1','Blue Magic skill +10',}}}
		
    sets.midcast['Blue Magic'].Magical.Resistant = set_combine(sets.midcast['Blue Magic'].Magical)--,
        --{})
    
    sets.midcast['Blue Magic'].MagicalMnd = set_combine(sets.midcast['Blue Magic'].Magical)--,
        --{left_ring="Aquasoul Ring"})
    sets.midcast['Blue Magic'].MagicalChr = set_combine(sets.midcast['Blue Magic'].Magical)
    sets.midcast['Blue Magic'].MagicalVit = set_combine(sets.midcast['Blue Magic'].Magical)--,
        --{left_ring="Spiral Ring"})
    sets.midcast['Blue Magic'].MagicalDex = set_combine(sets.midcast['Blue Magic'].Magical)
    sets.midcast['Blue Magic'].MagicAccuracy = {
		ammo="Ghastly Tathlum +1",
		head={ name="Amalric Coif", augments={'MP+60','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
		body={ name="Samnuha Coat", augments={'Mag. Acc.+10','"Mag.Atk.Bns."+9','"Fast Cast"+2',}},
		hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
		legs={ name="Amalric Slops", augments={'MP+60','"Mag.Atk.Bns."+20','Enmity-5',}},
		feet={ name="Amalric Nails", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Conserve MP"+6',}},
		neck="Deviant Necklace",
		waist="Salire Belt",
		left_ear="Hecate's Earring",
		right_ear="Friomisi Earring",
		left_ring="Shiva Ring",
		right_ring="Acumen Ring",
		back={ name="Cornflower Cape", augments={'MP+30','DEX+5','Accuracy+1','Blue Magic skill +10',}}}
    -- Breath Spells --
    
    sets.midcast['Blue Magic'].Breath = {
		ammo="Mavi Tathlum",
		head={ name="Amalric Coif", augments={'MP+60','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
		body={ name="Samnuha Coat", augments={'Mag. Acc.+10','"Mag.Atk.Bns."+9','"Fast Cast"+2',}},
		hands={ name="Amalric Gages", augments={'INT+10','Mag. Acc.+15','"Mag.Atk.Bns."+15',}},
		legs={ name="Amalric Slops", augments={'MP+60','"Mag.Atk.Bns."+20','Enmity-5',}},
		feet={ name="Amalric Nails", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Conserve MP"+6',}},
		neck="Deviant Necklace",
		waist="Salire Belt",
		left_ear="Hecate's Earring",
		right_ear="Friomisi Earring",
		left_ring="Shiva Ring",
		right_ring="Acumen Ring",
		back={ name="Cornflower Cape", augments={'MP+30','DEX+5','Accuracy+1','Blue Magic skill +10',}}}
    -- Other Types --
    
    sets.midcast['Blue Magic'].Stun = set_combine(sets.midcast['Blue Magic'].MagicAccuracy,
        {waist="Chaac Belt"})
	
	sets.midcast['Blue Magic'].Dark = set_combine(sets.midcast['Blue Magic'].MagicAccuracy,{
		head="Pixie Hairpin +1",
		waist="Chaac Belt"
		--left_ring="Archon Ring"
	})
        
    sets.midcast['Blue Magic']['White Wind'] = {}
    sets.midcast['Blue Magic'].Healing = {
		ammo="Mavi Tathlum",
		head={ name="Luh. Keffiyeh +1", augments={'Enhances "Convergence" effect',}},
		body="Hashishin Mintan +1",
		hands="Hegira Wristbands",
		legs={ name="Luhlaza Shalwar +1", augments={'Enhances "Assimilation" effect',}},
		feet="Hashi. Basmak +1",
		neck="Sanctity Necklace",
		left_ear="Lifestorm Earring",
		right_ear="Loquac. Earring",
		left_ring="Levia. Ring +1",
		right_ring="Sirona's Ring",
		back="Pahtli Cape"}
    sets.midcast['Blue Magic'].SkillBasedBuff = {
		ammo="Mavi Tathlum",
        head="Luh. Keffiyeh +1",
        body="Assimilator's Jubbah",
		legs="Hashishin Tayt +1",
		feet="Luhlaza Charuqs",
        back="Cornflower Cape"}
    sets.midcast['Blue Magic'].Buff = {}
    
    sets.midcast.Protect = {left_ring="Sheltered Ring"}
    sets.midcast.Protectra = {left_ring="Sheltered Ring"}
    sets.midcast.Shell = {left_ring="Sheltered Ring"}
    sets.midcast.Shellra = {left_ring="Sheltered Ring"}
    
    
    
    -- Sets to return to when not performing an action.
    -- Gear for learning spells: +skill and AF hands.
    sets.Learning = {ammo="Mavi Tathlum",hands="Assimilator's Bazubands"}
        --head="Luhlaza Keffiyeh",  
        --body="Assimilator's Jubbah",hands="Assimilator's Bazubands +1",
        --back="Cornflower Cape",legs="Mavi Tayt +2",feet="Luhlaza Charuqs"}
    sets.latent_refresh = {waist="Fucho-no-obi"}
    -- Resting sets
    sets.resting = {
        --head="Ocelomeh Headpiece +1",
		--neck="Wiglen Gorget",
        body="Assimilator's Jubbah +1",
		hands="Serpentes Cuffs",
		feet="Chelona Boots +1",
		--waist="Austerity Belt",
		left_ring="Sheltered Ring",
		right_ring="Paguroidea Ring"}
    
    -- Idle sets
    sets.idle = {
		ammo="Jukukik Feather",
		head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+15',}},
		body="Assimilator's Jubbah +1",
		hands={ name="Adhemar Wristbands", augments={'DEX+10','AGI+10','Accuracy+15',}},
		legs={ name="Herculean Trousers", augments={'Accuracy+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Asperity Necklace",
		waist="Windbuffet Belt +1",
		left_ear="Cessance Earring",
		right_ear="Brutal Earring",
		left_ring="Epona's Ring",
		right_ring="Petrov Ring",
		back="Buquwik Cape"}
		
		
		--ammo="Impatiens",
        --head="Whirlpool Mask",
        --body="Hagondes Coat",
		--hands="Serpentes Cuffs",
		--legs="Crimson Cuisses",
		--feet="Serpentes Sabots",
		--neck="Wiglen Gorget",
		--waist="Flume Belt",
		--left_ear="Bloodgem Earring",
		--right_ear="Loquacious Earring",
		--left_ring="Defending Ring",
		--right_ring="Paguroidea Ring",
        --back="Shadow Mantle"}
    --[[sets.idle.PDT = {
		ammo="Impatiens",
        head="Whirlpool Mask",neck="Wiglen Gorget",left_ear="Bloodgem Earring",right_ear="Loquacious Earring",
        body="Hagondes Coat",hands="Iuitl Wristbands",left_ring="Defending Ring",right_ring="Paguroidea Ring",
        back="Shadow Mantle",waist="Flume Belt",legs="Crimson Cuisses",feet="Iuitl Gaiters +1"}
    sets.idle.Town = {
		ammo="Impatiens",
        head="Mavi Kavuk +2",neck="Wiglen Gorget",left_ear="Bloodgem Earring",right_ear="Loquacious Earring",
        body="Luhlaza Jubbah",hands="Assimilator's Bazubands +1",left_ring="Sheltered Ring",right_ring="Paguroidea Ring",
        back="Atheling Mantle",waist="Flume Belt",legs="Crimson Cuisses",feet="Luhlaza Charuqs"}]]
    sets.idle.Learning = set_combine(sets.idle, sets.Learning)
    
    -- Defense sets
    sets.defense.PDT = {	
		ammo="Iron Gobbet",
        head="Whirlpool Mask",
		body="Iuitl Vest",
		hands="Iuitl Wristbands",
		legs="Nahtirah Trousers",
		feet="Iuitl Gaiters +1",
		neck="Wiglen Gorget",
		waist="Flume Belt",
		--left_ear="Bloodgem Earring",
		--left_ring="Defending Ring",
		--right_ring=gear.DarkRing.physical,
        back="Shadow Mantle"}
    sets.defense.MDT = {
		ammo="Demonry Stone",
        head="Whirlpool Mask",
        body="Hagondes Coat",
		hands="Iuitl Wristbands",
		legs="Nahtirah Trousers",
		feet="Iuitl Gaiters +1",
		neck="Twilight Torque",
		waist="Flume Belt",
		left_ear="Bloodgem Earring",
		left_ring="Defending Ring",
		right_ring="Shadow Ring",
        back="Engulfer Cape"}
    sets.Kiting = {	back={ name="Mecisto. Mantle", augments={'Cap. Point+32%','Rng.Atk.+3','DEF+11',}}}
    -- Engaged sets
    -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
    -- sets if more refined versions aren't defined.
    -- If you create a set with both offense and defense modes, the offense mode should be first.
    -- EG: sets.engaged.Dagger.Accuracy.Evasion
    
    -- Normal melee group
    sets.engaged = {
		ammo="Jukukik Feather",
		head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+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+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Asperity Necklace",
		waist="Windbuffet Belt +1",
		left_ear="Cessance Earring",
		right_ear="Brutal Earring",
		left_ring="Epona's Ring",
		right_ring="Petrov Ring",
		back="Buquwik Cape"}
    sets.engaged.Acc = {
		ammo="Jukukik Feather",
		head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+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+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Asperity Necklace",
		waist="Windbuffet Belt +1",
		left_ear="Cessance Earring",
		right_ear="Zennaroi Earring",
		left_ring="Epona's Ring",
		right_ring="Petrov Ring",
		back="Buquwik Cape"}
    sets.engaged.Refresh = {
		ammo="Jukukik Feather",
		head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+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="Amalric Slops", augments={'MP+60','"Mag.Atk.Bns."+20','Enmity-5',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Asperity Necklace",
		waist="Windbuffet Belt +1",
		left_ear="Cessance Earring",
		right_ear="Brutal Earring",
		left_ring="Epona's Ring",
		right_ring="Petrov Ring",
		back="Buquwik Cape"}
    sets.engaged.DW = {
		ammo="Jukukik Feather",
		head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+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+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Asperity Necklace",
		waist="Windbuffet Belt +1",
		left_ear="Cessance Earring",
		right_ear="Brutal Earring",
		left_ring="Epona's Ring",
		right_ring="Petrov Ring",
		back="Buquwik Cape"}
    sets.engaged.DW.Acc = {
		ammo="Jukukik Feather",
		head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+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+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Asperity Necklace",
		waist="Windbuffet Belt +1",
		left_ear="Cessance Earring",
		right_ear="Zennaroi Earring",
		left_ring="Epona's Ring",
		right_ring="Petrov Ring",
		back="Buquwik Cape"}
    sets.engaged.DW.Refresh = {
		ammo="Jukukik Feather",
		head={ name="Adhemar Bonnet", augments={'STR+10','DEX+10','Attack+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+23 Attack+23','"Store TP"+1','DEX+6','Accuracy+15',}},
		feet={ name="Adhemar Gamashes", augments={'STR+10','DEX+10','Attack+15',}},
		neck="Asperity Necklace",
		waist="Windbuffet Belt +1",
		left_ear="Cessance Earring",
		right_ear="Brutal Earring",
		left_ring="Epona's Ring",
		right_ring="Petrov Ring",
		back="Buquwik Cape"}
    sets.engaged.Learning = set_combine(sets.engaged, sets.Learning)
    sets.engaged.DW.Learning = set_combine(sets.engaged.DW, sets.Learning)
    sets.self_healing = {left_ring="Kunaji Ring",right_ring="Asklepian Ring"}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
    if unbridled_spells:contains(spell.english) and not state.Buff['Unbridled Learning'] then
        eventArgs.cancel = true
        windower.send_command('@input /ja "Unbridled Learning" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
    end
end
-- Run after the default midcast() is done.
-- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
function job_post_midcast(spell, action, spellMap, eventArgs)
    -- Add enhancement gear for Chain Affinity, etc.
    if spell.skill == 'Blue Magic' then
        for buff,active in pairs(state.Buff) do
            if active and sets.buff[buff] then
                equip(sets.buff[buff])
            end
        end
        if spellMap == 'Healing' and spell.target.type == 'SELF' and sets.self_healing then
            equip(sets.self_healing)
        end
    end
    -- If in learning mode, keep on gear intended to help with that, regardless of action.
    if state.OffenseMode.value == 'Learning' then
        equip(sets.Learning)
    end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
    if state.Buff[buff] ~= nil then
        state.Buff[buff] = gain
    end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Custom spell mapping.
-- Return custom spellMap value that can override the default spell mapping.
-- Don't return anything to allow default spell mapping to be used.
function job_get_spell_map(spell, default_spell_map)
    if spell.skill == 'Blue Magic' then
        for category,spell_list in pairs(blue_magic_maps) do
            if spell_list:contains(spell.english) then
                return category
            end
        end
    end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
    if player.mpp < 51 then
        set_combine(idleSet, sets.latent_refresh)
    end
    return idleSet
end
-- Called by the 'update' self-command, for common needs.
-- Set eventArgs.handled to true if we don't want automatic equipping of gear.
function job_update(cmdParams, eventArgs)
    update_combat_form()
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
function job_handle_equipping_gear(playerStatus, eventArgs)    	
    if player.equipment.back == 'Mecisto. Mantle' or player.equipment.back == 'Aptitude Mantle' or player.equipment.back == 'Aptitude Mantle +1' or player.equipment.back == 'Nexus Cape' then
        disable('back')
    else
        enable('back')
    end
        if player.equipment.ring1 == 'Warp Ring' or player.equipment.ring1 == 'Vocation Ring' or player.equipment.ring1 == 'Capacity Ring' then
        disable('ring1')
    else
        enable('ring1')
    end
    if player.equipment.ring2 == 'Warp Ring' or player.equipment.ring2 == 'Vocation Ring' or player.equipment.ring2 == 'Capacity Ring' then
        disable('ring2')
    else
        enable('ring2')
    end
	    if player.equipment.range == 'Soultrapper' then
        disable('range')
    else
        enable('range')
    end
		if player.equipment.ammo == 'Blank Soulplate' then
        disable('ammo')
    else
        enable('ammo')
    end
end
function update_combat_form()
    -- Check for H2H or single-wielding
    if player.equipment.sub == "Genbu's Shield" or player.equipment.sub == 'empty' then
        state.CombatForm:reset()
    else
        state.CombatForm:set('DW')
    end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
    -- Default macro set/book
    if player.sub_job == 'WAR' then
        set_macro_page(1, 9)
	elseif player.sub_job == 'RDM' then
        set_macro_page(1, 9)
    else
        set_macro_page(1, 9)
    end
end
 
            
            
                
			
			By Brynach 2016-12-04 23:15:28			
			
						
                     
                 Hey all 
Ive been working on creating a lua for WAR, and i've run into a small issue where Mighty Strikes is concerned. I am attempting to set my lua up so that certain crit dmg gear is equipped for weaponskill while MS is active. As of yet, I haven't been able to figure it out. Any help would be appreciated. 
 Code   -- Mighty Strikes WS Set --
    sets.MS_WS = {ammo="Yetshila", feet="Boii Calligae +1"}
function job_post_precast(spell, action, spellMap, eventArgs)
	if spell.type == 'WeaponSkill' then
		if world.time >= (17*60) or world.time <= (7*60) then
			equip({ear1="Lugra Earring +1",ear2="Lugra Earring"})
		end
		if moonshade_WS:contains(spell.english) and player.tp<2950 then	
			equip({ear2="Moonshade Earring"})
		end
		if buffactive ['Mighty Strikes'] then --Equip MS_WS set when you have Mighty Strikes on --
		equipset = set_combine(equipSet, sets.MS_WS)
		end
	end
end
Its apparent that the buffactive portion of my rule is totally missing the mark, but im not sure what else to use to fix.
 
Thanks for any help                                     
            
                
                     Odin.Lygre
                                                    
                                                                            
                                Server: Odin Game: FFXI Posts: 89 
                
			
			By Odin.Lygre 2016-12-05 05:49:58			
			
						
                     
                 Code  -- Mighty Strikes WS Set --
    sets.MS_WS = {ammo="Yetshila", feet="Boii Calligae +1"}
 
function job_post_precast(spell, action, spellMap, eventArgs)
    if spell.type == 'WeaponSkill' then
        if world.time >= (17*60) or world.time <= (7*60) then
            equip({ear1="Lugra Earring +1",ear2="Lugra Earring"})
        end
        if moonshade_WS:contains(spell.english) and player.tp<2950 then  
            equip({ear2="Moonshade Earring"})
        end
        if buffactive['Mighty Strikes'] then 
            if sets.precast.WS[spell] then
                equipSet = sets.precast.WS[spell]
                equipSet = set_combine(equipSet,sets.MS_WS)
                equip(equipSet)
            else
                equipSet = sets.precast.WS
                equipSet = set_combine(equipSet,sets.MS_WS)
                equip(equipSet)
            end
        end
    end
end
This should work. Sorry, have a lot going on and don't have time to test right now.                                     
            
            
                
			
			By Brynach 2016-12-05 08:43:30			
			
						
                     
                 Nah man, no need for apologies. Thanks for checking this out. 
 I tested ws with MS up and this pulled in the gear as designed.
 
 Thanks again
 
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Asura Game: FFXI Posts: 34 
                
			
			By Asura.Taruranto 2016-12-05 13:31:50			
			
						
                     
                 I figured I'll ask here: Code  if spell.element == world.day_element then
            equip(sets.midcast['Elemental Magic'], {right_ring="Zodiac ring"})
end
if spell.element == 'Earth' then
            equip(sets.midcast['Elemental Magic'], {neck="Quanpur Necklace"})
end
This is fine and dandy, and it works, but the problem is that I end up casting in these all the time, even for the MB and Accuracy sets. How the heck do I make so that it only works with the default nuke set and not the acc and mb one?
 
Basically I need to tell GS to only use these in  sets.midcast['Elemental Magic']  but not in  sets.midcast['Elemental Magic'].Resistant  and sets.midcast['Elemental Magic'].MB. How do I accomplish that? :(                                     
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Asura Game: FFXI Posts: 115 
                
			
			By Asura.Pintseyes 2016-12-05 14:42:13			
			
						
                     
                 function job_post_midcast(spell, action, spellMap, eventArgs)if spell.skill == 'Elemental Magic' and spell.element == world.day_element or spell.element == world.weather_element then
 equip(sets.Obi)
 end
 
 Sets.obi defines my day/weather items. Obi,Zodiac,Cape
 
 As far as sets.MB go. I use a toggle mode to turn on MB set, four items make up my mb set, rest is stored in midcast.Elemagic. If I'm not mistaking, Resistant is also a toggled mode. GS doesn't swap to MB or resistant based off events happening ingame, those are toggled on/off, gotta tell gs youre fighting something resistant or youre about to mb, turn those modes on.
 
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Asura Game: FFXI Posts: 34 
                
			
			By Asura.Taruranto 2016-12-05 15:58:36			
			
						
                     
                 function job_post_midcast(spell, action, spellMap, eventArgs)if spell.skill == 'Elemental Magic' and spell.element == world.day_element or spell.element == world.weather_element then
 equip(sets.Obi)
 end
 
 Sets.obi defines my day/weather items. Obi,Zodiac,Cape
 
 As far as sets.MB go. I use a toggle mode to turn on MB set, four items make up my mb set, rest is stored in midcast.Elemagic. If I'm not mistaking, Resistant is also a toggled mode. GS doesn't swap to MB or resistant based off events happening ingame, those are toggled on/off, gotta tell gs youre fighting something resistant or youre about to mb, turn those modes on.
I do have "modes", but they are like this:
 Code  state.CastingMode:options('Normal','Accuracy','MB')
and
 Code   -- Elemental Magic sets are default for handling low-tier nukes.
    sets.midcast['Elemental Magic'] = {
    main="Akademos",
    sub="Thrace strap",
    ammo="ghastly tathlum +1",
    head="Merlinic hood",
    body="Amalric doublet",
    hands="Jhakri cuffs +1",
    legs="Merlinic shalwar",
    feet="Amalric nails",
    neck="Eddy necklace",
    waist="Refoccilation stone",
    left_ear="Friomisi earring",
    right_ear="Barkarole earring",
    left_ring="Fenrir ring +1",
    right_ring="Weatherspoon Ring",
    back="Bookworm's cape",
    ammo="ghastly tathlum +1",
}
    sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'], {
    left_ear="Gwati earring",
    sub="Niobid strap",
    body="Amalric doublet",
    hands="Psycloth manillas",
    left_ring="Resonance ring",
    legs="Merlinic shalwar",
    feet="Arbatel Loafers +1",
    neck="Incanter's torque",
    ammo="Kalboron stone",
 
  })
sets.midcast['Elemental Magic'].MB = set_combine(sets.midcast['Elemental Magic'], {
    body="Amalric doublet",
    feet="Jhakri pigaches +1",
    legs="Merlinic shalwar",
    neck="Mizukage-no-Kubikazari",
    left_ear="Friomisi earring",
    right_ear="Barkarole earring",
    left_ring="Locus Ring",
    right_ring="Mujin band",
})
    -- Custom refinements for certain nuke tiers
    sets.midcast['Elemental Magic'].HighTierNuke = sets.midcast['Elemental Magic'] 
    sets.midcast['Elemental Magic'].HighTierNuke.Resistant = set_combine(sets.midcast['Elemental Magic'], {
    left_ear="Gwati earring",
    body="Amalric doublet",
    legs="Merlinic shalwar",
    feet="Jhakri pigaches +1",
    neck="Incanter's torque",
    left_ring="Resonance ring",
    ammo="Kalboron stone",
})
    sets.midcast['Elemental Magic'].HighTierNuke.MB = set_combine(sets.midcast['Elemental Magic'], {
    body="Amalric doublet",
    feet="Jhakri pigaches +1",
    legs="Merlinic shalwar",
    neck="Mizukage-no-Kubikazari",
    right_ear="Barkarole earring",
    left_ear="Friomisi earring",
    left_ring="Locus Ring",
    right_ring="Mujin band",
})
So no on/off button.  I switch them with ctrl+ff11. There is just no way to refer
 Code  
function job_post_midcast(spell, action, spellMap, eventArgs)
	if spell.skill == 'Elemental Magic' and spell.element == world.day_element or spell.element == world.weather_element then
		equip(sets.Obi)
	end
specifically to "normal"
 
with my current setup?                                     
            
                
                     Odin.Lygre
                                                    
                                                                            
                                Server: Odin Game: FFXI Posts: 89 
                
			
			By Odin.Lygre 2016-12-06 14:02:22			
			
						
                     
                 Code  if state.CastingMode.value == 'Normal' then
	if spell.element == world.day_element then
		equip(sets.midcast['Elemental Magic'], {right_ring="Zodiac ring"})
	end
	if spell.element == 'Earth' then
		equip(sets.midcast['Elemental Magic'], {neck="Quanpur Necklace"})
	end
end
I think this is what you're looking for.                                     
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Asura Game: FFXI Posts: 34 
                
			
			By Asura.Taruranto 2016-12-08 16:02:43			
			
						
                     
                 Code  if state.CastingMode.value == 'Normal' then
	if spell.element == world.day_element then
		equip(sets.midcast['Elemental Magic'], {right_ring="Zodiac ring"})
	end
	if spell.element == 'Earth' then
		equip(sets.midcast['Elemental Magic'], {neck="Quanpur Necklace"})
	end
end
I think this is what you're looking for.
Perfect, thanks a lot!                                     
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Odin Game: FFXI Posts: 42 
                
			
			By Odin.Psycooo 2016-12-10 17:15:21			
			
						
                     
                 I just realized my cancel buff copy image isn't working. I was hoping to make shadows cancel each other and place utsusemi and stoneskin in a toggle for +enmity in the event I am tanking on rdm. (surprisingly more often than I thought would be possible up to tanking maju on rdm now, only 145 or higher nm I have tried so far) This way I can spam shadows and stoneskin, build hate and take minimal dmg. Code  -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job.  Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
  
-- Initialization function for this job file.
function get_sets()
    mote_include_version = 2
  
    -- Load and initialize the include file.
    include('Mote-Include.lua')
end
  
-- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
function job_setup()
    determine_haste_group()
    update_combat_form()
    LowNukes = S{'Stone' , 'Aero' , 'Blizzard' , 'Fire' , 'Water' , 'Thunder' , 
                'Stone II' , 'Aero II' , 'Blizzard II' , 'Fire II' , 'Water II' , 'Thunder II',
                'Stonega' , 'Aeroga' , 'Blizzaga' , 'Firaga' , 'Waterga' , 'Thundaga',
                'Stonega II' , 'Aeroga II' , 'Blizzaga II' , 'Firaga II' , 'Waterga II' , 'Thundaga II'}
    MndEnfeebles = S{'Slow' , 'Silence' , 'Paralyze' , 'Addle' , 'Slow II' , 'Paralyze II' , 'Addle II'}
    IntEnfeebles = S{'Bind' , 'Break' , 'Gravity' , 'Poison' , 'Sleep' , 'Gravity II' , 'Poison II' , 'Sleep II'}
 
    state.Buff.Saboteur = buffactive.saboteur or false
end
  
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
  
-- Setup vars that are user-dependent.  Can override this function in a sidecar file.
function user_setup()
    state.OffenseMode:options('Normal', 'Mid', 'Acc')
    state.HybridMode:options('Normal', 'PDT', 'Evasion')
    state.CastingMode:options('Normal', 'Resistant')
    state.IdleMode:options('Normal', 'PDT', 'MDT')
  
    select_default_macro_book()
    gear.CureStaff = {name=""}
    gear.CureFeet = {name=""}
      
    state.MagicBurst = M(false, 'Magic Burst')
    state.CureHate = M(false, 'Cure Hate')
  
 
   
    send_command('bind !` gs c toggle MagicBurst')
    send_command('bind ^` gs c toggle CureHate')
   
end
  
  
-- Define sets and vars used by this job file.
function init_gear_sets()
    --------------------------------------
    -- Start defining the sets
    --------------------------------------
 
    -- Precast Sets
    -- Precast sets to enhance JAs
    sets.precast.JA['Chainspell'] = {body="Vitivation Tabard +1"}
      
  
    -- Waltz set (chr and vit)
    sets.precast.Waltz = {}
  
    -- Don't need any special gear for Healing Waltz.
    sets.precast.Waltz['Healing Waltz'] = {}
  
    -- Fast cast sets for spells
  
    -- 80% Fast Cast (including trait) for all spells, plus 5% quick cast
    -- No other FC sets necessary.
    sets.precast.FC = {}
  
    sets.precast.FC.Impact = set_combine(sets.precast.FC, {head=empty,body="Twilight Cloak"})
  
    -- Weaponskill sets
    -- Default set for any weaponskill that isn't any more specifically defined
    sets.precast.WS = {}
  
    sets.precast.WS['Circle Blade'] = set_combine(sets.precast.WS, {})
  
    sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS, {})
  
    sets.precast.WS['Requiescat'] = {}
  
    sets.precast.WS['Aeolian Edge'] = set_combine(sets.precast.WS, {})
  
    sets.precast.WS['Savage Blade'] = {}
  
    sets.precast.WS['Chant du Cygne'] = {}
  
    sets.precast.WS['True Strike'] = {}
  
    sets.precast.WS['Exenterator'] = {}
  
    sets.precast.WS['Evisceration'] = {}
  
    sets.precast.WS['Death Blossom'] = {}
    
    -- Midcast Sets
    sets.midcast.Cure = {}
    
    sets.midcast.Curaga = sets.midcast.Cure
   
    sets.midcast.CureWeather = {}
   
    sets.midcast.CureSelf = {}
    
    sets.midcast.CureMelee = {}
    
    sets.midcast['Enhancing Magic'] = {} 
    
    sets.midcast['Enhancing Magic'].Temper = {}
      
    sets.midcast['Enhancing Magic'].RegenSelf = {}
    
    sets.midcast['Enhancing Magic'].RefreshSelf = {}
    
    sets.midcast['Enhancing Magic'].HasteSelf = {}
      
    sets.midcast['Enhancing Magic'].EnSpells = set_combine(sets.midcast['Enhancing Magic'],{})
    
    sets.midcast['Enhancing Magic'].GainSpells = set_combine(sets.midcast['Enhancing Magic'],{})
      
    sets.midcast['Enhancing Magic'].BarSpells = set_combine(sets.midcast['Enhancing Magic'],{})
       
    sets.buff.ComposureOther = {head="Lethargy Chappel +1",body="Lethargy Sayon +1",
        legs="Lethargy Fuseau +1",feet="Lethargy Houseaux +1"}
    
    sets.midcast.Protect = {}
      
    sets.midcast.Shell = sets.midcast.Protect
    
    sets.midcast['Enhancing Magic'].Phalanx = {}
    
    sets.midcast.Cursna = {}
    
    sets.midcast.Stoneskin = {}
    
    sets.midcast['Enfeebling Magic'] = {}
      
    sets.midcast.MndEnfeebles = {}
  
    sets.midcast.IntEnfeebles = {}
  
      
    sets.midcast.Blind = {}
      
    sets.midcast.ElementalEnfeeble = sets.midcast.IntEnfeebles
      
    sets.midcast.Distract = {}
  
    sets.midcast.Frazzle = {}
    
    sets.midcast['Distract II'] = sets.midcast.Distract
    sets.midcast['Distract III'] = sets.midcast.Distract
  
    sets.midcast['Frazzle II'] = {}
    sets.midcast['Frazzle III'] = sets.midcast.Frazzle
  
    
    sets.midcast['Dia III'] = set_combine(sets.midcast['Enfeebling Magic'], {head="Vitivation Chapeau +1"})
    sets.midcast['Slow II'] = set_combine(sets.midcast['Enfeebling Magic'], {head="Vitivation Chapeau +1"})
      
    sets.Lunge = {}
  
    sets.Convert = {main="Murgleis"}
      
    sets.midcast['Elemental Magic'] ={}
        
      
    sets.midcast['Elemental Magic']['Low'] = {}
        
    sets.midcast.Impact = set_combine(sets.midcast['Elemental Magic'], {head=empty,body="Twilight Cloak"})
    
    sets.midcast['Stun'] = {}
    
    sets.midcast.Drain = {}
            
    sets.midcast.Aspir = sets.midcast.Drain
              
    -- Sets to return to when not performing an action.
    
    -- Resting sets
    sets.resting = {}
    
    -- Idle sets
    sets.idle = {}
    
    sets.idle.Town = {}
    
    sets.idle.Weak = {}
    
    -- Defense sets
    sets.defense.PDT = {}
    
    sets.defense.MDT = {}
    
    sets.Kiting = {}
    
    sets.latent_refresh = {}
    
    -- Engaged sets
    
    -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
    -- sets if more refined versions aren't defined.
    -- If you create a set with both offense and defense modes, the offense mode should be first.
    -- EG: sets.engaged.Dagger.Accuracy.Evasion
    
    -- Normal melee group
    sets.engaged = {}
      
    sets.engaged.Mid = {}
  
    sets.engaged.Acc = {}   
               
    sets.engaged.Evasion = sets.engaged
    sets.engaged.Mid.Evasion = sets.engaged.Mid
    sets.engaged.Acc.Evasion = sets.engaged.Acc
      
    sets.engaged.PDT = sets.defense.PDT
    sets.engaged.Mid.PDT = sets.defense.MDT
    sets.engaged.Acc.PDT = sets.defense.PDT
  
          
    -- Haste 43%
    sets.engaged.Haste_43 = set_combine(sets.engaged, {})
    sets.engaged.Mid.Haste_43 = sets.engaged.Mid
    sets.engaged.Acc.Haste_43 = sets.engaged.Acc
    sets.engaged.Evasion.Haste_43 = sets.engaged.Haste_43
    sets.engaged.PDT.Haste_43 = sets.defense.PDT
  
    -- 40
    sets.engaged.Haste_40 = set_combine(sets.engaged.Haste_43, {})
    sets.engaged.Mid.Haste_40 = sets.engaged.Mid
    sets.engaged.Acc.Haste_40 = sets.engaged.Acc
    sets.engaged.Evasion.Haste_40 = sets.engaged.Haste_40
    sets.engaged.PDT.Haste_40 = sets.defense.PDT
  
    -- 30
    sets.engaged.Haste_30 = sets.engaged
    sets.engaged.Mid.Haste_30 = sets.engaged.Mid
    sets.engaged.Acc.Haste_30 = sets.engaged.Acc
    sets.engaged.Evasion.Haste_30 = sets.engaged
    sets.engaged.PDT.Haste_30 = sets.defense.PDT
  
        -- 25
    sets.engaged.Haste_25 = set_combine(sets.engaged.Haste_30, {})
    sets.engaged.Acc.Haste_25 = sets.engaged.Acc
    sets.engaged.Mid.Haste_25 = sets.engaged.Mid
    sets.engaged.Evasion.Haste_25 = sets.engaged
    sets.engaged.PDT.Haste_25 = sets.defense.PDT
  
     -- DW nin sub melee group
    sets.engaged.DW_nin = {}
      
    sets.engaged.DW_nin.Mid = {}
  
    sets.engaged.DW_nin.Acc = {}   
               
    sets.engaged.DW_nin.Evasion = sets.engaged.DW_nin
    sets.engaged.DW_nin.Mid.Evasion = sets.engaged.DW_nin.Mid
    sets.engaged.DW_nin.Acc.Evasion = sets.engaged.DW_nin.Acc
      
    sets.engaged.DW_nin.PDT = sets.defense.PDT
    sets.engaged.DW_nin.Mid.PDT = sets.defense.MDT
    sets.engaged.DW_nin.Acc.PDT = sets.defense.PDT
  
          
    -- Haste 43%
    sets.engaged.DW_nin.Haste_43 = set_combine(sets.engaged.DW_nin, {})
    sets.engaged.DW_nin.Mid.Haste_43 = sets.engaged.DW_nin.Mid
    sets.engaged.DW_nin.Acc.Haste_43 = sets.engaged.DW_nin.Acc
    sets.engaged.DW_nin.Evasion.Haste_43 = sets.engaged.DW_nin.Haste_43
    sets.engaged.DW_nin.PDT.Haste_43 = sets.defense.PDT
  
    -- 40
    sets.engaged.DW_nin.Haste_40 = set_combine(sets.engaged.DW_nin.Haste_43, {})
    sets.engaged.DW_nin.Mid.Haste_40 = sets.engaged.DW_nin.Mid
    sets.engaged.DW_nin.Acc.Haste_40 = sets.engaged.DW_nin.Acc
    sets.engaged.DW_nin.Evasion.Haste_40 = sets.engaged.DW_nin.Haste_40
    sets.engaged.DW_nin.PDT.Haste_40 = sets.defense.PDT
  
    -- 30
    sets.engaged.DW_nin.Haste_30 = {}
    sets.engaged.DW_nin.Mid.Haste_30 = sets.engaged.DW_nin.Mid
    sets.engaged.DW_nin.Acc.Haste_30 = sets.engaged.DW_nin.Acc
    sets.engaged.DW_nin.Evasion.Haste_30 = sets.engaged.DW_nin
    sets.engaged.DW_nin.PDT.Haste_30 = sets.defense.PDT
  
        -- 25
    sets.engaged.DW_nin.Haste_25 = set_combine(sets.engaged.DW_nin.Haste_30, {})
    sets.engaged.DW_nin.Acc.Haste_25 = sets.engaged.DW_nin.Acc
    sets.engaged.DW_nin.Mid.Haste_25 = sets.engaged.DW_nin.Mid
    sets.engaged.DW_nin.Evasion.Haste_25 = sets.engaged.DW_nin
    sets.engaged.DW_nin.PDT.Haste_25 = sets.defense.PDT
 
     -- DW dnc sub melee group
    sets.engaged.DW_dnc = {}
      
    sets.engaged.DW_dnc.Mid = {}
  
    sets.engaged.DW_dnc.Acc = {}   
               
    sets.engaged.DW_dnc.Evasion = sets.engaged.DW_dnc
    sets.engaged.DW_dnc.Mid.Evasion = sets.engaged.DW_dnc.Mid
    sets.engaged.DW_dnc.Acc.Evasion = sets.engaged.DW_dnc.Acc
      
    sets.engaged.DW_dnc.PDT = sets.defense.PDT
    sets.engaged.DW_dnc.Mid.PDT = sets.defense.MDT
    sets.engaged.DW_dnc.Acc.PDT = sets.defense.PDT
  
          
    -- Haste 43%
    sets.engaged.DW_dnc.Haste_43 = set_combine(sets.engaged.DW_dnc, {})
    sets.engaged.DW_dnc.Mid.Haste_43 = sets.engaged.DW_dnc.Mid
    sets.engaged.DW_dnc.Acc.Haste_43 = sets.engaged.DW_dnc.Acc
    sets.engaged.DW_dnc.Evasion.Haste_43 = sets.engaged.DW_dnc.Haste_43
    sets.engaged.DW_dnc.PDT.Haste_43 = sets.defense.PDT
  
    -- 40
    sets.engaged.DW_dnc.Haste_40 = set_combine(sets.engaged.DW_dnc.Haste_43, {})
    sets.engaged.DW_dnc.Mid.Haste_40 = sets.engaged.DW_dnc.Mid
    sets.engaged.DW_dnc.Acc.Haste_40 = sets.engaged.DW_dnc.Acc
    sets.engaged.DW_dnc.Evasion.Haste_40 = sets.engaged.DW_dnc.Haste_40
    sets.engaged.DW_dnc.PDT.Haste_40 = sets.defense.PDT
  
    -- 30
    sets.engaged.DW_dnc.Haste_30 = sets.engaged.DW_dnc
    sets.engaged.DW_dnc.Mid.Haste_30 = sets.engaged.DW_dnc.Mid
    sets.engaged.DW_dnc.Acc.Haste_30 = sets.engaged.DW_dnc.Acc
    sets.engaged.DW_dnc.Evasion.Haste_30 = sets.engaged.DW_dnc
    sets.engaged.DW_dnc.PDT.Haste_30 = sets.defense.PDT
  
        -- 25
    sets.engaged.DW_dnc.Haste_25 = set_combine(sets.engaged.DW_dnc.Haste_30, {})
    sets.engaged.DW_dnc.Acc.Haste_25 = sets.engaged.DW_dnc.Acc
    sets.engaged.DW_dnc.Mid.Haste_25 = sets.engaged.DW_dnc.Mid
    sets.engaged.DW_dnc.Evasion.Haste_25 = sets.engaged.DW_dnc
    sets.engaged.DW_dnc.PDT.Haste_25 = sets.defense.PDT
  
  
     
    sets.magic_burst = {}
      
    sets.cure_hate = {}
          
    sets.Enmity = {}
          
    -- Sets for special buff conditions on spells.
    sets.buff.Saboteur = {hands="Lethargy Gantherots +1"}
end
  
  
              
              
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
   
function job_precast(spell, action, spellMap, eventArgs)
    if spell.skill == 'Healing Magic' and spellMap ~= 'StatusRemoval' then
        gear.CureFeet.name = "Vanya Clogs"
        if player.status == 'Engaged' then
            gear.default.obi_back = { name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Cure" potency +10%',}}
            if spell.target.type == 'SELF' then
                gear.CureFeet.name = "Medium's Sabots"
            else
                gear.CureFeet.name = "Vanya Clogs"
            end
        else
            gear.default.obi_back = { name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Cure" potency +10%',}}
        end
        if spell.target.type == 'SELF' then
            gear.default.obi_waist = "Chuq'aba Belt"
        else
            gear.default.obi_waist = "Salire belt"
        end
        if world.weather_element == 'Light' then
            gear.CureStaff.name = "Chatoyant Staff"
        else
            gear.CureStaff.name = "Serenity"
        end
        else
        gear.default.obi_waist = "Salire belt"
        gear.default.obi_back = { name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Cure" potency +10%',}}
    end
        if spell.name == 'Lunge' or spell.name == 'Swipe' then
            equip(sets.Lunge)
            end
        if spell.name == 'Vallation' then
            equip(sets.Enmity)
        end  
        if spell.name == 'Pflug' then
            equip(sets.Enmity)
        end
        if spell.name == 'Warcry' 
        or spell.name == 'Swordplay' or spell.name == 'Rayke' or spell.name == 'Meditate' or spell.name == 'Provoke' then   
            equip(sets.Enmity)
        end
        --prevents casting Utsusemi if you already have 3 or more shadows
        if spell.name == 'Utsusemi: Ichi' and ShadowType == 'Ni' and (buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)']) then
            cancel_spell()
        end
        if buffactive['terror'] or buffactive['petrification'] or buffactive['stun'] or buffactive['sleep'] then
            if TP_ind == 4 then
                equip(sets.defense.MDT) else
                equip(sets.defense.PDT)
            end
        end
        if spell.name == 'Convert' then
            equip(sets.Convert)
        end
    if (spell.type:endswith('Magic') or spell.type == "Ninjutsu") and buffactive.silence then -- Auto Use Echo Drops If You Are Silenced --
        cancel_spell()
        send_command('input /item "Echo Drops" <me>')
    end 
end      
  
  
   
-- Run after the default midcast() is done.
-- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
function job_post_midcast(spell, action, spellMap, eventArgs)
    if spell.skill == 'Enfeebling Magic' and state.Buff.Saboteur then
        equip(sets.buff.Saboteur)
    elseif spell.skill == 'Enhancing Magic' and not spell.english == 'Stoneskin' then
        equip(sets.midcast.EnhancingDuration)
        if buffactive.composure and spell.target.type == 'PLAYER' then
            equip(sets.buff.ComposureOther)
        end
    elseif spellMap == 'Cure' then
        if spell.target.type == 'SELF' then
            equip(sets.midcast.CureSelf)
        end
        if state.CureHate.value then
            equip(sets.cure_hate)
        end
        if world.weather_element == 'Light' then
            equip(sets.midcast.CureWeather)
        end
    elseif spell.skill == 'Elemental Magic' then
        if state.MagicBurst.value then
            equip(sets.magic_burst)
        end
        if spell.element == world.day_element or spell.element == world.weather_element then
            equip({waist="Hachirin-no-Obi"})
        end
    elseif spell.skill == "Ninjutsu" then
            equip(sets.midcast.Recast)
            if spell.name == 'Utsusemi: Ichi' and ShadowType == 'Ni' then
                if buffactive['Copy Image'] then
                    windower.ffxi.cancel_buff(66)
                elseif buffactive['Copy Image (2)'] then
                    windower.ffxi.cancel_buff(444)
                elseif buffactive['Copy Image (3)'] then
                    windower.ffxi.cancel_buff(445)
                elseif buffactive['Copy Image (4+)'] then
                    windower.ffxi.cancel_buff(446)
            end
        elseif spell.name == 'Monomi: Ichi' and buffactive.Sneak and spell.target.type == 'SELF' then
            windower.ffxi.cancel_buff(71)
        end
    end
    if spell.name == 'Foil' or spell.name == 'Flash' or spell.name == 'Blank Gaze'
        or spell.name == 'Geist Wall' or spell.name == 'Poison Breath' or spell.name == 'Jettatura'
        or spell.name == 'Cocoon' or spell.name == 'Soporific' or spell.name == 'Sheep Song' 
        or spell.name == 'Refueling' then 
        equip(sets.Enmity)
    end
end
      
      
  
function job_get_spell_map(spell, default_spell_map)
    if spell.action_type == 'Magic' then
        if spell.skill == 'Enhancing Magic' then
            if spell.english:startswith('En') then
                return 'EnSpells'
            elseif spell.english:startswith('Gain') then
                return 'GainSpells'
            elseif spell.english:startswith('Phalanx') then
                return 'Phalanx'
            elseif spell.english:startswith('Bar') then
                return 'Bar'
            elseif spell.english:startswith('Temper') then
                return 'Temper'
            elseif spell.english:startswith('Haste') then
                if spell.target.type == 'SELF' then
                return 'HasteSelf'
                end
            elseif spell.english:startswith('Refresh') then
                if spell.target.type == 'SELF' then
                return 'RefreshSelf'
                end
            end
        elseif default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
            if player.status == 'Engaged' then
                return "CureMelee"
            end
        end
        if spell.action_type == 'Magic' then
            if spell.skill == 'Enfeebling Magic' then
                if spell.type == 'WhiteMagic' then
                    return 'MndEnfeebles'
                else
                    return 'IntEnfeebles'
                end
            elseif spell.skill == 'Elemental Magic' then
                if LowNukes:contains(spell.name) then
                    return 'Low'
                else
                    return
                end
                  
            end
        end
    end
end
  
    
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
    
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
    determine_haste_group()
    handle_equipping_gear(player.status)
end
    
    -------------------------------------------------------------------------------------------------------------------
    -- General hooks for change events.
    -------------------------------------------------------------------------------------------------------------------
  
    -- Called when a player gains or loses a buff.
    -- buff == buff gained or lost
    -- gain == true if the buff was gained, false if it was lost.
    function job_buff_change(buff, gain)
        -- If we gain or lose any haste buffs, adjust which gear set we target.
        if S{'haste','march', 'madrigal','embrava','haste samba','mighty guard'}:contains(buff:lower()) then
            determine_haste_group()
            handle_equipping_gear(player.status)
        end
        if state.Buff[buff] ~= nil then
            state.Buff[buff] = gain
            -- if not midaction() then
                handle_equipping_gear(player.status)
            -- end
        end
    end
  
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
    
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
    if player.mpp < 51 then
        idleSet = set_combine(idleSet, sets.latent_refresh)
    end
    return idleSet
end
    
-- function customize_melee_set(meleeSet)
--     if player.sub_job == 'DNC' or player.sub_job == 'NIN' then
--         meleeSet = set_combine(meleeSet, sets.engaged.DW)
--     end
--     return meleeSet
-- end 
 
 
function update_combat_form()
    -- Check for H2H or single-wielding
    if player.equipment.sub == 'empty' then
        state.CombatForm:reset()
    end
    if S{'Culminus','Genmei Shield'}:contains(player.equipment.sub) then
        state.CombatForm:reset()
    elseif player.sub_job == 'NIN' then
        state.CombatForm:set('DW_nin')
    elseif player.sub_job == 'DNC' then
        state.CombatForm:set('DW_dnc')
    end     
end
 
function job_update(cmdParams, eventArgs)
    update_combat_form()
    determine_haste_group()
end
 
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
    display_current_caster_state()
    eventArgs.handled = true
end
    
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
    function determine_haste_group()
  
        classes.CustomMeleeGroups:clear()
        -- assuming +4 for marches (ghorn has +5)
        -- Haste (white magic) 15%
        -- Haste Samba (Sub) 5%
        -- Haste (Merited DNC) 10% (never account for this)
        -- Victory March +0/+3/+4/+5    9.4/14%/15.6%/17.1% +0
        -- Advancing March +0/+3/+4/+5  6.3/10.9%/12.5%/14%  +0
        -- Embrava 30% with 500 enhancing skill
        -- Mighty Guard - 15%
        -- buffactive[580] = geo haste
        -- buffactive[33] = regular haste
        -- buffactive[604] = mighty guard
        -- state.HasteMode = toggle for when you know Haste II is being cast on you
        -- Hi = Haste II is being cast. This is clunky to use when both haste II and haste I are being cast
       if ( ( (buffactive[33] or buffactive[580] or buffactive.embrava) and (buffactive.march or buffactive[604]) ) or
             ( buffactive[33] and (buffactive[580] or buffactive.embrava) ) or
             ( buffactive.march == 2 and buffactive[604] ) ) then
            add_to_chat(8, '-------------Haste 43%-------------')
            classes.CustomMeleeGroups:append('Haste_43')
        elseif buffactive.embrava and buffactive.haste then
            add_to_chat(8, '-------------Haste 40%-------------')
            classes.CustomMeleeGroups:append('Haste_40')
        elseif ( (buffactive[33] or buffactive.march == 2 or buffactive[580]) and buffactive['haste samba'] ) then
            add_to_chat(8, '-------------Haste 35%-------------')
            classes.CustomMeleeGroups:append('Haste_35')
        elseif ( ( buffactive[580] or buffactive[33] or buffactive.march == 2 ) or
                 ( buffactive.march == 1 and buffactive[604] ) ) then
            add_to_chat(8, '-------------Haste 30%-------------')
            classes.CustomMeleeGroups:append('Haste_30')
        elseif ( buffactive.march == 1 or buffactive[604] ) then
            add_to_chat(8, '-------------Haste 15%-------------')
            classes.CustomMeleeGroups:append('Haste_15')
        elseif ( buffactive[580] and ( buffactive.march or buffactive[33] or buffactive.embrava or buffactive[604]) ) or  -- geo haste + anything
           ( buffactive.embrava and (buffactive.march or buffactive[33] or buffactive[604]) ) or  -- embrava + anything
           ( buffactive.march == 2 and (buffactive[33] or buffactive[604]) ) or  -- two marches + anything
           ( buffactive[33] and buffactive[604] and buffactive.march ) then -- haste + mighty guard + any marches
            add_to_chat(8, '-------------Max Haste Mode Enabled--------------')
            classes.CustomMeleeGroups:append('Haste_43')
        elseif ( (buffactive[604] or buffactive[33]) and buffactive['haste samba'] and buffactive.march == 1) or -- MG or haste + samba with 1 march
               ( buffactive.march == 2 and buffactive['haste samba'] ) or
               ( buffactive[580] and buffactive['haste samba'] ) then 
            add_to_chat(8, '-------------Haste 35%-------------')
            classes.CustomMeleeGroups:append('Haste_35')
        elseif ( buffactive.march == 2 ) or -- two marches from ghorn
               ( (buffactive[33] or buffactive[604]) and buffactive.march == 1 ) or  -- MG or haste + 1 march
               ( buffactive[580] ) or  -- geo haste
               ( buffactive[33] and buffactive[604] ) then  -- haste with MG
            add_to_chat(8, '-------------Haste 30%-------------')
            classes.CustomMeleeGroups:append('Haste_30')
        elseif buffactive[33] or buffactive[604] or buffactive.march == 1 then
            add_to_chat(8, '-------------Haste 15%-------------')
            classes.CustomMeleeGroups:append('Haste_15')
        end
end
  
      
  
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
    -- Default macro set/book
    if player.sub_job == 'DNC' then
        set_macro_page(2, 4)
    elseif player.sub_job == 'WHM' then
        set_macro_page(3, 4)
    elseif player.sub_job == 'NIN' then
        set_macro_page(10, 4)
    elseif player.sub_job == 'THF' then
        set_macro_page(4, 4)
    elseif player.sub_job == 'BLM' then
        set_macro_page(5, 4)
    else
        set_macro_page(1, 4)
    end
end 
            
                
                     Asura.Patb
                                                    
                                                                            
                                Server: Asura Game: FFXI Posts: 88 
                
			
			By Asura.Patb 2016-12-13 22:32:45			
			
						
                     
                 Wondering if anyone can help me change my pup lua from setting petmode based on frame head, and turn it into a toggle on alt+f9.http://pastebin.com/RBw1wc84 Code  -------------------------------------------------------------------------------------------------------------------
-- Initialization function that defines sets and variables to be used.
-------------------------------------------------------------------------------------------------------------------
-- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
-- Initialization function for this job file.
function get_sets()
  mote_include_version = 2
  -- Load and initialize the include file.
  include('Mote-Include.lua')
end
include('organizer-lib')
-- Setup vars that are user-independent.
function job_setup()
  -- List of pet weaponskills to check for
  petWeaponskills = S{"Slapstick", "Knockout", "Magic Mortar",
    "Chimera Ripper", "String Clipper",  "Cannibal Blade", "Bone Crusher", "String Shredder",
    "Arcuballista", "Daze", "Armor Piercer", "Armor Shatterer"}
  -- Map automaton heads to combat roles
  petModes = {
    ['Harlequin Head'] = 'Melee',
    ['Sharpshot Head'] = 'Ranged',
    ['Valoredge Head'] = 'Tank',
    ['Stormwaker Head'] = 'Magic',
    ['Soulsoother Head'] = 'Tank',
    ['Spiritreaver Head'] = 'Nuke'
    }
  -- Subset of modes that use magic
  magicPetModes = S{'Nuke','Heal','Magic'}
  -- Var to track the current pet mode.
  state.PetMode = M{['description']='Pet Mode', 'None', 'Melee', 'Ranged', 'Tank', 'Magic', 'Heal', 'Nuke'}
  include('Mote-TreasureHunter')
end
-- Setup vars that are user-dependent.  Can override this function in a sidecar file.
function user_setup()
  -- Options: Override default values
  state.OffenseMode:options('Normal', 'Acc', 'Fodder')
  state.WeaponskillMode:options('Normal', 'Acc', 'Fodder')
  state.PhysicalDefenseMode:options('PDT', 'Evasion', "Pulling")
  state.MagicalDefenseMode:options('MDT')
  send_command('bind ^= gs c cycle treasuremode')
  update_pet_mode()
  select_default_macro_book()
end
-- Define sets used by this job file.
function init_gear_sets()
sets.Organizer = {
        main="Animator P",
        sub="Eminent Animator II",
        neck="Midnights",
		body="Ohtas",
    }
  sets.TreasureHunter = {waist="Chaac Belt"}
  -- Precast Sets
  -- Fast cast sets for spells
  sets.precast.FC = {
    head="Rawhide Mask",neck="Orunmila's Torque",ear1="Loquacious Earring",
    body="Anhur Robe",ring1="Veneficium Ring",ring2="Prolix Ring",
    back="Swith Cape",waist="Hurch'lan Sash",feet="Regal Pumps +1"
  }
  sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  -- Precast sets to enhance JAs
  sets.precast.JA['Tactical Switch'] = {feet="Karagoz Scarpe +1"}
  sets.precast.JA['Repair'] = {
    ammo="Automaton Oil +3",
    ear1="Guignol Earring",ear2="Pratik Earring",
    legs="Desultor Tassets",feet="Foire Bab. +1"
  }
  sets.precast.JA['Maintenance'] = {ammo="Automaton Oil"}
  sets.precast.JA.Maneuver = {neck="Buffoon's Collar",ear2="Burana Earring",body="Karagoz Farsetto",hands="Puppetry Dastanas",back="Visucius's Mantle"}
  -- Waltz set (chr and vit)
  sets.precast.Waltz = {
    ear1="Roundel Earring",
    body="Pitre Tobe +1",hands="Regimen Mittens",ring1="Spiral Ring",
    back="Refraction Cape",legs="Naga Hakama",feet="Dance Shoes"}
  -- Don't need any special gear for Healing Waltz.
  sets.precast.Waltz['Healing Waltz'] = {}
  -- Weaponskill sets
  -- Default set for any weaponskill that isn't any more specifically defined
  sets.precast.WS = {
    neck="Fotia Gorget",ear1="Bladeborn Earring",ear2="Steelflash Earring",
    ring1="Rajas Ring",ring2="Epona's Ring",
    back="Dispersal Mantle",waist="Fotia Belt",legs="Samnuha Tights",}
  -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  sets.precast.WS['Stringing Pummel'] = set_combine(sets.precast.WS, {
    ear1="Brutal Earring",ear2="Moonshade Earring",
    ring1="Spiral Ring"})
  sets.precast.WS['Victory Smite'] = set_combine(sets.precast.WS, {
    ear1="Brutal Earring",ear2="Moonshade Earring",
    ring1="Pyrosoul Ring"})
  -- Midcast Sets
  -- Midcast sets for pet actions
  sets.midcast.Pet.Cure = {
    head="Naga Somen",
    body="Naga Samue",hands="Regimen Mittens",ring1="Kunaji Ring",ring2="Thurandaut Ring",
    back="Refraction Cape",waist="Ukko Sash",legs="Naga Hakama",feet="Foire Bab. +1"}
  sets.midcast.Pet['Elemental Magic'] = {
    head="Rawhide Mask",
	neck="Deino Collar",
	ear1="Charivari Earring",
	ear2="Burana Earring",
    hands="Naga Tekko",
	ring1="",
	ring2="Thurandaut Ring",
    back="Argochampsa Mantle",
	waist="Ukko Sash",
	legs={ name="Herculean Trousers", augments={'Pet: "Mag.Atk.Bns."+29','Pet: "Store TP"+5','Pet: INT+10','Pet: Attack+9 Pet: Rng.Atk.+9',}},
    feet={ name="Herculean Boots", augments={'Pet: "Mag.Atk.Bns."+23','Pet: "Dbl.Atk."+1 Pet: Crit.hit rate +1','Pet: INT+7','Pet: Attack+12 Pet: Rng.Atk.+12',}},}
  sets.midcast.Pet.WeaponSkill = {
    head="Karagoz Capello +1",neck="Empath Necklace",ear1="Charivari Earring",ear2="Burana Earring",
    body="Pitre Tobe +1",hands="Karagoz Guanti +1",ring1="Overbearing Ring",ring2="Thurandaut Ring",
    back="Dispersal Mantle",waist="Ukko Sash",legs="Karaggoz Pantaloni +1",feet="Naga Kyahan"}
  -- Sets to return to when not performing an action.
  -- Resting sets
  sets.resting = {
    head="Pitre Taj +1",neck="Wiglen Gorget",ear1="Infused Earring",ear2="Burana Earring",
    ring1="Sheltered Ring",ring2="Paguroidea Ring",
    back="Contriver's Cape"}
  -- Idle sets
  sets.idle = {
    ammo="Automat. Oil +3",
    head="Rao Kabuto",neck="Wiglen Gorget",ear1="Infused Earring",ear2="Burana Earring",
    body="Rao Togi", hands="Rao Kote",ring1="Sheltered Ring",ring2="Paguroidea Ring",
    back="Mecistopins Mantle",waist="Lycopodium Sash",legs="Rao Haidate",feet="Hermes' Sandals"}
	sets.idle.PDT = {
	main="Earth Staff",
    head="Rao Kabuto",neck="Twilight Torque",ear1="Heartseeker Earring",
    body="Qaaxo Harness",hands="Rao Kote", ring1="Defending Ring",ring2="Dark Ring",
    back="Cheviot Cape",waist="Flume Belt",legs=="Rao Haidate", feet="Hermes' Sandals",
  }
  -- Set for idle while pet is out (eg: pet regen gear)
  sets.idle.Pet = set_combine(sets.idle, {neck="Empath Necklace",ring2="Thurandaut Ring",back="Mecistopins Mantle",waist="Isa Belt"})
  sets.idle.PDT.Pet = sets.idle.PDT
  -- Idle sets to wear while pet is engaged
  sets.idle.Pet.Engaged = {
    range="Animator P",
    ammo="Automat. Oil +3",
    head="Tali'ah Turban +1",
    body="Tali'ah Manteel +1",
    hands="Tali'ah Gages +1",
    legs="Tali'ah Seraweels +1",
    feet="Tali'ah Crackows +1",
    neck="Empath Necklace",
    waist="Hurch'lan Sash",
    left_ear="Zennaroi Earring",
    right_ear="Steelflash Earring",
    left_ring="Overbearing Ring",
    right_ring="Paguroidea Ring",
    back={ name="Visucius's Mantle", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+20 Attack+20','Pet: Haste+10',}}
	}
  sets.idle.Pet.Engaged.Ranged = {
      main={ name="Ohtas", augments={'Accuracy+70','Pet: Accuracy+70','Pet: Haste+10%',}},
      range="Animator P",
      ammo="Automat. Oil +3",
      head="Tali'ah Turban +1",
      body="Tali'ah Manteel +1",
      hands="Tali'ah Gages +1",
      legs="Tali'ah Seraweels +1",
      feet="Tali'ah Crackows +1",
      neck="Empath Necklace",
      waist="Incarnation Sash",
      left_ear="Domesticator's Earring",
      right_ear="Rimeice Earring",
      left_ring="Varar Ring",
      right_ring="Varar Ring",
      back={ name="Visucius's Mantle", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+20 Attack+20','Pet: Haste+10',}},
    }
  sets.idle.Pet.Engaged.Nuke = set_combine(sets.idle.Pet.Engaged, {legs="Karaggoz Pantaloni +1",feet="Pitre Babouches +1"})
  sets.idle.Pet.Engaged.Magic = sets.idle.Pet.Engaged
 	sets.idle.Pet.Engaged.Tank = {
	  ammo="Automat. Oil +3",
    head="Rao Kabuto",
    body="Rao Togi",
    hands="Rao Kote",
    legs="Rao Haidate",
    feet="Rao Sune-Ate",
    neck="Empath Necklace",
    waist="Isa Belt",
    left_ear="Domesticator's Earring",
    right_ear="Handler's Earring +1",
    left_ring="Varar Ring",
    right_ring="Varar Ring",
    back="Visucius's Mantle",}
  -- Engaged sets
  -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  -- sets if more refined versions aren't defined.
  -- If you create a set with both offense and defense modes, the offense mode should be first.
  -- EG: sets.engaged.Dagger.Accuracy.Evasion
sets.inwkr = {
		neck="Ygnas's Resolve +1"}
  -- Normal melee group
  sets.engaged = {
    head="Tali'ah Turban +1",
    body="Tali'ah Manteel +1",
    hands="Tali'ah gages +1",
    legs="Samnuha Tights",
    feet={ name="Herculean Boots", augments={'Accuracy+28','"Triple Atk."+3','Attack+15',}},
    neck="Clotharius Torque",
    waist="Grunfeld Rope",
    left_ear="Bladeborn Earring",
    right_ear="Steelflash Earring",
    left_ring="Apate Ring",
    right_ring="Cacoethic Ring",
    back={ name="Visucius's Mantle", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+20 Attack+20','Pet: Haste+10',}},
	}
  sets.engaged.Acc = set_combine(sets.engaged, {
  })
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks that are called to process player actions at specific points in time.
-------------------------------------------------------------------------------------------------------------------
-- Called when player is about to perform an action
function job_precast(spell, action, spellMap, eventArgs)
  custom_aftermath_timers_precast(spell)
end
function job_aftercast(spell, action, spellMap, eventArgs)
  custom_aftermath_timers_aftercast(spell)
end
-- Called when pet is about to perform an action
function job_pet_midcast(spell, action, spellMap, eventArgs)
  if petWeaponskills:contains(spell.english) then
    classes.CustomClass = "Weaponskill"
  end
end
-------------------------------------------------------------------------------------------------------------------
-- General hooks for other game events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
  if buff == 'Wind Maneuver' then
    handle_equipping_gear(player.status)
  end
end
-- Called when a player gains or loses a pet.
-- pet == pet gained or lost
-- gain == true if the pet was gained, false if it was lost.
function job_pet_change(pet, gain)
  update_pet_mode()
end
-- Called when the pet's status changes.
function job_pet_status_change(newStatus, oldStatus)
  if newStatus == 'Engaged' then
    display_pet_status()
  end
end
if buffactive["reive mark"] then
        equip(sets.inwkr)
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- Called for custom player commands.
function job_self_command(cmdParams, eventArgs)
  if cmdParams[1] == 'maneuver' then
    if pet.isvalid then
      local man = defaultManeuvers[state.PetMode]
      if man and tonumber(cmdParams[2]) then
        man = man[tonumber(cmdParams[2])]
      end
      if man then
        send_command('input /pet "'..man..'" <me>')
      end
    else
      add_to_chat(123,'No valid pet.')
    end
  end
end
-- Called by the 'update' self-command, for common needs.
-- Set eventArgs.handled to true if we don't want automatic equipping of gear.
function job_update(cmdParams, eventArgs)
  update_pet_mode()
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
  local defenseString = ''
  if state.Defense.Active then
    local defMode = state.Defense.PhysicalMode
    if state.Defense.Type == 'Magical' then
      defMode = state.Defense.MagicalMode
    end
    defenseString = 'Defense: '..state.Defense.Type..' '..defMode..', '
  end
  add_to_chat(122,'Melee: '..state.OffenseMode..'/'..state.DefenseMode..', WS: '..state.WeaponskillMode..', '..defenseString..
    'Kiting: '..on_off_names[state.Kiting])
  display_pet_status()
  eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- Get the pet mode value based on the equipped head of the automaton.
-- Returns nil if pet is not valid.
function get_pet_mode()
  if pet.isvalid then
    return petModes[pet.head] or 'None'
  else
    return 'None'
  end
end
-- Update state.PetMode, as well as functions that use it for set determination.
function update_pet_mode()
  state.PetMode:set(get_pet_mode())
  update_custom_groups()
end
-- Update custom groups based on the current pet.
function update_custom_groups()
  classes.CustomIdleGroups:clear()
  if pet.isvalid then
    classes.CustomIdleGroups:append(state.PetMode.value)
  end
end
-- Display current pet status.
function display_pet_status()
  if pet.isvalid then
    local petInfoString = pet.name..' ['..pet.head..']: '..tostring(pet.status)..'  TP='..tostring(pet.tp)..'  HP%='..tostring(pet.hpp)
    if magicPetModes:contains(state.PetMode) then
      petInfoString = petInfoString..'  MP%='..tostring(pet.mpp)
    end
    add_to_chat(122,petInfoString)
  end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
  -- Default macro set/book
  if player.sub_job == 'DNC' then
    set_macro_page(1, 13)
  elseif player.sub_job == 'NIN' then
    set_macro_page(1, 13)
  elseif player.sub_job == 'THF' then
    set_macro_page(1, 13)
  else
    set_macro_page(1, 13)
  end
end
 
            
            
                
			
			By Selindrile 2016-12-14 08:10:46			
			
						
                     
                 As always, make a backup but I think this should be pretty easy. 
Delete lines: 52 and 295 and 334 and 375. (Where the functions update_pet_mode() and get_pet_mode() are called because these are what automatically changes the modes.)
 
Delete lines: 23-30 and replace with:
 Code  petModes = {'Melee','Ranged','Tank','Magic','Heal','Nuke'}
Also add this in user_setup() :
 
send_command('bind !f9 gs c cycle petMode')
 
See if that does the trick for you.                                     
            
            
                
			
			By Selindrile 2016-12-14 08:27:13			
			
						
                     
                 @Psycooo Do you have the addon cancel active? Where the buff cancelling is done in Motetenten's gearswaps is actually in the libs, not in your job file.                                     
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Odin Game: FFXI Posts: 42 
                
			
			By Odin.Psycooo 2016-12-14 13:10:59			
			
						
                     
                 @Psycooo Do you have the addon cancel active? Where the buff cancelling is done in Motetenten's gearswaps is actually in the libs, not in your job file.
I didn't for a while, but then I finally added it both with and without the cancel buff code and it still didn't remove shadows, removed sneak though(spell didn't try ninjustu sneak)
 
I can cast ichi and ni over ichi, but not have ichi cast over Ni, which is the point that I would like as well. (I know that sounds kinda stupid, but my recast on shadows is so low I can keep shadows/stoneskin up full time that way.)
 
Keeps showing up as Utsusemi: Ichi has no effect.                                     
            
                
                     Cerberus.Kvazz
                                                    
                                                                            
                                Server: Cerberus Game: FFXI Posts: 5345 
                
			
			By Cerberus.Kvazz 2016-12-14 13:19:06			
			
						
                     
                 Hi!
 This might not be the right place to ask at all.
 
 Buuut I have'nt played since the spellcast days, this "gearswap" seems to be the new plugin all the cool kids are using?
 
 Is there any database with good... .xmls? .gearswaps? (what kinda files are these? .lua?)
 
 I want to know what I'm up against before I reinstall the game O.O
 
            
                
                     Bismarck.Mitchel
                                                    
                                                                            
                                Server: Bismarck Game: FFXI Posts: 153 
                
			
			By Bismarck.Mitchel 2016-12-14 16:16:07			
			
						
                     
                 Could anyone figure out why my gun keeps getting unequipped since the update? Thanks. --------------------------------------------------------------------------------------------------------------------- Setup functions for this job.  Generally should not be modified.
 -------------------------------------------------------------------------------------------------------------------
 
 --[[
 Custom commands:
 
 gs c shot
 Uses the currently configured shot on the target, with either <t> or <stnpc> depending on setting.
 gs c shot t
 Uses the currently configured shot on the target, but forces use of <t>.
 
 
 Configuration commands:
 
 gs c cycle mainshot
 Cycles through the available steps to use as the primary shot when using one of the above commands.
 
 gs c cycle altshot
 Cycles through the available steps to use for alternating with the configured main shot.
 
 gs c toggle usealtshot
 Toggles whether or not to use an alternate shot.
 
 gs c toggle selectshottarget
 Toggles whether or not to use <stnpc> (as opposed to <t>) when using a shot.
 
 
 gs c toggle LuzafRing -- Toggles use of Luzaf Ring on and off
 
 gs c cycle QuickDraw -- Cycles through Normal, STP, Resistant QuickDraw sets.
 --If set to Resistant and using light/dark shot, will use sets.precast.CorsairShot.StatusShot
 --Other shots will use sets.precast.CorsairShot.Resistant
 
 Offense mode is melee or ranged.  Used ranged offense mode if you are engaged
 for ranged weaponskills, but not actually meleeing.
 
 Weaponskill mode, if set to 'Normal', is handled separately for melee and ranged weaponskills.
 --]]
 
 
 -- Initialization function for this job file.
 function get_sets()
 mote_include_version = 2
 
 -- Load and initialize the include file.
 include('Mote-Include.lua')
 include('Mote-Globals.lua')
 end
 
 -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
 function job_setup()
 
 
 -- QuickDraw Selector
 state.MainShot = M{['description']='Primary Shot', 'Dark Shot', 'Earth Shot', 'Water Shot', 'Wind Shot', 'Fire Shot', 'Ice Shot', 'Thunder Shot'}
 state.AltShot = M{['description']='Secondary Shot', 'Earth Shot', 'Water Shot', 'Wind Shot', 'Fire Shot', 'Ice Shot', 'Thunder Shot', 'Dark Shot'}
 state.UseAltShot = M(false, 'Use Secondary Shot')
 state.SelectShotTarget = M(false, 'Select Quick Draw Target')
 state.IgnoreTargetting = M(false, 'Ignore Targetting')
 
 state.CurrentShot = M{['description']='Current Quick Draw', 'Main', 'Alt'}
 
 state.QuickDraw = M{['description']='QD Mode', 'Normal','STP', 'Resistant'}
 
 -- Whether to use Luzaf's Ring
 state.LuzafRing = M(false, "Luzaf's Ring")
 -- Whether a warning has been given for low ammo
 state.warned = M(false)
 
 define_roll_values()
 determine_haste_group()
 
 end
 
 -------------------------------------------------------------------------------------------------------------------
 -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
 -------------------------------------------------------------------------------------------------------------------
 
 -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
 function user_setup()
 state.OffenseMode:options('Normal', 'LowAcc', 'MidAcc', 'HighAcc', 'Fodder')
 state.RangedMode:options('Normal', 'Acc', 'Fodder')
 state.WeaponskillMode:options('Normal', 'Acc')
 state.CastingMode:options('Normal', 'Resistant')
 state.IdleMode:options('Normal', 'DT')
 
 gear.RAbullet = "Adlivun Bullet"
 gear.WSbullet = "Adlivun Bullet"
 gear.MAbullet = "Orichalc. Bullet"
 gear.QDbullet = "Animikii Bullet"
 options.ammo_warning_limit = 5
 
 -- Additional local binds
 send_command('bind ^` input /ja "Double-up" <me>')
 send_command('bind !` input /ja "Bolter\'s Roll" <me>')
 send_command ('bind @` gs c toggle LuzafRing')
 
 send_command('bind ^- gs c cycleback mainshot')
 send_command('bind ^= gs c cycle mainshot')
 send_command('bind !- gs c cycle altshot')
 send_command('bind != gs c cycleback altshot')
 send_command('bind ^[ gs c toggle selectshottarget')
 send_command('bind ^] gs c toggle usealtshot')
 send_command('bind ^, input /ja "Spectral Jig" <me>')
 send_command('unbind ^.')
 
 select_default_macro_book()
 end
 
 
 -- Called when this job file is unloaded (eg: job change)
 function user_unload()
 send_command('unbind ^`')
 send_command('unbind !`')
 send_command('unbind @`')
 send_command('unbind ^-')
 send_command('unbind ^=')
 send_command('unbind !-')
 send_command('unbind !=')
 send_command('unbind ^[')
 send_command('unbind ^]')
 send_command('unbind ^,')
 end
 
 -- Define sets and vars used by this job file.
 function init_gear_sets()
 --------------------------------------
 -- Start defining the sets
 --------------------------------------
 -- Augmented Gear
 -- Herculean
 gear.Herc_MAB_Head = {name="Herculean Helm", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','INT+7','"Mag.Atk.Bns."+11',}}
 gear.Herc_TP_Gloves = {name="Herculean Gloves", augments={'Accuracy+30','"Triple Atk."+3','DEX+3',}}
 gear.Herc_TP_Legs = {name="Herculean Trousers", augments={'Attack+23','"Triple Atk."+4','STR+3','Accuracy+8',}}
 gear.Herc_MAB_Legs = { name="Herculean Trousers", augments={'"Mag.Atk.Bns."+25','Weapon skill damage +3%','MND+10',}}
 gear.Herc_MAB_Feet = {name="Herculean Boots", augments={'Mag. Acc.+18 "Mag.Atk.Bns."+18','STR+10','Mag. Acc.+11','"Mag.Atk.Bns."+12',}}
 gear.Herc_TP_Feet = {name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+2','DEX+7',}}
 -- Taeon
 gear.Taeon_WS_Head = {name="Taeon Chapeau", augments={'Mag. Acc.+15 "Mag.Atk.Bns."+15','Weapon skill damage +2%',}}
 gear.Taeon_TP_Head = {name="Taeon Chapeau", augments={'Accuracy+23','"Triple Atk."+1',}}
 gear.Taeon_TP_Legs = {name="Taeon Tights", augments={'Accuracy+23','"Triple Atk."+2',}}
 -- Ambuscade Capes
 gear.COR_WS_Cape = {name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Weapon skill damage +10%',}}
 gear.COR_WS2_Cape = {name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}}
 gear.COR_TP_Cape = { name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}}
 
 -- Precast Sets
 
 sets.precast.JA['Triple Shot'] = {body="Chasseur's Frac",back=gear.COR_WS_Cape}
 sets.precast.JA['Snake Eye'] = {legs="Commodore Culottes +2"}
 sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +1"}
 sets.precast.JA['Random Deal'] = {body="Lanun Frac +1"}
 
 sets.precast.CorsairRoll = {
 head="Lanun Tricorne",
 body="Meg. Cuirie +1",
 hands="Chasseur's Gants",
 legs="Desultor Tassets",
 feet="Lanun Bottes +1",
 neck="Twilight Torque",
 ear1="Darkness earring",
 ear2="Darkness earring",
 ring1="Luzaf's Ring",
 ring2="Barataria Ring",
 back="Camulus's Mantle",
 waist="Flume Belt",
 }
 
 --	sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chas. Culottes"})
 sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chass. Bottes"})
 sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chass. Tricorne"})
 sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac"})
 sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants"})
 
 sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
 sets.precast.FoldDoubleBust = {hands="Lanun Gants"}
 
 sets.precast.CorsairShot = {
 ammo=gear.QDbullet,
 head=gear.Herc_MAB_Head,
 body="Mirke wardecors",
 hands="Carmine Fin. Ga. +1",
 legs="Laksamana's trews +1",
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Hecate's Earring",
 ear2="Friomisi Earring",
 ring1="Arvina Ringlet +1",
 ring2="Acumen Ring",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.precast.CorsairShot.STP = {
 ammo=gear.QDbullet,
 head="Pursuer's beret",
 body="Mirke wardecors",
 hands="Schutzen Mittens",
 legs="Chas. Culottes",
 feet="Carmine Greaves",
 neck="Sanctity Necklace",
 ear1="Cessance Earring",
 ear2="Friomisi Earring",
 ring1="Raja Ring",
 ring2="Petrov Ring",
 back=gear.COR_TP_Cape,
 waist="Goading Belt",
 }
 
 sets.precast.CorsairShot.Resistant = {
 ammo=gear.QDbullet,
 head="Carmine Mask",
 body="Mirke wardecors",
 hands="Leyline gloves",
 legs="Rawhide Trousers",
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Lifestorm Earring",
 ear2="Psystorm Earring",
 ring1="Weatherspoon ring",
 ring2="Etana Ring",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.precast.CorsairShot.StatusShot = {
 ammo=gear.QDbullet,
 head="Carmine Mask",
 body="Mirke wardecors",
 hands="Leyline gloves",
 legs="Rawhide Trousers",
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Lifestorm Earring",
 ear2="Psystorm Earring",
 ring1="Weatherspoon ring",
 ring2="Etana Ring",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.precast.CorsairShot['Light Shot'] = set_combine(sets.precast.CorsairShot, {
 hands="Leyline gloves",
 head="Carmine Mask",
 legs="Rawhide Trousers",
 ear1="Lifestorm Earring",
 ear2="Psystorm Earring",
 ring1="Weatherspoon ring",
 ring2="Etana Ring",
 })
 
 sets.precast.CorsairShot['Dark Shot'] = set_combine(sets.precast.CorsairShot, {
 hands="Leyline gloves",
 head="Pixie Hairpin +1",
 legs="Rawhide Trousers",
 ear1="Lifestorm Earring",
 ear2="Psystorm Earring",
 ring1="Weatherspoon ring",
 ring2="Archon Ring",
 })
 
 sets.precast.Waltz = {
 hands="Slither Gloves +1",
 legs="Desultor Tassets",
 ring1="Asklepian Ring",
 ring2="Valseur's Ring",
 } -- CHR and VIT
 
 sets.precast.Waltz['Healing Waltz'] = {}
 
 sets.precast.FC = {
 ammo="Sapience orb", --2
 head="Carmine Mask", --12
 body="Taeon Tabard", --7
 hands="Leyline Gloves", --8
 legs="Rawhide Trousers", --5
 feet="Carmine Greaves", --7
 neck="Orunmila's Torque", --5
 ear1="Loquacious Earring", --2
 ear2="Halasz Earring", --
 ring1="Prolix Ring", --2
 ring2="Weatherspoon ring", --5(3)
 waist="Flume belt",
 }
 
 sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
 neck="Magoraga Beads",
 ring1="Lebeche Ring",
 })
 
 sets.precast.RA = {
 ammo=gear.RAbullet,
 head="Aurore Beret +1", --5
 body="Pursuer's Doublet", --6
 hands="Carmine Fin. Ga. +1", --8
 legs="Chasseur's culottes", --6
 feet="Meg. Jam. +1", --8
 back="Navarch's Mantle", --6.5
 waist="Impulse Belt", --3
 }
 
 
 -- Weaponskill sets
 -- Default set for any weaponskill that isn't any more specifically defined
 sets.precast.WS = {
 ammo=gear.WSbullet,
 head="Meghanada Visor +1",
 body="Meg. Cuirie +1",
 hands="Meghanada gloves +1",
 legs="Meg. Chausses +1",
 feet="Meg. Jam. +1",
 neck="Fotia Gorget",
 ear1="Moonshade Earring",
 ear2="Ishvara Earring",
 ring1="Arvina Ringlet +1",
 ring2="Garuda Ring",
 back=gear.COR_WS_Cape,
 waist="Fotia belt",
 }
 
 sets.precast.WS.Acc = set_combine(sets.precast.WS, {
 hands="Meg. Gloves +1",
 })
 
 -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
 
 sets.precast.WS["Last Stand"] = set_combine(sets.precast.WS['Last Stand'], {
 hands="Meg. Gloves +1",
 ring1="Garuda Ring",
 })
 
 sets.precast.WS['Last Stand'].Acc = set_combine(sets.precast.WS['Last Stand'], {
 ammo=gear.WSbullet,
 hands="Meg. Gloves +1",
 ear2="Volley Earring",
 ring1="Cacoethic Ring +1",
 back="Gunslinger's cape",
 })
 
 sets.precast.WS['Wildfire'] = {
 ammo=gear.MAbullet,
 head=gear.Herc_MAB_Head,
 body="Samnuha Coat",
 hands="Carmine Fin. Ga. +1",
 legs=gear.Herc_MAB_Legs,
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Hecate's Earring",
 ear2="Friomisi Earring",
 ring1="Arvina Ringlet +1",
 ring2="Garuda Ring",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.precast.WS['Leaden Salute'] = 	{
 ammo=gear.MAbullet,
 head="Pixie Hairpin +1",
 body="Samnuha Coat",
 hands="Carmine Fin. Ga. +1",
 legs=gear.Herc_MAB_Legs,
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Moonshade Earring",
 ear2="Friomisi Earring",
 ring1="Archon Ring",
 ring2="Arvina Ringlet +1",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.precast.WS['Aeolian Edge'] = {
 ammo=gear.MAbullet,
 head=gear.Herc_MAB_Head,
 body="Samnuha Coat",
 hands="Leyline gloves",
 legs=gear.Herc_MAB_Legs,
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Hecate's Earring",
 ear2="Friomisi Earring",
 ring1="Arvina Ringlet +1",
 ring2="Garuda Ring",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.precast.WS['Evisceration'] = {
 head="",
 body="Meg. Cuirie +1",
 hands="Meg. Gloves +1",
 legs="",
 feet="",
 neck="Fotia gorget",
 ear1="Moonshade Earring",
 ear2="Brutal Earring",
 ring1="",
 ring2="Epona's Ring",
 back="",
 waist="Fotia belt",
 }
 
 sets.precast.WS['Savage Blade'] = {
 head="Meghanada Visor +1",
 body="Meg. Cuirie +1",
 hands="Meghanada gloves +1",
 legs="Meg. Chausses +1",
 feet="Rawhide boots",
 neck="Caro necklace",
 ear1="Moonshade Earring",
 ear2="Ishvara Earring",
 ring1="Ifrit Ring",
 ring2="Ifrit Ring",
 back=gear.COR_WS2_Cape,
 waist="Prosilio belt +1",
 }
 
 sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {
 ring1="Rufescent Ring",
 waist="Grunfeld Rope",
 })
 
 sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS['Savage Blade'], {
 neck="Fotia gorget",
 ring1="Rufescent Ring",
 ring2="Epona's Ring",
 back="Bleating Mantle",
 waist="Fotia Belt",
 }) --MND
 
 sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS['Requiescat'], {
 head="Carmine Mask"
 })
 
 -- Midcast Sets
 
 sets.midcast.CorsairRoll = {
 head="Lanun Tricorne",
 body="Meg. Cuirie +1",
 hands="Chasseur's Gants",
 legs="Desultor Tassets",
 feet="Lanun Bottes +1",
 neck="Twilight Torque",
 ear1="Darkness earring",
 ear2="Darkness earring",
 ring1="Luzaf's Ring",
 ring2="Barataria Ring",
 back="Camulus's Mantle",
 waist="Flume Belt",
 }
 
 sets.midcast.FastRecast = {
 ear1="Loquacious Earring",
 ear2="",
 }
 
 sets.midcast.Cure = {
 neck="Incanter's Torque",
 ear1="Roundel Earring",
 ear2="Mendi. Earring",
 ring1="",
 ring2="",
 waist="",
 }
 
 sets.midcast.Utsusemi = {
 waist="Pya'ekue belt",
 }
 
 sets.midcast.CorsairShot = {
 ammo=gear.QDbullet,
 head=gear.Herc_MAB_Head,
 body="Mirke wardecors",
 hands="Carmine Fin. Ga. +1",
 legs="Laksamana's trews +1",
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Hecate's Earring",
 ear2="Friomisi Earring",
 ring1="Arvina Ringlet +1",
 ring2="Acumen Ring",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.midcast.CorsairShot.STP = {
 ammo=gear.QDbullet,
 head="Pursuer's beret",
 body="Mirke wardecors",
 hands="Schutzen Mittens",
 legs="Chas. Culottes",
 feet="Carmine Greaves",
 neck="Sanctity Necklace",
 ear1="Cessance Earring",
 ear2="Digni. Earring",
 ring1="Raja Ring",
 ring2="Petrov Ring",
 back=gear.COR_TP_Cape,
 waist="Yemaya Belt",
 }
 
 sets.midcast.CorsairShot.Resistant = {
 ammo=gear.QDbullet,
 head="Carmine Mask",
 body="Mirke wardecors",
 hands="Leyline gloves",
 legs="Rawhide Trousers",
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Gwati Earring",
 ear2="Digni. Earring",
 ring1="Weatherspoon ring",
 ring2="Etana Ring",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.midcast.CorsairShot.StatusShot = {
 ammo=gear.QDbullet,
 head="Carmine Mask",
 body="Mirke wardecors",
 hands="Leyline gloves",
 legs="Rawhide Trousers",
 feet=gear.Herc_MAB_Feet,
 neck="Sanctity Necklace",
 ear1="Gwati Earring",
 ear2="Digni. Earring",
 ring1="Weatherspoon ring",
 ring2="Etana Ring",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 }
 
 sets.midcast.CorsairShot['Light Shot'] = set_combine(sets.precast.CorsairShot, {
 hands="Leyline gloves",
 head="Carmine Mask",
 legs="Rawhide Trousers",
 ear1="Gwati Earring",
 ear2="Digni. Earring",
 ring1="Weatherspoon ring",
 ring2="Etana Ring",
 })
 
 sets.midcast.CorsairShot['Dark Shot'] = set_combine(sets.precast.CorsairShot, {
 hands="Leyline gloves",
 head="Pixie Hairpin +1",
 legs="Rawhide Trousers",
 ear1="Gwati Earring",
 ear2="Digni. Earring",
 ring1="Weatherspoon ring",
 ring2="Archon Ring",
 })
 
 -- Ranged gear
 sets.midcast.RA = {
 ammo=gear.RAbullet,
 head="Pursuer's Beret",
 body="Pursuer's Doublet",
 hands="Carmine Fin. Ga. +1",
 legs="Meg. Chausses +1",
 feet="Meg. Jam. +1",
 neck="Marked Gorget",
 ear1="Navarch's Earring",
 ear2="Volley Earring",
 ring1="Arvina Ringlet +1",
 ring2="Cacoethic Ring +1",
 back="Gunslinger's Cape",
 waist="Yemaya belt",
 }
 
 sets.midcast.RA.Acc = set_combine(sets.midcast.RA, {
 ammo=gear.RAbullet,
 head="Meghanada visor +1",
 hands="Meg. Gloves +1",
 body="Meg. Cuirie +1",
 ring1="Cacoethic Ring +1",
 ring1="Hadjuk Ring",
 waist="Eschan Stone",
 })
 
 sets.midcast.RA.Fodder = set_combine(sets.midcast.RA, {
 ammo=gear.RAbullet,
 neck="Ocachi Gorget",
 })
 
 -- Sets to return to when not performing an action.
 
 -- Resting sets
 sets.resting = {}
 
 -- Idle sets
 sets.idle = {
 head="Meghanada visor +1",
 body="Meg. Cuirie +1",
 hands="Kurys gloves",
 legs="Carmine Cuisses +1",
 feet="Lanun bottes +1",
 neck="Sanctity Necklace",
 ear1="Eabani Earring",
 ear2="Infused Earring",
 ring1="Paguroidea Ring",
 ring2="Sheltered Ring",
 back="Solemnity Cape",
 waist="Flume Belt",
 }
 
 sets.idle.DT = set_combine (sets.idle, {
 head="Meghanada visor +1", --4/0
 body="Meg. Cuirie +1", --7/0
 hands="Meg. Gloves +1", --3/0
 legs="Meg. Chausses +1", --5/0
 feet="Lanun Bottes +1", --4/0
 neck="Twilight Torque", --5/5
 ear1="Darkness Earring", --2/0
 ear2="Darkness Earring", --2/0
 ring1="Gelatinous Ring +1", --6/(-2)
 ring2="Dark Ring", --0/4
 back="Solemnity Cape", --4/4
 waist="Flume Belt", --4/0
 })
 
 sets.idle.Town = set_combine(sets.idle, {
 body="Adhemar jacket",
 hands="Carmine Fin. Ga. +1",
 back=gear.COR_WS_Cape,
 waist="Eschan Stone",
 ear1="Digni. Earring",
 })
 
 
 -- Defense sets
 sets.defense.PDT = {
 head="Meghanada visor +1", --4/0
 body="Meg. Cuirie +1", --7/0
 hands="Meg. Gloves +1", --3/0
 legs="Meg. Chausses +1", --5/0
 feet="Lanun Bottes +1", --4/0
 neck="Twilight Torque", --5/5
 ear1="Darkness Earring", --2/0
 ear2="Darkness Earring", --2/0
 ring1="Gelatinous Ring +1", --6/(-2)
 ring2="Jelly Ring", --10/10
 back="Solemnity Cape", --4/4
 waist="Flume Belt", --4/0
 }
 
 sets.defense.MDT = set_combine(sets.defense.PDT, {
 ear1="Merman's Earring", --0/2
 ear2="Merman's Earring", --0/2
 ring1="Dark Ring", --0/4
 ring2="Minerva's Ring", --(-8)/8
 })
 
 sets.Kiting = {legs="Crimson cuisses"}
 
 -- Engaged sets
 
 -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
 -- sets if more refined versions aren't defined.
 -- If you create a set with both offense and defense modes, the offense mode should be first.
 -- EG: sets.engaged.Dagger.Accuracy.Evasion
 
 -- Normal melee group
 sets.engaged = {
 ammo=gear.RAbullet,
 head="Adhemar Bonnet",
 body="Adhemar Jacket",
 hands="Adhemar Wristbands",
 legs="Carmine cuisses +1",
 feet="Taeon boots",
 neck="Lissome Necklace",
 ear1="Eabani Earring",
 ear2="Suppanomimi",
 ring1="Petrov Ring",
 ring2="Epona's Ring",
 back="Bleating Mantle",
 waist="Windbuffet Belt +1",
 }
 
 sets.engaged.LowAcc = set_combine(sets.engaged, {
 ring2="Rajas Ring",
 back=gear.COR_TP_Cape,
 })
 
 sets.engaged.MidAcc = set_combine(sets.engaged.LowAcc, {
 ear1="Cessance Earring",
 feet=gear.Herc_TP_Feet,
 })
 
 sets.engaged.HighAcc = set_combine(sets.engaged.MidAcc, {
 head="Carmine Mask",
 neck="Subtlety spectacles",
 ear2="Digni. Earring",
 ring1="Cacoethic Ring +1",
 ring2="Enlivened Ring",
 waist="Kentarch Belt +1",
 back=gear.COR_TP_Cape,
 })
 
 sets.engaged.Fodder = set_combine(sets.engaged, {
 body="Thaumas Coat",
 neck="Asperity Necklace",
 })
 
 sets.engaged.HighHaste = {
 ammo=gear.RAbullet,
 head="Adhemar Bonnet",
 body="Adhemar Jacket", --5
 hands="Adhemar Wristbands", --3
 legs=gear.Herc_TP_Legs,
 feet=gear.Herc_TP_Feet,
 neck="Lissome Necklace",
 ear1="Cessance Earring",
 ear2="Suppanomimi", --5
 ring1="Petrov Ring",
 ring2="Epona's Ring",
 back="Bleating Mantle",
 waist="Windbuffet Belt +1",
 }
 
 sets.engaged.HighHaste.LowAcc = set_combine(sets.engaged.HighHaste, {
 ring2="Rajas Ring",
 back=gear.COR_TP_Cape,
 })
 
 sets.engaged.HighHaste.MidAcc = set_combine(sets.engaged.HighHaste.LowAcc, {
 legs="Taeon tights",
 ring1="Cacoethic Ring +1",
 })
 
 sets.engaged.HighHaste.HighAcc = set_combine(sets.engaged.HighHaste.MidAcc, {
 head="Carmine Mask",
 legs="Carmine cuisses +1",
 neck="Subtlety spectacles",
 ear2="Digni. Earring",
 ring2="Enlivened Ring",
 waist="Kentarch Belt +1",
 })
 
 sets.engaged.HighHaste.Fodder = set_combine(sets.engaged.HighHaste, {
 body="Thaumas Coat",
 neck="Asperity Necklace",
 })
 
 sets.engaged.MaxHaste = {
 ammo=gear.RAbullet,
 head="Adhemar Bonnet",
 body="Adhemar Jacket", --5
 hands="Adhemar Wristbands", --3
 legs=gear.Herc_TP_legs,
 feet=gear.Herc_TP_feet,
 neck="Lissome Necklace",
 ear1="Cessance Earring",
 ear2="Suppanomimi",
 ring1="Petrov Ring",
 ring2="Epona's Ring",
 back="Bleating Mantle",
 waist="Windbuffet Belt +1",
 }
 
 sets.engaged.MaxHaste.LowAcc = set_combine(sets.engaged.HighHaste, {
 ring2="Rajas Ring",
 back=gear.COR_TP_Cape,
 })
 
 sets.engaged.MaxHaste.MidAcc = set_combine(sets.engaged.MaxHaste.LowAcc, {
 legs="Taeon tights",
 ring1="Cacoethic Ring +1",
 })
 
 sets.engaged.MaxHaste.HighAcc = set_combine(sets.engaged.MaxHaste.MidAcc, {
 head="Carmine Mask",
 neck="Subtlety spectacles",
 ear2="Digni. Earring",
 ring2="Enlivened Ring",
 waist="Kentarch Belt +1",
 })
 
 sets.engaged.MaxHaste.Fodder = set_combine(sets.engaged.MaxHaste, {
 body="Thaumas Coat",
 neck="Asperity Necklace",
 })
 
 sets.Obi = {waist="Hachirin-no-Obi"}
 
 end
 
 
 -------------------------------------------------------------------------------------------------------------------
 -- Job-specific hooks for standard casting events.
 -------------------------------------------------------------------------------------------------------------------
 
 -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
 -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
 function job_precast(spell, action, spellMap, eventArgs)
 -- Check that proper ammo is available if we're using ranged attacks or similar.
 if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
 do_bullet_checks(spell, spellMap, eventArgs)
 end
 if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
 equip(sets.precast.LuzafRing)
 elseif spell.type == 'CorsairShot' and S{'Dark Shot','Light Shot'}:contains(spell.english) then
 if state.CastingMode.value == 'Resistant' or state.QuickDraw.value == 'Resistant' then
 --To specify a FULL M.ACC set for LightShot/DarkShot, whereas for other shots, the resistant mode would prefer a different ratio of m.acc/mab
 classes.CustomClass = 'StatusShot'
 end
 elseif spell.type == 'CorsairShot' and state.QuickDraw.value ~= 'Normal' then
 classes.CustomClass = state.QuickDraw.value
 elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
 if sets.precast.FoldDoubleBust then
 equip(sets.precast.FoldDoubleBust)
 eventArgs.handled = true
 end
 end
 end
 
 function job_post_precast(spell, action, spellMap, eventArgs)
 -- Equip obi if weather/day matches for WS/Quick Draw.
 if spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
 if spell.english == 'Leaden Salute' and (world.weather_element == 'Dark' or world.day_element == 'Dark') then
 equip(sets.Obi)
 elseif spell.english == 'Wildfire' and (world.weather_element == 'Fire' or world.day_element == 'Fire') then
 equip(sets.Obi)
 elseif spell.type == 'CorsairShot' and (spell.element == world.weather_element or spell.element == world.day_element) then
 equip(sets.Obi)
 end
 end
 end
 
 -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
 function job_aftercast(spell, action, spellMap, eventArgs)
 if spell.type == 'CorsairRoll' and not spell.interrupted then
 display_roll_info(spell)
 end
 end
 
 function job_status_change(new_status, old_status)
 if new_status == 'Engaged' then
 determine_haste_group()
 end
 end
 
 -------------------------------------------------------------------------------------------------------------------
 -- User code that supplements standard library decisions.
 -------------------------------------------------------------------------------------------------------------------
 
 -- Return a customized weaponskill mode to use for weaponskill sets.
 -- Don't return anything if you're not overriding the default value.
 
 function job_update(cmdParams, eventArgs)
 determine_haste_group()
 end
 
 -- Set eventArgs.handled to true if we don't want the automatic display to be run.
 
 function job_update(cmdParams, eventArgs)
 determine_haste_group()
 end
 
 function get_custom_wsmode(spell, spellMap, default_wsmode)
 if buffactive['Transcendancy'] then
 return 'Brew'
 end
 end
 
 
 -- Called by the 'update' self-command, for common needs.
 -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
 function job_update(cmdParams, eventArgs)
 if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
 state.OffenseMode:set('Ranged')
 end
 end
 
 -- Handle auto-targetting based on local setup.
 function job_auto_change_target(spell, action, spellMap, eventArgs)
 if spell.type == 'CorsairShot' then
 if state.IgnoreTargetting.value == true then
 state.IgnoreTargetting:reset()
 eventArgs.handled = true
 end
 
 eventArgs.SelectNPCTargets = state.SelectShotTarget.value
 end
 end
 
 -- Set eventArgs.handled to true if we don't want the automatic display to be run.
 function display_current_job_state(eventArgs)
 local msg = ''
 
 msg = msg .. '[ Offense/Ranged: '..state.OffenseMode.current..'/'..state.RangedMode.current
 msg = msg .. ' ][ WS: '..state.WeaponskillMode.current
 
 if state.DefenseMode.value ~= 'None' then
 msg = msg .. ' ][ Defense: ' .. state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value
 end
 
 if state.Kiting.value then
 msg = msg .. ' ][ Kiting Mode: ON'
 end
 
 msg = msg .. ' ][ '..state.MainShot.current
 
 if state.UseAltShot.value == true then
 msg = msg .. '/'..state.AltShot.current
 end
 
 msg = msg .. ' ]'
 
 add_to_chat(061, msg)
 
 eventArgs.handled = true
 end
 
 -------------------------------------------------------------------------------------------------------------------
 -- User self-commands.
 -------------------------------------------------------------------------------------------------------------------
 
 -- Called for custom player commands.
 function job_self_command(cmdParams, eventArgs)
 if cmdParams[1] == 'Shot' then
 if cmdParams[2] == 't' then
 state.IgnoreTargetting:set()
 end
 
 local doShot = ''
 if state.UseAltShot.value == true then
 doShot = state[state.CurrentShot.current..'Shot'].current
 state.CurrentShot:cycle()
 else
 doShot = state.MainShot.current
 end
 
 send_command('@input /ja "'..doShot..'" <t>')
 end
 end
 
 
 -------------------------------------------------------------------------------------------------------------------
 -- Utility functions specific to this job.
 -------------------------------------------------------------------------------------------------------------------
 
 function determine_haste_group()
 -- We have three groups of DW in gear: Charis body, Charis neck + DW earrings, and Patentia Sash.
 
 -- For high haste, we want to be able to drop one of the 10% groups (body, preferably).
 -- High haste buffs:
 -- 2x Marches + Haste
 -- 2x Marches + Haste Samba
 -- 1x March + Haste + Haste Samba
 -- Embrava + any other haste buff
 
 -- For max haste, we probably need to consider dropping all DW gear.
 -- Max haste buffs:
 -- Embrava + Haste/March + Haste Samba
 -- 2x March + Haste + Haste Samba
 
 classes.CustomMeleeGroups:clear()
 
 if buffactive.embrava and (buffactive.haste or buffactive.march) then
 classes.CustomMeleeGroups:append('MaxHaste')
 elseif buffactive.march == 2 and buffactive.haste then
 classes.CustomMeleeGroups:append('MaxHaste')
 elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
 classes.CustomMeleeGroups:append('HighHaste')
 elseif buffactive.march == 1 and buffactive.haste then
 classes.CustomMeleeGroups:append('HighHaste')
 elseif buffactive.march == 2 and buffactive.haste then
 classes.CustomMeleeGroups:append('HighHaste')
 end
 end
 
 function define_roll_values()
 rolls = {
 ["Corsair's Roll"]   = {lucky=5, unlucky=9, bonus="Experience Points"},
 ["Ninja Roll"]	   = {lucky=4, unlucky=8, bonus="Evasion"},
 ["Hunter's Roll"]	= {lucky=4, unlucky=8, bonus="Accuracy"},
 ["Chaos Roll"]	   = {lucky=4, unlucky=8, bonus="Attack"},
 ["Magus's Roll"]	 = {lucky=2, unlucky=6, bonus="Magic Defense"},
 ["Healer's Roll"]	= {lucky=3, unlucky=7, bonus="Cure Potency Received"},
 ["Drachen Roll"]	  = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
 ["Choral Roll"]	  = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
 ["Monk's Roll"]	  = {lucky=3, unlucky=7, bonus="Subtle Blow"},
 ["Beast Roll"]	   = {lucky=4, unlucky=8, bonus="Pet Attack"},
 ["Samurai Roll"]	 = {lucky=2, unlucky=6, bonus="Store TP"},
 ["Evoker's Roll"]	= {lucky=5, unlucky=9, bonus="Refresh"},
 ["Rogue's Roll"]	 = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
 ["Warlock's Roll"]   = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
 ["Fighter's Roll"]   = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
 ["Puppet Roll"]	 = {lucky=3, unlucky=7, bonus="Pet Magic Attack/Accuracy"},
 ["Gallant's Roll"]   = {lucky=3, unlucky=7, bonus="Defense"},
 ["Wizard's Roll"]	= {lucky=5, unlucky=9, bonus="Magic Attack"},
 ["Dancer's Roll"]	= {lucky=3, unlucky=7, bonus="Regen"},
 ["Scholar's Roll"]   = {lucky=2, unlucky=6, bonus="Conserve MP"},
 ["Naturalist's Roll"]	   = {lucky=3, unlucky=7, bonus="Enh. Magic Duration"},
 ["Runeist's Roll"]	   = {lucky=4, unlucky=8, bonus="Magic Evasion"},
 ["Bolter's Roll"]	= {lucky=3, unlucky=9, bonus="Movement Speed"},
 ["Caster's Roll"]	= {lucky=2, unlucky=7, bonus="Fast Cast"},
 ["Courser's Roll"]   = {lucky=3, unlucky=9, bonus="Snapshot"},
 ["Blitzer's Roll"]   = {lucky=4, unlucky=9, bonus="Attack Delay"},
 ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
 ["Allies's Roll"]	= {lucky=3, unlucky=10, bonus="Skillchain Damage"},
 ["Miser's Roll"]	 = {lucky=5, unlucky=7, bonus="Save TP"},
 ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
 ["Avenger's Roll"]   = {lucky=4, unlucky=8, bonus="Counter Rate"},
 }
 end
 
 function display_roll_info(spell)
 rollinfo = rolls[spell.english]
 local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
 
 if rollinfo then
 add_to_chat(104, '[ Lucky: '..tostring(rollinfo.lucky)..' / Unlucky: '..tostring(rollinfo.unlucky)..' ] '..spell.english..': '..rollinfo.bonus..' ('..rollsize..') ')
 end
 end
 
 
 -- Determine whether we have sufficient ammo for the action being attempted.
 function do_bullet_checks(spell, spellMap, eventArgs)
 local bullet_name
 local bullet_min_count = 1
 
 if spell.type == 'WeaponSkill' then
 if spell.skill == "Marksmanship" then
 if spell.element == 'None' then
 -- physical weaponskills
 bullet_name = gear.WSbullet
 else
 -- magical weaponskills
 bullet_name = gear.MAbullet
 end
 else
 -- Ignore non-ranged weaponskills
 return
 end
 elseif spell.type == 'CorsairShot' then
 bullet_name = gear.QDbullet
 elseif spell.action_type == 'Ranged Attack' then
 bullet_name = gear.RAbullet
 if buffactive['Triple Shot'] then
 bullet_min_count = 3
 end
 end
 
 local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
 
 -- If no ammo is available, give appropriate warning and end.
 if not available_bullets then
 if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
 add_to_chat(104, 'No Quick Draw ammo left.  Using what\'s currently equipped ('..player.equipment.ammo..').')
 return
 elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
 --			add_to_chat(104, 'No weaponskill ammo left.  Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
 return
 else
 add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
 eventArgs.cancel = true
 return
 end
 end
 
 -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
 if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
 add_to_chat(104, 'No ammo will be left for Quick Draw.  Cancelling.')
 eventArgs.cancel = true
 return
 end
 
 -- Low ammo warning.
 if spell.type ~= 'CorsairShot' and state.warned.value == false
 and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
 local msg = '*****  LOW AMMO WARNING: '..bullet_name..' *****'
 --local border = string.repeat("*", #msg)
 local border = ""
 for i = 1, #msg do
 border = border .. "*"
 end
 
 add_to_chat(104, border)
 add_to_chat(104, msg)
 add_to_chat(104, border)
 
 state.warned:set()
 elseif available_bullets.count > options.ammo_warning_limit and state.warned then
 state.warned:reset()
 end
 end
 
 -- Select default macro book on initial load or subjob change.
 function select_default_macro_book()
 if player.sub_job == 'DNC' then
 set_macro_page(1, 10)
 else
 set_macro_page(1, 10)
 end
 end
Edit - Disregard, I am dumb, had Sapience Orb in FC set                                     
            
                
                    
                    
                    
                                                            
                                                    
                                                                            
                                Server: Asura Game: FFXI Posts: 115 
                
			
			By Asura.Pintseyes 2016-12-14 16:30:13			
			
						
                     
                 Hi!
 This might not be the right place to ask at all.
 
 Buuut I have'nt played since the spellcast days, this "gearswap" seems to be the new plugin all the cool kids are using?
 
 Is there any database with good... .xmls? .gearswaps? (what kinda files are these? .lua?)
 
 I want to know what I'm up against before I reinstall the game O.O
I don't know about cool kids as I'm not one. But gearswap is the "new" spellcast. The files used are LUA. You can find some lua's in the beta_examples_and_information folder inside the gearswap folder.
 
A lot of people use something called "Motes". Here is the website for that.
https://github.com/Kinematics/GearSwap-Jobs 
welcome back and best of luck with your endeavors.                                             
                    [+]
                                              
            
                
                     Asura.Patb
                                                    
                                                                            
                                Server: Asura Game: FFXI Posts: 88 
                
			
			By Asura.Patb 2016-12-15 00:48:17			
			
						
                     
                 As always, make a backup but I think this should be pretty easy. 
Delete lines: 52 and 295 and 334 and 375. (Where the functions update_pet_mode() and get_pet_mode() are called because these are what automatically changes the modes.) 
Delete lines: 23-30 and replace with: Code  petModes = {'Melee','Ranged','Tank','Magic','Heal','Nuke'}
Also add this in user_setup() : 
send_command('bind !f9 gs c cycle petMode') 
See if that does the trick for you.
Yes this worked amazingly thank you very much!                                             
                    [+]
                                              
    
    
        
        Just looking for someone to explain this addon a bit for me. It looks like it is an alternative to Spellcast. 
 Is it going to be replacing Spellcast? In which ways is it better or worse. I don't know any programming but I've slowly learned more and more about spellcast and the 'language' used in gearswap is confusing to me.
 
 It says it uses packets so it potentially could be more detectable? but does that also eliminate any lag that spellcast may encounter?
 
 I plan on redoing my PUP xml to include pet casting sets thanks to the new addon petschool. I'm just not sure if it's worth it to just wait until gearswap gets more popular or to go ahead and do it in spellcast.
 
 If anyone could give me more info I'd greatly appreciate it.
 |  |