Should a combat system be in local or server scripts (solved)

Player animations are replicated regardless of where they are ran. You can run an animation on a client and it will be replicated because of network ownership.

Hit detection will need to be done on server for security. Exploiters can manipulate the results of a raycast if its done on client. Sounds will also need to be done on server, this makes it easier.

Effects need to be registered on the client that fired and then sent out from server. We can fire all clients to show effects except for the client that did the attack, that makes the effect look cleaner.

client sided animations are replicated to the server

in fact, it is recommended to do animations client sided, doing it in the server can cause some issues

For example?

notenoughcharsahhh

No, this is still bad practice. Even with limits, an exploiter can make every attack do maximum and give themselves a huge advantage. There is no reasonable performance trade-off on the server that makes calculating damage on the client viable.

Tl:Dr Server > Client in every way

This isn’t necessarily correct either. I would still recommend handling things like visual effects and moving parts on the client: if you leave it to the server they will look choppy on the client’s end and will take up a lot of unnecessary processing on the server.

How would I replicate effects to the server so they can see it? For example a clash effect when someone hits a block

Have the client listen to a remote event. When it is fired from server-side, run the clash effect function. You can pass any necessary parameters like which block was it from the server.

Okay I’m reviving this real quick because I need help. So I’m going to make this whole system in the video (linked below) server sided. That way it can’t be exploited and everyone in the server can see everything. However I can’t use context action service in a server script, meaning I can’t bind these functions to input. Does anyone have a solution?

Roblox Sword Combat Tutorial Part 1 - YouTube

Handle user input on the client and send JUST input data to the server