👤Identifier

Identifier resolution

If your server uses a non-standard primary identifier (custom citizenid, Discord ID, account UUID, etc.) you can override how the script resolves players.

Default behavior

The default lookup order, configurable in shared/config.lua:

Framework = {
  IdentifierPriority = { "license2", "license", "fivem", "discord", "steam" }
}

The script tries each of these on the player's identifiers and uses the first match.

Override resolveIdentifier(source)

Edit server/framework/hooks.lua:

VarShop = VarShop or {}
VarShop.FrameworkOverrides = VarShop.FrameworkOverrides or {}

function VarShop.FrameworkOverrides.resolveIdentifier(source)
  -- Use QBCore citizenid as the primary key
  local Player = QBCore.Functions.GetPlayer(source)
  if Player then
    return Player.PlayerData.citizenid
  end
  return nil -- nil = fall back to the default resolver
end

Override resolveIdentifierInput(input)

Used when an admin types something like /addcoins #ABC1234 500 and you want the hash-prefix shorthand to resolve to a citizenid:

The default resolver already accepts:

  • Online server ID (42)

  • Online player by any framework identifier (steam:xxx, fivem:xxx, etc.)

  • An existing account in the database

  • An alias previously registered for an offline player

  • A raw string as last resort

circle-info

Returning nil from a hook means "I have nothing to say, use the default". Returning a string means "this is the canonical identifier, use it".

Last updated