This works perfectly fine. The only thing is that exploiters wont be able to click the button, but they can still easily set their own character’s health to 0 which effectively works as a reset button.
(You can replicate this in studio by using the command line to set your characters health to 0, which runs on the client.)
Are there any options I’ve missed to not allow clients to locally modify their character and have it replicate over?
Any help would be great and I appreciate your time!
I don’t think you can necessarily prevent hackers from resetting, but one work around I can think of is that if the player does end up having their health set to 0, you could listen to their humanoid.Died event and run the LoadCharacter method on their player instantly. Once you load their character, you could then set their CFrame to some last known valid position that they were at before dying. From there, you could make their player go transparent and treat things how you normally would for your system. (Edit: I say last known valid position because they could set their position to NaN which could cause a lot of issues depending on how you handle rubberbanding them back)