Docsob_notifyExports

Exports

Cada export con su firma, sus parámetros y un ejemplo real en contexto. Cliente, servidor y eventos.


Todos los exports son seguros de llamar

Ninguno rompe si le faltan campos opcionales, y ninguno espera respuesta salvo isTextUIOpen. Puedes llamarlos desde donde quieras sin envolverlos en comprobaciones.

Cliente

show(datos) → id

Lanza una notificación. Es el export que vas a usar el 95 % de las veces.

Lua
exports.ob_notify:show({ title = 'Vehículo guardado' })
Parámetro Tipo Descripción
title string Obligatorio. El texto principal
description string Segunda línea. Lo que va entre acentos graves sale en monoespaciada
type string success · error · warning · info · neutral. Por defecto neutral
icon string Nombre del icono. Si falta, el del tipo
label string Cabecera en mayúsculas sobre el título
duration number Milisegundos. Si falta, se calcula por longitud del texto
id string Mismo id = se reemplaza en vez de apilarse
sound boolean Fuerza el sonido aunque esté desactivado en config

Devuelve el id — el que le pasaste, o uno generado.

Ejemplo — confirmar una acción del servidor:

Lua
RegisterNetEvent('migaraje:client:guardado', function(matricula)
    exports.ob_notify:show({
        title       = 'Vehículo guardado',
        description = 'Sultan RS · `' .. matricula .. '`',
        type        = 'success',
        icon        = 'car'
    })
end)
El atajo de una línea

Si solo necesitas un título, pásale la cadena directamente:

Lua
exports.ob_notify:show('Has entrado de servicio')

hide(id)

Cierra una notificación antes de que se le acabe el tiempo.

Lua
exports.ob_notify:hide('garage')
Parámetro Tipo Descripción
id string Obligatorio. El id que le diste al lanzarla

Si ese id no está en pantalla, no pasa nada. No hace falta comprobarlo antes.

clear()

Vacía la pila entera, incluida la cola.

Lua
exports.ob_notify:clear()

Sin parámetros. Útil al morir, al cambiar de personaje o al entrar en un menú a pantalla completa.

showTextUI(texto, opciones)

Muestra la indicación de tecla. Solo hay una a la vez, por diseño: llamarlo otra vez sustituye la que hubiera.

Lua
exports.ob_notify:showTextUI('Pulsa [E] para abrir el garaje', { icon = 'car' })
Parámetro Tipo Descripción
texto string Obligatorio. Lo que va entre corchetes se dibuja como tecla
opciones.icon string Icono a la izquierda
opciones.type string Colorea el icono, igual que en las notificaciones
opciones.position string left · right · top · bottom. Por defecto, el de config

Ejemplo — mostrarlo al acercarse a una zona:

Lua
local dentro = false

CreateThread(function()
    while true do
        local cerca = #(GetEntityCoords(cache.ped) - vector3(215.0, -810.0, 30.0)) < 2.0

        if cerca and not dentro then
            dentro = true
            exports.ob_notify:showTextUI('Pulsa [E] para abrir el garaje', { icon = 'car' })
        elseif not cerca and dentro then
            dentro = false
            exports.ob_notify:hideTextUI()
        end

        Wait(250)
    end
end)

hideTextUI()

Lo oculta. Sin parámetros, y no falla si no había ninguno abierto.

Lua
exports.ob_notify:hideTextUI()

pressTextUI()

Hunde la tecla como si el jugador la hubiera pulsado.

Lua
exports.ob_notify:pressTextUI()
Casi nunca hace falta

ob_notify vigila la tecla él solo: cuando el jugador la pulsa, se hunde sin que nadie haga nada. Este export existe para confirmar la acción en otro momento — por ejemplo cuando el servidor responde que sí, y no cuando se pulsa.

isTextUIOpen() → boolean

Dice si hay alguno abierto.

Lua
if exports.ob_notify:isTextUIOpen() then
    exports.ob_notify:hideTextUI()
end

Servidor

Los mismos nombres, con source delante. Nada más cambia.

show(source, datos)

Lua
exports.ob_notify:show(source, {
    title = 'Has cobrado la nómina',
    type  = 'success',
    icon  = 'money'
})
Parámetro Tipo Descripción
source number Obligatorio. El id del jugador. -1 para todos
datos table Los mismos campos que en cliente

Ejemplo — avisar solo a la policía:

Lua
RegisterNetEvent('midispatch:server:alerta', function(calle)
    for _, jugador in ipairs(GetPlayers()) do
        if esPolicia(jugador) then
            exports.ob_notify:show(tonumber(jugador), {
                label       = 'Dispatch',
                title       = 'Robo en curso',
                description = calle,
                type        = 'warning'
            })
        end
    end
end)

broadcast(datos)

A todos los conectados. Equivale a show(-1, datos) pero se lee mejor.

Lua
exports.ob_notify:broadcast({ title = 'Reinicio en 5 minutos', type = 'warning' })

El resto

Export Qué hace
hide(source, id) Cierra una notificación de ese jugador
clear(source) Vacía su pila
showTextUI(source, texto, opciones) Le muestra el TextUI
hideTextUI(source) Se lo oculta

Eventos

Si prefieres eventos a exports —por ejemplo desde un recurso que no quieres acoplar— hacen exactamente lo mismo.

Lua
TriggerClientEvent('ob_notify:show', source, { title = 'Hola' })
TriggerClientEvent('ob_notify:hide', source, 'garage')
TriggerClientEvent('ob_notify:clear', source)
TriggerClientEvent('ob_notify:textui:show', source, 'Pulsa [E]', { icon = 'car' })
TriggerClientEvent('ob_notify:textui:hide', source)

Reemplazar en vez de apilar

Es la función que menos se usa y más cambia el resultado. Con el mismo id, la notificación se reescribe encima: un proceso de tres pasos ocupa una tarjeta, no tres.

Lua
local function guardarVehiculo()
    exports.ob_notify:show({
        id = 'garage', title = 'Guardando vehículo…',
        type = 'neutral', icon = 'clock', duration = 30000
    })

    local ok = lib.callback.await('migaraje:guardar', false)

    exports.ob_notify:show({
        id = 'garage',
        title = ok and 'Vehículo guardado' or 'No se pudo guardar',
        type  = ok and 'success' or 'error',
        icon  = ok and 'car' or 'alert',
        duration = 4000
    })
end
Pon una duración larga en los pasos intermedios

Mientras el proceso corre no sabes cuánto va a tardar. Con duration = 30000 la tarjeta espera; el paso final la sustituye con su duración normal. Si le pones la duración por defecto, desaparece a mitad del proceso.