Skip to main content

Introduction

RSG Framework provides a robust command system that allows you to create custom commands with permission levels, argument validation, and suggestions. Commands can be restricted to specific permission groups like admin, mod, or user. Location: resources/[framework]/rsg-core/server/commands.lua
Commands are automatically registered with FiveM’s native suggestion system, showing available commands and their arguments based on player permissions.

Core Features

🔐 Permission-based Access

  • User: Available to all players
  • Mod: Moderator-only commands
  • Admin: Administrator commands
  • God: Super admin commands

📝 Argument Handling

  • Required/Optional: Control if arguments are mandatory
  • Help Text: Descriptions shown in suggestions
  • Type Validation: Validate argument types in callbacks

⚡ Auto-completion

  • Dynamic Suggestions: Commands show based on permissions
  • Argument Hints: Display help text for each argument
  • Refresh System: Update suggestions when permissions change

Creating Commands

RSGCore.Commands.Add

This function allows you to register a command with a specified user level
RSGCore.Commands.Add(name, help, arguments, argsrequired, callback, permission, ...)
  • name: string
  • help: string
  • arguments: table
  • argsrequired: boolean
  • callback: function
  • permission: string
Example:
local arguments = {
    { name = 'arg 1', help = 'This will give helpful hints on what arg is for' },
    { name = 'arg 2', help = 'This will give helpful hints on what arg is for' }
}

local argsRequired = true -- if this is true the command won't work without args entered

RSGCore.Commands.Add('test', 'Trigger a test command', arguments, argsRequired, function(source)
    print('Congrats, you made a test command that anyone can trigger!')
end, 'user')

RSGCore.Commands.Refresh

This function will trigger a refresh of all commands suggestions. This is helpful for when setting permissions to a higher level, it will refresh the suggestions list so the player can now see the new commands they have access to!
RSGCore.Commands.Refresh(source)
  • source: number
Example:
RegisterCommand('refreshCommands', function()
    RSGCore.Commands.Refresh(source)
    print('You have refreshed all command suggestions for yourself')
end, true)

Practical Examples

Example 1: Basic User Command

-- Simple command any player can use
RSGCore.Commands.Add('mycoords', 'Get your current coordinates', {}, false, function(source)
    local src = source
    local ped = GetPlayerPed(src)
    local coords = GetEntityCoords(ped)

    TriggerClientEvent('ox_lib:notify', src, {
        title = 'Coordinates',
        description = string.format('X: %.2f Y: %.2f Z: %.2f', coords.x, coords.y, coords.z),
        type = 'inform'
    })
end, 'user')

Example 2: Admin Command with Arguments

-- Give item to player
local arguments = {
    { name = 'id', help = 'Player ID to give item to' },
    { name = 'item', help = 'Item name from shared/items.lua' },
    { name = 'amount', help = 'Amount to give (default: 1)' }
}

RSGCore.Commands.Add('giveitem', 'Give an item to a player', arguments, true, function(source, args)
    local targetId = tonumber(args[1])
    local itemName = args[2]
    local amount = tonumber(args[3]) or 1

    local Player = RSGCore.Functions.GetPlayer(targetId)
    if not Player then
        TriggerClientEvent('ox_lib:notify', source, {
            description = 'Player not found',
            type = 'error'
        })
        return
    end

    if exports['rsg-inventory']:AddItem(targetId, itemName, amount) then
        TriggerClientEvent('ox_lib:notify', source, {
            description = 'Gave '.. amount ..'x '.. itemName ..' to player '.. targetId,
            type = 'success'
        })
    end
end, 'admin')

Example 3: Command with Optional Arguments

-- Heal command - heal yourself or another player
local arguments = {
    { name = 'id', help = 'Player ID (optional, heals yourself if empty)' }
}

RSGCore.Commands.Add('heal', 'Heal yourself or another player', arguments, false, function(source, args)
    local targetId = tonumber(args[1]) or source
    local targetPed = GetPlayerPed(targetId)

    if not targetPed or targetPed == 0 then
        TriggerClientEvent('ox_lib:notify', source, {
            description = 'Invalid player',
            type = 'error'
        })
        return
    end

    -- Heal the player
    local Player = RSGCore.Functions.GetPlayer(targetId)
    if Player then
        Player.Functions.SetMetaData('isdead', false)
        Player.Functions.SetMetaData('hunger', 100)
        Player.Functions.SetMetaData('thirst', 100)

        TriggerClientEvent('rsg-player:client:heal', targetId)

        TriggerClientEvent('ox_lib:notify', source, {
            description = targetId == source and 'You have been healed' or 'Player '.. targetId ..' has been healed',
            type = 'success'
        })
    end
end, 'admin')

Built-in Commands

AdminMenu

Teleports you to either a player with the given id or to a given x, y, z locationPermission level: admin
  • id or x - (required) The player id or x coordinate
  • y - (optional) The y coordinate (required if using x for the first argument)
  • z - (optional) The z coordinate (required if using x for the first argument)
Teleports you to the marked location on the map.Permission level: admin
Allows you to fly around the map.Permission level: admin
Toggles Player vs Player mode on the serverPermission level: admin
Toggles Player vs Player mode on the serverPermission level: admin
Removes the given permission from the player with the given id. The player must be online.Permission level: god
Opens the server allowing everyone to join.Permission level: admin
Closes the server for people without the correct permission. Kicks any players currently online without the required permission giving the reason in the kick message.Permission level: admin
Spawns a wagon of the given model type.Permission level: admin
Spawns a wagon of the given model type.Permission level: admin
Deletes the vehicle you are sitting in or deletes all vehicles within 5.0 units of your position.Permission level: admin
Gives money to a playerPermission level: admin
  • id - (required) The id of the player
  • type - (required) The money type [cash, bank etc…]
  • amount - (required) The amount to give
Sets the amount of money a player has.Permission level: admin
  • id - (required) The id of the player
  • type - (required) The money type [cash, bank etc…]
  • amount - (required) The amount to set
Displays your current job name and gradePermission level: user
Displays your current job name and gradePermission level: user
Displays your current gang name and gradePermission level: user
Sets a player with the given id to be part of the given gang with the given gradePermission level: admin
  • id - (required) The id of the player
  • gang - (required) The gang name
  • grade (required) The gang grade
Sets a player with the given id to be part of the given gang with the given gradePermission level: admin
  • id - (required) The id of the player
  • gang - (required) The gang name
  • grade (required) The gang grade
Give An Item to playerPermission level: admin
  • id - The id of a player
  • item - The itenm of shared/items.lua
  • amount - (optional) The amount item receive of a player
Give Random ItemsPermission level: god
Reset the inventory of type and id/plate (ID of stash or license plate)
  • type - The type of stash / trunk / glovebox
  • id - The id of stash or license plate
Permission level: admin
Notify you of your server IDPermission level: user
Notify you of your citizen IDPermission level: user
Stealing between players, when the target has his hands raisedPermission level: user
Refresh Skin playerPermission level: user
Access to the menu of components, materials and engravingsPermission level: admin
Access to the info of weaponPermission level: admin
Refresh Skin wepaon playerPermission level: user
Opens Address book for playerPermission level: user

Best Practices

Use Clear Names: Command names should be short but descriptive
  • Good: giveitem, setjob, tpm
  • Bad: gi, sj, thing
Always Validate Input: Never trust user input - always validate arguments
RSGCore.Commands.Add('setcash', 'Set player cash', arguments, true, function(source, args)
    local amount = tonumber(args[1])
    if not amount or amount < 0 or amount > 1000000 then
        TriggerClientEvent('ox_lib:notify', source, {
            description = 'Invalid amount',
            type = 'error'
        })
        return
    end
    -- Process valid amount
end, 'admin')
Provide Helpful Arguments: Good help text makes commands easier to use
local arguments = {
    { name = 'id', help = 'Target player server ID (1-255)' },
    { name = 'amount', help = 'Dollar amount (max: 100000)' }
}

Permission Levels

When choosing permission levels, follow these guidelines:
LevelUse For
userSafe commands any player can use (view own data, cosmetic)
modCommands that affect other players but not severely
adminCommands that modify game state, spawn items, teleport
godDangerous commands that can break things or affect all players

Next Steps


Need help? Join the RSG Framework Discord!