1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-24 03:47:58 +02:00
ComfyFactorio/utils/spam_protection.lua

88 lines
1.9 KiB
Lua

local Event = require 'utils.event'
local Global = require 'utils.global'
local Public = {}
local this = {
prevent_spam = {}, -- the default table where all player indexes will be stored
default_tick = 15 -- this defines the default tick to check weather or not a user is spamming a button.
}
Global.register(
this,
function(t)
this = t
end
)
function Public.reset_spam_table()
local players = game.connected_players
this.prevent_spam = {}
for i = 1, #players do
local player = players[i]
this.prevent_spam[player.index] = game.tick
end
end
function Public.set_new_value(player)
if this.prevent_spam[player.index] then
this.prevent_spam[player.index] = game.tick
return this.prevent_spam[player.index]
end
return false
end
function Public.is_spamming(player, value_to_compare)
if not this.prevent_spam[player.index] then
return
end
local tick = game.tick
local value = value_to_compare or this.default_tick
if this.prevent_spam[player.index] then
if (tick - this.prevent_spam[player.index]) > value then
Public.set_new_value(player)
return false -- is not spamming
else
return true -- is spamming
end
end
return false
end
function Public.get(key)
if key then
return this[key]
else
return this
end
end
function Public.set(key, value)
if key and (value or value == false) then
this[key] = value
return this[key]
elseif key then
return this[key]
else
return this
end
end
Event.add(
defines.events.on_player_joined_game,
function(event)
local player = game.get_player(event.player_index)
if not this.prevent_spam[player.index] then
this.prevent_spam[player.index] = game.tick
end
end
)
Event.on_init(
function()
Public.reset_spam_table()
end
)
return Public