Exports
Cada export con su firma, sus parámetros y un ejemplo real en contexto. Cliente, servidor y eventos.
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.
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:
RegisterNetEvent('migaraje:client:guardado', function(matricula)
exports.ob_notify:show({
title = 'Vehículo guardado',
description = 'Sultan RS · `' .. matricula .. '`',
type = 'success',
icon = 'car'
})
end)Si solo necesitas un título, pásale la cadena directamente:
exports.ob_notify:show('Has entrado de servicio')hide(id)
Cierra una notificación antes de que se le acabe el tiempo.
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.
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.
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:
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.
exports.ob_notify:hideTextUI()pressTextUI()
Hunde la tecla como si el jugador la hubiera pulsado.
exports.ob_notify:pressTextUI()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.
if exports.ob_notify:isTextUIOpen() then
exports.ob_notify:hideTextUI()
endServidor
Los mismos nombres, con source delante. Nada más cambia.
show(source, datos)
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:
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.
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.
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.
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
})
endMientras 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.