-
-
Notifications
You must be signed in to change notification settings - Fork 377
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
Rewrite: Partially fix bed spawning for SSC #3031
base: general-devel
Are you sure you want to change the base?
Conversation
What problem are you trying to solve here? |
0173726
to
e364b03
Compare
1a957d8
to
3ef485b
Compare
Need testers for this PR! You can help test out with this Docker image with: Please do let me know if there's any bugs or potential issues with this workaround. |
Upon dying and respawning, any action I take seems to not register. Steps to Reproduce
|
616f98d
to
880f3da
Compare
Oops. That's not intended. I've fixed the death issue you mentioned, could you help test it again? |
Tested scenarios in #1966, #2844, #3011, and #1849. All passing with no errors. Also tested some scenarios with bombs destroying beds during death. Tested with both SSC on & off. Looks good to me! ✅ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As per our conversation in Discord, Potato will implement the use case for the bed being broken
880f3da
to
836cc33
Compare
Okay, the case where beds are broken/invalid is now handled. This PR should be ready for merging ^^ |
Tested bed breaking with both the magic mirror and death. |
This PR rewrites the player spawnpoint saving system for SSC.
When SSC is enabled, player spawnpoints are only saved server side but not client side. However, due to the game's netcode logic, it is most likely impossible for the server (TShock) to change the client's spawnpoint value
Terraria.Player.Spawn{X,Y}
since the server provided value gets overwritten by its own client sided spawnpoint value insp{X,Y}
inTerraria.Player.FindSpawn()
after packet 12 has been received.In order to workaround this, TShock would keep track of the client's initial spawnpoint value on the first player spawn, it uses this value to compare if the player has changed his spawnpoint. This way, we can teleport the player with the correct server saved spawnpoint after the player tries to spawn with its incorrect client sided spawnpoint, at least before the player changes his spawnpoint mid-game.
What this means is that we purposely desync the client and server
Terraria.Player.Spawn{X,Y}
value before we know that the player had changed his spawnpoint. Once we know its changed, both client and server spawnpoint values would be synced, and we won't need to force teleport the player anymore.Note that there is one limitation with this approach - this only works if the player respawns (via death or magic mirror) at his changed spawnpoint before logging off, otherwise the server would have no idea that the player's spawnpoint has changed.
I'm not sure if I covered all test cases, but please let me know if there is any bugs :)