Skip to content

Multicharacter Selector FAQ ​

Before you buy ​

Does it replace vorp_character? ​

Yes. This is vorp_character — a drop-in replacement for the stock VORP resource of that name, carrying its character creator, clothing stores and outfits forward unchanged. You back up your current folder and put this one in its place.

Keep the folder name vorp_character. Other VORP resources call it by that name.

Do my existing characters survive? ​

Yes. Characters are read from VORP's own tables through vorp_core, exactly as before. Nothing in this resource rewrites or migrates them.

What it adds is three tables of its own — pairings, playtime and saved scenes — which sit alongside VORP's data rather than inside it. See Database.

Do I need to import SQL? ​

No. All three tables are created with CREATE TABLE IF NOT EXISTS on the first start. There is no .sql file in the download.

What do I need running? ​

The requirements come in three tiers.

ResourceNeeded for
Hardvorp_coreThe framework, characters, and the character limit per player
HardoxmysqlPlaytime, partners and saved scenes
In practicevorp_menuThe character creator and clothing menus
In practicevorp_inputsThe text boxes in those menus
In practiceweathersyncWeather and time on the selection screen
Optionalvorp_inventoryStarter items and starter weapons only

The first two are pulled in by the manifest itself, through @vorp_core/client/dataview.lua and @oxmysql/lib/MySQL.lua. This is a VORP-only resource — see VORP.

There is no dependency block in the manifest

A missing requirement surfaces as a load error in the console rather than a readable message naming what is absent. Start the resource after its requirements and read the first error, not the last.

Is it escrowed? ​

No. Every file in the resource is readable and editable, including all of client/, server/ and shared/. The manifest's escrow_ignore block covers '*' and '**/*', and the comment above it states that Asset Escrow encrypts nothing here.

This is worth stating plainly because it is unusual, and because it differs from the RedMorrow animation packs. Every instruction in this documentation that tells you to change a value is a change you can actually make.

How many locations ship? ​

13.

WhereLocations
config.lua → Config.SpawnPosition11
config_scenes.lua → ConfigScenes.List2

config_scenes.lua is appended to Config.SpawnPosition at load, so the two behave identically to the eleven. Any scene you mark LIVE in the Scene Creator's database is added on top of those. See Locations.

The server picks one location at random each time a player opens the screen.

How many languages are there? ​

Seven, and all seven are complete at 89 keys each:

English, Deutsch, Español, Français, Nederlands, Русский, 日本語.

There is no Italian table and no Romanian table. None of the seven is partial. The dropdown in Settings shows each table's own name. See Languages.

Which RedM build is it tested on? ​

b1491, with fx_version 'cerulean', game 'rdr3' and lua54 'yes'. Version 1.0.0.

Installing it ​

What are the actual steps? ​

  1. Back up your existing vorp_character folder.

  2. Replace it with this one, keeping the folder name:

    cfg
    ensure oxmysql
    ensure vorp_core
    ensure vorp_character
  3. Restart the server. The three tables are created during that start.

  4. Connect and look at the selection screen.

Full detail, including verification, is on Installation.

Can I rename the resource folder? ​

No. Other VORP resources reference vorp_character by name, and the NUI page is served from that resource name.

The manifest carries name 'vorp character' with a space, but that is metadata only — the resource name is the folder name, and the line in your config is ensure vorp_character.

Can I keep the old VORP character list instead? ​

Yes. Set ConfigSelector.Enabled = false and remove the ui_page 'html/index.html' line from the manifest. You then get VORP's original vorp_menu character list, with the creator, shops and outfits still working.

Which files will I actually edit? ​

FileControls
config.luaOriginal VORP settings, Lang, the eleven built-in locations
config_selector.luaThe selection screen — features, camera, keys, partner system, languages
config_scenes.luaLocations exported from the Scene Creator
config_scenecreator.luaThe Scene Creator — permissions, freecam, limits, seats
animations.luaThe solo and duo poses players cycle
config_emotes.luaThe Scene Creator's pose browser

Every setting carries a one-line comment in its own file. See Configuration.

Using it ​

Can players change location and pose? ​

Yes, both, and both are switchable.

KeyDoes
JChange location
EChange pose

E, J, B, H, O and P are all remapped in ConfigSelector.Keys, and the hints drawn on screen follow that table rather than being hardcoded. The chosen pose is remembered per character. See Player guide.

Can two players pair up? ​

Yes. Press P, search by name or server ID, choose Couple or Friend, and send. The other player accepts or declines; a request expires after 60 seconds.

Both players must have the character screen open to find each other — this is a lobby feature, not an in-world one.

Each character can have exactly one partner. The database enforces it with unique keys on both columns of character_partners, so a character cannot be half-paired to two people. Unpair ends it. See Partner system.

Is there a character logout without reconnecting? ​

No, and it is off deliberately. ConfigSelector.Logout.enabled defaults to false because switching character in place needs a logoutCharacter() function in vorp_core's user class, and stock vorp_core does not have one.

The configuration block exists, with a command name and a cooldown, for servers running a patched core. On an unpatched core, leave it off.

Why is my character floating above the ground, or sunk into it? ​

Two separate causes, and it is worth knowing which one you are looking at.

spawn.z is origin level, not foot level. A ped's origin sits roughly 0.9 m above its feet. A z read off the ground and pasted into spawn puts the character's feet 0.9 m underground; a z read from a standing ped and treated as ground level lifts it. Scene Creator positions are already correct; hand-typed ones are where this goes wrong.

Raw animation clips are not grounded by the engine. A clip carries the height of the set it was authored on. Scenario poses cannot float, because the engine places and grounds the ped itself.

The blunt fix for the second cause

lua
ConfigSelector.ScenariosOnly = true

Hides every non-scenario pose at once, for solo and partner poses both. The reasoning is on the emote library.

Do new scenes need a server restart? ​

It depends which way you saved them.

Saved asReaches players
Database, marked LIVEImmediately, no restart
Pasted into config_scenes.luaAfter a restart

LIVE scenes are broadcast by the server and applied on the client through SceneRuntime.Apply, which is why nothing needs restarting.

A scene that is both LIVE and pasted appears twice

If you export a scene into config_scenes.lua and leave the database copy enabled, the rotation holds two of it. Disable one.

Why do my props vanish when I export a scene? ​

Because config_scenes.lua cannot hold them. The export covers the scene's cameras, character slots, poses, weather, time and music, and stops there.

Database (Save + LIVE)Export to config_scenes.lua
Cameras, slots, poses, weather, time, musicYesYes
Props, wagons, NPCsYesNo
Camera travelYesNo

A scene with props or NPCs in it belongs in the database, set LIVE. Export is for scenes made of people and cameras. See Scene Creator.

Can I run the Scene Creator from the selection screen? ​

No. The editor refuses to open while the character screen is up — spawn in first, then /scenecreator. F9 force-closes it, and scenecreatorclose in the F8 console is the fallback if the panel ever gets stuck.

Customising it ​

How many poses does the Scene Creator offer? ​

305, across 12 categories, in config_emotes.lua. They come in three kinds — 51 scenarios, 150 kit emotes and 104 raw clips — and the kind predicts which ones will give you trouble.

The full breakdown, including the 7 poses that need furniture and the 9 written for two people, is on the emote library.

That library is the builder's, not the player's

The poses players cycle with E come from animations.lua, which is a much shorter separate list: the location's own scenarios, plus a global list, plus 20 duo poses for partners — 8 for couples and 12 for friends. Adding a row to config_emotes.lua gives it to whoever is building scenes, not to players. See Poses.

Can I add a language? ​

Yes. Copy the ["English"] table in ConfigSelector.Locales, rename it, and translate the 89 values. The name you give the table is what the dropdown shows, so write it in the language itself.

Keep %s in deleteConfirm — it is replaced by the character's name.

Can I add my own poses to the player list? ​

Yes. animations.lua takes three entry shapes:

lua
{ type = "scenario", id = "smoke", scenario = "WORLD_HUMAN_SMOKE" }
{ type = "emote",    id = "wait",  dict = "...", anim = "...", flag = 1 }
{ type = "kitemote", id = "hype",  emote = "KIT_EMOTE_REACTION_YEEHAW_1", repeatMs = 5000 }

ConfigSelector.Animations.source decides where the list comes from — "slot" for the location's own scenarios only, "global" for your list only, "merged" (the default) for the location's scenarios followed by your list. perLocation narrows it per location, and a location's own scenarios are always kept.

Can I add another button skin? ​

Yes, but it takes two edits, not one. html/img/btn/ contains exactly the two plates that ship — blk_slate.webp (the default) and slate.webp. Adding a third needs a row in ConfigSelector.ButtonSkins and a line in the manifest's files block, or the page cannot fetch it.

Slate ships with dim = 0.55 because at full strength it drops the PLAY accent's contrast to roughly 2.0:1.

Where do player settings live? ​

On the player's own machine, in client KVP under vorp_character_selector_settings_v1, as JSON. That includes the theme, the camera preferences and the last pose per character. Nothing player-chosen is stored server-side.

Partner pose editor saves are the exception: they go to partner_poses.json in the resource folder and apply to everyone.

Developers ​

What exports are there? ​

Three, and no more.

ExportSideDoes
GetPlayerComponent(category)ClientReturns one clothing component of the player
GetAllPlayerComponents()ClientReturns all clothing components
OpenOutfitsMenu(source)ServerOpens the outfits menu for a player

See Developer API.

Can I add Lua files without touching the manifest? ​

Yes for Lua, no for the page. client_scripts uses client/*.lua and server_scripts uses server/*.lua, so a new file in either folder loads on its own. Anything under html/ has to be listed by name in the files block.

Why are my NUI changes not showing? ​

CEF caches by URL. After editing app.js, creator.js or a stylesheet, raise the ?v= number on its tag in html/index.html. Without that you are looking at the previous file.

RegisterNUICallback adds a handler, it does not replace one

Register the same name twice and both handlers run. This is the usual cause of an action firing double.

What RedM behaviour should I know about before changing the code? ​

The parts that most often surprise people, all observed on b1491:

  • There are no synchronised scene natives. Duo poses are two independent TaskPlayAnim clips, with the partner placed from an attach vector and the playback phase pushed back into step every 400 ms.
  • SetEntityCoords lifts a ped; SetEntityCoordsNoOffset does not. The resource uses the latter throughout, which is the other half of the floating-character story above.
  • Moving a ped cancels its current task. Place a ped, then start its pose. Never the reverse.
  • Some BOOL natives return 0 or 1, and 0 is truthy in Lua. Compare explicitly.
  • Keys stop reporting under NUI focus. IsControlPressed goes quiet, IsDisabledControlPressed still reports held keys, and IsRawKeyPressed with the Windows key codes in RawKeys always works.
  • TaskPlayAnim on RDR3 takes thirteen arguments, and the flag values are not GTA V's.

The full list, with the module layout and the NUI bridge, is on Developer API.

What licence is it under? ​

GPL-2.0-or-later, as part of the VORP framework, with VORP's own condition on top: you are not authorised to modify official plug-ins for commercial use without publishing the code. In practice, changes you make and distribute have to stay open.

Parts of the Scene Creator's emote data are adapted from two open-source RedM animation resources, rsg-animations and vorp_animations, both under GPL-compatible terms and credited in config_emotes.lua.

The full text ships as LICENSE in the resource root. Read that rather than this summary before redistributing anything.

Still stuck ​

Troubleshooting is organised symptom first. /selectordebug turns on client and server logging together, and /scenedebug checks a scene against itself.

Beyond that, Discord: https://discord.gg/w4Ew4k3Exn

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