This is very basic but is also not implemented and skipped over by many game developers. The exploit is as simple as its name, its a script where the player is able to active any/every click detector/proximity prompt at the same time. This is due to them both being client sided operations.
First of all you need basic protection on any script that uses click detectors, A simple check would be needed. Server sided ofc
local camera = workspace.CurrentCamera
clickdetector.MouseClick:Connect(function(player)
local char = player.Character
if char then
local distance = player:DistanceFrom(clickdetector.Parent.Position)
if distance - 2 <= clickdetector.MaxActivationDistance + cam.MaxCamZoom then
-- allow them to continue with their thingy
end -- you can make this an else statement since its an illegal trigger
end -- but there might be false positives so don't punish them too much.
end)
This can also be scripted for proximity prompts ^
This is basic security and can limit what an exploiter can do without a lot of effort.
Another simple script if you don’t wanna add these checks to every click detector in the game is simple.
local impossiblePart = Instance.new('Part')
impossiblePart.Size = Vector3.new(0,0,0)
impossiblePart.Transparency = 1
impossiblePart.Anchored = true
impossiblePart.CanCollide = false
impossiblePart.Positon = Vector3.new() -- place anywhere out of reach of players
-- make sure its not too far cause of streaming enabled.
local click = Instance.new('ClickDetector')
click.MaxActivationDistance = 0.01
click.Triggered:Connect(function(player) player:Kick('Impossible interaction') end)
-- for triggering the event on an impossible part.
clickdetector.Parent = impossiblePart
local prompt = Instance.new('ProximityPrompt') -- also works for prompts
prompt.MaxActivationDistance = 0.01
prompt.Triggered:Connect(function(player) player:Kick('Impossible interaction') end
prompt.Parent = impossiblePart
impossiblePart.Touched:Connect(function(hit) -- also works for .Touched
local player = game.Players:GetPlayerFromCharacter(hit)
if player then
player:Kick('Impossible interaction')
end
end)
-- Some exploits like infinite yield also have an exploit to touch all parts
-- this can also prevent it
impossiblePart.Parent = workspace
Feel free to put your own methods for player:Kick() such as bans and stuff.
This works simply because the scripts that include Fire all cd, pp and tis don’t filter anything out and literally fire everything in the workspace.
This is only simple and only stops very niche exploits but its security and an easy way to catch out skids. They may patch this method but its not serious lol