|
Gearswap Support Thread
サーバ: Sylph
Game: FFXI
Posts: 11
By Sylph.Marvolous 2014-08-10 19:14:50
It's case sensitive, make sure that you have capitals in all the right places.
All cases are correct. I even copied and pasted straight from the lua file.
Make sure sets.precast is declared somewhere(Unless you're using Mote's which then I don't think it needs to be).
I'm using Mote's.
If you guys have it, can you see if it's working for you? Thanks.
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-10 20:42:29
I suspect it's an issue with how GearSwap's basic command handling splits up equip group names. It assumes single quotes around key strings (eg: 'Exenterator' rather than "Exenterator"), and removes them when converting the dot-form to a series of keys that it can navigate.
Of course, that means that "Rudra's Storm" gets turned into the key "Rudras Storm", which won't be found.
I'll see if I can rewrite that section to something more correct.
サーバ: Sylph
Game: FFXI
Posts: 11
By Sylph.Marvolous 2014-08-10 21:24:45
I suspect it's an issue with how GearSwap's basic command handling splits up equip group names. It assumes single quotes around key strings (eg: 'Exenterator' rather than "Exenterator"), and removes them when converting the dot-form to a series of keys that it can navigate.
Of course, that means that "Rudra's Storm" gets turned into the key "Rudras Storm", which won't be found.
I'll see if I can rewrite that section to something more correct.
Thank you very much.
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-10 23:07:16
I put in a fix for that, though it's only on dev right now.
By kenshynofshiva 2014-08-11 08:39:10
So am I missing something trying to figure what is the best method to lock a gear slot for the duration of a buff say sam 1hr is it simply watch buff status and enable disable feet or a better way??? Maybe using if buffactive and equip
(set_combine())????
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-11 13:14:01
No, that's pretty much it. You can make it slightly better by locking the feet in aftercast() when you use Meikyo, but for the simplest method, just watch buff_change.
Code
function buff_change(buff, gain)
if buff == 'Meikyo Shisui' then
if gain then
equip({feet="Sakonji Sune-ate"})
disable('feet')
else
enable('feet')
end
end
end
By kenshynofshiva 2014-08-11 14:36:23
Cool thanks thats what I implemented but was thinking maybe a another better way like the old school lock in spellcast or something with set_combine but that looked easily more convoluted. Just user_buff_change and go got it.
By Mozhat 2014-08-14 12:14:23
I'm trying out Kinematics PLD
https://github.com/Kinematics/GearSwap-Jobs/blob/master/PLD.lua
In the Reraise modes, during any kind of casting the Twilight head,body comes off.
Is there a sript to lock the Twilight set when you are in Reraise/RepulseReraise mode?
If there is, please show me how and where to put the script.
Sorry I'm still learning this Gearswap method.
Thank you!
Fenrir.Vyle
サーバ: Fenrir
Game: FFXI
Posts: 13
By Fenrir.Vyle 2014-08-18 19:39:09
Please help! When I engage, this switches in my gear, when I disengage, it switches in my idle. But then, every time I reengage, nothing happens and I get the error: 69: attempt to index field 'Minos' (a nil value).
Thank you!
Code abyssea_zones = S{"Abyssea - Konschtat","Abyssea - La Theine","Abyssea - Tahrongi","Abyssea - Attohwa","Abyssea - Misareaux","Abyssea - Vunkerl","Abyssea - Altepa","Abyssea - Grauberg","Abyssea - Uleguerand","Abyssea - Empyreal Paradox"}
STRWS = S{"Steel Cyclone","King's Justice","Fell Cleave","Metatron Torment","Sanguine Blade","Herculean Slash",
"Resolution"}
CRITWS = S{"Ukko's Fury","Raging Rush"}
function get_sets()
sets.precast = {}
sets.precast["Warcry"] = {head="Agoge Mask"}
sets.precast["Tomahawk"] = {ammo="Thr. tomahawk"}
sets.precast["Blood Rage"] = {body="Ravager's Lorica +2"}
sets.precast["Aggressor"] = {head="Pummeler's Mask"}
sets.precast["Berserk"] = {body="Pummeler's Lorica"}
sets.precast["Mighty Strikes"] = {hands="Agoge muffler's +1"}
sets.precast.Normal = {}
sets.precast.LowAcc = {}
sets.precast.Zerg = {}
--sets.precast.Normal["Upheaval"] = {ammo="Oneiros Pebble",head="Yaoyotl Helm",neck="Light Gorget",ear1="Moonshade Earring",ear2="Brutal Earring",body="Xaddi Mail",hands="Agoge Mufflers +1",ring1="Terrasoul Ring",ring2="Terrasoul Ring",back="Ixemulew Cape",waist="Light Belt",legs="Pummeler's Cuisses +1",feet="Pummeler's Calligae +1"}
--sets.precast.LowAcc["Upheaval"] = {ammo="Oneiros Pebble",head="Yaoyotl Helm",neck="Light Gorget",ear1="Moonshade Earring",ear2="Brutal Earring",body="Xaddi Mail",hands="Buremte Gloves",ring1="Terrasoul Ring",ring2="Mars's Ring",back="Mauler's Mantle",waist="Anguinus Belt",legs="Pummeler's Cuisses +1",feet="Ejekamal Boots"}
--sets.precast.Zerg["Upheaval"] = {ammo="Oneiros Pebble",head="Quiahuiz Helm",neck="Light Gorget",ear1="Moonshade Earring",ear2="Brutal Earring",body="Xaddi Mail",hands="Agoge Mufflers +1",ring1="Terrasoul Ring",ring2="Terrasoul Ring",back="Ixemulew Cape",waist="Light Belt",legs="Agoge Cuisses +1",feet="Pummeler's Calligae +1"}
sets.precast.WSMod = {}
sets.precast.WSMod.MS = {ammo="Yetshila",back="Cavaros Mantle",feet="Ravager's Calligae +2"}
sets.precast.WSMod.TPBonus = {ear1="Bloodborn Earring",ear2="Steelflash Earring"}
sets.TP = {}
sets.TP.Minos = {}
sets.TP.Minos.Normal = {ammo="Jukukik Feather",head="Yaoyotl Helm",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",body="Xaddi Mail",hands="Cizin Mufflers +1",ring1="K'ayres Ring",ring2="Rajas Ring",back="Mauler's Mantle",waist="Anguinus Belt",legs="Pummeler's Cuisses +1",feet="Ejekamal Boots"}
sets.TP.Minos.LowAcc = {ammo="Jukukik Feather",head="Yaoyotl Helm",neck="Iqabi Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",body="Xaddi Mail",hands="Buremte Gloves",ring1="Mars's Ring",ring2="Rajas Ring",back="Mauler's Mantle",waist="Anguinus Belt",legs="Pummeler's Cuisses +1",feet="Ejekamal Boots"}
sets.TP.Minos.Zerg = {ammo="Paeapua",head="Otomi Helm",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",body="Xaddi Mail",hands="Cizin Mufflers +1",ring1="K'ayres Ring",ring2="Rajas Ring",back="Mauler's Mantle",waist="Windbuffet Belt",legs="Agoge Cuisses +1",feet="Ejekamal Boots"}
sets.TP.PH = {}
sets.TP.Actual = {}
sets.aftercast = {}
sets.aftercast.TP = sets.TP.Actual
sets.aftercast.Idle = {ammo="Angha Gem",head="Cizin Helm +1",neck="Twilight Torque",ear1="Black Earring",ear2="Black Earring",body="Mekira Meikogai",hands="Cizin Mufflers +1",ring1="Dark Ring",ring2="Dark Ring",back="Shadow Mantle",waist="Nierenschutz",legs="Ogier's Breeches",feet="Hermes' Sandals"}
-- {ammo="",head="",neck="",ear1="",ear2="",body="",hands="",ring1="",ring2="",back="",waist="",legs="",feet=""}
end
function precast(spell,action)
if spell.type=="Weaponskill" then
if spell.english == 'Upheaval' then
equip(sets.precast.Normal["Upheaval"])
end
elseif sets.precast[spell.english] then
equip(sets.precast[spell.english])
end
end
function aftercast(spell,action)
end
function status_change(new,old)
if T{'Idle'}:contains(new) then
equip(sets.aftercast.Idle)
elseif new == 'Engaged' then
if player.equipment.main == 'Minos' then
sets.TP.Minos = sets.TP.Minos.Normal
sets.TP.PH = sets.TP.Minos
end
sets.TP.Actual = sets.TP.PH
sets.aftercast.TP = sets.TP.Actual
equip(sets.aftercast.TP)
end
end
By Santi 2014-08-18 22:19:49
Hello,
I'm using Motenten's nin GS...
How would I have GS equip opo necklace when sleep buff is gained or active and revert back to whatever my idle or melee neck is when sleep is lost?
I can't seem to figure out, I always have to either refresh set or do a command for it to recognize that im slept.
thanks in advance
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-19 00:09:02
I'm trying out Kinematics PLD
https://github.com/Kinematics/GearSwap-Jobs/blob/master/PLD.lua
In the Reraise modes, during any kind of casting the Twilight head,body comes off.
Is there a sript to lock the Twilight set when you are in Reraise/RepulseReraise mode?
If there is, please show me how and where to put the script.
Sorry I'm still learning this Gearswap method.
Thank you!
All of the job files have gone through a major revamp, particularly pld. What you're asking for will work properly in the next update.
However the next update is also going to break a lot of things. You'll want to rebuild your gear sets from scratch, as a lot of the retooling changes how various sets interact.
I expect to push these changes to dev in the next couple days, and then to live in maybe a week (whereupon I expect tons of "it's broke!" posts).
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-19 00:10:47
Hello,
I'm using Motenten's nin GS...
How would I have GS equip opo necklace when sleep buff is gained or active and revert back to whatever my idle or melee neck is when sleep is lost?
I can't seem to figure out, I always have to either refresh set or do a command for it to recognize that im slept.
thanks in advance
Put something in the job_buff_change function that recognizes that you gained or lost the 'sleep' buff. May also need to modify the customize_idle_set function, depending on how you go about it.
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-19 00:27:39
Please help! When I engage, this switches in my gear, when I disengage, it switches in my idle. But then, every time I reengage, nothing happens and I get the error: 69: attempt to index field 'Minos' (a nil value).
Thank you!
The problem is in how you modify your sets when you change configs.
Code
elseif new == 'Engaged' then
if player.equipment.main == 'Minos' then
sets.TP.Minos = sets.TP.Minos.Normal
sets.TP.PH = sets.TP.Minos
end
sets.TP.Actual = sets.TP.PH
sets.aftercast.TP = sets.TP.Actual
equip(sets.aftercast.TP)
end
When you engage the first time, you change the table sets.TP.Minos to sets.TP.Minos.Normal, and assign Sets.TP.Minos to sets.TP.PH, which gets assigned to .. actually, we don't need to go further because it's already broken.
sets.TP.Minos.Normal exists -inside- sets.TP.Minos. When you say [sets.TP.Minos = sets.TP.Minos.Normal], that means that sets.TP.Minos *no longer points the the table that contains sets.TP.Minos.Normal*.
Let's try using some numbers.
Initially:
sets.TP.Minos refers to table 1
sets.TP.Minos.Normal refers to table 2, which is pointed to by the 'Normal' key inside table 1.
Table 1 contains a reference to table 2. Table 2 does not contain a reference to itself.
First time through:
sets.TP.Minos = sets.TP.Minos.Normal
sets.TP.Minos now refers to table 2
sets.TP.Minos.Normal now refers to the key 'Normal' inside table 2. There is no such key, so this is now nil.
Next time through:
sets.TP.Minos (table 2) = sets.TP.Minos.Normal ('Normal' within table 2, which is nil)
sets.TP.Minos is now nil.
sets.TP.Minos.Normal refers to the key 'Normal' inside sets.TP.Minos, however sets.TP.Minos is nil, so trying to find 'Normal' inside that fails with an error.
Frankly, I have no idea what you're trying to do in the status_change function. You keep assigning tables to each other in a chain that will never work in any useful way.
If you're trying to change which TP set to use, set up an entirely separate, dedicated variable for that.
Code
my_TP_set = 'Normal'
if sets.TP.Minos[my_TP_set] then
equip(sets.TP.Minos[my_TP_set])
end
And then have some way of changing the value of my_TP_set. Since that's a string instead of a table reference, you won't have that weird Rube Goldberg chain of reassignments that eventually breaks.
By Santi 2014-08-19 02:18:36
Put something in the job_buff_change function that recognizes that you gained or lost the 'sleep' buff. May also need to modify the customize_idle_set function, depending on how you go about it.
This is what I have:
Code
function job_setup()
state.Buff.Doomed = buffactive.doomed or false
state.Buff.Sleep = buffactive.sleep or false
determine_haste_group()
end
sets.buff.Doomed = {ring2="Saida Ring"}
sets.buff.Futae = {neck="Opo-opo Necklace",back="Aries Mantle"}
function customize_idle_set(idleSet)
if state.Buff.Doomed then
idleSet = set_combine(idleSet, sets.buff.Doomed)
end
if state.Buff.Sleep then
idleSet = set_combine(idleSet, sets.buff.Sleep)
end
return idleSet
end
function customize_melee_set(meleeSet)
if state.Buff.Doomed then
meleeSet = set_combine(meleeSet, sets.buff.Doomed)
end
if state.Buff.Sleep then
meleeSet = set_combine(meleeSet, sets.buff.Sleep)
end
return meleeSet
end
function job_buff_change(buff, gain)
-- If we gain or lose any haste buffs, adjust which gear set we target.
if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
determine_haste_group()
handle_equipping_gear(player.status)
elseif state.Buff[buff] ~= nil then
state.Buff[buff] = gain
handle_equipping_gear(player.status)
end
end
function job_update(cmdParams, eventArgs)
determine_haste_group()
update_time_based_gear()
end
function determine_haste_group()
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) 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('EmbravaHaste')
elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 2 then
classes.CustomMeleeGroups:append('HighHaste')
end
end
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-19 11:48:22
It would likely work if you changed state.Buff.Sleep to state.Buff.sleep. The buff given to the buff_change function is 'sleep', and that table reference is case sensitive.
By Santi 2014-08-19 13:56:05
It would likely work if you changed state.Buff.Sleep to state.Buff.sleep. The buff given to the buff_change function is 'sleep', and that table reference is case sensitive.
That did it! thank you!
Sylph.Cyc
サーバ: Sylph
Game: FFXI
Posts: 24
By Sylph.Cyc 2014-08-19 18:23:14
Posting again something I tried to ask 15 pages ago, but never actually fixed.
This is a chunk of my SCH lua file, precast rule: Code elseif spell.type == 'Scholar' then
if spell.english == 'Manifestation' then
if buffactive['Light Arts'] or buffactive['Addendum: White'] then
cancel_spell()
send_command('input /ja "Accession" <me>')
end
elseif spell.english == 'Accession' then
if buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
cancel_spell()
send_command('input /ja "Manifestation" <me>')
end
end
elseif spell.type == 'JobAbility' then
if spell.english == 'Light Arts' and buffactive['Light Arts'] then
cancel_spell()
send_command('input /ja "Addendum: White" <me>')
elseif spell.english == 'Dark Arts' and buffactive['Dark Arts'] then
cancel_spell()
send_command('input /ja "Addendum: Black" <me>')
end
Auto Addendum works, but stratagems are not changing based on those rules. Debug mode reports: Code GearSwap (Debug Mode): Unable to execute command. You do not have access to that ability (Accession)
GearSwap (Debug Mode): Entering filtered_action
As if precast swap couldn't even trigger because I don't have access to those stratagems.
Lakshmi.Byrth
VIP
サーバ: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2014-08-19 18:36:28
That is a bug with Gearswap. In the future, please report bugs here https://github.com/Byrth/Lua/issues
I am going bonkers in grad school right now so I do not have as much time/willpower to check this thread as I used to.
Sylph.Cyc
サーバ: Sylph
Game: FFXI
Posts: 24
By Sylph.Cyc 2014-08-19 19:09:40
Reported on GitHub as a memo for you. Thanks!
Fenrir.Vyle
サーバ: Fenrir
Game: FFXI
Posts: 13
By Fenrir.Vyle 2014-08-19 22:13:33
Hi guys.
Can anyone explain to me why this doesn't work?
Code adoulin_zones = S{"Ceizak Battlegrounds","Foret de Hennetiel","Yorcia Weald","Marjami Ravine"}
function status_change(new,old)
if T{'Idle'}:contains(new) then
equip(sets.aftercast.Idle)
elseif adoulin_zones:contains(zone) then
equip(sets.TP.adoulin)
else
equip(sets.TP.normal)
end
end
Thank you!
Edit: sets.TP.adoulin and sets.TP.normal are defined, but left out of this post
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-19 22:38:19
Code if T{'Idle'}:contains(new) then
What is this? You're checking if a var is within a set that contains only a single value. In other words, the only possible way for it to be true is if [new] is 'Idle'. Which is the same as saying new == 'Idle'. Which is what you should be using.
Code elseif adoulin_zones:contains(zone) then
The [zone] variable is a global that doesn't mean anything, because it doesn't exist. You want world.zone.
サーバ: Fenrir
Game: FFXI
Posts: 354
By Fenrir.Divinian 2014-08-19 22:47:02
I have a question, mainly for motenten, but if anyone has an answer, I'd appreciate the help.
In your thf.lua, you state:
"Tag - Will equip TH gear sufficient for initial contact with a mob (either melee, ranged hit, or Aeolian Edge AOE)"
I am curious if you meant that there is a TH mode that would equip TH gear when engaged, hit a mob, and automatically switch to full TP gear. I looked through the entire file twice to see if there was a rule in there that might do this, but I did not find anything. My knowledge of lua is elementary, so it is probable that I missed it or that I am just engaging in wishful thinking. But just maybe...
Anyway, does this exist? If so, can you point me to where it is. If not, do I just have to deal with keeping my TH set paired with dnc ja's and ranged attacks? I only ask because I DB dyna and like my mule to proc first on dnc/00 just in case I win the lottery and get a white proc.
Thanks in advance for any info from anyone.
サーバ: Ragnarok
Game: FFXI
Posts: 59
By Ragnarok.Grimlockking 2014-08-21 12:11:27
Hi, returning player here and trying to get up and running with Gearswap. I am using Bokura's xml's and everything seems to be working for me minus these toggles for pdt/mdt swaps.
I was under the impression I could just write this in a macro, something like : "/console gs c (c7)"
and that would flip me to my PDT set and hit it again to toggle it off. Been messing with it for a while and wondering if someone could help out.
Code elseif command == 'C7' 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)
Nevermind. some stupid brackets messing me up.
VIP
サーバ: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-08-21 13:11:29
I have a question, mainly for motenten, but if anyone has an answer, I'd appreciate the help.
In your thf.lua, you state:
"Tag - Will equip TH gear sufficient for initial contact with a mob (either melee, ranged hit, or Aeolian Edge AOE)"
I am curious if you meant that there is a TH mode that would equip TH gear when engaged, hit a mob, and automatically switch to full TP gear.
That is correct.
I looked through the entire file twice to see if there was a rule in there that might do this, but I did not find anything. My knowledge of lua is elementary, so it is probable that I missed it or that I am just engaging in wishful thinking. But just maybe...
Anyway, does this exist? If so, can you point me to where it is. If not, do I just have to deal with keeping my TH set paired with dnc ja's and ranged attacks? I only ask because I DB dyna and like my mule to proc first on dnc/00 just in case I win the lottery and get a white proc.
Thanks in advance for any info from anyone.
All the TH mode handling was moved to a separate library include, Mote-TreasureHunter, so that it could be easily included in any job that wanted to use the same TH tracking for tagging mobs. This is mainly because of the addition of the Chaac Belt, which is an all jobs item.
Fenrir.Vyle
サーバ: Fenrir
Game: FFXI
Posts: 13
By Fenrir.Vyle 2014-08-22 20:50:53
Hi guys,
I'm trying to make a conditional statement that performs a certain task when my target is a certain monster. The following code is what I see in other lua files online, but it doesn't work for me. Any ideas why?
Code if player.target.name == "Tenzen" then
equip(sets.TP.Tenzen1A2)
end
sets.TP.Tenzen1A2 is properly defined.
Thank you!
Asura.Lewyo
サーバ: Asura
Game: FFXI
Posts: 86
By Asura.Lewyo 2014-08-23 17:50:18
How would i add a fuction to my brd lua to let it put the target on me if target was not on anyone when doing brd songs.
The Auto pianissimo rule works fine i just find myself trying to sing songs and hitting a error cuz im not targeted onto anyone.
Code function precast(spell)
if spell.action_type == 'Magic' then
if spell.type == 'BardSong' then
-- Auto-Pianissimo
if spell.target.type == 'PLAYER' and not spell.target.charmed and not buffactive['Pianissimo'] then
cancel_spell()
send_command('@input /ja "Pianissimo" <me>; wait 1.25; input /ma "'..spell.name..'" '..spell.target.name)
return
サーバ: Phoenix
Game: FFXI
Posts: 282
By Phoenix.Chomeymatt 2014-08-24 10:31:10
http://pastebin.com/fuVAp4XV , on line 509 its not equipping aftercast for Dia 3. What would I need to fix?
Bahamut.Ahliyya
サーバ: Bahamut
Game: FFXI
Posts: 18
By Bahamut.Ahliyya 2014-08-25 10:47:55
Quick question, done everything according to the letter in the instructions, but when I try to load any of my .lua's I get "geasrswap:file not found"
Any idea how to fix this?
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.
|
|