
Giveaway
Giveaways direkt im Spiel erstellen: sofort starten oder als Vorlage speichern, die auf Wunsch automatisch zu festen Zeiten startet. Spieler treten per Taste oder Befehl bei, die Gewinner werden live mit einer Namens-Rolle gezogen. Die Tabellen legt das Script selbst an.
- ESX Legacy (
es_extended, getestet mit 1.14) - oxmysql
- Tabelle
owned_vehiclesfür Fahrzeug-Gewinne (z. B. von ESX oder off_vehicleshop) - Für Item-Bilder: off_inventory (oder eigener Pfad in
itemImages)
Funktionen
- Admin-Menü (
/giveawayadmin): Giveaways auf einer Seite erstellen (Gewinne, Dauer, Gewinner, optional ein Name), mit Live-Vorschau, wie Spieler es sehen. - Gewinne: Items, Waffen, Geld (Bargeld, Bank, Schwarzgeld oder eigene Konten) und Fahrzeuge. Alle Fahrzeuge aus dem Spiel, auch Addon-Fahrzeuge, stehen mit Bild und Kategorie zur Auswahl.
- Fester Gewinn oder Lostopf: Entweder bekommt jeder Gewinner alles aus der Liste, oder jeder zieht einen Gewinn nach Chance, z. B. 60 % Geld, 30 % Bank, 10 % Fahrzeug.
- Regeln: Anzahl Gewinner, Teilnahmegebühr, Laufzeit, maximale und Mindestteilnehmer. Kommen zu wenige zusammen, wird abgebrochen und erstattet.
- Vorlagen: Giveaways speichern und mit einem Klick starten, duplizieren oder im Erstellen-Tab anpassen.
- Automatisch starten: Pro Vorlage einschaltbar, an festen Wochentagen und Uhrzeiten, z. B. jeden Freitag um 20:00 und 22:30. Optional nur, wenn genug Spieler online sind.
- Verlauf: Das laufende Giveaway live steuern (jetzt auslosen oder abbrechen) und die letzten 50 Giveaways mit Gewinnern ansehen.
- Spieler-Anzeige: Oben im Bild mit Gewinnen, Timer und Teilnehmerzahl. Beitreten mit G oder
/giveaway, H blendet die Anzeige ein und aus. - Nachliefern: Passt ein Gewinn nicht ins Inventar oder ist der Gewinner offline, wird er gespeichert und automatisch nachgeliefert.
- Discord-Logs für Admin-Aktionen, Giveaways und jeden ausgegebenen Gewinn.
Installation
- Ordner
off_giveawayinresourceslegen. - In die
server.cfgnach oxmysql und ESX:
ensure oxmysql
ensure es_extended
ensure off_giveaway- Deine Gruppe in
admin.groupseintragen und/giveawayadminöffnen.
Items und Waffen müssen in ESX existieren (Tabelle items bzw. die Waffenliste von ESX). Sonst lässt sich das Giveaway nicht speichern oder starten. Vorlagen mit fehlenden Items meldet die Server-Konsole beim Start.
Konfiguration
config/settings/config.lua
| Option | Standard | Beschreibung |
|---|---|---|
serverInfo.name | 'OFF SCRIPTS' | Servername, steht in der Oberfläche statt „OFF SCRIPTS“ |
serverInfo.locale | 'de' | Sprache: de, en, pl, fr, es oder it |
serverInfo.color | { 155, 89, 255 } | Farbe der Menüs und der Spieler-Anzeige |
serverInfo.design | 3 | Design der Oberfläche: 1 = Klassisch, 2 = Kassenbon, 3 = Storefront |
blur | true | Hintergrund unscharf, solange das Admin-Menü offen ist |
admin.command / groups | 'giveawayadmin' / { 'projektleitung' } | Befehl für das Admin-Menü und welche Gruppen es öffnen dürfen |
join.command / key / keyLabel | 'giveaway' / 47 / 'G' | Befehl und Taste zum Teilnehmen · key als Control-ID, keyLabel steht in der Anzeige |
toggle.key / keyLabel | 74 / 'H' | Taste, um die Anzeige ein- und auszublenden |
itemImages | 'nui://off_inventory/web/dist/images/items/%s.png' | Pfad zu den Item-Bildern, %s = Itemname |
accounts | Bargeld, Bank, Schwarzgeld | Konten, die als Geld-Gewinn zur Auswahl stehen: name = ESX-Konto, label = Anzeige, optional icon (Phosphor-Icon) |
feeAccounts | { 'money', 'bank' } | Teilnahmegebühr: Das erste Konto mit genug Geld zahlt, also Bargeld und sonst Bank |
limits.maxMembers / maxWinners | 2500 / 25 | Höchstwerte im Menü |
limits.maxDuration | 180 | Längste Laufzeit in Minuten |
vehicles.plateFormat | 'LLL NNN' | Kennzeichen für gewonnene Fahrzeuge: L = Buchstabe, N = Zahl, höchstens 8 Zeichen |
vehicles.types | siehe Datei | Typ in owned_vehicles pro Kategorie (Auto, Motorrad, Boot, Heli, Flugzeug), muss zu deiner Garage passen |
vehicles.blacklist | Militärfahrzeuge | Modelle, die im Menü nicht zur Auswahl stehen |
pendingInterval | 120 | Alle so viele Sekunden werden wartende Gewinne neu versucht |
Eigenes Konto als Gewinn hinzufügen, z. B. Casino-Chips:
accounts = {
{ name = 'money', label = 'Bargeld' },
{ name = 'bank', label = 'Bank' },
{ name = 'chips', label = 'Casino-Chips' },
},config/functions.lua
Hier bindest du eigene Scripts an. Fehler darin werden abgefangen, das Script läuft weiter.
| Funktion | Wofür |
|---|---|
Notify(message, type) | Notify · Server: Notify(source, message, type) |
ClientCanUseKeys() | false = gerade nicht per Taste teilnehmen oder die Anzeige umschalten |
ServerCanJoin(source, giveaway) | false = Spieler darf nicht teilnehmen, z. B. im Jail |
ServerGiveawayStarted(giveaway) | Ein Giveaway startet, z. B. eigener Discord-Post |
ServerGiveawayEnded(giveaway, winners) | Ausgelost, winners mit source (nil = offline), identifier, name und reward |
ServerGiveawayCancelled(giveaway, reason) | Abgebrochen, reason = 'admin' oder 'members' |
ServerRewardGiven(source, reward) | Nach jedem ausgegebenen oder nachgelieferten Gewinn |
config/settings/config.server.lua und Sprachen
Discord-Webhooks für admin (Vorlagen), giveaway (Start, Auslosung, Abbruch) und rewards (jeder Gewinn), url = '' schaltet einen Log aus. Alle Texte stehen in config/locales/ (eine Datei pro Sprache).
Im Spiel
- Admin-Menü (
/giveawayadmin): Oben wechselst du zwischen Erstellen, Vorlagen und Verlauf. Läuft gerade ein Giveaway, zeigt oben ein LIVE-Hinweis die Restzeit. - Erstellen: Drei Fragen beantworten: Was gibt es zu gewinnen, wie lange läuft es, wie viele gewinnen. Der Name ist optional, alles andere steckt unter Weitere Einstellungen. Rechts siehst du die Anzeige, wie Spieler sie sehen. Giveaway starten startet sofort, Als Vorlage speichert es. Vorlage laden übernimmt eine gespeicherte Vorlage zum Anpassen.
- Gewinne: Oben wählst du die Art. Item, Waffe und Fahrzeug öffnen eine Liste mit Bild und Suche, Geld fügt direkt einen Betrag hinzu. Bei Waffen ist die Menge die Munition. Im Lostopf (unter Weitere Einstellungen) gibst du jedem Gewinn eine Chance, zusammen 100 %. Gleich verteilen teilt sie gleichmäßig auf.
- Vorlagen: Links die Liste, rechts der Editor: oben der Name, darunter dieselben Fragen wie beim Erstellen. Der Name der Vorlage ist auch der Name, den Spieler sehen. Statt nach dem Namen fragt Punkt 4 nach Automatisch starten: Wochentage und bis zu 6 Uhrzeiten wählen, darunter steht der nächste Start, optional Mindestens online. Erst Speichern übernimmt Änderungen. Jetzt starten startet die Vorlage sofort, Anpassen & starten öffnet sie im Erstellen-Tab. Die Uhrzeit ist die des Servers.
- Verlauf: Oben steuerst du das laufende Giveaway, darunter stehen Statistik und die letzten 50 Giveaways. Ein Klick auf einen Eintrag zeigt die Gewinner mit ihren Gewinnen.
- Teilnehmen: Startet ein Giveaway, erscheint oben die Anzeige bei allen Spielern. Mit G oder
/giveawaytrittst du bei, eine Teilnahmegebühr wird erst vom Bargeld, sonst von der Bank abgebucht. H blendet die Anzeige auf eine kleine Leiste ein und aus. - Ziehung: Läuft die Zeit ab oder ein Admin lost aus, werden die Gewinner nacheinander mit der Namens-Rolle gezogen. Danach sehen alle die Gewinnerliste, Gewinner bekommen zusätzlich eine Nachricht. Ohne Animierte Ziehung erscheint sofort die Liste.
- Fahrzeug-Gewinne landen mit eigenem Kennzeichen eingeparkt in der Garage (
owned_vehicles), auch wenn der Gewinner offline ist. - Nachliefern: Ist das Inventar voll oder der Gewinner offline, bekommt er den Gewinn automatisch, sobald Platz ist oder er wieder online kommt. Erstattete Gebühren für offline Spieler laufen genauso.
Es läuft immer nur ein Giveaway. Ein automatischer Start, der in ein laufendes Giveaway fällt, wird übersprungen und in der Konsole vermerkt.
Für Entwickler
-- Server
local active = exports.off_giveaway:GetActiveGiveaway() -- nil, wenn keins läuft
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()Bei StartGiveaway ist duration in Sekunden (mindestens 30). Optional sind description, entryFee, minMembers und options = { reel = false } (ohne animierte Ziehung).
Gewinne bei StartGiveaway: kind = item, weapon, account oder vehicle, dazu name und amount. Bei Fahrzeugen zusätzlich category (car, bike, boat, heli, plane) und label. Im Lostopf (mode = 'pool') braucht jeder Gewinn eine chance, zusammen 100.
Häufige Fehler
Beim Start meldet das Script Fehler und Hinweise in der Server-Konsole.
| Problem | Lösung |
|---|---|
„Dafür hast du keine Berechtigung“ bei /giveawayadmin | Deine Gruppe in admin.groups eintragen und neu starten. |
| „Das Item … gibt es in ESX nicht“ | Item in der Tabelle items anlegen oder in der Vorlage ein anderes wählen. |
| Fahrzeug fehlt in der Garage | vehicles.types an die Typen deiner Garage anpassen (z. B. aircraft für Heli und Flugzeug). |
| Fahrzeug fehlt in der Auswahl | Steht es in vehicles.blacklist? Addon-Fahrzeuge erscheinen, sobald sie im Spiel geladen sind. |
| Vorlage startet nicht automatisch | Server-Uhrzeit prüfen, Automatisch starten an? Läuft schon ein Giveaway oder sind zu wenige online, meldet es die Konsole. |
| Gewinn kommt nicht an | Inventar voll: Er wird alle pendingInterval Sekunden neu versucht und kommt automatisch. |
| Taste G oder H geht nicht | Andere Scripts belegen die Taste. join.key / toggle.key ändern, /giveaway geht immer. |
| Item-Bilder fehlen | itemImages auf den Bilder-Ordner deines Inventars stellen. |
Noch nicht gekauft?
Giveaway im Shop ansehen