Esta es la referencia completa de Quasar Framework (qs-core): todos los comandos de chat y de consola, todas las teclas predeterminadas, y los exports y eventos que usas para crear tus propios scripts de roleplay de FiveM sobre el framework. Los dueños de servidores y los administradores encontrarán en la primera sección todo lo que pueden escribir; los desarrolladores pueden ir directamente a los exports y eventos.
Todo lo de esta página viene de los recursos que incluye Quasar Framework — [core], [addons] y los puentes de ESX / QBCore en [bridge]. Los scripts escritos para ESX (es_extended, ESX Legacy) o QBCore (qb-core) siguen usando su propia API sobre estos; consulta Compatibilidad con ESX y QBCore para ver cómo esas llamadas se trasladan a qs-core.
Comandos#
Los comandos marcados como Admin comprueban el ACE command.qs del jugador que los escribe. El server.cfg que escribe la receta de txAdmin lo concede a todos los de group.admin con add_ace group.admin command allow, y txAdmin pone a sus propios administradores en ese grupo. Los jugadores que no lo tienen reciben No permission. — consulta Administración para añadir más administradores.
Comando | Tecla | Quién | Descripción |
|---|---|---|---|
Jugador | |||
| — | Todos | Muestra tu efectivo y tu saldo bancario en una notificación. |
| — | Todos | Entrega esa cantidad de efectivo al jugador más cercano a menos de 3 m. Se avisa a ambos jugadores. |
|
| Todos | Abre o cierra el inventario (no mientras estás caído). |
|
| Todos | Rueda de ítems: mantén pulsado, apunta a uno de los slots 1–5 y suelta para usarlo. |
|
| Todos | Usa el ítem del quick slot 1–5. |
|
| Todos | Abre la caja de chat. |
| — | Todos | Abre tu selector personal de colores de la interfaz. Nombre definido por |
| — | Todos | Guarda tu personaje y te devuelve a la selección de personaje. Nombre definido por |
| — | Todos | Borra tus colores guardados, para que la intro se reproduzca de nuevo en tu próxima conexión. |
| — | Todos | Ayuda de configuración: imprime el modelo, la ropa y los props de tu ped en la consola F8 con el formato de |
Roleplay | |||
| — | Todos | Describe una acción a los jugadores a menos de 20 m: |
| — | Todos | Describe la escena a los jugadores a menos de 20 m: |
| — | Todos | Mensaje local fuera de personaje a menos de 20 m: |
| — | Todos | Mensaje global fuera de personaje para todo el servidor: |
| — | Todos | Tirada 50/50 que se muestra a menos de 20 m como |
| — | Todos | Mensaje privado a un jugador por ID de servidor. |
| — | Todos | Texto flotante sobre tu cabeza durante 8 segundos, visible para los jugadores a menos de 20 m. |
Vehículos | |||
|
| Jugadores con las llaves | Bloquea o desbloquea el vehículo en el que estás, o el más cercano a menos de 5 m. |
|
| Conductor sin llaves que lleva un | Inicia el minijuego de ganzúa. Si tienes éxito recibes las llaves y arranca el motor; si fallas, la ganzúa se rompe, salta la alarma y puede alertar a la policía. |
| — | Jugadores con las llaves | Comparte las llaves del vehículo en el que estás sentado con el jugador |
|
| Conductor | Activa o desactiva el indicador de cinturón en el HUD. |
| — | Admin ( | Da al jugador |
| — | Admin | Hace aparecer un vehículo, te sienta en el asiento del conductor y te da sus llaves. |
| — | Admin | Elimina el vehículo en el que estás, o el más cercano a menos de 5 m. |
Trabajos | |||
| — | Trabajo | Esposa o quita las esposas al jugador más cercano. Esposar requiere |
| — | Trabajo | Empieza o deja de escoltar al jugador esposado más cercano. |
| — | Trabajo | Sienta al jugador esposado más cercano en el vehículo más próximo, primero en los asientos traseros. |
| — | Trabajo | Saca al jugador esposado más cercano de su vehículo. |
| — | Trabajo | Abre el inventario del jugador más cercano. Confiscar un ítem requiere que esté esposado. |
| — | Trabajo | Multa al jugador más cercano a menos de 5 m. La cantidad (1–50,000) se cobra de su banco. |
| — | Trabajo | Retira el vehículo más cercano a menos de 5 m. |
| — | Trabajo | Abre el informe de lesiones del jugador más cercano a menos de 4 m, o el tuyo. |
| — | Trabajo | Despliega tu camilla, o la quita si ya tienes una fuera. |
Administración | |||
|
| Admin | Abre el menú de administración (jugadores, dinero, trabajos, ítems, clima, hora, noclip, vehículos). |
| — | Admin | Asigna el trabajo de un jugador. El rango por defecto es |
| — | Admin | Añade dinero a |
| — | Admin | Quita dinero de una cuenta (falla si el saldo es demasiado bajo). |
| — | Admin | Da un ítem. La cantidad por defecto es |
| — | Admin | Reanima a un jugador caído (por defecto: tú). |
| — | Admin | Mata a un jugador (por defecto: tú); cae como en cualquier otra muerte. |
| — | Admin | Congela o descongela a un jugador. |
| — | Admin | Activa o desactiva el modo dios para ti. |
| — | Admin | Muestra una notificación a todos durante 8 segundos. |
| — | Admin | Imprime tu posición como |
| — | Admin | Te teletransporta a unas coordenadas. |
| — | Admin | Te teletransporta a tu punto de ruta del mapa. |
| — | Admin | Te teletransporta a un jugador. |
| — | Admin | Teletransporta a un jugador hasta ti. |
| — | Admin | Activa o desactiva el noclip (controles abajo). |
| — | Admin | Expulsa a un jugador. |
| — | Admin | Banea y expulsa a un jugador. |
| — | Admin | Elimina todos los baneos de un identificador |
| — | Admin | Guarda el grupo del jugador (p. ej. |
| — | Admin | Borra el grupo guardado del jugador y lo quita al instante. |
| — | Admin | Abre el editor de apariencia completo para ti, tatuajes incluidos. |
Los comandos que los scripts de ESX registran con ESX.RegisterCommand y los scripts de QBCore registran con QBCore.Commands.Add también funcionan. Un comando de ESX para un grupo distinto de user requiere el ACE group.<group>, group.admin o command; el permiso de un comando de QBCore se comprueba con HasPermission (consulta los exports más abajo).
Teclas#
Estos comandos son asignaciones de teclas, así que cada jugador puede cambiarlas en Settings → Key Bindings → FiveM. Cambiar el valor predeterminado en un archivo de configuración solo afecta a los jugadores que nunca han asignado ese comando.
Asignación de tecla | Tecla predeterminada | Nombre en Key Bindings | Predeterminada definida por |
|---|---|---|---|
|
| Toggle inventory |
|
|
| Item wheel |
|
|
| Use inventory slot 1 … 5 | fija |
|
| Lock / unlock vehicle |
|
|
| Hotwire vehicle |
|
|
| Toggle seatbelt |
|
|
| Open chat | fija |
|
| Open admin menu |
|
Controles fijos#
Estos son controles del juego que los scripts leen directamente. No son asignaciones de teclas, así que no aparecen en Key Bindings.
Tecla | Dónde | Acción |
|---|---|---|
| Tiendas, garajes, concesionario, bancos y cajeros, tiendas de ropa, puntos de trabajo y de drogas, comisaría, hospital | Interactuar |
| Caído, después de 20 segundos | Reaparecer en el hospital más cercano |
| Caído | Llamar a los paramédicos (espera de 30 segundos) |
| Cualquier barra de progreso que se pueda cancelar | Cancelar |
| Minijuego de ganzúa | Fijar un pin / rendirse |
| Junto a una camilla (EMS) | Mover o dejar / cargar o descargar al paciente / a la ambulancia o guardar |
| Noclip | Moverse, subir / bajar |
Rueda del mouse / clic de la rueda | Noclip | Cambiar la velocidad / restablecer la velocidad |
| Noclip | Velocidad 2× / 4× / 0.25× |
| Espectando desde el menú de administración | Dejar de espectar |
Exports de servidor de qs-core#
Llámalos desde cualquier script de servidor con exports['qs-core']:Name(...). source es siempre el ID de servidor del jugador. Cuando el jugador no tiene un personaje cargado, las funciones devuelven nil, false, 0 o una tabla vacía en lugar de dar error.
Jugadores y personajes#
GetPlayer
exports['qs-core']:GetPlayer(source)Parámetros: source — ID de servidor del jugador.
Devuelve: una tabla de jugador, o nil si no hay ningún personaje cargado. Contiene source, citizenid, PlayerData (una copia tomada en el momento de la llamada: citizenid, license, name, charinfo, money, job, inventory, metadata, position, skin, is_dead, cid) y todos los métodos del jugador: getCitizenId, getCharInfo, getPed, getCoords, getMoney, addMoney, removeMoney, setMoney, getJob, setJob, setJobDuty, getGang, setGang, isDead, getMetadata, setMetadata, getSkin, setSkin, addItem, removeItem, hasItem, canCarryItem, getItemCount, getSlotView, getItemBySlot, setItemInfo, setBusy, emit y save.
Ejemplo: local player = exports['qs-core']:GetPlayer(source); player:addMoney('cash', 100, 'reward')
GetPlayerByCitizenId
exports['qs-core']:GetPlayerByCitizenId(citizenid)Parámetros: citizenid — el ID del personaje (QS seguido de 6 caracteres).
Devuelve: la misma tabla de jugador que GetPlayer, o nil cuando ese personaje no está conectado. Para personajes desconectados usa GetOfflinePlayerByCitizenId.
Ejemplo: local player = exports['qs-core']:GetPlayerByCitizenId('QSA1B2C3')
GetPlayers
exports['qs-core']:GetPlayers()Parámetros: ninguno.
Devuelve: una lista de tablas de jugador, una por personaje cargado.
Ejemplo: for _, p in ipairs(exports['qs-core']:GetPlayers()) do print(p.source, p.citizenid) end
GetCharacters
exports['qs-core']:GetCharacters(source)Parámetros: source — ID de servidor del jugador.
Devuelve: los personajes de la cuenta ordenados por slot, cada uno { citizenid, cid, name, charinfo, money, job, skin, position }. Tabla vacía si el jugador no tiene identificador de licencia.
Ejemplo: local chars = exports['qs-core']:GetCharacters(source)
CreateCharacter
exports['qs-core']:CreateCharacter(source, charinfo, skin?, cid?)Parámetros: charinfo — { firstname, lastname, dob, sex, nationality }; skin — tabla de apariencia opcional; cid — número de slot opcional.
Devuelve: los datos del nuevo personaje, o nil, err con err = 'no_license', 'max_characters' (límite Config.MaxCharacters) o 'slot_taken'. El personaje empieza con Config.Accounts, Config.DefaultJob y Config.DefaultSpawn. No se carga — llama a LoadCharacter a continuación.
Ejemplo: local data, err = exports['qs-core']:CreateCharacter(source, { firstname = 'John', lastname = 'Doe', dob = '1990-01-01', sex = 'male', nationality = 'USA' })
LoadCharacter
exports['qs-core']:LoadCharacter(source, citizenid, isNew?)Parámetros: citizenid — un personaje de este jugador; isNew — true justo después de la creación (ítems iniciales, editor).
Devuelve: true, o false, err con err = 'no_license', 'not_found' o 'not_owner'. Dispara qs:server:playerLoaded, qs:server:characterLoaded y hace aparecer al jugador.
Ejemplo: local ok, err = exports['qs-core']:LoadCharacter(source, data.citizenid, true)
Logout
exports['qs-core']:Logout(source)Parámetros: source — ID de servidor del jugador.
Devuelve: true, o false si no había ningún personaje cargado. Guarda, descarga el personaje y dispara qs:server:playerUnloaded y qs:client:playerUnloaded. Con qs-coremulticharacter se vuelve a abrir la pantalla de selección.
Ejemplo: exports['qs-core']:Logout(source)
DeleteCharacter
exports['qs-core']:DeleteCharacter(citizenid)Parámetros: citizenid — personaje a eliminar.
Devuelve: nada. Borra la fila de players sin comprobar a quién pertenece, así que compruébalo tú primero (por ejemplo, con GetCharacters).
Ejemplo: exports['qs-core']:DeleteCharacter('QSA1B2C3')
GetOfflinePlayerByCitizenId · SaveOfflinePlayer
exports['qs-core']:GetOfflinePlayerByCitizenId(citizenid)
exports['qs-core']:SaveOfflinePlayer(citizenid, patch)Parámetros: citizenid — cualquier personaje; patch — tabla con los campos de nivel superior a reemplazar (money, job, metadata, charinfo, inventory, position, skin…).
Devuelve: GetOfflinePlayerByCitizenId devuelve { Offline = true, citizenid, license, name, charinfo, money, job, inventory, metadata, position, skin, is_dead, cid } leído de la base de datos, o nil. SaveOfflinePlayer devuelve true una vez escrito. Úsalos solo para personajes desconectados: un personaje conectado se sobrescribe con su propio siguiente guardado.
Ejemplo: local row = exports['qs-core']:GetOfflinePlayerByCitizenId(cid); row.money.bank = row.money.bank + 500; exports['qs-core']:SaveOfflinePlayer(cid, { money = row.money })
SetPlayerDead
exports['qs-core']:SetPlayerDead(source, state)Parámetros: state — true pone al jugador en estado de caído, false lo reanima.
Devuelve: true, o false si no hay ningún personaje cargado.
Ejemplo: exports['qs-core']:SetPlayerDead(source, false)
Dinero y cuentas#
GetMoney
exports['qs-core']:GetMoney(source, account)Parámetros: account — una cuenta de Config.Accounts: cash, bank o black_money.
Devuelve: el saldo, o 0.
Ejemplo: local bank = exports['qs-core']:GetMoney(source, 'bank')
AddMoney
exports['qs-core']:AddMoney(source, account, amount, reason?)Parámetros: account — cash, bank o black_money; amount — mayor que 0; reason — texto opcional que se pasa a qs:server:moneyChange.
Devuelve: true, o false si la cuenta no existe o la cantidad no es positiva.
Ejemplo: exports['qs-core']:AddMoney(source, 'bank', 500, 'bonus')
RemoveMoney
exports['qs-core']:RemoveMoney(source, account, amount, reason?)Parámetros: igual que AddMoney.
Devuelve: true, o false si el saldo es demasiado bajo, la cuenta no existe o la cantidad no es positiva.
Ejemplo: if exports['qs-core']:RemoveMoney(source, 'cash', 250, 'shop') then ... end
SetMoney
exports['qs-core']:SetMoney(source, account, amount)Parámetros: amount — 0 o más.
Devuelve: true o false. No dispara qs:server:moneyChange.
Ejemplo: exports['qs-core']:SetMoney(source, 'black_money', 0)
GetAccountMoney · AddAccountMoney · RemoveAccountMoney · SetAccountMoney
exports['qs-core']:GetAccountMoney(source, account)
exports['qs-core']:AddAccountMoney(source, account, amount, reason?)
exports['qs-core']:RemoveAccountMoney(source, account, amount, reason?)
exports['qs-core']:SetAccountMoney(source, account, amount)Parámetros: account — cash (alias money) y bank son los mismos saldos que GetMoney; cualquier otro nombre, como crypto, es una cuenta extra guardada en los metadatos del personaje (accounts_extra) y creada con el primer uso.
Devuelve: un número para GetAccountMoney, true/false para los demás. Estas son las funciones que usan los puentes de ESX y QBCore. Para black_money, usa GetMoney / AddMoney — ese es el saldo en el que paga qs-coredrugs.
Ejemplo: exports['qs-core']:AddAccountMoney(source, 'crypto', 10, 'mining')
Trabajos, bandas y servicio#
SetJob
exports['qs-core']:SetJob(source, name, grade?)Parámetros: name — un trabajo que exista en qs-core/shared/jobs.lua o que se haya registrado en tiempo de ejecución; grade — por defecto 0. Un rango que no existe pasa al rango más bajo.
Devuelve: true, o false para un trabajo desconocido. Dispara qs:server:jobChange.
Ejemplo: exports['qs-core']:SetJob(source, 'police', 1)
RegisterJob · RegisterJobs
exports['qs-core']:RegisterJob(name, def)
exports['qs-core']:RegisterJobs({ [name] = def, ... })Parámetros: def — { label, defaultDuty, grades = { [0] = { name, label, salary, isBoss } } }. Si falta label, se usa el nombre; si falta grades, se convierte en un rango employee con salario 0. Solo del lado del servidor, y solo hasta el siguiente reinicio.
Devuelve: true, o false con argumentos no válidos. Registrar un nombre existente lo reemplaza.
Ejemplo: exports['qs-core']:RegisterJob('mechanic', { label = 'Mechanic', grades = { [0] = { name = 'apprentice', label = 'Apprentice', salary = 300 } } })
UpdateJob · RemoveJob · GetJobs
exports['qs-core']:UpdateJob(name, def)
exports['qs-core']:RemoveJob(name)
exports['qs-core']:GetJobs()Parámetros: name — un trabajo existente; def — definición completa (reemplaza, no combina).
Devuelve: UpdateJob y RemoveJob devuelven false si el trabajo no existe. GetJobs devuelve todos los trabajos indexados por nombre.
Ejemplo: local jobs = exports['qs-core']:GetJobs(); print(jobs.police.label)
SetJobDuty
exports['qs-core']:SetJobDuty(source, onDuty)Parámetros: onDuty — booleano.
Devuelve: true o false. Guarda la marca en los metadatos y en el trabajo del personaje, y dispara qs:server:jobChange y el qs:client:onDutyUpdate del cliente. El Player.Functions.SetJobDuty del puente de QBCore lo usa.
Ejemplo: exports['qs-core']:SetJobDuty(source, true)
GetPlayersOnDuty
exports['qs-core']:GetPlayersOnDuty(jobName)Parámetros: jobName — nombre del trabajo.
Devuelve: dos valores: una lista de IDs de servidor y su cantidad, para los jugadores con ese trabajo cuya marca de servicio no es false.
Ejemplo: local sources, count = exports['qs-core']:GetPlayersOnDuty('police')
SetGang · GetGangForPlayer
exports['qs-core']:SetGang(source, name, grade?)
exports['qs-core']:GetGangForPlayer(source)Parámetros: name — un nombre de banda en minúsculas; grade — por defecto 0.
Devuelve: SetGang devuelve true/false y dispara qs:server:gangChange. GetGangForPlayer devuelve { name, label, isboss, grade = { name, level } }, o la banda none.
Ejemplo: exports['qs-core']:SetGang(source, 'ballas', 2)
RegisterGang · RegisterGangs · GetGang · GetGangs · RemoveGang
exports['qs-core']:RegisterGang(name, def)
exports['qs-core']:RegisterGangs({ [name] = def, ... })
exports['qs-core']:GetGang(name)
exports['qs-core']:GetGangs()
exports['qs-core']:RemoveGang(name)Parámetros: def — { label, grades = { [0] = { name, label, isBoss } } }. Usa nombres en minúsculas. Si faltan los rangos, se crea un solo rango member.
Devuelve: true/false; GetGang devuelve la definición o nil. RemoveGang rechaza none. También está disponible en el cliente, con su propia copia de la lista.
Ejemplo: exports['qs-core']:RegisterGang('ballas', { label = 'Ballas', grades = { [0] = { name = 'member', label = 'Member' }, [1] = { name = 'boss', label = 'OG', isBoss = true } } })
Metadatos y skin#
GetMetadata · SetMetadata
exports['qs-core']:GetMetadata(source, key?)
exports['qs-core']:SetMetadata(source, key, value)Parámetros: key — cualquier clave de metadatos (hunger, thirst, gang, onduty, accounts_extra o las tuyas); sin clave, GetMetadata devuelve la tabla completa.
Devuelve: el valor (un false guardado vuelve como nil); SetMetadata devuelve true/false y envía qs:metadata:set al jugador, que el HUD usa para el hambre y la sed.
Ejemplo: exports['qs-core']:SetMetadata(source, 'hunger', 100)
GetSkin · SetSkin
exports['qs-core']:GetSkin(source)
exports['qs-core']:SetSkin(source, skin)Parámetros: skin — la tabla de apariencia que usa qs-clothing.
Devuelve: GetSkin devuelve la tabla o nil; SetSkin devuelve true/false, aplica la skin al jugador al instante y la guarda con el siguiente guardado del personaje.
Ejemplo: local skin = exports['qs-core']:GetSkin(source)
Ítems e inventario#
Las llamadas de ítems se dirigen al inventario activo: qs-coreinventory, o el qs-inventory de Quasar Store cuando lo usas en lugar de qs-coreinventory. El código escrito con estos exports funciona con ambos.
RegisterItem · RegisterItems
exports['qs-core']:RegisterItem(name, def)
exports['qs-core']:RegisterItems({ [name] = def, ... })Parámetros: def — { label, weight, useable, description, image, stack, unique, weapon, ammo }. El peso está en gramos; useable = true es necesario para que el ítem haga algo al usarse; weapon = 'WEAPON_X' hace que equipe un arma. Registrar un nombre existente lo reemplaza.
Devuelve: RegisterItem devuelve true/false. Registra los ítems en el servidor: el cliente mantiene un catálogo aparte.
Ejemplo: exports['qs-core']:RegisterItem('pizza', { label = 'Pizza', weight = 500, useable = true, description = 'A hot slice.' })
GetItem · GetItems · UpdateItemDefinition · RemoveItemDefinition
exports['qs-core']:GetItem(name)
exports['qs-core']:GetItems()
exports['qs-core']:UpdateItemDefinition(name, def)
exports['qs-core']:RemoveItemDefinition(name)Parámetros: name — nombre del ítem; def — definición completa (reemplaza, no combina).
Devuelve: una definición o nil; el catálogo completo; true/false (false cuando el ítem no existe).
Ejemplo: local def = exports['qs-core']:GetItem('water'); print(def.label, def.weight)
AddItem
exports['qs-core']:AddItem(source, item, count?, slot?, info?)Parámetros: count — por defecto 1; slot — slot preferido; info — tabla de metadatos por ítem (números de serie, datos de pruebas…).
Devuelve: true o false. Con qs-coreinventory falla para ítems desconocidos, cuando el jugador superaría el límite de peso (Too heavy to carry) o no tiene espacio (Inventory full).
Ejemplo: exports['qs-core']:AddItem(source, 'water', 2)
RemoveItem
exports['qs-core']:RemoveItem(source, item, count?, slot?)Parámetros: count — por defecto 1; slot — tomar solo de ese slot.
Devuelve: true, o false si el jugador no tiene suficiente.
Ejemplo: exports['qs-core']:RemoveItem(source, 'lockpick', 1)
HasItem · GetItemCount · CanCarryItem
exports['qs-core']:HasItem(source, item, count?)
exports['qs-core']:GetItemCount(source, item)
exports['qs-core']:CanCarryItem(source, item, count?)Parámetros: count — por defecto 1.
Devuelve: HasItem y CanCarryItem devuelven booleanos (CanCarryItem comprueba el peso y el espacio libre sin cambiar nada); GetItemCount devuelve el total de todos los slots.
Ejemplo: if exports['qs-core']:CanCarryItem(source, 'stone', 3) then exports['qs-core']:AddItem(source, 'stone', 3) end
GetSlotView · GetItemBySlot
exports['qs-core']:GetSlotView(source)
exports['qs-core']:GetItemBySlot(source, slot)Parámetros: slot — número de slot.
Devuelve: GetSlotView devuelve todos los slots, cada uno false (vacío) o { slot, name, label, count, weight, useable, description, image, max, info } con qs-coreinventory. GetItemBySlot devuelve una de esas entradas o nil.
Ejemplo: local item = exports['qs-core']:GetItemBySlot(source, 1)
SetItemInfo
exports['qs-core']:SetItemInfo(source, slot, info)Parámetros: info — la nueva tabla de metadatos del ítem de ese slot (reemplaza la anterior).
Devuelve: true o false.
Ejemplo: exports['qs-core']:SetItemInfo(source, slot, { serial = 'AB1234' })
RegisterUsableItem
exports['qs-core']:RegisterUsableItem(item, handler)Parámetros: handler — con qs-coreinventory, function(source, slot, info). El ítem debe estar registrado con useable = true. El inventario no quita el ítem; hazlo en el handler si es consumible. Un handler por ítem: gana el último registro.
Devuelve: true. Las llamadas hechas antes de que se inicie el inventario se ponen en cola y se aplican cuando se inicia.
Ejemplo: exports['qs-core']:RegisterUsableItem('pizza', function(source, slot) exports['qs-core']:RemoveItem(source, 'pizza', 1, slot) end)
RegisterStash
exports['qs-core']:RegisterStash(id, label?, slots?, maxWeight?, columns?)Parámetros: id — ID único del stash. qs-coreinventory valores predeterminados: etiqueta Stash, 50 slots, 100000 g, 5 columnas. El contenido se guarda en stash_inventories.
Devuelve: true o false. Los jugadores lo abren con una zona de stash del cliente (RegisterStashZone) o con qs-coreinventory de OpenStash.
Ejemplo: exports['qs-core']:RegisterStash('mechanic_locker', 'Mechanic Locker', 40, 150000, 5)
SetBusy
exports['qs-core']:SetBusy(source, ms)Parámetros: ms — milisegundos durante los que el jugador no puede usar ítems.
Devuelve: nada. Solo tiene efecto con qs-coreinventory.
Ejemplo: exports['qs-core']:SetBusy(source, 3000)
GetInventory · SetInventory
exports['qs-core']:GetInventory(source)
exports['qs-core']:SetInventory(source, list)Parámetros: list — la lista de slots tal como se guarda en players.inventory, cada entrada { name, count, info } o false.
Devuelve: la lista / true. Es mejor usar AddItem y RemoveItem, que además actualizan la pantalla de inventario del jugador.
Ejemplo: exports['qs-core']:SetInventory(source, {})
Vehículos#
Los vehículos en propiedad están en la tabla vehicles: citizenid, license, plate, model, garage, state (1 guardado, 0 fuera), fuel, engine, body y props. Estos exports son los que usan qs-garage y qs-vehicleshop.
GetCitizenVehicles
exports['qs-core']:GetCitizenVehicles(citizenid)Parámetros: citizenid — ID del personaje.
Devuelve: todas las filas de vehículos de ese personaje, con props ya decodificados. GetOwnedVehicles(citizenid) es la misma función con su nombre anterior.
Ejemplo: local cars = exports['qs-core']:GetCitizenVehicles(player.citizenid)
GetGarageVehicles
exports['qs-core']:GetGarageVehicles(citizenid, garage)Parámetros: garage — un ID de garaje, como legion_square.
Devuelve: las filas del personaje cuyo garage es igual a ese ID.
Ejemplo: local cars = exports['qs-core']:GetGarageVehicles(cid, 'pillbox_hill_garage')
GetVehicleByPlate · PlateExists
exports['qs-core']:GetVehicleByPlate(plate)
exports['qs-core']:PlateExists(plate)Parámetros: plate — texto de la matrícula sin espacios al final.
Devuelve: la fila o nil; true/false.
Ejemplo: local row = exports['qs-core']:GetVehicleByPlate('QS4F2K9')
CreateOwnedVehicle
exports['qs-core']:CreateOwnedVehicle(data)Parámetros: data — { citizenid, license, plate, model, garage, state, fuel, engine, body, props }. Valores predeterminados: garaje legion, estado 1, combustible 100, motor y carrocería 1000.0, props {}. Un ID de garaje que no está configurado en qs-garage hace que el vehículo aparezca en todos los garajes hasta que se guarde una vez.
Devuelve: el ID de la nueva fila.
Ejemplo: exports['qs-core']:CreateOwnedVehicle({ citizenid = player.citizenid, license = player.PlayerData.license, plate = 'QS12345', model = 'sultan' })
UpdateOwnedVehicle · SetVehicleState
exports['qs-core']:UpdateOwnedVehicle(plate, data)
exports['qs-core']:SetVehicleState(plate, state, garage?)Parámetros: data — { garage, state, fuel, engine, body, props }. UpdateOwnedVehicle escribe las seis columnas, así que lee la fila primero y pasa todos los campos. SetVehicleState solo cambia state (y garage cuando se indica).
Devuelve: nada.
Ejemplo: exports['qs-core']:SetVehicleState('QS12345', 1, 'legion_square')
SpawnVehicle
exports['qs-core']:SpawnVehicle(source, model, coords?, warp?)Parámetros: model — nombre o hash; coords — vec4 o { x, y, z, w }, por defecto la posición del jugador; warp — sentar al jugador en el asiento del conductor.
Devuelve: el network id del vehículo, o nil si no se pudo crear. No da llaves — consulta qs-corevehiclekeys más abajo.
Ejemplo: local netId = exports['qs-core']:SpawnVehicle(source, 'adder', nil, true)
GetPlayerVehiclesQBShape
exports['qs-core']:GetPlayerVehiclesQBShape(citizenid)Parámetros: citizenid — ID del personaje.
Devuelve: los vehículos del personaje con la forma de las filas player_vehicles de QBCore: citizenid, license, vehicle, hash, mods, plate, garage, fuel, engine, body, state.
Ejemplo: local vehicles = exports['qs-core']:GetPlayerVehiclesQBShape(cid)
Permisos y grupos#
HasPermission
exports['qs-core']:HasPermission(source, permission)Parámetros: permission — un nombre como admin, o una lista de nombres (basta con que coincida uno).
Devuelve: true para la consola, para user, o cuando el jugador tiene el ACE <permission>, qbcore.<permission> o group.<permission>. admin, god y mod también pasan con group.admin o command.
Ejemplo: if exports['qs-core']:HasPermission(source, { 'admin', 'mod' }) then ... end
AddPermission · RemovePermission · GetPermission
exports['qs-core']:AddPermission(source, permission)
exports['qs-core']:RemovePermission(source, permission)
exports['qs-core']:GetPermission(source)Parámetros: permission — un nombre como mod.
Devuelve: AddPermission / RemovePermission devuelven true/false y añaden o quitan los ACE qbcore.<permission> y group.<permission> en la licencia del jugador hasta el siguiente reinicio. GetPermission devuelve { god = true, admin = true, mod = true } solo con los que tiene el jugador. Para un grupo que sobreviva a los reinicios, usa /setgroup.
Ejemplo: exports['qs-core']:AddPermission(source, 'mod')
Asignar un grupo guardado desde un script
ExecuteCommand(('setgroup %d %s'):format(targetId, 'admin'))Parámetros: no hay export para los grupos; ejecuta el comando, que un recurso ejecuta con derechos de consola. Es lo que hace el menú de administración.
Devuelve: nada. El grupo se guarda en player_groups, se aplica al instante y se vuelve a aplicar cada vez que el jugador se conecta.
Ejemplo: ExecuteCommand(('removegroup %d'):format(targetId))
Baneos#
IsPlayerBanned
exports['qs-core']:IsPlayerBanned(licenseOrSource)Parámetros: un ID de servidor o un identificador license:… completo.
Devuelve: banned, reason, expiresUnix. Cuenta cada baneo activo de la licencia, y un baneo permanente tiene prioridad sobre uno temporal; expiresUnix es el final como timestamp Unix, o nil para un baneo permanente. false cuando no hay ningún baneo activo, y siempre false cuando Config.EnableBans = false.
Ejemplo: local banned, reason, expires = exports['qs-core']:IsPlayerBanned(source)
AddBan
exports['qs-core']:AddBan(source, minutes, reason, adminName)Parámetros: minutes — 0 o nil para un baneo permanente; adminName — se guarda como banned_by.
Devuelve: true, o false si el jugador no tiene licencia. El jugador es expulsado de inmediato.
Ejemplo: exports['qs-core']:AddBan(source, 1440, 'Exploiting', 'Anticheat')
RemoveBan · ExploitBan
exports['qs-core']:RemoveBan(license)
exports['qs-core']:ExploitBan(source, origin?)Parámetros: license — identificador license:… completo; origin — texto que se guarda como motivo.
Devuelve: RemoveBan borra todos los baneos de ese identificador y devuelve true. ExploitBan banea de forma permanente con banned_by = 'Anti Cheat'.
Ejemplo: exports['qs-core']:ExploitBan(source, 'triggered protected event')
Callbacks y notificaciones#
RegisterCallback
exports['qs-core']:RegisterCallback(name, function(source, ...) return ... end)Parámetros: name — nombre del callback; el handler recibe el jugador y los argumentos del cliente, y lo que devuelva se envía de vuelta.
Devuelve: nada. El cliente lo llama con TriggerCallback.
Ejemplo: exports['qs-core']:RegisterCallback('myshop:getCash', function(source) return exports['qs-core']:GetMoney(source, 'cash') end)
RegisterQBCallback
exports['qs-core']:RegisterQBCallback(name, function(source, cb, ...) cb(...) end)Parámetros: handler estilo QBCore que responde mediante cb.
Devuelve: nada. Los clientes lo llaman con TriggerQBCallback o QBCore.Functions.TriggerCallback.
Ejemplo: exports['qs-core']:RegisterQBCallback('myshop:getBank', function(source, cb) cb(exports['qs-core']:GetMoney(source, 'bank')) end)
Notificar a un jugador desde el servidor
TriggerClientEvent('qs:client:notify', source, message, type?, duration?, title?)Parámetros: type — success, error, info (predeterminado) o primary; duration — milisegundos, por defecto 4000; title — opcional, por defecto un título traducido según el tipo. Usa -1 como source para notificar a todos. No hay export de servidor: este evento es la API del servidor.
Devuelve: nada.
Ejemplo: TriggerClientEvent('qs:client:notify', source, 'Order delivered', 'success', 5000)
Utilidades#
GetCoreObject
exports['qs-core']:GetCoreObject()Parámetros: ninguno.
Devuelve: la tabla core: Players, Config, Jobs, Gangs, Utils y las funciones core. Lee de ella los valores de configuración; para jugadores, usa GetPlayer — los objetos de jugador tomados de esta tabla en otro recurso no tienen métodos.
Ejemplo: local QS = exports['qs-core']:GetCoreObject(); print(QS.Config.MaxCharacters)
RateLimit
exports['qs-core']:RateLimit(key, max, windowMs)Parámetros: key — nombre del bucket; max — llamadas permitidas por ventana; windowMs — duración de la ventana. Los buckets los comparten todos los recursos, así que pon como prefijo de las claves el nombre de tu recurso.
Devuelve: true mientras no se supera el límite, false cuando se supera.
Ejemplo: if not exports['qs-core']:RateLimit(('myshop:buy:%d'):format(source), 1, 1000) then return end
RegisterFrameworkCommand · RefreshCommands
exports['qs-core']:RegisterFrameworkCommand(name, help, arguments, argsrequired, callback, permission?)
exports['qs-core']:RefreshCommands(source)Parámetros: comando estilo QBCore (es lo que llama QBCore.Commands.Add): arguments — { { name, help } } para la sugerencia del chat; argsrequired — rechazar con menos argumentos; callback(source, args, raw); permission — por defecto user, comprobado con HasPermission.
Devuelve: nada. RefreshCommands vuelve a enviar todas las sugerencias del chat a un jugador (se hace automáticamente al cargar un personaje).
Ejemplo: exports['qs-core']:RegisterFrameworkCommand('healme', 'Heal yourself', {}, false, function(source) TriggerClientEvent('qs:client:revive', source) end, 'admin')
GetColors
exports['qs-core']:GetColors()Parámetros: ninguno.
Devuelve: en el servidor, la paleta predeterminada Config.Theme (primary, accent, text, panel, health…).
Ejemplo: local theme = exports['qs-core']:GetColors()
Exports de cliente de qs-core#
Llámalos desde scripts de cliente con exports['qs-core']:Name(...). Los exports compartidos — GetCoreObject, RateLimit, GetItem, GetItems, RegisterItem, GetGang, GetGangs y el resto — también existen en el cliente, cada lado con su propia copia de los datos.
GetPlayerData
exports['qs-core']:GetPlayerData()Parámetros: ninguno.
Devuelve: el personaje local, o nil antes de que se cargue un personaje: { source, citizenid, license, name, charinfo, money, job, metadata, gang, onduty, position, skin, is_dead, isNew }. El dinero, el trabajo, la banda, el servicio y los metadatos se mantienen actualizados.
Ejemplo: local data = exports['qs-core']:GetPlayerData(); print(data.job.label)
Notify
exports['qs-core']:Notify(message, type?, duration?, title?)Parámetros: type — success, error, info (predeterminado) o primary; duration — milisegundos, por defecto 4000.
Devuelve: nada.
Ejemplo: exports['qs-core']:Notify('Vehicle repaired', 'success')
Progress
exports['qs-core']:Progress({ duration = 3000, label = '', disableMovement = false, canCancel = false })Parámetros: duration — milisegundos; label — texto de la barra; disableMovement — bloquear caminar, correr y saltar; canCancel — permitir que X cancele. La llamada espera hasta que termina la barra.
Devuelve: true al completarse, false al cancelarse o cuando ya hay otra barra en curso.
Ejemplo: if exports['qs-core']:Progress({ duration = 5000, label = 'Repairing', canCancel = true }) then ... end
CancelProgress · IsBusy
exports['qs-core']:CancelProgress()
exports['qs-core']:IsBusy()Parámetros: ninguno.
Devuelve: IsBusy devuelve true mientras hay una barra de progreso en curso.
Ejemplo: if exports['qs-core']:IsBusy() then return end
Lockpick
exports['qs-core']:Lockpick(rounds?)Parámetros: rounds — de 1 a 6, por defecto 3. El jugador fija los pines con SPACE y se rinde con ESC o BACKSPACE; 30 segundos de inactividad cuentan como fallo. La llamada espera hasta que termina.
Devuelve: true si tiene éxito, false si no.
Ejemplo: if exports['qs-core']:Lockpick(4) then ... end
HasItem · GetItemCount
exports['qs-core']:HasItem(item, count?)
exports['qs-core']:GetItemCount(item)Parámetros: count — por defecto 1.
Devuelve: booleano / número, leído de la copia del cliente del inventario activo.
Ejemplo: if exports['qs-core']:HasItem('lockpick') then ... end
RegisterStashZone · RemoveStashZone
exports['qs-core']:RegisterStashZone(id, coords, opts?)
exports['qs-core']:RemoveStashZone(id)Parámetros: id — un stash registrado en el servidor; coords — vector3; opts.radius — por defecto 2.0 m. Con qs-coreinventory, al abrir el inventario dentro de la zona se muestra el stash como segundo panel.
Devuelve: true o false.
Ejemplo: exports['qs-core']:RegisterStashZone('mechanic_locker', vector3(-347.2, -133.6, 39.0), { radius = 1.5 })
TriggerCallback · TriggerQBCallback
exports['qs-core']:TriggerCallback(name, function(...) end, ...)
exports['qs-core']:TriggerQBCallback(name, function(...) end, ...)Parámetros: name — un callback registrado con RegisterCallback / RegisterQBCallback; los argumentos extra se envían al handler.
Devuelve: nada; la función recibe la respuesta del servidor.
Ejemplo: exports['qs-core']:TriggerCallback('myshop:getCash', function(cash) print(cash) end)
IsDead · SetDownAnimPaused
exports['qs-core']:IsDead()
exports['qs-core']:SetDownAnimPaused(state)Parámetros: state — true evita que el bucle de caído vuelva a reproducir la animación de tendido mientras reproduces la tuya (la camilla de EMS lo usa).
Devuelve: IsDead devuelve true mientras el jugador está caído.
Ejemplo: if exports['qs-core']:IsDead() then return end
IsNoclipActive · ToggleNoclip
exports['qs-core']:IsNoclipActive()
exports['qs-core']:ToggleNoclip(state?)Parámetros: llama a ToggleNoclip() sin argumentos para alternarlo, o con true para activarlo. No comprueba permisos — llámalo solo para administradores.
Devuelve: IsNoclipActive devuelve un booleano.
Ejemplo: if not exports['qs-core']:IsNoclipActive() then exports['qs-core']:ToggleNoclip() end
GetColors · SetClientColors · HasSavedColors
exports['qs-core']:GetColors()
exports['qs-core']:SetClientColors(palette)
exports['qs-core']:HasSavedColors()Parámetros: palette — una tabla con las mismas claves que Config.Theme.
Devuelve: GetColors devuelve la paleta guardada del jugador o Config.Theme; SetClientColors aplica una paleta solo para esta sesión (no se guarda) y dispara qs:client:colorsChanged; HasSavedColors indica si el jugador eligió sus propios colores.
Ejemplo: SendNUIMessage({ action = 'theme', data = exports['qs-core']:GetColors() })
Exports de otros recursos#
Exports de los demás recursos de Quasar Framework que vale la pena llamar desde tus propios scripts.
qs-coreinventory (servidor)
exports['qs-coreinventory']:AddItem(source, item, count, slot?, info?)
exports['qs-coreinventory']:RemoveItem(source, item, count, slot?)
exports['qs-coreinventory']:GetItemCount(source, item)
exports['qs-coreinventory']:HasItem(source, item, count?)
exports['qs-coreinventory']:CanCarryItem(source, item, count?, info?)
exports['qs-coreinventory']:GetSlotView(source)
exports['qs-coreinventory']:GetItemBySlot(source, slot)
exports['qs-coreinventory']:SetItemInfo(source, slot, info)
exports['qs-coreinventory']:RegisterUsableItem(item, function(source, slot, info) end)
exports['qs-coreinventory']:RegisterStash(id, label?, slots?, maxWeight?, columns?)
exports['qs-coreinventory']:SetBusy(source, ms)
exports['qs-coreinventory']:IsBusy(source)Las mismas operaciones que los exports de ítems de qs-core, pero ligadas a este inventario. Es mejor usar las versiones de qs-core, que siguen funcionando si cambias a qs-inventory; IsBusy solo existe aquí.
qs-coreinventory (cliente)
exports['qs-coreinventory']:OpenStash(id, opts?)
exports['qs-coreinventory']:RegisterStashZone(id, coords, opts?)
exports['qs-coreinventory']:RemoveStashZone(id)
exports['qs-coreinventory']:HasItem(item, count?)
exports['qs-coreinventory']:GetItemCount(item)OpenStash abre el inventario con el stash id como segundo panel, desde cualquier lugar (sin necesidad de zona). Devuelve false si el inventario ya está abierto. opts = { label, slots, maxWeight, columns } solo se usa para un stash que no se registró en el servidor.
qs-corevehiclekeys (cliente)
exports['qs-corevehiclekeys']:GiveKeys(plate)
exports['qs-corevehiclekeys']:RemoveKeys(plate)
exports['qs-corevehiclekeys']:HasKeys(plate)
exports['qs-corevehiclekeys']:GetKeys()Las llaves se guardan por sesión en el cliente. Da las llaves después de hacer aparecer un vehículo desde tu propio script, o el conductor no podrá arrancarlo. Desde el servidor, envía TriggerClientEvent('vehiclekeys:client:SetOwner', source, plate) — el mismo evento que usan los scripts de QBCore. Ejemplo: exports['qs-corevehiclekeys']:GiveKeys(GetVehicleNumberPlateText(vehicle))
qs-clothing (cliente)
exports['qs-clothing']:ApplyAppearance(skin, sex?)
exports['qs-clothing']:OpenCreator(sex, function(skin) end)
exports['qs-clothing']:IsCreatorOpen()ApplyAppearance define el modelo freemode y toda la ropa, los props y los tatuajes a partir de una tabla de skin (una skin vacía aplica el aspecto predeterminado de sex). Para cambiar la apariencia guardada de un jugador desde el servidor, usa SetSkin de qs-core. Para abrir el editor, dispara qs-clothing:client:open.
qs-police (servidor)
exports['qs-police']:Alert(coords, label?)Envía una alerta de despacho — notificación y blip parpadeante durante 60 segundos — a todos los jugadores con el trabajo police. coords debe ser una tabla simple { x, y, z }; un vector3 se ignora, así que conviértelo primero. Sin etiqueta, la alerta dice Shots fired. Ejemplo: local c = GetEntityCoords(GetPlayerPed(source)); exports['qs-police']:Alert({ x = c.x, y = c.y, z = c.z }, 'Store robbery')
qs-banking
qs-banking no tiene exports. Los saldos bancarios son la cuenta bank de qs-core, así que un script que paga o cobra en una cuenta bancaria usa exports['qs-core']:AddMoney(source, 'bank', amount, reason) y RemoveMoney. Los números de cuenta y el historial de transacciones se guardan en bank_accounts y bank_transactions.
Exports de los puentes (ESX, QBCore y compañía)
exports['es_extended']:getSharedObject() -- shared
exports['qb-core']:GetCoreObject() -- shared
exports['LegacyFuel']:GetFuel(vehicle) -- client
exports['LegacyFuel']:SetFuel(vehicle, fuel) -- client, 0-100
exports['progressbar']:Progress(data, function(cancelled) end) -- client
exports['qb-management']:AddMoney(job, amount) -- server, also GetAccount, RemoveMoney, GetGangAccount, AddGangMoney, RemoveGangMoney
exports['esx_society']:addMoney(account, amount) -- server, also getSociety, getSocietyMoney, removeMoney
exports['qb-vehiclekeys']:GiveKeys(source, plate) -- server; client: GiveKeys, RemoveKeys, HasKeys, GetKeysResponden con los nombres que ya llaman los scripts de ESX y QBCore, y redirigen a Quasar Framework. La lista completa está en Compatibilidad con ESX y QBCore.
Eventos#
Eventos del framework (servidor)#
Los dispara qs-core con TriggerEvent, así que escúchalos con AddEventHandler en un script de servidor.
Evento | Lado | Argumentos | Cuándo se dispara |
|---|---|---|---|
| servidor |
| Un personaje terminó de cargarse. El hook recomendado para otros recursos. |
| servidor |
| Justo antes de |
| servidor |
| Después de |
| servidor |
| Después de cada guardado: autoguardado, desconexión, cierre de sesión y parada de qs-core. |
| servidor |
| Se añadió o quitó dinero ( |
| servidor |
| Cambió el trabajo o el servicio. |
| servidor |
| Cambió la banda. |
| servidor |
| Se usó un ítem usable que no es un arma, desde cualquier inventario. |
| servidor | — | Una vez, 500 ms después de que se inicia qs-core. El puente de QBCore sincroniza en él sus ítems y trabajos compartidos. |
AddEventHandler('qs:server:characterLoaded', function(source, data)
if data.isNew then
exports['qs-core']:AddMoney(source, 'bank', 1000, 'welcome bonus')
end
end)
AddEventHandler('qs:server:usedItem', function(source, item, slot, info)
if item ~= 'pizza' then return end
exports['qs-core']:RemoveItem(source, 'pizza', 1, slot)
end)Eventos del framework (cliente)#
Evento | Lado | Argumentos | Cuándo se dispara |
|---|---|---|---|
| cliente (local) |
| El personaje se coloca en el mundo, justo antes de que la pantalla aparezca con un fundido. |
| cliente (local) | — | Después de cerrar sesión. |
| cliente (local) |
| Cambió el trabajo o el servicio. |
| cliente (local) |
| Cambió la banda. |
| cliente (local) |
| Cambió el servicio. |
| cliente (local) | — | El jugador cae. |
| cliente (local) | — | Termina el estado de caído (reanimación o reaparición en el hospital). |
| cliente (local) | — | Un jugador caído pulsó |
| cliente (local) |
| Cambiaron los colores del jugador: vuelve a enviarlos a tu UI. |
| servidor → cliente |
| Muestra una notificación. Servidor: |
| servidor → cliente | — | Reanima al jugador. Es mejor usar |
| servidor → cliente | — | Pone al jugador en estado de caído. Es mejor usar |
| servidor → cliente |
| Cambió un valor de metadatos. |
| servidor → cliente |
| Cambió un saldo. |
| servidor → cliente |
| Se fijó un saldo. |
| servidor → cliente |
| Cambió una cuenta extra (no |
AddEventHandler('qs:client:onPlayerLoaded', function(data)
print(('Welcome back, %s %s'):format(data.charinfo.firstname, data.charinfo.lastname))
end)
AddEventHandler('qs:client:onJobUpdate', function(job)
if job.name == 'police' then
-- create your police blips here
end
end)Eventos de recursos#
Eventos y state bags de los demás recursos de Quasar Framework que necesitan los integradores.
Evento | Lado | Argumentos | Uso |
|---|---|---|---|
| servidor (local) |
| Lo dispara |
| servidor → cliente |
| Instantánea completa del inventario después de cada cambio. |
| servidor → cliente |
| Se usó un ítem de arma. |
| servidor → cliente |
| Se añadió o quitó un ítem ( |
| cliente (local) |
|
|
| cliente (local) |
| Oculta o muestra el chat. |
| cliente |
| API de chat estándar, gestionada por |
| cliente |
| Añade una sugerencia de comando ( |
| servidor → cliente |
| Línea de chat con un estilo: |
| cliente (local) | — | Cierra la pantalla de carga. |
| cliente (local) | — | La pantalla de carga se cerró. |
| cliente (local) | — | La intro terminó o se omitió; empieza la selección de personaje. |
| servidor → cliente |
| Aplica una apariencia (enviada por |
| cliente |
| Abre el editor de apariencia; |
| cliente (local) |
| El creador de personajes se cerró. |
| servidor → cliente |
| Da llaves al jugador (mismo nombre que en qb-vehiclekeys). También |
| servidor → cliente |
| Alerta de despacho en un cliente de policía. Usa el export |
| servidor → cliente |
| Reproduce solo la animación de comer o beber (sin cambiar el hambre ni la sed). |
State bag | Definido por | Valor |
|---|---|---|
| qs-core | ID del personaje cargado. |
| qs-core | Tabla del trabajo actual. |
| qs-core | Nombre del jugador. |
| qs-core |
|
| qs-police |
|
| Puente de LegacyFuel | Nivel de combustible 0–100. |
Eventos de ESX y QBCore#
Los puentes traducen los eventos de qs-core a los que escuchan los scripts de ESX y QBCore, así que esos scripts funcionan sin modificaciones. Los más usados:
Evento | Lado | Argumentos | Cuándo se dispara |
|---|---|---|---|
| servidor / cliente | servidor | Se cargó un personaje. |
| cliente | — | Después de cerrar sesión. |
| servidor / cliente | servidor | Cambió el trabajo o el servicio. |
| cliente |
| Cambió un saldo. |
| servidor |
| Se desconectó un jugador con un personaje. |
| cliente |
| El jugador murió / volvió a aparecer. |
| servidor |
| Se cargó un personaje. |
| cliente | — | Se cargó un personaje. |
| servidor |
| Se desconectó un jugador. |
| servidor / cliente |
| Cambió el trabajo. |
| servidor |
| Cambió el dinero. |
| cliente |
| Cambió la banda. |
| cliente |
| Cambió el servicio. |
| cliente |
| Se actualizaron los datos del jugador. |
La lista completa, con lo que se emite y lo que no, está en Compatibilidad con ESX y QBCore.
¿Llamas a qs-core desde otro recurso? Es mejor usar los exports explícitos —
AddMoney,SetJob,SetMetadata,AddItem— que los métodos de una tabla de jugador. Cada export funciona sobre el jugador en vivo dentro de qs-core, así que el resultado siempre está al día y cuesta una sola llamada.
exports['qs-core']:GetPlayer(source)también sirve: devuelvesource,citizenid, copias enlazadas de todos los métodos del jugador (player:addMoney(...)yplayer.addMoney(...)funcionan los dos y actúan sobre el jugador en vivo) y una copia dePlayerDatatomada en ese momento. Esa copia no se actualiza después — vuelve a llamar aGetPlayer, o usa un getter comoplayer:getMoney('cash'), cuando necesites valores actualizados. Los objetos de jugador obtenidos medianteGetCoreObject()en otro recurso no tienen ningún método, así que pasa siempre porGetPlayer.



