skills/vrp-framework/SKILL.md
Develops resources for FiveM using vRP Creative Network with Lua. Covers Proxy/Tunnel system, Passport/Source/Datatable, inventory, money, groups, identity, database (oxmysql), events, and vRPEX compatibility. Use when the user works with vRP, Creative Network, vRPEX, Proxy, Tunnel, Passport, or any vRP server-side/client-side API.
npx skillsauth add proelias7/fivem-skill vrp-frameworkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
vRP Creative Network is based on Lua 5.4 with communication via Proxy (server-to-server) and Tunnel (client-server).
Older versions maintain the same logic and best practices but change function and file names.
camelCase, modules/group.lua, configs in config/*.lua.getUserId, getUserSource, getUsers, etc.) and configs in cfg/*.lua.See the full mapping in reference.md.
| Concept | Description |
|---|---|
| Passport | Unique character ID (equivalent to user_id in other vRPs) |
| Source | Player connection ID on the server (changes on every reconnection) |
| Datatable | In-memory table with character data (inventory, position, skin, etc.) |
| Characters | Global server-side table indexed by source with character data |
| Sources | Global table Sources[Passport] = source for reverse lookup |
-- Server-side: get Passport from source
local Passport = vRP.Passport(source)
-- Server-side: get source from Passport
local source = vRP.Source(Passport)
-- Server-side: get character Datatable
local Datatable = vRP.Datatable(Passport)
-- Server-side: get inventory
local Inventory = vRP.Inventory(Passport)
-- In any SERVER-SIDE resource, get access to vRP:
local Proxy = module("vrp", "lib/Proxy")
vRP = Proxy.getInterface("vRP")
-- In any CLIENT-SIDE resource:
local Tunnel = module("vrp", "lib/Tunnel")
local Proxy = module("vrp", "lib/Proxy")
vRPS = Tunnel.getInterface("vRP") -- call server functions
-- Expose your resource functions (server):
myResource = {}
Proxy.addInterface("myResource", myResource)
Tunnel.bindInterface("myResource", myResource)
Prefix Tunnel calls with _ to not wait for a response:
-- Await response (blocking)
local result = vRP.Generateitem(Passport,"water",1)
-- Fire-and-forget (non-blocking)
vRP._Generateitem(Passport,"water",1)
| Function | Parameters | Return | Description |
|--------|------------|---------|-----------|
| vRP.Passport(source) | source | Passport|false | Gets player Passport |
| vRP.Source(Passport) | Passport | source|nil | Gets source from Passport |
| vRP.Datatable(Passport) | Passport | table|false | Character in-memory data |
| vRP.Inventory(Passport) | Passport | table | Character inventory |
| vRP.Identity(Passport) | Passport | table|false | Character data (name, name2, bank, phone, etc.) |
| vRP.FullName(source) | source | string|false | Character full name |
| vRP.Players() | — | table | Returns Sources (Passport→source) |
| vRP.Kick(source, Reason) | source, string | — | Kicks the player |
| vRP.Teleport(source, x, y, z) | source, coords | — | Teleports the player |
| vRP.GetEntityCoords(source) | source | vector3 | Player coordinates |
| vRP.ModelPlayer(source) | source | string | Ped model (mp_m/mp_f) |
| Function | Parameters | Return | Description |
|--------|------------|---------|-----------|
| vRP.GetBank(source) | source | number | Bank balance |
| vRP.GiveBank(Passport, Amount) | Passport, number | — | Adds money to bank |
| vRP.RemoveBank(Passport, Amount) | Passport, number | — | Removes money from bank |
| vRP.PaymentBank(Passport, Amount) | Passport, number | bool | Pays with bank (checks balance) |
| vRP.PaymentMoney(Passport, Amount) | Passport, number | bool | Pays with cash |
| vRP.PaymentFull(Passport, Amount) | Passport, number | bool | Tries cash, then bank |
| vRP.PaymentDirty(Passport, Amount) | Passport, number | bool | Pays with dirty money |
| vRP.WithdrawCash(Passport, Amount) | Passport, number | bool | Bank withdrawal |
| vRP.PaymentGems(Passport, Amount) | Passport, number | bool | Pays with gems |
| vRP.GetCoins(Passport) | Passport | number | Gets coins |
| vRP.AddCoins(Passport, Amount) | Passport, number | bool | Adds coins |
| vRP.RemCoins(Passport, Amount) | Passport, number | bool | Removes coins |
| Function | Parameters | Return | Description |
|--------|------------|---------|-----------|
| vRP.GiveItem(Passport, Item, Amount, Notify, Slot) | ... | — | Gives item (no durability) |
| vRP.GenerateItem(Passport, Item, Amount, Notify, Slot) | ... | — | Gives item (with durability/charges) |
| vRP.TakeItem(Passport, Item, Amount, Notify, Slot) | ... | bool | Removes item (returns success) |
| vRP.RemoveItem(Passport, Item, Amount, Notify) | ... | — | Removes item (no return) |
| vRP.ItemAmount(Passport, Item) | Passport, string | number | Item amount |
| vRP.ConsultItem(Passport, Item, Amount) | ... | bool | Checks if has amount |
| vRP.InventoryWeight(Passport) | Passport | number | Current weight |
| vRP.GetWeight(Passport) | Passport | number | Max weight |
| vRP.SetWeight(Passport, Amount) | Passport, number | — | Adds to max weight |
| vRP.MaxItens(Passport, Item, Amount) | ... | bool | Checks item max limit |
| vRP.ClearInventory(Passport) | Passport | — | Clears inventory |
| Function | Parameters | Return | Description |
|--------|------------|---------|-----------|
| vRP.HasPermission(Passport, Permission, Level) | ... | bool | Checks direct permission |
| vRP.HasGroup(Passport, Permission, Level) | ... | bool | Checks group (includes parents) |
| vRP.HasService(Passport, Permission) | ... | bool | Checks if in service |
| vRP.SetPermission(Passport, Permission, Level, Mode) | ... | — | Sets permission |
| vRP.RemovePermission(Passport, Permission) | ... | — | Removes permission |
| vRP.ServiceToggle(Source, Passport, Permission, Silenced) | ... | — | Toggles service |
| vRP.NumPermission(Permission, Level) | ... | table, number | Players in service |
| vRP.CheckGroup(Passport, Type) | ... | bool | Checks group by type |
| vRP.HasAction(Passport) | Passport | bool | Checks police action |
| vRP.SetAction(Passport, Status) | ... | — | Sets action status |
| Function | Parameters | Description |
|--------|------------|-----------|
| vRP.UpgradeHunger(Passport, Amount) | ... | Increases hunger |
| vRP.DowngradeHunger(Passport, Amount) | ... | Decreases hunger |
| vRP.UpgradeThirst(Passport, Amount) | ... | Increases thirst |
| vRP.DowngradeThirst(Passport, Amount) | ... | Decreases thirst |
| vRP.UpgradeInfection(Passport, Amount) | ... | Increases infection |
| vRP.DowngradeInfection(Passport, Amount) | ... | Decreases infection |
| vRP.Revive(source, Health) | ... | Revives player |
-- Register prepared query
vRP.Prepare("name/query", "SELECT * FROM table WHERE id = @id")
-- Execute query
local result = vRP.Query("name/query", { id = 123 })
Uses oxmysql internally. Parameters with @name.
-- Server Data (entitydata — global data)
local data = vRP.GetSrvData("UniqueKey")
vRP.SetSrvData("UniqueKey", { field = "value" })
-- Player Data (playerdata — data per player)
local data = vRP.UserData(Passport, "key")
vRP.setUData(Passport, "key", json.encode(data))
| Function | Description |
|--------|-----------|
| parseInt(value) | Converts to integer (min. 0) |
| parseFormat(value) | Formats number with thousand separator |
| splitString(str, symbol) | Splits string by separator |
| SplitOne(name) | First element of split |
| sanitizeString(str, chars, allow) | Filters characters |
| CompleteTimers(seconds) | Formats full time in HTML |
| MinimalTimers(seconds) | Formats summarized time |
| CountTable(table) | Counts items in table |
| async(func) | Executes asynchronous function |
-- Server-side: simple notification
TriggerClientEvent("Notify", source, "success", "Message.", false, 5000)
-- Types: "success", "important", "negado" (denied)
-- Server-side: item notification
TriggerClientEvent("NotifyItens", source, { "+", "itemIndex", "amount", "Item Name" })
-- "+" for gain, "-" for loss
| Event | Side | Description |
|--------|------|-----------|
| "Connect" | Server | Player chose character (Passport, Source) |
| "Disconnect" | Server | Player disconnected (Passport, Source) |
| "CharacterChosen" | Server | Character chosen (Passport, source) |
| "vRP:Active" | Client | Player activated (source, Passport, Name) |
The vRP Creative Network has compatibility aliases with classic vRP:
| vRPex (old) | Creative Network (current) |
|----------------|--------------------------|
| getUserId | Passport |
| getUserSource | Source |
| getUserIdentity | Identity |
| getUserDataTable | Datatable |
| hasGroup | HasGroup |
| hasPermission | HasPermission |
| giveInventoryItem | GiveItem |
| tryGetInventoryItem | TakeItem |
| getInventoryItemAmount | ItemAmount |
| giveMoney | GiveBank |
| tryFullPayment | PaymentFull |
| getBankMoney | GetBank |
| query / execute | Query |
| prepare | Prepare |
ALWAYS use the native Creative Network names (right column), not the aliases.
fivem-developmentfivem-react-nuidevelopment
Develops resources for FiveM using the Qbox Project (qbx_core). Covers the exports-based API, bridge compatibility, Ox integration (ox_lib, ox_inventory), and best practices. Use when the user works with FiveM, Qbox, qbx_core, or mentions `exports.qbx_core`, `QBX.PlayerData`, or `ox_lib`.
development
Develops resources for FiveM using the QBCore Framework. Covers resource creation, Core Object usage, Player management, Callbacks, Events, Items, Jobs, Gangs, Database (oxmysql), and best practices. Use when the user works with FiveM, QBCore, Lua scripts for QBCore servers, or mentions `QBCore.Functions`, `GetCoreObject`, `CitizenID`, or any system of the QBCore Framework.
development
Builds NUI interfaces for FiveM using React 18 + TypeScript + Vite + Tailwind CSS v3 + Zustand. Use when the user mentions NUI, interface, UI, menu, HUD, panel, overlay, React, Vite, Tailwind, or any in-game interface for FiveM — regardless of the backend framework (vRP, QBCore, Qbox, ESX). Covers project structure, FiveM CEF restrictions, observe/Post hooks, VisibilityProvider, animations, dynamic config/theme, and performance rules.
tools
FiveM development best practices for any framework (vRP, QBCore, Qbox, ESX). Covers performance, security, client/server communication, cache (cacheaside), anti-exploit (cerberus), asset discovery, framework auto-detection, and dynamic documentation fetching. Use when the user works with FiveM, Lua scripts, natives, resources, fxmanifest, optimization, or general server development without a specific framework context.