Vai al contenuto
Tutta la documentazione

Giveaway

Crea giveaway direttamente in gioco: avviali subito o salvali come modello, che se vuoi parte automaticamente a orari fissi. I giocatori partecipano con un tasto o un comando, i vincitori vengono estratti dal vivo con una ruota di nomi. Le tabelle le crea lo script da solo.

Requisiti
  • ESX Legacy (es_extended, testato con 1.14)
  • oxmysql
  • Tabella owned_vehicles per i premi veicolo (ad es. da ESX o off_vehicleshop)
  • Per le immagini degli item: off_inventory (o un tuo percorso in itemImages)

Funzionalità

  • Menu admin (/giveawayadmin): Crea giveaway su un'unica pagina (premi, durata, vincitori, facoltativamente un nome), con anteprima live di come li vedono i giocatori.
  • Premi: Item, armi, soldi (contanti, banca, soldi sporchi o conti personalizzati) e veicoli. Tutti i veicoli del gioco, anche quelli addon, sono disponibili con immagine e categoria.
  • Premio fisso o lotteria: O ogni vincitore riceve tutto quello che c'è nella lista, o ognuno estrae un premio in base alla probabilità, ad es. 60 % soldi, 30 % banca, 10 % veicolo.
  • Regole: Numero di vincitori, quota d'ingresso, durata, numero massimo e minimo di partecipanti. Se se ne raccolgono troppo pochi, il giveaway viene annullato e rimborsato.
  • Modelli: Salva i giveaway e avviali o duplicali con un clic, oppure modificali nella scheda Crea.
  • Avvio automatico: Attivabile per ogni modello, in giorni della settimana e orari fissi, ad es. ogni venerdì alle 20:00 e alle 22:30. Facoltativamente solo se ci sono abbastanza giocatori online.
  • Cronologia: Controlla dal vivo il giveaway in corso (estrai ora o annulla) e consulta gli ultimi 50 giveaway con i vincitori.
  • Riquadro giocatori: In alto sullo schermo con premi, timer e numero di partecipanti. Partecipi con G o /giveaway, H mostra e nasconde il riquadro.
  • Consegna successiva: Se un premio non entra nell'inventario o il vincitore è offline, viene salvato e consegnato automaticamente in seguito.
  • Log Discord per azioni admin, giveaway e ogni premio consegnato.

Installazione

  1. Metti la cartella off_giveaway in resources.
  2. Nel server.cfg, dopo oxmysql ed ESX:
cfg
ensure oxmysql
ensure es_extended
ensure off_giveaway
  1. Inserisci il tuo gruppo in admin.groups e apri /giveawayadmin.
Item e armi

Item e armi devono esistere in ESX (tabella items o la lista armi di ESX). Altrimenti il giveaway non si può salvare né avviare. La console del server segnala all'avvio i modelli con item mancanti.

Configurazione

config/settings/config.lua

OpzionePredefinitoDescrizione
serverInfo.name'OFF SCRIPTS'Nome del server, mostrato nell'interfaccia al posto di «OFF SCRIPTS»
serverInfo.locale'de'Lingua: de, en, pl, fr, es o it
serverInfo.color{ 155, 89, 255 }Colore dei menu e del riquadro giocatori
serverInfo.design3Design dell'interfaccia: 1 = Classico, 2 = Scontrino, 3 = Storefront
blurtrueSfondo sfocato finché il menu admin è aperto
admin.command / groups'giveawayadmin' / { 'projektleitung' }Comando per il menu admin e quali gruppi possono aprirlo
join.command / key / keyLabel'giveaway' / 47 / 'G'Comando e tasto per partecipare · key come Control-ID, keyLabel compare nel riquadro
toggle.key / keyLabel74 / 'H'Tasto per mostrare e nascondere il riquadro
itemImages'nui://off_inventory/web/dist/images/items/%s.png'Percorso delle immagini degli item, %s = nome dell'item
accountsContanti, banca, soldi sporchiConti disponibili come premio in denaro: name = conto ESX, label = nome visualizzato, facoltativo icon (icona Phosphor)
feeAccounts{ 'money', 'bank' }Quota d'ingresso: paga il primo conto con abbastanza soldi, quindi i contanti e altrimenti la banca
limits.maxMembers / maxWinners2500 / 25Valori massimi nel menu
limits.maxDuration180Durata massima in minuti
vehicles.plateFormat'LLL NNN'Targa per i veicoli vinti: L = lettera, N = numero, massimo 8 caratteri
vehicles.typesvedi fileTipo in owned_vehicles per categoria (auto, moto, barca, elicottero, aereo), deve corrispondere al tuo garage
vehicles.blacklistVeicoli militariModelli non selezionabili nel menu
pendingInterval120Ogni quanti secondi vengono ritentati i premi in attesa

Aggiungere un tuo conto come premio, ad es. fiches del casinò:

lua
accounts = {
  { name = 'money',  label = 'Bargeld' },
  { name = 'bank',   label = 'Bank' },
  { name = 'chips',  label = 'Casino-Chips' },
},

config/functions.lua

Qui colleghi i tuoi script. Gli errori al loro interno vengono intercettati, lo script continua a funzionare.

FunzioneA cosa serve
Notify(message, type)Notify · Server: Notify(source, message, type)
ClientCanUseKeys()false = ora non partecipare col tasto né mostrare/nascondere il riquadro
ServerCanJoin(source, giveaway)false = il giocatore non può partecipare, ad es. in prigione
ServerGiveawayStarted(giveaway)Parte un giveaway, ad es. un tuo post su Discord
ServerGiveawayEnded(giveaway, winners)Estratto, winners con source (nil = offline), identifier, name e reward
ServerGiveawayCancelled(giveaway, reason)Annullato, reason = 'admin' o 'members'
ServerRewardGiven(source, reward)Dopo ogni premio consegnato, anche in seguito

config/settings/config.server.lua e lingue

Webhook Discord per admin (modelli), giveaway (avvio, estrazione, annullamento) e rewards (ogni premio), url = '' disattiva un log. Tutti i testi si trovano in config/locales/ (un file per lingua).

In gioco

  • Menu admin (/giveawayadmin): In alto passi tra Crea, Modelli e Cronologia. Se è in corso un giveaway, in alto un'indicazione LIVE mostra il tempo rimanente.
  • Crea: Rispondi a tre domande: cosa si può vincere, quanto dura, quanti vincono. Il nome è facoltativo, tutto il resto si trova in Altre impostazioni. A destra vedi il riquadro come lo vedono i giocatori. Avvia giveaway lo avvia subito, Come modello lo salva. Carica modello carica un modello salvato da modificare.
  • Premi: In alto scegli il tipo. Item, arma e veicolo aprono una lista con immagine e ricerca, i soldi aggiungono subito un importo. Per le armi la quantità è la munizione. Nella Lotteria (in Altre impostazioni) dai a ogni premio una probabilità, in totale 100 %. Dividi equamente le distribuisce in parti uguali.
  • Modelli: A sinistra la lista, a destra l'editor: in alto il nome, sotto le stesse domande della creazione. Il nome del modello è anche il nome che vedono i giocatori. Al posto del nome, il punto 4 chiede Avvio automatico: scegli i giorni della settimana e fino a 6 orari, sotto compare il prossimo avvio, facoltativo Minimo online. Solo Salva applica le modifiche. Avvia ora avvia subito il modello, Modifica e avvia lo apre nella scheda Crea. L'ora è quella del server.
  • Cronologia: In alto controlli il giveaway in corso, sotto ci sono le statistiche e gli ultimi 50 giveaway. Un clic su una voce mostra i vincitori con i loro premi.
  • Partecipare: Quando parte un giveaway, il riquadro compare in alto a tutti i giocatori. Con G o /giveaway partecipi, la quota d'ingresso viene addebitata prima sui contanti, altrimenti sulla banca. H riduce il riquadro a una piccola barra e lo riapre.
  • Estrazione: Quando il tempo scade o un admin estrae, i vincitori vengono estratti uno dopo l'altro con la ruota di nomi. Poi tutti vedono la lista dei vincitori, i vincitori ricevono anche un messaggio. Senza Estrazione animata la lista compare subito.
  • I veicoli vinti finiscono parcheggiati nel garage (owned_vehicles) con una targa propria, anche se il vincitore è offline.
  • Consegna successiva: Se l'inventario è pieno o il vincitore è offline, riceve il premio automaticamente appena c'è spazio o torna online. Le quote rimborsate ai giocatori offline funzionano allo stesso modo.
Un giveaway alla volta

È sempre in corso un solo giveaway. Un avvio automatico che cade durante un giveaway in corso viene saltato e annotato nella console.

Per sviluppatori

lua
-- Server
local active = exports.off_giveaway:GetActiveGiveaway()        -- nil se non ce n'è nessuno in corso
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()

-- Client
local active = exports.off_giveaway:IsGiveawayActive()
local joined = exports.off_giveaway:HasJoined()

Con StartGiveaway, duration è in secondi (almeno 30). Facoltativi sono description, entryFee, minMembers e options = { reel = false } (senza estrazione animata).

Premi per StartGiveaway: kind = item, weapon, account o vehicle, più name e amount. Per i veicoli anche category (car, bike, boat, heli, plane) e label. Nella lotteria (mode = 'pool') ogni premio ha bisogno di una chance, in totale 100.

Problemi comuni

All'avvio lo script segnala errori e avvisi nella console del server.

ProblemaSoluzione
«Non hai il permesso per farlo» con /giveawayadminInserisci il tuo gruppo in admin.groups e riavvia.
«L'oggetto … non esiste in ESX»Crea l'item nella tabella items o scegline un altro nel modello.
Il veicolo manca nel garageAdatta vehicles.types ai tipi del tuo garage (ad es. aircraft per elicottero e aereo).
Il veicolo manca nella selezioneÈ in vehicles.blacklist? I veicoli addon compaiono appena sono caricati in gioco.
Il modello non parte automaticamenteControlla l'ora del server, Avvio automatico è attivo? Se è già in corso un giveaway o ci sono troppo pochi giocatori online, lo segnala la console.
Il premio non arrivaInventario pieno: viene ritentato ogni pendingInterval secondi e arriva automaticamente.
Il tasto G o H non funzionaAltri script usano quel tasto. Cambia join.key / toggle.key, /giveaway funziona sempre.
Mancano le immagini degli itemImposta itemImages sulla cartella immagini del tuo inventario.

Non l’hai ancora acquistato?

Vedi Giveaway nel negozio