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.
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
| Resource | Pulled in by | Needed for |
|---|---|---|
| vorp_core | @vorp_core/client/dataview.lua in client_scripts | The framework, your characters, the character limit per player |
| oxmysql | @oxmysql/lib/MySQL.lua in server_scripts | Partners, 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
| Resource | Needed for |
|---|---|
| vorp_menu | The character creator and the clothing menus |
| vorp_inputs | The text boxes inside those menus |
| weathersync | Weather 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
| Resource | Needed for |
|---|---|
| vorp_inventory | Starter 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
Back up your current
vorp_characterfolder. 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.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.Check the start order in
server.cfg. Everything this resource reads from has to be above it:cfgensure oxmysql ensure vorp_core ensure vorp_menu ensure vorp_inputs ensure weathersync ensure vorp_characterIf you use a
[vorp]bracket folder with oneensureline for the lot, the load order inside it is not guaranteed — givevorp_characterits ownensureline after the bracket.Move your old settings across, setting by setting, from the backup you took in step 1. Do not drop your old
config.luaon top of the new one: the new copy carries the 11 built-in locations and the fields the selection screen reads.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:
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.
| Table | Created when | Holds |
|---|---|---|
character_partners | ConfigSelector.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_playtime | ConfigSelector.Playtime.enabled is true (the default) | charidentifier, seconds, lastlogin |
vorp_character_scenes | ConfigCreator.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
| Check | Expected |
|---|---|
| Resource started | No red lines naming vorp_character in the server console |
| Tables created | No oxmysql errors naming character_partners, character_playtime or vorp_character_scenes |
| The screen opens | Your characters stand in a real place and the camera glides between them |
| Weather applies | The location's own weather and time, not whatever the server had running |
| Keys respond | E changes pose, J changes location, O opens Settings |
| Your characters are there | Every character you had before this install, in its own slot |
| The creator still works | An empty slot plus Enter opens the VORP character creator |
| Clothing stores still work | Walk into a shop and the vorp_menu store opens as before |
Two in-game commands do the rest:
/selectordumpprints 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.
/selectordebugswitches 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.
| Kept | Where it lives now |
|---|---|
| Your characters | VORP's own tables, read through vorp_core |
| The character creator | client/createCharacter.lua and client/creator_functions.lua, still driven by vorp_menu and vorp_inputs |
| Clothing stores | config_shops.lua, unchanged |
| Outfits | The same VORP callbacks, and the same OpenOutfitsMenu export |
| Clothing commands | /dress, /undress, /sleeves, /sleeves2, /tuck, /ringsL, /ringsR, /bandanaon |
| The reload command | Config.ReloadCharCommand, which ships as rc |
| Creator and store translations | shared/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:
-- config_selector.lua
ConfigSelector.Enabled = falseThat 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:
-- 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 work | Where |
|---|---|
Locations, Lang, creator settings, DevMode | config.lua |
| Selection screen, camera, partner system, keys, locales | config_selector.lua |
| Scenes exported from the Scene Creator | config_scenes.lua |
| Scene Creator settings, limits, seat models | config_scenecreator.lua |
| Solo and duo poses | animations.lua |
| The Scene Creator's pose browser | config_emotes.lua — see Emote library |
| Clothing stores | config_shops.lua |
| The deleted-character webhook | logs.lua |
| Partner pose editor saves | partner_poses.json in the resource folder |
| Scenes, partners, playtime | The database. An update does not touch it |
| Per-player settings | Each player's own PC. An update does not touch them either |
Copy those files out of the running
vorp_character.Replace the folder with the new version, keeping the name.
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.
Restart, then run
/selectordumpand 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
| Mistake | Symptom | Fix |
|---|---|---|
| Folder renamed | Other resources' exports['vorp_character'] calls fail; outfit and clothing scripts break | Rename it back to vorp_character |
oxmysql or vorp_core below it in server.cfg | Load error naming the @-referenced file; the resource never starts | Put both above ensure vorp_character |
| weathersync missing or late | The screen opens with the server's weather and time, or does not open | Start weathersync before vorp_character |
| vorp_menu or vorp_inputs missing | The selection screen works, the creator and the clothing stores do not | Install both; they are not optional in practice |
| Two folders claiming the name | One of them loses, unpredictably | Only one folder in resources may be named vorp_character |
| Hunting for an SQL file | Nothing to import, so nothing is found | There is no SQL file. The three tables create themselves on first start |
| Old config dropped on top of the new one | Locations vanish, or settings the code reads are missing | Merge setting by setting instead |
More symptoms, causes and fixes on Troubleshooting.
Next
| Page | What's in it |
|---|---|
| Player guide | Every key and panel, written to hand to your players |
| Configuration | config_selector.lua setting by setting |
| Locations | The 13 shipped locations and how one is picked |
| Poses | The solo list players cycle with E, and the duo lists |
| Partner system | Pairing two characters as a couple or as friends |
| Scene Creator | Building your own locations in game |
| Database | The three tables, the KVP settings and partner_poses.json |
| Developer API | The three exports |
Support: https://discord.gg/w4Ew4k3Exn. Run /selectordump first and paste its output — it answers most of what anyone would ask you.