OnPlayerCommand: Difference between revisions
Jump to navigation
Jump to search
Fernando187 (talk | contribs) m (params) |
Fernando187 (talk | contribs) |
||
| Line 13: | Line 13: | ||
The [[event system#Event source|source]] of this event is the [[player]] who tried to execute a command. | The [[event system#Event source|source]] of this event is the [[player]] who tried to execute a command. | ||
== | ==Canceling== | ||
The command will not be executed. (Only server-side commands can be canceled.) | The command will not be executed. (Only server-side commands can be canceled.) | ||
Latest revision as of 12:22, 1 June 2025
This event is triggered when a player issues a command.
Parameters
string command
- command: a string containing the name of the command executed.
Source
The source of this event is the player who tried to execute a command.
Canceling
The command will not be executed. (Only server-side commands can be canceled.)
Example
Click to collapse [-]
ServerThis example implements an anti-flood protection timer for commands. Be sure to give the resource a function.kickPlayer right. Also, note, that if the server freezes for a frame and a player executes a command 2x he/she'll get kicked, because those 2 commands will be processed after each other, with very little delay
local CMD_INTERVAL = 200 --// The interval that needs to pass before the player can execute another cmd
local KICK_AFTER_INTERVAL = 50 --// Kick the player if they execute more than 20 cmds/sec
local executions = setmetatable({}, { --// Metatable for non-existing indexes
__index = function(t, player)
return getTickCount()-CMD_INTERVAL
end
})
addEventHandler("onPlayerCommand", root,
function()
if (executions[source]-getTickCount()<=CMD_INTERVAL) then
if (executions[source]-getTickCount()<=KICK_AFTER_INTERVAL) then
kickPlayer(source, "Anti-Flood", "Don't flood")
end
cancelEvent()
end
executions[source] = getTickCount()
end
)
This example disables the hardcoded command 'whois'
addEventHandler("onPlayerCommand",root,
function(command)
if (command == "whois") then
cancelEvent()
end
end)
Click to collapse [-]
ServerTime limit specific commands.
local LIMITED_COMMANDS = {
-- ["COMMAND_NAME"] = TIME_LIMIT_IN_SEC
["something"] = 5, -- Can use this command only once in every 5 sec
["spam"] = 10, -- Can use this command only once in every 10 sec
}
local EXEC = {}
addEventHandler("onPlayerCommand", root, function(cmd)
local limit_sec = LIMITED_COMMANDS[cmd]
if not limit_sec then return end
local tick = getTickCount()
if not EXEC[source] then EXEC[source] = {} end
if not EXEC[source][cmd] then EXEC[source][cmd] = 0 end
if EXEC[source][cmd] + (limit_sec * 1000) > tick then
cancelEvent()
return outputChatBox("#FF0000[ANTISPAM]#FFFFFF You can use this command once, in every "..limit_sec.." sec.", source, 255, 255, 255, true)
end
EXEC[source][cmd] = tick
end)
addEventHandler("onPlayerQuit", root, function()
EXEC[source] = nil
end)
See Also
Player events
- onPlayerACInfo
- onPlayerBan
- onPlayerChangeNick
- onPlayerChat
- onPlayerClick
- onPlayerCommand
- onPlayerConnect
- onPlayerContact
- onPlayerDamage
- onPlayerJoin
- onPlayerLogin
- onPlayerLogout
- onPlayerMarkerHit
- onPlayerMarkerLeave
- onPlayerModInfo
- onPlayerMute
- onPlayerNetworkStatus
- onPlayerPickupHit
- onPlayerPickupLeave
- onPlayerPickupUse
- onPlayerPrivateMessage
- onPlayerQuit
- onPlayerScreenShot
- onPlayerSpawn
- onPlayerStealthKill
- onPlayerTarget
- onPlayerUnmute
- onPlayerVehicleEnter
- onPlayerVehicleExit
- onPlayerVoiceStart
- onPlayerVoiceStop
- onPlayerWasted
- onPlayerWeaponFire
- onPlayerWeaponSwitch
Event functions
- addEvent
- addEventHandler
- cancelEvent
- cancelLatentEvent
- getEventHandlers
- getLatentEventHandles
- getLatentEventStatus
- removeEventHandler
- triggerEvent
- wasEventCancelled