Inicio › Documentación › Personalización · origen_quests

Personalización · origen_quests

Todos los ficheros personalizables están excluidos del cifrado CFX escrow y se pueden editar sin problema.

text
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, integrations

custom/cl_drawtext.lua

Controla 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.

lua
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.

lua
function HideQuestText()
    lib.hideTextUI()
end

Sustituye estas funciones para usar cualquier sistema de drawtext o textUI.


custom/cl_framework.lua

Framework.GetLocalIdentifier() → string | nil

Devuelve el identificador del jugador local (citizenid / license). Se usa para sincronizar la XP.

lua
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
end

Framework.GetPlayerData() → table

Devuelve el objeto completo de datos del jugador del framework. Se usa para los metadatos de la interfaz.

lua
function Framework.GetPlayerData()
    local ok, p = pcall(function() return exports.qbx_core:GetPlayerData() end)
    return (ok and p) and p or {}
end

Framework.NotifyClient(message, notifyType)

Envía una notificación al cliente local.

lua
function Framework.NotifyClient(message, notifyType)
    -- notifyType: 'inform' | 'success' | 'error' | 'warning'
    lib.notify({ description = message, type = notifyType })
end

Adapta 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.

lua
function Framework.OnPlayerLoaded(callback)
    AddEventHandler('QBCore:Client:OnPlayerLoaded', callback)
end

Framework.TriggerCallback(name, cb, ...)

Envuelve lib.callback para los callbacks de servidor. Normalmente no necesitas modificarla.

Framework.GetPlayerGang() → string

Devuelve el nombre de la banda actual del jugador o "none".

Framework.GetPlayerBusinesses() → table

Devuelve los negocios activos del jugador desde el statebag.


custom/sv_framework.lua

Framework.GetPlayer(source) → table | nil

Devuelve el objeto de jugador del framework para el source indicado.

lua
function Framework.GetPlayer(source)
    local ok, p = pcall(function() return exports.qbx_core:GetPlayer(src) end)
    return (ok and p) and p or nil
end

Framework.GetIdentifier(source) → string | nil

Devuelve el identificador único del jugador (citizenid en QB, license en ESX/standalone).

Framework.HasAdminPermission(source) → boolean

Comprueba si un jugador tiene acceso de administrador. Orden de resolución según Config.AdminSystem:

  1. origen_admin: comprueba el permiso "origen_quests" de origen_admin
  2. ace: comprueba IsPlayerAceAllowed(source, Config.AdminAceNode)
  3. license: comprueba la lista Config.AdminLicenses
  4. custom: llama a Config.AdminCustom.resource:Config.AdminCustom.hasPermission(source, permission)
  5. qb: comprueba el grupo del jugador (god, superadmin, admin)
  6. 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) → boolean

Comprueba si el jugador tiene al menos amount unidades de item. Detecta automáticamente el sistema de inventario.

Framework.AddItem(source, item, amount) → boolean

Añade objetos al inventario del jugador. Devuelve true si se hace correctamente.

Framework.RemoveItem(source, item, amount) → boolean

Quita objetos del inventario del jugador. Devuelve true si se hace correctamente.

Framework.GetItems() → table

Devuelve 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) → table

Devuelve los datos de un objeto (con count/amount) para un jugador concreto.

Framework.GetItemMetadata(itemName) → table

Devuelve los metadatos de un objeto (name, label, image, description) a partir de su nombre.


Hooks de integración

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 | nil

Se llama cuando Config.Integrations.affiliations.mode = 'custom'. Debe devolver:

lua
return {
    gang      = "mafia",       -- string, gang name or "none"
    businesses = { "auto_shop" }  -- table of business IDs
}

Framework.GetGangsCustom() → table

Se llama cuando Config.Integrations.gangs.mode = 'custom'. Debe devolver un array:

lua
return {
    { id = "mafia",  label = "Mafia" },
    { id = "ballas", label = "Ballas" },
}

Framework.GetBusinessesCustom() → table

Se llama cuando Config.Integrations.businesses.mode = 'custom'. Debe devolver un array:

lua
return {
    { id = "auto_shop", label = "Auto Shop", grades = { "owner", "manager" } },
}

Framework.SendPoliceDispatchCustom(source, data) → boolean

Se llama cuando Config.Integrations.dispatch.mode = 'custom'. Recibe:

lua
-- data = { message = "...", title = "..." }
-- Return true if the alert was sent successfully.
function Framework.SendPoliceDispatchCustom(_source, _data)
    exports['my_dispatch']:SendAlert(_source, _data)
    return true
end

Framework.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.