Inicio › Documentación › Personalización · origen_quests
Todos los ficheros personalizables están excluidos del cifrado CFX escrow y se pueden editar sin problema.
custom/
├── cl_drawtext.lua -- Client: interaction text UI (key prompt at locations)
├── cl_framework.lua -- Client: framework, notifications, player data
└── sv_framework.lua -- Server: framework, admin, inventory, integrationsControla el texto de aviso que se muestra cuando un jugador está cerca de una ubicación de misión.
DrawQuestText(key, text)Se llama cuando el jugador entra en el radio de interacción de una ubicación. La implementación por defecto usa el textUI de ox_lib.
function DrawQuestText(key, text)
lib.showTextUI("[" .. key .. "] - " .. text)
end| Parámetro | Tipo | Descripción |
|---|---|---|
key |
string |
Etiqueta de la tecla que se muestra (p. ej. E) |
text |
string |
Etiqueta de interacción definida en la configuración de la ubicación |
HideQuestText()Se llama cuando el jugador sale del radio de interacción.
function HideQuestText()
lib.hideTextUI()
endSustituye estas funciones para usar cualquier sistema de drawtext o textUI.
Framework.GetLocalIdentifier() → string | nilDevuelve el identificador del jugador local (citizenid / license). Se usa para sincronizar la XP.
function Framework.GetLocalIdentifier()
-- qbx / qb
local ok, p = pcall(function() return exports.qbx_core:GetPlayerData() end)
return (ok and p) and p.citizenid or nil
endFramework.GetPlayerData() → tableDevuelve el objeto completo de datos del jugador del framework. Se usa para los metadatos de la interfaz.
function Framework.GetPlayerData()
local ok, p = pcall(function() return exports.qbx_core:GetPlayerData() end)
return (ok and p) and p or {}
endFramework.NotifyClient(message, notifyType)Envía una notificación al cliente local.
function Framework.NotifyClient(message, notifyType)
-- notifyType: 'inform' | 'success' | 'error' | 'warning'
lib.notify({ description = message, type = notifyType })
endAdapta esta función cuando uses Config.NotifySystem = 'custom' con un evento de cliente.
Framework.OnPlayerLoaded(callback)Registra un callback que se ejecuta cuando el jugador termina de cargar. Se usa para inicializar los datos de misiones.
function Framework.OnPlayerLoaded(callback)
AddEventHandler('QBCore:Client:OnPlayerLoaded', callback)
endFramework.TriggerCallback(name, cb, ...)Envuelve lib.callback para los callbacks de servidor. Normalmente no necesitas modificarla.
Framework.GetPlayerGang() → stringDevuelve el nombre de la banda actual del jugador o "none".
Framework.GetPlayerBusinesses() → tableDevuelve los negocios activos del jugador desde el statebag.
Framework.GetPlayer(source) → table | nilDevuelve el objeto de jugador del framework para el source indicado.
function Framework.GetPlayer(source)
local ok, p = pcall(function() return exports.qbx_core:GetPlayer(src) end)
return (ok and p) and p or nil
endFramework.GetIdentifier(source) → string | nilDevuelve el identificador único del jugador (citizenid en QB, license en ESX/standalone).
Framework.HasAdminPermission(source) → booleanComprueba si un jugador tiene acceso de administrador. Orden de resolución según Config.AdminSystem:
origen_admin: comprueba el permiso "origen_quests" de origen_adminace: comprueba IsPlayerAceAllowed(source, Config.AdminAceNode)license: comprueba la lista Config.AdminLicensescustom: llama a Config.AdminCustom.resource:Config.AdminCustom.hasPermission(source, permission)qb: comprueba el grupo del jugador (god, superadmin, admin)esx: comprueba el grupo del jugador (superadmin, admin)Framework.Notify(source, message, ntype)Envía una notificación a un jugador desde el servidor.
Framework.HasItem(source, item, amount) → booleanComprueba si el jugador tiene al menos amount unidades de item. Detecta automáticamente el sistema de inventario.
Framework.AddItem(source, item, amount) → booleanAñade objetos al inventario del jugador. Devuelve true si se hace correctamente.
Framework.RemoveItem(source, item, amount) → booleanQuita objetos del inventario del jugador. Devuelve true si se hace correctamente.
Framework.GetItems() → tableDevuelve todos los objetos registrados en el sistema de inventario activo. Se usa para rellenar el selector de objetos del panel de administración.
Framework.GetItemByName(source, itemName) → tableDevuelve los datos de un objeto (con count/amount) para un jugador concreto.
Framework.GetItemMetadata(itemName) → tableDevuelve los metadatos de un objeto (name, label, image, description) a partir de su nombre.
El script principal llama a estas funciones para resolver las integraciones. Sobrescríbelas en sv_framework.lua para tener control total.
Framework.GetPlayerAffiliationsCustom(source) → table | nilSe llama cuando Config.Integrations.affiliations.mode = 'custom'. Debe devolver:
return {
gang = "mafia", -- string, gang name or "none"
businesses = { "auto_shop" } -- table of business IDs
}Framework.GetGangsCustom() → tableSe llama cuando Config.Integrations.gangs.mode = 'custom'. Debe devolver un array:
return {
{ id = "mafia", label = "Mafia" },
{ id = "ballas", label = "Ballas" },
}Framework.GetBusinessesCustom() → tableSe llama cuando Config.Integrations.businesses.mode = 'custom'. Debe devolver un array:
return {
{ id = "auto_shop", label = "Auto Shop", grades = { "owner", "manager" } },
}Framework.SendPoliceDispatchCustom(source, data) → booleanSe llama cuando Config.Integrations.dispatch.mode = 'custom'. Recibe:
-- data = { message = "...", title = "..." }
-- Return true if the alert was sent successfully.
function Framework.SendPoliceDispatchCustom(_source, _data)
exports['my_dispatch']:SendAlert(_source, _data)
return true
endFramework.CreateLog(data)Se llama internamente cuando se realizan acciones de administración. Reenvía a origen_admin si está en ejecución; si no, recurre al evento SendDiscordLog.