Exports de servidor#
Para abrir libros desde tus propios scripts — las normas al entrar por primera vez, un briefing cuando un jugador empieza su turno, una placa en un museo, una nota de misión recogida del suelo.
openBook
Abre un libro guardado en el lector para un jugador. Es de solo lectura: no hace falta ningún ítem y el jugador no puede editarlo.
local ok = exports['qs-book-creator']:openBook(source, bookUid)Parámetro | Tipo | Descripción |
|---|---|---|
| number | El id de servidor del jugador. |
| string | number | El |
Devuelve false solo cuando falta un argumento. Un libro que no existe, o que no tiene título ni páginas, muestra al jugador This book has no data en lugar de abrirse.
-- /rules opens the server rulebook for whoever types it
RegisterCommand('rules', function(source)
exports['qs-book-creator']:openBook(source, 'server-rules')
end, false)useBook
El manejador de uso de ítem para ox_inventory. Se declara en la definición del ítem y nunca se llama a mano:
server = {
export = 'qs-book-creator.useBook',
},Un libro con un id legible#
Un ítem en blanco recibe un id aleatorio, pero un id puede ser cualquier texto de hasta 64 caracteres. Dar uno legible a los libros que abres desde código — server-rules, lspd-handbook — evita tener que copiar ids de la base de datos. Abre el editor con ese id desde el servidor, escribe el libro y guarda:
-- restricted: needs the ace command.writerules
RegisterCommand('writerules', function(source)
TriggerClientEvent('book:client:openCreator', source, {
bookUid = 'server-rules',
})
end, true)No interviene ningún ítem: al guardar, el libro se almacena con server-rules, listo para openBook y para copias. El editor se abre vacío salvo que se le pase una tabla book, y al guardar se reemplaza lo que esté almacenado con ese id.
Dar una copia de un libro#
Una copia es un ítem de libro normal cuyos metadatos llevan el id del libro. Usa el id que elegiste o lee uno de la base de datos con SELECT unique_id, title FROM qs_books;.
exports.ox_inventory:AddItem(source, 'book', 1, {
bookUid = 'server-rules',
bookTitle = 'Server Rules',
author = 'Staff',
})exports['qs-inventory']:AddItem(source, 'book', 1, nil, {
bookUid = 'server-rules',
bookTitle = 'Server Rules',
author = 'Staff',
})local Player = QBCore.Functions.GetPlayer(source)
Player.Functions.AddItem('book', 1, false, {
bookUid = 'server-rules',
bookTitle = 'Server Rules',
author = 'Staff',
})Abrir un libro creado en código#
El lector no necesita la base de datos. Envíale una tabla de libro y se abre — para contenido creado al momento: un historial delictivo de tu MDT, un recibo, un briefing de misión, un periódico generado.
TriggerClientEvent('book:client:openBook', source, {
title = 'Case File #2231',
author = 'LSPD Records',
description = 'Confidential',
cover_url = 'https://example.com/case-cover.png',
pages = {
{
title = 'Suspect',
subtitle = 'Known aliases',
content = 'First paragraph.\nSecond paragraph.',
image = 'https://example.com/mugshot.png',
},
{ content = 'A page with text only.' },
},
})Cada página necesita content; el resto es opcional. Un libro sin páginas muestra This book has no data, y no se abre nada mientras el jugador ya está leyendo.
Eventos de cliente#
Enviados desde el servidor con TriggerClientEvent.
Evento | Payload | Función |
|---|---|---|
| Una tabla de libro | Abre el lector. |
|
| Abre el editor. |
|
| Muestra el menú Open / Edit. |
|
| Muestra un mensaje en la interfaz del libro. |
Callbacks#
Del cliente al servidor, mediante ox_lib — lib.callback.await(name, false, ...) desde cualquier script de cliente.
Callback | Parámetros | Devuelve |
|---|---|---|
|
| El libro, o |
|
|
|
|
|
|
|
|
|
| — |
|
| — |
|
book:createBook, book:updateBook, book:removeBook y book:getBookById se mantienen para integraciones escritas para versiones anteriores.
Estructuras de datos#
-- A book, as stored and as sent to the reader
Book = {
unique_id = 'server-rules', -- the id items carry as bookUid
title = 'Server Rules',
author = 'Staff',
description = 'Read before you play',
cover_url = 'https://example.com/cover.png',
pages = { Page, Page, ... },
item = 'book',
creator = 'char1:1a2b3c...', -- who first wrote it
}
-- One page
Page = {
title = 'Chapter I', -- optional
subtitle = 'The beginning', -- optional
content = 'Text...', -- required; \n starts a new paragraph
image = 'https://example.com/a.png', -- optional
}
-- The metadata on a book item
metadata = {
bookUid = 'server-rules',
bookTitle = 'Server Rules',
author = 'Staff',
}


