|
Gearswap Support Thread
Sylph.Aeo
Server: Sylph
Game: FFXI
Posts: 22
By Sylph.Aeo 2014-06-19 08:45:53
Bismarck.Inference said: »1) When I cast healing magic, I wind up in nuking gear...
2) Seems like I didn't script the checks for stratagems correctly because I'll randomly get the message that a spell is AoE when it shouldn't be, and I never get the correct message or gear when a stratagem is active.
3) My obis don't equip at all, the light weather cure message comes up for weather only, but not for day. The elemental ones don't work at all for day or weather.
A handful of your spell.elements are written as spell_element. Also should check that all world.day_element/world.weather_elements are written properly. It took me a while to hammer out a proper obi rule in my include just because of dumb typing mistakes.
My Obi check is this, obviously can change it around to be all in one rule if you'd like, but just so you know how to properly type it : Code
if spell.element == world.day_element then
if sets.Obi[spell.element] then
equip(sets.Obi[spell.element])
end
end
if spell.element == world.weather_element then
if sets.Obi[spell.element] then
equip(sets.Obi[spell.element])
end
end
As for elemental magic, you put your Impact rule first(line 381), not within an elemental check, so it checks if a spell is Impact, and if not equips Elemental Magic gear. So any spell that's not Impact that has it's rule named before that(Regen, Cursna, Cures) will just end up in Elemental Gear, where as your checks afterwards would catch anything else.
Obviously can be remedied by moving your Impact rule within your Elemental Magic rule.
Edit: Not 100% sure why strats aren't working, looking at it slowly. The AoE problem is because of how you have the Accession rule worded. You have if A and B or C, which means anytime at least C is true, the whole argument is true. You need to change it to : Code
if buffactive.accession and (spell.skill == 'Healing Magic' or spell.skill == 'Enhancing Magic')
then equip (sets.buff.Accession)
send_command('@input /echo <----- '..spell.english..' is now AoE ----->')
end
Hey thanks a lot! I knew it would be dumb mistakes. Only able to play with it for a few minutes now before work but implemented the changes you advised and I'm already getting much much closer. I think the stratagems are even working correctly but I'll test it when I get home. Thanks for explaining why that Impact/Elemental part worked the way it does-- helps my understanding of GearSwap.
Bismarck.Ranthozyk
Server: Bismarck
Game: FFXI
Posts: 63
By Bismarck.Ranthozyk 2014-06-19 18:22:31
Edit: Nevermind; restarted my client and it seemed to have fixed it.
Quetzalcoatl.Jykia
Server: Quetzalcoatl
Game: FFXI
Posts: 22
By Quetzalcoatl.Jykia 2014-06-20 03:32:50
link = http://pastebin.com/ukaEYrWh
im fairly certain i either 1= don't have to code somewhere to go back to a melee set after curing, or 2= don't have the set to return to in the first place.
gs is still all sanskrit to me and the dnc one is a ton messyer than my whm one.
any help would be awesome with this or a total rewrite to something that works and is cleaner for a nubblette to figure out
Ragnarok.Sekundes
Server: Ragnarok
Game: FFXI
Posts: 4197
By Ragnarok.Sekundes 2014-06-23 19:31:58
I finally got around to building a gearswap for brd and I had a question about an issue I ran in to.
I idle in Gjallarhorn, precast in Impatiens and then midcast in Gjallar. But this fails, I end up not swapping back to Gjallar in midcast. I know this was a big issue with SC and I had multiple problems on rdm due to it but as far as I know those issues are all gone with GS. But perhaps there is something I need to do to make it work or maybe this is an issue with the ranged/ammo slots?
If I take off my instrument or change to an alternate to start with, it works. If I midcast a different instrument, such as daurdabla, it also works. And if I make no other changes other than taking Impatiens out, then my midcast fires properly.
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-06-23 19:37:21
Make sure ammo=empty when you switch back to Gjallar.
[+]
Ragnarok.Sekundes
Server: Ragnarok
Game: FFXI
Posts: 4197
By Ragnarok.Sekundes 2014-06-23 19:59:07
Make sure ammo=empty when you switch back to Gjallar.
So in the midcast of my buff set, I need to have this line in there?
ammo="Empty",
Does anything else special need to be done? I tried that and so far no luck.
showswaps tells me that it isn't even trying to send the command to midcast Gjallar. I also tried putting range="Empty", on my precast set hoping maybe if GS knows it won't have Gjallar after precast that it will try to midcast it.
Leviathan.Arcon
VIP
Server: Leviathan
Game: FFXI
Posts: 666
By Leviathan.Arcon 2014-06-24 00:18:06
It's ammo=empty, not ammo="Empty". empty is a special GS value that unequips items.
[+]
Ragnarok.Sekundes
Server: Ragnarok
Game: FFXI
Posts: 4197
By Ragnarok.Sekundes 2014-06-24 00:42:36
It's ammo=empty, not ammo="Empty". empty is a special GS value that unequips items. Ah Thanks. I thought Mote was hurried and just didn't put all the quotes.
After making that correction, I did get that part to work. It does unequip Impatiens on midcast, however it does not equip Gjallar back, I'm just left with no ammo or ranged. But I'm out of time to test tonight, so I'll try a few things in the morning.
Thank you both for your help.
By Refia1 2014-06-24 02:54:41
motes, appreciate ur work, is there a way to add a rule to your SMN GS that equips af3+2 legs when avatar is at certain TP threshold? They should be better than ngen seraweels when at certain TP thresholds. Also what is the equipment command for your GS's to equip obi and twilight cape or other gear if the day doesn't match? Also lastly, when I do //fire2 with shortcuts it will make the avatar do fire2?
Ragnarok.Sekundes
Server: Ragnarok
Game: FFXI
Posts: 4197
By Ragnarok.Sekundes 2014-06-24 23:32:51
If anyone else is attempting to utilize Impatiens for precast on brd songs, here's a bit more detail on what I had to put to have it work.
Code sets.precast.BardSong = {
range=empty,
ammo="Impatiens",}
sets.midcast.WindBuff = {
range="Gjallarhorn",
ammo=empty,}
This is what I used when I first got it to work, but it turns out that the midcast wasn't necessary. I could take it out and it still worked but I figure it doesn't hurt.
Thanks you guys for helping on this.
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-06-25 14:51:25
is there a way to add a rule to your SMN GS that equips af3+2 legs when avatar is at certain TP threshold?
You'll have to do that as a custom rule. It can't (or rather, won't) be done automatically.
In the post_pet_midcast() function, do your check for pet TP (pet.tp), and equip the override gear.
By Crevox 2014-06-26 07:22:00
I switched over to Mote's SMN lua, and I had some personal issues with it. I managed to resolve them my own way, but I'm gonna put this out there to see if there's a better way of doing it or if it can be resolved in an update of sorts. I personally find them to be problems/inefficiencies.
First of all, an issue with precast (FC) gear. There is no easy way to make it switch back to idle gear during midcast it seems. If there is no applicable midcast set, or if the midcast set only replaces a couple pieces (Stoneskin), then the rest just stays as FC gear, which is very inefficient. As a SMN, when I have my avatar out and I cast something like, Haste, for example, I want to switch back to my perp gear for midcast so as not to lose MP during the midcast due to lack of perp. It basically makes Haste (or any other spell, especially long casts like Stoneskin) cost a lot more MP than they should, simply because it is doing midcast with FC gear instead of perp gear.
There are other losses as well, such as temporary loss of haste/accuracy on the avatar from gear, and potential of taking huge amounts of damage because your idle set isn't on (getting hit while in FC gear means you are not tanky, lacking tons of base stats; this is huge when summoning an avatar while getting hit). Ordinarily you could just combine the sets for spells (Elemental Magic) with the idle set for their midcast, but that's not possible for SMN due to having a different set for idle and idle with avatar (perp). It has to dynamically update the idle set based on different situations.
To resolve this, I simply added this to the end of Mote-Include.lua's get_midcast_set function. It seems like it was the only way I could think of to get this working the way I want it to, and to ensure that pre-cast BP delay was going off properly:
Code if string.find(spell.type,'BloodPact') then
return equipSet
else
return set_combine(get_idle_set(), equipSet)
end
Secondly, BP Wards Aerial Armor and Earthen Ward do not benefit from summoning skill at all. However, they are coded to use the same set as all other buff wards; again, this is inefficient and makes you lose MP and tons of defensive stats (all base stats/def) for the duration of the BP midcast. Not only that, but there is seemingly no way to make the script equip "Enhances Stoneskin" gear during the cast of Earthen Ward, simply due to how its designed.
To resolve this, I added the following code to Mote-Include.lua. I think you might be able to just create a midcast set in the job lua file as well SPECIFICALLY for that ward, but I'm not too sure. I wouldn't want my exact "Stoneskin" set on my Earthen Ward either, because I have things like enhancing magic skill on that set (which does nothing for Earthen Ward). When I get some Blood Boon gear and stuff I will probably make custom sets for both skills due to zero need for summoning skill, but for now, this worked out for me:
Code function get_pet_midcast_set(spell, spellMap)
local equipSet = {}
if (spell.name == 'Aerial Armor') then
return {}
end
...........
if (spell.name == 'Earthen Ward') then
equipSet = sets.midcast.EarthenWard
end
return equipSet
I hope this helps out. I just wanted to post my feedback on the great script, and help out anyone else having this issue.
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-06-27 02:52:28
Crevox said: First of all, an issue with precast (FC) gear. There is no easy way to make it switch back to idle gear during midcast it seems. If there is no applicable midcast set, or if the midcast set only replaces a couple pieces (Stoneskin), then the rest just stays as FC gear, which is very inefficient. As a SMN, when I have my avatar out and I cast something like, Haste, for example, I want to switch back to my perp gear for midcast so as not to lose MP during the midcast due to lack of perp.
Add something like: Code
function job_midcast(spell, action, spellMap, eventArgs)
if spell.action_type == 'Magic' then
equip(sets.idle)
end
end
And it will provide a new base layer that other midcast equip will lay on top of. If no other midcast set is chosen, it will simply change to this set. Obviously adjust for avatar, etc idle choices.
Quote: There are other losses as well, such as temporary loss of haste/accuracy on the avatar from gear, and potential of taking huge amounts of damage because your idle set isn't on (getting hit while in FC gear means you are not tanky, lacking tons of base stats; this is huge when summoning an avatar while getting hit).
Fast cast (precast) should be completely irrelevant. It's on for an inconsequential amount of time. Midcast can be handled as above. You can also change your casting mode. For example, have a PDT casting mode, and adjust your midcast sets accordingly (eg: sets.midcast['Enhancing Magic'].PDT).
Quote: To resolve this, I simply added this to the end of Mote-Include.lua's get_midcast_set function. It seems like it was the only way I could think of to get this working the way I want it to, and to ensure that pre-cast BP delay was going off properly:
Anything you want to force to happen at the end of a default event (eg: midcast) should go in the post_ version of the function -- in this case, job_post_midcast(). Gear is equipped in the following order: user_midcast (global function), job_midcast (job function), default midcast (default set selection), job_post_midcast (followup function). You can layer on overrides at each point that replaces what was selected in the prior functions, though I strongly recommend -against- modifying Mote-Include itself. There should be nothing that you need to do that requires modifying that file. If you want to prevent the default set selection from occurring at all, set eventArgs.handled = true in the initial job function. If you just want to override certain pieces, add them in the post_ function.
Quote: Secondly, BP Wards Aerial Armor and Earthen Ward do not benefit from summoning skill at all. However, they are coded to use the same set as all other buff wards; again, this is inefficient and makes you lose MP and tons of defensive stats (all base stats/def) for the duration of the BP midcast. Not only that, but there is seemingly no way to make the script equip "Enhances Stoneskin" gear during the cast of Earthen Ward, simply due to how its designed.
Define a custom spell map in the job_get_spell_map function. The current default for that function:
Code
function job_get_spell_map(spell)
if spell.type == 'BloodPactRage' then
if magicalRagePacts:contains(spell.english) then
return 'MagicalBloodPactRage'
else
return 'PhysicalBloodPactRage'
end
elseif spell.type == 'BloodPactWard' and spell.target.type == 'MONSTER' then
return 'DebuffBloodPactWard'
end
end
Just add an extra conditional for BloodPactWards that you don't want to have using the default BloodPactWard gear sets. EG:
Code
function job_get_spell_map(spell)
if spell.type == 'BloodPactRage' then
if magicalRagePacts:contains(spell.english) then
return 'MagicalBloodPactRage'
else
return 'PhysicalBloodPactRage'
end
elseif spell.type == 'BloodPactWard' and spell.target.type == 'MONSTER' then
return 'DebuffBloodPactWard'
elseif spell.english == 'Aerial Armor' or spell.english == 'Earthen Ward' then
return 'SimpleBloodPactWard'
end
end
And then create the set: sets.midcast.Pet.SimpleBloodPactWard
Quote: To resolve this, I added the following code to Mote-Include.lua.
Once again, you should not be modifying Mote-Include to achieve these ends.
By Crevox 2014-06-27 03:44:29
Thank you for the response.
Quote: And it will provide a new base layer that other midcast equip will lay on top of. If no other midcast set is chosen, it will simply change to this set. Obviously adjust for avatar, etc idle choices.
Which is why I used the get_idle_set() of the include file, to dynamically equip the proper idle set. The code is already there to do all this, thus, I used it.
Even if there is a midcast set chosen, I can't create entire sets for such things. If I want to cast Stoneskin, I'm going to replace my pants and my necklace; that's it. I would have to create an entire set to avoid still wearing the precast gear (thus, basically put my idle gear into the Stoneskin set) but I can't define that due to the idle set dynamically updating based on varying situations.
Quote: Fast cast (precast) should be completely irrelevant. It's on for an inconsequential amount of time. Midcast can be handled as above. You can also change your casting mode. For example, have a PDT casting mode, and adjust your midcast sets accordingly (eg: sets.midcast['Enhancing Magic'].PDT).
It's on for an inconsequential amount of time only if you swap to something else during midcast, which by default, you don't, unless the set you are swapping to for midcast (provided there is one, many spells don't have one) covers every single equip slot; otherwise, precast gear stays on for the whole midcast. That time is not inconsequential, and getting hit by a mob while I'm trying to summon Garuda in fast-cast gear is quite painful, and also a waste of 1~2 ticks of MP (no refresh gear).
Like I said, ordinarily you could just combine the idle set with a generic (or all) midcast sets for midcast to go over the layer of the idle, but the idle set is dynamic based on many variables (which pet is out, whether or not the pet is engaged, etc) so you can't simply combine the sets. The method you provided above will work, but will probably require re-coding the entire determination of which idle set to equip, I think?
Quote: Anything you want to force to happen at the end of a default event (eg: midcast) should go in the post_ version of the function -- in this case, job_post_midcast(). Gear is equipped in the following order: user_midcast (global function), job_midcast (job function), default midcast (default set selection), job_post_midcast (followup function). You can layer on overrides at each point that replaces what was selected in the prior functions, though I strongly recommend -against- modifying Mote-Include itself. There should be nothing that you need to do that requires modifying that file. If you want to prevent the default set selection from occurring at all, set eventArgs.handled = true in the initial job function. If you just want to override certain pieces, add them in the post_ function.
I felt that I had no choice but to modify the include file. It seems by far the simplest solution for this issue, requiring only a few lines of code.
Quote: Just add an extra conditional for BloodPactWards that you don't want to have using the default BloodPactWard gear sets.
This will work to avoid having to modify the include file for Aerial Armor and Earthen Ward, thank you.
Besides this, I feel like this modifications were the simplest way to go about it, only taking a few lines of code. It may not be the cleanest way (modifying a library), but I personally feel like this is an oversight in the design, causing this to be necessary without having to do so much more. Precast is precast; once the precast is over, I no longer want to be wearing my precast gear, and there can be a million reasons why this is the case, more than what I already stated. For most jobs, it probably wouldn't be an issue (just set midcasts for everything), but SMN is too dynamic for this to be the case, requiring an ever-changing idle set.
For my ends, these changes will serve, though it is regrettable that I will likely have to re-apply my modifications on updates to the library. I feel like these are core issues with the design of the SMN job file (and thus a problem for anyone who uses it, whether or not they realize it's doing this) and how the equipment changes function, with no easy answer other than modifying the library.
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-06-27 12:41:35
Crevox said: It's on for an inconsequential amount of time only if you swap to something else during midcast, which by default, you don't, unless the set you are swapping to for midcast (provided there is one, many spells don't have one) covers every single equip slot; otherwise, precast gear stays on for the whole midcast.
Which is the entire point of creating a base, default midcast set. Equip your base midcast set in job_midcast, and the selected spell set (such as two pieces for Stoneskin) gets layered on top of that.
The default behavior is to apply a global haste set for midcast spells (sets.midcast.FastRecast). You can override that at the job level or the global level (ie: create a new user_midcast function that will apply to all jobs).
Crevox said: The method you provided above will work, but will probably require re-coding the entire determination of which idle set to equip, I think?
Nope. If you want to use the default idle set for the current conditions as your base layer, just call get_idle_set(). For example:
Code
function job_midcast(spell, action, spellMap, eventArgs)
if spell.action_type == 'Magic' then
equip(get_idle_set())
end
end
It will then layer any automatically selected gear sets on top of that. get_idle_set() doesn't equip gear, it just constructs a set; thus you're free to call it to get the current idle set, and use it whereever you like.
Phoenix.Baelorn
Server: Phoenix
Game: FFXI
Posts: 857
By Phoenix.Baelorn 2014-06-27 19:27:07
So I am using this lua from the SAM thread and I noticed that ear1 isn't switching. At all. Not for TP, WS, etc. but everything else is working great. It's a strange issue that I can't figure out. ear1 is not randomly disabled for some reason either(I enabled it just in case). Any ideas?
Code -- *** Credit goes to Flippant for helping me with Gearswap *** --
-- ** I Use Motenten's Macro Book Function ** --
-- Last Updated: 05/02/14 8:00 PM *Advanced Version* --
function get_sets()
AccIndex = 1
AccArray = {"LowACC","MidACC","HighACC","Lentus"} -- 3 Levels Of Accuracy Sets For TP/WS/Hybrid. First Set Is LowACC. Add More ACC Sets If Needed Then Create Your New ACC Below. Most of These Sets Are Empty So You Need To Edit Them On Your Own. Remember To Check What The Combined Set Is For Each Sets. --
WeaponIndex = 2
WeaponArray = {"Kogarasumaru","Tsurumaru","Amanomurakumo","Masamune","Lentus"} -- Default TP Set Is Kogarasumaru. Can Delete Any Weapons/Sets That You Don't Need Or Replace/Add The New Weapons That You Want To Use. --
IdleIndex = 2
IdleArray = {"Movement","Regen"} -- Default Idle Set Is Movement --
Armor = 'None'
Twilight = 'None'
Attack = 'OFF' -- Set Default Attack Set ON or OFF Here --
Seigan = 'ON' -- Set Default Seigan Set ON or OFF Here --
Third_Eye = 'ON' -- Set Default Third Eye Set ON or OFF Here --
Samurai_Roll = 'ON' -- Set Default SAM Roll ON or OFF Here --
target_distance = 5 -- Set Default Distance Here --
select_default_macro_book() -- Change Default Macro Book At The End --
sc_map = {SC1="TachiFudo", SC2="TachiRana", SC3="NamasArrow"} -- 3 Additional Binds. Can Change Whatever JA/WS/Spells You Like Here. Remember Not To Use Spaces. --
sets.Idle = {}
-- Idle/Town Sets --
sets.Idle.Regen = {
head="Twilight Helm",
neck="Wiglen Gorget",
ear1="Sanare Earring",
ear2="Dawn Earring",
body="Kumarbi's Akar",
hands="Otronif Gloves +1",
ring1="Sheltered Ring",
ring2="Paguroidea Ring",
back="Repulse Mantle",
waist="Flume belt",
legs="Otronif Brais +1",
feet="Danzo Sune-Ate"}
sets.Idle.Regen.Kogarasumaru = set_combine(sets.Idle.Regen,{
main="Kogarasumaru",
sub="Bloodrain Strap",
range="Cibitshavore",
ammo="Tulfaire Arrow"})
sets.Idle.Regen.Tsurumaru = set_combine(sets.Idle.Regen,{
main="Tsurumaru",
sub="Duplus Grip",
range="Yoichinoyumi",
ammo="Tulfaire Arrow"})
sets.Idle.Regen.Amanomurakumo = set_combine(sets.Idle.Regen,{
main="Amanomurakumo",
sub="Duplus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow"})
sets.Idle.Regen.Masamune = set_combine(sets.Idle.Regen,{
main="Masamune",
sub="Duplus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow"})
sets.Idle.Regen.Lentus = set_combine(sets.Idle.Regen,{
main="Kogarasumaru",
sub="Lentus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow"})
sets.Idle.Movement = set_combine(sets.Idle.Regen,{
head="Otomi Helm",
neck="Ganesha's Mala",
body="Mes. Haubergeon",
ring1="Defending Ring",
ring2="Patricius Ring"})
sets.Idle.Movement.Kogarasumaru = set_combine(sets.Idle.Movement,{
main="Kogarasumaru",
sub="Bloodrain Strap",
range="Cibitshavore",
ammo="Tulfaire Arrow"})
sets.Idle.Movement.Tsurumaru = set_combine(sets.Idle.Movement,{
main="Tsurumaru",
sub="Duplus Grip",
range="Yoichinoyumi",
ammo="Tulfaire Arrow"})
sets.Idle.Movement.Amanomurakumo = set_combine(sets.Idle.Movement,{
main="Amanomurakumo",
sub="Duplus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow"})
sets.Idle.Movement.Masamune = set_combine(sets.Idle.Movement,{
main="Masamune",
sub="Duplus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow"})
sets.Idle.Movement.Lentus = set_combine(sets.Idle.Movement,{
main="Kogarasumaru",
sub="Lentus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow"})
sets.Twilight = {head="Twilight Helm",body="Twilight Mail"}
-- TP Base Set --
sets.TP = {}
-- Kogarasumaru(AM3 Down) TP Sets --
sets.TP.Kogarasumaru = {
main="Kogarasumaru",
sub="Bloodrain Strap",
range="Cibitshavore",
ammo="Tulfaire Arrow",
head="Otomi Helm",
neck="Ganesha's Mala",
ear1="Trux Earring",
ear2="Brutal Earring",
body="Sakonji domaru +1 +1",
hands="Wakido Kote +1",
ring1="K'ayres Ring",
ring2="Rajas Ring",
back="Misuuchi Kappa",
waist="Windbuffet Belt",
legs="Otronif Brais +1 +1",
feet="Otronif Boots +1"}
sets.TP.Kogarasumaru.MidACC = set_combine(sets.TP.Kogarasumaru,{
head="Yaoyotl Helm",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
ring1="Mars's Ring",
back="Takaha Mantle",
feet="Sak. Sune-Ate +1"})
sets.TP.Kogarasumaru.HighACC = set_combine(sets.TP.Kogarasumaru.MidACC,{
neck="Iqabi Necklace",
body="Mes. Haubergeon",
waist="Dynamic Belt +1",
legs="Xaddi Cuisses"})
-- Kogarasumaru(AM3 Up) TP Sets --
sets.TP.Kogarasumaru.AM3 = set_combine(sets.TP.Kogarasumaru,{
head="Sakonji Kabuto +1",
ear1="Tripudio Earring",
ear2="Brutal Earring",
back="Takaha Mantle"})
sets.TP.Kogarasumaru.MidACC.AM3 = set_combine(sets.TP.Kogarasumaru.AM3,{
head="Yaoyotl Helm",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
ring1="Mars's Ring",
back="Takaha Mantle",
feet="Sak. Sune-Ate +1"})
sets.TP.Kogarasumaru.HighACC.AM3 = set_combine(sets.TP.Kogarasumaru.MidACC.AM3,{
neck="Iqabi Necklace",
body="Mes. Haubergeon",
waist="Dynamic Belt +1",
legs="Xaddi Cuisses"})
-- Kogarasumaru(AM3 Down: Ionis) TP Sets --
sets.TP.Kogarasumaru.Ionis = set_combine(sets.TP.Kogarasumaru,{})
sets.TP.Kogarasumaru.MidACC.Ionis = set_combine(sets.TP.Kogarasumaru.MidACC,{})
sets.TP.Kogarasumaru.HighACC.Ionis = set_combine(sets.TP.Kogarasumaru.HighACC,{})
-- Kogarasumaru(AM3 Up: Ionis) TP Sets --
sets.TP.Kogarasumaru.AM3.Ionis = set_combine(sets.TP.Kogarasumaru.AM3,{})
sets.TP.Kogarasumaru.MidACC.AM3.Ionis = set_combine(sets.TP.Kogarasumaru.MidACC.AM3,{})
sets.TP.Kogarasumaru.HighACC.AM3.Ionis = set_combine(sets.TP.Kogarasumaru.HighACC.AM3,{})
-- Kogarasumaru(AM3 Down: SAM Roll) TP Sets --
sets.TP.Kogarasumaru.STP = set_combine(sets.TP.Kogarasumaru,{
head="Sakonji Kabuto +1",
ear1="Tripudio Earring",
ear2="Brutal Earring",
back="Takaha Mantle",
waist="Goading Belt"})
sets.TP.Kogarasumaru.MidACC.STP = set_combine(sets.TP.Kogarasumaru.STP,{
head="Yaoyotl Helm",
feet="Sak. Sune-Ate +1"})
sets.TP.Kogarasumaru.HighACC.STP = set_combine(sets.TP.Kogarasumaru.MidACC.STP,{
neck="Iqabi Necklace",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
body="Mes. Haubergeon",
ring1="Mars's Ring",
waist="Dynamic Belt +1",
legs="Xaddi Cuisses"})
-- Kogarasumaru(AM3 Up: SAM Roll) TP Sets --
sets.TP.Kogarasumaru.AM3.STP = set_combine(sets.TP.Kogarasumaru.STP,{})
sets.TP.Kogarasumaru.MidACC.AM3.STP = set_combine(sets.TP.Kogarasumaru.MidACC.STP,{})
sets.TP.Kogarasumaru.HighACC.AM3.STP = set_combine(sets.TP.Kogarasumaru.HighACC.STP,{})
-- Kogarasumaru(AM3 Down: Ionis + SAM Roll) TP Sets --
sets.TP.Kogarasumaru.Ionis.STP = set_combine(sets.TP.Kogarasumaru.STP,{})
sets.TP.Kogarasumaru.MidACC.Ionis.STP = set_combine(sets.TP.Kogarasumaru.MidACC.STP,{})
sets.TP.Kogarasumaru.HighACC.Ionis.STP = set_combine(sets.TP.Kogarasumaru.HighACC.STP,{})
-- Kogarasumaru(AM3 Up: Ionis + SAM Roll) TP Sets --
sets.TP.Kogarasumaru.AM3.Ionis.STP = set_combine(sets.TP.Kogarasumaru.AM3.STP,{})
sets.TP.Kogarasumaru.MidACC.AM3.Ionis.STP = set_combine(sets.TP.Kogarasumaru.MidACC.AM3.STP,{})
sets.TP.Kogarasumaru.HighACC.AM3.Ionis.STP = set_combine(sets.TP.Kogarasumaru.HighACC.AM3.STP,{})
-- Kogarasumaru(4 Hits) TP Set --
sets.TP.Kogarasumaru.Lentus = {
main="Kogarasumaru",
sub="Lentus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow",
head="Sakonji Kabuto +1",
neck="Ganesha's Mala",
ear1="Tripudio Earring",
ear2="Brutal Earring",
body="Sakonji domaru +1 +1",
hands="Wakido Kote +1",
ring1="K'ayres Ring",
ring2="Rajas Ring",
back="Takaha Mantle",
waist="Goading Belt",
legs="Otronif Brais +1 +1",
feet="Otronif Boots +1"}
-- Tsurumaru TP Sets --
sets.TP.Tsurumaru = {
main="Tsurumaru",
sub="Duplus Grip",
ammo="Hagneia stone",
head="Otomi Helm",
neck="Ganesha's Mala",
ear1="Bladeborn Earring",
ear2="Steelflash Earring",
body="Sakonji domaru +1",
hands="Wakido Kote +1",
ring1="Oneiros Ring",
ring2="Rajas Ring",
back="Misuuchi Kappa",
waist="Windbuffet Belt",
legs="Otronif Brais +1",
feet="Otronif Boots"}
sets.TP.Tsurumaru.MidACC = set_combine(sets.TP.Tsurumaru,{
head="Yaoyotl Helm",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
ring1="Mars's Ring",
back="Takaha Mantle"})
sets.TP.Tsurumaru.HighACC = set_combine(sets.TP.Tsurumaru.MidACC,{
neck="Iqabi Necklace",
body="Mes. Haubergeon",
waist="Dynamic Belt +1",
legs="Xaddi Cuisses",
feet="Sak. Sune-Ate +1"})
-- Tsurumaru(Ionis) TP Sets --
sets.TP.Tsurumaru.Ionis = set_combine(sets.TP.Tsurumaru,{
back="Takaha Mantle"})
sets.TP.Tsurumaru.MidACC.Ionis = set_combine(sets.TP.Tsurumaru.Ionis,{
head="Yaoyotl Helm",
neck="Iqabi Necklace",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
waist="Dynamic Belt +1"})
sets.TP.Tsurumaru.HighACC.Ionis = set_combine(sets.TP.Tsurumaru.MidACC.Ionis,{
body="Mes. Haubergeon",
ring1="Mars's Ring",
legs="Xaddi Cuisses",
feet="Sak. Sune-Ate +1"})
-- Tsurumaru(SAM Roll) TP Sets --
sets.TP.Tsurumaru.STP = set_combine(sets.TP.Tsurumaru,{})
sets.TP.Tsurumaru.MidACC.STP = set_combine(sets.TP.Tsurumaru.MidACC,{})
sets.TP.Tsurumaru.HighACC.STP = set_combine(sets.TP.Tsurumaru.HighACC,{})
-- Tsurumaru(Ionis + SAM Roll) TP Sets --
sets.TP.Tsurumaru.Ionis.STP = set_combine(sets.TP.Tsurumaru.Ionis,{
ear1="Trux Earring",
ear2="Brutal Earring"})
sets.TP.Tsurumaru.MidACC.Ionis.STP = set_combine(sets.TP.Tsurumaru.Ionis.STP,{
head="Yaoyotl Helm",
neck="Iqabi Necklace",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
ring1="Mars's Ring",
back="Takaha Mantle",
waist="Dynamic Belt +1"})
sets.TP.Tsurumaru.HighACC.Ionis.STP = set_combine(sets.TP.Tsurumaru.MidACC.Ionis.STP,{
legs="Xaddi Cuisses",
body="Mes. Haubergeon",
feet="Sak. Sune-Ate +1"})
-- Amanomurakumo(AM Down) TP Sets --
sets.TP.Amanomurakumo = {
main="Amanomurakumo",
sub="Duplus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow",
head="Otomi Helm",
neck="Ganesha's Mala",
ear1="Trux Earring",
ear2="Brutal Earring",
body="Sakonji domaru +1 +1",
hands="Wakido Kote +1",
ring1="K'ayres Ring",
ring2="Rajas Ring",
back="Misuuchi Kappa",
waist="Windbuffet Belt",
legs="Otronif Brais +1 +1",
feet="Otronif Boots +1"}
sets.TP.Amanomurakumo.MidACC = set_combine(sets.TP.Amanomurakumo,{
head="Yaoyotl Helm",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
back="Takaha Mantle",
waist="Dynamic Belt +1"})
sets.TP.Amanomurakumo.HighACC = set_combine(sets.TP.Amanomurakumo.MidACC,{
neck="Iqabi Necklace",
body="Mes. Haubergeon",
ring1="Mars's Ring",
feet="Waki. Sune-Ate +1"})
-- Amanomurakumo(AM Up) TP Sets --
sets.TP.Amanomurakumo.AM = set_combine(sets.TP.Amanomurakumo,{})
sets.TP.Amanomurakumo.MidACC.AM = set_combine(sets.TP.Amanomurakumo.AM,{})
sets.TP.Amanomurakumo.HighACC.AM = set_combine(sets.TP.Amanomurakumo.MidACC.AM,{})
-- Amanomurakumo(AM Down: Ionis) TP Sets --
sets.TP.Amanomurakumo.Ionis = set_combine(sets.TP.Amanomurakumo,{})
sets.TP.Amanomurakumo.MidACC.Ionis = set_combine(sets.TP.Amanomurakumo.Ionis,{})
sets.TP.Amanomurakumo.HighACC.Ionis = set_combine(sets.TP.Amanomurakumo.MidACC.Ionis,{})
-- Amanomurakumo(AM Up: Ionis) TP Sets --
sets.TP.Amanomurakumo.AM.Ionis = set_combine(sets.TP.Amanomurakumo.AM,{})
sets.TP.Amanomurakumo.MidACC.AM.Ionis = set_combine(sets.TP.Amanomurakumo.AM.Ionis,{})
sets.TP.Amanomurakumo.HighACC.AM.Ionis = set_combine(sets.TP.Amanomurakumo.MidACC.AM.Ionis,{})
-- Amanomurakumo(AM Down: SAM Roll) TP Sets --
sets.TP.Amanomurakumo.STP = set_combine(sets.TP.Amanomurakumo,{})
sets.TP.Amanomurakumo.MidACC.STP = set_combine(sets.TP.Amanomurakumo.MidACC,{})
sets.TP.Amanomurakumo.HighACC.STP = set_combine(sets.TP.Amanomurakumo.HighACC,{})
-- Amanomurakumo(AM Up: SAM Roll) TP Sets --
sets.TP.Amanomurakumo.AM.STP = set_combine(sets.TP.Amanomurakumo.STP,{})
sets.TP.Amanomurakumo.MidACC.AM.STP = set_combine(sets.TP.Amanomurakumo.MidACC.STP,{})
sets.TP.Amanomurakumo.HighACC.AM.STP = set_combine(sets.TP.Amanomurakumo.HighACC.STP,{})
-- Amanomurakumo(AM Down: Ionis + SAM Roll) TP Sets --
sets.TP.Amanomurakumo.Ionis.STP = set_combine(sets.TP.Amanomurakumo.STP,{})
sets.TP.Amanomurakumo.MidACC.Ionis.STP = set_combine(sets.TP.Amanomurakumo.MidACC.STP,{})
sets.TP.Amanomurakumo.HighACC.Ionis.STP = set_combine(sets.TP.Amanomurakumo.HighACC.STP,{})
-- Amanomurakumo(AM Up: Ionis + SAM Roll) TP Sets --
sets.TP.Amanomurakumo.AM.Ionis.STP = set_combine(sets.TP.Amanomurakumo.AM.STP,{})
sets.TP.Amanomurakumo.MidACC.AM.Ionis.STP = set_combine(sets.TP.Amanomurakumo.MidACC.AM.STP,{})
sets.TP.Amanomurakumo.HighACC.AM.Ionis.STP = set_combine(sets.TP.Amanomurakumo.HighACC.AM.STP,{})
-- Masamune TP Sets --
sets.TP.Masamune = {
main="Masamune",
sub="Duplus Grip",
range="Cibitshavore",
ammo="Tulfaire Arrow",
head="Otomi Helm",
neck="Ganesha's Mala",
ear1="Trux Earring",
ear2="Brutal Earring",
body="Sakonji domaru +1 +1",
hands="Wakido Kote +1",
ring1="K'ayres Ring",
ring2="Rajas Ring",
back="Misuuchi Kappa",
waist="Windbuffet Belt",
legs="Otronif Brais +1 +1",
feet="Otronif Boots +1"}
sets.TP.Masamune.MidACC = set_combine(sets.TP.Masamune,{
head="Yaoyotl Helm",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
back="Takaha Mantle",
waist="Dynamic Belt +1"})
sets.TP.Masamune.HighACC = set_combine(sets.TP.Masamune.MidACC,{
neck="Iqabi Necklace",
body="Mes. Haubergeon",
ring1="Mars's Ring",
feet="Waki. Sune-Ate +1"})
-- Masamune(Ionis) TP Sets --
sets.TP.Masamune.Ionis = set_combine(sets.TP.Masamune,{})
sets.TP.Masamune.MidACC.Ionis = set_combine(sets.TP.Masamune.Ionis,{})
sets.TP.Masamune.HighACC.Ionis = set_combine(sets.TP.Masamune.MidACC.Ionis,{})
-- Masamune(SAM Roll) TP Sets --
sets.TP.Masamune.STP = set_combine(sets.TP.Masamune,{})
sets.TP.Masamune.MidACC.STP = set_combine(sets.TP.Masamune.MidACC,{})
sets.TP.Masamune.HighACC.STP = set_combine(sets.TP.Masamune.HighACC,{})
-- Masamune(Ionis + SAM Roll) TP Sets --
sets.TP.Masamune.Ionis.STP = set_combine(sets.TP.Masamune.Ionis,{})
sets.TP.Masamune.MidACC.Ionis.STP = set_combine(sets.TP.Masamune.Ionis.STP,{})
sets.TP.Masamune.HighACC.Ionis.STP = set_combine(sets.TP.Masamune.MidACC.Ionis.STP,{})
-- Seigan TP Set --
sets.TP.Seigan = {head="Unkai Kabuto +2"}
-- Third Eye TP Set --
sets.TP['Third Eye'] = {legs="Sakonji Haidate +1"}
-- PDT/MDT Sets --
sets.PDT = {
head="Otronif Mask +1",
neck="Twilight Torque",
ear1="Black Earring",
ear2="Darkness Earring",
body="Otro. Harness +1",
hands="Otronif Gloves +1",
ring1="Dark Ring",
ring2="Defending Ring",
back="Shadow Mantle",
waist="Flume Belt",
legs="Otronif Brais +1 +1",
feet="Otronif Boots +1"}
sets.MDT = set_combine(sets.PDT,{
head="Ogier's Helm",
ear1="Merman's Earring",
ear2="Sanare Earring",
body="Nocturnus Mail",
ring1="Shadow Ring",
back="Engulfer Cape",
waist="Resolute Belt"})
-- Hybrid Sets --
sets.TP.Hybrid = set_combine(sets.PDT,{
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
hands="Sakonji Kote +1",
ring1="Patricius Ring",
back="Mollusca Mantle"})
sets.TP.Hybrid.MidACC = set_combine(sets.TP.Hybrid,{
head="Yaoyotl Helm",
ear1="Steelflash Earring",
ear2="Bladeborn Earring",
body="Sakonji domaru +1 +1",
hands="Wakido Kote +1"})
sets.TP.Hybrid.HighACC = set_combine(sets.TP.Hybrid.MidACC,{
body="Mes. Haubergeon",
waist="Dynamic Belt +1",
legs="Xaddi Cuisses"})
-- WS Base Set --
sets.WS = {
head="Otomi Helm",
neck="Ganesha's Mala",
ear1="Vulcan's Pearl",
ear2="Brutal Earring",
body="Phorcys Korazin",
hands="Boor Bracelets",
ring1="Pyrosoul Ring",
ring2="Pyrosoul Ring",
back="Buquwik Cape",
waist="Windbuffet Belt",
legs="Wakido Haidate +1",
feet="Sak. Sune-Ate +1"}
-- Tachi: Fudo Sets --
sets.WS["Tachi: Fudo"] = {
ammo="Cheruski needle",
head="Otomi Helm",
neck="Light Gorget",
ear1="Moonshade Earring",
ear2="Brutal Earring",
body="Sakonji domaru +1",
hands="Buremte gloves",
ring1="Pyrosoul Ring",
ring2="Pyrosoul Ring",
back="Buquwik Cape",
waist="Light Belt",
legs="Gorney brayettes +1",
feet="Ejekamal boots"}
sets.WS["Tachi: Fudo"].MidACC = set_combine(sets.WS["Tachi: Fudo"],{
head="Yaoyotl Helm",
hands="Miki. Gauntlets",
legs="Xaddi Cuisses",
feet="Waki. Sune-Ate +1"})
sets.WS["Tachi: Fudo"].HighACC = set_combine(sets.WS["Tachi: Fudo"].MidACC,{
body="Mes. Haubergeon",
back="Takaha Mantle",
legs="Miki. Cuisses",
feet="Waki. Sune-Ate +1"})
-- Tachi: Fudo(4 Hits) Set --
sets.WS["Tachi: Fudo"].Lentus = set_combine(sets.WS["Tachi: Fudo"],{
ring2="Rajas Ring"})
-- Tachi: Fudo(SAM Roll) Sets --
sets.WS["Tachi: Fudo"].STP = set_combine(sets.WS["Tachi: Fudo"],{})
sets.WS["Tachi: Fudo"].MidACC.STP = set_combine(sets.WS["Tachi: Fudo"].MidACC,{})
sets.WS["Tachi: Fudo"].HighACC.STP = set_combine(sets.WS["Tachi: Fudo"].HighACC,{})
-- Tachi: Fudo(Attack) Set --
sets.WS["Tachi: Fudo"].ATT = set_combine(sets.WS["Tachi: Fudo"],{
head="Yaoyotl Helm",
hands="Miki. Gauntlets"})
-- Tachi: Shoha Sets --
sets.WS["Tachi: Shoha"] = {
head="Otomi Helm",
neck="Ganesha's Mala",
ear1="Moonshade Earring",
ear2="Brutal Earring",
body="Mes. Haubergeon",
hands="Boor Bracelets",
ring1="Pyrosoul Ring",
ring2="Pyrosoul Ring",
back="Buquwik Cape",
waist="Windbuffet Belt",
legs="Wakido Haidate +1",
feet="Sak. Sune-Ate +1"}
sets.WS["Tachi: Shoha"].MidACC = set_combine(sets.WS["Tachi: Shoha"],{
head="Yaoyotl Helm",
neck="Breeze Gorget",
hands="Miki. Gauntlets",
waist="Breeze Belt",
legs="Xaddi Cuisses",
feet="Waki. Sune-Ate +1"})
sets.WS["Tachi: Shoha"].HighACC = set_combine(sets.WS["Tachi: Shoha"].MidACC,{
back="Takaha Mantle",
legs="Miki. Cuisses"})
-- Tachi: Shoha(4 Hits) Set --
sets.WS["Tachi: Shoha"].Lentus = set_combine(sets.WS["Tachi: Shoha"],{})
-- Tachi: Shoha(SAM Roll) Sets --
sets.WS["Tachi: Shoha"].STP = set_combine(sets.WS["Tachi: Shoha"],{})
sets.WS["Tachi: Shoha"].MidACC.STP = set_combine(sets.WS["Tachi: Shoha"].MidACC,{})
sets.WS["Tachi: Shoha"].HighACC.STP = set_combine(sets.WS["Tachi: Shoha"].HighACC,{})
-- Tachi: Rana Sets --
sets.WS["Tachi: Rana"] = {
head="Otomi Helm",
neck="Snow Gorget",
ear1="Vulcan's Pearl",
ear2="Brutal Earring",
body="Mes. Haubergeon",
hands="Boor Bracelets",
ring1="Pyrosoul Ring",
ring2="Pyrosoul Ring",
back="Buquwik Cape",
waist="Snow Belt",
legs="Wakido Haidate +1",
feet="Sak. Sune-Ate +1"}
sets.WS["Tachi: Rana"].MidACC = set_combine(sets.WS["Tachi: Rana"],{
head="Yaoyotl Helm",
hands="Miki. Gauntlets",
legs="Xaddi Cuisses",
feet="Waki. Sune-Ate +1"})
sets.WS["Tachi: Rana"].HighACC = set_combine(sets.WS["Tachi: Rana"].MidACC,{
back="Takaha Mantle",
legs="Miki. Cuisses"})
-- Tachi: Rana(4 Hits) Set --
sets.WS["Tachi: Rana"].Lentus = set_combine(sets.WS["Tachi: Rana"],{})
-- Tachi: Rana(SAM Roll) Sets --
sets.WS["Tachi: Rana"].STP = set_combine(sets.WS["Tachi: Rana"],{})
sets.WS["Tachi: Rana"].MidACC.STP = set_combine(sets.WS["Tachi: Rana"].MidACC,{})
sets.WS["Tachi: Rana"].HighACC.STP = set_combine(sets.WS["Tachi: Rana"].HighACC,{})
-- Namas Arrow Sets --
sets.WS["Namas Arrow"] = {
ammo="Tulfaire Arrow",
head="Sakonji Kabuto +1",
neck="Snow Gorget",
ear1="Vulcan's Pearl",
ear2="Vulcan's Pearl",
body="Phorcys Korazin",
hands="Unkai Kote +2",
ring1="Pyrosoul Ring",
ring2="Pyrosoul Ring",
back="Buquwik Cape",
waist="Snow Belt",
legs="Wakido Haidate +1",
feet="Waki. Sune-Ate +1"}
sets.WS["Namas Arrow"].MidACC = set_combine(sets.WS["Namas Arrow"],{})
sets.WS["Namas Arrow"].HighACC = set_combine(sets.WS["Namas Arrow"].MidACC,{
body="Kyujutsugi"})
sets.WS["Apex Arrow"] = {
ammo="Tulfaire Arrow",
head="Sakonji Kabuto +1",
neck="Breeze Gorget",
ear1="Altdorf's Earring",
ear2="Wilhelm's Earring",
body="Phorcys Korazin",
hands="Unkai Kote +2",
ring1="Stormsoul Ring",
ring2="Stormsoul Ring",
back="Buquwik Cape",
waist="Breeze Belt",
legs="Wakido Haidate +1",
feet="Waki. Sune-Ate +1"}
sets.WS["Apex Arrow"].MidACC = set_combine(sets.WS["Apex Arrow"],{})
sets.WS["Apex Arrow"].HighACC = set_combine(sets.WS["Apex Arrow"].MidACC,{
body="Kyujutsugi"})
-- JA Sets --
sets.JA = {}
sets.JA.Meditate = {head="Wakido Kabuto",hands="Saotome Kote +2"}
sets.JA["Warding Circle"] = {head="Wakido Kabuto"}
-- Waltz Set --
sets.Waltz = {}
sets.Precast = {}
-- Fastcast Set --
sets.Precast.FastCast = {
neck="Orunmila's Torque",
ear1="Loquac. Earring",
ring1="Prolix Ring",
ring2="Veneficium Ring"}
sets.Midcast = {}
-- Magic Haste Set --
sets.Midcast.Haste = set_combine(sets.PDT,{})
end
function pretarget(spell,action)
if spell.action_type == 'Magic' and buffactive.silence then -- Auto Use Echo Drops If You Are Silenced --
cancel_spell()
send_command('input /item "Echo Drops" <me>')
elseif spell.english == "Berserk" and buffactive.Berserk then -- Change Berserk To Aggressor If Berserk Is On --
cancel_spell()
send_command('Aggressor')
elseif spell.english == "Seigan" and buffactive.Seigan then -- Change Seigan To Third Eye If Seigan Is On --
cancel_spell()
send_command('ThirdEye')
elseif spell.english == "Meditate" and player.tp > 290 then -- Cancel Meditate If TP Is Above 290 --
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: ['..player.tp..' TP]')
elseif spell.action_type == 'Ranged Attack' and spell.target.distance > 24.9 then
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
elseif spell.type == 'WeaponSkill' and player.status == 'Engaged' then
if spell.skill == 'Archery' then
if spell.target.distance > 16+target_distance then
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
else
if spell.target.distance > target_distance then
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
end
end
end
function precast(spell,action)
if spell.type == "WeaponSkill" then
if player.status ~= 'Engaged' then -- Cancel WS If You Are Not Engaged. Can Delete It If You Don't Need It --
cancel_spell()
add_to_chat(123,'Unable To Use WeaponSkill: [Disengaged]')
return
else
equipSet = sets.WS
if equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
if Attack == 'ON' then
equipSet = equipSet["ATT"]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if buffactive["Samurai Roll"] and equipSet["STP"] and Samurai_Roll == 'ON' then
equipSet = equipSet["STP"]
end
if buffactive.Sekkanoki then -- Equip Unkai Kote +2 When Sekkanoki Is On --
equipSet = set_combine(equipSet,{hands="Unkai Kote +2"})
end
if buffactive.Sengikori then -- Equip Unkai Sune-ate +2 When Sengikori Is On --
equipSet = set_combine(equipSet,{feet="Unkai Sune-ate +2"})
end
if (spell.english == "Tachi: Fudo" or spell.english == "Tachi: Shoha") and (player.tp > 299 or buffactive.Sekkanoki or (player.tp > 199 and buffactive.Hagakure)) then -- Equip Vulcan's Pearl When You Have 300 TP or Sekkanoki On or 200+ TP For Hagakure --
equipSet = set_combine(equipSet,{ear1="Vulcan's Pearl"})
end
equip(equipSet)
end
elseif spell.type == "JobAbility" then
if sets.JA[spell.english] then
equip(sets.JA[spell.english])
end
elseif spell.action_type == 'Magic' then
if string.find(spell.english,'Utsusemi') then
if buffactive['Copy Image (3)'] or buffactive['Copy Image (4)'] then
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: [3+ Images]')
return
else
equip(sets.Precast.FastCast)
end
else
equip(sets.Precast.FastCast)
end
elseif spell.type == "Waltz" then
refine_waltz(spell,action)
equip(sets.Waltz)
elseif spell.english == 'Spectral Jig' and buffactive.Sneak then
cast_delay(0.2)
send_command('cancel Sneak')
end
if Twilight == 'Twilight' then
equip(sets.Twilight)
end
end
function midcast(spell,action)
if spell.action_type == 'Magic' then
if string.find(spell.english,'Utsusemi') then
if spell.english == 'Utsusemi: Ichi' and (buffactive['Copy Image'] or buffactive['Copy Image (2)']) then
send_command('@wait 1.7;cancel Copy Image*')
end
equip(sets.Midcast.Haste)
elseif spell.english == 'Monomi: Ichi' then
if buffactive['Sneak'] then
send_command('@wait 1.7;cancel sneak')
end
equip(sets.Midcast.Haste)
else
equip(sets.Midcast.Haste)
end
end
end
function aftercast(spell,action)
if not spell.interrupted then
if spell.type == "WeaponSkill" then
send_command('wait 0.2;gs c TP')
elseif spell.english == "Warding Circle" then -- Warding Circle Countdown --
send_command('wait 260;input /echo '..spell.name..': [WEARING OFF IN 10 SEC.];wait 10;input /echo '..spell.name..': [OFF]')
end
end
status_change(player.status)
end
function status_change(new,old)
if Armor == 'PDT' then
equip(sets.PDT)
elseif Armor == 'MDT' then
equip(sets.MDT)
elseif new == 'Engaged' then
equipSet = sets.TP
if Armor == 'Hybrid' and equipSet["Hybrid"] then
equipSet = equipSet["Hybrid"]
end
if equipSet[WeaponArray[WeaponIndex]] then
equipSet = equipSet[WeaponArray[WeaponIndex]]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if buffactive["Aftermath: Lv.3"] and equipSet["AM3"] then
equipSet = equipSet["AM3"]
end
if buffactive.Ionis and equipSet["Ionis"] then
equipSet = equipSet["Ionis"]
end
if buffactive["Samurai Roll"] and equipSet["STP"] and Samurai_Roll == 'ON' then
equipSet = equipSet["STP"]
end
if buffactive.Seigan and Seigan == 'ON' then -- Use Seigan Toggle For Seigan TP Set --
equipSet = set_combine(equipSet,sets.TP.Seigan)
end
if buffactive["Third Eye"] and Third_Eye == 'ON' then -- Use Third Eye Toggle For Third Eye TP Set --
equipSet = set_combine(equipSet,sets.TP["Third Eye"])
end
equip(equipSet)
else
equipSet = sets.Idle
if equipSet[IdleArray[IdleIndex]] then
equipSet = equipSet[IdleArray[IdleIndex]]
end
if equipSet[WeaponArray[WeaponIndex]] then
equipSet = equipSet[WeaponArray[WeaponIndex]]
end
equip(equipSet)
end
if Twilight == 'Twilight' then
equip(sets.Twilight)
end
end
function buff_change(buff,gain)
buff = string.lower(buff)
if buff == "aftermath: lv.3" then -- AM3 Timer/Countdown --
if gain then
send_command('timers create "Aftermath: Lv.3" 180 down;wait 120;input /echo Aftermath: Lv.3 [WEARING OFF IN 60 SEC.];wait 30;input /echo Aftermath: Lv.3 [WEARING OFF IN 30 SEC.];wait 20;input /echo Aftermath: Lv.3 [WEARING OFF IN 10 SEC.]')
else
send_command('timers delete "Aftermath: Lv.3"')
add_to_chat(123,'AM3: [OFF]')
end
elseif buff == "perfect defense" then -- PD Timer --
if gain then
send_command('timers create "Perfect Defense" 57 down')
else
send_command('timers delete "Perfect Defense"')
add_to_chat(123,'PD: [OFF]')
end
elseif buff == "yaegasumi" then -- Yaegasumi Timer --
if gain then
send_command('timers create "Yaegasumi" 45 down')
else
send_command('timers delete "Yaegasumi"')
add_to_chat(123,'Yaegasumi: [OFF]')
end
elseif buff == 'weakness' then -- Weakness Timer --
if gain then
send_command('timers create "Weakness" 300 up')
else
send_command('timers delete "Weakness"')
end
end
if buff == "sleep" and gain and player.hp > 200 and player.status == "Engaged" then -- Equip Berserker's Torque When You Are Asleep & Have 200+ HP --
equip({neck="Berserker's Torque"})
else
if not midaction() then
status_change(player.status)
end
end
end
-- In Game: //gs c (command), Macro: /console gs c (command), Bind: gs c (command) --
function self_command(command)
if command == 'C1' then -- Accuracy Toggle --
AccIndex = (AccIndex % #AccArray) + 1
add_to_chat(158,'Accuracy Level: '..AccArray[AccIndex])
status_change(player.status)
elseif command == 'C17' then -- Main Weapon Toggle --
WeaponIndex = (WeaponIndex % #WeaponArray) + 1
add_to_chat(158,'Main Weapon: '..WeaponArray[WeaponIndex])
status_change(player.status)
elseif command == 'C5' then -- Auto Update Gear Toggle --
status_change(player.status)
add_to_chat(158,'Auto Update Gear')
elseif command == 'C2' then -- Hybrid Toggle --
if Armor == 'Hybrid' then
Armor = 'None'
add_to_chat(123,'Hybrid Set: [Unlocked]')
else
Armor = 'Hybrid'
add_to_chat(158,'Hybrid Set: '..AccArray[AccIndex])
end
status_change(player.status)
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)
elseif command == 'C15' then -- MDT Toggle --
if Armor == 'MDT' then
Armor = 'None'
add_to_chat(123,'MDT Set: [Unlocked]')
else
Armor = 'MDT'
add_to_chat(158,'MDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'C16' then -- Seigan Toggle --
if Seigan == 'ON' then
Seigan = 'OFF'
add_to_chat(123,'Seigan Set: [Unlocked]')
else
Seigan = 'ON'
add_to_chat(158,'Seigan Set: [Locked]')
end
status_change(player.status)
elseif command == 'C12' then -- Third Eye Toggle --
if Third_Eye == 'ON' then
Third_Eye = 'OFF'
add_to_chat(123,'Third Eye Set: [Unlocked]')
else
Third_Eye = 'ON'
add_to_chat(158,'Third Eye Set: [Locked]')
end
status_change(player.status)
elseif command == 'C11' then -- SAM Roll Toggle --
if Samurai_Roll == 'ON' then
Samurai_Roll = 'OFF'
add_to_chat(123,'SAM Roll: [OFF]')
else
Samurai_Roll = 'ON'
add_to_chat(158,'SAM Roll: [ON]')
end
status_change(player.status)
elseif command == 'C9' then -- Attack Toggle --
if Attack == 'ON' then
Attack = 'OFF'
add_to_chat(123,'Attack: [OFF]')
else
Attack = 'ON'
add_to_chat(158,'Attack: [ON]')
end
status_change(player.status)
elseif command == 'C3' then -- Twilight Toggle --
if Twilight == 'Twilight' then
Twilight = 'None'
add_to_chat(123,'Twilight Set: [Unlocked]')
else
Twilight = 'Twilight'
add_to_chat(158,'Twilight Set: [locked]')
end
status_change(player.status)
elseif command == 'C8' then -- Distance Toggle --
if player.target.distance then
target_distance = math.floor(player.target.distance*10)/10
add_to_chat(158,'Distance: '..target_distance)
else
add_to_chat(123,'No Target Selected')
end
elseif command == 'C10' then -- Cancel Meikyo Shisui --
send_command('Cancel Meikyo Shisui')
add_to_chat(123,'Meikyo Shisui: [OFF]')
elseif command == 'C6' then -- Idle Toggle --
IdleIndex = (IdleIndex % #IdleArray) + 1
add_to_chat(158,'Idle Set: '..IdleArray[IdleIndex])
status_change(player.status)
elseif command == 'TP' then
add_to_chat(158,'TP Return: ['..tostring(player.tp)..']')
elseif command:match('^SC%d$') then
send_command('//'..sc_map[command])
end
end
function refine_waltz(spell,action)
if spell.type ~= 'Waltz' then
return
end
if spell.name == "Healing Waltz" or spell.name == "Divine Waltz" or spell.name == "Divine Waltz II" then
return
end
local newWaltz = spell.english
local waltzID
local missingHP
if spell.target.type == "SELF" then
missingHP = player.max_hp - player.hp
elseif spell.target.isallymember then
local target = find_player_in_alliance(spell.target.name)
local est_max_hp = target.hp / (target.hpp/100)
missingHP = math.floor(est_max_hp - target.hp)
end
if missingHP ~= nil then
if player.sub_job == 'DNC' then
if missingHP < 40 and spell.target.name == player.name then
add_to_chat(123,'Full HP!')
cancel_spell()
return
elseif missingHP < 150 then
newWaltz = 'Curing Waltz'
waltzID = 190
elseif missingHP < 300 then
newWaltz = 'Curing Waltz II'
waltzID = 191
else
newWaltz = 'Curing Waltz III'
waltzID = 192
end
else
return
end
end
local waltzTPCost = {['Curing Waltz'] = 20, ['Curing Waltz II'] = 35, ['Curing Waltz III'] = 50, ['Curing Waltz IV'] = 65, ['Curing Waltz V'] = 80}
local tpCost = waltzTPCost[newWaltz]
local downgrade
if player.tp < tpCost and not buffactive.trance then
if player.tp < 20 then
add_to_chat(123, 'Insufficient TP ['..tostring(player.tp)..']. Cancelling.')
cancel_spell()
return
elseif player.tp < 35 then
newWaltz = 'Curing Waltz'
elseif player.tp < 50 then
newWaltz = 'Curing Waltz II'
elseif player.tp < 65 then
newWaltz = 'Curing Waltz III'
elseif player.tp < 80 then
newWaltz = 'Curing Waltz IV'
end
downgrade = 'Insufficient TP ['..tostring(player.tp)..']. Downgrading to '..newWaltz..'.'
end
if newWaltz ~= spell.english then
send_command('@input /ja "'..newWaltz..'" '..tostring(spell.target.raw))
if downgrade then
add_to_chat(158, downgrade)
end
cancel_spell()
return
end
if missingHP > 0 then
add_to_chat(158,'Trying to cure '..tostring(missingHP)..' HP using '..newWaltz..'.')
end
end
function find_player_in_alliance(name)
for i,v in ipairs(alliance) do
for k,p in ipairs(v) do
if p.name == name then
return p
end
end
end
end
function sub_job_change(newSubjob, oldSubjob)
select_default_macro_book()
end
function set_macro_page(set,book)
if not tonumber(set) then
add_to_chat(123,'Error setting macro page: Set is not a valid number ('..tostring(set)..').')
return
end
if set < 1 or set > 10 then
add_to_chat(123,'Error setting macro page: Macro set ('..tostring(set)..') must be between 1 and 10.')
return
end
if book then
if not tonumber(book) then
add_to_chat(123,'Error setting macro page: book is not a valid number ('..tostring(book)..').')
return
end
if book < 1 or book > 20 then
add_to_chat(123,'Error setting macro page: Macro book ('..tostring(book)..') must be between 1 and 20.')
return
end
send_command('@input /macro book '..tostring(book)..';wait .1;input /macro set '..tostring(set))
else
send_command('@input /macro set '..tostring(set))
end
end
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'WAR' then
set_macro_page(1, 12)
elseif player.sub_job == 'DNC' then
set_macro_page(3, 12)
elseif player.sub_job == 'DRK' then
set_macro_page(2, 12)
elseif player.sub_job == 'NIN' then
set_macro_page(5, 12)
else
set_macro_page(1, 12)
end
end
[I'm still in the process of editing it but all I've changed are the Indices and some gear]
By Crevox 2014-06-28 01:52:12
Beside all that, here are a couple more issues:
* Occasionally, when using a blood pact (or maybe even a spell), regardless of it's from a macro or the spell list, it does not fire. There is no error message in chat, I just have to do it again (sometimes 2-3 more times). Reloading gearswap seems to resolve this, albeit for a while. This only started happening when I began using this script, even before editing anything but the items.
* Elemental Siphon and Mana Cede sets do not work. This can be fixed by adding them as midcast sets.
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-06-28 02:06:15
Hm. I've had that problem (macro not firing) as well. However I have a cranky mouse and keyboard, and had generally put it off as hardware problems.
If commands really are being lost somehow (and they'd have to be lost somewhere deeper in the code stack than my job files), would need to look into what's happening there.
Did you jump immediately to my files when starting to use GearSwap, or did you use other GearSwap code before? If you used other GearSwap code, did this problem occur there as well?
For Siphon and Mana Cede, I'll check on it when I have time. Would have given you some quick things to check, but the debugging code hasn't been pushed to live yet.
Bahamut.Suppa
Server: Bahamut
Game: FFXI
Posts: 20
By Bahamut.Suppa 2014-06-28 02:25:15
* Occasionally, when using a blood pact (or maybe even a spell), regardless of it's from a macro or the spell list, it does not fire. There is no error message in chat, I just have to do it again (sometimes 2-3 more times). Reloading gearswap seems to resolve this, albeit for a while. This only started happening when I began using this script, even before editing anything but the items.
This has been happening to me occasionally, using Shock Squall.
I am still using spellcast so not sure if it is actually a gearswap issue
By Crevox 2014-06-28 02:30:02
Quote: Did you jump immediately to my files when starting to use GearSwap, or did you use other GearSwap code before? If you used other GearSwap code, did this problem occur there as well?
I've been using a self modified version of Byrth's summoner file for a long time before this and never had this issue.
By Crevox 2014-06-30 02:54:03
On another note, more and more the script(s) seems to be breaking. Sometimes it will just stop swapping altogether (elemental magic), or swap to midcast and then immediately swap back to idle (blood pact), without waiting for the cast to even finish.
I was casting Aero II/Stone on some mobs and realized my damage was low, only to realize the gear wasn't even swapping, yet it was for Cure. I reloaded Gearswap and then it suddenly works again just fine, no tweaks to the script. This has happened multiple times now. This is if I can manage to even get the spells/abilities to go off, cause they just won't work sometimes, consecutively.
The fact that it randomly just stops working means I probably am gonna have to go back to my old script. Mote's script does some great things, but it's also turning into more trouble than it's worth having to deal with these things, especially when I'm fighting Ouryu and it decides to just block my ability to use skills or stop gear swapping (thus my damage goes to nothing). It's not even because of my edits either, because I removed all the edits from the include and performed the exact changes recommended.
Server: Ragnarok
Game: FFXI
Posts: 13
By Ragnarok.Bloodkitten 2014-06-30 10:31:27
Hello,
so im completely new to playing FFXI on pc and figured i would used GS for my blu. after about 4 hours of figuring out all the things about how to just get it to start. ; ; I finally get it to go, so I stated editing a premade blu lua with my own gear and now that ive done that i cant get it to run. can someone take a glance at the lua and tell me what ive done to mess it up? Thanks in advance
http://pastebin.com/zpnwHcxn
VIP
Server: Odin
Game: FFXI
Posts: 9534
By Odin.Jassik 2014-06-30 10:41:46
Ragnarok.Bloodkitten said: »Hello,
so im completely new to playing FFXI on pc and figured i would used GS for my blu. after about 4 hours of figuring out all the things about how to just get it to start. ; ; I finally get it to go, so I stated editing a premade blu lua with my own gear and now that ive done that i cant get it to run. can someone take a glance at the lua and tell me what ive done to mess it up? Thanks in advance
http://pastebin.com/zpnwHcxn
Download Notepad++ if you haven't already, look at line 152. head="Uk'Uxkaj cap"
The ' is closing the statement for some reason, hopefully someone better with lua can explain how to fix that (I thought it would read it exactly if it was between quotations), but if you write all your gear that has an apostrophe in it like this "Uk\'uxkaj cap" it will not close it like that.
EDIT: scratch that, you're missing a " after Rajas ring in the set before that. Line 148
Quetzalcoatl.Orestes
Server: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2014-06-30 11:20:26
Ragnarok.Bloodkitten said: »Hello,
so im completely new to playing FFXI on pc and figured i would used GS for my blu. after about 4 hours of figuring out all the things about how to just get it to start. ; ; I finally get it to go, so I stated editing a premade blu lua with my own gear and now that ive done that i cant get it to run. can someone take a glance at the lua and tell me what ive done to mess it up? Thanks in advance
http://pastebin.com/zpnwHcxn
You are missing a comma after Moonshade Earring, in sets.Idle.Standard on line 14.
Also, as noted by Jassik you are missing a double quotation after Rajas Ring on line 148, in sets.BlueMagic.STRMND
I recommend you run your code through the lua interpreter from now on. Think of it like spell-check for code. If it finds an error, it will stop and give you the line number. You'll need to fix it, and run it through the interpreter again, and again until all errors are fixed. (the interpreter will return nothing)
The problem is, you have to download and install the lua interpreter, and then run it though the command prompt on Windows. This might be overly technical for some people, so I recommend the following site, which has an online lua interperter.
Paste your code on the left pane, and hit the play button. (Just make sure you paste raw code in, without line numbers from pastebin or github)
http://repl.it/languages/Lua
Server: Ragnarok
Game: FFXI
Posts: 13
By Ragnarok.Bloodkitten 2014-06-30 11:26:11
Thank you guys, ive made the revisions and im gonna reboot FFxi after my stanley parble finishes installing, ill let you know if that fixed my problems.
it did thank you very much for the infomation and ill be sure to use the lua runner in the future
Phoenix.Warusha
Server: Phoenix
Game: FFXI
Posts: 62
By Phoenix.Warusha 2014-07-03 09:39:51
I realized that obi isn't equipping for area weather effects or sch storm weather effects.
http://pastebin.com/uh1Lbg5q
Also; unless I missed something in my absence from the game and zodiac ring now sucks, there's no rules for day spells in this file either.
How can I modify precast gear based on buffs active? E.g. Addle, dark arts casting cure, subtle sorcery, caster's roll, etc?
I promise to help people out with gearswap once I figure it out on my own >.< I used to get a lot of people asking for my old spellcast file. So many things have changed with 80 more inventory spaces and the functionality of gearswap though!
By fractalvoid 2014-07-03 13:51:04
Just wanted to note that a few days ago doing delve, I somehow shot my Animikii Bullet while having my gearswap active and all that. The cancel command had worked previously in the same run and even given me the appropriate msg in the chatlog, but later on I ended up shooting it.
http://pastebin.com/h89kJgLk
By Miang 2014-07-03 14:28:54
Shouldn't player.equipment == "Animikii Bullet" be player.equipment.ammo == "Animikii Bullet" on line 280?
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.
|
|