Dokumentacja Systemu Nagród
Kompletny poradnik integracji systemu nagród za głosowanie z Twoim serwerem MTA:SA.
Jak to działa?
Krok 1: Wygeneruj Klucz API
- Zaloguj się na MTA-LISTA.PL przez Discord
- Wejdź w Panel Właściciela
- Wybierz swój serwer z listy (musi być wcześniej odebrany przez admina)
- W sekcji "System Nagród za Głosowanie" skonfiguruj:
- ⭐ Nagroda za głos — co gracz dostaje za każdy głos
- 🔥 Streak 3 dni — bonus za głosowanie 3 dni z rzędu (opcjonalne)
- 🏆 Streak 7 dni — super bonus za 7 dni z rzędu (opcjonalne)
- 📝 Opis nagród — tekst widoczny na profilu serwera
- Kliknij "Aktywuj System Nagród"
- Skopiuj wygenerowany Klucz API — będzie potrzebny w skrypcie Lua
Krok 2: Utwórz Resource na Serwerze MTA
Stwórz nowy folder w katalogu [resources] Twojego serwera MTA:
mods/deathmatch/resources/
└── vote-rewards/
├── meta.xml
└── server.luaZawartość pliku meta.xml:
<meta>
<info author="MTA-LISTA.PL" name="vote-rewards" version="1.0" type="script" />
<script src="server.lua" type="server" />
</meta>Krok 3: Wklej Skrypt Lua
Skopiuj poniższy kod do pliku server.lua i zmień wartość API_KEY na swój klucz:
-- ==============================================
-- MTA-LISTA.PL - System Nagród za Głosowanie
-- Wersja: 1.0 | Kompatybilność: MTA:SA 1.5+
-- ==============================================
local API_URL = "https://mta-lista.pl/api/rewards"
local API_KEY = "WKLEJ_SWOJ_KLUCZ_API_TUTAJ" -- Klucz z panelu właściciela
-- ============ KONFIGURACJA ============
local CHECK_INTERVAL = 60000 -- Co ile ms sprawdzać nagrody (60s)
local CHAT_PREFIX = "#fbbf24[MTA-LISTA.PL] #FFFFFF"
-- ============ FUNKCJE GŁÓWNE ============
-- Sprawdź oczekujące nagrody
function checkPendingRewards()
local url = API_URL .. "/pending?key=" .. API_KEY
fetchRemote(url, function(responseData, err)
if err ~= 0 then
outputDebugString("[MTA-LISTA] Błąd połączenia: " .. tostring(err))
return
end
local data = fromJSON(responseData)
if not data or not data.rewards then return end
for _, reward in ipairs(data.rewards) do
local player = getPlayerFromName(reward.playerName)
if player then
deliverReward(player, reward)
end
end
end)
end
-- Dostarcz nagrodę graczowi
function deliverReward(player, reward)
local action = reward.action or "VOTE"
local value = tonumber(reward.rewardValue) or 0
-- === TUTAJ DOSTOSUJ NAGRODY DO SWOJEGO SERWERA ===
if reward.rewardType == "MONEY" then
givePlayerMoney(player, value)
elseif reward.rewardType == "VIP" then
-- Przykład: ustaw dane gracza
-- setElementData(player, "vip", true)
-- setElementData(player, "vip.expire", getRealTime().timestamp + 86400)
outputChatBox("Otrzymujesz status VIP!", player, 255, 200, 0)
else
-- CUSTOM - zrób co chcesz
outputChatBox("Otrzymujesz nagrodę: " .. reward.rewardLabel, player, 255, 200, 0)
end
-- Wiadomość na czacie
local actionText = "głos"
if action == "STREAK3" then actionText = "STREAK 3 DNI 🔥"
elseif action == "STREAK7" then actionText = "STREAK 7 DNI 🏆" end
outputChatBox(CHAT_PREFIX .. "Dziękujemy za " .. actionText .. "! Otrzymujesz: " .. reward.rewardLabel, player, 255, 255, 255, true)
-- Oznacz nagrodę jako dostarczoną
claimReward(reward.id)
end
-- Oznacz nagrodę jako odebraną
function claimReward(rewardId)
local url = API_URL .. "/claim"
local postData = toJSON({ key = API_KEY, rewardId = rewardId })
fetchRemote(url, {
method = "POST",
headers = { ["Content-Type"] = "application/json" },
postData = postData
}, function(responseData, err)
if err ~= 0 then
outputDebugString("[MTA-LISTA] Błąd claim: " .. tostring(err))
end
end)
end
-- ============ URUCHOMIENIE ============
setTimer(checkPendingRewards, CHECK_INTERVAL, 0)
outputDebugString("[MTA-LISTA.PL] System nagród aktywny! Sprawdzanie co " .. (CHECK_INTERVAL/1000) .. "s")
-- Komenda do ręcznego sprawdzania (opcjonalna, dla adminów)
addCommandHandler("checkvotes", function(player)
if not hasObjectPermission(player, "command.checkvotes", not isGuestAccount(getPlayerAccount(player))) then
-- Możesz tu dodać sprawdzanie uprawnień
end
checkPendingRewards()
outputChatBox(CHAT_PREFIX .. "Sprawdzam nagrody...", player, 255, 255, 255, true)
end)Krok 4: Uruchom Resource
W konsoli serwera MTA wpisz:
refresh start vote-rewards
Gotowe! W debuglogu powinieneś zobaczyć: [MTA-LISTA.PL] System nagród aktywny!
Aby resource startował automatycznie po restarcie serwera, dodaj go do mtaserver.conf:
<resource src="vote-rewards" startup="1" protected="0" />
System Streak (Seria Głosów)
System automatycznie śledzi, ile dni z rzędu gracz głosuje na Twój serwer. Możesz skonfigurować bonusy za serie:
Streak bonusy konfiguruje się w Panelu Właściciela. Skrypt Lua automatycznie rozpoznaje typ nagrody (VOTE, STREAK3, STREAK7) i może przyznawać różne nagrody.
Dokumentacja API (dla zaawansowanych)
/api/rewards/pending?key=KLUCZ/api/rewards/claim/api/rewards/vote?serverIp=IP/api/rewards/voteOdpowiedź z /pending zawiera pola: id, playerName, action, rewardType, rewardValue, rewardLabel
Publiczne API Listy Graczy
Chcesz wyświetlić listę graczy lub status serwera na własnej stronie WWW lub bocie Discord? Udostępniamy darmowe, ustandaryzowane API dla każdego serwera.
/api/public/server/IP:PORT/playersPrzykład użycia (JavaScript):
fetch('https://mta-lista.pl/api/public/server/127.0.0.1:22003/players')
.then(res => res.json())
.then(data => {
console.log("Serwer: " + data.server.name);
console.log("Graczy: " + data.server.online + "/" + data.server.max);
console.log("Lista: ", data.playerList);
});Przykład użycia (PHP):
$json = file_get_contents('https://mta-lista.pl/api/public/server/127.0.0.1:22003/players');
$data = json_decode($json, true);
echo "Serwer: " . $data['server']['name'];
echo "Graczy: " . $data['server']['online'];Własne API Graczy (Standard)
Chcesz, aby na profilu Twojego serwera wyświetlała się **pełna lista nicków graczy online**? Wystarczy, że stworzysz na swoim hostingu prosty plik JSON, który zwraca listę graczy, a jego adres wkleisz w Panelu Właściciela.
🔵 Gotowy skrypt Lua (Bez bazy danych!)
Nie chcesz używać PHP ani bazy danych? Wklej to do swojego resource na serwerze MTA. Skrypt będzie co minutę wysyłał listę graczy bezpośrednio do nas.
local API_KEY = "WKLEJ_SWOJ_KLUCZ_API_TUTAJ"
local PUSH_URL = "https://mta-lista.pl/api/server/push-players"
function pushOnlinePlayers()
local players = {}
for _, p in ipairs(getElementsByType("player")) do
table.insert(players, getPlayerName(p))
end
fetchRemote(PUSH_URL, {
method = "POST",
headers = { ["Content-Type"] = "application/json" },
postData = toJSON({ key = API_KEY, players = players })
}, function(data, err)
-- opcjonalnie logowanie błędów
end)
end
setTimer(pushOnlinePlayers, 60000, 0) -- Wysyłaj co 60 sekund
pushOnlinePlayers()🐘 Metoda PHP (Dla zaawansowanych)
Jeśli wolisz pobierać dane bezpośrednio ze swojej bazy danych MySQL, użyj tego skryptu:
<?php
header('Content-Type: application/json');
// 1. Dane do bazy danych Twojego serwera MTA
$host = 'localhost';
$db = 'mta_database';
$user = 'mta_user';
$pass = 'twoje_haslo';
try {
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
// 2. Pobranie graczy (dostosuj nazwę tabeli i kolumny)
// Przykład: tabela 'players', gdzie 'online' to 1
$stmt = $pdo->query("SELECT name FROM players WHERE online = 1");
$players = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 3. Wysłanie wyniku
echo json_encode($players);
} catch (PDOException $e) {
echo json_encode(["error" => "Błąd połączenia"]);
}🟢 Przykład JSON (Oczekiwany format)
Twoje API powinno zwracać prostą listę obiektów lub samych nicków:
[
{ "name": "Nick_Gracza1" },
{ "name": "Nick_Gracza2" },
{ "name": "Nick_Gracza3" }
]https://twoja-strona.pl/api_online.php) w polu "URL do API Graczy".