matpow2 / cuwo

Open server and utilities for Cube World
GNU General Public License v3.0
171 stars 49 forks source link

Unlimited Fire Sparks #197

Open Kyristan opened 7 years ago

Kyristan commented 7 years ago

Hi,

I just ran a Server with cuwo on my local Windows-PC. And started to play with my Fire-Mage. Everthings seems to work but once the passive ability (Fire Sparks) procs, it won't stop anymore.

As a result I can cast my special attack for free unlimited times. I also created a new character and got the same problem everytime Fire Sparks procs for the first time.

Any ideas why this is happening and how to avoid this?

Thanks in advance. :)

matpow2 commented 7 years ago

Does this happen consistently? Maybe we're not handling passive abilities correctly.

Thanks!

Atoren commented 4 years ago

Problem occurs consistently for the following buffs/debuffs: Dagger Poison || Guardian Bulwark || Berserker Rage || Fire Mage Passive || Ninja Passive || Scout Swiftness || Scout Passive || Problem does not occur with: Wind Spirit's Speed Boost || Ice Spirit's Slow Debuff

When switching/creating a character all buffs/debuffs remain on the character.

Fixed by restarting the person's game.

coremaze commented 4 years ago

Does this happen consistently? Maybe we're not handling passive abilities correctly.

Thanks!

"Correctly" is not clearly defined here, as the vanilla server does not appear to handle passive abilities in the expected manner either.

This particular bug occurs because cuwo sends ServerUpdates to the client which contain passive actions which include the passive ability which was just sent by the client. Sending the passive action back to the client prompts the client to start the passive action again and to send its initial packet again. This causes an infinite loop where cuwo continually tells the client to start the ability.

In Cube World Alpha's vanilla server. It does not appear to tell any of the clients about this passive action. This is why the bug does not exist in vanilla, but it's also why the opposite bug exists in vanilla: you cannot, for example, see that another player is using Scout's Swiftness in vanilla.

In order to faithfully recreate vanilla behavior, with vanilla's bug, don't add clients' passive actions to the ServerUpdate packet.

In order to achieve expected behavior, cuwo must stop treating ServerUpdate as a broadcast packet and instead create a ServerUpdate for each client which does not contain their own passive actions.

coremaze commented 4 years ago

I have created a messy proof of concept fix that seems to produce expected behavior, and it would be nice for someone to test it to ensure this is the desired output.

https://github.com/ChrisMiuchiz/cuwo/commit/89565e59464f707652f1ee1f0411d5814d123879