|
Gearswap Support Thread
Asura.Sechs
Server: Asura
Game: FFXI
Posts: 10086
By Asura.Sechs 2018-02-13 01:45:22
In some of my Luas I make use of the disable/enable commands to avoid swapping my mainhand/offhand when I'm engaged.
It works perfectly but under some circumstances I remain with my MH/OH "disabled".
The "disable" part happens in the function status_change(new,old), with a simple "if new == 'Engaged' then", works flawlessly.
The "enable" part happens in the same function, in a consequent "else" within the if described above, and this is where things work a bit less flawlessly.
For instance if I die while engaged there won't be a "disengage" status_change, so I will remain locked.
Likewise sometimes if the monster I'm engaged gets... I dunno, killed too quickly in a laggy zone? Packetloss? Whatever, I don't know what happens and it's very rare, but sometimes when ***dies too fast it's like the game doesn't "see" I've been disengaged for whatever reason and hence the "enable" part of my status_change function doesn't get processed.
Can anybody think of a very simple and straightforward way to avoid this? Or do I just have to eat it because the cause is a packet-loss and nothing we can do about it?
Ragnarok.Lockfort
Server: Ragnarok
Game: FFXI
Posts: 252
By Ragnarok.Lockfort 2018-02-13 16:18:36
quickest workaround is you make a macro '/con gs enable all' if the issue is due to latency/zone lag or whatever.
Or just try to work that command into your lua file
Asura.Arico
Server: Asura
Game: FFXI
Posts: 535
By Asura.Arico 2018-02-19 18:52:32
So I'm trying to get my gearswap to have a doubleshot set. It's; not working and I can't figure out why.
I've added
function job_setup()
state.Buff.Barrage = buffactive.Barrage or false
state.Buff.DoubleShot = buffactive['Double Shot'] or false
state.Buff.Camouflage = buffactive.Camouflage or false
state.Buff['Unlimited Shot'] = buffactive['Unlimited Shot'] or false
end
sets.buff.DoubleShot = set_combine(sets.midcast.RA, {body="Oshosi Vest +1", hands="Oshosi Gloves +1",legs="Oshosi Trousers +1"})
and
function job_midcast(spell, action, spellMap, eventArgs)
if spell.action_type == 'Ranged Attack' and state.Buff.Barrage then
equip(sets.buff.Barrage)
eventArgs.handled = true
elseif spell.action_type == 'Ranged Attack' and state.Buff.DoubleShot then
equip(sets.buff.DoubleShot)
eventArgs.handled = true
end
end
Any idea why it's not working?
Server: Cerberus
Game: FFXI
Posts: 1786
By Cerberus.Shadowmeld 2018-02-28 19:04:59
Lets say I wanted to get the contents of the items.lua file that is in the Windower/res directory in gearswap. How would I do that.
Specifically I want to reference the category field on items of my equipped items.
I've tried windower.res.items[player.equipment.sub].category but it says items is a null field.
Bismarck.Dunigs
Server: Bismarck
Game: FFXI
Posts: 83
By Bismarck.Dunigs 2018-02-28 19:34:26
Cerberus.Shadowmeld said: »Lets say I wanted to get the contents of the items.lua file that is in the Windower/res directory in gearswap. How would I do that.
Specifically I want to reference the category field on items of my equipped items.
I've tried windower.res.items[player.equipment.sub].category but it says items is a null field.
Include resources in your file as a table: Code
local res = require('resources')
However, typically (and is true for the items table), these tables are indexed in numerical order...so res.items[item_name] will never be valid, you will either need to iterate through all of res.items and compare the item name to each "en" field, or find a way to pass the appropriate ID number rather than the item name. In case you're not too lua savvy, this is a good way to loop through the tables: Code
for i,v in ipairs(res.items) do
if v.en == player.equipment.sub then
You found it. v.category will have the category of the
item of interest
end
end
I am not sure if there are built in methods to easily convert item names to their IDs so this may be overkill, just how I would do it without knowing if something simpler exists.
Server: Odin
Game: FFXI
Posts: 124
By Odin.Archaide 2018-03-02 09:22:48
I'm having an issue with my Cor lua, after I WS (any WS) it will not swap back to Melee set, it just stays in the WS set. When disengaged it will swap to idle set however. I'm constant having to hit the Gearset Update toggle. Any ideas?
Code function get_sets()
StartLockStyle = '78'
AccIndex = 1
AccArray = {"LowACC","MidACC","HighACC","Aftermath"}
IdleIndex = 1
IdleArray = {'Movement', 'Regen','Town','Magic'} -- Default Idle Set Is Movement --
PreshotIndex = 1
PreshotArray = {'Any','RDM'}
Armor = 'None'
autoRAmode = 0
target_distance = 5 -- Set Default Distance Here --
send_command('input /macro book 16;wait .1;input /macro set 6') -- Change Default Macro Book Here --
send_command('bind F9 gs c flur') --flurry toggle--
send_command('bind F10 gs c pdt') --PDT toggle--
send_command('bind F11 gs c acc') --accuracy toggle--
send_command('bind F12 gs c auto') --Gearset update toggle--
send_command('bind !F12 gs c C6') --Idle Toggle--
send_command('bind != gs c mdt') --MDT toggle--
ranged_ws = S{
"Hot Shot","Split Shot","Sniper Shot","Slug Shot","Blast Shot","Heavy Shot","Detonator",
"Numbing Shot","Last Stand","Leaden Salute","Wildfire","Flaming Arrow"}
-- Idle/Town Sets --
sets.Idle = {}
sets.Idle.Regen = {
head="Meghanada Visor +2",
neck="Sanctity Necklace",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
ring1="Meghanada Ring",
ring2="Defending Ring",
ear1="Telos Earring",
ear2="Etiolation earring",
back="Moonbeam Cape",
waist="Flume Belt +1",
legs="Carmine Cuisses +1",
feet="Meg. Jam. +2"}
sets.Idle.Movement = set_combine(sets.Idle.Regen,{legs="Carmine Cuisses +1"})
sets.Idle.Town = {
head="Pixie Hairpin +1",
body={ name="Herculean Vest", augments={'"Mag.Atk.Bns."+28','Pet: Attack+24 Pet: Rng.Atk.+24','Weapon skill damage +3%','Accuracy+19 Attack+19','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Sanctity Necklace",
waist="Hachirin-no-Obi",
left_ear="Friomisi Earring",
right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +25',}},
left_ring="Archon Ring",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
sets.Idle.Magic = {
head={ name="Dampening Tam", augments={'DEX+10','Accuracy+15','Mag. Acc.+15','Quadruple Attack +3',}},
body="Laksa. Frac +2",
hands={ name="Floral Gauntlets", augments={'Rng.Acc.+15','Accuracy+15','"Triple Atk."+3','Magic dmg. taken -4%',}},
legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
feet={ name="Carmine Greaves", augments={'HP+80','MP+80','Phys. dmg. taken -4',}},
neck="Loricate Torque +1",
waist="Flax Sash",
left_ear="Etiolation Earring",
right_ear="Static Earring",
left_ring="Defending Ring",
right_ring="Purity Ring",
back="Moonbeam Cape"}
sets.Fomalhaut = {main="Hep. Sapara +1",sub="Nusku Shield",range="Fomalhaut",ammo="Chrono Bullet"}
sets.Holliday = {main="Hep. Sapara +1",sub="Nusku Shield",range="Holliday",ammo="Decimating Bullet"}
sets.DeathPenalty = {main="Hep. Sapara +1",sub="Nusku Shield",range="Death Penalty",ammo="Chrono Bullet"}
sets.Dualwield = {sub="Fettering Blade"}
-- Preshot --
sets.Preshot = {
head={ name="Taeon Chapeau", augments={'"Snapshot"+5','"Snapshot"+5',}}, -- 10/0
body="Oshosi Vest", -- 12/0
hands="Carmine Fin. Ga. +1", -- 8/11
waist="Yemaya Belt", -- 0/5
legs={ name="Adhemar Kecks", augments={'AGI+10','"Rapid Shot"+10','Enmity-5',}}, -- 9/10
feet="Meg. Jam. +2", --10/0
back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},} -- 10/0
-- 59/26
sets.Preshot.Fomalhaut = {
head={ name="Taeon Chapeau", augments={'"Snapshot"+5','"Snapshot"+5',}}, -- 10/0
body="Oshosi Vest", -- 12/0
hands="Carmine Fin. Ga. +1", -- 8/11
waist="Yemaya Belt", -- 0/5
legs={ name="Adhemar Kecks", augments={'AGI+10','"Rapid Shot"+10','Enmity-5',}}, -- 9/10
feet="Meg. Jam. +2", --10/0
back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},} -- 10/0
-- 59/26
sets.Preshot.Fomalhaut.Any = set_combine(sets.Preshot,{
body="Laksa. Frac +2"}) -- 0/18
-- 47/44
sets.Preshot.Fomalhaut.RDM = set_combine(sets.Preshot.Fomalhaut.Any,{
head="Chass. Tricorne +1", -- 0/12
waist="Impulse Belt", -- 3/0
feet={ name="Pursuer's Gaiters", augments={'Rng.Acc.+10','"Rapid Shot"+10','"Recycle"+15',}},}) -- 0/10
-- 30/61
sets.Preshot.Holliday = {
head={ name="Taeon Chapeau", augments={'"Snapshot"+5','"Snapshot"+5',}}, -- 10/0
body="Oshosi Vest", -- 12/0
hands="Carmine Fin. Ga. +1", -- 8/11
waist="Yemaya Belt", -- 0/5
legs={ name="Adhemar Kecks", augments={'AGI+10','"Rapid Shot"+10','Enmity-5',}}, -- 9/10
feet="Meg. Jam. +2", --10/0
back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},} -- 10/0
-- 59/26
sets.Preshot.Holliday.Any = set_combine(sets.Preshot,{
body="Laksa. Frac +2"}) -- 0/18
-- 47/44
sets.Preshot.Holliday.RDM = set_combine(sets.Preshot.Holliday.Any,{
head="Chass. Tricorne +1", -- 0/12
waist="Impulse Belt", -- 3/0
feet={ name="Pursuer's Gaiters", augments={'Rng.Acc.+10','"Rapid Shot"+10','"Recycle"+15',}},}) -- 0/10
-- 30/61
sets.Preshot['Death Penalty'] = {
head={ name="Taeon Chapeau", augments={'"Snapshot"+5','"Snapshot"+5',}}, -- 10/0
body="Oshosi Vest", -- 12/0
hands="Carmine Fin. Ga. +1", -- 8/11
waist="Yemaya Belt", -- 0/5
legs={ name="Adhemar Kecks", augments={'AGI+10','"Rapid Shot"+10','Enmity-5',}}, -- 9/10
feet="Meg. Jam. +2", --10/0
back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},} -- 10/0
-- 59/26
sets.Preshot['Death Penalty'].Any = set_combine(sets.Preshot,{
body="Laksa. Frac +2"}) -- 0/18
-- 47/44
sets.Preshot['Death Penalty'].RDM = set_combine(sets.Preshot['Death Penalty'].Any,{
head="Chass. Tricorne +1", -- 0/12
waist="Impulse Belt", -- 3/0
feet={ name="Pursuer's Gaiters", augments={'Rng.Acc.+10','"Rapid Shot"+10','"Recycle"+15',}},}) -- 0/10
-- 30/61
-- Shooting Base Set --
sets.Midshot = {
head="Meghanada Visor +2",
body="Laksa. Frac +2",
hands={ name="Adhemar Wrist. +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
legs={ name="Adhemar Kecks +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Yemaya Belt",
left_ear="Telos Earring",
right_ear="Enervating Earring",
left_ring="Regal Ring",
right_ring="Hajduk Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','"Store TP"+10',}},}
sets.Midshot.MidACC = set_combine(sets.Midshot,{})
sets.Midshot.HighACC = set_combine(sets.Midshot.MidACC,{})
sets.Midshot.Aftermath = sets.Midshot
-- Fomalhaut Sets --
sets.Midshot.Fomalhaut = {
head="Meghanada Visor +2",
body="Laksa. Frac +2",
hands={ name="Adhemar Wrist. +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
legs={ name="Adhemar Kecks +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Yemaya Belt",
left_ear="Telos Earring",
right_ear="Enervating Earring",
left_ring="Regal Ring",
right_ring="Hajduk Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','"Store TP"+10',}},}
sets.Midshot.Fomalhaut.MidACC = set_combine(sets.Midshot.Fomalhaut,{})
sets.Midshot.Fomalhaut.HighACC = set_combine(sets.Midshot.Fomalhaut.MidACC,{})
sets.Midshot.Fomalhaut.Aftermath = sets.Midshot.Fomalhaut
-- Holliday Sets --
sets.Midshot.Holliday = {
head="Meghanada Visor +2",
body="Laksa. Frac +2",
hands={ name="Adhemar Wrist. +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
legs={ name="Adhemar Kecks +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Yemaya Belt",
left_ear="Telos Earring",
right_ear="Enervating Earring",
left_ring="Regal Ring",
right_ring="Hajduk Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','"Store TP"+10',}},}
sets.Midshot.Holliday.MidACC = set_combine(sets.Midshot.Holliday,{})
sets.Midshot.Holliday.HighACC = set_combine(sets.Midshot.Holliday.MidACC,{})
sets.Midshot.Holliday.Aftermath = {}
-- Death Penalty Sets --
sets.Midshot['Death Penalty'] = {
head="Meghanada Visor +2",
body="Laksa. Frac +2",
hands={ name="Adhemar Wrist. +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
legs={ name="Adhemar Kecks +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Yemaya Belt",
left_ear="Telos Earring",
right_ear="Enervating Earring",
left_ring="Regal Ring",
right_ring="Hajduk Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','"Store TP"+10',}},}
sets.Midshot['Death Penalty'].MidACC = set_combine(sets.Midshot['Death Penalty'],{})
sets.Midshot['Death Penalty'].HighACC = set_combine(sets.Midshot['Death Penalty'].MidACC,{})
sets.Midshot['Death Penalty'].Aftermath = sets.Midshot['Death Penalty']
-- Barrage Base Set --
Barrage = {}
sets.Midshot.Barrage = {
head="Meghanada Visor +2",
body="Laksa. Frac +2",
hands={ name="Adhemar Wrist. +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
legs={ name="Adhemar Kecks +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Yemaya Belt",
left_ear="Telos Earring",
right_ear="Enervating Earring",
left_ring="Regal Ring",
right_ring="Hajduk Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','"Store TP"+10',}},}
sets.Midshot.MidACC.Barrage = set_combine(sets.Midshot.Barrage,{})
sets.Midshot.HighACC.Barrage = set_combine(sets.Midshot.Barrage.MidACC,{})
-- Triple Shot Sets --
sets.Midshot.Fomalhaut.Tripleshot = set_combine(sets.Midshot,{
head="Oshosi Mask",
body="Chasseur's Frac +1",
right_ear="Enervating Earring",
right_ring="Hajduk Ring +1",
legs="Oshosi Trousers",
feet="Oshosi Leggings"})
sets.Midshot.Fomalhaut.MidACC.Tripleshot = sets.Midshot.Fomalhaut.Tripleshot
sets.Midshot.Fomalhaut.HighACC.Tripleshot = sets.Midshot.Fomalhaut.Tripleshot
sets.Midshot.Fomalhaut.Aftermath.Tripleshot = sets.Midshot.Fomalhaut.Tripleshot
sets.Midshot.Holliday.Tripleshot = set_combine(sets.Midshot,{
head="Oshosi Mask",
body="Chasseur's Frac +1",
right_ear="Enervating Earring",
right_ring="Hajduk Ring +1",
legs="Oshosi Trousers",
feet="Oshosi Leggings"})
sets.Midshot.Holliday.MidACC.Tripleshot = sets.Midshot.Holliday.Tripleshot
sets.Midshot.Holliday.HighACC.Tripleshot = sets.Midshot.Holliday.Tripleshot
sets.Midshot.Holliday.Aftermath.Tripleshot = set_combine(sets.Midshot.Holliday.Aftermath,{})
sets.Midshot['Death Penalty'].Tripleshot = set_combine(sets.Midshot,{
head="Oshosi Mask",
body="Chasseur's Frac +1",
right_ear="Enervating Earring",
right_ring="Hajduk Ring +1",
legs="Oshosi Trousers",
feet="Oshosi Leggings"})
sets.Midshot['Death Penalty'].MidACC.Tripleshot = sets.Midshot['Death Penalty'].Tripleshot
sets.Midshot['Death Penalty'].HighACC.Tripleshot = sets.Midshot['Death Penalty'].Tripleshot
sets.Midshot['Death Penalty'].Aftermath.Tripleshot = sets.Midshot['Death Penalty'].Tripleshot
-- PDT/MDT Sets --
sets.PDT = {
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
ring1="Dark Ring",
ring2="Defending Ring",
back="Moonbeam Cape",
legs="Carmine Cuisses +1",
waist="Flume Belt +1",
feet="Meg. Jam. +2",
neck="Loricate Torque +1"}
sets.MDT = {
head="Dampening Tam",
neck="Loricate Torque +1",
body="Laksa. Frac +2",
hands="Floral Gauntlets",
ring1="Purity Ring",
ring2="Defending Ring",
legs="Gyve trousers",
feet="Oshosi Leggings",
waist="Flume Belt +1",
back="Moonbeam Cape",
ear2="Etiolation Earring",}
-- Melee Sets --
sets.Melee = {
head={ name="Dampening Tam", augments={'DEX+10','Accuracy+15','Mag. Acc.+15','Quadruple Attack +3',}},
body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
feet={ name="Herculean Boots", augments={'Accuracy+16','"Triple Atk."+4','Attack+6',}},
neck="Lissome Necklace",
waist="Kentarch Belt +1",
left_ear="Telos Earring",
right_ear="Dedition Earring",
left_ring="Petrov Ring",
right_ring="Epona's Ring",
back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},}
sets.Melee.MidACC = set_combine(sets.Melee,{
right_ear="Suppanomimi"})
sets.Melee.HighACC = set_combine(sets.Melee.MidACC,{
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
right_ear="Cessance Earring",
left_ring="Chirich Ring",})
sets.Melee.Aftermath = set_combine(sets.Melee,{})
-- WS Base Set --
sets.WS = {}
-- WS Sets --
-- Last Stand --
sets.WS['Last Stand'] = {
head="Meghanada Visor +2",
body="Laksa. Frac +2",
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Rng.Acc.+24 Rng.Atk.+24','Weapon skill damage +4%','VIT+6','Rng.Atk.+6',}},
feet="Meg. Jam. +2",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Telos Earring",
right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +25',}},
left_ring="Regal Ring",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
sets.WS['Last Stand'].MidACC = set_combine(sets.WS["Last Stand"],{left_ring="Cacoethic Ring +1"})
sets.WS['Last Stand'].HighACC = set_combine(sets.WS["Last Stand"].MidACC,{left_ear="Telos Earring",waist="Yemaya Belt"})
sets.WS['Last Stand'].Aftermath = sets.WS['Last Stand']
-- Detonator --
sets.WS.Detonator = sets.WS['Last Stand']
sets.WS.Detonator.MidACC = sets.WS['Last Stand'].MidACC
sets.WS.Detonator.HighACC = sets.WS['Last Stand'].HighACC
sets.WS.Detonator.Aftermath = sets.WS.Detonator
-- Slug Shot --
sets.WS['Slug Shot'] = sets.WS['Last Stand']
sets.WS['Slug Shot'].MidACC = sets.WS['Last Stand'].MidACC
sets.WS['Slug Shot'].HighACC = sets.WS['Last Stand'].HighACC
sets.WS['Slug Shot'].Aftermath = sets.WS['Slug Shot']
-- Wildfire --
sets.WS['Wildfire'] = {
head={ name="Herculean Helm", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','"Fast Cast"+4','Mag. Acc.+15','"Mag.Atk.Bns."+12',}},
body={ name="Herculean Vest", augments={'"Mag.Atk.Bns."+28','Pet: Attack+24 Pet: Rng.Atk.+24','Weapon skill damage +3%','Accuracy+19 Attack+19','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs={ name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Enmity-5','MND+2','"Mag.Atk.Bns."+14',}},
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Sanctity Necklace",
waist="Eschan Stone",
left_ear="Friomisi Earring",
right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +25',}},
left_ring="Arvina Ringlet +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
sets.WS['Wildfire'].MidACC = set_combine(sets.WS['Wildfire'],{})
sets.WS['Wildfire'].HighACC = set_combine(sets.WS['Wildfire'].MidACC,{})
sets.WS['Wildfire'].Aftermath = sets.WS['Wildfire']
-- Hot Shot --
sets.WS['Hot Shot'] = {
head={ name="Herculean Helm", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','"Fast Cast"+4','Mag. Acc.+15','"Mag.Atk.Bns."+12',}},
body={ name="Herculean Vest", augments={'"Mag.Atk.Bns."+28','Pet: Attack+24 Pet: Rng.Atk.+24','Weapon skill damage +3%','Accuracy+19 Attack+19','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs={ name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Enmity-5','MND+2','"Mag.Atk.Bns."+14',}},
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Friomisi Earring",
right_ear="Sortiarius Earring",
left_ring="Arvina Ringlet +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
sets.WS['Hot Shot'].MidACC = set_combine(sets.WS['Hot Shot'],{})
sets.WS['Hot Shot'].HighACC = set_combine(sets.WS['Hot Shot'].MidACC,{})
sets.WS['Hot Shot'].Aftermath = sets.WS['Hot Shot']
-- Leaden Salute --
sets.WS['Leaden Salute'] = {
head="Pixie Hairpin +1",
body={ name="Herculean Vest", augments={'"Mag.Atk.Bns."+28','Pet: Attack+24 Pet: Rng.Atk.+24','Weapon skill damage +3%','Accuracy+19 Attack+19','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs={ name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Enmity-5','MND+2','"Mag.Atk.Bns."+14',}},
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Sanctity Necklace",
waist="Eschan Stone",
left_ear="Friomisi Earring",
right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +25',}},
left_ring="Archon Ring",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={-'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
sets.WS['Leaden Salute'].MidACC = set_combine(sets.WS['Leaden Salute'],{})
sets.WS['Leaden Salute'].HighACC = set_combine(sets.WS['Leaden Salute'].MidACC,{})
sets.WS['Leaden Salute'].Aftermath = sets.WS['Leaden Salute']
-- Dagger Weapon Skills --
sets.WS['Exenterator'] = {
head="Adhemar Bonnet",
neck="Fotia Gorget",
left_ear="Infused Earring",
ear2="Digni. Earring",
body="Meg. Cuirie +2",
hands="Mummu Wrists +2",
ring1="Ilabrat Ring",
ring2="Regal Ring",
back={ name="Belenus's Cape", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','AGI+10','Weapon skill damage +10%',}},
waist="Fotia Belt",
legs="Jokushu Haidate",
feet="Thereoid Greaves"}
sets.WS['Evisceration'] = sets.WS['Exenterator']
sets.WS['Aeolian Edge'] = sets.WS['Wildfire']
-- Sword Weapon Skills --
sets.WS['Savage Blade'] = {
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Telos Earring",
right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +25',}},
left_ring="Regal Ring",
right_ring="Ifrit Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
sets.WS['Circle Blade'] = sets.WS['Savage Blade']
sets.WS['Swift Blade'] = {
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Telos Earring",
right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +25',}},
left_ring="Regal Ring",
right_ring="Ifrit Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
sets.WS.Requiescat = sets.WS['Swift Blade']
-- JA Sets --
sets.JA = {}
-- Waltz Set --
sets.Waltz = {head="Mummu Bonnet +1",body="Passion Jacket",}
sets.Precast = {}
-- Fastcast Set --
sets.Precast.FastCast = {
head="Carmine Mask",
neck="Baetyl Pendant",
ear1="Loquac. Earring",
ear2="Etiolation earring",
body="Dread Jupon",
hands="Leyline Gloves",
ring1="Weather. Ring",
ring2="Kishar Ring",
waist="Rumination Sash",
legs="Carmine Cuisses +1",
feet="Carmine Greaves"}
-- Utsusemi Precast Set --
sets.Precast.Utsusemi = set_combine(sets.Precast.FastCast,{body="Passion Jacket",neck="Magoraga Beads"})
sets.Midcast = {}
-- Magic Haste Set --
sets.Midcast.Haste = set_combine(sets.PDT,{})
--Quick Draw--
sets.JA['Quick Draw'] = {
head={ name="Herculean Helm", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','"Fast Cast"+4','Mag. Acc.+15','"Mag.Atk.Bns."+12',}},
body={ name="Herculean Vest", augments={'"Mag.Atk.Bns."+28','Pet: Attack+24 Pet: Rng.Atk.+24','Weapon skill damage +3%','Accuracy+19 Attack+19','Mag. Acc.+10 "Mag.Atk.Bns."+10',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs={ name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Enmity-5','MND+2','"Mag.Atk.Bns."+14',}},
feet="Chass. Bottes +1",
neck="Sanctity Necklace",
waist="Eschan Stone",
left_ear="Friomisi Earring",
right_ear="Sortiarius Earring",
left_ring="Arvina Ringlet +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
sets.JA['Quick Draw'].MidACC = set_combine(sets.JA['Quick Draw'],{
body={ name="Samnuha Coat", augments={'Mag. Acc.+14','"Mag.Atk.Bns."+13','"Fast Cast"+4','"Dual Wield"+3',}},
hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},})
sets.JA['Quick Draw'].HighACC = set_combine(sets.JA['Quick Draw'].MidACC,{
head={ name="Carmine Mask", augments={'Accuracy+15','Mag. Acc.+10','"Fast Cast"+3',}},
feet="Laksa. Boots +3",
legs="Oshosi Trousers",
ear2="Enchntr. Earring +1",
ring2="Stikini Ring"})
sets.JA['Light Shot'] = sets.JA['Quick Draw'].HighACC
sets.JA['Dark Shot'] = sets.JA['Quick Draw'].HighACC
--Rolls/etc --
sets.JA['Random Deal'] = {body="Lanun Frac +1"}
sets.JA['Wild Card'] = {feet="Lanun Bottes +3"}
sets.JA['Snake Eye'] = {legs="Lanun Culottes +1"}
sets.JA['Fold'] = {hands="Lanun Gants +1"}
sets.JA['Triple Shot'] = {body="Chasseur's Frac +1"}
sets.JA['Phantom Roll'] = {
head="Lanun Tricorne +1",
body="Lanun Frac +1",
hands="Chasseur's Gants +1",
neck="Regal Necklace",
back="Camulus's Mantle"}
sets.JA['Double-Up'] = {
head="Lanun Tricorne +1",
body="Lanun Frac +1",
hands="Chasseur's Gants +1",
neck="Regal Necklace",
back="Camulus's Mantle"}
sets.JA["Tactician's Roll"] ={
head="Lanun Tricorne +1",
body="Chasseur's Frac +1",
hands="Chasseur's Gants +1",
neck="Regal Necklace",
back="Camulus's Mantle"}
sets.JA["Courser's Roll"] = {
head="Lanun Tricorne +1",
body="Lanun Frac +1",
hands="Chasseur's Gants +1",
feet="Chasseur's Bottes +1",
neck="Regal Necklace",
back="Camulus's Mantle"}
sets.JA["Blitzer's Roll"] = {
head="Chasseur's Tricorne",
body="Lanun Frac +1",
hands="Chasseur's Gants +1",
neck="Regal Necklace",
back="Camulus's Mantle"}
sets.JA["Caster's Roll"] = {
head="Lanun Tricorne +1",
body="Lanun Frac +1",
hands="Chasseur's Gants +1",
legs="Chasseur's Culottes +1",
neck="Regal Necklace",
back="Camulus's Mantle"}
if pet.isvalid then
else
send_command('wait 3;input /lockstyleset '..StartLockStyle)
end
end
function pretarget(spell,action)
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>')
elseif spell.english == "Berserk" and buffactive.Berserk then -- Change Berserk To Aggressor If Berserk Is On --
cancel_spell()
send_command('Aggressor')
elseif spell.english == "Seigan" and buffactive.Seigan then -- Change Seigan To Third Eye If Seigan Is On --
cancel_spell()
send_command('ThirdEye')
elseif spell.english == "Meditate" and player.tp > 290 then -- Cancel Meditate If TP Is Above 290 --
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: ['..player.tp..' TP]')
elseif (spell.english == 'Ranged' and spell.target.distance > 24.9) or (player.status == 'Engaged' and ((ranged_ws:contains(spell.english) and spell.target.distance > 16+target_distance))) then -- Cancel Ranged Attack or WS If You Are Out Of Range --
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
end
function precast(spell,action)
if spell.english == 'Ranged' then
equipSet = sets.Preshot
add_to_chat(57,"Flurry Level "..PreshotArray[PreshotIndex])
if buffactive['Flurry'] then
add_to_chat(122,"Flurry found")
if PreshotArray[PreshotIndex] == 'RDM' then
if equipSet[player.equipment.range].RDM then
equipSet = equipSet[player.equipment.range].RDM
end
else
if equipSet[player.equipment.range].Any then
equipSet = equipSet[player.equipment.range].Any
end
end
else
if equipSet[player.equipment.range] then
equipSet = equipSet[player.equipment.range]
end
add_to_chat(122,"No flurry")
end
equip(equipSet)
elseif spell.type == "WeaponSkill" then
equipSet = sets.WS
if equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if player.tp > 2749 or buffactive.Sekkanoki then
if spell.english == "Last Stand" then -- Equip Telos Earring When You Have 3000 TP or Sekkanoki For Last Stand --
equipSet = set_combine(equipSet,{ear2="Telos Earring"})
elseif spell.english == "Leaden Salute" then --Equip Ishvara Earring When you have 3000 TP or Sekkanoki for Leaden Salute --
equipSet = set_combine(equipSet,{ear2="Ishvara Earring"})
end
end
equip(equipSet)
elseif spell.type=="JobAbility" then
if sets.JA[spell.english] then
equip(sets.JA[spell.english])
end
elseif spell.type:endswith('Magic') or spell.type == "Ninjutsu" then
if string.find(spell.english,'Utsusemi') then
if buffactive['Copy Image (3)'] or buffactive['Copy Image (4)'] then
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: [3+ Images]')
return
else
equip(sets.Precast.Utsusemi)
end
else
equip(sets.Precast.FastCast)
end
elseif spell.type == "Waltz" then
equip(sets.Waltz)
elseif spell.english == 'Spectral Jig' and buffactive.Sneak then
cast_delay(0.2)
send_command('cancel Sneak')
end
if spell.type == 'CorsairRoll' or spell.english == "Double-Up" then
sets.JA['Phantom Roll'] = sets.JA['Phantom Roll']
equip(sets.JA['Phantom Roll'])
end
if spell.english == "Blitzer's Roll" then
equip(sets.JA["Blitzer's Roll"])
end
if spell.english == "Tactician's Roll" then
equip(sets.JA["Tactician's Roll"])
end
if spell.english == "Courser's Roll" then
equip(sets.JA["Courser's Roll"])
end
if spell.english == "Castor's Roll" then
equip(sets.JA["Caster's Roll"])
end
if spell.type == 'CorsairShot' then
equip(sets.JA['Quick Draw'])
end
if spell.english == "Random Deal" then
equip(sets.JA['Random Deal'])
end
if spell.english == "Double-Up" then
equip(sets.JA['Phantom Roll'])
end
if spell.english == "Wild Card" then
equip(sets.JA['Wild Card'])
end
if spell.english == "Fold" then
equip(sets.JA['Fold'])
end
if spell.english == "Snake Eye" then
equip(sets.JA['Snake Eye'])
end
if spell.english == "Triple Shot" then
equip(sets.JA['Triple Shot'])
end
end
function midcast(spell,action)
if spell.english == 'Ranged' then
equipSet = sets.Midshot
if equipSet[player.equipment.range] then
equipSet = equipSet[player.equipment.range]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if buffactive.Barrage and equipSet["Barrage"] then
equipSet = equipSet["Barrage"]
end
if buffactive['Triple Shot'] and equipSet["Tripleshot"] then
equipSet = equipSet["Tripleshot"]
end
equip(equipSet)
elseif spell.type:endswith('Magic') or spell.type == "Ninjutsu" then
if string.find(spell.english,'Utsusemi') then
if spell.english == 'Utsusemi: Ichi' and (buffactive['Copy Image'] or buffactive['Copy Image (2)']) then
send_command('@wait 1.7;cancel Copy Image*')
end
equip(sets.Midcast.Haste)
elseif spell.english == 'Monomi: Ichi' then
if buffactive['Sneak'] then
send_command('@wait 1.7;cancel sneak')
end
equip(sets.Midcast.Haste)
else
equip(sets.Midcast.Haste)
end
end
if spell.english == "Leaden Salute" and (buffactive['Voidtorm']) then
add_to_chat(125,'weather mode')
equip({waist="Hachirin-no-Obi"})
end
if spell.english == "Wildfire" and (buffactive['Firestorm']) then
add_to_chat(125,'weather mode')
equip({waist="Hachirin-no-Obi"})
end
end
function aftercast(spell,action)
if spell.english == 'Ranged' and autoRAmode==1 then
autoRA()
elseif spell.type == "WeaponSkill" and not spell.interrupted then
send_command('wait 0.2;gs c TP')
else
status_change(player.status)
end
end
function status_change(new,old)
if Armor == 'PDT' then
equip(sets.PDT)
elseif Armor == 'MDT' then
equip(sets.MDT)
elseif new == 'Engaged' then
equipSet = sets.Melee
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
equip(equipSet)
else
equip(sets.Idle[IdleArray[IdleIndex]])
end
end
-- In Game: //gs c (command), Macro: /console gs c (command), Bind: gs c (command) --
function self_command(command)
if command == 'acc' then -- Accuracy Level Toggle --
AccIndex = (AccIndex % #AccArray) + 1
add_to_chat(158,'Accuracy Level: ' .. AccArray[AccIndex])
status_change(player.status)
elseif command == 'flur' then -- Flurry Level Toggle --
PreshotIndex = (PreshotIndex % #PreshotArray) + 1
add_to_chat(158,'Flurry Level: ' ..PreshotArray[PreshotIndex])
status_change(player.status)
elseif command == 'auto' then -- Auto Update Gear Toggle --
status_change(player.status)
add_to_chat(158,'Auto Update Gear')
elseif command == 'pdt' then -- PDT Toggle --
if Armor == 'PDT' then
Armor = 'None'
add_to_chat(123,'PDT Set: [Unlocked]')
else
Armor = 'PDT'
add_to_chat(158,'PDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'mdt' then -- MDT Toggle --
if Armor == 'MDT' then
Armor = 'None'
add_to_chat(123,'MDT Set: [Unlocked]')
else
Armor = 'MDT'
add_to_chat(158,'MDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'C8' then -- Distance Toggle --
if player.target.distance then
target_distance = math.floor(player.target.distance*10)/10
add_to_chat(158,'Distance: '..target_distance)
else
add_to_chat(123,'No Target Selected')
end
elseif command == 'C6' then -- Idle Toggle --
IdleIndex = (IdleIndex % #IdleArray) + 1
add_to_chat(158,'Idle Set: ' .. IdleArray[IdleIndex])
status_change(player.status)
elseif command == 'AutoRA' then -- Auto Ranged Attack Toggle. *Don't Rely On This. It Isn't As Fast As Shooting Manually. It Is Mainly For AFK or When You Dualbox* --
if autoRAmode == 0 then
autoRAmode = 1
add_to_chat(158,'AutoRA Mode: [ON]')
else
autoRAmode = 0
add_to_chat(123,'AutoRA Mode: [OFF]')
end
elseif command == 'TP' then
add_to_chat(158,'TP Return: ['..tostring(player.tp)..']')
elseif command:match('^SC%d$') then
send_command('//' .. sc_map[command])
end
end
function autoRA()
send_command('@wait 2.5; input /ra <t>')
end
function sub_job_change(newSubjob, oldSubjob)
select_default_macro_book()
end
function set_macro_page(set,book)
if not tonumber(set) then
add_to_chat(123,'Error setting macro page: Set is not a valid number ('..tostring(set)..').')
return
end
if set < 1 or set > 10 then
add_to_chat(123,'Error setting macro page: Macro set ('..tostring(set)..') must be between 1 and 10.')
return
end
if book then
if not tonumber(book) then
add_to_chat(123,'Error setting macro page: book is not a valid number ('..tostring(book)..').')
return
end
if book < 1 or book > 20 then
add_to_chat(123,'Error setting macro page: Macro book ('..tostring(book)..') must be between 1 and 20.')
return
end
send_command('@input /macro book '..tostring(book)..';wait .1;input /macro set '..tostring(set))
else
send_command('@input /macro set '..tostring(set))
end
end
Valefor.Seranos
Server: Valefor
Game: FFXI
Posts: 193
By Valefor.Seranos 2018-03-08 21:44:37
So, I've modified a SCH lua I found so I can use Alt+` to scroll through elements, then have a single pallet for macros. That part is working perfectly. But, in doing that, the commands to use strategems are not working (the "function handle_stratagems" section is where it starts).
Any guidance would be greatly appreciated!
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
--[[
Custom commands:
Shorthand versions for each strategem type that uses the version appropriate for
the current Arts.
Light Arts Dark Arts
/console gs c scholar light Light Arts/Addendum
/console gs c scholar dark Dark Arts/Addendum
/console gs c scholar cost Penury Parsimony
/console gs c scholar speed Celerity Alacrity
/console gs c scholar aoe Accession Manifestation
/console gs c scholar power Rapture Ebullience
/console gs c scholar duration Perpetuance
/console gs c scholar accuracy Altruism Focalization
/console gs c scholar enmity Tranquility Equanimity
/console gs c scholar skillchain Immanence
/console gs c scholar addendum Addendum: White Addendum: Black
--]]
-------------------------------------------------------------------------------------------------------------------
-- Macros
-- Single I /console gs c castspell eleone
-- Single II /console gs c castspell eletwo
-- Single III /console gs c castspell elethree
-- Single IV /console gs c castspell elefour
-- Single V /console gs c castspell elefive
-- Single VI /console gs c castspell elesix
-- AoE I /console gs c castspell eleagaone
-- AoE II /console gs c castspell eleagatwo
-- AoE III /console gs c castspell eleagathree
-- Aja /console gs c castspell eleaja
-- AM /console gs c castspell eleam
-- AM II /console gs c castspell eleam2
-- Element DoT /console gs c castspell eledot
-- Helix /console gs c castspell elehelix
-- Weather /console gs c castspell eleweather
-- Skillchain /console gs c castspell schchain
-------------------------------------------------------------------------------------------------------------------
-- 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()
info.addendumNukes = S{"Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",
"Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
update_active_strategems()
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('None', 'Normal')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'PDT')
info.low_nukes = S{"Stone", "Water", "Aero", "Fire", "Blizzard", "Thunder"}
info.mid_nukes = S{"Stone II", "Water II", "Aero II", "Fire II", "Blizzard II", "Thunder II",
"Stone III", "Water III", "Aero III", "Fire III", "Blizzard III", "Thunder III",
"Stone IV", "Water IV", "Aero IV", "Fire IV", "Blizzard IV", "Thunder IV",}
info.high_nukes = S{"Stone V", "Water V", "Aero V", "Fire V", "Blizzard V", "Thunder V"}
state.eletype = M{['description']='Element Type', 'Stone', 'Water', 'Aero', 'Fire', 'Blizzard', 'Thunder', 'Light', 'Dark'}
-- stat.eletype:options('Stone', 'Water', 'Aero', 'Fire', 'Blizzard', 'Thunder', 'Light', 'Dark')
send_command('bind !` gs c cycle eletype')
gear.macc_hagondes = {name="Hagondes Cuffs", augments={'Phys. dmg. taken -3%','Mag. Acc.+29'}}
send_command('bind ^` input /ma Stun <t>')
select_default_macro_book()
end
function user_unload()
send_command('unbind ^`')
send_command('unbind !`')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
sets.buff['Ebullience'] = {head="Savant's Bonnet +2"}
sets.buff['Rapture'] = {head="Savant's Bonnet +2"}
sets.buff['Perpetuance'] = {hands="Savant's Bracers +2"}
sets.buff['Immanence'] = {hands="Savant's Bracers +2"}
sets.buff['Penury'] = {legs="Savant's Pants +2"}
sets.buff['Parsimony'] = {legs="Savant's Pants +2"}
sets.buff['Celerity'] = {feet="Pedagogy Loafers"}
sets.buff['Alacrity'] = {feet="Pedagogy Loafers"}
sets.buff['Klimaform'] = {feet="Savant's Loafers +2"}
sets.buff.FullSublimation = {head="Scholar's Mortarboard",ear1="Savant's Earring",body="Argute Gown"}
sets.buff.PDTSublimation = {head="Scholar's Mortarboard",ear1="Savant's Earring"}
--sets.buff['Sandstorm'] = {feet="Desert Boots"}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Run after the general midcast() is done.
function job_post_midcast(spell, action, spellMap, eventArgs)
if spell.action_type == 'Magic' then
apply_grimoire_bonuses(spell, action, spellMap, eventArgs)
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 buff == "Sublimation: Activated" then
handle_equipping_gear(player.status)
end
end
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
if stateField == 'Offense Mode' then
if newValue == 'Normal' then
disable('main','sub','range')
else
enable('main','sub','range')
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Custom spell mapping.
function job_get_spell_map(spell, default_spell_map)
if spell.action_type == 'Magic' then
if default_spell_map == 'Cure' or default_spell_map == 'Curaga' then
if world.weather_element == 'Light' then
return 'CureWithLightWeather'
end
elseif spell.skill == 'Enfeebling Magic' then
if spell.type == 'WhiteMagic' then
return 'MndEnfeebles'
else
return 'IntEnfeebles'
end
elseif spell.skill == 'Elemental Magic' then
if info.low_nukes:contains(spell.english) then
return 'LowTierNuke'
elseif info.mid_nukes:contains(spell.english) then
return 'MidTierNuke'
elseif info.high_nukes:contains(spell.english) then
return 'HighTierNuke'
end
end
end
end
function customize_idle_set(idleSet)
if state.Buff['Sublimation: Activated'] then
if state.IdleMode.value == 'Normal' then
idleSet = set_combine(idleSet, sets.buff.FullSublimation)
elseif state.IdleMode.value == 'PDT' then
idleSet = set_combine(idleSet, sets.buff.PDTSublimation)
end
end
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
return idleSet
end
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
if cmdParams[1] == 'user' and not (buffactive['light arts'] or buffactive['dark arts'] or
buffactive['addendum: white'] or buffactive['addendum: black']) then
if state.IdleMode.value == 'Stun' then
send_command('@input /ja "Dark Arts" <me>')
else
send_command('@input /ja "Light Arts" <me>')
end
end
update_active_strategems()
update_sublimation()
end
-- Function to display the current relevant user state when doing an update.
-- Return true if display was handled, and you don't want the default info shown.
function display_current_job_state(eventArgs)
display_current_caster_state()
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- Called for direct player commands.
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'scholar' then
handle_strategems(cmdParams)
eventArgs.handled = true
end
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- Reset the state vars tracking strategems.
function update_active_strategems()
state.Buff['Ebullience'] = buffactive['Ebullience'] or false
state.Buff['Rapture'] = buffactive['Rapture'] or false
state.Buff['Perpetuance'] = buffactive['Perpetuance'] or false
state.Buff['Immanence'] = buffactive['Immanence'] or false
state.Buff['Penury'] = buffactive['Penury'] or false
state.Buff['Parsimony'] = buffactive['Parsimony'] or false
state.Buff['Celerity'] = buffactive['Celerity'] or false
state.Buff['Alacrity'] = buffactive['Alacrity'] or false
state.Buff['Klimaform'] = buffactive['Klimaform'] or false
end
function update_sublimation()
state.Buff['Sublimation: Activated'] = buffactive['Sublimation: Activated'] or false
end
-- Equip sets appropriate to the active buffs, relative to the spell being cast.
function apply_grimoire_bonuses(spell, action, spellMap)
if state.Buff.Perpetuance and spell.type =='WhiteMagic' and spell.skill == 'Enhancing Magic' then
equip(sets.buff['Perpetuance'])
end
if state.Buff.Rapture and (spellMap == 'Cure' or spellMap == 'Curaga') then
equip(sets.buff['Rapture'])
end
if spell.skill == 'Elemental Magic' and spellMap ~= 'ElementalEnfeeble' then
if state.Buff.Ebullience and spell.english ~= 'Impact' then
equip(sets.buff['Ebullience'])
end
if state.Buff.Immanence then
equip(sets.buff['Immanence'])
end
if state.Buff.Klimaform and spell.element == world.weather_element then
equip(sets.buff['Klimaform'])
end
end
if state.Buff.Penury then equip(sets.buff['Penury']) end
if state.Buff.Parsimony then equip(sets.buff['Parsimony']) end
if state.Buff.Celerity then equip(sets.buff['Celerity']) end
if state.Buff.Alacrity then equip(sets.buff['Alacrity']) end
end
-- General handling of strategems in an Arts-agnostic way.
-- Format: gs c scholar <strategem>
function handle_strategems(cmdParams)
-- cmdParams[1] == 'scholar'
-- cmdParams[2] == strategem to use
if not cmdParams[2] then
add_to_chat(123,'Error: No strategem command given.')
return
end
local strategem = cmdParams[2]:lower()
if strategem == 'light' then
if buffactive['light arts'] then
send_command('input /ja "Addendum: White" <me>')
elseif buffactive['addendum: white'] then
add_to_chat(122,'Error: Addendum: White is already active.')
else
send_command('input /ja "Light Arts" <me>')
end
elseif strategem == 'dark' then
if buffactive['dark arts'] then
send_command('input /ja "Addendum: Black" <me>')
elseif buffactive['addendum: black'] then
add_to_chat(122,'Error: Addendum: Black is already active.')
else
send_command('input /ja "Dark Arts" <me>')
end
elseif buffactive['light arts'] or buffactive['addendum: white'] then
if strategem == 'cost' then
send_command('input /ja Penury <me>')
elseif strategem == 'speed' then
send_command('input /ja Celerity <me>')
elseif strategem == 'aoe' then
send_command('input /ja Accession <me>')
elseif strategem == 'power' then
send_command('input /ja Rapture <me>')
elseif strategem == 'duration' then
send_command('input /ja Perpetuance <me>')
elseif strategem == 'accuracy' then
send_command('input /ja Altruism <me>')
elseif strategem == 'enmity' then
send_command('input /ja Tranquility <me>')
elseif strategem == 'skillchain' then
add_to_chat(122,'Error: Light Arts does not have a skillchain strategem.')
elseif strategem == 'addendum' then
send_command('input /ja "Addendum: White" <me>')
else
add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
end
elseif buffactive['dark arts'] or buffactive['addendum: black'] then
if strategem == 'cost' then
send_command('input /ja Parsimony <me>')
elseif strategem == 'speed' then
send_command('input /ja Alacrity <me>')
elseif strategem == 'aoe' then
send_command('input /ja Manifestation <me>')
elseif strategem == 'power' then
send_command('input /ja Ebullience <me>')
elseif strategem == 'duration' then
add_to_chat(122,'Error: Dark Arts does not have a duration strategem.')
elseif strategem == 'accuracy' then
send_command('input /ja Focalization <me>')
elseif strategem == 'enmity' then
send_command('input /ja Equanimity <me>')
elseif strategem == 'skillchain' then
send_command('input /ja Immanence <me>')
elseif strategem == 'addendum' then
send_command('input /ja "Addendum: Black" <me>')
else
add_to_chat(123,'Error: Unknown strategem ['..strategem..']')
end
else
add_to_chat(123,'No arts has been activated yet.')
end
end
--Set up spells by element.
--
function job_update(cmdParams, eventArgs)
if state.eletype.value == 'Stone' then
eleone='Stone'
eletwo='Stone II'
elethree='Stone III'
elefour='Stone IV'
elefive='Stone V'
elesix='Stone VI'
eleagaone='Stonega'
eleagatwo='Stonega II'
eleagathree='Stonega III'
eleaja='Stoneja'
eleam='Quake'
eleamtwo='Quake II'
eledot='Rasp'
elehelix='Geohelix'
eleweather='Sandstorm'
elseif state.eletype.value == 'Water' then
eleone='Water'
eletwo='Water II'
elethree='Water III'
elefour='Water IV'
elefive='Water V'
elesix='Water VI'
eleagaone='Waterga'
eleagatwo='Waterga II'
eleagathree='Waterga III'
eleaja='Waterja'
eleam='Flood'
eleamtwo='Flood II'
eledot='Drown'
elehelix='Hydrohelix'
eleweather='Rainstorm'
elseif state.eletype.value == 'Aero' then
eleone='Aero'
eletwo='Aero II'
elethree='Aero III'
elefour='Aero IV'
elefive='Aero V'
elesix='Aero VI'
eleagaone='Aeroga'
eleagatwo='Aeroga II'
eleagathree='Aeroga III'
eleaja='Aeroja'
eleam='Tornado'
eleamtwo='Tornado II'
eledot='Choke'
elehelix='Anemohelix'
eleweather='Windstorm'
elseif state.eletype.value == 'Fire' then
eleone='Fire'
eletwo='Fire II'
elethree='Fire III'
elefour='Fire IV'
elefive='Fire V'
elesix='Fire VI'
eleagaone='Firaga'
eleagatwo='Firaga II'
eleagathree='Firaga III'
eleaja='Firaja'
eleam='Flare'
eleamtwo='Flare II'
eledot='Burn'
elehelix='Pyrohelix'
eleweather='Firestorm'
elseif state.eletype.value == 'Blizzard' then
eleone='Blizzard'
eletwo='Blizzard II'
elethree='Blizzard III'
elefour='Blizzard IV'
elefive='Blizzard V'
elesix='Blizzard VI'
eleagaone='Blizzaga'
eleagatwo='Blizzaga II'
eleagathree='Blizzaga III'
eleaja='Blizzaja'
eleam='Freeze'
eleamtwo='Freeze II'
eledot='Frost'
elehelix='Cryohelix'
eleweather='Hailstorm'
elseif state.eletype.value == 'Thunder' then
eleone='Thunder'
eletwo='Thunder II'
elethree='Thunder III'
elefour='Thunder IV'
elefive='Thunder V'
elesix='Thunder VI'
eleagaone='Thundaga'
eleagatwo='Thundaga II'
eleagathree='Thundaga III'
eleaja='Thundaja'
eleam='Burst'
eleamtwo='Burst II'
eledot='Shock'
elehelix='Ionohelix'
eleweather='Thunderstorm'
elseif state.eletype.value == 'Light' then
eleone='Banish'
eletwo='Banish II'
eleagaone='Banishga'
eleagatwo='Banishga II'
elehelix='Luminohelix'
eleweather='Aurorastorm'
elseif state.eletype.value == 'Dark' then
eleam='Comet'
eleamtwo='Meteor'
elehelix='Noctohelix'
eleweather='Voidstorm'
end
end
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'castspell' then
castspell_elemag(cmdParams)
eventArgs.handled = true
end
end
function castspell_elemag(cmdParams)
local elemag = cmdParams[2]:lower()
local elespell = ''
if elemag == 'eleone' then
elespell = eleone
elseif elemag == 'eletwo' then
elespell = eletwo
elseif elemag == 'elethree' then
elespell = elethree
elseif elemag == 'elefour' then
elespell = elefour
elseif elemag == 'elefive' then
elespell = elefive
elseif elemag == 'elesix' then
elespell = elesix
elseif elemag == 'eleagaone' then
elespell = eleagaone
elseif elemag == 'eleagatwo' then
elespell = eleagatwo
elseif elemag == 'eleagathree' then
elespell = eleagathree
elseif elemag == 'eleaja' then
elespell = eleaja
elseif elemag == 'eleam' then
elespell = eleam
elseif elemag == 'eleamtwo' then
elespell = eleamtwo
elseif elemag == 'eledot' then
elespell = eledot
elseif elemag == 'elehelix' then
elespell = elehelix
elseif elemag == 'eleweather' then
elespell = eleweather
end
local eletarg = ''
if elemag == 'eleweather' then
eletarg = '<me>'
else eletarg = "<t>"
end
send_command('input /ma "'.. elespell ..'" '.. eletarg ..'')
end
--send_command('input /ja "Immanence" <t>; /wait 1.5; /ma "'..sc1a..'" <t>; /wait 2; /ja "Immanence" <t>; /wait 1.5; /ma "'..sc1b..'" <t>')
-- Gets the current number of available strategems based on the recast remaining
-- and the level of the sch.
function get_current_strategem_count()
-- returns recast in seconds.
local allRecasts = windower.ffxi.get_ability_recasts()
local stratsRecast = allRecasts[231]
local maxStrategems = (player.main_job_level + 10) / 20
local fullRechargeTime = 4*60
local currentCharges = math.floor(maxStrategems - maxStrategems * stratsRecast / fullRechargeTime)
return currentCharges
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
set_macro_page(1, 2)
end
By Sockfoot 2018-03-08 22:19:44
So, I've modified a SCH lua I found so I can use Alt+` to scroll through elements, then have a single pallet for macros. That part is working perfectly. But, in doing that, the commands to use strategems are not working (the "function handle_stratagems" section is where it starts).
Any guidance would be greatly appreciated! Is it giving you an error?
Valefor.Seranos
Server: Valefor
Game: FFXI
Posts: 193
By Valefor.Seranos 2018-03-09 06:42:36
Is it giving you an error?
No error. The commands for stratagems just aren’t responding.
Shiva.Spynx
Server: Shiva
Game: FFXI
Posts: 371
By Shiva.Spynx 2018-03-09 12:25:59
You re-defined job_self_command again in the file so only the second one works (i.e. spell casting but no stratagem handling). Merge them and it should work.
By Squabble 2018-03-09 14:41:22
I'm running into an issue with trying to equip 2 Stikini Ring +1's - they both don't seem to equip some of the time. I have 2 Shiva Ring +1's and Varar Ring +1's and don't ever run into this problem, just the Stikini's. I have each one in a different wardrobe but that does't seem to resolve the issue. Is there a way to force gearswap to recognize that the two rings are not the same item to get them to both equip everytime?
Server: Sylph
Game: FFXI
Posts: 184
By Sylph.Subadai 2018-03-09 16:48:38
I'm running into an issue with trying to equip 2 Stikini Ring +1's - they both don't seem to equip some of the time. I have 2 Shiva Ring +1's and Varar Ring +1's and don't ever run into this problem, just the Stikini's. I have each one in a different wardrobe but that does't seem to resolve the issue. Is there a way to force gearswap to recognize that the two rings are not the same item to get them to both equip everytime? Have you tried something like: Code sets.midcast['Elemental Magic'] = {
ring1={name="Shiva Ring +1", bag="wardrobe2"},
ring2={name="Shiva Ring +1", bag="wardrobe3"} }
By Squabble 2018-03-09 19:28:29
I'm running into an issue with trying to equip 2 Stikini Ring +1's - they both don't seem to equip some of the time. I have 2 Shiva Ring +1's and Varar Ring +1's and don't ever run into this problem, just the Stikini's. I have each one in a different wardrobe but that does't seem to resolve the issue. Is there a way to force gearswap to recognize that the two rings are not the same item to get them to both equip everytime? Have you tried something like: Code sets.midcast['Elemental Magic'] = {
ring1={name="Shiva Ring +1", bag="wardrobe2"},
ring2={name="Shiva Ring +1", bag="wardrobe3"} }
This guy - most helpful dude on the internet.
Valefor.Seranos
Server: Valefor
Game: FFXI
Posts: 193
By Valefor.Seranos 2018-03-09 21:46:34
You re-defined job_self_command again in the file so only the second one works (i.e. spell casting but no stratagem handling). Merge them and it should work.
That worked, thank you!!!
By Tomlaps 2018-03-13 16:11:04
Hello. I'm trying to figure out an easy way for this :
gearswap doesn't trigger aftercast if the action doesn't complete (e.g. invalid target, petrified, slept etc.)
so i would like to avoid midcast gear staying on
it's a pretty easy problem,but many many variables
main issue is when tanking shits, and stuck into midcast gears if
stunned or, slept/petri, or any JAs, WS, etc...
It stays in WS set if stunned/slept etc while trying to use ws
Trying to figure out an easy way to fix this.
Thank you.
Ragnarok.Martel
Server: Ragnarok
Game: FFXI
Posts: 2954
By Ragnarok.Martel 2018-03-13 16:38:31
Hmmm. I was fairly sure that gearswap still trigger an aftercast on interrupted spells, etc. I do know that if you try to use an offensive action on an NPC then aftercast doesn't trigger. But out of range, interrupted spells, etc should all trigger. Can't test to confirm since I'm not subscribed atm.
In any case, it seems like most of the causes of the issues here are buffs. Could just set it up so that whenever you gain a buff on the "can't act" list, you snap into defensive gear. The "can't act" list being a custom list of buffs that make you unable to act. Stun, petrify, terror, and sleep come to mind. You can also setup JA/WS rule to prevent them from swapping gear in when amnesia'd, or just canceling the attempted action entirely when it's not currently possibly to activate it.
By Tomlaps 2018-03-13 17:21:44
function not_possible_to_use(spell) you mean ?
Ragnarok.Martel
Server: Ragnarok
Game: FFXI
Posts: 2954
By Ragnarok.Martel 2018-03-13 17:43:09
Never heard of it. Is that a motenten lua thing?
Server: Shiva
Game: FFXI
Posts: 1052
By Shiva.Arislan 2018-03-13 18:28:29
Maybe something like this?
Code function job_precast(spell, action, spellMap, eventArgs)
if buffactive['terror'] or buffactive['petrified'] or buffactive['sleep'] or buffactive['stun'] then
cancel_spell()
elseif buffactive['amnesia'] and spell.type == "WeaponSkill" then
cancel_spell{}
end
end
By Tomlaps 2018-03-13 18:36:13
Hmm yeah maybe...
No Martel, it's not but can check it out :
https://github.com/lorand-ffxi/gearswap/blob/master/spell_utilities.lua
Thx for ansers.
Ragnarok.Martel
Server: Ragnarok
Game: FFXI
Posts: 2954
By Ragnarok.Martel 2018-03-13 19:23:04
Looking over that functions, that would do it for canceling an action(and thus the gearswaps) when you try to do something you can't under your current buffs. Or rather I should say it determines a true/false for that. The function itself doesn't actually cancel the action. The rule you have calling the function would need to do that part. You just need to make sure that lua is included in your main lua, and that you have a rule call that function in precast or pretarget.
However, it wouldn't address actions being interrupted by statuses midcast. You'd need to setup something in buff_change to react to the buffs in question and equip defensive gear.
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2018-03-15 03:22:43
I've searched high and low but have not been able to find an answer, whether it be here, BG forums, or Google.
I'm looking to add subjob-specific engaged sets for my RUN, namely SAM and DRK. I thought I found my answer with this, but it didn't work. Using a Mote lua.Code function adjust_melee_groups()
classes.CustomMeleeGroups:clear()
if player.sub_job == "SAM" then
classes.CustomMeleeGroups:append('SAM')
elseif player.sub_job == "DRK" then
classes.CustomMeleeGroups:append('DRK')
end
end Any help is appreciated.
Server: Asura
Game: FFXI
Posts: 196
By Asura.Inuyushi 2018-03-15 06:51:16
Did you put adjust_melee_groups() in your function user_setup()? Like below.
Code
function user_setup()
adjust_melee_groups()
end
[+]
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2018-03-15 15:57:31
Thanks, Inuyushi. That was the missing piece of the puzzle, much obliged.
Hades.Dade
Server: Hades
Game: FFXI
Posts: 230
By Hades.Dade 2018-03-15 19:39:49
Hey, I'm trying to automate checking which version of haste is active on my char and finding the Spells haste1/2 from parsing incoming packet was fairly easy. Does anyone know how to track down the addition effect of Blurred+1 weapon haste? He is what I got working so far.
Code --find out flurry & haste levels
windower.raw_register_event("incoming chunk", function(id, data)
if id == 0x028 then
local packet = p.parse('incoming', data)
if packet["Category"] == 4 then
if packet["Param"] == 845 then
--add_to_chat(122, 'Flurry')
flurry = 1
elseif packet["Param"] == 846 then
--add_to_chat(122, 'Flurry2')
flurry = 2
elseif packet["Param"] == 57 then
--add_to_chat(122, 'Haste')
haste = 1
elseif packet["Param"] == 511 then
--add_to_chat(122, 'Haste2')
haste = 2
end
--add_to_chat(122, packet["Param"])
end
end
end)
edit: also need to track down smn hastaga2
By Xithrowaway 2018-03-15 22:24:53
Hi, I saw a really cool feature in the RUN lua I've been using and was attempting to mimic the same concept for my WHM lua, but it's clear there's something about the code I'm not understanding. Anyway, what I attempted is below, gearswap seems to recognize the states well enough but when it comes to the commands, nothing occurs. If anyone has any insight, it would be appreciated.
Code function user_setup()
state.Barelement = M{['description']='Barelement', 'Barstonra', 'Barwatera', 'Bareara', 'Barfira', 'Barblizzara', 'Barthundra'}
state.Barstatus = M{['description']='Barstatus', 'Baramnesra', 'Barvira', 'Barparalyzra', 'Barsilencera', 'Barpetra', 'Barpoisonra', 'Barblindra', 'Barsleepra'}
state.Boost = M{['description']='Boost', Boost-DEX', 'Boost-STR', 'Boost-INT', 'Boost-AGI', 'Boost-VIT', 'Boost-MND', 'Boost-CHR'}
send_command('bind !q input //gs c Barelement')
send_command('bind !w gs c cycle Barelement')
send_command('bind !a input //gs c Barstatus')
send_command('bind !s gs c cycle Barstatus')
send_command('bind !z input //gs c Boost')
send_command('bind !x gs c cycle Boost')
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'Barelement' then
send_command('@input /ma '..state.Barelement.value..' <me>')
end
if cmdParams[1]:lower() == 'Barstatus' then
send_command('@input /ma '..state.Barstatus.value..' <me>')
end
if cmdParams[1]:lower() == 'Boost' then
send_command('@input /ma '..state.Boost.value..' <me>')
end
end
Asura.Cair
VIP
Server: Asura
Game: FFXI
Posts: 246
By Asura.Cair 2018-03-15 23:28:05
cmdParams[1]:lower() means that it will contain all lowercase
You should also you elseif, and consider storing the value of cmdParams[1]:lower() in a local variable
By Xithrowaway 2018-03-15 23:45:43
Thanks Cair,
I'm not too proud to admit that everything in your second sentence went over my level of understanding, but pointing on the syntax inconsistencies allowed me to get the features I wanted working.
Asura.Shosei
Server: Asura
Game: FFXI
Posts: 10
By Asura.Shosei 2018-03-16 16:24:43
Within a gearswap lua, is there a way to check if an addon is loaded or not?
Carbuncle.Kigensuro
Server: Carbuncle
Game: FFXI
Posts: 93
By Carbuncle.Kigensuro 2018-03-17 09:54:35
no because addons (as far as i know) can not see if other addons are in memory
only windower its self can do that
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.
|
|