To clarify on the above: I want to know whether having non-equip values within a set table will in any way interfere with processing of those sets.
And yes, I'll check into that.
To clarify on the above: I want to know whether having non-equip values within a set table will in any way interfere with processing of those sets.
And yes, I'll check into that.
Yeah, I'm fairly sure it won't mess anything up with the equip function, which should ignore everything that isn't a real slot. If it does give you problems, you can insert:
at line 391 of equip_processing (and change the current line 391 to an elseif)Code:if not slot_map[i] then
Edit: Also, now that I think about it, I might have to adjust that unify_slots function to account for advanced set tables.
So regarding:
"If it pleases you, you can store your augmented items in variables:
lefty = ring1={name="Dark Ring",augments={"Physical Damage Taken -6%"}}
righty = ring2={name="Dark Ring",augments={"Breath Damage Taken -6%","Physical Damage Taken -5%"}}
sets.aftercast_Idle = {ring1=lefty,ring2=righty}"
Where do those definitions go? I tried sticking them in with the sets, but I get "User file problem $path : unexpected symbol near '=' " so that's apparently not it.
Ok, checking Validate()
I set up a default set in sets.idle, with child sets sets.idle.Weak, sets.idle.Town, and sets.idle.Field. All of these sets have gear in them. If I use print_set() with sets.idle, it also prints out the contained table names (not their contents). Doesn't seem to hurt anything, but you might want to restrict the output to only the string elements of a given table (or even explicitly just the fields that are known equip slots).
Checking validate, it seems to find all the gear references properly. I set up random items at different tiers of the sets, and it noted each of them as not being in inventory.
Equipping seems to happen normally. Checked with .Town, then removed that and it fell back to the default sets.idle set without a hitch.
I'm not sure on the exporting, as I'm not sure what to expect. It seemed to have 'main', 'sub', 'range', and 'item' types. I'm not sure why the distinction of main/sub/range if everything else is 'item', and not sure why 'item' instead of their own slots if the weapon slots are defined.
Hmm. Actually it did return a couple other specific slots:
<body>gendewitha bliat</body>
Which is a typo in the name. And:
<body>brd. justaucorps +2</body>
Which looks like it's a bad partial abbreviation (short name is "Brd. Jstcorps +2"). Copied that entry from yours, Byrth, so you may want to fix that as well.
Fixing those, they no longer export as <body>, and instead are just <item>s. The main/sub/range slots are still specified by name, though.
Try export sets xml
That's what I was checking, mainly (though I did check a few other options; the lua export is basically the same).
Edit: If curious, here's the full export:
Spoiler: show
Ok, trying to clean up the engaged sets the same way as the idle and resting sets.
At first I was thinking I'd need to have two levels of subtables (eg: sets.engaged.Dagger.Accuracy.Evasion), and thus need to have 'default' indirects for both offense and defense (so normal offense/evasion defense would be sets.engaged.Dagger.default.Evasion, and normal offense and defense would be sets.engaged.Dagger.default.default). However, since the offense modes and defense modes have names that shouldn't conflict either with each other or with the gear entries, I should be able to simplify that.
Sets:
Then I can determine which set to use via:Code:sets.engaged = {} -- normal offense, normal defense sets.engaged.Dagger = {} -- accuracy offense, normal defense sets.engaged.Dagger.Accuracy = {} -- normal offense, evasion defense sets.engaged.Dagger.Evasion = {} -- accuracy offense, evasion defense sets.engaged.Dagger.Accuracy.Evasion = {} -- normal offense, PDT defense sets.engaged.Dagger.PDT = {}
That would allow stacking of defense modes on top of offense modes, or just on top of the base engaged set without needing an offense mode. And if either one isn't defined, it just ignores it and uses the basic default set.Code:local meleeSet = {} if sets.engaged[TPWeapon] then meleeSet = sets.engaged[TPWeapon] if meleeSet[OffenseMode] then meleeSet = meleeSet[OffenseMode] end if meleeSet[DefenseMode] then meleeSet = meleeSet[DefenseMode] end else meleeSet = sets.engaged end equip(meleeSet)
That cleans up the set definitions a great deal, and allows creation of new sets on a merely 'as needed' basis, without having to do the equivalent of Spellcast's * wildcards.
Does gear collector work off of lua from gear swaps or will we need to have a spellcast xml existing with gear sets for gear collector to pull the proper stuff out?
Looks like a copied typo, where he pulled from a ring1/ring2 set assignment but forgot to remove those bits. This works for me:
And then used them in one of my idle sets. I verified that the correct ring was placed on each finger by swapping the vars around.Code:leftDarkRing = {name="Dark Ring",augments={"Physical Damage Taken -6%", "Magical Damage Taken -3%", "Spell Interruption Rate Down 5%"}} rightDarkRing = {name="Dark Ring",augments={"Physical Damage Taken -5%", "Magical Damage Taken -3%"}}
Also regarding this point in conjunction with the dark ring test above -- the augmented items are considered tables, so the suggestion that you not print tables in the print_set function is midguided. If you restrict it in any way, it would just be to only reference known equip slots.Originally Posted by Motenten
Ok, having trouble with Interrupted actions, such as casting something that's still on recast, or testing inside the moghouse.
In each case, the precast gear is equipped before it's known that the action will be interrupted (can't fault that), however once the interrupt happens, and I attempt to re-equip idle gear, it generally fails. Example:
Chocobo Mazurka inside mog house. I can't cast it, but I'm left in idle fast cast gear. However if I hit it again, regular idle gear is re-equipped properly. Each time I hit the macro, it alternates between leaving me in fast cast gear and leaving me in idle gear.
I had added verify_equip() to the aftercast function yesterday when I was having this same problem with the spell still waiting on recast timers (and it seemed to fix it), but that's not working in the current scenario. (Also unsure if verify_equip() is supposed to go before or after the equip commands it affects; the function itself seems to only change a variable that I assume is used later on, so presumably before?)
I'm guessing that it's a problem with multiple equip commands being sent too quickly, one after the other. As such I figure adding in a small delay might be helpful, but I'm not sure if there's a simple method to do so from the aftercast code. cast_delay() isn't relevant at that point.
For now I used this in the aftercast() function:
Code:function aftercast(spell,action) --if _global.debug_mode then windower.add_to_chat(123,'--Aftercast: '..spell.name..', '..tostring(action.type)) end if T{'Interrupt','Invalid Spell'}:contains(spell.name) then -- Wait a half-second to update so that aftercast equip will actually be worn. windower.send_command('wait 0.5;gs c update') else handle_equipping_gear(player.status) --verify_equip() end end
Looks like I need to look at the interrupt code for JAs/WSs this weekend. I swear I had them working at one point, but it appears that they aren't calling the aftercast function right now. I'm inclined to add an "interrupted" field to the spell table and just set it to true when it's appropriate.
Fixed export. Fixed print_set so that it will pull names out of advanced tables, but left it so it'll print tables out normally. I find it useful for debugging tables that aren't necessarily sets.
I'm going to try to work through all the stuff in my issues list on Saturday and push one large fix at once.
I am also wondering how I would trigger a idle set change when not engaged.
I have F10 bound for WeaponSkill, If I am not engaged then in SC it will just fire "CombatMode" which will change sets to idle.
It is a very quick one button change incase for some reason I need to change to idle set.
This is the code I am using now for SC just showing it as a reference point
Spoiler: show
The <else> section is kinda what I am wondering about, since that is what fires the Idle set change, I am not sure how I would add this to GS.
Any help would be great thank you.
else CombatMode() end
...
function CombatMode()
--equip logic
end
I will be honest I am super new to GS so not sure what to make of that lol,
In GS i assume i wont be using CombatMode and aftercast () will work as the trigger?
Just not sure how to make it Only fire when idle mode.
this is code that currently handles WS:
sorry to be a pain.Code:-- Generic equip command for all JAs and WSs if sets.precast.JA[spell.name] then equip(sets.precast.JA[spell.name]) elseif sets.precast.WS[spell.name] then equip(TPSet,sets.precast.WS[spell.name]) end
I'm working on using the brd file provided in the GS Shop Thread but having issues getting this particular part to work:
I think this is supposed to determine if my target is a player other than myself and if so send a command to use Pianissimo JA then resume with the rest of the gearswap but this does not seem to occur when I have someone else targetted.Code:if spell.target.type == 'PLAYER' and not buffactive.pianissimo then cast_delay(1.5) windower.send_command('@input /raw /ja "Pianissimo" <me>') end
EDIT: figured out what I was doing wrong, my macros were all setup as <me>, changed to <t> and it is working.
Alright so been tweaking Byrth's summoner script for myself for a while now and I'm attempting to implement my nuking gear. I'm confused by the results of what I've done so far. Currently my Hagondes cuffs and Coat aren't having any issues equipping appropriately. The feet/ Head aren't picking up the MAB set apparently and are stuck in PET MAB mode! If anyone has any input from these snippets or trouble shooting suggestions let me know! Thanks :D
Variables :
Set in question :Code:LegPMacc={name="Hagondes Pants",augments={"Physical Damage Taken -3%","Pet:","Magic Accuracy +20"}} LegMab = {name="Hagondes Pants",augments={"Physical damage taken -4%","Magic Attack Bonus +24"}} FtPMab = {name="Hagondes sabots",augments={"Physical damage taken -3%","Pet:", "Magic Attack Bonus +23"}} FtMab = {name="Hagondes Sabots",augments={"Physical damage taken -3%","Magic Attack Bonus +24"}} HdPMab ={name="Hagondes Hat",augments={"Physical damage taken -3%","Pet:","Magic Attack Bonus+20"}} HdMab = {name="Hagondes Hat",augments={"Physical damage taken -3%","Magic Attack Bonus +20"}} BdyPerp = {name="Hagondes Coat", augments={"Physical damage taken -4%", "Avatar Perpetuation Cost -5"}} BdyMab ={name="Hagondes Coat", augments={"Physical damage taken -3%","Magic Attack Bonus +20"}} HnPMab ={name="Hagondes Cuffs",augments={"Pet:","Physical damage taken -3%","Magic Attack Bonus +20"}} HnFc = {name="Hagondes Cuffs",augments={"Physical damage taken -3%","Fast cast +5"}} Low_tier_nuke = T{'Stone','Water','Aero','Fire','Blizzard','Thunder'}
Precast rules :Code:sets.midcast_nuke = {head=HdMab,neck="Eddy Necklace",ear1="Novio Earring",ear2="Hecate's Earring", body=BdyMab,hands="Yaoyotl Gloves",ring1="Evoker's Ring",ring2="Icesoul Ring", back="Refraction Cape",waist="Maniacus Sash",legs=LegMab,feet=FtMab}
midcast rules:Code:if Low_tier_nuke:contains(spell.name) then equip(sets.midcast_nuke) else if action.type == 'Magic' then equip(sets.precast_FC) if string.find(spell.english,'Cur') then equip(sets.precast_Cur) end elseif string.find(spell.type,'BloodPact') then equip(sets.precast_BP) end end
Code:function midcast(spell,action) if string.find(spell.english,'Cur') then equip(sets.midcast_Cur) elseif spell.english=='Stoneskin' then equip(sets.midcast_Stoneskin) elseif action.type == 'Magic' then equip(sets.midcast_nuke) else -- Bloodpacts don't have a midcast, so don't worry about them. idle() end end
Should the "Pet:" part of the augment list really be separated into its own string instead of combined with the effect (eg: magic accuracy)? Sorry, not sure how it works; that just looked odd.
Looking at the augment parsing code, I'm pretty sure that something like "Pet: Magic Accuracy +20" needs to all be one string.