Skip to content
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

Open
wants to merge 1 commit into
base: general-devel
Choose a base branch
from

Conversation

PotatoCider
Copy link
Contributor

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 in sp{X,Y} in Terraria.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 spawns 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 :)

@hakusaro
Copy link
Member

hakusaro commented Jun 2, 2024

What problem are you trying to solve here?

@PotatoCider
Copy link
Contributor Author

What problem are you trying to solve here?

I'm mainly trying to solve #1966 (and #2844, #3011) which were known issues for quite some time. This PR doesn't fully solve the bed spawning problem with the limitations above. There are also other related issues like #1849.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants