Skip to content

Installing the VORP Multicharacter Selector ​

This resource is vorp_character. It is the stock VORP character resource with a cinematic selection screen, a partner system and an in-game Scene Creator built on top, so installing it means replacing the folder you already have rather than adding a new one.

VORP oxmysql Replaces vorp_character Fully open

Developed and tested on RedM build b1491. fx_version 'cerulean', game 'rdr3', lua54 'yes', version 1.0.0.

Requirements ​

Hard, and pulled in by the manifest itself ​

ResourcePulled in byNeeded for
vorp_core@vorp_core/client/dataview.lua in client_scriptsThe framework, your characters, the character limit per player
oxmysql@oxmysql/lib/MySQL.lua in server_scriptsPartners, playtime and saved scenes

Those two are @-references in fxmanifest.lua, which means the server reads a file out of each of them while loading this resource. Neither is optional and neither can start later.

Needed in practice ​

ResourceNeeded for
vorp_menuThe character creator and the clothing menus
vorp_inputsThe text boxes inside those menus
weathersyncWeather and time on the selection screen

The selection screen itself is an HTML page and does not need vorp_menu — but the creator you reach from an empty slot does, and so does every clothing store. Treat all three as required.

Optional ​

ResourceNeeded for
vorp_inventoryStarter items and starter weapons only. ConfigSelector.StarterItems ships as water x2 and bread x2, and StarterWeapons ships as false

There is no dependency block, so a missing requirement is a load error

fxmanifest.lua has no dependency block. A requirement that is absent or starts too late does not produce a readable message naming it — you get a Lua load error on the @-referenced file instead, and the resource simply does not come up.

Read the first red line after vorp_character starts. It names the file it could not read, which tells you which of the two hard requirements is missing.

New to the framework itself? See VORP.

Install ​

  1. Back up your current vorp_character folder. The whole folder, not just the config files — it is the thing you fall back to, and you will want to diff against it in step 4.

  2. Replace it with this one. Keep the folder name exactly vorp_character. Nothing else, and nothing with a suffix. The next section is what breaks if you rename it.

  3. Check the start order in server.cfg. Everything this resource reads from has to be above it:

    cfg
    ensure oxmysql
    ensure vorp_core
    ensure vorp_menu
    ensure vorp_inputs
    ensure weathersync
    ensure vorp_character

    If you use a [vorp] bracket folder with one ensure line for the lot, the load order inside it is not guaranteed — give vorp_character its own ensure line after the bracket.

  4. Move your old settings across, setting by setting, from the backup you took in step 1. Do not drop your old config.lua on top of the new one: the new copy carries the 11 built-in locations and the fields the selection screen reads.

  5. Restart the server and connect. You should get the cinematic screen rather than the vorp_menu character list.

There is no SQL file to import. The three tables create themselves — see The database below.

Existing characters are untouched. They are read out of VORP's own tables through vorp_core, and nothing in this resource migrates or rewrites them.

Why the folder name matters ​

On a RedM server a resource's name is its folder name. Other VORP resources reach into this one by that name:

lua
exports['vorp_character']:GetAllPlayerComponents()
exports['vorp_character']:GetPlayerComponent(category)
exports['vorp_character']:OpenOutfitsMenu(source)

Rename the folder to vorp_character_selector and every call like that fails in whichever resource made it — usually a clothing shop, a bathing script or a job that checks what the player is wearing. Those resources break, not this one, which makes the cause hard to find later.

fxmanifest.lua says name 'vorp character', with a space

That is the name metadata field. It is a human-readable label for server browsers and tooling, not the resource name. The ensure line and every exports[...] lookup follow the folder. Leave the field as it is.

New Lua files load themselves; new HTML files do not

client_scripts uses client/*.lua and server_scripts uses server/*.lua, so a file you add to either folder loads without touching the manifest. Files under html/ are listed one by one in the files block, so anything you add there needs a line of its own. A new button plate needs both that line and a row in ConfigSelector.ButtonSkins.

The database ​

Three tables, all created with CREATE TABLE IF NOT EXISTS while the resource starts. Running a second start changes nothing.

TableCreated whenHolds
character_partnersConfigSelector.Partner.enabled is true (the default)char_a and char_b, each with a unique key — so one partner per character — and type, either lover or friend
character_playtimeConfigSelector.Playtime.enabled is true (the default)charidentifier, seconds, lastlogin
vorp_character_scenesConfigCreator.Enabled is true (the default)Scenes saved in the Scene Creator — name, enabled for the LIVE switch, data as JSON, updatedby, updatedat

The third name comes from ConfigCreator.Table, so if you change that setting the table created takes the new name and the old one is left behind with its rows in it.

A table that cannot be created switches its feature off instead of erroring

Each CREATE is wrapped. If one fails, the server prints a single red line naming the table and sets that feature's own enabled to false for the rest of the session. The selection screen still opens — without playtime on the cards, without the partner panel, or without saved scenes.

That is worth knowing because the symptom is a missing feature, not a crash, and the only evidence is one line near the top of the start-up log.

Your characters are in none of these three. Neither are player settings, which live in client-side KVP on each player's own PC, or the partner pose editor's saves, which live in partner_poses.json in the resource folder. The full picture is on Database.

Checking it worked ​

CheckExpected
Resource startedNo red lines naming vorp_character in the server console
Tables createdNo oxmysql errors naming character_partners, character_playtime or vorp_character_scenes
The screen opensYour characters stand in a real place and the camera glides between them
Weather appliesThe location's own weather and time, not whatever the server had running
Keys respondE changes pose, J changes location, O opens Settings
Your characters are thereEvery character you had before this install, in its own slot
The creator still worksAn empty slot plus Enter opens the VORP character creator
Clothing stores still workWalk into a shop and the vorp_menu store opens as before

Two in-game commands do the rest:

text
/selectordump

prints the selector's whole state — config, the loaded scene, player settings, characters, partner state, the Scene Creator, and which natives this RedM build actually exposes. It is the single most useful thing to run before opening a ticket.

text
/selectordebug

switches client and server logging together. The server half needs the admin group; from the server console, selectordebug on does the same thing without it.

A different place every time you open the screen is correct

The server picks one location at random each time the screen opens. There are 13 shipped — 11 in config.lua and 2 in config_scenes.lua — plus any Scene Creator scenes you have switched LIVE. Opening the screen twice and landing in two different towns is the feature working. See Locations.

What carries over from stock vorp_character ​

Everything the stock resource did, it still does. The selector is added alongside, not in place of.

KeptWhere it lives now
Your charactersVORP's own tables, read through vorp_core
The character creatorclient/createCharacter.lua and client/creator_functions.lua, still driven by vorp_menu and vorp_inputs
Clothing storesconfig_shops.lua, unchanged
OutfitsThe same VORP callbacks, and the same OpenOutfitsMenu export
Clothing commands/dress, /undress, /sleeves, /sleeves2, /tuck, /ringsL, /ringsR, /bandanaon
The reload commandConfig.ReloadCharCommand, which ships as rc
Creator and store translationsshared/translation.lua, chosen by Lang in config.lua

Note the split in how text is translated. The creator and the stores use VORP's original shared/translation.lua and follow Lang. The selection screen has its own 7 locales in ConfigSelector.Locales and its own language setting, which players can change for themselves. See Languages.

Turning the new screen off ​

One line brings back the original vorp_menu character list:

lua
-- config_selector.lua
ConfigSelector.Enabled = false

That is genuinely all that is required. client/client.lua calls OpenSelectorUI() when the setting is true and OpenMenuSelect() — the original list — when it is not. Characters, the creator, the shops, the outfits and the clothing commands all keep working.

fxmanifest.lua carries a second, optional step next to the NUI page:

lua
-- NUI character selector. To use the vorp_menu selector, remove this line and set ConfigSelector.Enabled = false.
ui_page 'html/index.html'

Removing that line stops the page being registered at all, which saves the client loading it.

Removing ui_page also removes the Scene Creator

One HTML page hosts both the selection screen and the Scene Creator panel. Delete the ui_page line and /scenecreator has no interface to open, whatever ConfigCreator.Enabled says — so set ConfigCreator.Enabled = false at the same time, or leave ui_page in place and change only ConfigSelector.Enabled.

Leaving ui_page alone is the safer of the two. It costs one page load and keeps the selector one setting away from being switched back on.

Updating the script ​

Your work lives in a known set of places. Nothing else in the folder is yours.

Your workWhere
Locations, Lang, creator settings, DevModeconfig.lua
Selection screen, camera, partner system, keys, localesconfig_selector.lua
Scenes exported from the Scene Creatorconfig_scenes.lua
Scene Creator settings, limits, seat modelsconfig_scenecreator.lua
Solo and duo posesanimations.lua
The Scene Creator's pose browserconfig_emotes.lua — see Emote library
Clothing storesconfig_shops.lua
The deleted-character webhooklogs.lua
Partner pose editor savespartner_poses.json in the resource folder
Scenes, partners, playtimeThe database. An update does not touch it
Per-player settingsEach player's own PC. An update does not touch them either
  1. Copy those files out of the running vorp_character.

  2. Replace the folder with the new version, keeping the name.

  3. Merge your settings in rather than dropping the old files in whole. A new version can add keys your old file does not have, and a file missing a key the code now reads is harder to diagnose than a setting you forgot to carry over.

  4. Restart, then run /selectordump and check the numbers against what you expect.

Nothing here is escrowed, so a diff is a real diff

escrow_ignore in fxmanifest.lua covers '*' and '**/*', with the comment "Fully open: Asset Escrow encrypts nothing in this resource." Every Lua file, the HTML page and both stylesheets are readable and editable.

That cuts both ways on an update. You can diff the new version against your copy line by line — and any change you made outside the files in the table above will be overwritten. Keep the folder in version control if you have edited the code.

Common install mistakes ​

MistakeSymptomFix
Folder renamedOther resources' exports['vorp_character'] calls fail; outfit and clothing scripts breakRename it back to vorp_character
oxmysql or vorp_core below it in server.cfgLoad error naming the @-referenced file; the resource never startsPut both above ensure vorp_character
weathersync missing or lateThe screen opens with the server's weather and time, or does not openStart weathersync before vorp_character
vorp_menu or vorp_inputs missingThe selection screen works, the creator and the clothing stores do notInstall both; they are not optional in practice
Two folders claiming the nameOne of them loses, unpredictablyOnly one folder in resources may be named vorp_character
Hunting for an SQL fileNothing to import, so nothing is foundThere is no SQL file. The three tables create themselves on first start
Old config dropped on top of the new oneLocations vanish, or settings the code reads are missingMerge setting by setting instead

More symptoms, causes and fixes on Troubleshooting.

Next ​

PageWhat's in it
Player guideEvery key and panel, written to hand to your players
Configurationconfig_selector.lua setting by setting
LocationsThe 13 shipped locations and how one is picked
PosesThe solo list players cycle with E, and the duo lists
Partner systemPairing two characters as a couple or as friends
Scene CreatorBuilding your own locations in game
DatabaseThe three tables, the KVP settings and partner_poses.json
Developer APIThe three exports

Support: https://discord.gg/w4Ew4k3Exn. Run /selectordump first and paste its output — it answers most of what anyone would ask you.

Documentation for RedMorrow. Scripts are licensed per server — redistribution is not permitted.