Somewhat old topic but I didn’t need to create another one when there is useful information already here.
Anyways, exploiters can’t ignore the maximum activation distance. Roblox created a built in sanity check so you have to be within its distance, even if you change that value on the client.
However, exploiters can remove HoldDuration unfortunately. This creates two problems.
- Exploiters can rapid fire ProximityPrompts with no cooldowns as long as they’re in proximity.
- Exploiters can avoid the HoldDuration in general. Only works if HoldDuration is bigger than 0.
Fortunately, Roblox gives us some events that we can use to create our own anticheat systems to prevent both of these.
First and probably easiest to fix, is the rapid firing. All you need to do is setup a debounce-like system using the given HoldDuration number. If the prompt is fired, don’t allow the client to fire it again until wait(HoldDuration). (Best way I could explain it, as they shouldn’t fire it until the hold duration timer is complete because it takes (HoldDuration) (0.3 seconds, 1 second, etc) to actually trigger.)
Secondly, this one is a bit harder, you can fix both of these problems by using these two events:


When PromptButtonHoldBegan is triggered, use os.time() or whatever. Then when it’s triggered (completed), use subtract the os.time() from before from os.time() from when it finishes.
For example.
-- Hold Duration is 1
local StarterOsTime = os.time()
wait(1) -- This wait() is just here for replication sake. In reality you won't need it, just use the two events to get both of the os.times that are needed.
if os.time() - StarterOsTime > HoldDuration then
-- it's valid
end
You can also give the client some leg room incase they’re lagging. For example.
if os.time() - StarterOsTime > HoldDuration - 0.1 then
-- it's valid
end
You’d want to have these two connections being handled on the server, so there might be some network lag from client to server. You could also set this up on the client & server just to be overkill for the best results.
Also after some thinking, I don’t think there’d be any network lag. Yes there’d be general network lag (high ping) in some cases, but that wouldn’t make PromptButtonHoldBegan and Triggered fire instantly next to eachother, so odds are you don’t need to add any sort of HoldDuration - 0.1 thing.
Also just to add, nothing else is worth exploiting. HoldDuration is the only thing exploitable currently and it’ll probably be this way forever so it’s best to develop your own anticheat to combat it now rather than wait 6 years for Roblox to do it for you.
Note: Sorry if this whole topic is a mess to read. I originally came here because I wanted to see what was exploitable with these prompts and I also decided to test it out myself and give results so nobody else would have to. I also wrote this at 2:54 am.