Cuxial Bridge permite que un mismo script funcione en QBox, QBCore o ESX sin editarlo. Los scripts le piden al bridge jugadores, dinero, trabajos, items y opciones de target; el bridge traduce cada petición a lo que use tu servidor.
Es gratuito y de código abierto. Lo necesitan todos los scripts de Cuxial y se instala una sola vez.
Con qué es compatible
| Capa | Compatibles | Se detecta por |
|---|---|---|
| Framework | QBox, QBCore, ESX | qbx_core, qb-core, es_extended |
| Inventario | ox_inventory, qb-inventory | Recurso con ese nombre |
| Target | sleepless_interact, ox_target, qb-target | Recurso con ese nombre |
La detección sigue el orden de cada fila. Si hay dos opciones en marcha, gana la primera: qbx_core sobre qb-core, ox_inventory sobre qb-inventory, sleepless_interact sobre ox_target.
Si no se detecta nada, el bridge recurre a QBox, ox_inventory y ox_target.
Algunos scripts requieren un framework concreto: Cuxial Multichar requiere QBox o QBCore. La página de cada script indica sus requisitos.
Instalación
Instala la dependencia
Cuxial Bridge necesita ox_lib. Comprueba que está instalado y que arranca antes que el bridge.
Copia el recurso
Descarga la última versión desde GitHub y coloca la carpeta cuxial_bridge en tu directorio resources. Cada versión y sus cambios están en la página de releases.
Mantén el nombre de carpeta cuxial_bridge. Todos los scripts lo cargan con ese nombre exacto y no arrancan si lo cambias.
Arráncalo después de tu framework
Añádelo debajo de tu framework, inventario y target, y encima de todos los scripts de Cuxial.
ensure ox_lib
ensure qbx_core
ensure ox_inventory
ensure ox_target
ensure cuxial_bridgeSustituye las líneas de framework, inventario y target por las que use tu servidor.
Revisa la consola del servidor
Al arrancar, el bridge muestra lo que ha detectado:
[cuxial_bridge] listo framework=qbox inventario=ox_inventory target=ox_target contexto=serverSi los tres valores coinciden con tu servidor, ya está.
Configuración
Cuxial Bridge no tiene archivo de configuración. Las convars de abajo solo hacen falta cuando la detección elige la opción equivocada.
Forzar una opción
| Convar | Por defecto | Valores |
|---|---|---|
cuxial_bridge:framework | auto | auto, qbox, qbcore, esx |
cuxial_bridge:inventory | auto | auto, ox_inventory, qb-inventory |
cuxial_bridge:target | auto | auto, sleepless_interact, ox_target, qb-target |
setr cuxial_bridge:framework "esx"
setr cuxial_bridge:inventory "ox_inventory"
setr cuxial_bridge:target "ox_target"Usa setr, no set. Estos valores se leen en el servidor y en el juego de cada jugador; con set los dos lados pueden no coincidir. Coloca las líneas encima de ensure cuxial_bridge.
Tablas de base de datos personalizadas
Cámbialas solo si tu framework guarda los personajes o los vehículos en tablas con otros nombres. Solo se leen en el servidor, así que basta con set.
| Convar | Por defecto en QBox / QBCore | Por defecto en ESX | Qué es |
|---|---|---|---|
cuxial_bridge:charTable | players | users | Tabla de personajes |
cuxial_bridge:charIdColumn | citizenid | identifier | Columna del identificador del personaje |
cuxial_bridge:vehTable | player_vehicles | owned_vehicles | Tabla de vehículos en propiedad |
cuxial_bridge:vehOwnerColumn | citizenid | owner | Columna del dueño del vehículo |
set cuxial_bridge:charTable "players"Para desarrolladores
Tus propios recursos también pueden usar el bridge. Añade '@cuxial_bridge/init.lua' a sus shared_scripts y llama a Bridge.*. Estos módulos son los más útiles fuera de los scripts Cuxial.
Bridge.Jobs (servidor)
Gestiona los miembros de cualquier trabajo, con el jugador conectado o desconectado, en QBox, QBCore y ESX. Pensado para menús de jefe que contratan, despiden y ascienden.
| Función | Devuelve | Qué hace |
|---|---|---|
Bridge.Jobs.Members(job) | table[] | { cid, name, grade, online, src? } de cada miembro, conectado o no. |
Bridge.Jobs.Grades(job) | table[] | { grade, name, isboss } de menor a mayor. |
Bridge.Jobs.Grade(cid, job) | number | nil | Grado del personaje en ese trabajo, o nil si no es miembro. |
Bridge.Jobs.Hire(cid, job, grade) | ok, err | Le da ese trabajo como principal. |
Bridge.Jobs.SetGrade(cid, job, grade) | ok, err | Cambia el grado de un miembro. |
Bridge.Jobs.Remove(cid, job) | boolean | Le quita el trabajo, solo si es el suyo. |
Errores posibles: params, no_job, no_grade, already, not_member, not_found, max_jobs, framework. En QBox, Hire respeta qbx:setjob_replaces y qbx:max_jobs_per_player.
local ok, err = Bridge.Jobs.Hire(cid, 'mechanic', 0)
if not ok then print('no se pudo contratar', err) endBridge.Anim (cliente)
Bloquea las animaciones del jugador mientras dura una escena de tu recurso: sentarse en un escritorio, un ascensor, una cinemática. Con el bloqueo, Cuxial Emotes no deja lanzar ni cancelar emotes, abrir el menú, levantar las manos, cruzar los brazos, señalar, hacer ragdoll, tumbarse ni agacharse, y al bloquear se suelta lo que estuviera haciendo.
| Función | Devuelve | Qué hace |
|---|---|---|
Bridge.Anim.lock(reason) | — | Bloquea con un motivo propio ('seat', 'office'…). Repetirlo no cuenta dos veces. |
Bridge.Anim.unlock(reason) | — | Suelta ese motivo. |
Bridge.Anim.set(reason, locked) | — | lock o unlock según el booleano. |
Bridge.Anim.unlockAll() | — | Suelta todos los motivos de tu recurso. |
Bridge.Anim.isHeld(reason?) | boolean | Si tu recurso tiene ese motivo, o alguno si no pasas ninguno. |
Bridge.Anim.isLocked() | boolean | Si el jugador está bloqueado por cualquier recurso. |
Bridge.Anim.lock('seat')
-- ... la escena ...
Bridge.Anim.unlock('seat')- Varios recursos y motivos se suman: el jugador queda libre cuando no queda ninguno.
- Si tu recurso se para, sus bloqueos se sueltan. Si Cuxial Emotes se reinicia, los bloqueos vigentes se vuelven a aplicar.
- El estado del jugador
animLockvale'recurso:motivo'del primer bloqueo, onil. Léelo para no lanzar tu propia animación encima. Lo escribe el cliente: úsalo para impedir acciones, nunca para concederlas. - Mientras haya bloqueo, el móvil sd-phone queda desactivado y se reactiva al terminar, salvo que otro script ya lo hubiera desactivado.
sleepless_interactoculta las opciones con animación mientras dure. - Requiere Cuxial Emotes. Sin él, las llamadas no hacen nada.
Bridge.Screens (servidor y cliente)
Añade pantallas y apps de Cuxial OS desde tu recurso a Cuxial Screens: registerScreen, removeScreen, registerApp, onCall, push, notify en el servidor, y open, close, isUsing en el cliente. Se vuelven a registrar solas si Cuxial Screens arranca después o se reinicia. Consulta Exports y eventos de Cuxial Screens.
Actualizaciones
Unos segundos después de arrancar el servidor, Cuxial Bridge comprueba la versión de cada script Cuxial que tengas, el propio bridge incluido, y escribe un único bloque en la consola del servidor: una línea por cada script con versión nueva, con el número nuevo y si es una actualización mayor, menor o un parche. Si todo está al día, escribe una sola línea. No se descarga ni se cambia nada automáticamente.
| Convar | Qué hace |
|---|---|
cuxial_versioncheck 0 | Desactiva el aviso. |
cuxial_versioncheck_quiet 1 | Oculta la línea que sale cuando todo está al día. |
cuxial_versioncheck_details 1 | Muestra hasta 3 novedades por script desactualizado. |
set cuxial_versioncheck_details 1Para actualizar, descarga la última versión, sustituye la carpeta cuxial_bridge y reinicia el servidor.
Actualiza el bridge antes de actualizar un script: las versiones nuevas de los scripts pueden apoyarse en el último bridge. Consulta Actualizar un script.
Problemas frecuentes
La consola avisa de que no se detectó ningún framework
El aviso dice [cuxial_bridge] aviso: no se detectó framework, usando fallback "qbox".
Causa. Tu framework no estaba en marcha cuando cargó el bridge o un script.
Solución. Sube la línea ensure del framework por encima de cuxial_bridge y de todos los scripts de Cuxial. Si la carpeta del framework tiene un nombre no estándar, fuérzalo con setr cuxial_bridge:framework.
Se detecta el inventario o el target equivocado
Causa. Hay dos opciones en marcha a la vez, o la tuya arranca después de los scripts de Cuxial.
Solución. Revisa primero el orden de arranque. Si los dos recursos tienen que seguir, fuerza el correcto con setr cuxial_bridge:inventory o setr cuxial_bridge:target.
Un script no arranca y el error menciona cuxial_bridge/init.lua
Causa. El bridge falta, se ha renombrado o arranca después del script.
Solución. Comprueba que la carpeta se llama cuxial_bridge y que ensure cuxial_bridge aparece antes que el script.
