Preventing/Detecting Metatable Hooking?

Yes, I recommend you use LocalSimulationTouched in your server Script instead of Touched. Don’t listen to the “deprecated/will-be-removed” nonsense.

why not use a Touched event on the Client instead of using something deprecated?

I don’t think things are deprecated only because someone doesn’t want to use pascal case functions, it means Roblox is ending support for them.

You could use .Touched events on the server, why use LocalSimulationTouched ?

The difference between Touched and LocalSimulationTouched is that exploiters can fire the Touched signal but not the LocalSimulationTouched one. This is a key difference that makes it much more secure.

The wiki says it only fires to the client, but I need damage on the server to actually kill the player. How would I do that?

Using .Touched inside a server script inside a tool does not solve the issue. It’s a weird behavior that is meant to be apparently.

It should work on the server too. Have you tried it out in a server Script?

I would refrain from using that as users with high ping will suffer as their actions will take longer to replicate to the server, in any PVP game this would be unacceptable.

I am already dealing the damage inside a server script inside the tool.

Everything PVP on “The Streets” is done server-side, and yet the game still has quite a lot of players. People don’t seem to be complaining about it. Also, it’s probably better this way than to have the entire server die to 1 player.

I’m sure a game like “The Streets” would have a mostly US player demographic which wouldn’t suffer as much from latency.

It’s a compromise most should be willing to make. It’s better than having the entire server die to one annoying exploiter.

There are plenty of checks you can do to verify information coming from the client can be considered “valid”, plenty of games have taken to this approach (ex Phantom Forces).

I actually would not like to have a delay. It is a rather fast paced game and it would not benefit the game overall. So, I am trying to find solutions that don’t hinder gameplay.

Then you’re going have to compromise by checking the melee’s handle size locally and by adding server-sided distance checks just to make sure someone isn’t stabbing someone else 10 miles away.

I am doing that already. However, exploiters are tricking the server into thinking the value is the normal value.

That is the solution I’ve seen most games use when using Touched events on melee weapons. You can simply check if the distance is no more then the length of the part on the server plus some for latency reasons. This would require cheaters to teleport in order to make the hit valid, of which you can also detect.

Okay, so a lot of dumb exploits like “ProtoSmasher” and “SynapseX” cannot “Disable()” GetPropertyChangedSignal events. So you can simply do this (just make sure you’re not changing the handle’s size with your LocalScripts):

local Handle = ToolHandleHere

Handle:GetPropertyChangedSignal"Size":Connect(function()

while wait() do

    for i = 1,100 do

        while true do end

    end

end

end)

Handle.Changed:Connect(function(Change)
if Change == “Size” then
while wait() do

for i = 1,100 do

    while true do end

end

end
end
end)

Actually, they can hook that function, making it useless. Edit: Using metatables.

Most typical exploiters lack intellectual prowess. So they probably wouldn’t figure it out so easily. Also, this is where the server-sided distance checks come into play.

The thing is I already have GetPropertyChanged signal and the server sided distance check. Many of the exploiters still manage to exploit the sword hitbox and be able to hit everyone in their radius without moving.