
Giveaway
Twórz giveawaye bezpośrednio w grze: uruchom od razu albo zapisz jako szablon, który na życzenie startuje automatycznie o stałych porach. Gracze dołączają klawiszem lub komendą, zwycięzcy są losowani na żywo z animowaną listą nazw. Tabele skrypt tworzy sam.
- ESX Legacy (
es_extended, testowane z 1.14) - oxmysql
- Tabela
owned_vehiclesdla nagród w postaci pojazdów (np. z ESX lub off_vehicleshop) - Dla obrazków itemów: off_inventory (lub własna ścieżka w
itemImages)
Funkcje
- Menu admina (
/giveawayadmin): Twórz giveawaye na jednej stronie (nagrody, czas trwania, zwycięzcy, opcjonalnie nazwa), z podglądem na żywo, jak widzą to gracze. - Nagrody: Itemy, bronie, pieniądze (gotówka, bank, brudne pieniądze lub własne konta) i pojazdy. Wszystkie pojazdy z gry, także addonowe, są do wyboru z obrazkiem i kategorią.
- Stała nagroda lub loteria: Albo każdy zwycięzca dostaje wszystko z listy, albo każdy losuje jedną nagrodę według szansy, np. 60 % pieniądze, 30 % bank, 10 % pojazd.
- Zasady: Liczba zwycięzców, wpisowe, czas trwania, maksymalna i minimalna liczba uczestników. Jeśli zbierze się za mało, giveaway zostaje anulowany, a wpisowe zwrócone.
- Szablony: Zapisuj giveawaye i uruchamiaj lub duplikuj je jednym kliknięciem albo dostosuj w zakładce Utwórz.
- Uruchamiaj automatycznie: Do włączenia dla każdego szablonu, w stałe dni tygodnia i o stałych godzinach, np. w każdy piątek o 20:00 i 22:30. Opcjonalnie tylko, gdy online jest wystarczająco graczy.
- Historia: Steruj trwającym giveawayem na żywo (losuj teraz lub anuluj) i przeglądaj ostatnie 50 giveawayów ze zwycięzcami.
- Okienko dla graczy: U góry ekranu z nagrodami, timerem i liczbą uczestników. Dołączasz przez G lub
/giveaway, H pokazuje i ukrywa okienko. - Dostarczanie później: Jeśli nagroda nie mieści się w ekwipunku albo zwycięzca jest offline, zostaje zapisana i automatycznie dostarczona później.
- Logi Discord dla akcji admina, giveawayów i każdej wydanej nagrody.
Instalacja
- Wrzuć folder
off_giveawaydoresources. - Dodaj do
server.cfgpo oxmysql i ESX:
ensure oxmysql
ensure es_extended
ensure off_giveaway- Wpisz swoją grupę w
admin.groupsi otwórz/giveawayadmin.
Itemy i bronie muszą istnieć w ESX (tabela items lub lista broni ESX). Inaczej giveawaya nie da się zapisać ani uruchomić. Szablony z brakującymi itemami konsola serwera zgłasza przy starcie.
Konfiguracja
config/settings/config.lua
| Opcja | Domyślnie | Opis |
|---|---|---|
serverInfo.name | 'OFF SCRIPTS' | Nazwa serwera, widoczna w interfejsie zamiast „OFF SCRIPTS” |
serverInfo.locale | 'de' | Język: de, en, pl, fr, es lub it |
serverInfo.color | { 155, 89, 255 } | Kolor menu i okienka dla graczy |
serverInfo.design | 3 | Wygląd interfejsu: 1 = Klasyczny, 2 = Paragon, 3 = Storefront |
blur | true | Rozmyte tło, gdy menu admina jest otwarte |
admin.command / groups | 'giveawayadmin' / { 'projektleitung' } | Komenda do menu admina i które grupy mogą je otwierać |
join.command / key / keyLabel | 'giveaway' / 47 / 'G' | Komenda i klawisz do dołączania · key jako Control-ID, keyLabel widać w okienku |
toggle.key / keyLabel | 74 / 'H' | Klawisz do pokazywania i ukrywania okienka |
itemImages | 'nui://off_inventory/web/dist/images/items/%s.png' | Ścieżka do obrazków itemów, %s = nazwa itemu |
accounts | Gotówka, bank, brudne pieniądze | Konta dostępne jako nagroda pieniężna: name = konto ESX, label = wyświetlana nazwa, opcjonalnie icon (ikona Phosphor) |
feeAccounts | { 'money', 'bank' } | Wpisowe: płaci pierwsze konto z wystarczającą kwotą, czyli gotówka, a w innym razie bank |
limits.maxMembers / maxWinners | 2500 / 25 | Maksymalne wartości w menu |
limits.maxDuration | 180 | Najdłuższy czas trwania w minutach |
vehicles.plateFormat | 'LLL NNN' | Tablica rejestracyjna wygranych pojazdów: L = litera, N = cyfra, maksymalnie 8 znaków |
vehicles.types | patrz plik | Typ w owned_vehicles dla każdej kategorii (samochód, motocykl, łódź, helikopter, samolot), musi pasować do twojego garażu |
vehicles.blacklist | Pojazdy wojskowe | Modele, których nie można wybrać w menu |
pendingInterval | 120 | Co tyle sekund ponawiane są oczekujące nagrody |
Dodanie własnego konta jako nagrody, np. żetonów kasynowych:
accounts = {
{ name = 'money', label = 'Bargeld' },
{ name = 'bank', label = 'Bank' },
{ name = 'chips', label = 'Casino-Chips' },
},config/functions.lua
Tutaj podłączasz własne skrypty. Błędy w nich są przechwytywane, skrypt działa dalej.
| Funkcja | Do czego |
|---|---|
Notify(message, type) | Notify · Serwer: Notify(source, message, type) |
ClientCanUseKeys() | false = teraz nie dołączaj klawiszem ani nie przełączaj okienka |
ServerCanJoin(source, giveaway) | false = gracz nie może dołączyć, np. w więzieniu |
ServerGiveawayStarted(giveaway) | Giveaway startuje, np. własny post na Discordzie |
ServerGiveawayEnded(giveaway, winners) | Rozlosowano, winners z source (nil = offline), identifier, name i reward |
ServerGiveawayCancelled(giveaway, reason) | Anulowano, reason = 'admin' lub 'members' |
ServerRewardGiven(source, reward) | Po każdej wydanej lub później dostarczonej nagrodzie |
config/settings/config.server.lua i języki
Webhooki Discord dla admin (szablony), giveaway (start, losowanie, anulowanie) i rewards (każda nagroda), url = '' wyłącza dany log. Wszystkie teksty są w config/locales/ (jeden plik na język).
W grze
- Menu admina (
/giveawayadmin): U góry przełączasz między Utwórz, Szablony i Historia. Gdy trwa giveaway, u góry wskaźnik LIVE pokazuje pozostały czas. - Utwórz: Odpowiedz na trzy pytania: co można wygrać, jak długo trwa, ilu wygrywa. Nazwa jest opcjonalna, cała reszta jest pod Więcej ustawień. Po prawej widzisz okienko tak, jak widzą je gracze. Uruchom giveaway startuje od razu, Jako szablon go zapisuje. Wczytaj szablon wczytuje zapisany szablon do dostosowania.
- Nagrody: U góry wybierasz rodzaj. Item, broń i pojazd otwierają listę z obrazkiem i wyszukiwarką, pieniądze od razu dodają kwotę. Przy broniach ilość to amunicja. W trybie Loteria (pod Więcej ustawień) dajesz każdej nagrodzie szansę, razem 100 %. Rozdziel równo dzieli je po równo.
- Szablony: Po lewej lista, po prawej edytor: u góry nazwa, pod nią te same pytania co przy tworzeniu. Nazwa szablonu to też nazwa, którą widzą gracze. Zamiast o nazwę punkt 4 pyta o Uruchamiaj automatycznie: wybierz dni tygodnia i do 6 godzin, pod spodem widać następny start, opcjonalnie Minimum online. Zmiany zapisuje dopiero Zapisz. Uruchom teraz od razu startuje szablon, Dostosuj i uruchom otwiera go w zakładce Utwórz. Liczy się godzina serwera.
- Historia: U góry sterujesz trwającym giveawayem, niżej są statystyki i ostatnie 50 giveawayów. Kliknięcie wpisu pokazuje zwycięzców z ich nagrodami.
- Dołączanie: Gdy giveaway startuje, u góry pojawia się okienko u wszystkich graczy. Dołączasz przez G lub
/giveaway, wpisowe jest pobierane najpierw z gotówki, a w innym razie z banku. H zwija okienko do małego paska i rozwija je z powrotem. - Losowanie: Gdy czas minie albo admin rozlosuje, zwycięzcy są losowani po kolei z animowaną listą nazw. Potem wszyscy widzą listę zwycięzców, a zwycięzcy dostają dodatkowo wiadomość. Bez Animowane losowanie lista pojawia się od razu.
- Wygrane pojazdy trafiają z własną tablicą rejestracyjną do garażu (
owned_vehicles), także gdy zwycięzca jest offline. - Dostarczanie później: Jeśli ekwipunek jest pełny albo zwycięzca jest offline, dostanie nagrodę automatycznie, gdy tylko zwolni się miejsce lub wróci online. Zwrot wpisowego dla graczy offline działa tak samo.
Zawsze trwa tylko jeden giveaway. Automatyczny start, który wypada w trakcie trwającego giveawaya, jest pomijany i odnotowywany w konsoli.
Dla deweloperów
-- Serwer
local active = exports.off_giveaway:GetActiveGiveaway() -- nil, gdy żaden nie trwa
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()
-- Klient
local active = exports.off_giveaway:IsGiveawayActive()
local joined = exports.off_giveaway:HasJoined()Przy StartGiveaway duration podajesz w sekundach (co najmniej 30). Opcjonalne są description, entryFee, minMembers i options = { reel = false } (bez animowanego losowania).
Nagrody przy StartGiveaway: kind = item, weapon, account lub vehicle, do tego name i amount. Przy pojazdach dodatkowo category (car, bike, boat, heli, plane) i label. W loterii (mode = 'pool') każda nagroda potrzebuje chance, razem 100.
Częste problemy
Przy starcie skrypt zgłasza błędy i wskazówki w konsoli serwera.
| Problem | Rozwiązanie |
|---|---|
„Nie masz do tego uprawnień” przy /giveawayadmin | Wpisz swoją grupę w admin.groups i zrestartuj. |
| „Przedmiot … nie istnieje w ESX” | Dodaj item w tabeli items lub wybierz inny w szablonie. |
| Brak pojazdu w garażu | Dostosuj vehicles.types do typów twojego garażu (np. aircraft dla helikoptera i samolotu). |
| Brak pojazdu na liście wyboru | Czy jest w vehicles.blacklist? Pojazdy addonowe pojawiają się, gdy tylko zostaną załadowane w grze. |
| Szablon nie startuje automatycznie | Sprawdź godzinę serwera, czy Uruchamiaj automatycznie jest włączone? Jeśli trwa już giveaway lub online jest za mało graczy, konsola to zgłosi. |
| Nagroda nie dociera | Pełny ekwipunek: nagroda jest ponawiana co pendingInterval sekund i dotrze automatycznie. |
| Klawisz G lub H nie działa | Inne skrypty używają tego klawisza. Zmień join.key / toggle.key, /giveaway działa zawsze. |
| Brak obrazków itemów | Ustaw itemImages na folder z obrazkami twojego ekwipunku. |
Jeszcze nie kupiony?
Zobacz Giveaway w sklepie