Bevezetés

Metin2 szavazás ellenőrző rendszer

Könnyen használható, megbízható szavazási jutalmak a Metin2 privát szerveredhez

Mi a szavazás ellenőrző rendszer?

A szavazás ellenőrző rendszerünk egy modern és innovatív megoldás, amelyet kifejezetten Metin2 privát szerverek számára terveztünk. Élvezetes módot kínál a játékosoknak, hogy kedvenc szerverükre szavazzanak, miközben játékbeli előnyöket kapnak.

A rendszer könnyen bevezethető és rendkívül megbízható, így ideális választás azoknak a szerver tulajdonosoknak, akik növelni szeretnék a játékosok elköteleződését és a szerver láthatóságát.

Célunk egy mindenki számára előnyös helyzet megteremtése: a játékosok hűségükért játékbeli jutalmat kapnak, a szerverek pedig nagyobb láthatóságot és aktivitást élveznek.

Vote4Buff

Vote4Buff rendszer (ajánlott)

Teljes körű szavazási és jutalmazási rendszer egyedi játékbeli felülettel

Mi az a Vote4Buff?

A Vote4Buff egy prémium, mindent egyben szavazási megoldás, amely látványos játékbeli felületet, WebSocket kommunikációt és teljes szerver integrációt biztosít. A játékosok szavazhatnak, több bónuszcsomag közül választhatnak, és azonnali jutalmat kapnak anélkül, hogy elhagynák a játékot!

A rendszer felépítése

A Vote4Buff rendszer három fő komponensből áll:

Kliens oldal
  • Python UI rendszer (uivote4buff.py)
  • Saját UI grafika és erőforrások
  • C++ WebSocket integráció
  • 11 nyelvi támogatás
Szerver oldal
  • C++ API integráció
  • Bónuszcsomag kezelés
  • Tárgyjutalom rendszer
  • Valós idejű hatáskövetés
Platformunk
  • Szavazásellenőrző API
  • Fiók alapú követés
  • Csalás elleni védelem
  • Szavazási státusz valós időben

Fő jellemzők

Több bónuszcsomag: akár 3 konfigurálható csomag, amelyek közül a játékosok választhatnak
Tárgyjutalmak: sikeres szavazás után automatikusan tárgyakat ad
Valós idejű felület: visszaszámlálók és hatáskövetés közvetlenül a játékban
WebSocket kommunikáció: azonnali ellenőrzés oldalfrissítés nélkül
Többnyelvű: 11 nyelvet támogat (EN, DE, ES, PL, TR, RO, IT, PT, HU, GR, CZ)
Testreszabható jutalmak: állíts be bónuszokat, időtartamot és költségeket

Tökéletes azoknak: akik professzionális, azonnal használható megoldást szeretnének anélkül, hogy heteket töltenének egyedi fejlesztéssel. Csak konfiguráld a bónuszcsomagokat, illeszd be a fájlokat, és már kész is!

Download

Vote4Buff fájlok letöltése

Szerezd be az összes szükséges fájlt a kliens és a szerver integrációhoz

Követelmények

A Vote4Buff a martysama0134 v5.8 forrásbázishoz készült. Ha más forrást használsz, előfordulhat, hogy további módosításokra van szükség.

A csomag tartalma

Kliens fájlok
  • Python UI fájlok (uivote4buff.py)
  • Játék kliens fájl módosítások
  • UI grafika és erőforrások
  • 11 nyelvi lokalizációs fájl
  • C++ WebSocket implementáció
  • UI szkriptek

Tartalmazza a libcurl.dll fájlt (32 bites verzió mellékelve, 64 bites elérhető)

Szerver fájlok
  • char.h konfiguráció
  • Hatás rendszer módosítások
  • Chat parancs integráció
  • API kommunikációs réteg
  • Bónusz kezelő rendszer

Minden szükséges C++ forrás módosítás megtalálható a csomagban

Bejelentkezés szükséges

Kérjük, jelentkezz be a Vote4Buff fájlok letöltéséhez.

Configuration

Konfigurációs útmutató

Állítsd be a bónuszcsomagokat, tárgyjutalmakat és az API beállításokat

A Vote4Buff konfigurációja a szervered char.h fájljában történik. Az alábbiakban részletes példákat találsz minden beállításra.

1. lépés: API hitelesítő adatok

Először állítsd be a szerver azonosítót és az API tokent (mindkettő megtalálható a vezérlőpultodon):

C++
// API SETTINGS from Metin2 Server List
static const std::string s_VOTE4BUFF_SERVER_ID = "YOUR_SERVER_ID"; // From dashboard
static const std::string s_VOTE4BUFF_API_TOKEN = "YOUR_API_TOKEN"; // From dashboard

static const int s_VOTE4BUFF_DURATION = 86400; // seconds (1 day) DO NOT MODIFY THIS !!!

2. lépés: Bónuszcsomagok konfigurálása

Legfeljebb 3 bónuszcsomagot definiálhatsz, amelyek közül a játékosok választhatnak. Minden csomag több bónuszt is tartalmazhat:

C++
// Bonuses must be set with its APPLY_ declaration.
// You can add as many bonuses as you want per slot.
static std::vector<std::vector<std::pair<int, int>>> s_VOTE4BUFF_BONUSES =
{
    { // Bonus Pool 1: PvP Focused
        { APPLY_ATTBONUS_HUMAN, 5 },      // +5% vs Players
        { APPLY_DEF_GRADE_BONUS, 50 },    // +50 Defense
    },
    { // Bonus Pool 2: PvE Focused
        { APPLY_ATTBONUS_MONSTER, 5 },    // +5% vs Monsters
        { APPLY_ATTBONUS_INSECT, 5 },     // +5% vs Insects
        { APPLY_HP_REGEN, 10 },           // +10 HP Regen
    },
    { // Bonus Pool 3: Farm Focused
        { APPLY_ITEM_DROP_BONUS, 10 },    // +10% Drop Rate
        { APPLY_EXP_DOUBLE_BONUS, 10 },   // +10% EXP
        { APPLY_GOLD_FIND, 15 },          // +15% Gold
    },
};
Elérhető APPLY típusok

Gyakori bónusz típusok: APPLY_ATTBONUS_HUMAN, APPLY_ATTBONUS_MONSTER, APPLY_DEF_GRADE_BONUS, APPLY_ITEM_DROP_BONUS, APPLY_EXP_DOUBLE_BONUS, APPLY_GOLD_FIND, APPLY_MAX_HP, APPLY_MAX_SP, APPLY_HP_REGEN, APPLY_SP_REGEN, APPLY_CRITICAL_PCT, APPLY_PENETRATE_PCT és még sok más!

3. lépés: Tárgyjutalmak (opcionális)

Állítsd be azokat a tárgyakat, amelyeket a játékosok automatikusan megkapnak szavazás után:

C++
static std::vector<std::pair<DWORD, int>> s_VOTE4BUFF_ITEM_REWARDS =
{
    // Leave empty if you don't want to give any items as rewards
    // Format: { vnum, count }
    { 27007, 5 },    // 5x Red Potion (XXL)
    { 50084, 1 },    // 1x Gold Bar
    { 71027, 10 },   // 10x Dragon Coin
};

4. lépés: Bónuszcsere beállítások

Szabályozd a várakozási időt és a költségeket, ha a játékosok bónuszcsomagot szeretnének váltani:

C++
// Cooldown when changing bonus (does not apply when choosing right after voting)
static const int s_VOTE4BUFF_CHANGE_BONUS_COOLDOWN = 300; // seconds (5 minutes)

// Price when changing bonus (does not apply when choosing right after voting)
static const int s_VOTE4BUFF_CHANGE_BONUS_PRICE = 15000; // yang (0 = free)

Megjegyzés: A szavazás után a játékosok ingyenesen választhatnak bónuszcsomagot. A várakozási idő és a költség csak akkor érvényes, ha szavazás nélkül szeretnének csomagot váltani.

Installation

Telepítési útmutató

Lépésről lépésre útmutató a Vote4Buff integrálásához

Mielőtt nekikezdesz

Készíts biztonsági másolatot a kliens és szerver fájljaidról! A __ előtaggal rendelkező fájlokat módosítani kell, a többi közvetlenül másolható.

Szerver telepítés

1
char.h konfigurálása

Nyisd meg a letöltött csomag Source/Server/__char.h fájlját.

  • Keresd meg a class CBuffOnAttributes; sort, és illeszd be fölé a konfigurációs kódot (lásd Konfiguráció fejezet)
  • Állítsd be a s_VOTE4BUFF_SERVER_ID és s_VOTE4BUFF_API_TOKEN értékeket
  • Konfiguráld a bónuszcsomagokat és a tárgyjutalmakat
  • Keresd meg a bool DragonSoul_RefineWindow_CanRefine(); sort, és add hozzá a nyilvános metódus deklarációkat
2
Szerver oldali módosítások alkalmazása

Illeszd be a csomag szerver oldali fájljait:

  • __affect.h - Egészítsd ki a meglévő affect.h fájlodat a biztosított változtatásokkal
  • __chat_affect.cpp - Add hozzá a Vote4Buff hatáskezelést
  • __cmd_general.cpp - Egészítsd ki a parancs feldolgozást
  • __desc_client.cpp - Kliens deskriptor módosítások

Megjegyzés: A __ előtaggal ellátott fájlok azt jelzik, hogy a módosításokat a saját fájljaiddal kell egyesíteni.

3
Játékmag újrafordítása

Fordítsd újra a játékszervert az új módosításokkal.

make clean && make

Kliens telepítés

4
Python UI fájlok

A Client/root/ mappából:

  • Másold a uivote4buff.py fájlt a kliensed root/ mappájába
  • Módosítsd az alábbi fájlokat az útmutatás szerint:
    • __constInfo.py
    • __game.py
    • __interfaceModule.py
    • __uiAffectShower.py
5
UI grafika és szkriptek
  • Másold a Client/ui/game/vote4buff/ mappát a pack ui/game/ könyvtárába
  • Másold a Client/uiscript/vote4buffwindow.py fájlt az uiscript mappába
6
Nyelvi fájlok

Add hozzá a támogatott nyelvekhez tartozó szövegeket a Client/locale/ mappából:

  • Illeszd a __locale_game.txt tartalmát a locale_game.txt fájlba
  • Illeszd a __locale_interface.txt tartalmát a locale_interface.txt fájlba

Elérhető nyelvek: EN, DE, ES, PL, TR, RO, IT, PT, HU, GR, CZ

7
C++ kliens módosítások

A Source/Client/UserInterface/ könyvtárból:

  • Másold a M2WebSocket.cpp és M2WebSocket.h fájlokat az UserInterface mappába
  • Alkalmazd a __ előtagú fájlokban található változtatásokat a saját fájljaidra
  • Győződj meg róla, hogy a libcurl.dll megtalálható a kliensed könyvtárában (a 32 bites verzió mellékelve, szükség esetén töltsd le a 64 bites változatot)
8
UI gomb hozzáadása (opcionális)

A Vote4Buff alapból nem ad hozzá gombot. Neked kell meghívni a ToggleVote4Buff() függvényt valahonnan a felületedről. Például:

  • Adj gombot a SystemDialog ablakhoz
  • Rendeld hozzá egy gyorsbillentyűhöz
  • Add hozzá a QuickSlot menühez

Használhatod a mellékelt Vote4BuffButton osztályt is, amely egy mozgatható ikon gombot hoz létre

9
Kliens újrafordítása

Fordítsd újra a kliens futtatható állományát az új módosításokkal.

10
Tesztelés

Teszteld az integrációt:

  1. Jelentkezz be a szerveredre
  2. Nyisd meg a Vote4Buff ablakot
  3. Szavazz a platformunkon: https://metin2-toplist.net/vote/en/YOUR_SERVER_ID-server-name/YOUR_ACCOUNT_ID
  4. Térj vissza a játékba és ellenőrizd a szavazást
  5. Válassz bónuszcsomagot és győződj meg róla, hogy az effektek alkalmazásra kerülnek
  6. Ellenőrizd, hogy megkaptad-e a tárgyjutalmakat
Telepítés befejezve!

A játékosaid mostantól automatikusan szavazhatnak és jutalmat kaphatnak. A Vote4Buff felület megmutatja, mikor szavazhatnak, bónuszcsomagot választhatnak, és visszaszámolót jelenít meg az aktív hatásokhoz.

Benefits

Előnyök szerveradminoknak

Ingyenes promóció

Az új játékosok többsége toplistákon keresztül talál szervert, így ez létfontosságú marketing eszköz

Egyszerű konfiguráció

Részletes dokumentáció és lépésről lépésre útmutatók teszik gyerekjátékká a beállítást

Programozás nélkül

Egyszerű REST API integrációs folyamat

Optimalizált teljesítmény

A kliens oldali szavazás ellenőrzés minimális szerverterhelést biztosít

Magas megbízhatóság

Éles környezetben bizonyított rendszer beépített csalás elleni védelemmel

Szavazás ellenőrzés

Győződj meg róla, hogy a játékosok valóban szavaztak, mielőtt jutalmat adnál

Előnyök játékosoknak

Játékbeli jutalmak járnak a szavazásért
Könnyen használható szavazó felület
Egyértelmű visszaszámláló a következő szavazásig
Garantált jutalomkézbesítési rendszer
Process

Hogyan működik a rendszer?

A rendszer tiszta és intuitív folyamatot követ, amit a játékosok könnyen megértenek. A szavazás ellenőrzése az API-nkon keresztül történik, így biztos lehetsz benne, hogy valós szavazásokat hitelesítesz!

1. A játékos megnyomja a szavazás gombot — A weboldaladról vagy a játékbeli felületről
2. Átirányítás a szavazó oldalra — A játékost a toplistán lévő szavazási oldaladra irányítjuk
3. A játékos szavaz — A játékos kitölti a CAPTCHA-t és elküldi a szavazatát
4. API ellenőrzés — A szervered lekérdezi az API-nkat a szavazás ellenőrzéséhez
5. Jutalom kiosztása — A szervered kiosztja a játékbeli jutalmat
Quick Start

Gyors indulási útmutató

Válaszd ki az igényeidnek megfelelő integrációs módszert:

AJÁNLOTT
Vote4Buff rendszer

Teljes körű, egyedi játékbeli felületet, WebSocket kommunikációt és automatikus jutalmazást kínáló megoldás.

  • Teljes játékbeli felület
  • Több bónuszcsomag
  • Automatikus tárgyjutalmak
  • Valós idejű visszaszámlálók
  • 11 nyelvi támogatás
Indulj a Vote4Buffal
Egyedi API integráció

Építs saját megoldást a REST API-nk segítségével a maximális rugalmasságért.

  • Teljes testreszabhatóság
  • Saját felhasználói felület
  • Egyedi jutalmazási logika
  • IP vagy fiók alapú működés
Használd az alap API-t

Általános lépések

1
Regisztráld a szervered

Hozz létre egy fiókot, és add hozzá a szervered a toplistához itt: https://metin2-toplist.net/servers/create

2
Szerezd meg az API hitelesítő adatokat

A szerver azonosítót és az API tokent a szerver vezérlőpultján találod. Ezek szükségesek a hitelesítéshez.

3
Válaszd ki az integráció módját

Töltsd le a Vote4Buffot egy kész megoldáshoz, vagy építs egyedi integrációt az API segítségével.

4
Teszteld és élesítsd

Teszteld alaposan a szavazási rendszert, majd élesítsd az éles szerveren.

Reference

API végpont (egyedi implementációkhoz)

Megjegyzés

Ha a Vote4Buff rendszert használod (ajánlott), akkor ez az API már integálva van! Ez a szakasz azoknak szól, akik saját megoldást szeretnének építeni.

GET https://metin2-toplist.net/api/check-vote

Szükséges paraméterek

Paraméter Típus Kötelező Leírás
api_token string Igen A szervered egyedi API tokene
ip string Opcionális* A játékos IP címe (IPv4 vagy IPv6)
account_id string Opcionális* A játékos fiókazonosítója/felhasználóneve a pontosabb követéshez
*Az ip vagy az account_id (vagy mindkettő) megadása kötelező

A legjobb eredmény érdekében használd az <code>account_id</code> paramétert a játékosok pontos azonosításához. Az <code>ip</code> kevésbé megbízható, ha a játékosok VPN-t használnak vagy több helyről játszanak.

Szavazási URL formátum

Így irányítsd a játékosokat a szavazáshoz:

https://metin2-toplist.net/vote.{lang}/{server_id}-{server_slug}/{account_id}

Példák:
https://metin2-toplist.net/vote.en/123-awesome-server/PlayerName
https://metin2-toplist.net/vote.de/123-awesome-server/PlayerName
https://metin2-toplist.net/vote.tr/123-awesome-server/PlayerName

Támogatott nyelvek: en, de, es, pl, tr, ro, it, pt, hu, gr, cz

Válasz formátuma

Az API a következő struktúrájú JSON választ adja vissza:

Sikeres válasz
{
    "success": true,
    "voted": true,
    "last_vote": "2025-11-11T14:30:00Z",
    "next_vote_in": 0,
    "message": "Vote verified successfully"
}
Nem található szavazat
{
    "success": true,
    "voted": false,
    "message": "No recent vote found"
}
Hibaválasz
{
    "success": false,
    "message": "Invalid API token"
}

A válasz mezői

Mező Típus Leírás
success boolean Jelzi, hogy az API kérés sikeresen feldolgozásra került-e
voted boolean Jelzi, hogy található-e érvényes szavazás (csak akkor, ha success=true)
last_vote string Az utolsó szavazás ISO 8601 időbélyege (csak ha voted=true)
next_vote_in integer Másodpercek száma a következő engedélyezett szavazásig (csak ha voted=true)
message string Érthető üzenet, amely leírja az eredményt
Examples

Kódrészletek

PHP példa

PHP cURL megvalósítás
<?php
function checkVote($apiToken, $playerIP) {
    $url = "https://metin2-toplist.net/api/check-vote";
    $params = http_build_query([
        'api_token' => $apiToken,
        'ip' => $playerIP
    ]);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url . '?' . $params);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode !== 200) {
        return ['success' => false, 'message' => 'API request failed'];
    }

    return json_decode($response, true);
}

$result = checkVote('YOUR_API_TOKEN', $_SERVER['REMOTE_ADDR']);
if ($result['success'] && $result['voted']) {
    echo "Vote verified! Rewarding player...";
}
?>

Python példa

Python Requests megvalósítás
import requests

def check_vote(api_token, player_ip):
    url = "https://metin2-toplist.net/api/check-vote"
    params = {'api_token': api_token, 'ip': player_ip}
    try:
        response = requests.get(url, params=params, timeout=10)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        return {'success': False, 'message': f'API request failed: {str(e)}'}

result = check_vote('YOUR_API_TOKEN', '123.456.789.012')
if result.get('success') and result.get('voted'):
    print("Vote verified! Rewarding player...")

C++ példa (játékszerverhez)

C++ cURL megvalósítás
#include <curl/curl.h>
#include <string>
#include <sstream>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

bool CheckVote(const std::string& apiToken, const std::string& playerIP) {
    CURL* curl = curl_easy_init();
    if (!curl) return false;

    std::string readBuffer;
    std::ostringstream url;
    url << "https://metin2-toplist.net/api/check-vote"
        << "?api_token=" << apiToken
        << "&ip=" << playerIP;

    curl_easy_setopt(curl, CURLOPT_URL, url.str().c_str());
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L);

    CURLcode res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    return (res == CURLE_OK) && (readBuffer.find("\"voted\":true") != std::string::npos);
}

void OnPlayerRequestReward(const std::string& playerName, const std::string& playerIP) {
    if (CheckVote("YOUR_API_TOKEN", playerIP)) {
        GiveItemToPlayer(playerName, REWARD_ITEM_VNUM, REWARD_COUNT);
        SendNotice("Vote verified! You received your reward!");
    } else {
        SendNotice("No valid vote found. Please vote first!");
    }
}

JavaScript/Node.js példa

Node.js Fetch megvalósítás
async function checkVote(apiToken, playerIP) {
    const url = new URL('https://metin2-toplist.net/api/check-vote');
    url.searchParams.append('api_token', apiToken);
    url.searchParams.append('ip', playerIP);

    try {
        const response = await fetch(url, {
            method: 'GET',
            headers: { 'Accept': 'application/json' }
        });
        if (!response.ok) throw new Error(`HTTP ${response.status}`);
        return await response.json();
    } catch (error) {
        return { success: false, message: error.message };
    }
}

checkVote('YOUR_API_TOKEN', '123.456.789.012').then(result => {
    if (result.success && result.voted) {
        console.log('Vote verified! Rewarding player...');
    }
});
Guide

Integrációs útmutató

Biztonsági jó gyakorlatok

Az API tokent mindig biztonságosan tárold, és soha ne tedd elérhetővé kliens oldalon. Az API hívásokat kizárólag a szervered backendjéről végezd.

1. lépés: Szavazó gomb/parancs létrehozása

Adj hozzá egy szavazó gombot a weboldaladra vagy egy játékbeli parancsot, amely https://metin2-toplist.net/servers/YOUR-SERVER-SLUG címre irányítja a játékosokat.

2. lépés: Szavazás ellenőrzése

Amikor a játékos igényli a jutalmat (weben vagy a játékban), ellenőrizd, hogy szavazott-e:

  1. Szerezd meg a játékos IP címét
  2. Küldj kérést a check-vote végpontra
  3. Dolgozd fel a JSON választ
  4. Ha voted értéke true, add oda a jutalmat
  5. Rögzítsd, hogy a jutalom kiosztásra került, így elkerülheted a duplikációt

3. lépés: Jutalmak kezelése

Ajánlott gyakorlatok a jutalmak kezeléséhez:

  • Kövesd a kiosztott jutalmakat: Tárold az adatbázisban, mely szavazásokért adtál már jutalmat
  • Szavazási várakozás: Tartsd be a 24 órás szavazási időkorlátot
  • Hibakezelés: Kezeld finoman az API hibáit, és tájékoztasd a játékosokat
  • Naplózás: Jegyezd fel az összes szavazás ellenőrzést későbbi elemzéshez és hibakereséshez

Példa folyamat

Játékos: beírja a /vote parancsot a játékban
↓
Szerver: megnyitja a böngészőt a szavazási oldalra
↓
Játékos: szavaz a toplistán
↓
Játékos: beírja a /claim parancsot vagy a "Claim Reward" gombra kattint
↓
Szerver: lekérdezi az API-t a játékos IP címével
↓
API: voted=true választ ad vissza
↓
Szerver: kiosztja a jutalmat a játékosnak
Help

Hibaelhárítás

„Invalid API token” hiba

Megoldás: Ellenőrizd, hogy a vezérlőpultról származó megfelelő API tokent használod-e. Győződj meg arról, hogy nincs benne extra szóköz vagy karakter.

A játékos szavazott, mégsem érzékeli a rendszer

Lehetséges okok:

  • A játékos VPN-t vagy proxyt használ (nem egyeznek az IP címek)
  • A szavazás feldolgozása még nem történt meg (várj 30 másodpercet, majd próbáld újra)
  • Hibás IP cím kerül elküldésre az API-nak
  • A játékos egy másik szerverre szavazott
API időtúllépés vagy kapcsolat hiba

Megoldás: Győződj meg róla, hogy a szervered képes HTTPS kéréseket indítani. Ellenőrizd a tűzfal beállításokat. Vezess be újrapróbálkozást exponenciális backoff-fal.

A játékosok többször igényelnek jutalmat

Megoldás: Vezess helyi nyilvántartást a jutalmazott szavazásokról. Tárold a szavazás időbélyegét, és egyszer add oda a jutalmat.

Az IPv6 címek nem működnek

Megoldás: Győződj meg róla, hogy a teljes IPv6 címet küldöd el. Az API támogatja az IPv4-et és az IPv6-ot is.

Server Listing API

Public Server Listing API (v1)

List, submit, and claim Metin2 servers programmatically. Perfect for other toplists, server management tools, or custom integrations.

Base URL

https://metin2-toplist.net/api/v1

Rate Limits

EndpointMethodLimitAuth
/api/v1/serversGET60/min—
/api/v1/servers/{slug}GET60/min—
/api/v1/serversPOST3/hour—
/api/v1/servers/claimPOST10/hour✅

List Servers

Retrieve a paginated list of active, launched servers. Supports filtering by category and language.

ParameterTypeDefaultDescription
categorystring—Filter by category: oldschool, newschool, fun, pvp, pvm, pve
languagestring—Filter by language code: EN, DE, TR, etc.
sortstringvotesSort order: votes, newest, name
pageinteger1Page number
per_pageinteger25Results per page (max 50)
Example Request
curl -H "Accept: application/json" \
  "https://metin2-toplist.net/api/v1/servers?category=pvp&language=EN&per_page=10"

Submit a New Server

Submit a new server listing via the API. The server enters a moderation queue and must be approved before it appears publicly.

Moderation Queue

All API-submitted servers start as inactive and require manual approval. This prevents spam and ensures listing quality.

FieldTypeRequiredDescription
namestring✅Server name (max 255 chars, must be unique)
descriptionstring✅Server description (min 20, max 5000 chars)
website_urlstring—Server website URL
discord_urlstring—Discord invite URL
languagesarray✅Language codes, e.g. ["EN", "DE"] (min 1, max 5)
categorystring—One of: oldschool, newschool, fun, pvp, pvm, pve
launch_datestring—Future launch date (YYYY-MM-DD)
owner_emailstring—Contact email (optional, not shown publicly)
Submit Example
curl -X POST "https://metin2-toplist.net/api/v1/servers" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "name": "Dragon Kingdom",
    "description": "A classic PvP experience with custom dungeons and weekly events.",
    "languages": ["EN", "DE"],
    "category": "pvp",
    "website_url": "https://dragon-kingdom.com",
    "discord_url": "https://discord.gg/example"
  }'
Example Response
{
  "success": true,
  "message": "Server submitted successfully!",
  "data": {
    "id": 42,
    "slug": "dragon-kingdom",
    "status": "pending_review"
  },
  "claim_token": "a1b2c3d4...80 characters",
  "note": "Save this token! Use it to claim your listing."
}

Claim Token System

When you submit a server, you receive a unique 80-character claim token. This token lets you link the listing to your account later.

The claim token is shown only once in the API response. Save it immediately — we store only the hash.

1
Submit

POST your server to /api/v1/servers and save the claim_token from the response.

2
Register

Create an account and paste the token in the optional "Claim Token" field.

3
Manage

Your server is now linked to your account with full dashboard access.

Error Codes

CodeMeaning
200Success
201Server created (pending review)
401Authentication required (claim endpoint)
404Server not found / invalid claim token
409Server already claimed
410Claim token expired
422Validation error / spam rejected
429Rate limit exceeded

Integration Examples

PHP
$response = file_get_contents('https://metin2-toplist.net/api/v1/servers?per_page=10');
$data = json_decode($response, true);

foreach ($data['data'] as $server) {
    echo $server['name'] . ' — ' . $server['vote_count'] . ' votes' . PHP_EOL;
}
JavaScript
const res = await fetch('https://metin2-toplist.net/api/v1/servers?category=pvp');
const { data, meta } = await res.json();

data.forEach(server => {
  console.log(`${server.name}: ${server.vote_count} votes`);
});
Python
import requests

resp = requests.get('https://metin2-toplist.net/api/v1/servers', params={
    'language': 'DE',
    'sort': 'newest',
    'per_page': 20
})
servers = resp.json()['data']

for s in servers:
    print(f"{s['name']} — {s['vote_count']} votes")
Help

Támogatás és erőforrások

E-mail támogatás

Kérj segítséget e-mailben

Lépj kapcsolatba a támogatással
Discord közösség

Csatlakozz a közösségünkhöz

Csatlakozz a Discordhoz
Pro tipp

Teszteld alaposan az integrációt egy teszt fiókkal, mielőtt élesíted. Kezeld minden szélsőséges esetet és hibát.

Scroll to top