Antes de empezar#
Antes de instalar Lottery Creator, asegúrate de que tu servidor cumple los requisitos. Tres recursos y un framework son obligatorios; todo lo demás es opcional y se detecta por sí solo.
Requisito | Estado | Notas |
|---|---|---|
| Obligatorio | Declarado como dependencia, así que el recurso no se iniciará sin él. |
| Obligatorio | Acceso a la base de datos. |
| Obligatorio | Callbacks, carga de modelos y animaciones, funciones auxiliares compartidas. |
Framework | Obligatorio |
|
| Incluido | Transmite los props de la máquina de lotería y del boleto de rasca. Viene en la misma descarga. |
Target | Opcional |
|
| Opcional | Dibuja esos avisos 3D con la UI de texto de Quasar en lugar del texto simple del juego. |
| Opcional | Su HUD se oculta, junto con el radar, mientras el creador está abierto. |
Quasar Smartphone | Opcional | Añade la app Lottery al teléfono. |
El framework y el target se eligen según lo que ya está en ejecución:
Capa | Detección |
|---|---|
Framework |
|
Target |
|
Avisos |
|
Cada integración opcional se desactiva en silencio cuando falta su recurso. Integraciones tiene los detalles.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Descargar Lottery Creator#
Después de comprar Lottery Creator, el recurso se vincula automáticamente a tu cuenta de CFX Portal.
Inicia sesión en CFX Portal con la misma cuenta que usaste al finalizar la compra, abre Granted Assets y descarga Lottery Creator.
Después de extraer la descarga, deberías tener dos recursos:
[lottery]/
├── lottery_machine/ -- streamed props: the machine and the scratch ticket
└── qs-lottery-creator/
├── config/main.lua -- every setting you may edit
├── custom/ -- framework bridges (editable)
├── database/ -- database.sql
├── locales/ -- 41 languages
└── web/ -- the interface, nothing to editMantén la carpeta con el nombre
qs-lottery-creator. La app del teléfono busca la lotería con ese nombre exacto, así que una copia renombrada funciona en las máquinas, pero la app Lottery indica que no está en ejecución.
Instalar el recurso#
Mueve la carpeta [lottery] — ambos recursos — al directorio de recursos de tu servidor. Puede estar dentro de una carpeta de categoría:
resources/
└── [qs]/
└── [lottery]/
├── lottery_machine/
└── qs-lottery-creator/Después abre tu server.cfg y asegúrate de que cada dependencia — y todo lo que deba detectar — se inicie antes que Lottery Creator:
ensure oxmysql
ensure ox_lib
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Target and prompts (optional)
ensure ox_target
ensure qs-textui
# Lottery
ensure lottery_machine
ensure qs-lottery-creatorEl orden de carga importa. El framework y el target se detectan una sola vez, cuando se inicia Lottery Creator: un framework que se inicia después impide que el recurso cargue, y un target que se inicia después no se detecta, así que las máquinas recurren a los avisos. ensure [lottery] también funciona, siempre que vaya después de ellos.
La base de datos#
Cada máquina vive en una tabla, qs_lottery_vendors. Importa database/database.sql una vez, antes del primer inicio, con HeidiSQL o cualquier otro cliente de MariaDB / MySQL.
Columnas | Contienen |
|---|---|
| La propia máquina: su nombre, su modelo, su posición y su orientación. |
| Lo que cuesta un boleto, el ítem que entrega y la cuenta con la que se paga. |
| El blip del mapa y quién puede usar la máquina. |
| El identificador de quien la guardó por última vez en el creador. |
| El jugador que la posee, el nombre que se muestra para él y las ganancias pendientes de cobrar. |
| Si los jugadores pueden comprarla, y por cuánto. |
| Boletos cargados en una máquina con propietario, ventas totales e ingresos brutos. |
Definición de la tabla (ESX y QBCore)
CREATE TABLE IF NOT EXISTS `qs_lottery_vendors` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`creator` varchar(50) NOT NULL,
`label` varchar(255) NOT NULL,
`prop` varchar(100) NOT NULL,
`price` int(11) NOT NULL DEFAULT 100,
`item` varchar(100) NOT NULL DEFAULT 'scratchcard',
`account` varchar(50) NOT NULL DEFAULT 'money',
`coords` longtext NOT NULL,
`blip` longtext DEFAULT NULL,
`job` longtext DEFAULT NULL,
`job_grades` longtext DEFAULT NULL,
`owner` varchar(60) DEFAULT NULL,
`owner_name` varchar(100) DEFAULT NULL,
`balance` int(11) NOT NULL DEFAULT 0,
`for_sale` tinyint(1) NOT NULL DEFAULT 1,
`purchase_price` int(11) NOT NULL DEFAULT 25000,
`tickets_sold` int(11) NOT NULL DEFAULT 0,
`total_revenue` int(11) NOT NULL DEFAULT 0,
`stock` int(11) NOT NULL DEFAULT 0,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `creator` (`creator`),
KEY `owner` (`owner`),
KEY `label` (`label`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;Añadir el ítem de rasca#
Un boleto de lotería es un ítem de inventario: una máquina lo entrega, y al usarlo se abre la tarjeta. El ítem debe existir en tu inventario con el nombre de Config.VendorDefaults.item — scratchcard por defecto. Lottery Creator lo registra como usable mediante tu framework al iniciarse; tú solo añades la definición.
En ox_inventory/data/items.lua. Este también es el de Qbox.
['scratchcard'] = {
label = 'Scratch & Win',
weight = 10,
stack = true,
close = true,
description = 'A lottery scratchcard. Scratch the surface and test your luck.',
},En qs-inventory/shared/items.lua.
['scratchcard'] = {
['name'] = 'scratchcard',
['label'] = 'Scratch & Win',
['weight'] = 10,
['type'] = 'item',
['image'] = 'scratchcard.png',
['unique'] = false,
['useable'] = true,
['shouldClose'] = true,
['combinable'] = nil,
['description'] = 'A lottery scratchcard. Scratch the surface and test your luck — you might win some cash or nothing at all.'
},En qb-core/shared/items.lua.
scratchcard = { name = 'scratchcard', label = 'Scratch & Win', weight = 10, type = 'item', image = 'scratchcard.png', unique = false, useable = true, shouldClose = true, description = 'A lottery scratchcard. Scratch the surface and test your luck — you might win some cash or nothing at all.' },El inventario predeterminado de ESX lee sus ítems de la base de datos:
INSERT INTO `items` (`name`, `label`, `weight`) VALUES
('scratchcard', 'Scratch & Win', 10);Añade un icono llamado scratchcard.png a la carpeta de imágenes de tu inventario para que el boleto no se muestre como un cuadrado vacío.
¿Vas a renombrar el ítem? Cambia
Config.VendorDefaults.itemy la entrada del inventario a la vez. Solo ese ítem abre una tarjeta — el campo Scratch Item de una máquina concreta cambia lo que entrega esa máquina, no lo que se puede rascar.
Reclamar el acceso al creador#
Las máquinas se colocan y editan desde /lotterycreator, y cada guardado se comprueba en el servidor. Cualquiera de estas vías da acceso a un jugador:
Jugadores del grupo admin o superadmin. Desde la consola del servidor:
setgroup <server id> adminJugadores con el permiso admin o god, o con el ace command — el que ya tienen los administradores de txAdmin. En server.cfg:
add_ace group.admin command allow
add_principal identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx group.adminLos trabajos listados en Config.CreatorJobs también pueden abrir el creador. grade es false para todos los rangos, o una lista de los rangos exactos permitidos:
Config.CreatorJobs = {
{ job = 'police', grade = false }, -- every grade
{ job = 'realestate', grade = { 3, 4 } }, -- only grades 3 and 4
}Un trabajo de creador coloca y edita máquinas. Los controles de administrador de una máquina con propietario — ponerla a la venta, desalojar a su propietario — siguen reservados a los administradores del framework.
Configurar el recurso#
Cada ajuste vive en un solo archivo, config/main.lua, con un comentario encima de cada bloque. Las demás carpetas editables son para la parte técnica:
Archivo | Contenido |
|---|---|
| Idioma, formato de dinero, acceso al creador, cuentas de pago, valores predeterminados para nuevas máquinas, props, propiedad, interacción, premios, el teléfono, teclas y cámara del creador, depuración. |
| Cada línea de texto, un archivo por idioma. |
| Los bridges con tu framework: dinero, ítems, trabajos, administradores y nombres de personajes. |
| La tabla, solo para una instalación nueva. |
Los valores que conviene revisar primero:
Config.Locale = 'en' -- any file in locales/
Config.VendorDefaults = {
label = 'Lottery Machine',
item = 'scratchcard', -- the ticket item
price = 30, -- new machines and the phone app
account = 'money', -- money · bank · black_money
prop = 'lotrrery_vending_machine',
}
Config.Ownership.enabled = true -- players can buy and run machines
Config.Phone.enabled = true -- the Lottery app in Quasar Smartphone
Config.Debug = false -- extra console outputEl modelo de la máquina realmente se escribe
lotrrery_vending_machine— ese es su nombre dentro delottery_machine. Mantén esa grafía dondequiera que lo uses. Cada opción se explica en Uso → Los ajustes.
Verificar la instalación#
Reinicia tu servidor y lee la consola. El servidor y cada cliente muestran el bridge que cargaron:
[INFO] Successfully loaded the framework. esxUn error en su lugar significa que el framework aún no estaba en ejecución cuando se inició Lottery Creator — mueve su ensure más arriba. Con Config.Debug = true, el servidor también indica cuántas máquinas cargó:
[DEBUG 2.0.1] Loaded lottery vendors from database: 0Después entra en tu servidor y recorre el primer ciclo:
Coloca una máquina
/lotterycreator→ Create Vendor. Ponle un nombre, pulsa Select en Vendor Position, mira al lugar y haz clic izquierdo. De vuelta en el formulario, pulsa Save — la máquina aparece para todos a la vez. Deja For sale sin marcar en esta primera prueba.Compra un boleto
Acércate a ella y elige Buy Lottery Machine - $30 en el target, o pulsa
Een el aviso. Una tarjeta de rasca llega a tu inventario.Ráscala
Usa la tarjeta de rasca desde tu inventario y arrastra el ratón por la tarjeta. Una vez revelada, Claim prize paga en efectivo lo que ganaste.
A partir de aquí, Uso cubre la tabla de premios, las máquinas de jugadores y la app del teléfono.
Actualizar desde una versión anterior#
Reemplaza ambas carpetas con la nueva descarga. Guarda una copia de tu antiguo config/main.lua y traslada tus valores, en lugar de copiar el archivo antiguo sobre el nuevo — tiene bloques nuevos. No vuelvas a importar database.sql.
En el primer inicio con Config.Ownership.enabled = true, el recurso añade las columnas que le faltan — owner, owner_name, balance, for_sale, purchase_price, tickets_sold, total_revenue y stock — y registra cada una en el log:
VENDING INFO: Added missing ownership column: ownerCon la propiedad desactivada, las columnas no se añaden y guardar una máquina falla. Ejecuta la actualización a mano en su lugar:
ALTER TABLE `qs_lottery_vendors`
ADD COLUMN IF NOT EXISTS `owner` varchar(60) DEFAULT NULL,
ADD COLUMN IF NOT EXISTS `owner_name` varchar(100) DEFAULT NULL,
ADD COLUMN IF NOT EXISTS `balance` int(11) NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS `for_sale` tinyint(1) NOT NULL DEFAULT 1,
ADD COLUMN IF NOT EXISTS `purchase_price` int(11) NOT NULL DEFAULT 25000,
ADD COLUMN IF NOT EXISTS `tickets_sold` int(11) NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS `total_revenue` int(11) NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS `stock` int(11) NOT NULL DEFAULT 0;
ALTER TABLE `qs_lottery_vendors`
ADD INDEX IF NOT EXISTS `owner` (`owner`);


