Export vaisseaux

De Wiki - Fallen Galaxy
Aller à : Navigation, rechercher

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.

À savoir : Les données sur les vaisseaux de Fallen Galaxy sont accessibles à l'adresse http://galaxie.fallengalaxy.com/ships, en remplaçant galaxie par le nom de la galaxie.
Exemple : Pour récupérer les données sur les vaisseaux de la galaxie Pandora, utilisez l'URL suivante : http://pandora.fallengalaxy.com/ships.


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>