Jump to content
×
×
  • Create New...

PHP - Class Metin2 : Informations sur votre Serveur


Recommended Posts

Centre de Téléchargement

Hidden Content

    Give reaction to this post to see the hidden content.
( Interne )

Bonsoir,

 

Ancien metinien et gérant de serveur privé, j'ai voulu voir comment à évoluer metin2 depuis ses 5 dernières années et surtout niveau des site web étant spécialisé dans la création de site web.

 

Alors j'ai voulu faire un script pour que vous puissiez afficher les informations que vous voulez sur votre site de manière simplifié.

 

Avec ce code vous pourrez afficher les nombre de compte et joueurs créés mais aussi les nombre de compte par empire, de joueurs par empire, de joueurs homme et femme et nombre de race de personnage créés.

 

Passons au vif du sujet, vous aurez besoin:

 

- Créez un fichier du nom de Class.information.php (ou vous voulez, il faudra juste modifier dans l'autoloader si vous le mettez dans un dossier)

- Créez un fichier du nom de autoloader.php (ou vous voulez...)

 

dans le Class.information.php copier/coller mon code:

 

<?php
class Information{

   private $_db;

   public function __construct($db){
       $this->setDb($db);
   }

   public function setDb(PDO $db){
       $this->_db = $db;
   }

   public function nombreDeCompte(){
       return $this->_db->query("SELECT COUNT(id) FROM account.account WHERE id")->fetchColumn();
   }

   public function nombreDeJoeurs(){
       return $this->_db->query("SELECT COUNT(id) FROM player.player WHERE id")->fetchColumn();
   }

   public function nombreDeGuerrier(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job0 OR job = :job4");
       $req->execute([":job0" => 0, ":job4" => 4]);
       return $req->fetchColumn();
   }

   public function nombreDeSura(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job2 OR job = :job6");
       $req->execute([":job2" => 2, ":job6" => 6]);
       return $req->fetchColumn();
   }

   public function nombreDeNinja(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job1 OR job = :job5");
       $req->execute([":job1" => 1, ":job5" => 5]);
       return $req->fetchColumn();
   }

   public function nombreDeChaman(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job3 OR job = :job7");
       $req->execute([":job3" => 3, ":job7" => 7]);
       return $req->fetchColumn();
   }

   public function nombreDePersoHomme(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job0 OR job = :job2 OR job = :job5 OR job = :job7");
       $req->execute([":job0" => 0, ":job2" => 2, ":job5" => 5, ":job7" => 7]);
       return $req->fetchColumn();
   }

   public function nombreDePersoFemme(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job1 OR job = :job3 OR job = :job4 OR job = :job6");
       $req->execute([":job1" => 1, ":job3" => 3, ":job4" => 4, ":job6" => 6]);
       return $req->fetchColumn();
   }

   public function nombreDeCompteRouge(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM account.account WHERE empire = :empire");
       $req->execute([":empire" => 1]);
       return $req->fetchColumn();
   }

   public function nombreDeCompteJaune(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM account.account WHERE empire = :empire");
       $req->execute([":empire" => 2]);
       return $req->fetchColumn();
   }

   public function nombreDeCompteBleu(){
       $req = $this->_db->prepare("SELECT COUNT(id) FROM account.account WHERE empire = :empire");
       $req->execute([":empire" => 3]);
       return $req->fetchColumn();
   }

   public function nombreDeJoueursRouge(){
       $req = $this->_db->prepare("SELECT COUNT(player.id) FROM player.player, account.account WHERE account_id = account.id AND account.empire = :empire");
       $req->execute([":empire" => 1]);
       return $req->fetchColumn();
   }

   public function nombreDeJoueursJaune(){
       $req = $this->_db->prepare("SELECT COUNT(player.id) FROM player.player, account.account WHERE account_id = account.id AND account.empire = :empire");
       $req->execute([":empire" => 2]);
       return $req->fetchColumn();
   }

   public function nombreDeJoueursBleu(){
       $req = $this->_db->prepare("SELECT COUNT(player.id) FROM player.player, account.account WHERE account_id = account.id AND account.empire = :empire");
       $req->execute([":empire" => 3]);
       return $req->fetchColumn();
   }
}
 

 

et dans autoloader.php:

function Autoload($class){
   require "Class.". strtolower($class) .".php";
}
 

 

c'est bien beau tout ça mais comment ça marche ?

 

- Déjà on va appeler autoload.php

Il est important qu'il soit appelé en 1ère ligne avant votre

entrez ce code:

require_once "autoloader.php";
spl_autoload_register("Autoload");
 

 

ensuite il vous faut une connexion serveur de type PDO vous pouvez le mettre à la suite, vous pouvez aussi utilisez la votre tant que c'est sous ce format sinon ajoutez.

try {
   $db = new PDO("mysql:host=localhost;charset=utf8", "root", "");
   $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch (Exception $e){
   die($e->getMessage());
}
 

 

Voilà le gros du travail est fait maintenant comment appeler les fonctions ?

Alors déjà on doit instancier la variable $db, pour cela rien de plus simple on a besoin de le faire une seule fois:

$infoServeur = new Information($db);
 

je vous conseille de le mettre à la suite de la connexion PDO.

 

Maintenant il ne vous reste qu'à appeler les méthodes.

Quand vous voulez afficher le nombre de compte par exemple faite:

echo $infoServeur->nombreDeCompte();
 

 

Et voilà le tour est joué.

 

nombreDeCompte() -> affiche le nombre de compte créer
nombreDeJoeurs() -> affiche le nombre de joueurs
nombreDeGuerrier() -> affiche le nombre de guerrier
nombreDeSura() -> affiche le nombre de sura
nombreDeNinja() -> affiche le nombre de ninja
nombreDeChaman() -> affiche le nombre de chaman
nombreDePersoHomme() -> affiche le nombre d'homme
nombreDePersoFemme() -> affiche le nombre de femme
nombreDeCompteRouge() -> affiche le nombre de compte Rouge
nombreDeCompteJaune() -> affiche le nombre de compte Jaune
nombreDeCompteBleu() -> affiche le nombre de compte Bleu
nombreDeJoueursRouge() -> affiche le nombre de joueurs rouge
nombreDeJoueursJaune() -> affiche le nombre de joueurs jaune
nombreDeJoueursBleu() -> affiche le nombre de joueurs bleu
 
  • J'adore 1
Link to comment
Share on other sites

  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

  • Developer

Bonjour,

 

Ton code est très propre, rien à redire là dessus, portable, sécurisé et bien pensé, cependant, metin2 a crée quelque chose de bien plus rapide et sécurisé : l'API Tool

 

En effet, avec ce tool, en plus de pouvoir cantonner son utilisation à une seule ip afin de limiter les possibles failles (l’hébergeur de ton site) et de mettre un mot de passe unique, tu peux en plus gérer ton serveur et voir des statistiques en temps réel, sans avoir le temps de rafraichissement habituel d'une query MySQL basique. C'est donc l'alternative avec le meilleur rapport rapidité/qualité/sécurité/ressources, étant donné que le code est très petit, que les données s'affichent avec un simple echo, que l'implantation se fait très facilement et que surtout la communication est directe et sécurisée. (tout du moins a été améliorée et peut-être améliorée rien qu'en utilisant les fichiers CONFIG)

Les fonctions sont écrites dans le game, en c++ et permettent de voir le nombre de connecté, de joueurs par empire etc...

 

Cependant, l'utilisation de cet API étant très peu utilisée, ton script est, à vue de nez, la meilleure alternative, surtout en matière de sécurité et de d'importation !

 

Merci bien ! :)

Link to comment
Share on other sites

 Share



Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.