Overrides¶
Los overrides permiten reemplazar cualquier funcion de Bridge sin modificar los archivos base del recurso. Utiles cuando tu servidor usa un sistema propietario (notificaciones custom, inventario custom, sistema de gangs separado, etc.) o para adaptar el comportamiento sin perder los updates oficiales.
Como funciona¶
nb-bridge carga los modulos primero y despues todos los archivos en overrides/:
-- fxmanifest.lua de nb-bridge
client_scripts {
'modules/framework/client.lua',
'modules/inventory/client.lua',
'modules/progress/client.lua',
'overrides/client/*.lua', -- <- se cargan al final
}
server_scripts {
'@oxmysql/lib/MySQL.lua',
'modules/framework/server.lua',
'modules/inventory/server.lua',
'modules/licenses/server.lua',
'overrides/server/*.lua', -- <- se cargan al final
}
Como el Bridge global ya existe cuando tu override corre, puedes reasignar cualquier funcion simplemente sobreescribiendola.
Donde colocar los overrides¶
| Tipo | Carpeta |
|---|---|
| Overrides de client | overrides/client/ |
| Overrides de server | overrides/server/ |
Nombre del archivo libre — se cargan todos con glob *.lua.
Ejemplo 1: Notificaciones custom¶
Si usas mythic_notify, okokNotify u otro sistema propietario:
overrides/client/custom_notify.lua:
function Bridge.ShowNotification(message, type)
exports['mythic_notify']:DoHudText(type or 'info', message)
end
overrides/server/custom_notify.lua:
function Bridge.Notify(source, message, type)
TriggerClientEvent('nb-bridge:client:notify', source, message, type)
end
Todos los recursos nb-* empezaran a usar automaticamente mythic_notify sin tocar su codigo.
Ejemplo 2: Inventario custom¶
overrides/server/custom_inventory.lua:
function Bridge.AddItem(source, item, count, metadata, slot)
return exports['my_inventory']:AddItem(source, item, count, metadata)
end
function Bridge.RemoveItem(source, item, count, metadata, slot)
return exports['my_inventory']:RemoveItem(source, item, count)
end
function Bridge.HasItem(source, item, count)
return exports['my_inventory']:HasItem(source, item, count or 1)
end
Ejemplo 3: Sistema de gangs alternativo¶
Si usas origen_ilegal (o similar) para gangs y quieres que nb-crafting los detecte en el nivel de "trabajo":
overrides/server/gang_system.lua:
local originalGetJob = Bridge.GetJob
function Bridge.GetJob(source)
local gangData = exports['origen_ilegal']:getPlayerGang(source)
if gangData and gangData.id then
return {
name = tostring(gangData.id),
label = gangData.name or 'Unknown',
grade = gangData.level or 0,
grade_name = tostring(gangData.level or 0),
grade_label = 'Level ' .. (gangData.level or 0),
}
end
return originalGetJob(source)
end
Guarda la funcion original antes de sustituirla — de esta forma tu override queda como un decorator que añade logica encima y cae al original si la condicion no aplica.
Ejemplo 4: Bloquear comandos peligrosos¶
overrides/server/safe_set_money.lua:
local MAX_AMOUNT = 1000000
local originalSetMoney = Bridge.SetMoney
function Bridge.SetMoney(source, moneyType, amount, reason)
if amount > MAX_AMOUNT then
print(('[nb-bridge override] blocked SetMoney %s $%d (limite $%d)'):format(source, amount, MAX_AMOUNT))
return false
end
return originalSetMoney(source, moneyType, amount, reason)
end
Buenas practicas¶
- Guarda la original si quieres una cadena:
local originalX = Bridge.X. - Un archivo por proposito — mas facil de mantener que un
_overrides.luagigante. - Respeta la firma — devuelve los mismos tipos que la funcion original para no romper consumidores.
- Documenta en comentarios que override estas aplicando y por que — evita sorpresas cuando actualices nb-bridge.
- Evita mezclar client + server en el mismo archivo — nb-bridge los carga en carpetas separadas.
- Revisa el changelog de nb-bridge al actualizar — si una funcion cambia de firma, tu override necesita ajuste.
Advertencias¶
- Los overrides se cargan una sola vez al arrancar nb-bridge. Si un recurso
nb-*arranca antes que tu override esta resuelto, no hay problema — las llamadasBridge.Xresuelven dinamicamente. - No toques los archivos de
modules/*.luadirectamente. Perderas los cambios al actualizar. - Si necesitas una funcion nueva (no existente en nb-bridge), no hace falta override — puedes extender
Bridgedesde tu propio recurso:
Eso sigue siendo una adicion al Bridge global y evita acoplar tu logica al repositorio de nb-bridge.