
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.
- ESX Legacy (
es_extended, testato con 1.14) - oxmysql
- Tabella
owned_vehiclesper 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
- Metti la cartella
off_giveawayinresources. - Nel
server.cfg, dopo oxmysql ed ESX:
ensure oxmysql
ensure es_extended
ensure off_giveaway- Inserisci il tuo gruppo in
admin.groupse apri/giveawayadmin.
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
| Opzione | Predefinito | Descrizione |
|---|---|---|
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.design | 3 | Design dell'interfaccia: 1 = Classico, 2 = Scontrino, 3 = Storefront |
blur | true | Sfondo 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 / keyLabel | 74 / '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 |
accounts | Contanti, banca, soldi sporchi | Conti 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 / maxWinners | 2500 / 25 | Valori massimi nel menu |
limits.maxDuration | 180 | Durata massima in minuti |
vehicles.plateFormat | 'LLL NNN' | Targa per i veicoli vinti: L = lettera, N = numero, massimo 8 caratteri |
vehicles.types | vedi file | Tipo in owned_vehicles per categoria (auto, moto, barca, elicottero, aereo), deve corrispondere al tuo garage |
vehicles.blacklist | Veicoli militari | Modelli non selezionabili nel menu |
pendingInterval | 120 | Ogni quanti secondi vengono ritentati i premi in attesa |
Aggiungere un tuo conto come premio, ad es. fiches del casinò:
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.
| Funzione | A 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
/giveawaypartecipi, 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.
È sempre in corso un solo giveaway. Un avvio automatico che cade durante un giveaway in corso viene saltato e annotato nella console.
Per sviluppatori
-- 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.
| Problema | Soluzione |
|---|---|
«Non hai il permesso per farlo» con /giveawayadmin | Inserisci 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 garage | Adatta 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 automaticamente | Controlla 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 arriva | Inventario pieno: viene ritentato ogni pendingInterval secondi e arriva automaticamente. |
| Il tasto G o H non funziona | Altri script usano quel tasto. Cambia join.key / toggle.key, /giveaway funziona sempre. |
| Mancano le immagini degli item | Imposta itemImages sulla cartella immagini del tuo inventario. |
Non l’hai ancora acquistato?
Vedi Giveaway nel negozio