Export vaisseaux
De Wiki - Fallen Galaxy
Sommaire
Adresse des données
Vous pouvez récupérer les caractéristiques de l'ensemble des vaisseaux de Fallen Galaxy (points de vie, armes, capacités...) au format XML, afin de les exploiter dans vos propres applications. Vos applications seront ainsi en phase avec les dernières mises à jour du jeu.
Remarque 1 : le suffixe .xml à la fin de l'URL est optionnel. Les URL http://pandora.fallengalaxy.com/ships et http://pandora.fallengalaxy.com/ships.xml sont équivalentes.
Remarque 2 : la liste des vaisseaux est encodée au format UTF-8.
Remarque 3 : les vaisseaux spéciaux (le Recon Falcon...) ne sont pas renvoyés dans la liste des vaisseaux.
Description du format XML
Le XML renvoyé est composé d'un élément racine ships, comportant plusieurs éléments ship.
L'élément ship décrit les caractéristiques d'un vaisseau. Il comporte plusieurs éléments parameter, un élément weapons et un élément abilities.
L'élément weapons décrit un ensemble des armes d'un vaisseau. Il comporte plusieurs éléments weapon.
L'élément weapon décrit une arme de vaisseau. Il comporte plusieurs éléments parameter.
L'élément abilities décrit l'ensemble des capacités d'un vaisseau. Il comporte plusieurs éléments ability.
L'élément ability décrit une capacité de vaisseau. Il comporte plusieurs éléments parameter.
L'élément parameter décrit un paramètre donnée concernant un vaisseau (placé dans l'élément ship), une arme (placé dans l'élément weapon), ou une capacité (placé dans l'élément ability). Il comporte un élément key et un élément value.
L'élément key indique le type de paramètre (ex : le nom du vaisseau, le temps de rechargement d'une capacité...). La liste des valeurs possibles est fournie plus bas.
L'élément value indique la valeur du paramètre.
Exemple
<ships> <ship> <!-- Description des caractéristiques du Recon --> <parameter> <key>id</key><value>1</value> </parameter> <parameter> <key>name</key><value>Recon</value> </parameter> ... <!-- Description des armes du Recon --> <weapons> <weapon> <parameter> <key>name</key><value>Auto-canon</value> </parameter> ... </weapon> ... </weapons> <!-- Description des capacités du Recon --> <abilities> <ability> <parameter> <key>type</key><value>8</value> </parameter> <parameter> <key>name</key><value>Tir concentré</value> </parameter> ... </ability> ... </abilities>
Liste des paramètres concernant les vaisseaux
Paramètre | Description |
---|---|
id | Identifiant du vaisseau |
name | Nom du vaisseau |
shipClass | Classe du vaisseau |
hull | Points de vie |
protection | Bouclier |
payload | Capacité de transport |
power | Valeur en puissance |
buildTime | Temps de construction |
credit | Coût en crédits |
resource0 | Coût en titane |
resourceX | Coût en ressource X |
target | Classe(s) ciblées en priorité |
Liste des paramètres concernant les capacités
Paramètre | Description |
---|---|
type | Identifiant de la capacité |
name | Nom de la capacité |
passive | Indique si la capacité est passive |
cooldown | Temps de rechargement |
description | Description de la capacité (*) |
Liste des paramètres concernant les armes
Paramètre | Description |
---|---|
name | Nom de l'arme |
count | Quantité d'armes |
minDamage | Dégâts minimum de l'arme |
maxDamage | Dégâts maximum de l'arme |
Codes spéciaux
(*) Les descriptions de capacités comportent certains codes spéciaux qui sont remplacés par des icônes dans Fallen Galaxy. Voici la liste de ces codes :
Code | Description |
---|---|
%hull% | Points de vie |
%protection% | Bouclier |
%damage% | Dégâts d'une arme |
%resource0% | Coût en titane |
%resourceX% | Coût en ressource X |
Exploitation des données avec un script PHP 5, pas à pas
Remarque : le script requiert PHP 5 pour l'API SimpleXML. Il existe d'autres manières de faire si vous n'avez pas PHP 5 ; le code présenté plus loin a pour but d'aller au plus simple. Par ailleurs, les fichiers PHP doivent être encodés en UTF-8. Sous notepad++, vous pouvez le faire en sélectionnant tout le texte d'un fichier PHP, puis en cliquant sur le menu Format > Encoder en UTF-8 (sans BOM).
1. Créez un fichier ships.php
2. Nous allons désormais ajouter une fonction pour récupérer les données sur les vaisseaux au format XML. Ajoutez une fonction getShips comme suit, qui récupére les données en HTTP et renvoie le résultat sous forme d'un objet XML :
// Renvoie les données des vaisseaux d'une galaxie au format XML // Paramètres : // - galaxy : la galaxie dont on souhaite récupérer les vaisseaux (exemple : 'pandora') // Renvoie : les données sur les vaisseaux au format XML function getShips($galaxy) { $url = 'http://' . $galaxy . '.fallengalaxy.com/ships'; return simplexml_load_file($url); }
3. Nous allons charger les données sur les vaisseaux dans des classes PHP, afin de faciliter leur manipulation. On crée 3 classes : une classe Ship (décrit un vaisseau), une classe Ability (décrit une capacité de vaisseau), et une classe Weapon (décrit une arme de vaisseau). Chaque paramètre sera chargé dans l'attribut correspondant de la classe.
class Ship { /* Attributs */ // Identifiant du vaisseau var $id; // Nom var $name; // Classe du vaisseau var $shipClass; // Points de vie var $hull; // Points de puissance var $power; // Capacité de transport (en quantité de ressources) var $payload; // Protection var $protection; // Temps de construction (en secondes) var $buildTime; // Coût en crédits var $creditCost; // Coût en ressources (tableau de 20 cases) var $resourcesCost; // Classe(s) ciblée(s) en priorité var $target; // Armes du vaisseau (tableau d'objets Weapon) var $weapons; // Capacités du vaisseau (tableau d'objets Ability) var $abilities; /* Constructeur */ function Ship($id, $name, $shipClass, $hull, $power, $payload, $protection, $buildTime, $creditCost, $resourcesCost, $target, $weapons, $abilities) { $this->id = $id; $this->name = $name; $this->shipClass = $shipClass; $this->hull = $hull; $this->power = $power; $this->payload = $payload; $this->protection = $protection; $this->buildTime = $buildTime; $this->creditCost = $creditCost; $this->resourcesCost = $resourcesCost; $this->target = $target; $this->weapons = $weapons; $this->abilities = $abilities; } }
class Ability { /* Attributs */ // Identifiant de la capacité var $type; // Nom de la capacité var $name; // Temps de rechargement avant de pouvoir réutiliser la capacité var $cooldown; // Indique si la capacité est passive (booléen) var $passive; // Description var $description; /* Constructeur */ function Ability($type, $name, $cooldown, $passive, $description) { $this->type = $type; $this->name = $name; $this->cooldown = $cooldown; $this->passive = $passive; $this->description = $description; } }
class Weapon { /* Attributs */ // Nom de l'arme var $name; // Quantité d'armes var $count; // Dégâts minimum de l'arme var $minDamage; // Dégâts maximum de l'arme var $maxDamage; /* Constructeur */ function Weapon($name, $count, $minDamage, $maxDamage) { $this->name = $name; $this->count = $count; $this->minDamage = $minDamage; $this->maxDamage = $maxDamage; } }
4. Avant de charger les données dans les classes, nous allons avoir besoin d'une fonction pour parser les descriptions des capacités. En effet, celles-ci comportent des codes pour les icônes (voir plus haut). Pour aller au plus simple, on remplacera ces codes par des symboles (♥, ▼...), mais vous pouvez remplacer ces codes par ce que vous voulez : des images, un nom en français...
// Remplace les codes d'icônes par des symboles. Les codes remplacés sont les // suivants : %hull% (points de vie), %protection% (bouclier), %damage% (dégâts // d'une armes), et %resource0% (titane) à %resource3% (antimatière). // Paramètres : // - text : un texte contenant des codes d'icônes à remplacer // Renvoie : un texte donc les codes d'icônes ont été remplacées par des // symboles. Les ressources sont remplacées par leur nom. function parseIcons($text) { $text = str_replace('%hull%', '♥', $text); $text = str_replace('%protection%', '▼', $text); $text = str_replace('%damage%', '★', $text); for ($i = 0; $i < 20; $i++) $text = str_replace('%resource' . $i . '%', getResourceName($i), $text); return $text; } // Renvoie le nom d'une ressource à partir de son indice // Paramètres : // - key : l'identifiant de la ressource, entre 0 et 19 inclus // Renvoie : le nom de la resource function getResourceName($index) { switch ($index) { case 0: return 'Titane'; case 1: return 'Heptanium'; case 2: return 'Andium'; case 3: return 'Antimatière'; case 4: return 'Glace'; case 5: return 'Iridium'; case 6: return 'Pyroxite'; case 7: return 'Cristal'; case 8: return 'Xenodium'; case 9: return 'Adamante'; case 10: return 'Isogène'; case 11: return 'Nox'; case 12: return 'Dunite'; case 13: return 'Arkenite'; case 14: return 'Protofer'; case 15: return 'Biomatériaux'; case 16: return 'Exodyne'; case 17: return 'Méline'; case 18: return 'Thorium Alpha'; case 19: return 'Thorium Zeta'; default: return '???'; } }
5. Nous allons désormais créer des objets Ship, Weapon et Ability à partir du XML contenant les données vaisseaux, afin de manipuler plus facilement ces données.
// Construit un tableau d'objets Ship à partir des données XML sur les vaisseaux de Fallen Galaxy. // Paramètres : // - xml : le XML contenant les données sur les vaisseaux (voir getShips). // Renvoie : un tableau d'objets Ship. function loadShips($xml) { $ships = array(); // Itération sur tous les vaisseaux foreach ($xml->ship as $ship) { // Charge les armes du vaisseau $weapons = array(); foreach ($ship->weapons->weapon as $weapon) { $parameters = array(); foreach ($weapon->parameter as $parameter) $parameters['' . $parameter->key] = '' . $parameter->value; // NB : force la conversion en chaine de caractères $weapons[] = new Weapon( $parameters['name'], $parameters['count'], $parameters['minDamage'], $parameters['maxDamage'] ); } // Charge les capacités du vaisseau $abilities = array(); foreach ($ship->abilities->ability as $ability) { $parameters = array(); foreach ($ability->parameter as $parameter) $parameters['' . $parameter->key] = '' . $parameter->value; $abilities[] = new Ability( $parameters['type'], $parameters['name'], $parameters['cooldown'], $parameters['passive'] == 'true', parseIcons($parameters['description']) ); } // Charge les stats du vaisseau $parameters = array(); foreach ($ship->parameter as $parameter) $parameters['' . $parameter->key] = '' . $parameter->value; // Charge le coût en ressources $cost = array(); for ($i = 0; $i < 20; $i++) { if (isset($parameters['resource' . $i])) $cost[$i] = $parameters['resource' . $i]; else $cost[$i] = 0; } // Construit le vaisseau $ships[$parameters['id']] = new Ship( $parameters['id'], $parameters['name'], $parameters['shipClass'], $parameters['hull'], $parameters['power'], $parameters['payload'], $parameters['protection'], $parameters['buildTime'], $parameters['credit'], $cost, $parameters['target'], $weapons, $abilities ); } return $ships; }
6. Créez un fichier test.php
7. Il ne nous reste plus qu'à utiliser les fonctions créées précédement : récupérez les données sur les vaisseaux à l'aide de la fonction getShips, et chargez-les dans un tableau ave la fonction loadShips. Ajoutez par exemple le contenu suivant pour afficher la liste des capacités de chaque vaisseau du jeu :
<?php require_once('ships.php'); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <?php $ships = loadShips(getShips('pandora')); foreach ($ships as $ship) { ?> <table style="border: 1px solid black; width: 100%; margin-bottom: 10px;"> <tr> <td colspan="3"><?php echo $ship->name; ?></td> </tr> <?php foreach ($ship->abilities as $ability) { ?> <tr> <td><?php echo $ability->name; ?></td> <td><?php echo $ability->passive ? 'Passif' : $ability->cooldown; ?></td> <td><?php echo $ability->description; ?></td> </tr> <?php } ?> </table> <?php } ?> </body> </html>