Как это работает
Игроки голосуют за ваш сервер на L2King раз в 12 часов. Сервер проверяет голос через API и выдаёт награду в игре — так игроки возвращаются каждый день. Голоса видны на странице проекта и в списках L2King, а кнопка голосования на вашем сайте даёт скидку 25% на Elite, Top и VIP.
Ключ API
Войдите в личный кабинет L2King → вкладка «Голоса и кнопки». Там у каждого вашего проекта: id, ключ API, готовый адрес API, ссылка на страницу голосования и конструктор кнопок. Ключ секретный — храните его только в конфиге сервера.
Открыть «Голоса и кнопки»Проверка голоса
Голосовал ли игрок за последние 12 часов — по IP или по нику.
# по IP — ответ 1 или 0
curl "https://l2king.net/api/votes/ID?key=KEY&ip=1.2.3.4&format=txt"
# по IP — ответ JSON
curl "https://l2king.net/api/votes/ID?key=KEY&ip=1.2.3.4"
{"voted":true,"time":"2026-10-07T23:09:32+00:00","vote_time":1791414572,"server_time":1791414600,"hours":12}
# по нику — так же
curl "https://l2king.net/api/votes/ID?key=KEY&nick=PlayerNick"Список голосов
Все голоса за N часов (от 1 до 168) — для пакетной выдачи наград по никам.
curl "https://l2king.net/api/votes/ID?key=KEY&hours=24"
{"project":184,"hours":24,"votes":[{"id":64,"nick":"PlayerNick","time":"2026-10-07T23:09:32+00:00"}]}
# строкой: id;ник;время
curl "https://l2king.net/api/votes/ID?key=KEY&hours=1&format=txt"
64;PlayerNick;2026-10-07 23:09:32Счётчики проекта
Сколько всего голосов, за месяц и за 12 часов — для глобальной награды всем онлайн за каждые N голосов.
curl "https://l2king.net/api/votes/ID?key=KEY&total=1"
{"project":184,"total":152,"month":37,"last12h":9,"server_time":1791418200}Команда .vote (Java)
Класс для проверки голоса — без внешних библиотек, работает на любой Java-сборке:
// L2King: проверка голоса игрока по IP (L2J, aCis, Mobius и другие Java-сборки)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public final class L2KingVote
{
private static final int PROJECT_ID = 0; // id проекта из личного кабинета L2King
private static final String API_KEY = "YOUR_KEY"; // ключ из личного кабинета, никому не передавать
/** true, если с этого IP голосовали на L2King за последние 12 часов */
public static boolean hasVoted(String ip)
{
try
{
final URL url = new URL("https://l2king.net/api/votes/" + PROJECT_ID + "?key=" + API_KEY
+ "&format=txt&ip=" + URLEncoder.encode(ip, "UTF-8"));
final HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
con.setRequestProperty("User-Agent", "L2KingVote/1.0");
try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8)))
{
return "1".equals(in.readLine());
}
}
catch (Exception e)
{
return false; // L2King недоступен — награду не выдаём, игрок попробует позже
}
}
}Пример команды .vote. Награду, хранение времени и способ получить IP игрока подставьте под свою сборку:
// Команда .vote (пример; названия методов зависят от сборки):
// aCis: player.getClient().getConnection().getInetAddress().getHostAddress()
// Mobius: player.getIPAddress()
final String ip = player.getIPAddress();
final long last = player.getVariables().getLong("L2KING_VOTE", 0);
if (System.currentTimeMillis() - last < 12 * 3600 * 1000L)
{
player.sendMessage("Награда за голос уже получена. Следующая — через 12 часов.");
return true;
}
ThreadPool.execute(() ->
{
if (L2KingVote.hasVoted(ip))
{
player.getVariables().set("L2KING_VOTE", System.currentTimeMillis());
player.addItem("L2KingVote", 57, 1_000_000, player, true); // ваша награда
}
else
{
player.sendMessage("Сначала проголосуйте: https://l2king.net/vote/ВАШ_ПРОЕКТ");
}
});Подключение L2King в VDSystem (готовый модуль наград для Java-сборок) — в процессе. Как только L2King появится в списке поддерживаемых топов, достаточно будет включить его в конфиге модуля.
Пример PHP
Для сайта или веб-панели сервера — проверка по нику:
<?php
// Веб-панель или сайт сервера: проверка голоса по нику
$projectId = 0; // id проекта из личного кабинета L2King
$key = 'YOUR_KEY'; // ключ API
$nick = $_POST['nick']; // ник игрока
$r = json_decode(file_get_contents('https://l2king.net/api/votes/' . $projectId
. '?key=' . $key . '&nick=' . urlencode($nick)), true);
if (!empty($r['voted'])) {
// голос есть: выдайте бонус и запомните $r['vote_time'],
// чтобы не выдать награду за один голос дважды
}Правила
- Проверяйте голос по запросу игрока (команда, кнопка в панели), а не в цикле для всех онлайн.
- Не чаще 120 запросов в минуту с одного сервера.
- Один голос — одна награда: запоминайте время выдачи (vote_time) и не выдавайте повторно в течение 12 часов.
- Если API временно не ответил, награду не выдавайте — игрок повторит позже.
Ошибки
bad project id or keyНеверный id проекта или ключ APIнет ответаL2King недоступен: награду не выдавайте, игрок повторит позже