My game is in very early stages and for that reason it is paid access. We’re on a free weekend this weekend, and already people on V3rmillion are dropping exploits regarding ammunition count and rate of fire.
Ammunition count is an easy fix, I just need to store the ammo for the weapon on the server;
Rate of fire is not as simple. How do I patch rate of fire exploits without screwing over people with bad ping, or messing up things like burst rifles?
The most logical way to fix fire rate is using the leaky bucket algorithm:
There is a bit more explanation of the algorithm further down in the thread, but this would be the gist of how you handle a ton of requests while allowing wiggle room for high ping players.
Was literally coming back to this post because I assumed OP wasn’t able to find it by looking it up. Thanks anyways, and OP I wouldn’t kick players or do anything like that. I’d simply deny their shots the damage or if they’re ping exceeds a threshold.
This is rough progress on a leak bucket; I add 1 to the FireWeapon dataset every time the player fires. BulletsPerShot is what accounts for burst rifles despite rate of fire. Look good?
Edit:
Time between shots is calculated
1/(RateOfFire/60)
so a rate of fire of 300 == 5 shots per second, or .2 second delay
spawn(function()
while wait(1) do
for userid, cache in next, clientdata.LeakBucket do
if clientdata.Cache[userid].EquippedWeapon then
local weaponData = require(game.ReplicatedStorage.Weapons:FindFirstChild(clientdata.Cache[userid].EquippedWeapon).Information)
if weaponData.BulletsPerShot then
local shotsPerSecond = 1/(1/(weaponData.RateOfFire/60)) * weaponData.BulletsPerShot
clientdata.LeakBucket[userid].FireWeapon = math.clamp(clientdata.LeakBucket[userid].FireWeapon - shotsPerSecond, 0, 1000)
if clientdata.LeakBucket[userid].FireWeapon > 1.2 * shotsPerSecond then
clientdata.Cache[userid].Flagged = true
--// Flag player
else
clientdata.Cache[userid].Flagged = false
end
end
end
end
end
end)
This may not work but I believe you can simulate lag with a vpn and connecting to different countries through it. This should hopefully push you to 100-200+ ping.