|
Gearswap Support Thread
Quetzalcoatl.Orestes
Serveur: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2015-01-21 00:24:37
Hello, I'm pretty new to gearswap and I barely understand how it works. I wanted to know how to set up Accuracy modes and tie them to ONE toggle.
Presently, I am using several swap files that are bound together by my F5-F8 keys. I would like to only use ONE file for the binds but I don't know how to bind OffenseMode and WeaponskillMode to ONE key.
Honestly, It seems a little silly to me that they would be separated in the first place but I'm sure there's a good reason for that.
I have tried:
send_command('bind f5 cycle OffenseMode')
send_command('bind f5 cycle WeaponskillMode')
but instead of cycling both modes, it only cycles WeaponskillMode, probably because its the more recent of the two commands..
I have also tried
send_command('bind f5 toggle OffenseMode and WeaponskillMode')
as well as
send_command('bind f5 toggle OffenseMode & WeaponskillMode')
but neither work :(
I'm certain there's a way to hit one button and change my entire Acc mode, not just my Melee or WS lol
This is probably the most simple question ever, please forgive me.
Thank you for your time xD
edit: I was on my phone when I first responded.
OffenseMode and WeaponskillMode are linked to one another, assuming both share the same modes.
For example: Code
state.OffenseMode:options('Normal', 'Mid', 'Acc')
state.WeaponskillMode:options('Normal', 'Mid', 'Acc')
With this setup, you never have to bother toggling WeaponskillMode. It's done for you when you toggle OffenseMode.
For RNG, WeaponskillMode is linked to RangedMode just the same.
You can verify you're using the correct WS sets with //gs showswaps
[+]
Ragnarok.Flippant
Serveur: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2015-01-21 09:13:41
So, I decided to attempt to use a premade gearswap from the shop thread on BG and plug in my gear for WAR. It has been throwing back an error when it doesn't equip my idle gear or switch to my TP gear on mobs after the first mob.
The error I'm getting is when I have Bravura equipped:
GearSwap: Lua runtime error: GearSwap/flow.lua:295:
GearSwap has detected an error in the user function status_change:
Sulia_WAR.lua:159: attempt to index field 'Bravura' (a nil value)
The error I get when I have another weapon equipped:
GearSwap: Lua runtime error: GearSwap/flow.lua:295:
GearSwap has detected an error in the user function status_change:
Sulia_WAR.lua:164: attempt to index field 'Razorfury' (a nil value)
Pastebin of the Lua with my gear input. I know it's kind of redundant with the gear in areas, but I'm really not used to GearSwap. Thank you for your help in advance.
Let's see how well I can explain this.
Pretty much should never set a table equal to another table because you could easily overlook the consequences and break the table structure. Basically, when you set table 1 = table 2, table 1 now points to the same location as table 2. That may seem obvious enough, but the not so obvious part is that you're "disowning" all of table 1's original children and they are lost forever at this point in the code because you no longer have a variable pointing to it. If that's still confusing, take these three tables:
sets.TP = {blah="blah"}
sets.TP.Bravura = {blah2="blah2"}
sets.TP.Bravura.Acc = {blah3="blah3"}
When you create sets.TP.Bravura, it creates a new key in the sets.TP table called "Bravura" and sets it equal to that table. Likewise, when you create sets.TP.Bravura.Acc, it creates a new key in the sets.TP.Bravura table called "Acc" and sets it equal to the third table. It's the same as saying:
sets.TP = {blah="blah", Bravura={blah2="blah2", Acc={blah3="blah3"}}}
When you set sets.TP.Bravura = sets.TP.Bravura.Acc, you are doing essentially the same thing as saying
sets.TP.Bravura = {blah3="blah3"}
pointing sets.TP.Bravura to the new table, and deleting the relationship to the old table. You're probably already aware that blah2 no longer exists because you can plainly see it's been "overwritten," but sets.TP.Bravura.Acc is gone too, because it was also a child of Bravura, even though it was written in a different manner. Your entire sets.TP table now looks like
sets.TP = {blah="blah", Bravura={blah3="blah3"}}
The next time you set sets.TP.Bravura = sets.TP.Bravura.Acc, it will set it to "nil" because the value does not exist. Now your table looks like
sets.TP = {blah="blah"}
The third time you run through it, you'll get the error you're seeing because it cannot find the index Bravura in order to look for the index Acc (you cannot index a nil value). You'd have to reload the file to reset everything.
Long story short, that's a horrible GearSwap file, get a new one; if you're not interested in learning and maintaining your own code, then you're best off using Mote's templates, even though they can seem more intimidating than the other options (he has good documentation, requires less maintenance from your end, and has built-in functions to handle most of the processing you would want to).
Serveur: Odin
Game: FFXI
Posts: 170
By Odin.Quixacotl 2015-01-21 13:54:58
Orestes said: OffenseMode and WeaponskillMode are linked to one another, assuming both share the same modes.
For example: Code
state.OffenseMode:options('Normal', 'Mid', 'Acc')
state.WeaponskillMode:options('Normal', 'Mid', 'Acc')
With this setup, you never have to bother toggling WeaponskillMode. It's done for you when you toggle OffenseMode.
For RNG, WeaponskillMode is linked to RangedMode just the same.
You can verify you're using the correct WS sets with //gs showswaps
Ummm... That's not correct. It seems Offensemode and Weaponskillmode are not normally tied together. If you set Offensemode to Acc and then press F12 which displays your current modes then you will get, "Melee:Acc, WS:Normal" which is the jist of Yandaime's complaint.
As good as Mote's system is for basic sets, when you are dealing with specialized sets ie. PDT, ACC, etc. this was one of the shortcomings with that system. It is nigh difficult for the typical gamer to edit and customize modes and keybinds to their own play-style.
However if you do, Code
send_command('bind f5 gs c set OffenseMode Acc;gs c set WeaponskillMode Acc')
and press F5 then you will get, "Melee:Acc, WS:Acc".
With this method you can also combine Offensemode:Acc Weaponskillmode:Acc and Defensemode:PDT for endgame situations like Delve or Incursion. The number of custom custom-combinations is only limited to your imagination. Code
send_command('bind f6 gs c set OffenseMode Acc;gs c set WeaponskillMode Acc;gs c set Defensemode PDT')
Quetzalcoatl.Orestes
Serveur: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2015-01-21 16:27:56
Orestes said: OffenseMode and WeaponskillMode are linked to one another, assuming both share the same modes.
For example: Code
state.OffenseMode:options('Normal', 'Mid', 'Acc')
state.WeaponskillMode:options('Normal', 'Mid', 'Acc')
With this setup, you never have to bother toggling WeaponskillMode. It's done for you when you toggle OffenseMode.
For RNG, WeaponskillMode is linked to RangedMode just the same.
You can verify you're using the correct WS sets with //gs showswaps
Ummm... That's not correct. It seems Offensemode and Weaponskillmode are not normally tied together. If you set Offensemode to Acc and then press F12 which displays your current modes then you will get, "Melee:Acc, WS:Normal" which is the jist of Yandaime's complaint.
As good as Mote's system is for basic sets, when you are dealing with specialized sets ie. PDT, ACC, etc. this was one of the shortcomings with that system. It is nigh difficult for the typical gamer to edit and customize modes and keybinds to their own play-style.
However if you do, Code
send_command('bind f5 gs c set OffenseMode Acc;gs c set WeaponskillMode Acc')
and press F5 then you will get, "Melee:Acc, WS:Acc".
With this method you can also combine Offensemode:Acc Weaponskillmode:Acc and Defensemode:PDT for endgame situations like Delve or Incursion. The number of custom custom-combinations is only limited to your imagination. Code
send_command('bind f6 gs c set OffenseMode Acc;gs c set WeaponskillMode Acc;gs c set Defensemode PDT')
Umm... Yes it is correct. They are tied together functionally. If you toggle OffenseMode's state to 'Acc' and WeaponskillMode also has a mode named 'Acc', it will be used for the following weaponskill. Mote's includes have always done this.
The distinction here is that you aren't actually toggling WeaponskillMode's state permanently, but the end result is the same. Hence there being no reason to toggle WeaponskillMode, unless you add a custom mode that differs from your regular offense sets.
Here's the source where this is handled in Mote-Include.lua. Code
-- Function to handle the logic of selecting the proper weaponskill set.
function get_weaponskill_set(equipSet, spell, spellMap)
-- Custom handling for weaponskills
local ws_mode = state.WeaponskillMode.current
if ws_mode == 'Normal' then
-- If a particular weaponskill mode isn't specified, see if we have a weaponskill mode
-- corresponding to the current offense mode. If so, use that.
if spell.skill == 'Archery' or spell.skill == 'Marksmanship' then
if state.RangedMode.current ~= 'Normal' and state.WeaponskillMode:contains(state.RangedMode.current) then
ws_mode = state.RangedMode.current
end
else
if state.OffenseMode.current ~= 'Normal' and state.WeaponskillMode:contains(state.OffenseMode.current) then
ws_mode = state.OffenseMode.current
end
end
end
local custom_wsmode
-- Allow the job file to specify a preferred weaponskill mode
if get_custom_wsmode then
custom_wsmode = get_custom_wsmode(spell, spellMap, ws_mode)
end
-- If the job file returned a weaponskill mode, use that.
if custom_wsmode then
ws_mode = custom_wsmode
end
if equipSet[ws_mode] then
equipSet = equipSet[ws_mode]
mote_vars.set_breadcrumbs:append(ws_mode)
end
return equipSet
end
Serveur: Odin
Game: FFXI
Posts: 170
By Odin.Quixacotl 2015-01-21 17:58:18
Code
if state.OffenseMode.current ~= 'Normal' and state.WeaponskillMode:contains(state.OffenseMode.current) then
ws_mode = state.OffenseMode.current
end
Okay I now see where OffenseMode and WeaponskillMode are indeed tied together so my apologies. However the WeaponskillMode variable, "ws_mode" change to ACC doesn't show up when you ping your status via F12 so I couldn't tell for sure.
Nice detective work btw. :)
Carbuncle.Bukadan
Serveur: Carbuncle
Game: FFXI
Posts: 280
By Carbuncle.Bukadan 2015-01-22 00:39:04
windower4/addons/gearswap/equip_processing.lua 127 "id" id not defined by numbers.
my friend keeps getting that error whenever he casts a spell or does anything in gearswap, he even used my GS folder pasted over his and got the same issue. obv had him reload ect, any ideas?
Cerberus.Conagh
Serveur: Cerberus
Game: FFXI
Posts: 3189
By Cerberus.Conagh 2015-01-22 02:24:35
Carbuncle.Bukadan said: »windower4/addons/gearswap/equip_processing.lua 127 "id" id not defined by numbers.
my friend keeps getting that error whenever he casts a spell or does anything in gearswap, he even used my GS folder pasted over his and got the same issue. obv had him reload ect, any ideas?
updates break luacore not gearswap, its sounds like his virus software isnt allowing luacore to update, try sending him alll of yuor lua stuff or disabling lolNorton or w.e Virus scanner he has for the update.
See if that helps
Serveur: Odin
Game: FFXI
Posts: 170
By Odin.Quixacotl 2015-01-22 02:57:30
Carbuncle.Bukadan said: »windower4/addons/gearswap/equip_processing.lua 127 "id" id not defined by numbers.
my friend keeps getting that error whenever he casts a spell or does anything in gearswap, he even used my GS folder pasted over his and got the same issue. obv had him reload ect, any ideas? It seems like your friend has a resources issue such as corrupted file. Unfortunately I have no idea how or where to download the most current res files short of re-installing Windower4. I tried renaming my res folder and then restarting Windower4 but it just uploaded an empty folder. If you can't get any answers here then you might try asking over at BG since Byrthnoth has been fielding help Qs recently and equip_processing is his area of expertise.
(edit) Conagh has a point. It could be his anti-virus preventing luacore from updating.
By Iryoku 2015-01-22 05:52:39
Leviathan.Arcon
VIP
Serveur: Leviathan
Game: FFXI
Posts: 666
By Leviathan.Arcon 2015-01-22 08:28:01
This is definitely a GearSwap issue, not a resource or library issue. It's an issue that has been fixed for a while, but for some reason updating is currently broken.
Cerberus.Conagh
Serveur: Cerberus
Game: FFXI
Posts: 3189
By Cerberus.Conagh 2015-01-22 12:05:47
This is definitely a GearSwap issue, not a resource or library issue. It's an issue that has been fixed for a while, but for some reason updating is currently broken.
Any chance you can post a link for a Gearswap file? Mine updates with 0 issues but I know lots of people with issues atm.
Leviathan.Arcon
VIP
Serveur: Leviathan
Game: FFXI
Posts: 666
By Leviathan.Arcon 2015-01-22 13:38:41
By Hisotaso 2015-01-23 18:09:24
What's up peeps. I posted this over at the BG thread also but haven't had a response yet. I'm using Falkirk's Bst.lua from pastebin, the only modifications I've made are as follows:
I implemented the ability to cycle through jugs and equip during call beast and bestial loyalty, and a function to cast bestial loyalty if off of cd else call beast. All of this works fine, but when I attempt to use reward a jug is equipped in my ammo slot, not pet food. I also noticed that when I use my warp ring, during the casting a jug is equipped.
The relevant snippets are listed below.
Code user_setup:
-- Set up Jug and keybind ctrl+f7
state.Jug = M{'Salubrious Broth','Dire Broth','Lucky Broth','Muddy Broth','Wispy Broth','Electrified Broth'}
send_command('bind ^f7 gs c cycle Jug')
job_precast:
if spell.english == "Call Beast" or "Bestial Loyalty" then
equip({ammo=state.Jug.current})
end
function:
function job_self_command(command)
if command[1] == 'callbeast' then
if windower.ffxi.get_ability_recasts()[94] ~= nil and windower.ffxi.get_ability_recasts()[94] ~= 0 then
if windower.ffxi.get_ability_recasts()[104] ~= nil and windower.ffxi.get_ability_recasts()[104] ~= 0 then
add_to_chat(158,'Bestial Loyalty and Call Beast on CD!')
return
else
equip({ammo=state.Jug.current})
windower.send_command('input /ja "Call Beast" <me>')
end
else
equip({ammo=state.Jug.current})
windower.send_command('input /ja "Bestial Loyalty" <me>')
end
end
end
By maxdecphoenix 2015-01-23 19:30:22
So basically the logic i'm trying to get is that instead of needing to manually cycle through idle sets (using prothescar's blu xlm which i've modified to suit my needs), for it to, if i'm not combat to automatically use my 'standard' idle gear (the set that includes latent refresh/regen, mov+ etc), but if i am in combat, use whichever set i've manually cycled through, PDT/MDT etc. I assumed in_combat would be the best choice.
When i switch from resting to idle, it applies the proper 'idle set' ("Standard").
When i cast an offensive spell, (and BGM changes to battle music)it applies the proper 'idle set', in that case, whichever i have set, PDT for time being.
And here's where i start to get issues, when I kill a mob, having not engaged, the battle music stops, but it just stays with w/e idle set i was in (PDT instead of standard). No biggie, i thought, status isn't actually changing, the status is still idle. If that's the case though, why is it working when i attack a mob, but not after it's dies. (unless of course, i force a status change by engaging something/ then disengaging, or just kneeling then standing up). So i think to myself, since the actual status isn't changing, maybe i should try replicate code in the aftercast() section. And here's where i noticed what seems to be not working, and why i'm surprised it even works at all, using a "print(player.in_combat) "debug" command in the aftercast() subroutine, i noticed player.in_combat was always false, never once did it return true. unless i engaged. Which according to the document tutorials, isn't exactly supposed to be the case.
So this code only "works" because when i switch from kneeling, in_combat is false, because it's default is false. And it's only applying the correct idle set after i cast, because that's what aftercast subroutine is telling it to. It's not applying the "standard" idle set after i kill a mob because, if i don't engage, it's not counting as an actual status change. And if i put any of the "in_combat" code in aftercast, it still doesn't work because, i'm not engaged.
Any ideas on how to distict between "idle" and "in combat though not engaged"?, I'd have sworn i had this functionality in spellcast years ago.
Code function aftercast(spell)
if player.status == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_ind]])
else
equip(sets.Idle[sets.Idle.index[Idle_ind]])
if Idle_ind == 1 and world.area == 'Arrapago Remnants' or world.area == 'Silver Sea Remnants' then
equip(sets.Utility.Salvage)
end
end
if spell.type == 'Weaponskill' then
send_command('@input /echo TP Return '..player.tp..' ----->')
end
end
function status_change(new,old)
print(player.status)
print(player.in_combat)
if new == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_ind]])
disable("main","sub")
elseif new == 'Resting' then
equip(sets.Resting.Standard)
else
if player.in_combat == false then
equip(sets.Idle.Standard)
else
equip(sets.Idle[sets.Idle.index[Idle_ind]])
end
if WPN == 0 then enable("main","sub") end
if Idle_ind == 1 and world.area == 'Arrapago Remnants' or world.area == 'Silver Sea Remnants' then
equip(sets.Utility.Salvage)
end
end
end
Serveur: Odin
Game: FFXI
Posts: 170
By Odin.Quixacotl 2015-01-23 23:55:45
What's up peeps. I posted this over at the BG thread also but haven't had a response yet. I'm using Falkirk's Bst.lua from pastebin, the only modifications I've made are as follows:
I implemented the ability to cycle through jugs and equip during call beast and bestial loyalty, and a function to cast bestial loyalty if off of cd else call beast. All of this works fine, but when I attempt to use reward a jug is equipped in my ammo slot, not pet food. I also noticed that when I use my warp ring, during the casting a jug is equipped. Actually I replied over at BG yesterday. But for the sake of anyone else's curiosity I'll repost here.
No matter what you do, this check will ALWAYS parse because the syntax is incorrect. Code
if spell.english == "Call Beast" or "Bestial Loyalty" then
equip({ammo=state.Jug.current})
end
The correct syntax should be: Code
if spell.english == "Call Beast" or spell.english == "Bestial Loyalty" then
equip({ammo=state.Jug.current})
end
Here's an example how I cycle Jugs (chopped version to avoid wall-o-text). Code
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
function job_setup()
state.BrothMode = M{['description']='Broth Mode',
'Lucky Broth', 'Wispy Broth', 'Fizzy Broth',
'Salubrious Broth', 'Trans. Broth', 'Cl. Wheat Broth'}
Jug = {name="Lucky Broth"}
send_command('bind delete gs c cycle BrothMode')
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
send_command('unbind delete')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
sets.precast.JA['Call Beast'] = {ammo=Jug, hands="Ankusa Gloves +1"}
sets.precast.JA['Bestial Loyalty'] = sets.precast.JA['Call Beast']
sets.precast.JA['Reward'] = {ammo="Pet Food Theta"}
end
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
if stateField == 'Broth Mode' then
Jug.name = newValue
end
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
if state.BrothMode.value ~= 'None' then
add_to_chat(8,'----- Broth: '.. state.BrothMode.value ..' -----')
-- msg = msg .. ', ' .. 'Broth: ' .. state.BrothMode.value .. ' (' .. state[state.BrothMode.value .. 'BrothMode'].value .. ')'
end
eventArgs.handled = true
end
[+]
Serveur: Odin
Game: FFXI
Posts: 170
By Odin.Quixacotl 2015-01-24 01:12:31
So basically the logic i'm trying to get is that instead of needing to manually cycle through idle sets (using prothescar's blu xlm which i've modified to suit my needs), for it to, if i'm not combat to automatically use my 'standard' idle gear (the set that includes latent refresh/regen, mov+ etc), but if i am in combat, use whichever set i've manually cycled through, PDT/MDT etc. I assumed in_combat would be the best choice.
When i switch from resting to idle, it applies the proper 'idle set' ("Standard").
When i cast an offensive spell, (and BGM changes to battle music)it applies the proper 'idle set', in that case, whichever i have set, PDT for time being.
And here's where i start to get issues, when I kill a mob, having not engaged, the battle music stops, but it just stays with w/e idle set i was in (PDT instead of standard). No biggie, i thought, status isn't actually changing, the status is still idle. If that's the case though, why is it working when i attack a mob, but not after it's dies. (unless of course, i force a status change by engaging something/ then disengaging, or just kneeling then standing up). So i think to myself, since the actual status isn't changing, maybe i should try replicate code in the aftercast() section. And here's where i noticed what seems to be not working, and why i'm surprised it even works at all, using a "print(player.in_combat) "debug" command in the aftercast() subroutine, i noticed player.in_combat was always false, never once did it return true. unless i engaged. Which according to the document tutorials, isn't exactly supposed to be the case.
So this code only "works" because when i switch from kneeling, in_combat is false, because it's default is false. And it's only applying the correct idle set after i cast, because that's what aftercast subroutine is telling it to. It's not applying the "standard" idle set after i kill a mob because, if i don't engage, it's not counting as an actual status change. And if i put any of the "in_combat" code in aftercast, it still doesn't work because, i'm not engaged.
Any ideas on how to distict between "idle" and "in combat though not engaged"?, I'd have sworn i had this functionality in spellcast years ago. Is this what you're looking for? Code
function aftercast(spell, action)
update_gear()
end
function status_change(new, old, action)
update_gear()
end
function update_gear()
if player.status == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_ind]])
elseif player.status == 'Idle' then
if player.in_combat then
equip(sets.TP[sets.TP.index[TP_ind]])
else
equip(sets.idle)
end
else
equip(sets.Resting)
end
if WPN == 0 then enable("main","sub") end
if Idle_ind == 1 and world.area == 'Arrapago Remnants' or world.area == 'Silver Sea Remnants' then
equip(sets.Utility.Salvage)
end
end
Asura.Psylo
Serveur: Asura
Game: FFXI
Posts: 446
By Asura.Psylo 2015-01-24 05:09:08
I play both char on the same PC, can i have 2 gearswap files by char ? Because i dont have the same gear on each.
Something like whm_char1.lua etc ...
Thks in advance
:-)
By Yandaime 2015-01-24 05:16:49
Ok, I have tried everything I can think of and I have confirmed that Mote's includes do indeed change me over to WS mode automatically. It seems that my problem is that the WS isn't registering the mode change for some reason. The Engaged modes and all rules are working perfectly but for some reason, WS isn't attempting to equip anything but the normal set and I can not figure out why.
To sum it up...
JA Swaps: Working
Precast Swaps: Working
Engaged Swaps: Working
WeaponSkill Swaps: Working but only swaps to the 'Normal' set and I for the life of me can't figure out why.
**Edit**
I *ALWAYS* check with showswaps, just fyi.
Code sets.precast.WS = {ammo="Tantra Tathlum",head="Uk'uxkaj Cap",neck="Asperity Necklace",
ear1="Moonshade Earring",ear2="Brutal Earring",body="Qaaxo Harness",hands="Anchorite's Gloves +1",
ring1="Epona's Ring",ring2="Ifrit Ring",back="Bleating Mantle",
waist="Windbuffet Belt +1",legs="Manibozho Brais",
feet={ name="Qaaxo Leggings", augments={'Attack+15','"Mag.Atk.Bns."+15','STR+12',}}}
sets.precast.WS.SomeAcc = {ammo="Honed Tathlum",head="Whirlpool Mask",
neck="Asperity Necklace",ear1="Moonshade Earring",ear2="Brutal Earring",
body="Qaaxo Harness",hands="Hesychast's Gloves +1",
ring1="Epona's Ring",ring2="Rajas Ring",back="Bleating Mantle",
waist="Windbuffet Belt +1",legs="Manibozho Brais",
feet={ name="Qaaxo Leggings", augments={'Attack+15','"Mag.Atk.Bns."+15','STR+12',}}}
sets.precast.WS.Acc = {ammo="Honed Tathlum",head="Whirlpool Mask",
neck=gear.ElementalGorget,ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Mekosu. Harness",hands="Hesychast's Gloves +1",
ring1="Epona's Ring",ring2="Rajas Ring",back="Anchoret's Mantle",
waist="Caudata Belt",legs="Manibozho Brais",
feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
-- Specific weaponskill sets.
-- legs={name="Quiahuiz Trousers", augments={'Phys. dmg. taken -2%','Magic dmg. taken -2%','STR+8'}}}
sets.precast.WS["Victory Smite"] = set_combine(sets.precast.WS, {neck="Rancor Collar",back="Buquwik Cape",ring2="Ifrit Ring"})
sets.precast.WS["Victory Smite"].SomeAcc = set_combine(sets.precast.WS, sets.precast.WS.SomeAcc, {neck="Rancor Collar",back="Buquwik Cape",ring2="Ifrit Ring"})
sets.precast.WS["Victory Smite"].Acc = set_combine(sets.precast.WS, sets.precast.WS.Acc)
I have no idea why the rule's aren't working for WS swaps. I greatly appreciate the help. I'd really like to cut down to only needing one file per job lol
VIP
Serveur: Asura
Game: FFXI
Posts: 234
By Asura.Darvamos 2015-01-24 05:26:19
I play both char on the same PC, can i have 2 gearswap files by char ? Because i dont have the same gear on each.
Something like whm_char1.lua etc ...
Thks in advance
:-) MainName_JOB.lua
AltName_JOB.lua
Example:
Ted_WHM.lua
Mike_WHM.lua
Asura.Psylo
Serveur: Asura
Game: FFXI
Posts: 446
By Asura.Psylo 2015-01-24 05:42:06
Thks. :-)
By maxdecphoenix 2015-01-24 06:19:17
So basically the logic i'm trying to get is that instead of needing to manually cycle through idle sets (using prothescar's blu xlm which i've modified to suit my needs), for it to, if i'm not combat to automatically use my 'standard' idle gear (the set that includes latent refresh/regen, mov+ etc), but if i am in combat, use whichever set i've manually cycled through, PDT/MDT etc. I assumed in_combat would be the best choice.
When i switch from resting to idle, it applies the proper 'idle set' ("Standard").
When i cast an offensive spell, (and BGM changes to battle music)it applies the proper 'idle set', in that case, whichever i have set, PDT for time being.
And here's where i start to get issues, when I kill a mob, having not engaged, the battle music stops, but it just stays with w/e idle set i was in (PDT instead of standard). No biggie, i thought, status isn't actually changing, the status is still idle. If that's the case though, why is it working when i attack a mob, but not after it's dies. (unless of course, i force a status change by engaging something/ then disengaging, or just kneeling then standing up). So i think to myself, since the actual status isn't changing, maybe i should try replicate code in the aftercast() section. And here's where i noticed what seems to be not working, and why i'm surprised it even works at all, using a "print(player.in_combat) "debug" command in the aftercast() subroutine, i noticed player.in_combat was always false, never once did it return true. unless i engaged. Which according to the document tutorials, isn't exactly supposed to be the case.
So this code only "works" because when i switch from kneeling, in_combat is false, because it's default is false. And it's only applying the correct idle set after i cast, because that's what aftercast subroutine is telling it to. It's not applying the "standard" idle set after i kill a mob because, if i don't engage, it's not counting as an actual status change. And if i put any of the "in_combat" code in aftercast, it still doesn't work because, i'm not engaged.
Any ideas on how to distict between "idle" and "in combat though not engaged"?, I'd have sworn i had this functionality in spellcast years ago. Is this what you're looking for? Code
function aftercast(spell, action)
update_gear()
end
function status_change(new, old, action)
update_gear()
end
function update_gear()
if player.status == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_ind]])
elseif player.status == 'Idle' then
if player.in_combat then
equip(sets.TP[sets.TP.index[TP_ind]])
else
equip(sets.idle)
end
else
equip(sets.Resting)
end
if WPN == 0 then enable("main","sub") end
if Idle_ind == 1 and world.area == 'Arrapago Remnants' or world.area == 'Silver Sea Remnants' then
equip(sets.Utility.Salvage)
end
end No, but thanks. This is essentially what i had before. The issue is that, for me, the in_combat() variable doesn't seem to be triggering as claimed. In the product documentations, it states 'boolean that indicates whether battle music is playing or not'. This has either been changed or it's now out-of-date, but either way it's wrong. In my experience trying to get this functionality it should read 'boolean that indicates whether battle music is or isn't playing with weapons drawn.' which i don't think was the intention of the variable. Thanks again, though. Back to the drawing board for me.
edit, this can be tested by putting print(player.in_combat) somewhere in either, or both, aftercast function or statuschange function. This will echo the value of in_combat() in the windower console. For me, it remains 'false' regardless if music is playing or not, unless of course i'm engaged.
Serveur: Odin
Game: FFXI
Posts: 170
By Odin.Quixacotl 2015-01-25 00:19:06
Ok, I have tried everything I can think of and I have confirmed that Mote's includes do indeed change me over to WS mode automatically. It seems that my problem is that the WS isn't registering the mode change for some reason. The Engaged modes and all rules are working perfectly but for some reason, WS isn't attempting to equip anything but the normal set and I can not figure out why.
To sum it up...
JA Swaps: Working
Precast Swaps: Working
Engaged Swaps: Working
WeaponSkill Swaps: Working but only swaps to the 'Normal' set and I for the life of me can't figure out why.
**Edit**
I *ALWAYS* check with showswaps, just fyi.
Code sets.precast.WS = {ammo="Tantra Tathlum",head="Uk'uxkaj Cap",neck="Asperity Necklace",
ear1="Moonshade Earring",ear2="Brutal Earring",body="Qaaxo Harness",hands="Anchorite's Gloves +1",
ring1="Epona's Ring",ring2="Ifrit Ring",back="Bleating Mantle",
waist="Windbuffet Belt +1",legs="Manibozho Brais",
feet={ name="Qaaxo Leggings", augments={'Attack+15','"Mag.Atk.Bns."+15','STR+12',}}}
sets.precast.WS.SomeAcc = {ammo="Honed Tathlum",head="Whirlpool Mask",
neck="Asperity Necklace",ear1="Moonshade Earring",ear2="Brutal Earring",
body="Qaaxo Harness",hands="Hesychast's Gloves +1",
ring1="Epona's Ring",ring2="Rajas Ring",back="Bleating Mantle",
waist="Windbuffet Belt +1",legs="Manibozho Brais",
feet={ name="Qaaxo Leggings", augments={'Attack+15','"Mag.Atk.Bns."+15','STR+12',}}}
sets.precast.WS.Acc = {ammo="Honed Tathlum",head="Whirlpool Mask",
neck=gear.ElementalGorget,ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Mekosu. Harness",hands="Hesychast's Gloves +1",
ring1="Epona's Ring",ring2="Rajas Ring",back="Anchoret's Mantle",
waist="Caudata Belt",legs="Manibozho Brais",
feet={ name="Qaaxo Leggings", augments={'Accuracy+15','STR+7','Phys. dmg. taken -3',}}}
-- Specific weaponskill sets.
-- legs={name="Quiahuiz Trousers", augments={'Phys. dmg. taken -2%','Magic dmg. taken -2%','STR+8'}}}
sets.precast.WS["Victory Smite"] = set_combine(sets.precast.WS, {neck="Rancor Collar",back="Buquwik Cape",ring2="Ifrit Ring"})
sets.precast.WS["Victory Smite"].SomeAcc = set_combine(sets.precast.WS, sets.precast.WS.SomeAcc, {neck="Rancor Collar",back="Buquwik Cape",ring2="Ifrit Ring"})
sets.precast.WS["Victory Smite"].Acc = set_combine(sets.precast.WS, sets.precast.WS.Acc)
I have no idea why the rule's aren't working for WS swaps. I greatly appreciate the help. I'd really like to cut down to only needing one file per job lol If I understand you correctly, you're saying you can't equip WS gear although you can change WeaponskillMode. Have you modified the 'function user_setup()' block in any way? That seems strange because I just copy/pasted Mote's Mnk.lua without edits and it seems to equip my WS gear just fine no matter what mode I'm on.
Ragnarok.Flippant
Serveur: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2015-01-25 04:19:01
Yes.
Phoenix.Urteil
Serveur: Phoenix
Game: FFXI
By Phoenix.Urteil 2015-01-25 05:17:58
I can't get the Foreshock sword to work in my gearswap.
sets.TP["Foreshock sword"] = {gearssethere}
When engaged the gear won't switch. Is the syntax of the weapon name correct?
Changed the name of the item to exactly "Foreshock sword" in the resources folder and now it works.
Sylph.Murex
Serveur: Sylph
Game: FFXI
Posts: 81
By Sylph.Murex 2015-01-27 16:27:44
I have literaly spent days trying to figure out wtf is wrong with this gearswap with no damn luck and it's really pissin me off...
I sit idle in adoulin and cast utsu and it does the precast midcast and aftercast which shows in showswaps BUT then it changes into my normal engaged set a sec after the aftercast and doesn't show in showswaps I also have this problem in BC's where I need my acc ***and it swaps into normal gear and this has costed me quite a few times I hit f12 it updates my gear and puts me into what I should be in but wtf I need it to do it right the first time makes it difficult when i'm dualing bc's and cant keep hiting f12 after every damn cast.
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
--[[
Custom commands:
gs c cycle treasuremode (set on ctrl-= by default): Cycles through the available treasure hunter modes.
Treasure hunter modes:
None - Will never equip TH gear
Tag - Will equip TH gear sufficient for initial contact with a mob (either melee, ranged hit, or Aeolian Edge AOE)
SATA - Will equip TH gear sufficient for initial contact with a mob, and when using SATA
Fulltime - Will keep TH gear equipped fulltime
--]]
-- 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['Sneak Attack'] = buffactive['sneak attack'] or false
state.Buff['Trick Attack'] = buffactive['trick attack'] or false
state.Buff['Feint'] = buffactive['feint'] or false
include('Mote-TreasureHunter')
-- For th_action_check():
-- JA IDs for actions that always have TH: Provoke, Animated Flourish
info.default_ja_ids = S{35, 204}
-- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
info.default_u_ja_ids = S{201, 202, 203, 205, 207}
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', 'Mod')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.RangedMode:options('Normal', 'Acc')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.PhysicalDefenseMode:options('Evasion', 'PDT')
gear.default.weaponskill_neck = "Asperity Necklace"
gear.default.weaponskill_waist = "Caudata Belt"
gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
-- Additional local binds
send_command('bind ^` input /ja "Flee" <me>')
send_command('bind ^= gs c cycle treasuremode')
send_command('bind !- gs c cycle targetmode')
select_default_macro_book()
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
send_command('unbind ^`')
send_command('unbind !-')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Special sets (required by rules)
--------------------------------------
sets.TreasureHunter = {hands="Plunderer's Armlets +1", waist="Chaac Belt", feet="Raider's Poulaines +2"}
sets.ExtraRegen = {head="Ocelomeh Headpiece +1"}
sets.Kiting = {feet="Skadi's Jambeaux +1"}
sets.buff['Sneak Attack'] = {
head="Pill. Bonnet +1",
neck="Moepapa Medal",
ear1="Jupiter's Pearl",
ear2="Jupiter's Pearl",
body="Pill. Vest +1",
hands="Raid. Armlets +2",
ring1="Zilant Ring",
ring2="Rajas Ring",
back="Cavaros Mantle",
waist="Artful Belt +1",
legs="Pill. Culottes +1",
feet="Plun. Poulaines +1"}
sets.buff['Trick Attack'] = {
head="Pill. Bonnet +1",
neck="Moepapa Medal",
ear1="Auster's Pearl",
ear2="Auster's Pearl",
body="Plunderer's Vest +1",
hands="Pill. Armlets +1",
ring1="Garuda Ring +1",
ring2="Rajas Ring",
back="Canny Cape",
waist="Elanid Belt",
legs="Pill. Culottes +1",
feet="Plun. Poulaines +1"}
-- Actions we want to use to tag TH.
sets.precast.Step = sets.TreasureHunter
sets.precast.Flourish1 = sets.TreasureHunter
sets.precast.JA.Provoke = sets.TreasureHunter
--------------------------------------
-- Precast sets
--------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA['Collaborator'] = {head="Raider's Bonnet +2"}
sets.precast.JA['Accomplice'] = {head="Raider's Bonnet +2"}
sets.precast.JA['Flee'] = {feet="Pillager's Poulaines +1"}
sets.precast.JA['Hide'] = {body="Pillager's Vest +1"}
sets.precast.JA['Conspirator'] = {"Raider's Vest +2"}
sets.precast.JA['Steal'] = {head="Plunderer's Bonnet",hands="Pillager's Armlets +1",legs="Pillager's Culottes +1",feet="Pillager's Poulaines +1"}
sets.precast.JA['Despoil'] = {legs="Raider's Culottes +2",feet="Raider's Poulaines +2"}
sets.precast.JA['Perfect Dodge'] = {hands="Plunderer's Armlets +1"}
sets.precast.JA['Feint'] = {"Plun. Culottes +1"}
sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
-- Waltz set (chr and vit)
sets.precast.Waltz = {ammo="Sonia's Plectrum",
head="Whirlpool Mask",
body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Asklepian Ring",
back="Iximulew Cape",waist="Caudata Belt",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Fast cast sets for spells
sets.precast.FC = {
head="Haruspex Hat +1",
neck="Orunmila's Torque",
ear1="Enchntr. Earring +1",
ear2="Loquac. Earring",
body="Dread Jupon",
hands="Thaumas Gloves",
ring1="Veneficium Ring",
ring2="Prolix Ring",
legs="Enif Cosciales"}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
-- Ranged snapshot gear
sets.precast.RA = {head="Aurore Beret",hands="Iuitl Wristbands",legs="Nahtirah Trousers",feet="Wurrukatte Boots"}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {
head="Uk'uxkaj Cap",
neck="Shadow Gorget",
ear1="Moonshade Earring",
ear2="Jupiter's Pearl",
body="Dread Jupon",
hands="Pill. Armlets +1",
ring1="Zilant Ring",
ring2="Rajas Ring",
back="Vespid Mantle",
waist="Prosilio Belt +1",
legs="Manibozho Brais",
feet="Plun. Poulaines +1"}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {ring1="Stormsoul Ring",legs="Nahtirah Trousers"})
sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Exenterator'].Mod = set_combine(sets.precast.WS['Exenterator'], {head="Felistris Mask",waist=gear.ElementalBelt})
sets.precast.WS['Exenterator'].SA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Exenterator'].TA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Exenterator'].SATA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Dancing Edge'] = set_combine(sets.precast.WS, {})
sets.precast.WS['Dancing Edge'].Acc = set_combine(sets.precast.WS['Dancing Edge'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Dancing Edge'].Mod = set_combine(sets.precast.WS['Dancing Edge'], {waist=gear.ElementalBelt})
sets.precast.WS['Dancing Edge'].SA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Dancing Edge'].TA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Dancing Edge'].SATA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {ammo="Qirmiz Tathlum",
head="Uk'uxkaj Cap",neck="Rancor Collar",ear1="Brutal Earring",ear2="Moonshade Earring"})
sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Evisceration'].Mod = set_combine(sets.precast.WS['Evisceration'], {back="Kayapa Cape",waist=gear.ElementalBelt})
sets.precast.WS['Evisceration'].SA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
sets.precast.WS['Evisceration'].TA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
sets.precast.WS['Evisceration'].SATA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {
head="Uk'uxkaj Cap",
neck="Shadow Gorget",
ear1="Moonshade Earring",
ear2="Jupiter's Pearl",
body="Dread Jupon",
hands="Pill. Armlets +1",
ring1="Zilant Ring",
ring2="Rajas Ring",
back="Vespid Mantle",
waist="Prosilio Belt +1",
legs="Manibozho Brais",
feet="Plun. Poulaines +1"})
sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {
head="Uk'uxkaj Cap",
neck="Shadow Gorget",
ear1="Moonshade Earring",
ear2="Jupiter's Pearl",
body="Dread Jupon",
hands="Pill. Armlets +1",
ring1="Zilant Ring",
ring2="Rajas Ring",
back="Vespid Mantle",
waist="Prosilio Belt +1",
legs="Manibozho Brais",
feet="Plun. Poulaines +1"})
sets.precast.WS["Rudra's Storm"].Mod = set_combine(sets.precast.WS["Rudra's Storm"], {
head="Uk'uxkaj Cap",
neck="Shadow Gorget",
ear1="Moonshade Earring",
ear2="Jupiter's Pearl",
body="Dread Jupon",
hands="Pill. Armlets +1",
ring1="Zilant Ring",
ring2="Rajas Ring",
back="Vespid Mantle",
waist="Prosilio Belt +1",
legs="Manibozho Brais",
feet="Plun. Poulaines +1"})
sets.precast.WS["Rudra's Storm"].SA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {
head="Pill. Bonnet +1",
neck="Shadow Gorget",
ear1="Moonshade Earring",
ear2="Jupiter's Pearl",
body="Dread Jupon",
hands="Pill. Armlets +1",
ring1="Zilant Ring",
ring2="Rajas Ring",
back="Kayapa Cape",
waist="Shadow Belt",
legs="Pill. Culottes +1",
feet="Plun. Poulaines +1"})
sets.precast.WS["Rudra's Storm"].TA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {
head="Pill. Bonnet +1",
neck="Shadow Gorget",
ear1="Moonshade Earring",
ear2="Auster's Pearl",
body="Dread Jupon",
hands="Pill. Armlets +1",
ring1="Garuda Ring +1",
ring2="Rajas Ring",
back="Vespid Mantle",
waist="Shadow Belt",
legs="Pill. Culottes +1",
feet="Plun. Poulaines +1"})
sets.precast.WS["Rudra's Storm"].SATA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {
head="Uk'uxkaj Cap",
neck="Shadow Gorget",
ear1="Moonshade Earring",
ear2="Jupiter's Pearl",
body="Dread Jupon",
hands="Pill. Armlets +1",
ring1="Zilant Ring",
ring2="Rajas Ring",
back="Vespid Mantle",
waist="Prosilio Belt +1",
legs="Manibozho Brais",
feet="Plun. Poulaines +1"})
sets.precast.WS["Shark Bite"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
sets.precast.WS['Shark Bite'].Acc = set_combine(sets.precast.WS['Shark Bite'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Shark Bite'].Mod = set_combine(sets.precast.WS['Shark Bite'], {back="Kayapa Cape",waist=gear.ElementalBelt})
sets.precast.WS['Shark Bite'].SA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Shark Bite'].TA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Shark Bite'].SATA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Mandalic Stab'] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
sets.precast.WS['Mandalic Stab'].Acc = set_combine(sets.precast.WS['Mandalic Stab'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Mandalic Stab'].Mod = set_combine(sets.precast.WS['Mandalic Stab'], {back="Kayapa Cape",waist=gear.ElementalBelt})
sets.precast.WS['Mandalic Stab'].SA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Mandalic Stab'].TA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Mandalic Stab'].SATA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Aeolian Edge'] = {ammo="Jukukik Feather",
head="Wayfarer Circlet",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Moonshade Earring",
body="Wayfarer Robe",hands="Pillager's Armlets +1",ring1="Acumen Ring",ring2="Demon's Ring",
back="Toro Cape",waist=gear.ElementalBelt,legs="Shneddick Tights +1",feet="Wayfarer Clogs"}
sets.precast.WS['Aeolian Edge'].TH = set_combine(sets.precast.WS['Aeolian Edge'], sets.TreasureHunter)
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {
main="",
sub="",
range="",
ammo="",
head="Felistris Mask",
neck="Orunmila's Torque",
ear1="Enchntr. Earring +1",
ear2="Loquac. Earring",
body="Dread Jupon",
hands="Thaumas Gloves",
ring1="",
ring2="Prolix Ring",
back="Mujin Mantle",
waist="Ninurta's Sssh",
legs="Enif Cosciales",
feet="Plun. Poulaines +1"}
-- Specific spells
sets.midcast.Utsusemi = set_combine(sets.midcast.FastRecast)
-- Ranged gear
sets.midcast.RA = {
head="Whirlpool Mask",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Hajduk Ring",
back="Libeccio Mantle",waist="Aquiline Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
sets.midcast.RA.Acc = {
head="Pillager's Bonnet +1",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
body="Iuitl Vest",hands="Buremte Gloves",ring1="Beeline Ring",ring2="Hajduk Ring",
back="Libeccio Mantle",waist="Aquiline Belt",legs="Thurandaut Tights +1",feet="Pillager's Poulaines +1"}
--------------------------------------
-- Idle/resting/defense sets
--------------------------------------
-- Resting sets
sets.resting = {
head="Ocelomeh Headpiece +1",
neck="Wiglen Gorget",
ear1="Dawn Earring",
ring1="Sheltered Ring",
ring2="Paguroidea Ring",
waist="Lycopodium Sash",}
-- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
sets.idle = {
range="Raider's Boomerang",
head="Ocelomeh Headpiece +1",
neck="Wiglen Gorget",
ear1="Dawn Earring",
ear2="Hearty Earring",
body="Plunderer's Vest +1",
hands="Pill. Armlets +1",
ring1="Sheltered Ring",
ring2="Paguroidea Ring",
back="Shadow Mantle",
waist="Lycopodium Sash",
legs="Pillager's Culottes +1",
feet="Skadi's Jambeaux +1"}
sets.idle.Town = {
range="Raider's Boomerang",
head="Ocelomeh Headpiece +1",
neck="Wiglen Gorget",
ear1="Dawn Earring",
ear2="Hearty Earring",
body="Plunderer's Vest +1",
hands="Pill. Armlets +1",
ring1="Sheltered Ring",
ring2="Paguroidea Ring",
back="Shadow Mantle",
waist="Lycopodium Sash",
legs="Pillager's Culottes +1",
feet="Skadi's Jambeaux +1"}
sets.idle.Weak = {
range="Raider's Boomerang",
head="Ocelomeh Headpiece +1",
neck="Wiglen Gorget",
ear1="Dawn Earring",
ear2="Hearty Earring",
body="Plunderer's Vest +1",
hands="Pill. Armlets +1",
ring1="Sheltered Ring",
ring2="Paguroidea Ring",
back="Shadow Mantle",
waist="Lycopodium Sash",
legs="Pillager's Culottes +1",
feet="Skadi's Jambeaux +1"}
-- Defense sets
sets.defense.Evasion = {
head="Pillager's Bonnet +1",neck="Ej Necklace",
body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Beeline Ring",
back="Canny Cape",waist="Flume Belt",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
sets.defense.PDT = {
head="Lithelimb Cap",
neck="Twilight Torque",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Emet Harness +1",
hands="Umuthi Gloves",
ring1="Patricius Ring",
ring2="Defending Ring",
back="Mollusca Mantle",
waist="Flume Belt +1",
legs="Pill. Culottes +1",
feet="Plun. Poulaines +1"}
sets.defense.MDT = set_combine(sets.defense.PDT,{
ear1="Sanare Earring",
ear2="Merman's Earring",
ring1="Succor Ring",
ring2="Defending Ring",
back="Engulfer Cape +1",
waist="Flax Sash"})
--------------------------------------
-- Melee sets
--------------------------------------
-- Normal melee group
sets.engaged = {
main="",
sub="",
range="Raider's Boomerang",
head="Felistris Mask",
neck="Asperity Necklace",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Plunderer's Vest +1",
hands="Pill. Armlets +1",
ring1="Epona's Ring",
ring2="Rajas Ring",
back="Canny Cape",
waist="Patentia Sash",
legs="Pill. Culottes +1",
feet="Plun. Poulaines +1"}
sets.engaged.Acc = {
main="",
sub="",
range="Raider's Boomerang",
head="Whirlpool Mask",
neck="Ej Necklace +1",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Mekosuchinae Harness",
hands="Plun. Armlets +1",
ring1="Mars's Ring",
ring2="Rajas Ring",
back="Canny Cape",
waist="Olseni Belt",
legs="Pill. Culottes +1",
feet="Pill. Poulaines +1"}
-- Mod set for trivial mobs (Skadi+1)
sets.engaged.Mod = {ammo="Thew Bomblet",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Skadi's Cuirie +1",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs=gear.AugQuiahuiz,feet="Plunderer's Poulaines +1"}
-- Mod set for trivial mobs (Thaumas)
sets.engaged.Mod2 = {ammo="Thew Bomblet",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Pillager's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
sets.engaged.Evasion = {ammo="Thew Bomblet",
head="Felistris Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
back="Canny Cape",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
sets.engaged.Acc.Evasion = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Beeline Ring",ring2="Epona's Ring",
back="Canny Cape",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
sets.engaged.PDT = {ammo="Thew Bomblet",
head="Felistris Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
back="Iximulew Cape",waist="Patentia Sash",legs="Iuitl Tights",feet="Qaaxo Leggings"}
sets.engaged.Acc.PDT = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Epona's Ring",
back="Canny Cape",waist="Hurch'lan Sash",legs="Iuitl Tights",feet="Qaaxo Leggings"}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Run after the general precast() is done.
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then
equip(sets.TreasureHunter)
elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
end
end
-- Run after the general midcast() set is constructed.
function job_post_midcast(spell, action, spellMap, eventArgs)
if state.TreasureMode.value ~= 'None' and spell.action_type == 'Ranged Attack' then
equip(sets.TreasureHunter)
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)
-- Weaponskills wipe SATA/Feint. Turn those state vars off before default gearing is attempted.
if spell.type == 'WeaponSkill' and not spell.interrupted then
state.Buff['Sneak Attack'] = false
state.Buff['Trick Attack'] = false
state.Buff['Feint'] = false
end
end
-- Called after the default aftercast handling is complete.
function job_post_aftercast(spell, action, spellMap, eventArgs)
-- If Feint is active, put that gear set on on top of regular gear.
-- This includes overlaying SATA gear.
check_buff('Feint', eventArgs)
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
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
function get_custom_wsmode(spell, spellMap, defaut_wsmode)
local wsmode
if state.Buff['Sneak Attack'] then
wsmode = 'SA'
end
if state.Buff['Trick Attack'] then
wsmode = (wsmode or '') .. 'TA'
end
return wsmode
end
-- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
function job_handle_equipping_gear(playerStatus, eventArgs)
-- Check that ranged slot is locked, if necessary
check_range_lock()
-- Check for SATA when equipping gear. If either is active, equip
-- that gear specifically, and block equipping default gear.
check_buff('Sneak Attack', eventArgs)
check_buff('Trick Attack', eventArgs)
end
function customize_idle_set(idleSet)
if player.hpp < 80 then
idleSet = set_combine(idleSet, sets.ExtraRegen)
end
return idleSet
end
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
return meleeSet
end
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
th_update(cmdParams, eventArgs)
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)
local msg = 'Melee'
if state.CombatForm.has_value then
msg = msg .. ' (' .. state.CombatForm.value .. ')'
end
msg = msg .. ': '
msg = msg .. state.OffenseMode.value
if state.HybridMode.value ~= 'Normal' then
msg = msg .. '/' .. state.HybridMode.value
end
msg = msg .. ', WS: ' .. state.WeaponskillMode.value
if state.DefenseMode.value ~= 'None' then
msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
end
if state.Kiting.value == true then
msg = msg .. ', Kiting'
end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value == true then
msg = msg .. ', Target NPCs'
end
msg = msg .. ', TH: ' .. state.TreasureMode.value
add_to_chat(122, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- State buff checks that will equip buff gear and mark the event as handled.
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
-- Check for various actions that we've specified in user code as being used with TH gear.
-- This will only ever be called if TreasureMode is not 'None'.
-- Category and Param are as specified in the action event packet.
function th_action_check(category, param)
if category == 2 or -- any ranged attack
--category == 4 or -- any magic action
(category == 3 and param == 30) or -- Aeolian Edge
(category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
(category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
then return true
end
end
-- Function to lock the ranged slot if we have a ranged weapon equipped.
function check_range_lock()
if player.equipment.range ~= 'empty' then
disable('range', 'ammo')
else
enable('range', 'ammo')
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, 18)
elseif player.sub_job == 'WAR' then
set_macro_page(1, 18)
elseif player.sub_job == 'NIN' then
set_macro_page(1, 18)
else
set_macro_page(1, 18)
end
end
Serveur: Odin
Game: FFXI
Posts: 170
By Odin.Quixacotl 2015-01-27 17:35:37
I have literaly spent days trying to figure out wtf is wrong with this gearswap with no damn luck and it's really pissin me off...
I sit idle in adoulin and cast utsu and it does the precast midcast and aftercast which shows in showswaps BUT then it changes into my normal engaged set a sec after the aftercast and doesn't show in showswaps I also have this problem in BC's where I need my acc ***and it swaps into normal gear and this has costed me quite a few times I hit f12 it updates my gear and puts me into what I should be in but wtf I need it to do it right the first time makes it difficult when i'm dualing bc's and cant keep hiting f12 after every damn cast. Code
-- Defense sets
sets.defense.Evasion = {
head="Pillager's Bonnet +1",neck="Ej Necklace",
body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Beeline Ring",
back="Canny Cape",waist="Flume Belt",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
sets.defense.PDT = {
head="Lithelimb Cap",
neck="Twilight Torque",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Emet Harness +1",
hands="Umuthi Gloves",
ring1="Patricius Ring",
ring2="Defending Ring",
back="Mollusca Mantle",
waist="Flume Belt +1",
legs="Pill. Culottes +1",
feet="Plun. Poulaines +1"}
sets.defense.MDT = set_combine(sets.defense.PDT,{
ear1="Sanare Earring",
ear2="Merman's Earring",
ring1="Succor Ring",
ring2="Defending Ring",
back="Engulfer Cape +1",
waist="Flax Sash"}) First question, have you modified the function job_setup() or function user_setup() blocks in any way?
If not then check and make sure that the Sets you have written in your script, especially the ACC and Defense Sets, contains gear that you actually have in inventory. Example: Your lua has sets.defense.PDT = {neck="Twilight Torque"} but you don't have it.
So now you WS.
At aftercast GS doesn't care whether you have a Twilight Torque or not. So it becomes a placeholder and you find yourself TP'ing in a Shadow Gorget.
Remember that Offense(ACC) and Defense (Evasion, PDT, MDT) sets are all handled Aftercast and if there's a placeholder in there then you'll find yourself TP'ing in Normal gear.
Sure it's time consuming adding only the gear that you have but it'll save you headaches like this in the future.
Sylph.Murex
Serveur: Sylph
Game: FFXI
Posts: 81
By Sylph.Murex 2015-01-27 17:43:49
Every piece of gear in my gearswap is on me. the only things I haven't changed is the crap you see jumbled up and not in 1 line per slot... I don't have a ej necklace only a Ej Necklace +1 but I don't ever set defense to evasion
Sylph.Murex
Serveur: Sylph
Game: FFXI
Posts: 81
By Sylph.Murex 2015-01-27 17:52:33
Quote: First question, have you modified the function job_setup() or function user_setup() blocks in any way?
Quote: function job_setup()
state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
state.Buff['Trick Attack'] = buffactive['trick attack'] or false
state.Buff['Feint'] = buffactive['feint'] or false
include('Mote-TreasureHunter')
-- For th_action_check():
-- JA IDs for actions that always have TH: Provoke, Animated Flourish
info.default_ja_ids = S{35, 204}
-- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
info.default_u_ja_ids = S{201, 202, 203, 205, 207}
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', 'Mod')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.RangedMode:options('Normal', 'Acc')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.PhysicalDefenseMode:options('Evasion', 'PDT')
gear.default.weaponskill_neck = "Asperity Necklace"
gear.default.weaponskill_waist = "Caudata Belt"
gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
Quote: So now you WS.
At aftercast GS doesn't care whether you have a Twilight Torque or not. So it becomes a placeholder and you find yourself TP'ing in a Shadow Gorget.
Quote: I sit idle in adoulin and cast utsu and it does the precast midcast and aftercast which shows in showswaps BUT then it changes into my normal engaged set a sec after the aftercast and doesn't show in showswapsWHILE I AM IDLE or ENGAGED WITH TP SET TO ACC I also have this problem in BC's where I need my acc ***and it swaps into normal gear
Sylph.Murex
Serveur: Sylph
Game: FFXI
Posts: 81
By Sylph.Murex 2015-01-27 17:59:40
My problem is it equipping into my normal engaged set AFTER it equips my idle set while I am idle OR it equipping my normal engaged set while I am engaged and set to acc AFTER a cast. I do not have this problem with the dozens of other gearswaps I use for other jobs.
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.
|
|