Cómo funcionan las integraciones#
Nada dentro de Books Creator sabe qué framework o inventario usas. Cada uno está detrás de un pequeño archivo abierto — sin escrow — y el recurso elige el correcto al iniciar mirando lo que ya está en marcha.
Capa | Compatibles | Dónde está |
|---|---|---|
Framework | ESX · QBCore · Qbox · l2s-core |
|
Inventario | Once, listados abajo |
|
HUD | El minimapa · qs-interface |
|
Menús | Menú contextual de ox_lib — la elección Open / Edit | Integrado |
Base de datos | oxmysql | Obligatorio. El único. |
Frameworks#
Framework | Detectado a partir de | Escritor guardado como |
|---|---|---|
ESX |
| El jugador: |
QBCore |
| El personaje: |
Qbox |
| El personaje: |
l2s-core |
| El personaje: |
Un framework no es opcional: el bridge es lo que registra quién escribió un libro y hace que el ítem sea usable. Si no hay ninguno de los cuatro en marcha, Books Creator se detiene al iniciar con un error.
Inventarios#
Un libro vive en los metadatos de su ítem, así que el inventario tiene que hacer dos cosas: avisar a Books Creator cuando se usa el ítem y permitirle escribir el id del libro de vuelta en el ítem.
Inventario | Adaptador | Libro guardado en el ítem |
|---|---|---|
|
| Sí |
|
| Sí — mediante el ítem: |
|
| Sí |
|
| Necesita |
|
| Necesita |
|
| Necesita |
|
| Necesita |
|
| Necesita |
| Ninguno por ahora | Copia |
Ninguno, o el inventario clásico de ESX |
| No — los libros no se pueden guardar |
ox_inventory#
ox_inventory envía los usos de ítems a través del server.export en la definición del ítem en lugar de un registro de ítems usables, así que el export es lo que conecta ambos. Un efecto secundario que vale la pena aprovechar: cualquier ítem con ese export se comporta como un libro — un diario, un tomo, un expediente — cada uno con su propia etiqueta, peso e imagen:
-- ox_inventory/data/items.lua
['diary'] = {
label = 'Diary',
weight = 150,
stack = false,
close = true,
consume = 0,
server = {
export = 'qs-book-creator.useBook',
},
},Añadir un inventario#
Dar soporte a un inventario que no está en la lista es un archivo y una línea.
Copia el adaptador más parecido
Duplica un archivo de
server/custom/inventory/adapters/—qb.luapara un fork de qb-inventory,qs.luaen otro caso — y cambia la comprobación del principio por el nombre de tu inventario. Cada archivo de esa carpeta se carga por sí solo.Completa las cuatro funciones
Función
Propósito
supportsMetadata()Devuelve
truecuando los ítems pueden llevar metadatos.registerUsable(item, cb)Llama a
cb(source, { slot, name, metadata })cuando se usa el ítem.setMetadata(source, slot, data)Sustituye los metadatos del ítem en ese slot.
getItems(source)Devuelve los ítems del jugador, cada uno con
slot,nameymetadata(oinfo).lua -- server/custom/inventory/adapters/my_inventory.lua if Config.Inventory ~= 'my-inventory' then return end function inventory.supportsMetadata() return true end function inventory.registerUsable(itemName, callback) sfr:registerUsableItem(itemName, function(source, item) callback(source, { slot = item.slot, name = item.name, metadata = item.info or item.metadata, }) end) end function inventory.setMetadata(source, slot, data) -- use your inventory's own export here exports['my-inventory']:SetItemMetadata(source, slot, data) end function inventory.getItems(source) return exports['my-inventory']:GetInventory(source) or {} end return inventoryRegístralo para la detección
Añade una entrada a la lista
inventoriesenconfig/main.lua— la clave es el nombre del recurso, el valor es lo que compara tu comprobación — y reinicia.lua local inventories = { -- ... ['my-inventory'] = 'my-inventory', }
ps-inventory#
ps-inventory ya está en la lista de detección pero no tiene adaptador propio, y el ítem del libro nunca se vuelve usable. Es un fork de qb-inventory, así que copia qb.lua a ps.lua y cambia solo su comprobación:
if Config.Inventory ~= 'ps-inventory' then
return
endOcultar el HUD#
Mientras el editor está abierto, el minimapa se oculta, y también el HUD de qs-interface cuando está en marcha. El lector no toca ninguno de los dos. Para ocultar también otro HUD, añade su export a ToggleHud en custom/client.lua:
function ToggleHud(bool)
DisplayRadar(bool)
if GetResourceState('qs-interface') == 'started' then
exports['qs-interface']:ToggleHud(bool)
end
-- your HUD here, for example:
-- exports['my-hud']:SetVisible(bool)
endNotificaciones#
Los mensajes como Book saved successfully los dibuja la propia interfaz del libro, así que se ven igual en todos los servidores. Para enviarlos a tu propio recurso de notificaciones, cambia la función Notification en custom/client.lua:
function Notification(msg, type)
-- type is 'info', 'success' or 'error'
lib.notify({ description = msg, type = type })
end


