Cómo funcionan las integraciones#
Nada dentro de Lottery Creator llama directamente a tu framework. El dinero, los ítems, los trabajos, los administradores y los nombres de los personajes pasan por un puente por framework en custom/, elegido al arrancar según lo que ya está en ejecución. Todo lo demás se detecta del mismo modo.
Capa | Compatible | Sin ello |
|---|---|---|
Framework |
| Obligatorio. El recurso no se carga. |
Inventario | El que use tu framework — | Obligatorio: el boleto es un ítem. |
Target |
| Avisos 3D con |
Avisos |
| El propio texto 3D del juego. |
HUD |
| Solo se oculta el radar mientras el creador está abierto. |
Teléfono | Sin app. Las máquinas funcionan como siempre. | |
Base de datos |
| Obligatorio. |
Cada integración opcional se desactiva en silencio. Si falta un recurso, su función simplemente se retira: nada da error.
Cuentas de dinero#
Cada pago indica una cuenta — money, bank o black_money — y el puente la traduce para tu framework:
Cuenta | ESX | QBCore / Qbox |
|---|---|---|
|
|
|
|
|
|
|
| El valor de los ítems |
Dinero | Qué cuenta |
|---|---|
Boleto en una máquina | La cuenta de pago de la máquina, elegida en el creador entre |
Boleto en el teléfono |
|
Premios | Siempre |
Comprar una máquina, reponer, ganancias, reventa |
|
Target y avisos#
Con ox_target o qb-target en ejecución, cada máquina recibe hasta dos opciones, y cada una solo se muestra a los jugadores a los que corresponde:
Opción | Se muestra a |
|---|---|
Buy <name> - $<price> | Cualquiera que pueda usar la máquina, mientras vende boletos. |
Buy machine - $<price> | Cualquiera, mientras la máquina no tiene dueño y está a la venta. |
Manage machine | Su dueño y los administradores del framework. |
Sin target, las mismas opciones se convierten en avisos 3D dentro de Config.VendorInteractDistance: E compra un boleto y G abre Buy o Manage — o E cuando es la única opción. Con qs-textui en ejecución, los avisos adoptan su aspecto. Configura Config.UseTarget = false para usar avisos incluso con un target instalado.
Con qb-target, las opciones de una máquina se calculan cuando aparece. Las máquinas vuelven a aparecer cada vez que cambian (precio, ajustes de venta, stock que se agota o vuelve), así que esto rara vez se nota; un jugador cuyo trabajo cambia ve la diferencia al volver a entrar.
Inventarios y el ítem#
El boleto se da, se quita y se cuenta mediante las propias funciones de ítems de tu framework, y se hace utilizable mediante ESX.RegisterUsableItem o QBCore.Functions.CreateUseableItem. Cualquier inventario que las respete funciona — ox_inventory, qs-inventory, qb-inventory y el predeterminado de ESX lo hacen. La definición para cada uno está en Instalación → Añadir el ítem de rasca y gana.
El teléfono#
La app Lottery viene con Quasar Smartphone y se comunica con Lottery Creator por su nombre de recurso, qs-lottery-creator. No hay nada que conectar aparte de Config.Phone, y el orden de arranque no importa: la app comprueba que la lotería esté en ejecución en cada petición.
¿Usas otro teléfono? La app se basa en cinco callbacks de servidor que cualquier app de teléfono puede llamar — consulta Comandos y exports → Callbacks del teléfono.
Añadir un framework#
Dar soporte a otro framework es una carpeta y una línea.
Copia el puente más parecido
Copia
custom/qb/ocustom/esx/— suclient.luayserver.lua— a una carpeta nueva comocustom/mycore/.Cambia las llamadas de dentro
Cada función envuelve una llamada al framework. En el servidor:
getPlayerFromId,getIdentifier,getAccountMoney,removeAccountMoney,addAccountMoney,addItem,removeItem,getItem,registerUsableItem,playerIsAdmin,getJobName,getJobGrade,getJobsData,getUserNameygetSourceFromIdentifier. En el cliente:getJobNameygetJobGrade.Mantén lo que devuelve cada una:
removeAccountMoneyresponde true o false,addItemresponde true cuando el ítem cupo, ygetItemdevuelve una tabla con uncount.Regístralo para la detección
En
config/main.lua, asocia tu recurso principal con el nombre de la carpeta:lua local frameworks = { ['es_extended'] = 'esx', ['qb-core'] = 'qb', ['qbx_core'] = 'qb', ['l2s-core'] = 'qb', ['my_core'] = 'mycore', -- loads custom/mycore/ }
En esos mismos archivos se ajusta un puente existente — por ejemplo, un servidor cuyo staff usa otro grupo de ESX:
-- custom/esx/server.lua
function framework:playerIsAdmin(source)
local group = self:getPlayerFromId(source).getGroup()
return group == 'admin' or group == 'superadmin' or group == 'mod'
endIdiomas#
Se incluyen 41 traducciones en locales/: árabe (ar), búlgaro (bg), bengalí (bn), catalán (ca), checo (cs), danés (da), alemán (de), griego (el), inglés (en), español (es), estonio (et), persa (fa), finés (fi), francés (fr), hebreo (he), hindi (hi), croata (hr), húngaro (hu), indonesio (id), italiano (it), japonés (ja), coreano (ko), lituano (lt), letón (lv), malayo (ms), neerlandés (nl), noruego (no), polaco (pl), portugués (pt), rumano (ro), ruso (ru), eslovaco (sk), esloveno (sl), sueco (sv), suajili (sw), tailandés (th), turco (tr), ucraniano (uk), urdu (ur), vietnamita (vi) y chino (zh).
Elige uno con Config.Locale. El inglés siempre se carga por debajo, así que una línea que falte en una traducción se muestra en inglés en lugar de en blanco. Para añadir un idioma, copia locales/en.json a un archivo nuevo como locales/xx.json, traduce los valores — mantén las claves y los {{placeholders}} — y configura Config.Locale = 'xx'.
Moneda#
Config.Intl da formato a todas las cantidades de la interfaz. Un servidor en euros, por ejemplo:
Config.Intl = {
locales = 'es-ES',
options = {
style = 'currency',
currency = 'EUR',
minimumFractionDigits = 0,
}
}Algunos mensajes escriben el signo $ por sí mismos — la opción del boleto, el mensaje de premio y las notificaciones de propiedad. Cámbialo en tu archivo de idioma si tu servidor usa otra moneda.



