
Giveaway
Crea giveaways directamente en el juego: inícialos al momento o guárdalos como plantilla, que si quieres se inicia automáticamente a horas fijas. Los jugadores participan con una tecla o un comando, los ganadores se sortean en vivo con una ruleta de nombres. El script crea las tablas por sí mismo.
- ESX Legacy (
es_extended, probado con 1.14) - oxmysql
- Tabla
owned_vehiclespara premios de vehículos (p. ej. de ESX o off_vehicleshop) - Para las imágenes de items: off_inventory (o tu propia ruta en
itemImages)
Funciones
- Menú de admin (
/giveawayadmin): Crea giveaways en una sola página (premios, duración, ganadores, opcionalmente un nombre), con vista previa en vivo de cómo lo ven los jugadores. - Premios: Items, armas, dinero (efectivo, banco, dinero negro o cuentas propias) y vehículos. Todos los vehículos del juego, también los addon, están disponibles con imagen y categoría.
- Premio fijo o lotería: O cada ganador recibe todo lo de la lista, o cada uno saca un premio según su probabilidad, p. ej. 60 % dinero, 30 % banco, 10 % vehículo.
- Reglas: Número de ganadores, cuota de entrada, duración, máximo y mínimo de participantes. Si se juntan muy pocos, se cancela y se reembolsa.
- Plantillas: Guarda giveaways e inícialos o duplícalos con un clic, o ajústalos en la pestaña Crear.
- Iniciar automáticamente: Se activa por plantilla, en días de la semana y horas fijas, p. ej. cada viernes a las 20:00 y a las 22:30. Opcionalmente solo si hay suficientes jugadores conectados.
- Historial: Controla el giveaway en curso en vivo (sortear ya o cancelar) y consulta los últimos 50 giveaways con sus ganadores.
- Aviso para jugadores: Arriba en la pantalla con premios, temporizador y número de participantes. Participas con G o
/giveaway, H muestra y oculta el aviso. - Entrega posterior: Si un premio no cabe en el inventario o el ganador está desconectado, se guarda y se entrega automáticamente más tarde.
- Logs de Discord para acciones de admin, giveaways y cada premio entregado.
Instalación
- Pon la carpeta
off_giveawayenresources. - En el
server.cfg, después de oxmysql y ESX:
ensure oxmysql
ensure es_extended
ensure off_giveaway- Añade tu grupo en
admin.groupsy abre/giveawayadmin.
Los items y armas tienen que existir en ESX (tabla items o la lista de armas de ESX). Si no, el giveaway no se puede guardar ni iniciar. La consola del servidor avisa al iniciar de las plantillas con items que faltan.
Configuración
config/settings/config.lua
| Opción | Predeterminado | Descripción |
|---|---|---|
serverInfo.name | 'OFF SCRIPTS' | Nombre del servidor, se muestra en la interfaz en lugar de «OFF SCRIPTS» |
serverInfo.locale | 'de' | Idioma: de, en, pl, fr, es o it |
serverInfo.color | { 155, 89, 255 } | Color de los menús y del aviso para jugadores |
serverInfo.design | 3 | Diseño de la interfaz: 1 = Clásico, 2 = Ticket, 3 = Storefront |
blur | true | Fondo desenfocado mientras el menú de admin está abierto |
admin.command / groups | 'giveawayadmin' / { 'projektleitung' } | Comando para el menú de admin y qué grupos pueden abrirlo |
join.command / key / keyLabel | 'giveaway' / 47 / 'G' | Comando y tecla para participar · key como Control-ID, keyLabel aparece en el aviso |
toggle.key / keyLabel | 74 / 'H' | Tecla para mostrar y ocultar el aviso |
itemImages | 'nui://off_inventory/web/dist/images/items/%s.png' | Ruta a las imágenes de items, %s = nombre del item |
accounts | Efectivo, banco, dinero negro | Cuentas disponibles como premio de dinero: name = cuenta de ESX, label = nombre visible, opcional icon (icono de Phosphor) |
feeAccounts | { 'money', 'bank' } | Cuota de entrada: paga la primera cuenta con suficiente dinero, o sea, efectivo y si no, banco |
limits.maxMembers / maxWinners | 2500 / 25 | Valores máximos en el menú |
limits.maxDuration | 180 | Duración máxima en minutos |
vehicles.plateFormat | 'LLL NNN' | Matrícula de los vehículos ganados: L = letra, N = número, máximo 8 caracteres |
vehicles.types | ver archivo | Tipo en owned_vehicles por categoría (coche, moto, barco, helicóptero, avión), tiene que coincidir con tu garaje |
vehicles.blacklist | Vehículos militares | Modelos que no aparecen para elegir en el menú |
pendingInterval | 120 | Cada cuántos segundos se reintentan los premios pendientes |
Añadir una cuenta propia como premio, p. ej. fichas de casino:
accounts = {
{ name = 'money', label = 'Bargeld' },
{ name = 'bank', label = 'Bank' },
{ name = 'chips', label = 'Casino-Chips' },
},config/functions.lua
Aquí conectas tus propios scripts. Los errores dentro se capturan, el script sigue funcionando.
| Función | Para qué |
|---|---|
Notify(message, type) | Notify · Servidor: Notify(source, message, type) |
ClientCanUseKeys() | false = ahora no participar con tecla ni alternar el aviso |
ServerCanJoin(source, giveaway) | false = el jugador no puede participar, p. ej. en la cárcel |
ServerGiveawayStarted(giveaway) | Empieza un giveaway, p. ej. tu propio post en Discord |
ServerGiveawayEnded(giveaway, winners) | Sorteado, winners con source (nil = desconectado), identifier, name y reward |
ServerGiveawayCancelled(giveaway, reason) | Cancelado, reason = 'admin' o 'members' |
ServerRewardGiven(source, reward) | Tras cada premio entregado, también los entregados más tarde |
config/settings/config.server.lua e idiomas
Webhooks de Discord para admin (plantillas), giveaway (inicio, sorteo, cancelación) y rewards (cada premio), url = '' desactiva un log. Todos los textos están en config/locales/ (un archivo por idioma).
En el juego
- Menú de admin (
/giveawayadmin): Arriba cambias entre Crear, Plantillas e Historial. Si hay un giveaway en curso, arriba un aviso LIVE muestra el tiempo restante. - Crear: Responde tres preguntas: qué se puede ganar, cuánto dura, cuántos ganan. El nombre es opcional, todo lo demás está en Más ajustes. A la derecha ves el aviso tal como lo ven los jugadores. Iniciar giveaway lo inicia al momento, Como plantilla lo guarda. Cargar plantilla carga una plantilla guardada para ajustarla.
- Premios: Arriba eliges el tipo. Item, arma y vehículo abren una lista con imagen y búsqueda, el dinero añade directamente una cantidad. En las armas, la cantidad es la munición. En la Lotería (en Más ajustes) le das a cada premio una probabilidad, 100 % en total. Repartir igual las reparte por igual.
- Plantillas: A la izquierda la lista, a la derecha el editor: arriba el nombre, debajo las mismas preguntas que al crear. El nombre de la plantilla es también el nombre que ven los jugadores. En lugar del nombre, el punto 4 pregunta por Iniciar automáticamente: elige días de la semana y hasta 6 horas, debajo aparece el próximo inicio, opcionalmente Mínimo en línea. Solo Guardar aplica los cambios. Iniciar ahora inicia la plantilla al momento, Ajustar e iniciar la abre en la pestaña Crear. La hora es la del servidor.
- Historial: Arriba controlas el giveaway en curso, debajo están las estadísticas y los últimos 50 giveaways. Un clic en una entrada muestra los ganadores con sus premios.
- Participar: Cuando empieza un giveaway, el aviso aparece arriba a todos los jugadores. Con G o
/giveawayparticipas, la cuota de entrada se cobra primero del efectivo y si no, del banco. H reduce el aviso a una barra pequeña y lo vuelve a abrir. - Sorteo: Cuando se acaba el tiempo o un admin sortea, los ganadores salen uno tras otro con la ruleta de nombres. Después todos ven la lista de ganadores, los ganadores reciben además un mensaje. Sin Sorteo animado la lista aparece al momento.
- Los vehículos ganados quedan aparcados en el garaje (
owned_vehicles) con su propia matrícula, aunque el ganador esté desconectado. - Entrega posterior: Si el inventario está lleno o el ganador está desconectado, recibe el premio automáticamente en cuanto haya sitio o vuelva a conectarse. Las cuotas reembolsadas a jugadores desconectados funcionan igual.
Siempre hay solo un giveaway en curso. Un inicio automático que coincide con un giveaway en curso se omite y se anota en la consola.
Para desarrolladores
-- Servidor
local active = exports.off_giveaway:GetActiveGiveaway() -- nil si no hay ninguno en curso
local member = exports.off_giveaway:IsMember(source)
local ok, err = exports.off_giveaway:StartPreset('p_friday', 'Discord-Bot')
local ok, err = exports.off_giveaway:StartGiveaway({
title = 'Event-Giveaway',
mode = 'fixed',
rewards = { { kind = 'account', name = 'bank', amount = 50000 } },
winners = 1,
duration = 600,
maxMembers = 500,
}, 'Event-Team')
local ok, err = exports.off_giveaway:DrawGiveaway()
local ok, err = exports.off_giveaway:CancelGiveaway()
-- Cliente
local active = exports.off_giveaway:IsGiveawayActive()
local joined = exports.off_giveaway:HasJoined()En StartGiveaway, duration va en segundos (mínimo 30). Son opcionales description, entryFee, minMembers y options = { reel = false } (sin sorteo animado).
Premios en StartGiveaway: kind = item, weapon, account o vehicle, además de name y amount. En los vehículos también category (car, bike, boat, heli, plane) y label. En la lotería (mode = 'pool') cada premio necesita una chance, 100 en total.
Problemas frecuentes
Al iniciar, el script informa de errores y avisos en la consola del servidor.
| Problema | Solución |
|---|---|
«No tienes permiso para eso» con /giveawayadmin | Añade tu grupo en admin.groups y reinicia. |
| «El objeto … no existe en ESX» | Crea el item en la tabla items o elige otro en la plantilla. |
| Falta el vehículo en el garaje | Ajusta vehicles.types a los tipos de tu garaje (p. ej. aircraft para helicóptero y avión). |
| Falta el vehículo en la selección | ¿Está en vehicles.blacklist? Los vehículos addon aparecen en cuanto se cargan en el juego. |
| La plantilla no se inicia automáticamente | Revisa la hora del servidor, ¿está activado Iniciar automáticamente? Si ya hay un giveaway en curso o hay muy pocos conectados, la consola lo indica. |
| El premio no llega | Inventario lleno: se reintenta cada pendingInterval segundos y llega automáticamente. |
| La tecla G o H no funciona | Otros scripts usan esa tecla. Cambia join.key / toggle.key, /giveaway funciona siempre. |
| Faltan las imágenes de items | Apunta itemImages a la carpeta de imágenes de tu inventario. |
¿Aún no lo has comprado?
Ver Giveaway en la tienda