PDA

View Full Version : Game Mechanics: Buff client/server desyncing, when debuffs overwriting buffs


fash
06-07-2016, 04:19 PM
Occasionally, buffs/debuffs will reorder when logging out and back in. For example, Spirit of the Wolf, which was in buff slot 15, may appear in slot 1 upon logging back in.

Nirgon
06-07-2016, 04:37 PM
this happens when zoning too

let a buff fade (from top usually)

recast the buff with other open buff slots

zone or relog


bug reproduced

planarity
06-09-2016, 01:11 AM
I think this is the result of discrepancies in the buff order between the client and server.

When I started on P99, If you refreshed a buff that you already had, it wouldn't change the location in the buff stack even if slots above that location were free. At some point, this changed so that refreshing a buff would move it to the first free slot in the stack.

My guess is that the client was changed but the server retains the old behavior, which results in the discrepancy.

Many of the buff reordering issues I've seen seem to result from this, but not all of them. I've also seen strange behavior result from being given a buff that is somehow blocked, such as a str buff blocked by rez effects or a str debuff, or similar issues with regen etc. The buff isn't there as far as the client is concerned, but logging or zoning perhaps causes the server to assert that it's there.

fash
06-19-2016, 11:13 AM
I think this is the result of discrepancies in the buff order between the client and server.

This seems to be the problem.

I often use two damage absorption buffs, Rune V and Berserker Spirit. The buff in the higher slot (cast earlier) has always absorbed damage first. Today, I noticed for the first time the lower slot buff absorbing damage first. After noticing this behavior, I zoned, and several buffs I had were reordered.

It seems that the client and server get into different states, which causes this visual buff order discrepancy. Zoning appears to sync the client to the server's state, causing the buffs to reorder.

fash
07-24-2016, 08:50 PM
When a debuff overwrites a buff on a player, the buff state of that player can become out of sync between the server and client.

Client-side, the buff appears to correctly have been overwritten visually, except in an edge case when the player has max (15) buffs and the buff being overwritten is _not_ in slot #1.

Server-side, both the debuff and buff, which should have been overwritten, are active on the player. In the edge case described above, buff is correctly overwritten by the debuff, but whatever buff is in slot #1 is incorrectly removed.

Repro steps:
1. Cast Berserker Spirit (enchanter lvl 49) on player. Berserker Spirit should be in slot #1 and slot #2 should be empty. http://i.imgur.com/8gPXTTe.jpg
2. Cast Weakness (enchanter lvl 44) on player. Client-side, Weakness appears in slot #1 and slot #2 appears empty. Ostensibly, Weakness overwrote Berserker Spirit correctly.http://i.imgur.com/p0jccSu.jpg
3. Zone the player to cause the client to sync with the server.

Result: Berserker Spirit is in slot #1, and Weakness is in slot #2.
http://i.imgur.com/O8JbzkC.jpg

This causes a few issues. If you dispell the player prior to zoning, the hidden buff (Berserker Spirit) is dispelled, not the debuff even though the debuff appears to be in slot #1. Any new buffs applied to the player (prior to zoning), will be out of sync e.g. it will appear in slot #2 client-side, but slot #3 server-side. This of course makes dispelling buffs appear to misbehave untill the player's client resyncs with the server e.g. by zoning/relogging.


I was similarly able to reproduce this behavior with Augmentation (enchanter lvl 29) and Cripple (enchanter lvl 53).

Erati
07-24-2016, 09:05 PM
is Res effects acting like a "debuff" in terms of buff stacking after being resd?

fash
07-24-2016, 09:28 PM
Regarding the edge case described in OP (all 15 slots filled and buff to be overwritten is _not_in slot #1), client-side, the debuff overwrites the correct buff _visually_, but server-side the debuff overwrites whatever happens to be in slot #1 instead.

1. 15 slots filled. Berserker Spirit is in slot #3.
http://i.imgur.com/LKBebYU.jpg

2. After casting Weakness. Client-side, Weakness visually overwrites Berserker Spirit in slot #3.
http://i.imgur.com/yIh32uS.jpg

3. After zoning/syncing, we see that Weakness actually overwrote the buff in slot #1 instead, and Berserker Spirit remains in slot #3.
http://i.imgur.com/Sleid7j.jpg

eisley
07-24-2016, 10:41 PM
theres been a few posts about the relation between buff order and the client - there are other oddities, such as how if you have a buff in slot #3, but then click off your #1 buff, and refresh the #3 buff, itll then appear to jump to slot 1 on your client, but is truly still in 3.

anyway, good research - much clearer than i could ever explain.

fash
08-15-2016, 09:37 AM
bump

Daldaen
08-15-2016, 10:34 AM
I think the most pressing issue with buff stacking is a misleading post lead to it being in the current state.

The current state suggests that when a buff is overwritten by either a superior buff, or by a Debuff occupying the same slot, that new buff/Debuff will go into the highest slot that is open.

This is false, and shouldn't work like this. Nilbog even tested it:

http://www.project1999.com/forums/showpost.php?p=1021020&postcount=25

Also if you want more evidence it wasn't this way on classic / Mac server with old code:

https://m.youtube.com/watch?v=6NyERUQeub0

From 4:30 - 7:45 in that video you will see Boost has bard Chorus + Rizlona's on in slots 13 and 14, with an empty slot 12 and 15.

Shortly after that 4:30 beginning mark, Chorus ends very briefly and restarts, this causes it to disappear for about a second in slot 13 and reappear in slot 12 (as one would expect when the buff fades and is recast).

Also from 4:30-7:45 you will see there is an empty slot 13 and Rizlona's stays active in slot 14 the entire duration. It is clearly being refreshed every 18 seconds (because bard songs), but is not jumping up slots after the first refresh where there is a void available in his buff list that would allow the jump.

-----

If they fix this buff replacing coding, you won't run into this issue where the server desynchs when it replaces a lower slot buff with either a better buff or a Debuff, trying to place that new effect in an empty top slot instead of the slot where you actually had the original buff like it should.

Nirgon
08-15-2016, 10:46 AM
best way I recreated the buff stacking issue is by letting a buff fade on its own (short duration stuff like DS is good) then rebuffing afterwards and zoning.

A fresh coat of buffs then zoning doesn't have any problems in every test I did.

Grimjaw
08-15-2016, 02:45 PM
is Res effects acting like a "debuff" in terms of buff stacking after being resd? ya res effects acts as a debuff, however technically its always applied before any buff. OPs applying buffs first then debuff second. therefore rez has nothing to do with this scenario.

theres been a few posts about the relation between buff order and the client - there are other oddities, such as how if you have a buff in slot #3, but then click off your #1 buff, and refresh the #3 buff, itll then appear to jump to slot 1 on your client, but is truly still in 3. got link?

I think the most pressing issue with buff stacking is a misleading post lead to it being in the current state.

The current state suggests that when a buff is overwritten by either a superior buff, or by a Debuff occupying the same slot, that new buff/Debuff will go into the highest slot that is open.

This is false, and shouldn't work like this. Nilbog even tested it:

http://www.project1999.com/forums/showpost.php?p=1021020&postcount=25

Also if you want more evidence it wasn't this way on classic / Mac server with old code:

https://m.youtube.com/watch?v=6NyERUQeub0

From 4:30 - 7:45 in that video you will see Boost has bard Chorus + Rizlona's on in slots 13 and 14, with an empty slot 12 and 15.

Shortly after that 4:30 beginning mark, Chorus ends very briefly and restarts, this causes it to disappear for about a second in slot 13 and reappear in slot 12 (as one would expect when the buff fades and is recast).

Also from 4:30-7:45 you will see there is an empty slot 13 and Rizlona's stays active in slot 14 the entire duration. It is clearly being refreshed every 18 seconds (because bard songs), but is not jumping up slots after the first refresh where there is a void available in his buff list that would allow the jump.

-----

If they fix this buff replacing coding, you won't run into this issue where the server desynchs when it replaces a lower slot buff with either a better buff or a Debuff, trying to place that new effect in an empty top slot instead of the slot where you actually had the original buff like it should. everyone agreed that change was classic, even you were fine with it 3 posts later (in that thread you linked). whether or not it made it onto eqmac is technically a different topic (same applies to ur vid). my guess is that this is just residual effect from the root issues, or else just a minor bug on haynar's implementation. Either way, something that needs to be looked into.

best way I recreated the buff stacking issue is by letting a buff fade on its own (short duration stuff like DS is good) then rebuffing afterwards and zoning.

A fresh coat of buffs then zoning doesn't have any problems in every test I did. another great detailed scenario.

keep em coming. detailed reproductions is exactly what they need to pinpoint the few underlying root issues which are causing these oddities to be seen across the board.

fash
08-20-2016, 02:27 PM
Possibly related to this bug (http://www.project1999.com/forums/showthread.php?t=204907) in which beneficial spells are blocking detrimental spells. Circle of Summer is blocking Occlusion of Sound & Protection of the Glades is blocking Breath of Ro.

Perhaps the buff stacking code should always drop beneficial spells in favor of detrimental spells when there is a slot conflict. The linked bug & OP bug indicates this isn't occurring server-side. The OP bug indicates it does, however, occur client-side. In some cases (e.g. OP bug), the detrimental buff stacks with the beneficial buff, when it should overwrite. In other cases (e.g. the linked bug), the detrimental buff is blocked by the beneficial buff, when it should overwrite.

fash
08-27-2016, 09:20 AM
bump. Terribly annoying having buffs appear the wrong slots. It screws up buff order and dispells, which a pita especially in pvp.

Qtip
08-27-2016, 12:00 PM
Whats messing it upI think is when a buff has 2 effects and you get hit with a debuff that effects one of the buffs effects.

If you have dmf up and a necro casts scent on you. You then dispell the scent and click off dmf, you have an unlimited duration levi until you zone. Something with the poison debuff on scent effecting the +poi on dmf is bugging it out.

I dont know if scent is suppose to overwrite dmf. But Ive had scent casted on me and got dmf dispelled and stayed levi since kunark.

paroxysmal
11-19-2016, 07:21 AM
There is an issue with buff slots as they are read client side vs server side.

Currently it appears that the client does not force check correct buff slot placement vs the server properly. This is corrected on zoning or relogging.

Additionally, some spells cannot exist in some spell slot arrangements. The robe of the whistling fist effect sometimes does not appear though the clicky effect shows the song text in the chat box there is no cannot take hold message yet there is no buff icon and no effect from the buff. I do not recall this issue happening to me prior to attempting to frequently stack both monk epic clicky and whistling fist robe clicky.

Not sure if any of this is classic but as a monk its definitely quality of life.

Thanks

maximum
11-19-2016, 11:28 AM
http://www.project1999.com/forums/showthread.php?t=248810

http://www.project1999.com/forums/showthread.php?t=245034