RSG Framework
Core

Commands

Complete guide to creating and using commands in RSG Framework

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


Best Practices

Tip

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!

On this page