-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Network: Despawned Nodes respawn on Clients #11
Comments
Okay apparently this only happens when the player is not moving at all, so i guess the last received server snapshots is the same as the client one |
After digging for a while i found out this is related to delta snapshots and client_check_snapshot in snapshotdata Clients receive deltas which don't include the node anymore (i assume) and for whatever reason this code is not executed: snapshotdata.gd (around l550) For now just sending full snapshots all the time (eg setting threshhold to 0) works I guess this shouldn't be a problem when the game is played over the internet or does heavy physics processing, however in my case (a small demo with just X playernodes displayed) the threshhold was rarely/never hit Maybe a fix could be to determine if a player connected/disconnected and in that case always send a full snapshot once (or until acknowledged)? Edit: I see that this should not be required since encode_delta checks for objects that were deleted. Maybe that part isn't working? |
I will dig into it. My initial release didn't contain the delta snapshot compression because of lots of problems. Apparently it wasn't ready yet! |
I spent quite some time trying to replicate this issue but it simply didn't happen. Tested on both ENet and WebSocket modes, with multiple clients connected and even using clumsy to hinder the connection state. |
A quick way to test it could be:
Can try to create a demo for this next week |
Ahhh. You just described one edge case I didn't consider specifically for the delta compression. Yet, it's is the main reason I still didn't implement the entity culling system. That is basically the client state becoming so "outdated" that it will go out of sync. This occurs when the state only changed when it has already left the internal buffer window. This will require quite a bit of extra upkeep but it may provide the necessary data to also implement the entity culling system. |
After the latest update (i believe) i noticed a strange bug on my demo project:
If a player disconnects, the despawning on the server works perfectly, however on clients the node is despawned, and on the next tick respawned (and it stays there forever).
Is this the only way despawning players on the clients should be done:
func on_player_left(pid: int) -> void: network.snapshot_data.despawn_node(NetPlayer, pid)
NetPlayer is my SnapEntity Object and i'm directly assigning the pid of the player to the node (players only have one controllable character)
The text was updated successfully, but these errors were encountered: