You could try to make a script that monitors the player’s activity like movement and inputs, then uses that data to guess if the player is cheating or not, like for example:
If the inputs repeat in a similar enough pattern.
If the player’s movement is too robotic (movement changes in patterns, character turns around at a constant rate or stable rate, player changes position faster than is normally possible.
How much they talk.
You could also monitor things about the player’s account, such as:
Account age (if it’s too low, that is an indicator it could be an alt)
Username and avatar (if the username doesn’t contain any real words, if the letters don’t go together in a way that would be logical or linguistically correct, if the avatar is a default roblox avatar or doesn’t contain non-starter accessories)
You could make a script that takes all of these things into account to guess if the player is cheating or not, then kick them out of the game if the guess percentage is above a certain threshold.
To sum up how cheating works. Consider a player as being able to make any local script they want and can edit all the game items on their side all they want. They can also delete your local scripts.
As such the only truly safe stuff is the server stuff. Just note that competent cheaters might find loopholes in your server logic if you aren’t careful too. So make it so any action that gets taken that can affect gameplay happens on the server and if it’s triggered in any way from a client, run some quick tests to make sure it makes sense and they didn’t just fire a remote event the way they think you want it.