Skip to content

Notes and limitations

  • /setslots is the base, not the answer. A player given 5 who buys a slot ends up with 6. Config.Membership.staffOverride = "absolute" makes it win outright.
  • The store screen cannot open a browser. No FiveM native does that, so the buttons put the address on the clipboard.
  • Discord roles are never stored. They are read live and cached in memory, which is what makes losing a role take the perk with it.
  • Heritage presets are parent-face index pairs picked as starting points. The labels are yours to rename and the numbers yours to tune.
  • Eye colour swatches are approximations — the index sent to the game is correct, the dot is a hand-written guess. Hair and makeup swatches are read from the game.
  • Decals are not tattoos. decals_1 / decals_2 are torso component 10, a graphic on the garment. The TATTOOS step is real ink.
  • The TATTOOS step strips the character to Config.TattooPreview so the ink is visible, and dresses them again on the way out — including when they submit straight from it. Any step can do this with strip = true.
  • Tattoo names must match the game exactly. An unknown overlay raises nothing, it just draws nothing. Check anything you add with /cctattoo.
  • Tattoos are stored in their own columnusers.tattoos on ESX, multicharacter_characters.tattoos elsewhere — not inside the skin blob, which every barber rewrites wholesale.
  • Starter outfits live in multicharacter_outfits, keyed on the character and deleted with it.
  • Appearance validation is by whitelist and range clamp; identity fields (name, date of birth, age, height, slot ownership) are fully validated server-side.
  • Playtime reads 0 unless something on your server writes metadata.playtime; neither framework tracks it. Last seen starts filling in from the first logout after install.
  • Birthdates are written as YYYY-MM-DD, whatever Config.DateFormat says — that is what every other QB resource parses charinfo.birthdate as. Config.DateFormat still governs what this resource displays.
  • charinfo.nationality is filled from Config.QB.nationality.
  • Height goes into both charinfo.height and metadata.height.
  • The citizenid is generated by this resource, because the playerskins row is written before Login is called.
  • Deleting a character sweeps every table with a citizenid column (ESX: identifier or owner). Add anything missed to Config.ExtraDeleteTables.
  • /lockchar uses multicharacter_characters.disabled, so a framework update cannot take it away.

Run mcdiag in the server console and paste what it prints. It reports the framework, clothing, housing and tattoo resources resolved, the database, the Discord and store wiring, and every problem found in your config.lua — which answers most of a support conversation in one message.

Troubleshooting table: Integration.