Cómo funcionan las integraciones#
El núcleo de Outfit Bag no sabe qué framework ni qué target usas. Todo lo que depende de otro recurso pasa por un pequeño archivo bridge sin cifrar en client/custom/ y server/custom/, y el de tu servidor se elige mirando lo que ya está iniciado:
Capa | Compatibles | Sin él |
|---|---|---|
Framework | es_extended · qb-core · qbx_core | Funciona en modo standalone: la bolsa se coloca con el comando |
Target | ox_target · qb-target · qs-textui | Un aviso dibujado sobre la bolsa: E para abrir, G para recoger. |
Inventario | Cualquier inventario que respete los ítems usables del framework: ox_inventory, qs-inventory, qb-inventory, el de ESX por defecto | Solo standalone: no hay ítem. |
Ropa | illenium-appearance · fivem-appearance · qb-appearance · qb-clothing · qbx-clothing · skinchanger | Los atuendos aplicados duran hasta que el jugador se reconecta. |
Notificaciones | Las del propio framework: ESX.ShowNotification, QBCore Notify, qbx_core Notify | Se imprimen en la consola F8. |
Base de datos | oxmysql | Obligatorio. El único. |
Cada integración opcional se degrada en silencio. Si falta un recurso, el script recurre a su propia versión de esa parte y nada da error.
Frameworks#
Cada bridge de framework responde a las mismas preguntas (quién es este jugador, cuál es su trabajo, cómo se da y se quita un ítem) a su manera. La respuesta más importante es el identificador, porque decide con qué atuendos se abre una bolsa:
Framework | Los atuendos se guardan con | Ítems dados y quitados con |
|---|---|---|
ESX |
|
|
QBCore |
|
|
Qbox |
|
|
Standalone | El primer identificador del jugador. | Sin ítem. |
El trabajo que usan las bolsas de uniforme sale del mismo sitio: job.name en los datos del jugador del framework. El ítem usable también se registra a través del framework: ESX.RegisterUsableItem, QBCore.Functions.CreateUseableItem o el CreateUseableItem de qbx_core; por eso cualquier inventario que los respete funciona sin su propio bridge.
Targets#
Target | Cómo interactúan los jugadores |
|---|---|
| Use Bag y Pick Up Bag como opciones en la propia bolsa. |
| Las mismas dos opciones en la bolsa, a menos de 2 m. |
| Un aviso 3D visible desde 6 m. E abre a menos de 2 m, G recoge. |
Integrado | Texto dibujado sobre la bolsa a menos de 2 m: |
Los textos vienen del archivo de idioma (TARGET_USE_BAG, TARGET_PICKUP_BAG), así que siguen Config.Language.
Recursos de ropa#
Los recursos de ropa solo entran en juego cuando Config.PersistOutfitToClothing está activado; consulta Uso → Atuendos persistentes. Gana el primero que se encuentre, en este orden:
Orden | Recurso | Cómo se guarda el atuendo |
|---|---|---|
1 — cualquier framework |
|
|
2 — cualquier framework |
| Los mismos exports, después |
3 — ESX |
|
|
3 — QBCore |
| La skin actual del jugador con el atuendo fusionado, mediante |
3 — Qbox |
|
|
Forzar la detección#
La detección busca un recurso iniciado de su lista y se queda con el que encuentra. Para fijar una capa a mano (dos targets en ejecución a la vez, un recurso renombrado), define el valor en lugar de dejar que lo detecte:
-- shared/config.lua
Config.Framework = 'qbox' -- esx · qbcore · qbox · standalone
Config.Target = 'ox_target' -- ox_target · qb-target · qs-textui · standaloneConviene fijarlo siempre que haya dos candidatos del mismo tipo en ejecución (ox_target junto a qb-target, por ejemplo), porque las listas no se comprueban en un orden fijo.
Añadir un backend#
Dar soporte a algo que no está en la lista es un trabajo pequeño: las carpetas de bridges no están cifradas, y cada archivo solo se ejecuta cuando es el elegido.
Copia el bridge más parecido
Los frameworks están en
client/custom/framework/yserver/custom/framework/, los targets enclient/custom/targets/. Copia el archivo más parecido a lo que usas y dale un nombre nuevo.Cambia la condición y las llamadas
La primera línea decide cuándo se ejecuta el archivo. Apúntala a tu propio id y después reescribe cada función para tu recurso, manteniendo su nombre y sus argumentos:
lua if not Config.Framework or Config.Framework ~= 'mycore' then return endRegístralo para la detección
Añade tu recurso a la lista
frameworksotargetsal principio deshared/config.lua—['my_core'] = 'mycore'— o fíjalo conConfig.Framework = 'mycore'.
Qué debe proporcionar cada bridge
Bridge | Funciones |
|---|---|
Framework del cliente |
|
Framework del servidor |
También registra el ítem usable y el evento |
Target |
Cada opción lleva |
Idiomas#
Se incluyen 28 traducciones en locales/: árabe (ar), búlgaro (bg), catalán (ca), checo (cs), danés (da), alemán (de), griego (el), inglés (en), español (es), persa (fa), francés (fr), hindi (hi), húngaro (hu), italiano (it), japonés (ja), coreano (ko), neerlandés (nl), noruego (no), polaco (pl), portugués (pt), rumano (ro), ruso (ru), esloveno (sl), sueco (sv), tailandés (th), turco (tr), chino simplificado (zh-CN) y chino tradicional (zh-TW). Elige uno con Config.Language.
Para añadir el tuyo, copia locales/en.lua a un archivo nuevo, cambia su primera línea a Locales["xx"] = {, traduce los valores y define Config.Language = 'xx'. Todos los archivos de locales/ se cargan solos. Una clave que le falte a tu archivo se muestra como Translation [xx][KEY] does not exist en lugar del texto.



