Comandos#
Starter Pack registra tres comandos y una asignación de tecla. Sus nombres están en config/main.lua, y los propios comandos en server/custom/commands.lua si quieres ampliarlos.
Comando | Quién | Descripción |
|---|---|---|
| Todos | Abre el selector, tras la comprobación del tiempo de espera en el servidor. El nombre es |
| Administradores | Abre el creador. Cualquier otra persona recibe "You do not have permission to use this." Solo dentro del juego. El nombre es |
| Administradores y la consola del servidor | Borra los reclamos de un jugador para que pueda reclamar de nuevo. Sin objetivo, borra los tuyos; un server id borra los de ese jugador conectado; |
Open Starter Pack | Todos | Una asignación de tecla en Settings → Key Bindings → FiveM. Sin asignar, a menos que |
Con
Config.CooldownScope = 'character', los reclamos se guardan por personaje, no por licencia, así que la formalicense:…no los encuentra. Borra a esos jugadores por server id mientras estén conectados./starterclearno se puede deshacer.
/starterclear # your own claim
/starterclear 12 # the player with server id 12
starterclear license:abc123… # from the server console, an offline accountExports del cliente#
Para abrir el selector desde tus propios scripts: un selector de aparición, un tutorial, un creador de personajes, un menú radial.
Abrir y cerrar
exports['qs-starterpack']:Open() -- the picker
exports['qs-starterpack']:OpenAdmin() -- the creator
exports['qs-starterpack']:Close() -- whichever is open
local open = exports['qs-starterpack']:IsOpen()Open lo abre de inmediato, sin la comprobación de por vida que hace el comando; aun así, el servidor rechaza el reclamo si el jugador está en tiempo de espera. OpenAdmin no comprueba permisos en el cliente, pero cada guardado se comprueba en el servidor, así que alguien que no es administrador puede mirar, pero nunca cambiar nada.
Abrir con la comprobación del tiempo de espera
Para que se comporte exactamente como el comando, incluida la notificación "already claimed", pide al servidor que lo abra:
TriggerServerEvent('qs-starterpack:server:requestOpen')
-- or, the same thing through the item entry point
exports['qs-starterpack']:UseItem()UseItem es lo que ox_inventory llama mediante export = 'qs-starterpack.UseItem'. No hace nada si el selector ya está abierto.
Exports del servidor#
Cómo otro recurso controla Starter Pack: entregar el pack al final de la creación del personaje o comprobar si alguien ya recibió el suyo.
Open, OpenAdmin y Close
exports['qs-starterpack']:Open(source) -- the picker, no cooldown check
exports['qs-starterpack']:OpenAdmin(source) -- the creator, only if the player is an admin
exports['qs-starterpack']:Close(source)GetPlayerClaim
El reclamo más reciente del jugador, o nil si nunca ha reclamado (o la base de datos no está lista). Sigue Config.CooldownScope, así que, con alcance por personaje, responde por el personaje que está jugando.
local claim = exports['qs-starterpack']:GetPlayerClaim(source)
-- {
-- packId = 'legal',
-- gender = 'female',
-- claimedAt = 1760000000000, -- milliseconds
-- cooldownRemainingSec = -1, -- -1 lifetime, locked · 0 ready · N seconds left
-- }CanPlayerClaim
true cuando el jugador nunca ha reclamado o su tiempo de espera ya terminó.
-- At the end of your character creation
RegisterNetEvent('my-multichar:server:characterCreated', function()
local src = source
if exports['qs-starterpack']:CanPlayerClaim(src) then
exports['qs-starterpack']:Open(src)
end
end)Eventos#
Evento | Dirección | Qué hace |
|---|---|---|
| Cliente → servidor | Abre el selector para quien lo envía, tras la comprobación del tiempo de espera. Limitado a cinco llamadas cada cuatro segundos por jugador. |
| Servidor → cliente | Abre el selector, sin comprobación. |
| Servidor → cliente | Cierra lo que esté abierto. |
| Servidor → cliente | Muestra un mensaje mediante |
Hooks#
Los hooks son funciones tuyas que Starter Pack llama en momentos concretos. Cada uno se ejecuta protegido, así que un error en tu código nunca puede romper un reclamo.
Cliente — client/custom/main.lua#
Hook | Cuándo |
|---|---|
| Antes de que se abra el selector. Devuelve |
| Justo después de que se abra el selector. |
| Cada notificación, cuando |
function OnBeforeOpen()
if IsPedInAnyVehicle(PlayerPedId(), false) then
TriggerEvent('qs-starterpack:client:notify', 'Step out of the vehicle first.', 'error')
return false
end
return true
endServidor — cualquier archivo en server/custom/#
Defínelos como funciones globales en un archivo nuevo dentro de server/custom/ — todos los archivos de ahí se cargan y quedan editables.
Hook | Cuándo |
|---|---|
| Después de un reclamo exitoso. |
| Después de guardar la configuración del creador. |
| Cuando alguien que no es administrador escribe |
-- server/custom/hooks.lua
function OnPlayerClaim(source, packId, gender, delivered, failed)
if packId == 'legal' then
-- e.g. start the player on a civilian job
local Player = exports['qb-core']:GetCoreObject().Functions.GetPlayer(source)
if Player then Player.Functions.SetJob('taxi', 0) end
end
endSobre los resultados#
Tanto un reclamo como un guardado del creador responden con un código corto en lugar de una frase — cooldown, inventory_full, not_admin — y la interfaz convierte cada uno en un mensaje en el idioma del jugador. La lista completa, y qué hacer con cada uno, está en Errores comunes.



