MapInfos

Un article de TM Wiki.

Aller Ă  : Navigation, Rechercher

MapInfos est une classe PHP qui permet d'avoir toutes les informations contenues dans le fichier map ainsi que la vignette qui le représente.


Logiciel

Nom complet : MapInfos
Auteur : Demonaz
TM SupportĂ©s : United
Statut : en cours
Version : 1.0
Techno : PHP
Langues : français, anglais
ManiaLink :

[ Site Web] - [ Télécharger] - [ Dicussion]


Présentation

Le format de challenge de TrackMania permet d'avoir accès à des informations quant à une map qui sont contenues dans une balise header dans le fichier.

Fonctionnalités

Récupérer toutes les informations utiles de la map: temps, mood, environnement, charge graphique, auteur... Afficher la vignette de la map que l'on peut voir dans le jeu

Le code source

<?
/*
@Name: MapInfos
@Author: Demonaz
@Year: 2006
@Contact: bruce.feuillette(at)gmail.com

Cette classe vous permet d'avoir toutes les informations sur une map TrackMania.
Ainsi que la possibilité de créer sa vignette dynamiquement.


A faire
- mettre en forme les logins
- faire la même chose pour le nom de la map

15:05 28/11/2006: file_get_contents utilisé à la place de readfile

  • /

//Fonction pour avoir un temps lisible au format suivant: mm:ss'00
function humantime($time)
        {
        $mm=$time%1000;
        $time=strftime("%M:%S",($time/1000));
        return $time.="'".$mm;
        }


//Début de la classe
class MapInfos {
        var $name; //Name of the map, without the .Challenge.Gbx. The path could be relative to the script.
        var $path; //Path to the map
        var $nadeo; //Author (called Nadeo) record: time or tries depending of the challenge type in this format: mm'ss"00
        var $gold; //Gold medal
        var $silver; //Silver medal
        var $bronze; //Copper medal
        var $authortime; //Author time, always here even in Plateform or Stunts maps
        var $raw_nadeo; //Raw Nadeo time, in thousandth of seconds
        var $raw_gold; //Raw Gold time
        var $raw_silver; //Raw Silver time
        var $raw_bronze; //Raw Copper time
        var $raw_authortime; //Raw Authortime
        var $author; //Author name
        var $mood; //Mood used by the map: Sunset, Day...
        var $environment; //Environnement used by the map: Rallye, Stadium...
        var $nblaps; //Number of laps if it's a Lap Map
        var $price; //Graphical cost of the map
        var $type; //Type of challenge
        var $ingame_name; //Real name of the map
        var $formated_name; //Formated map name

function name($map_name,$map_path)
        {
        $this->name=$map_name;
        $this->path=$map_path;
        }

function infos()
        {
        $filename=$this->path.$this->name.'.Challenge.Gbx';
        $buffer=file_get_contents($filename);
        $start=strpos($buffer,"<header");
        $end=strpos($buffer,"</header>")+9;
        $end=$end-$start;
        $header=substr($buffer,$start,$end);
        $p = xml_parser_create();
        xml_parse_into_struct($p, $header, $values);
        xml_parser_free($p);
        $this->author=$values['1']['attributes']['AUTHOR'];
        //Do not use, conflict with the type of the challenge
        //$this->type=$values['0']['attributes']['TYPE'];
        $this->version=$values['0']['attributes']['VERSION'];
        $this->exever=$values['0']['attributes']['EXEVER'];
        $this->uid=$values['1']['attributes']['UID'];
        $this->ingame_name=$values['1']['attributes']['NAME'];
        $this->raw_gold=$values['3']['attributes']['GOLD'];
        $this->raw_silver=$values['3']['attributes']['SILVER'];
        $this->raw_bronze=$values['3']['attributes']['BRONZE'];
        $this->raw_nadeo=$values['3']['attributes']['AUTHORSCORE'];
        $this->raw_authortime=$values['3']['attributes']['AUTHORTIME'];
        $this->environment=$values['2']['attributes']['ENVIR'];
        $this->mood=$values['2']['attributes']['MOOD'];
        $this->type=$values['2']['attributes']['TYPE'];
        $this->nblaps=$values['2']['attributes']['NBLAPS'];
        $this->price=$values['2']['attributes']['PRICE'];
        //We're generating readable human time, only when needed
        if(($this->type=='Platform')||($this->type=='Stunts'))
                {
                $this->gold=$this->raw_gold;
                $this->silver=$this->raw_silver;
                $this->bronze=$this->raw_bronze;
                //This is an exception, the authorscore is always a time
                $this->authortime=humantime($this->raw_authortime);
                $this->nadeo=$this->raw_nadeo;
                }
        else
                {
                $this->gold=humantime($this->raw_gold);
                $this->silver=humantime($this->raw_silver);
                $this->bronze=humantime($this->raw_bronze);
                $this->nadeo=humantime($this->raw_nadeo);
                $this->authortime=humantime($this->raw_authortime);
                }
        //$this->formated_name=truename($this->ingame_name);
        }

function mapimage()
        {
        header("Content-Type: image/jpeg;");
        $filename=$this->path.$this->name.'.Challenge.Gbx';
        $buffer=file_get_contents($filename);
        //Search for the <Thumbnail.jpg> tag
        $start=strpos($buffer,"<Thumbnail.jpg>");
        //Search for the <Thumbnail.jpg> tag
        $end=strpos($buffer,"</Thumbnail.jpg>");
        //The start offset is without the <Thumbnail.jpg> tag
        $start=$start+15;
        //Length of the code of the image
        $end=$end-$start;
        $image=substr($buffer,$start,$end);
        //Creation of a GD image from the string.
        $image=imagecreatefromstring($image);
        //We collect the width and height
        $width=imagesx($image);
        $height=imagesy($image);
        //We create a fake image to flip vertically the original one into
        $end_image=imagecreatetruecolor($width, $height);
        //We copy pixel by pixel to flip
        for ($x = 0; $x < $width; $x++)
                {
            for ($y = 0; $y < $height; $y++)
                {
                imagecopy($end_image, $image, $x, $height - $y - 1, $x, $y, 1, 1);
                }
                }
        return imagejpeg($end_image);
        }
//End of MapInfos Class
}
?>

à compléter...

Récupérée de « http://fr.tm-wiki.org/wiki/MapInfos »