VORP
VORP is the most widely used RedM framework. If you are building a new RedM roleplay server, this is the safe default — it has the largest community and the widest third-party script support.
Core resources
VORP is modular — the core alone does not give you a playable server. A typical install includes:
| Resource | Purpose | Required? |
|---|---|---|
vorp_core | Players, characters, money, jobs | Yes |
vorp_utils | Shared helpers other VORP resources call | Yes |
vorp_character | Character creation and selection | Yes in practice |
vorp_inventory | Items, weapons, storage | Most scripts assume it |
vorp_menu | Shared menu UI | Common dependency |
vorp_metabolism | Hunger, thirst, stamina | Optional |
vorp_hud | On-screen status display | Optional |
Check each script's README for exactly which of these it needs — most economy scripts require vorp_inventory, and many UI-driven scripts require vorp_menu.
Load order
ensure oxmysql
ensure vorp_core
ensure vorp_utils
ensure vorp_inventory
ensure vorp_character
ensure vorp_menu
# RedMorrow resources after all of the above
ensure redm_shops
ensure vorp_phoneoxmysql before vorp_core before everything else is the rule that matters. Getting it wrong produces attempt to index a nil value at boot.
Database
VORP uses oxmysql in current versions. Older builds shipped against ghmattimysql — if you are running an old server and a new script, this mismatch is worth checking, since a script written for oxmysql will not find its database layer.
Set your connection string in server.cfg before starting anything:
set mysql_connection_string "mysql://user:password@localhost/vorp?charset=utf8mb4"See Database & SQL for importing script tables.
Talking to VORP from a script
The long-standing server-side pattern for obtaining the core object is an event callback rather than an export:
local VorpCore = {}
TriggerEvent("getCore", function(core)
VorpCore = core
end)The inventory API is exposed as an export:
local VorpInv = exports.vorp_inventory:vorp_inventoryApi()And a player's active character is reached through the core:
local User = VorpCore.getUser(source)
local Character = User.getUsedCharacter
-- Character.firstname, Character.lastname, Character.money, Character.job ...Verify against your version
VORP is actively developed and its API has changed across major versions. The patterns above are the widely used ones, but before writing integration code against them, confirm the exact names in the vorp_core version you actually run. A script failing on a call that "should" exist is usually a version gap, not a bug.
Common VORP problems
Money or job shows as nil — the character was not loaded yet when the script asked. This is normal for a few seconds after a player connects; scripts should wait for the character-selected event rather than reading on spawn.
Inventory items do not register — items must exist in VORP's items table before a script can give them. Importing a script's .sql usually handles this; if it does not, the item names in the script config must match the item names in the database exactly.
A script works on one VORP server and not another — almost always a core version difference. Compare vorp_core versions before anything else.
Getting VORP
VORP is free and open source, maintained by the VORP team on GitHub. Install the core from the official repositories rather than a redistributed copy — bundled copies inside script downloads are often outdated.
Once it is running, see Install Your First Script to add resources on top of it.