Metin2PServer

Notizie, guide e aggiornamenti sui server privati di Metin2!

Come integrare un Pingback per la Toplist di metin2pserver.cc

- Pubblicato in Generale di

In questo articolo vediamo come implementare una semplice API di pingback per la toplist di metin2pserver.cc, che permette di premiare i giocatori al voto aggiornando i loro "coins" direttamente dalla toplist. L'esempio riportato utilizza PHP e due database MySQL standard nei serverfiles di Metin2: uno per i giocatori e uno per gli account.

Spiegazione del flusso

Quando la toplist invia il pingback (ad esempio dopo il voto di un player), il sistema: 1. Riceve il parametro ingameName in GET. 2. Cerca l'account ID associato al nome giocatore. 3. Aggiorna i "coins" dell'account, incrementandoli di 1.

Tutte le operazioni sono protette (input sanitizzato, gestione errori), ma NON viene effettuato alcun controllo specifico sull’IP sorgente per aumentare compatibilità e ridurre la rigidità del sistema. Il controllo del voto ogni 24h viene gestito direttamente da Metin2PServer.cc. Se si vuole implementare un blocco di voti sullo stesso player anche da IP diversi bisogna modificare lo script sotto. Metin2PServer.cc già prevede un blocco VPN e Proxy sul sito.

Esempio di codice PHP

<?php
 PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false,
        ]
    );

    // Ottieni l'account_id associato al nome giocatore
    $stmt = $playerDb->prepare("SELECT account_id FROM player WHERE name = :name LIMIT 1");
    $stmt->execute(['name' => $ingameName]);
    $accountId = $stmt->fetchColumn();

    if (!$accountId) {
        http_response_code(404);
        exit("Error: Player not found.");
    }
} catch (PDOException $e) {
    // Log dell'errore e messaggio generico al client
    error_log("Player DB error: " . $e->getMessage());
    http_response_code(500);
    exit("Internal Server Error (player DB).");
}

try {
    // --- Connessione al database degli account ---
    $accountDb = new PDO(
        'mysql:host=YOUR_DB_HOST;dbname=account;charset=utf8mb4',
        'YOUR_DB_USER',
        'YOUR_DB_PASS',
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false,
        ]
    );

    // Incrementa i coins dell'account corrispondente
    $updateStmt = $accountDb->prepare("UPDATE account SET coins = coins + 1 WHERE id = :id");
    $updateStmt->execute(['id' => $accountId]);

    // Risposta di successo
    echo "Pingback processed successfully.";
} catch (PDOException $e) {
    error_log("Account DB error: " . $e->getMessage());
    http_response_code(500);
    exit("Internal Server Error (account DB).");
}
?>

Commenti e adattamenti

  • Parametri del DB: Ricordati di sostituire YOUR_DB_HOST, YOUR_DB_USER, e YOUR_DB_PASS con i valori reali del tuo ambiente.
  • Sicurezza: Qui la verifica sull'IP è stata rimossa per favorire compatibilità in caso il servizio in alta affidabilità cambi range di IP.
  • Debug: In produzione evita di mostrare dettagli di errore all’utente; usa solo messaggi generici e salva i dettagli nei log.

Come viene effettuata la chiamata

Una chiamata viene fatta così:

https://TUOSERVER.IT/pingback.php?ingameName=NOMEGIOCATORE

Sostituisci NOMEGIOCATORE con il nome effettivo del player.

Questo sistema consente una rapida integrazione tra la toplist metin2pserver.cc e il tuo server. Modifica e amplia lo script in base alle esigenze del tuo progetto!