|
PLD/BLU
Bahamut.Belkin
Serveur: Bahamut
Game: FFXI
Posts: 473
By Bahamut.Belkin 2021-05-24 15:19:26
Can you not have your lua check if the spell is ready to be cast and if not cancel out. no gear change from button smashing
also as far as i understand precast and midtcast are sent in the same package with the action so there is nothing that can lag from precast to midtcast. Any lag hitting one will hit the other
however due to button smashing and not checking for spell availaability will have you turn into you precast set in the midtcast phase quickly and then change to idle (still while casting from the first command)
TL:DR i dont believe it due to lag but gear change in midtcast from mashing button midtcast, that can be fixed by adjusting lua behavior
It's not a spell availability issue. It's an issue with the macro input simply not firing. If I do a quick-tab over to PLD in a laggy zone, F8 to target a mob, and Ctrl + 1 ONCE to Geist Wall, there is a chance it simply doesn't go. I just attribute that to lag of some kind, whether it be server lag or input lag or whatever else it could be. I don't have bad internet or a bad computer, it honestly just seems like a by-product of 5 boxing and having to run 30 FPS on them all.
So, when a macro has a habit of not firing when you push it, the option is to hit it 3-4 times rapid fire until you see the animation or something in chat log.
Does this not happen to anybody else or...? Are you all Single Button Push Master Race?
I dunno, if it works like you say it does, maybe I'll go dirk around with it some more. I know a few years back I was getting interrupted left and right without SIRD in precast and since then I never reverted back.
By DaneBlood 2021-05-24 16:07:49
It's not a spell availability issue. It's an issue with the macro input simply not firing. If I do a quick-tab over to PLD in a laggy zone, F8 to target a mob, and Ctrl + 1 ONCE to Geist Wall, there is a chance it simply doesn't go. I just attribute that to lag of some kind, whether it be server lag or input lag or whatever else it could be. I don't have bad internet or a bad computer, it honestly just seems like a by-product of 5 boxing and having to run 30 FPS on them all.
So, when a macro has a habit of not firing when you push it, the option is to hit it 3-4 times rapid fire until you see the animation or something in chat log.
Does this not happen to anybody else or...? Are you all Single Button Push Master Race?
I dunno, if it works like you say it does, maybe I'll go dirk around with it some more. I know a few years back I was getting interrupted left and right without SIRD in precast and since then I never reverted back.
I dont think you are getting what I'm saying.
I am saying there is no lag issue changing from precast to midt Cast so since midtcast comes in the same package as precast there is no time in between precast and midtcast where you can get hit. So you do not need SIRD in precast. its all a single point in time
However what you are doing is that you are sending command multiple time to the server due to lack of patience from input lag
something likes this
- you Hit button
- package with precast and midtcast is sent to server
- You are now in midcast and spell is currently casting (on the server)
- Your graphics issue is not showing you are casting
- You hit the button again
- Gaer swap picks this up and changes you to precast and the midtcast and back to idle because the spell cannot go off
- you are now still casting the spell from the first button smash but are doing so in idle gear from the second time you hit the button
- monster smacks you and you get interrupted cause you idle gear does not have SIRD
So again it has nothing to do with SIRD in your precast set but that you are changing gear in the midle of casting, and leaving you casting not your SIRD set.
You can try this out with a slow as spell
cast the slow *** spell and then hit the a command for another spell while checking you inventory. You will change while still casting the slow as spell.
Your suggestion of putting SIRD in precast will not resolve this issue
P.S.
I ran into this issue a lot cause I had all my hate spell stacked on the same macro (1 for single and one for multi targets). So when i hit one macro it would do the same as you hitting multiple macroes.
only one spell would go off but the gear would swap a tremendous amount of time and I would get interrupted.
[+]
Phoenix.Mikumaru
Serveur: Phoenix
Game: FFXI
Posts: 382
By Phoenix.Mikumaru 2021-05-24 16:17:17
In theory, you should only need to put it in midcast. In practice, lag happens, so put it in precast as well. As PLD, you can't really afford to get interrupted on these long *** casts because mobs get a stupidly timed hit in on you.
sets.precast['Blue Magic'] = {legs="Founder's Hose", --30% SIRD
ammo="Staunch Tathlum +1", -- 11% SIRD
body="Reverence surcoat +3",
back={ name="Rudianos's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','"Fast Cast"+10','Phys. Dmg. taken-10%',}},
hands="Regal Gauntlets", --10% SIRD
feet="Odyssean Greaves", --20% SIRD
neck="Knight's bead necklace +2",
waist="Audumbla sash", --10% SIRD
head="Souveran Schaller +1", --20% SIRD
ear1="Tuisto Earring",
ear2="Odnowa earring +1",
ring1="Moonlight Ring",
ring2="Moonlight Ring"} --10% from merits
The only variance in precast and midcast is fast cast cape changes to enmity cape and fast cast odyssean greaves changes to enmity odyssean greaves. Caps SIRD, 48% PDT, maintains 3200 HP. SIRD needs to be the precast set with no miscast attached. If you get hit while the precast set is on you will be interrupted.
Thanks for the post Belkin! - I was hoping someone might be able to post a full copy of their LUA to be used to hit the ground running [after editing for gear etc] Many thanks in advance. You need to attach SIRD to Precast otherwise you get interrupted. it has nothing to do with lag, its how things work. No, you don't.
I've never put SIRD gear in precast. And I've never been interrupted while using my SIRD sets unless I was moving, or got stunned, etc.
That is certainly Not how it works. Gearswap sends out the precast and midcast out in the same Packet. It's equip precast, start spell, equip midcast. And the server executes that in that order instantly. There is no gap there to be hit in precast gear.
In theory, you should only need to put it in midcast. In practice, lag happens, so put it in precast as well. As PLD, you can't really afford to get interrupted on these long *** casts because mobs get a stupidly timed hit in on you.
sets.precast['Blue Magic'] = {legs="Founder's Hose", --30% SIRD
ammo="Staunch Tathlum +1", -- 11% SIRD
body="Reverence surcoat +3",
back={ name="Rudianos's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','"Fast Cast"+10','Phys. Dmg. taken-10%',}},
hands="Regal Gauntlets", --10% SIRD
feet="Odyssean Greaves", --20% SIRD
neck="Knight's bead necklace +2",
waist="Audumbla sash", --10% SIRD
head="Souveran Schaller +1", --20% SIRD
ear1="Tuisto Earring",
ear2="Odnowa earring +1",
ring1="Moonlight Ring",
ring2="Moonlight Ring"} --10% from merits
The only variance in precast and midcast is fast cast cape changes to enmity cape and fast cast odyssean greaves changes to enmity odyssean greaves. Caps SIRD, 48% PDT, maintains 3200 HP. I have never seen this happen. Across Thousands of casts. Getting stuck in midcast gear? Sure. All the time. Loose an aftercast packet and you don't swap back to idle. But getting interrupted because I didn't put SIRD in precast? Never. And I have literally tens of thousands of samples for this in my logs from all the shield testing I did.
The only time I've ever seen a character get stuck with precast gear on while using gearswap, is when they spammed the spell macro before they were able to cast, or during midcast. Its totes how it works. You've been extremely lucky. If you get hit in the precast gear you will be interrupted.
Serveur: Ragnarok
Game: FFXI
Posts: 39
By Ragnarok.Ragingmonkey 2021-05-24 16:24:49
Putting SIRD in your precast is straight up useless, this has been tested. Midcast needs SIRD to avoid interrupt, precast does not. Anyone who has ever used a SIRD set and doesn't button mash a macro to hell knows this. Let's move on, that is not the point of this thread.
By DaneBlood 2021-05-24 16:25:51
Its totes how it works. You've been extremely lucky. If you get hit in the precast gear you will be interrupted.
except everyone working with how the game communicates with the serve says otherwise. You do no have you precast set up for a giving amount of time there is no time to get hit while you are in precast.
What you say happens can simply not "physically" happen per the communication from gearswap.
look at my explanation and you will know what issue you have from your button smashing.
[+]
Serveur: Alexander
Game: FFXI
Posts: 15
By Alexander.Jammingjamie 2021-05-24 23:16:19
I know what you're talking about with the macro not firing off. I hardly use CTRL+1 now. I'll use CTRL scroll left or right and hit enter. That will allow the macro to activate. OR Use a keybind instead. Windower will use a keybind of ^1 better than the game will use CTRL 1. Mages will experience the same thing with getting caught in their idle set while nuking/curing instead of their damage/cure potency too if you keep trying to cast while casting.
Phoenix.Mikumaru
Serveur: Phoenix
Game: FFXI
Posts: 382
By Phoenix.Mikumaru 2021-05-25 09:00:57
Its totes how it works. You've been extremely lucky. If you get hit in the precast gear you will be interrupted.
except everyone working with how the game communicates with the serve says otherwise. You do no have you precast set up for a giving amount of time there is no time to get hit while you are in precast.
What you say happens can simply not "physically" happen per the communication from gearswap.
look at my explanation and you will know what issue you have from your button smashing. Quite right
Thanks for the post Belkin! - I was hoping someone might be able to post a full copy of their LUA to be used to hit the ground running [after editing for gear etc] Many thanks in advance. While you may have figured out by now, many ppl on this forum would rather be right than answer the question you posted. Whether its from "button mashing" or supposed "packet loss" or w/e nonsense these wannabe know-it-alls wanna throw at you. in content that matters, like Dyna D, Omen, Odyssey, Unless SIRD is in your Precast, you'll risk being interrupted. Ochain wont save you all the time. At the end of the day, you'll really have to figure it out for yourself. Latency in some of these areas is jank at best. You'll find you're getting interrupted in 115% SIRD here and there. Is it Latency not showing you got stunned? Is it "packet loss"? Is it "button mashing"? Who knows. its a game that's 20 years old, made for the PS2, but we still play it and cant understand why its Jank AF on PC.
[+]
Ragnarok.Lowen
Serveur: Ragnarok
Game: FFXI
Posts: 316
By Ragnarok.Lowen 2021-05-25 09:18:05
I'm honestly dumbfounded anyone would try to argue with Martel about this.
Cerberus.Kaht
Serveur: Cerberus
Game: FFXI
Posts: 618
By Cerberus.Kaht 2021-05-25 12:03:00
Button mashing any macro just sounds like a recipe for your abilities going off in gear that you don't intend them to.
Serveur: Bahamut
Game: FFXI
Posts: 18
By Bahamut.Wizardstick 2021-05-25 12:07:45
Mikumaru does some what have a point. If you are in dyna with major lag and you press a macro and it doesn't go off for 3-4 seconds as it sometimes happen you'll end up pressing it several more times, not knowing if it's lag or it just didn't register.
He could have explained his reasoning in the first post instead of dragging it on though.
Serveur: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2021-05-25 12:59:08
I'm curious of how many of you use GearInfo and EquipViewer. I'm no expert in the mechanics of how gearswap sends packets, and I have no intent to pretend I do or debate about it beyond sharing my opinion in this post... but from a pure real-world 'logical' reasoning... there has to be a moment, even if only a fraction of a second, in which your character is wearing your precast gear. You can say they happen 'instantly' or 'simultaneously' but that doesn't realistically make sense. *I assume* there has to be 2 phases of gear being equipped for precast to be equipped and midcast to be equipped, in order for the entire system to work as intended.
Edit: Upon more thought, I believe maybe the misunderstanding is that pre-cast gear is never on when the spell is actually being cast, therefor can't effect the success rate of the spell going off? But again, just from a pure logic standpoint, that gear HAS to be on when the spell is started to work, right? In which case, the logic still applies, at some point, even if only for a fraction of a second, precast has to be on for the start of the spell. Which results in a fraction of a second in which you are casting in pre-cast gear.
I repeat this is real world logic, not coding logic, I could very well be wrong, but I don't understand how pre-cast gear can work if it's not the gear you're wearing the moment the spell starts to cast.
So on the .00001% chance you get hit in that .0001 of a second that the precast gear was on... without SIRD you can get interrupted.
Again, this is real world logic, not gaming or coding logic, so I don't know if it's true nor do I intend to dispute people who are significantly more knowledgeable about it than I am.
Having said all of that... the main gear mode I use on Pld (HP Balanced), does not have capped SIRD in the precast set. BUT... I have an alternate gear mode that is strictly for SIRD, which does have it in both the pre-cast and midcast. A single key stroke can fix that, or a simple copy/paste can apply it to both sets, for some fast cast sacrifice.
I will say, that I have been interrupted before when I didn't think it should be possible. I have zero proof that it occurred due to the lack of SIRD in precast, or lag, or me double tapping a macro, etc etc. Regardless, it happens so rarely, that I just don't really care.
I do want to help while I'm here.
1: If you multi-tap macros, it will force gear changes repeatedly.
If you have equip viewer, you can watch it with your own eyes. An easy way is be at <1000 tp, and hit your WS macro. You will see your WS gear pop in, even though you can't actually WS. The gear swap commands were sent regardless of whether the ability can successfully be used. So as someone mentioned, if you are in your midcast gear of a spell (because the macro already triggered) and you hit the macro again, re-equipping your precast gear, this can screw things up if they don't both have SIRD. I don't understand how that could trigger an idle set as they claimed, but I digress.
2: GearInfo will prevent getting stuck in the wrong sets. It updates (I think) every .5 seconds. (twice per second) and automatically forces the correct gear based on your status. Gear info is also the most accurate measurement of all haste-sources in the game for haste tier handling and gear swaps.
*If you have GearInfo, you can't just manually equip gear, as it will trigger an update every .5 seconds back to the correct items. So, you have to either turn it off, or have toggles for Warp rings, reraise gear, etc.
3: Ironically... if you ARE a Macro-Masher, that is 100% justification to PUT SIRD in your pre-cast set. That way, even while repeatedly resending the gear changes, you're guaranteed to be in SIRD whether it's pre-cast or mid cast gear or cycling back and forth as you re-submit the macro. I still don't understand how an idle set could ever be triggered in this scenario.
4: As this thread is actually for Pld/Blu and the question at hand is GearSwap: I am not a Career Pld by any means, so mine is likely less advanced or gear maximized, but it does have all of the SIRD, HPBAL, Warp, DT, Acc, weapon, and mana toggles included, as well as all of the BLU handling.
Everything will work without GearInfo, except, without haste detection, Dual Wielding won't be able to juggle your haste and DW gear, and will default to the sets.engaged.DW set I assume.
Code -- 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 variables that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.CP = M(false, "Capacity Points Mode")
state.Warp = M(false, "Warp Mode")
state.MP = M(false, "Mana Mode")
state.Weapon = M(false, "Weapon Lock")
state.Neck = M(false, "Neck Mode")
lockstyleset = 14
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job.
-------------------------------------------------------------------------------------------------------------------
-- Gear Modes
function user_setup()
state.OffenseMode:options('Normal', 'LowAcc', 'MidAcc', 'HighAcc')
state.HybridMode:options('Normal', 'HIGH', 'MID', 'LOW')
state.WeaponskillMode:options('Normal', 'Acc')
state.CastingMode:options('Normal', 'SIRD', 'HPBAL')
state.IdleMode:options('Normal', 'DT', 'Eva')
-- Allows the use of Ctrl + ~ and Alt + ~ for 2 more macros of your choice.
send_command('bind ^` input /ja "Cover" <stal>') --Ctrl'~'
send_command('bind !` input /ja "Divine Emblem" <me>') --Alt'~'
send_command('bind f9 gs c cycle OffenseMode') --F9
send_command('bind ^f9 gs c cycle WeaponSkillMode') --Ctrl'F9'
send_command('bind f10 gs c cycle HybridMode') --F10
send_command('bind f11 gs c cycle CastingMode') --F11
send_command('bind @c gs c toggle CP') --WindowKey'C'
send_command('bind @r gs c toggle Warp') --Windowkey'R'
send_command('bind @m gs c toggle MP') --Windowkey'M'
send_command('bind @w gs c toggle Weapon') --Windowkey'W'
send_command('bind @t gs c toggle Twilight') --Windowkey'T'
send_command('bind @n gs c toggle Neck') --Windowkey'N'
send_command('bind @i input /ja "Invincible" <me>') --Windowkey'I'
send_command('lua l gearinfo')
select_default_macro_book()
set_lockstyle()
Haste = 0
DW_needed = 0
DW = false
moving = false
update_combat_form()
determine_haste_group()
end
-- Erases the Key Binds above when you switch to another job.
function user_unload()
send_command('unbind ^`')
send_command('unbind !`')
send_command('unbind !-')
send_command('unbind ^=')
send_command('unbind f11')
send_command('unbind @c')
send_command('unbind @r')
send_command('unbind @m')
send_command('unbind @w')
send_command('unbind @t')
send_command('unbind @n')
send_command('gs enable all')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
------------------------------------------------------------------------------------------------
---------------------------------------- Precast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.Enmity = {
Main="Firangi", --8
Ammo="Sapience Orb", --2
Head="Loess Barbuta +1", --9~14
Neck="Moonlight Necklace", --15
Ear2="Friomisi Earring", --2
Ear1="Cryptic Earring", --4
Body="Souveran Cuirass +1", --20
Hands="Yorium Gauntlets", --12
Ring1="Apeile Ring", --5~9
Ring2="Apeile Ring +1", --5~9
back={ name="Rudianos's Mantle", augments={'Enmity+10','Spell interruption rate down-10%',}}, --10
Waist="Creed Baudrier", --5
Legs="Souveran Diechlings +1", --9
Feet="Eschite Greaves", --15
} --121~134
sets.precast.JA['Invincible'] = set_combine(sets.Enmity, {})
sets.precast.JA['Shield Bash'] = set_combine(sets.Enmity, {})
sets.precast.JA['Holy Circle'] = set_combine(sets.Enmity, {})
sets.precast.JA['Sentinel'] = set_combine(sets.Enmity, {})
sets.precast.JA['Cover'] = set_combine(sets.Enmity, {})
sets.precast.JA['Rampart'] = set_combine(sets.Enmity, {})
sets.precast.JA['Fealty'] = set_combine(sets.Enmity, {})
sets.precast.JA['Chivalry'] = set_combine(sets.Enmity, {})
sets.precast.JA['Divine Emblem'] = set_combine(sets.Enmity, {})
sets.precast.JA['Sepulcher'] = set_combine(sets.Enmity, {})
sets.precast.JA['Palisade'] = set_combine(sets.Enmity, {})
sets.precast.JA['Intervene'] = set_combine(sets.Enmity, {})
sets.precast.FC = {
Main="Malignance Sword", --8
Ammo="Impatiens", --2QM
Head="Carmine Mask +1", --14
Neck="Orunmila's Torque", --5
Ear1="Loquacious Earring", --2
Ear2="Etiolation Earring", --1
Body="Reverence Surcoat +2", --5 -- +3=10
Hands="Leyline Gloves", --8
Ring1="Veneficium Ring", --1QM
Legs="Arjuna Breeches", --4
Feet="Odyssean Greaves", --5 + AUG
Waist="Creed Baudrier", --40HP
back={ name="Rudianos's Mantle", augments={'"Fast Cast"+10',}}, --10FC
Ring2="Eihwaz Ring", --70HP
} --68FC 3QM
sets.precast.Cure = set_combine(sets.precast.FC, {
Body="Jumalik Mail", --10
Neck="Diemer Gorget", --4
Ear2="Mendicant's Earring", --5
})
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {})
------------------------------------------------------------------------------------------------
-------------------------------------- Sub Job Specific ----------------------------------------
------------------------------------------------------------------------------------------------
--- Warrior
sets.precast.JA['Provoke'] = sets.Enmity
--- Dancer
sets.precast.Waltz = {}
sets.precast.WaltzSelf = set_combine(sets.precast.Waltz, {ring1="Asklepian Ring"})
--- Rune Fencer
------------------------------------------------------------------------------------------------
------------------------------------- Weapon Skill Sets ----------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.WS = {
ammo="Aurgelmir Orb +1",
Head="Sakpata's Helm", --7
Body="Sakpata's Breastplate", --10
Hands="Sakpata's Gauntlets", --8
Legs="Sakpata's Cuisses", --9
feet="Sulevia's Leggings +2",
neck="Fotia Gorget",
waist="Fotia Belt",
ear1="Moonshade Earring",
ear2="Thrud Earring",
Ring1="Epaminondas's Ring",
Ring2="Hetairoi Ring",
back={ name="Rudianos's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.precast.WS['Atonement'] = {}
sets.precast.WS['Requiescat'] = {}
sets.precast.WS['Chant du Cygne'] = {}
sets.precast.WS['Sanguine Blade'] = {}
sets.precast.WS['Savage Blade'] = {
ammo="Aurgelmir Orb +1",
Head="Sakpata's Helm", --7
Body="Sakpata's Breastplate", --10
Hands="Sakpata's Gauntlets", --8
Legs="Sakpata's Cuisses", --9
feet="Sulevia's Leggings +2",
neck="Lacono Necklace +1",
waist="Fotia Belt",
ear1="Moonshade Earring",
ear2="Thrud Earring",
Ring1="Epaminondas's Ring",
Ring2="Hetairoi Ring",
back={ name="Rudianos's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.precast.WS['Aeolian Edge'] = {
ammo="Pemphredo Tathlum",
head="Nyame Helm", --30
body="Nyame Mail", --30
hands="Nyame Gauntlets", --30
legs="Nyame Flanchard", --30
feet="Nyame Sollerets", --30
neck="Sanctity Necklace",
waist="Eschan Stone",
ear1="Friomisi Earring",
ear2="Hecate's Earring",
left_ring="Acumen Ring",
right_ring="Ilabrat Ring",
back={ name="Rudianos's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
--------------------------------------- Accuracy Mode ------------------------------------------
sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
sets.precast.WS['Atonement'].Acc = set_combine(sets.precast.WS['Atonement'], {})
sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS['Requiescat'], {})
sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {})
sets.precast.WS['Chant du Cygne'].Acc = set_combine(sets.precast.WS['Chant du Cygne'], {})
sets.precast.WS['Sanguine Blade'].Acc = set_combine(sets.precast.WS['Sanguine Blade'], {})
------------------------------------------------------------------------------------------------
---------------------------------------- Midcast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.midcast.FastRecast = sets.precast.FC
sets.midcast.Utsusemi = sets.Enmity
sets.midcast.Flash = sets.Enmity
sets.midcast['Enhancing Magic'] = sets.Enmity
sets.midcast.Reprisal = sets.Enmity
sets.midcast.Crusade = sets.Enmity
sets.midcast.Enlight = sets.Enmity
sets.midcast['Blue Magic'] = sets.Enmity
sets.midcast.Cure = {
Ammo="Impatiens", --10SIRD
Neck="Phalaina Locket", --4
Legs="Souveran Diechlings +1", --0/23
Head="Souveran Schaller +1", --0/15 20SIRD
Hands="Macabre Gauntlets +1",
Ear1="Nourishing Earring", --6
Ear2="Mendicant's Earring", --5
Body="Jumalik Mail", --15
Feet="Odyssean Greaves", --7 --20SIRD
} --60SIRD, 10Merits, 37/30CurePot
sets.midcast.Phalanx = {
Hands="Souveran Handschuhs +1", --5
Feet="Souveran Schuhs +1", --5
Back="Weard Mantle", --5
Legs="Sakpata's Cuisses", --5
} --20 Need to DarkMatter Ody Head and Body!
sets.midcast.Protect = {ring1="Sheltered Ring"}
sets.midcast.Shell = {ring1="Sheltered Ring"}
------------------------------------------------------------------------------------------------
----------------------------------------- SIRD Sets --------------------------------------------
------------------------------------------------------------------------------------------------
sets.midcast.SIRD = {--Merits 10SIRD
Ammo="Impatiens", --10SIRD
Head="Souveran Schaller +1", --20SIRD
Neck="Moonlight Necklace", --15SIRD
Waist="Rumination Sash", --10SIRD
Legs="Carmine Cuisses +1", --20SIRD
Feet="Odyssean Greaves", --20SIRD
back={ name="Rudianos's Mantle", augments={'Enmity+10','Spell interruption rate down-10%',}}, --10SIRD
} --115SIRD
sets.precast.FC.SIRD = {--Merits 10SIRD
Ammo="Impatiens", --10SIRD
Head="Souveran Schaller +1", --20SIRD
Neck="Moonlight Necklace", --15SIRD
Waist="Rumination Sash", --10SIRD
Legs="Carmine Cuisses +1", --20SIRD
Feet="Odyssean Greaves", --20SIRD
back={ name="Rudianos's Mantle", augments={'Enmity+10','Spell interruption rate down-10%',}}, --10SIRD
} --115SIRD
sets.midcast.Flash.SIRD = {--Merits 10SIRD
Main="Firangi", --8
Ammo="Impatiens", --10SIRD Neg2Enm
Head="Souveran Schaller +1", --20SIRD Neg9~14Enm
Neck="Moonlight Necklace", --15SIRD
Ear1="Odnowa Earring",
Ear2="Odnowa Earring +1",
Body="Souveran Cuirass +1", --20
Hands="Yorium Gauntlets", --12
Ring1="Apeile Ring", --5~9
Ring2="Apeile Ring +1", --5~9
back={ name="Rudianos's Mantle", augments={'Enmity+10','Spell interruption rate down-10%',}}, --10SIRD
Waist="Creed Baudrier", --5
Legs="Carmine Cuisses +1", --20SIRD Neg9Enm
Feet="Odyssean Greaves", --20SIRD Neg15Enm
Sub="Ajax +1",
} --80~88, 105SIRD
sets.midcast.Cure.SIRD = set_combine(sets.midcast.Cure, sets.midcast.SIRD)
sets.midcast.Phalanx.SIRD = set_combine(sets.midcast.Phalanx, sets.midcast.SIRD)
sets.midcast.Reprisal.SIRD = set_combine(sets.midcast.Reprisal, sets.midcast.SIRD)
sets.midcast.Crusade.SIRD = set_combine(sets.midcast.Crusade, sets.midcast.SIRD)
sets.midcast.Utsusemi.SIRD = set_combine(sets.midcast.Utsusemi, sets.midcast.SIRD)
sets.midcast['Blue Magic'].SIRD = set_combine(sets.midcast['Blue Magic'], sets.midcast.SIRD)
------------------------------------------------------------------------------------------------
---------------------------------------- HPBAL Sets --------------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.FC.HPBAL = { --10SIRD Merits, 10DT Set Bonus
Main="Malignance Sword", --8FC
Ammo="Sapience Orb", --2FC, 0SIRD, 0DT
Head="Carmine Mask +1", --14FC
Neck="Orunmila's Torque", --5FC, 0SIRD, 0DT
Ear1="Odnowa Earring",
Ear2="Odnowa Earring +1",
Body="Reverence Surcoat +2", --5FC, 0SIRD, 10DT
Hands="Leyline Gloves", --8FC
Ring1="Moonlight Ring", --100HP
Ring2="Eihwaz Ring", --70HP
Back="Moonbeam Cape", --0FC, 0SIRD, 5DT --Rudios??
Waist="Creed Baudrier", --40HP
Legs="Souveran Diechlings +1", --0FC, 0SIRD, 4DT
Feet="Souveran Schuhs +1", --0FC, 0SIRD, 5DT
} --42FC, 10SIRD, 38DT
sets.midcast.HPBAL = { --10SIRD Merits --8DT Set Bonus
Ammo="Impatiens", --0FC, 10SIRD, 0DT
Head="Souveran Schaller +1", --0FC, 20SIRD, 0DT
Neck="Moonlight Necklace", --0FC, 15SIRD, 0DT
Ear1="Odnowa Earring",
Ear2="Knightly Earring", --9SIRD, -100HP
Body="Reverence Surcoat +2", --0FC, 0SIRD, 10DT, 8Enm
Hands="Souveran Handschuhs +1", --0FC, 0SIRD, 4DT
Ring1="",
Ring2="",
Back="Moonbeam Cape", --0FC, 0SIRD, 5DT
Waist="Rumination Sash", --0FC, 10SIRD, 0DT, -40HP
Legs="Founder's Hose", --0FC, 30SIRD, 0DT, -108HP
Feet="Souveran Schuhs +1", --0FC, 0SIRD, 5DT
} --0FC, 104SIRD, 32DT, 62~70Enm
sets.midcast.Flash.HPBAL = {
Main="Firangi", --8
Ammo="Sapience Orb", --2
Head="Loess Barbuta +1", --9~14
Neck="Moonlight Necklace", --15
Ear1="Odnowa Earring",
Ear2="Odnowa Earring +1",
Body="Souveran Cuirass +1", --20
Hands="Yorium Gauntlets", --12
Ring1="Apeile Ring", --5~9
Ring2="Apeile Ring +1", --5~9
back={ name="Rudianos's Mantle", augments={'Enmity+10','Spell interruption rate down-10%',}}, --10
Waist="Creed Baudrier", --5
Legs="Souveran Diechlings +1", --9
Feet="Eschite Greaves", --15
Sub="Ajax +1", --11
} --115~128
sets.midcast.Shell.HPBAL = set_combine(sets.midcast, sets.midcast.HPBAL)
sets.midcast.Protect.HPBAL = set_combine(sets.midcast, sets.midcast.HPBAL)
sets.midcast.Cure.HPBAL = set_combine(sets.midcast.Cure, sets.midcast.HPBAL)
sets.midcast.Phalanx.HPBAL = set_combine(sets.midcast.Phalanx, sets.midcast.HPBAL)
sets.midcast.Reprisal.HPBAL = set_combine(sets.midcast.Reprisal, sets.midcast.HPBAL)
sets.midcast.Crusade.HPBAL = set_combine(sets.midcast.Crusade, sets.midcast.HPBAL)
sets.midcast.Utsusemi.HPBAL = set_combine(sets.midcast.Utsusemi, sets.midcast.HPBAL)
sets.midcast['Blue Magic'].HPBAL = set_combine(sets.midcast['Blue Magic'], sets.midcast.HPBAL)
sets.precast.WS.HPBAL = {}
------------------------------------------------------------------------------------------------
----------------------------------------- Idle Sets --------------------------------------------
------------------------------------------------------------------------------------------------
sets.idle = {
Ammo="Homiliary",
Head="Souveran Schaller +1",
Neck="Loricate Torque +1",
ear1="Odnowa Earring",
ear2="Odnowa Earring +1",
Body="Souveran Cuirass +1",
Hands="Souveran Handschuhs +1",
Ring1="Defending Ring",
Ring2="Vocane Ring",
Back="Moonbeam Cape",
Waist="Flume Belt +1",
Legs="Carmine Cuisses +1",
Feet="Souveran Schuhs +1",
}
sets.idle.DT = {Legs="Souveran Diechlings +1"}
sets.idle.Eva = {
head="Nyame Helm", --30
body="Nyame Mail", --30
hands="Nyame Gauntlets", --30
legs="Nyame Flanchard", --30
feet="Nyame Sollerets", --30
}
sets.idle.Town = {
Ammo="Homiliary",
Head="Souveran Schaller +1",
Neck="Loricate Torque +1",
ear1="Odnowa Earring",
ear2="Odnowa Earring +1",
Body="Souveran Cuirass +1",
Hands="Souveran Handschuhs +1",
Ring1="Defending Ring",
Ring2="Vocane Ring",
Back="Moonbeam Cape",
Waist="Flume Belt +1",
Legs="Carmine Cuisses +1",
Feet="Souveran Schuhs +1",
}
------------------------------------------------------------------------------------------------
---------------------------------------- Engaged Sets ------------------------------------------
------------------------------------------------------------------------------------------------
-- This is a Set that would only be used when you are NOT Dual Wielding.
-- There are no haste parameters set for this build, because you wouldn't be juggling DW gear, you would always use the same gear, other than Damage Taken and Accuracy sets which ARE included below.
sets.engaged = {
ammo="Aurgelmir Orb +1",
Head="Sakpata's Helm", --7
Body="Sakpata's Breastplate", --10
Hands="Sakpata's Gauntlets", --8
Legs="Sakpata's Cuisses", --9
Feet="Sakpata's Leggings", --6
neck="Vim Torque +1",
waist="Sailfi Belt +1",
ear1="Cessance Earring",
ear2="Brutal Earring",
Ring1="Petrov Ring",
Ring2="Hetairoi Ring",
back={ name="Rudianos's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10',}},
}
------------------------------------------------------------------------------------------------
-------------------------------------- Dual Wield Sets -----------------------------------------
------------------------------------------------------------------------------------------------
-- * NIN Sub Native DW Trait: 25% DW
-- * DNC Sub Native DW Trait: 15% DW
-- No Magic Haste (??% DW to cap)
sets.engaged.DW = {
} -- ??% ??Acc
-- 15% Magic Haste (??% DW to cap)
sets.engaged.DW.LowHaste = {
} -- ??% ??Acc
-- 30% Magic Haste (??% DW to cap)
sets.engaged.DW.MidHaste = {
} -- ??% ??Acc
-- 40% Magic Haste (??% DW to cap)
sets.engaged.DW.HighHaste = {
} -- ??% ??Acc
-- 45% Magic Haste (??% DW to cap)
sets.engaged.DW.MaxHaste = {
} -- ??% ??Acc
------------------------------------------------------------------------------------------------
--------------------------------------- Accuracy Sets ------------------------------------------
------------------------------------------------------------------------------------------------
-- Define three tiers of Accuracy. These sets are cycled with the F9 Button to increase accuracy in stages as desired.
sets.engaged.Acc1 = {Ammo="Amar Cluster",Neck="Decimus Torque",Waist="Eschan Stone"} --1118
sets.engaged.Acc2 = {} --1151
sets.engaged.Acc3 = {} --1203
-- Base Shield
sets.engaged.LowAcc = set_combine(sets.engaged, sets.engaged.Acc1)
sets.engaged.MidAcc = set_combine(sets.engaged, sets.engaged.Acc2)
sets.engaged.HighAcc = set_combine(sets.engaged, sets.engaged.Acc3)
-- Base DW
sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, sets.engaged.Acc1)
sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW, sets.engaged.Acc2)
sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW, sets.engaged.Acc3)
-- LowHaste DW
sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc3)
-- MidHaste DW
sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc3)
-- HighHaste DW
sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc3)
-- HighHaste DW
sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.LowAcc)
sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.MidAcc)
sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.HighAcc)
------------------------------------------------------------------------------------------------
---------------------------------------- Hybrid Sets -------------------------------------------
------------------------------------------------------------------------------------------------
-- Define three tiers of Defense Taken. These sets are cycled with the F10 Button.
sets.engaged.DT1 = { -- 48%
ammo="Aurgelmir Orb +1",
Head="Sakpata's Helm", --7
Body="Sakpata's Breastplate", --10
Hands="Sakpata's Gauntlets", --8
Legs="Sakpata's Cuisses", --9
Feet="Sakpata's Leggings", --6
neck="Vim Torque +1",
waist="Sailfi Belt +1",
ear1="Telos Earring",
ear2="Brutal Earring",
Ring1="Petrov Ring",
Ring2="Hetairoi Ring",
back={ name="Rudianos's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10',}},
} --40
sets.engaged.DT2 = {
Ammo="Aurgelmir Orb +1",
Neck="Asperity Necklace",
ear1="Telos Earring",
ear2="Brutal Earring",
Ring1="Defending Ring", --10
Ring2="Hetairoi Ring",
back={ name="Rudianos's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10',}},
Waist="Sailfi Belt +1",
Head="Sakpata's Helm", --7
Body="Sakpata's Breastplate", --10
Hands="Sakpata's Gauntlets", --8
Legs="Sakpata's Cuisses", --9
Feet="Sakpata's Leggings", --6
} --50DT
sets.engaged.DT3 = { --10 Set Bonus
Ammo="Amar Cluster",
Head="Souveran Schaller +1",
Neck="Decimus Torque",
Ear1="Odnowa Earring",
Ear2="Odnowa Earring +1",
Body="Souveran Cuirass +1", --10DT
Hands="Souveran Handschuhs +1", --4DT
Ring1="Defending Ring", --10DT
Ring2="Vocane Ring", --7DT Moonlight?
back={ name="Rudianos's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10',}},
Waist="Sarissaphoroi Belt",
Legs="Souveran Diechlings +1", --4DT
Feet="Souveran Schuhs +1", --5DT
} --50DT
-- Shield Base
sets.engaged.LOW = set_combine(sets.engaged, sets.engaged.DT1)
sets.engaged.LowAcc.LOW = set_combine(sets.engaged.LowAcc, sets.engaged.DT1)
sets.engaged.MidAcc.LOW = set_combine(sets.engaged.MidAcc, sets.engaged.DT1)
sets.engaged.HighAcc.LOW = set_combine(sets.engaged.HighAcc, sets.engaged.DT1)
sets.engaged.MID = set_combine(sets.engaged, sets.engaged.DT2)
sets.engaged.LowAcc.MID = set_combine(sets.engaged.LowAcc, sets.engaged.DT2)
sets.engaged.MidAcc.MID = set_combine(sets.engaged.MidAcc, sets.engaged.DT2)
sets.engaged.HighAcc.MID = set_combine(sets.engaged.HighAcc, sets.engaged.DT2)
sets.engaged.HIGH = set_combine(sets.engaged, sets.engaged.DT3)
sets.engaged.LowAcc.HIGH = set_combine(sets.engaged.LowAcc, sets.engaged.DT3)
sets.engaged.MidAcc.HIGH = set_combine(sets.engaged.MidAcc, sets.engaged.DT3)
sets.engaged.HighAcc.HIGH = set_combine(sets.engaged.HighAcc, sets.engaged.DT3)
-- No Haste DW
sets.engaged.DW.LOW = set_combine(sets.engaged.DW, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT1)
sets.engaged.DW.MID = set_combine(sets.engaged.DW, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT2)
sets.engaged.DW.HIGH = set_combine(sets.engaged.DW, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT3)
-- Low Haste DW
sets.engaged.DW.LOW.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.MID.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT3)
-- Mid Haste
sets.engaged.DW.LOW.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.MID.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT3)
-- High Haste
sets.engaged.DW.LOW.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.MID.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT3)
-- Max Haste
sets.engaged.DW.LOW.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.MID.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT3)
------------------------------------------------------------------------------------------------
---------------------------------------- Special Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.buff.Doom = {}
sets.Warp = {ring1="Dim. Ring (Holla)",ring2="Warp Ring"}
sets.CP = {back="Mecisto. Mantle"}
sets.MP = {back="Rudianos's Mantle",Ear1="Ethereal Earring",Waist="Flume Belt +1",Ammo="Homiliary",}
sets.Weapon = {}
sets.Neck = {Neck=""} --Locks Dynamis Neck for Rank Point Farming
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
if spellMap == 'Utsusemi' then
if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
cancel_spell()
add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
eventArgs.handled = true
return
elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
end
end
-- Used to overwrite Moonshade Earring if TP is more than 2750.
if spell.type == 'WeaponSkill' then
if player.tp > 2750 then
equip({ear2 = "Telos Earring"})
end
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type=='Waltz' and spell.target.type == 'SELF' then
equip(sets.precast.WaltzSelf)
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
function job_buff_change(buff,gain)
if buff == "doom" then
if gain then
equip(sets.buff.Doom)
send_command('@input /echo Doomed.')
disable()
else
enable()
handle_equipping_gear(player.status)
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
function job_handle_equipping_gear(playerStatus, eventArgs)
update_combat_form()
determine_haste_group()
end
function job_update(cmdParams, eventArgs)
handle_equipping_gear(player.status)
end
function update_combat_form()
if DW == true then
state.CombatForm:set('DW')
elseif DW == false then
state.CombatForm:reset()
end
end
function customize_idle_set(idleSet)
if state.CP.current == 'on' then
equip(sets.CP)
disable('back')
else
enable('back')
end
if state.Warp.current == 'on' then
equip(sets.Warp)
disable('ring1')
disable('ring2')
else
enable('ring1')
enable('ring2')
end
if state.MP.current == 'on' then
equip(sets.MP)
disable('Waist')
disable('Ear1')
disable('back')
else
enable('Waist')
enable('Ear1')
enable('back')
end
if state.Weapon.current == 'on' then
disable('Main')
disable('Sub')
else
enable('Main')
enable('Sub')
end
if state.Neck.current == 'on' then
equip(sets.Neck)
disable('Neck')
else
enable('Neck')
end
return idleSet
end
function customize_melee_set(meleeSet)
if state.CP.current == 'on' then
equip(sets.CP)
disable('back')
else
enable('back')
end
if state.Warp.current == 'on' then
equip(sets.Warp)
disable('ring1')
disable('ring2')
else
enable('ring1')
enable('ring2')
end
if state.MP.current == 'on' then
equip(sets.MP)
disable('Waist')
disable('Ear1')
disable('back')
else
enable('Waist')
enable('Ear1')
enable('back')
end
if state.Weapon.current == 'on' then
disable('Main')
else
enable('Main')
end
if state.Neck.current == 'on' then
equip(sets.Neck)
disable('Neck')
else
enable('Neck')
end
return meleeSet
end
-- Function to display the current relevant user state when doing an update.
-- Set eventArgs.handled to 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 then
msg = msg .. '[ Kiting Mode: ON ]'
end
msg = msg .. ' ]'
add_to_chat(060, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- User self-commands.
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function determine_haste_group()
classes.CustomMeleeGroups:clear()
if DW == true then
if DW_needed <= 1 then
classes.CustomMeleeGroups:append('MaxHaste')
elseif DW_needed > 1 and DW_needed <= 12 then
classes.CustomMeleeGroups:append('HighHaste')
elseif DW_needed > 12 and DW_needed <= 21 then
classes.CustomMeleeGroups:append('MidHaste')
elseif DW_needed > 21 and DW_needed <= 39 then
classes.CustomMeleeGroups:append('LowHaste')
elseif DW_needed > 39 then
classes.CustomMeleeGroups:append('')
end
end
end
function job_self_command(cmdParams, eventArgs)
gearinfo(cmdParams, eventArgs)
end
function gearinfo(cmdParams, eventArgs)
if cmdParams[1] == 'gearinfo' then
if type(tonumber(cmdParams[2])) == 'number' then
if tonumber(cmdParams[2]) ~= DW_needed then
DW_needed = tonumber(cmdParams[2])
DW = true
end
elseif type(cmdParams[2]) == 'string' then
if cmdParams[2] == 'false' then
DW_needed = 0
DW = false
end
end
if type(tonumber(cmdParams[3])) == 'number' then
if tonumber(cmdParams[3]) ~= Haste then
Haste = tonumber(cmdParams[3])
end
end
if type(cmdParams[4]) == 'string' then
if cmdParams[4] == 'true' then
moving = true
elseif cmdParams[4] == 'false' then
moving = false
end
end
if not midaction() then
job_update()
end
end
end
-- Automatically loads a Macro Set by: (Pallet,Book)
function select_default_macro_book()
if player.sub_job == 'BLU' then
set_macro_page(1, 2)
elseif player.sub_job == 'RUN' then
set_macro_page(2, 2)
elseif player.sub_job == 'WAR' then
set_macro_page(3, 2)
elseif player.sub_job == 'DNC' then
set_macro_page(9, 2)
elseif player.sub_job == 'NIN' then
set_macro_page(10, 2)
else
set_macro_page(1, 2)
end
end
function set_lockstyle()
send_command('wait 2; input /lockstyleset ' .. lockstyleset)
end
By DaneBlood 2021-05-25 14:19:31
I'm curious of how many of you use GearInfo and EquipViewer. I'm no expert in the mechanics of how gearswap sends packets, and I have no intent to pretend I do or debate about it beyond sharing my opinion in this post..
the problem is that you think the game has infininte time resolution like the real world. It does not.
The concept here is not far from simple geometry from idle school it just applied to temporal dimension rather than a spatial
a point has no volume or length. aka a point in time does not have a length of time where something can happens.
In this situation a point in time is when the software/cpu generate an action and when other things can do an action.
Besides for multithreadong on the cpu nothing happen as the same time it all just a serious of event happening very fast after each other.
In real world any and all action are running in its own time "lines" as all information in real world is both data and processing power. this is not the case in a simulated world.
the data is what we send to the server and the server calculated. the processing power is from the cpu. so the underlining Time does not work the entire smae way on a program that it does in real world. but we can get pretty close for normal people to not see the difference.
Here is how you think it works ( like in the real world)
but here is how it works in the computers
CPU
OK let me check ytthis palyers action
* you equip this set OK
* you cat this spell. ok let me calculate you casting speeds
* starting the spells
* OK you are going to this midtcast set now
Now let me check on this monster near you
* ok it swings. let me calculate if it hits
* ok it hits let me calculate if it interrupter . Wow 106% SIRD no way
the chuck of data the that is worked with in a giving time slot or rather point in time, the change to precast and spellcasting and midtcast are all done "At the same time" or rather in the same point in time. There is simply not time where the monster swings at you you are in precast set.
Thats why instant cast also works with gearswap even though the spell goes of :instantly" since the swap already happens at the same time point
TL:DR Dont think real world physics applies in a game
1: If you multi-tap macros, it will force gear changes repeatedly.
If you have equip viewer, you can watch it with your own eyes. An easy way is be at <1000 tp, and hit your WS macro. You will see your WS gear pop in, even though you can't actually WS. The gear swap commands were sent regardless of whether the ability can successfully be used. So as someone mentioned, if you are in your midcast gear of a spell (because the macro already triggered) and you hit the macro again, re-equipping your precast gear, this can screw things up if they don't both have SIRD. I don't understand how that could trigger an idle set as they claimed, but I digress.
Agreed here
But let me explain with the idle set as well.
again we have to look at how this
You activate a action in the game
Gearswap picks this up and hold this action for just a nano second
it pads the command to thoe the action with you precast and midtcast gear and then send it off to the server
Once gearswap can see this is completed it switches you to idle set
Those are seperate actions in geraswap
button smash 1 - sends preacst/spell action/midtcast to server
bit of delay
Button smash 2 - sends preacst/spell action/midtcast to server
Button smash 2 - the second call to the spell is not being executed. Let got back to idle set since this spell is technocally "over"
more time goes by whiel you are in idle set
Spell goes off
Gear swap equips idle sets again
The 2nd button smash actiosn from gearswap are not aware of what is going on from the first button smash it in computing purpose 2 seperate things going on. but the 2nd button smash can never do its action so it equips back to idle set just like it would do with any other action you try to do but are unable to do
button smash 2 gearswap running code is unaware a current spell is going on
[+]
Ragnarok.Lowen
Serveur: Ragnarok
Game: FFXI
Posts: 316
By Ragnarok.Lowen 2021-05-25 14:21:16
but from a pure real-world 'logical' reasoning... there has to be a moment, even if only a fraction of a second, in which your character is wearing your precast gear. You can say they happen 'instantly' or 'simultaneously' but that doesn't realistically make sense.
"Precast" (the gear you have on when you begin casting the spell) and and "midcast" (the gear you have on *after* you start casting) are sent in the same packet. It is a functionally instantaneous swap, which is why you can actually use Quick Magic gear in your precast sets without gimping your spell potencies, and also why it is impossible to be interrupted because of your precast gear (macro mashing aside, I guess).
By DaneBlood 2021-05-25 14:32:35
This last part is really not hard to test ( im really wodnering ppl take longer time trying to refute something instead of quickly testing it to set it is correct)
- Disabled all FastCast gear in .lua
- cast teleport-holla
- see it is currently is in teleport midtcast gear
- Quickly try to Cast barwatera
- see it switched and goes back to idle gear set before teleport is done
replace teleport with whatever spell you want SIRD on and its obvious how button smashing removing SIRD is due to AFTER CAST and not PRECAST
Takes 3 mins to do. Way faster than all the time people have been rambling about wierd home brew theories
TL:DR just test it, and its obvious
Serveur: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2021-05-25 15:53:49
"Precast" (the gear you have on when you begin casting the spell) and and "midcast" (the gear you have on *after* you start casting) are sent in the same packet. It is a functionally instantaneous swap, which is why you can actually use Quick Magic gear in your precast sets without gimping your spell potencies, and also why it is impossible to be interrupted because of your precast gear (macro mashing aside, I guess).
It can't be both. Either it's instant and in the same packet (in which case macro mashing wouldn't effect it, because you're claiming the game never registers that precast gear is on) or it's not instant and the game does register that it's on, and therefor that split second can be susceptible to being interrupted.
*See Below*
TL:DR just test it, and its obvious
I erased my entire lua and left only 2 gear sets in.
PreCast (0 SIRD except for merits, and full DT gear)
MidCast (115% SIRD)
There is no idle set to even account for.
First I made sure it worked, and verified the gearswaps.
Edit: Lua in case I need it again. Code -- 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 variables that are user-independent. state.Buff vars initialized here will automatically be tracked.
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job.
-------------------------------------------------------------------------------------------------------------------
-- Define sets and vars used by this job file.
function init_gear_sets()
------------------------------------------------------------------------------------------------
---------------------------------------- Precast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.FC = {
Ammo="Homiliary",
Head="Hjarrandi Helm",
Neck="Loricate Torque +1",
ear1="Odnowa Earring",
ear2="Odnowa Earring +1",
Body="Souveran Cuirass +1",
Hands="Souveran Handschuhs +1",
Ring1="Defending Ring",
Ring2="Vocane Ring",
Back="Moonbeam Cape",
Waist="Flume Belt +1",
Legs="Souveran Diechlings +1",
Feet="Souveran Schuhs +1",
} --68FC 3QM
------------------------------------------------------------------------------------------------
----------------------------------------- SIRD Sets --------------------------------------------
------------------------------------------------------------------------------------------------
sets.midcast = {--Merits 10SIRD
Ammo="Impatiens", --10SIRD
Head="Souveran Schaller +1", --20SIRD
Neck="Moonlight Necklace", --15SIRD
Waist="Rumination Sash", --10SIRD
Legs="Carmine Cuisses +1", --20SIRD
Feet="Odyssean Greaves", --20SIRD
back={ name="Rudianos's Mantle", augments={'Enmity+10','Spell interruption rate down-10%',}}, --10SIRD
} --115SIRD
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
function job_handle_equipping_gear(playerStatus, eventArgs)
update_combat_form()
determine_haste_group()
end
function job_update(cmdParams, eventArgs)
handle_equipping_gear(player.status)
end
function update_combat_form()
if DW == true then
state.CombatForm:set('DW')
elseif DW == false then
state.CombatForm:reset()
end
end
-- Function to display the current relevant user state when doing an update.
-- Set eventArgs.handled to 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 then
msg = msg .. '[ Kiting Mode: ON ]'
end
msg = msg .. ' ]'
add_to_chat(060, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- User self-commands.
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function determine_haste_group()
classes.CustomMeleeGroups:clear()
if DW == true then
if DW_needed <= 1 then
classes.CustomMeleeGroups:append('MaxHaste')
elseif DW_needed > 1 and DW_needed <= 12 then
classes.CustomMeleeGroups:append('HighHaste')
elseif DW_needed > 12 and DW_needed <= 21 then
classes.CustomMeleeGroups:append('MidHaste')
elseif DW_needed > 21 and DW_needed <= 39 then
classes.CustomMeleeGroups:append('LowHaste')
elseif DW_needed > 39 then
classes.CustomMeleeGroups:append('')
end
end
end
function job_self_command(cmdParams, eventArgs)
gearinfo(cmdParams, eventArgs)
end
function gearinfo(cmdParams, eventArgs)
if cmdParams[1] == 'gearinfo' then
if type(tonumber(cmdParams[2])) == 'number' then
if tonumber(cmdParams[2]) ~= DW_needed then
DW_needed = tonumber(cmdParams[2])
DW = true
end
elseif type(cmdParams[2]) == 'string' then
if cmdParams[2] == 'false' then
DW_needed = 0
DW = false
end
end
if type(tonumber(cmdParams[3])) == 'number' then
if tonumber(cmdParams[3]) ~= Haste then
Haste = tonumber(cmdParams[3])
end
end
if type(cmdParams[4]) == 'string' then
if cmdParams[4] == 'true' then
moving = true
elseif cmdParams[4] == 'false' then
moving = false
end
end
if not midaction() then
job_update()
end
end
end
I went to Abyssea Altep, grabbed every Mandy I could, and let them smack me around.
Start Casting Tele-Holla
Immediately spam my phalanx macro, to continually trigger my pre-cast set.
Even though my midcast set has 115% SIRD, the pre-cast gear WILL be equipped, and WILL get you interrupted. It is not 'instant' and being sent in the same packet does not prevent that gear from being equipped and calculated for interrupts on hits.
Proof with showswaps on: Interrupt at 13:24:51. Both chat logs posted so gear is clearly shown and macro spamming via showswaps.
replace teleport with whatever spell you want SIRD on and its obvious how button smashing removing SIRD is due to AFTER CAST and not PRECAST
So, I want to be clear in that you are correct. Macro spamming will create failed casts, which will result in cycling to an after-cast set (read: idle) this is most likely where 99% of peoples SIRD issues come from; the AFTER case, not the precast.
However, I feel the above tests proves that Pre-Cast gear is not 'instant' regardless of packet delivery. And that Pre-Cast gear, can, will, and does effects SIRD as well. So for those of you paranoid about that 1%, yes, put SIRD in PreCast AND MidCast. Obviously, my test is not a realistic scenario as no one who spam a macro that much, but it proves the logic I was discussing prior.
BUT... For those of you who spam macros... You're ***out of Luck, unless your melee and/or idle set also have 104% SIRD, because multiple Macro attempts, will result in after-cast gear handling.
DaneBlood, as you seem knowledgeable, I'm curious. Why is the idleset ever triggered? Even on a failed macro attempt, how is gearswap ever detecting an idle result, instead of identifying that you are in an active state of casting, even if not the most recent or failed attempt to cast, it should still do a status check to realize your current status is midcast, not idle. Although, I'm not sure how it would know what spell you were in the middle of casting and therefor gear to apply, but it seems like the default should be sets.midcast.
So how (or why) is gearswap picking up an idle result, when we're clearly in a casting state?
Shiva.Thorny
Serveur: Shiva
Game: FFXI
Posts: 2165
By Shiva.Thorny 2021-05-25 16:00:56
It can't be both. Either it's instant and in the same packet (in which case macro mashing wouldn't effect it, because you're claiming the game never registers that precast gear is on) or it's not instant and the game does register that it's on, and therefor that split second can be susceptible to being interrupted. It is both. The outgoing packet contains precast swaps, action packet, and midcast swaps. The packet handling is single threaded, and thus it will always finish reading the entire packet before doing anything else. This means that the game server reads in precast, reads in action(and determines how long the action will take), then reads in midcast and updates your stats before doing anything else.
I can't comment on gearswap's issues with idle, as Ashitacast is modeled differently and won't enter idle no matter how much you spam. Most likely they modeled aftercast as a delay that gets cut short when you get the cast finished packet. If you spam enough, without receiving cast finish packet, it likely hits the default delay and goes back to idle briefly. It should really be using a state machine instead, to avoid false idles.
If not for that, mashing wouldn't matter, as every single cast attempt would be throwing you back into your midcast set before returning control of thread anyway. It's possible in your case the excessive mashing hit windower's cap on injected packets, so a precast->action->midcast block could not all be injected at once. (I do not know what they use for a cap, so again, can't comment directly. Ashita's cap is sufficient that 4-5 attempts a second would not cause that result.)
Shiva.Thorny
Serveur: Shiva
Game: FFXI
Posts: 2165
By Shiva.Thorny 2021-05-25 16:20:31
To be more clear, there is a limit to how many packets can be injected in an outgoing transmission due to the cap on UDP packet size and the way FFXI's encryption works. When you hit your macro to trigger gearswap, gearswap puts all the packets in a queue. The next time the client tries to send an outgoing packet on it's own, windower adds packets from that queue to the outgoing packet until it reaches the space cap.
Using 16 swaps + action + 16 more swaps is a total of 172 bytes if using equipset, 284 if not. Your game client will typically only be sending 32 from the outgoing position update and maybe 100ish from a chat message if it's sent near enough the same time. This means you rarely have more than 400~ bytes unless you hit the macro twice within a ~350ms interval, in which case both sets will try to be injected on the same outgoing packet.
If this is the case, it's possible you could end up with a situation where some, but not all, of the 172/284 bytes from your [second, third, w.e] action make it into an injection as the cap has already been reached. This would create a situation where you end up in suboptimal gear until the next outgoing packet can inject the rest and correct it. I do not know what windower uses for a limit on outgoing packet size, so I cannot say conclusively if this is the cause. It's the only thing that comes to mind that would explain your problem, though.
Bahamut.Balduran
Serveur: Bahamut
Game: FFXI
Posts: 272
By Bahamut.Balduran 2021-05-25 17:28:17
However, I feel the above tests proves that Pre-Cast gear is not 'instant' regardless of packet delivery. And that Pre-Cast gear, can, will, and does effects SIRD as well. So for those of you paranoid about that 1%, yes, put SIRD in PreCast AND MidCast. Obviously, my test is not a realistic scenario as no one who spam a macro that much, but it proves the logic I was discussing prior.
Your test only proves that macro spamming leads to equipment swaps in the midst of the midcast process of a spell, that is true. However there is no evidence that points to pre-cast gear not being an instant cast and having direct impact on the outcome of SIRD.
The only way to prove that is to run your test without deliberately causing an action (mashing) to interfere with your cast, then and only then, if you do get interrupted you can say there is evidence that proves the precast correlation with midcast SIRD.
Ultimately, macro mashing is not ideal for FF11, always been the case since the traditional days of vanilla macros. You should time your actions accordingly so they don't overlap each other. There is an addon developed by Rubenator that shows a global cool down bar between actions, that way you should never be put in a position where you need to spam actions in such a fast interval.
The concept of pre-cast and until proven otherwise, allows the following;
- Precast FC80% + midcast with full potency
- Precast chainspell + midcast in full potency
- Precast FC80% + Sird midcast with 0 interruptions
- DT equip not required in precast sets (with the exception of JA and WS), since it's impossible to get hit in pre-cast.
The example of chainspell with pre-cast + midcast with full potency, further proves how the game handles this process from the back-end in an extremely fast manner and in 1 single instruction.
By DaneBlood 2021-05-25 18:24:03
Even though my midcast set has 115% SIRD, the pre-cast gear WILL be equipped, and WILL get you interrupted.
I dont see anything in your test supporting this.
AFAICS it just support you got interupted. which is more likely dueto the after cast as mentioned.
What am i missing here that says these interrupts can ONLY happen due to precast gear not having SIRD?
It can't be both. Either it's instant and in the same packet
The last part is the reason for the first. that you deny it does not make it false.
one packet. one handling of a point in time
it like saying sitting on the same airplane does not mean you land at the same time. its either one or the other.
hope it makes it clear.
it is very much both in this case
Bahamut.Yukisoba
Serveur: Bahamut
Game: FFXI
Posts: 58
By Bahamut.Yukisoba 2021-05-25 18:31:37
I dont see anything in your test supporting this.
AFAICS it just support you got interupted. which is more likely dueto the after cast as mentioned. He said he removed everything from his lua except Precast and Midcast. So him spamming would mean he would get stuck in Midcast(115% SIRD) and no other set, since Precast and Midcast is sent in the same packet and is an instantaneous swap, which was said to be uninterruptible.
[+]
Bahamut.Balduran
Serveur: Bahamut
Game: FFXI
Posts: 272
By Bahamut.Balduran 2021-05-25 19:19:58
I dont see anything in your test supporting this.
AFAICS it just support you got interupted. which is more likely dueto the after cast as mentioned. He said he removed everything from his lua except Precast and Midcast. So him spamming would mean he would get stuck in Midcast(115% SIRD) and no other set, since Precast and Midcast is sent in the same packet and is an instantaneous swap, which was said to be uninterruptible.
[Precast ⟶ Midcast] in its error-free transition, is not equivalent to [Precast ⟶ Midcast ⟶ spam another spell ⟶ Precast ⟶ Midcast]
Exiting from 'Midcast' in the midst of casting due to interference will create a void in the process, and that is not equivalent to a flawless [Precast ⟶ Midcast], or until proven otherwise.
On the contrary, players using SIRD set in precast as a work around for accidental spell spam are in fact creating a counterproductive solution. This is because you lose out on FC benefit and the spell casts in full duration, thus adding a higher margin of error in mashing. For example Geist Wall cast in [sird precast+midcast] will be around 3 seconds, while an 80% FC version will only take around 0.6 seconds, therefore 2.4 seconds window less of potential error.
[+]
Bahamut.Belkin
Serveur: Bahamut
Game: FFXI
Posts: 473
By Bahamut.Belkin 2021-05-25 19:22:18
Also an easy way to check would be just make your aftercast idle set be the same as your precast for the purpose of testing.
By DaneBlood 2021-05-25 19:28:35
He said he removed everything from his lua except Precast and Midcast. So him spamming would mean he would get stuck in Midcast(115% SIRD) and no other set, since Precast and Midcast is sent in the same packet and is an instantaneous swap, which was said to be uninterruptible.
Thank you I missed that part
but that does not exclude thorny explanations that spamming the button might creaet a limit in the requested charges and thereby not swap all gear correctly (time wise).
If this is the issue then it stand to say that also aftercast would need the SIRD as we do no longer have any sure set to be in due to the spamming and breaking the swap routine.
Which also leads to what was said prior.
Make sure you lua does not swap gear unneeded for spells that are not available. so when you spam that button it is cancelled out Instead of massive amount of swapping
Serveur: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2021-05-25 20:34:00
[Precast ⟶ Midcast] in its error-free transition, is not equivalent to [Precast ⟶ Midcast ⟶ spam another spell ⟶ Precast ⟶ Midcast]
Exiting from 'Midcast' in the midst of casting due to interference will create a void in the process, and that is not equivalent to a flawless [Precast ⟶ Midcast], or until proven otherwise.
This is where I'm getting inconsistent logic.
In one statement you claim a void does not exist from pre-cast to midcast. You claim it's an error free transition.
Then you immediately follow by stating that re-triggering a pre-cast to midcast transition will create a void.
How does a voidless transition create a void?
We're always transitioning from 1 set of gear to the pre-cast gear, no matter what:
Engaged > pre cast > mid cast
or
Idle > pre cast > mid cast
or (this example)
mid cast > pre cast > mid cast
So, you're claiming the first 2 transitions don't have a void, because it's instant, it's impossible to have precast alter the success of midcast. So, why does the 3rd have a void and is no longer instant and now the precast DOES alter the success of midcast?
And the answer can not be that 'idle and engaged can't be interrupted' because we aren't debating whether they can be, we're debating whether or not the transition period is able to be measured, checked, and interrupted in game. We're looking at the bold part of the process for all 3 examples. You're stating that in the first 2, it's impossible for the game to check that 'point' in time. But for some reason the 3rd scenario it does check it? It doesn't appear to be consistent handling and it feels like you're overlooking that idle and engaged, for all intents and purposes, are handled the same way by gearswap as midcast for our example. Either it's voidless for them all, or it's not for all. There's no logical reason it would only create a void and be checked in a single scenario.
Tl;dr If you claim the bold 'transition' can't be checked in game and is impossible to be checked and interrupted, why can it be checked and interrupted in the 3rd scenario? What differentiates the first 2 scenarios from the 3rd that results in a completely different handling of gear and checks?
Bahamut.Belkin
Serveur: Bahamut
Game: FFXI
Posts: 473
By Bahamut.Belkin 2021-05-25 20:40:39
[+]
Carbuncle.Ared
Serveur: Carbuncle
Game: FFXI
Posts: 15
By Carbuncle.Ared 2021-05-25 21:08:42
[Precast ⟶ Midcast] in its error-free transition, is not equivalent to [Precast ⟶ Midcast ⟶ spam another spell ⟶ Precast ⟶ Midcast]
Exiting from 'Midcast' in the midst of casting due to interference will create a void in the process, and that is not equivalent to a flawless [Precast ⟶ Midcast], or until proven otherwise.
This is where I'm getting inconsistent logic.
In one statement you claim a void does not exist from pre-cast to midcast. You claim it's an error free transition.
Then you immediately follow by stating that re-triggering a pre-cast to midcast transition will create a void.
How does a voidless transition create a void?
We're always transitioning from 1 set of gear to the pre-cast gear, no matter what:
Engaged > pre cast > mid cast
or
Idle > pre cast > mid cast
or (this example)
mid cast > pre cast > mid cast
So, you're claiming the first 2 transitions don't have a void, because it's instant, it's impossible to have precast alter the success of midcast. So, why does the 3rd have a void and is no longer instant and now the precast DOES alter the success of midcast?
And the answer can not be that 'idle and engaged can't be interrupted' because we aren't debating whether they can be, we're debating whether or not the transition period is able to be measured, checked, and interrupted in game. We're looking at the bold part of the process for all 3 examples. You're stating that in the first 2, it's impossible for the game to check that 'point' in time. But for some reason the 3rd scenario it does check it? It doesn't appear to be consistent handling and it feels like you're overlooking that idle and engaged, for all intents and purposes, are handled the same way by gearswap as midcast for our example. Either it's voidless for them all, or it's not for all. There's no logical reason it would only create a void and be checked in a single scenario.
Tl;dr If you claim the bold 'transition' can't be checked in game and is impossible to be checked and interrupted, why can it be checked and interrupted in the 3rd scenario? What differentiates the first 2 scenarios from the 3rd that results in a completely different handling of gear and checks?
The only possible way I can see it coming up (which I think is what Dane and Thorny are replying to) that is different in the third scenario is that if the queue has been filled by repeatedly spamming the macro/command, the packet to the server only gets the Precast portion. So, it loads it as its own command, switching you into precast, such that there is now an introduced chance for the monster to hit you in precast gear. The rest of the command (the command to change into midcast gear) hasn't been received by the server in between the two, and so it fails.
If the current theory holds, it should only be possible if the button is being mashed, thus making the third option a possibility.
Serveur: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2021-05-25 21:25:47
The only possible way I can see it coming up (which I think is what Dane and Thorny are replying to) that is different in the third scenario is that if the queue has been filled by repeatedly spamming the macro/command, the packet to the server only gets the Precast portion. So, it loads it as its own command, switching you into precast, such that there is now an introduced chance for the monster to hit you in precast gear. The rest of the command (the command to change into midcast gear) hasn't been received by the server in between the two, and so it fails.
If the current theory holds, it should only be possible if the button is being mashed, thus making the third option a possibility.
Okay, I can follow that. So then how many macro hits per <time> period, would be an accurate test, to recreate?
Instead of spamming it repeatedly, hit the macro once per second? Once every 2 seconds? 3?
What is an agreed upon rate of packets, which will not reach the alleged cap the queue?
Carbuncle.Ared
Serveur: Carbuncle
Game: FFXI
Posts: 15
By Carbuncle.Ared 2021-05-25 21:32:24
I can only go off of what was mentioned above (Thorny's post)
To be more clear, there is a limit to how many packets can be injected in an outgoing transmission due to the cap on UDP packet size and the way FFXI's encryption works. When you hit your macro to trigger gearswap, gearswap puts all the packets in a queue. The next time the client tries to send an outgoing packet on it's own, windower adds packets from that queue to the outgoing packet until it reaches the space cap.
Using 16 swaps + action + 16 more swaps is a total of 172 bytes if using equipset, 284 if not. Your game client will typically only be sending 32 from the outgoing position update and maybe 100ish from a chat message if it's sent near enough the same time. This means you rarely have more than 400~ bytes unless you hit the macro twice within a ~350ms interval, in which case both sets will try to be injected on the same outgoing packet.
If this is the case, it's possible you could end up with a situation where some, but not all, of the 172/284 bytes from your [second, third, w.e] action make it into an injection as the cap has already been reached. This would create a situation where you end up in suboptimal gear until the next outgoing packet can inject the rest and correct it. I do not know what windower uses for a limit on outgoing packet size, so I cannot say conclusively if this is the cause. It's the only thing that comes to mind that would explain your problem, though.
Should be fine second by second, if I'm reading it right, but could cause issues if you hit the button a few times to "make sure it fires"
[edit: minor grammar error that was bugging me -> it fire to it fires]
Bahamut.Balduran
Serveur: Bahamut
Game: FFXI
Posts: 272
By Bahamut.Balduran 2021-05-25 21:39:33
[Precast ⟶ Midcast] in its error-free transition, is not equivalent to [Precast ⟶ Midcast ⟶ spam another spell ⟶ Precast ⟶ Midcast]
Exiting from 'Midcast' in the midst of casting due to interference will create a void in the process, and that is not equivalent to a flawless [Precast ⟶ Midcast], or until proven otherwise.
This is where I'm getting inconsistent logic.
In one statement you claim a void does not exist from pre-cast to midcast. You claim it's an error free transition.
Then you immediately follow by stating that re-triggering a pre-cast to midcast transition will create a void.
How does a voidless transition create a void?
We're always transitioning from 1 set of gear to the pre-cast gear, no matter what:
Engaged > pre cast > mid cast
or
Idle > pre cast > mid cast
or (this example)
mid cast > pre cast > mid cast
So, you're claiming the first 2 transitions don't have a void, because it's instant, it's impossible to have precast alter the success of midcast. So, why does the 3rd have a void and is no longer instant and now the precast DOES alter the success of midcast?
And the answer can not be that 'idle and engaged can't be interrupted' because we aren't debating whether they can be, we're debating whether or not the transition period is able to be measured, checked, and interrupted in game. We're looking at the bold part of the process for all 3 examples. You're stating that in the first 2, it's impossible for the game to check that 'point' in time. But for some reason the 3rd scenario it does check it? It doesn't appear to be consistent handling and it feels like you're overlooking that idle and engaged, for all intents and purposes, are handled the same way by gearswap as midcast for our example. Either it's voidless for them all, or it's not for all. There's no logical reason it would only create a void and be checked in a single scenario.
Tl;dr If you claim the bold 'transition' can't be checked in game and is impossible to be checked and interrupted, why can it be checked and interrupted in the 3rd scenario? What differentiates the first 2 scenarios from the 3rd that results in a completely different handling of gear and checks?
A valid and fear observation, and I appreciate your constructive feedback.
Perhaps my use of the term void is not quite accurate to illustrate my point.
So firstly, let's agree that to date, we have no evidence from testing that SIRD can be interrupted in your scenarios 1 & 2, that is a fact. We also have an explanation from Thorny on how those 2 scenarios work. Now the only scenario in which the anomaly occurs, is #3 (mid cast > pre cast > mid cast), and this is the only scenario that lacked a solid explanation as to what may potentially occur during the process, until Thorny provided some insight in his second post above, which concluded that this may result in 'suboptimal gear'. At this point, it is fair to conclude that scenario 3 is not equivalent to 1 and 2, and not the intended behavior of GearSwap. Based on this summery, there is no evidence to tie the 3 scenarios together and say they should all work the same way, because they don't.
Also, Martel pointed out on the previous page that
Quote: The only time I've ever seen a character get stuck with precast gear on while using gearswap, is when they spammed the spell macro before they were able to cast, or during midcast. This example goes in line with the testing in scenario 3 and again puts us back to the same conclusion, i.e. Suboptimal gear.
I would reiterate that FF11 is not designed for macro spamming in all respects, and to conclude, there yet remains any evidence that debunks precast > midcast affecting any sird, without producing an anomaly through deliberate spamming before the spell is cast.
So in recent updates, Ive noticed a lot more mobs have a hate reset or even a 100% hate loss and as a basic pld/war with all haste I can ask for not a lot I can do to get hate back with out killing my HP and trying to cure bomb for hate. While this trick does work most days it always comes with a risk of death and thus defeating the idea of tanking. A friend of mine suggested pld/blu. As I have used this for DMv2 and other events and with great success, I was wondering if anyone has tried this as a viable option with any success in More recent content. As well as that question, and aside from the obvious hate spam spells seen in other PLD section post, what other spells would you use /blu? Cocoon blank gaze Jettatura as well as some healing pair to get 1 regen a tic. What else would you suggest? I have not been a very good blu so Id hope for a good point in the right direction
|
|