[CS 1.6] XStats devenu public !

Discussion dans 'Action, Shooters' créé par neku, 12 Octobre 2006.

Statut de la discussion:
Fermée.
  1. Offline
    dogua ex membre
    GG merci a toi lors de ma prochaine lan j'orai une pensée a toi qd je difuserai les phase final sur ecran geant avec Xstats...
    merci mec tu dechire tt :p
    dogua, 20 Octobre 2006
    #21
  2. Offline
    dogua ex membre
    G tester mais essai non concluant :baille: :baille: :baille:

    Je le lance et tout jelance cs => apres qd cs demare je voit bien dans la console comme quoi Xstats est la avec ton nom et tout.

    le probleme il est que je me connect a un serveur, et puis rien kedal. Il ne mafiche rien de plus ke t'abitude ???? Connait tu la nature de mon probleme?
    dogua, 20 Octobre 2006
    #22
  3. Offline
    neku Codeur roumain
    Cela est totalement normal, il n'y a aucun problème, XStats n'affiche rien ;)
    Il ne fait que récupérer les données et les envoyer par méthode POST à une machine (ex : un serveur web avec un script php).

    L'interface graphique est un autre logiciel fait en flash nommé FlashScape développé par Syam.
    Le FlashScape n'ayant pas été distribué par Syam il vous faut refaire l'interface vous même à partir des informations reçues par XStats.

    En résumé pour faire une affichage comme à l'ESWC il vous faut :

    - Un machine exécutant XStats
    - Un serveur Web avec Php & MySql
    - Un machine exécutant une interface faite en flash et recevant le flux video de la vue Cs pour faire l'overlay (donc une carte d'acquisition video requise)
    & sur cette même machine une sortie video pour réenvoyer un flux avec l'overlay.
    neku, 21 Octobre 2006
    #23
  4. Offline
    dogua ex membre
    je m'en doutai un ti peu quil ne fesait que recuperrer les stats etc...

    Mais merci qd mm on refera tt sa :p
    dogua, 21 Octobre 2006
    #24
  5. Offline
    neku Codeur roumain
    J'ai commencé une interface en flash, avec la base MySql qui va avec, désque je l'ia finie, je la distribuerai ;)
    neku, 21 Octobre 2006
    #25
  6. Offline
    dogua ex membre
    Merci, que demander de plus... TES UN DIEU Neku :-D :-D :-D :-D :-D
    dogua, 21 Octobre 2006
    #26
  7. Offline
    neku Codeur roumain
    Voila, j'ai donc fait les principale fonction en action script dont j'ai besoin, mais reste l'apparence physique.
    Vu que je n'ai pas trop le temps de le faire, et que je suis pas un as de photoshop, je cherche quelqu'un qui voudrais bien faire les languettes Bleu/Rouge (CT/T), l'entête contenant les scrores, les drapeaux, le timer round/bomb, ...
    neku, 22 Octobre 2006
    #27
  8. Offline
    dogua ex membre
    Ben vu que tu na pas trop le temp et que ton sujet me tien a coeur, je me debrouille pas mall sur photoshop, donc je veu bien t'aider.

    Soite donne moi ton msn ou koi, ou dit moi se que tu veut enfin les different truc kill faut faire ;)
    dogua, 22 Octobre 2006
    #28
  9. Offline
    neku Codeur roumain
    neku, 22 Octobre 2006
    #29
  10. Offline
    Bombouille The BomB3rM4N
    j'ai hâte de voir la finalité de se projet...

    Merçi en tout cas pour tout ce que tu fais neku :p
    Bombouille, 22 Octobre 2006
    #30
  11. Offline
    GUMBAL 1337
    Cela pourrait vachement aider à avoir des matchs sur écran géant de qualité, en éspérant que les orgnisations (qui auront le matériel nécessaire) utiliseront ce projet, car c'est des outils vraiment pratique et agréable à voir pour le public.
    GUMBAL, 22 Octobre 2006
    #31
  12. Offline
    neku Codeur roumain
    Alors voila comment XStats et l'interface vont intéragir entre eux ainsi que le matériel nécessaire :

    Matériel :
    - Une machine avec une sortie video :
    - Cs 1.6 installé en spectateur
    - XStats exécuté
    - Une machine serveur :
    - Un serveur Cs 1.6
    - Un serveur Web (php)
    - Un serveur MySQL
    - Exécutant un script Perl qui récupère d'autre informations par logaddress
    - Une machine avec sortie video :
    - Un lecteur flash installé
    - L'interface exécutée
    - Une machine permettant du montage video
    - Pour effectuer la superposition
    Principe :

    La machine utilisant XStats envoie sont flux vidéo à la machine de montant, cette même machine envoie les informations de la partie au serveur Web via la méthode POST à un script PHP qui va enregistrer les données dans la base de données Mysql, puis exéuter un autre script PHP qui construira un fichier XML à partir des informations de XStats et du script Perl pour l'interface.
    La machine executant l'interface envoie son flux aussi à la machine de montage

    L'interface lit le fichier XML à période régulière et modifie sont affichage en fonction du contenu du fichier XML.

    Après montage on est près à afficher / diffuser
    Le problème c'est que une machine de montage video coûte cher :/

    Pour le son, on le récupère sur la machine exécutant Cs en spectateur.

    Schéma :

    XStats ->
    MySQL -> XML -> Interface -> Ecran/Streaming
    Script Perl ->

    Pour ne pas devoir utiliser 3 Machines, Mais 2 on peut imagine que le serveur Cs, Web, Mysql, Client Cs, Xstats soit lancé sur une seul machine, mais je le déconseille pour des raisons de performances.

    Voici un exemple de ce à quoi le fichier XML va ressembler :

    Code:
    <XStats>
    	<RoundTime>xx:xx</RoundTime>
    	<BombTime>xx:xx</BombTime>
    	<Map>de_dust2</Map>
    	<Server>127.0.0.1:27015</Server>
    	<IsInterRound>0</IsInterRound>
    	<IsBombPlanted>0</IsBombPlanted>
    	<IsPause>0</IsPause>
    	<Players>
    		<Player>
    			<ID>1</ID>
    			<Team>CT</Team>
    			<Pseudo>Neku</Pseudo>
    			<Weapon>M4A1</Weapon>
    			<Defuse>0</Defuse>
    			<Bomb>0</Bomb>
    			<Alive>3</Alive>
    			<Frags>0</Frags>
    			<Death>4</Death>
    			<Killer>2</Killer>
    			<Hs>0</Hs>
    			<KillerWeapon>Knife</KillerWeapon>
    		</Player>
    		<Player>
    			<ID>2</ID>
    			<Team>T</Team>
    			<Pseudo>Syam</Pseudo>
    			<Weapon>Knife</Weapon>
    			<Defuse>0</Defuse>
    			<Bomb>1</Bomb>
    			<Alive>3</Alive>
    			<Frags>1</Frags>
    			<Death>4</Death>
    			<Killer>1</Killer>
    			<Hs>1</Hs>
    			<KillerWeapon>Deagle</KillerWeapon>
    		</Player>
    	</Players>
    </XStats>
    
    neku, 22 Octobre 2006
    #32
  13. Offline
    neku Codeur roumain
    Voici le script perl (fini) :

    Code:
    #!/usr/bin/perl
    
    $POST_SRV = "www.nekuz0r.net";
    $POST_PORT = 80;
    $POST_PAGE = "neku/Perl.php";
    
    sub trim($)
    {
    	my $string = shift;
    	$string =~ s/^\s+//;
    	$string =~ s/\s+$//;
    	return $string;
    }
    
    use Socket;
    
    #Adresse du serveur Cs (arg 1)
    $Address = $ARGV[0];
    
    if (!$Address) {
    	die ("You must define the server address !\nex : nexen.org\n");
    }
    
    #Port à utiliser (se trouvant dans l'argument 2)
    $Port = $ARGV[1];
    
    if (!$Port) {
    	die ("You must define the server port !\nex : 27015\n");
    }
    
    #Rcon du serveur
    $Rcon = $ARGV[2];
    
    if (!$Rcon) {
    	die ("You must define the server Rcon !\nex : Toto\n");
    }
    
    #On récupère l'ip à partir de l'adresse
    $IP = gethostbyname($Address);
    
    #On récupère le numéro de protocol
    $N_Proto = getprotobyname("UDP");
    
    #On initialise le sockt
    socket (HL, PF_INET, SOCK_DGRAM, $N_Proto) or die("Unable to create socket.\n");
    
    #On se connect au serveur
    connect (HL, sockaddr_in($Port, $IP)) or die("Unable to connect to $IP:$PORT.\n");
    
    #4 x chr(255) devant la commande
    $Head = chr(255).chr(255).chr(255).chr(255);
    
    #On fait une demande RCON (Rcon Challenge)
    $Request = $Head."challenge rcon".chr(10);
    send(HL,$Request,0);
    
    #On recupère la valeur du Challenge
    recv(HL,$Challenge,255,0);
    $Challenge = substr($Challenge, 19, 10);
    
    while(1) {
    	#On envoie RCON Status
    	$Request = $Head."rcon $Challenge $Rcon status".chr(10);
    	send (HL, $Request, 0);
    
    	#On recup
    	recv(HL,$Status,4096,0);
    
    	#On découpe chaque lignes
    	@Lignes = split(chr(10), $Status);
    
    	#On recherche la ligne de départ de la liste des joueurs
    	$Compteur = 0;
    	while (index(@Lignes[$Compteur],"# ") == -1) {
    		$Compteur++;
    	}
    	#$Compteur++;
    	
    	if (index(@Lignes[$Compteur + 1],"0 users") >= 0) {
    		goto end;
    	}
    	
    	$Compteur++;
    
    	#On traite chaque lignes
    	while (index(@Lignes[$Compteur],"users") == -1) {
    		#Les 4 permiers caractères représent ID
    		$ID = trim(substr(@Lignes[$Compteur],1,3));
    		
    		#Pseudo : On recherche le premier " puis le second
    		$Debut = index(@Lignes[$Compteur],chr(34));
    		$Fin = rindex(@Lignes[$Compteur],chr(34));
    		$Pseudo = substr(@Lignes[$Compteur], $Debut + 1, $Fin - $Debut - 1);
    		
    		#UserID, se trouve juste apres le pseudo 3 caractères
    		$UID = substr(@Lignes[$Compteur], $Fin + 2, 3);
    		
    		#IP est la derniere colonnes, on retourne la chaine et on recherche le premier espace ;)
    		$Reverse = reverse(@Lignes[$Compteur]);
    		$Fin = index($Reverse,chr(32));
    		$IP = reverse(substr($Reverse, 0, $Fin));
    		
    		#On envoie ca à un script PHP via POST
    		socket(POST, PF_INET, SOCK_STREAM, getprotobyname("TCP")) or die ("Unable to create POST Sock");
    		$POST_IP = gethostbyname($POST_SRV);
    		connect(POST,sockaddr_in($POST_PORT, $POST_IP)) or die ("Unable to connect to $POST_IP:$POST_PORT");
    		
    		$Requete_Post = "POST /$POST_PAGE HTTP/1.1\r\n";
    		$Requete_Post = $Requete_Post."HOST: $POST_SRV\r\n";
    		$Requete_Post = $Requete_Post."Content-Type: application/x-www-form-urlencoded\r\n";
    		$Requete_Post = $Requete_Post."Content-Length: 1000\r\n";
    		$Requete_Post = $Requete_Post."\r\n";
    		$Requete_Post = $Requete_Post."ID=$ID";
    		$Requete_Post = $Requete_Post."&Pseudo=$Pseudo";
    		$Requete_Post = $Requete_Post."&UID=$UID";
    		$Requete_Post = $Requete_Post."&IP=$IP\r\n";
    		
    		send(POST,$Requete_Post,0);
    		#print "$Requete_Post\n";
    		print "Sended : $ID\n";
    		
    		$Compteur++;
    		
    		#Un pause pour pas saturer le serveur Web
    		sleep(1);
    	}
    end:
    	#Une pause pour pas saturer le serveur HL
    	sleep(5);
    }
    
    neku, 22 Octobre 2006
    #33
  14. Offline
    neku Codeur roumain
    neku, 23 Octobre 2006
    #34
  15. Offline
    dogua ex membre
    merci merci ;)

    Sinon je commencerai le headeur se soir ou demain ;)
    dogua, 24 Octobre 2006
    #35
  16. Offline
    neku Codeur roumain
    Voila, je vous propose dès maintenant un ensemble de script permettant d'utiliser de manière éfficace les information délivrées par XStats.

    Cet ensemble contient 7 Fichiers :

    - MakeXML.php
    - Sql_Config.php
    - MySQL.h
    - XStats_Perl.php
    - XStats_Perl.pl
    - XStats.php
    - XStats.sql

    XStats.sql
    Contient la structure de la base de données utilisée pour XStats

    MakeXML.php
    Génerer un fichier XML à partir de l'ensemble des informations de la base de données

    Sql_Config.php
    Fourni les information de connexion à la base de données pour les divers scripts

    MySQL.h
    Contient une classe de connexion SQL en PHP

    XStats_Perl.pl
    Contient un script en perl complémentaire à XStats qui fourni divers informations importantes au stockage de celle fournies par XStats dans la base de données.
    Ce script doit être configuré.
    Editez le fichier et modifier les variables suivantes :
    - $POST_SRV = (Adresse du votre serveur Web)
    - $POST_PAGE = (Chemin relative au script XStats_Perl.php)
    - $POST_PORT = (Port utilisé par votre serveur WEB (80 par défaut))

    - $FULL_INFO = (Définit si on utilise une requete PLAYERS ou RCON STATUS)
    1 = RCON STATUS
    0 = PLAYERS
    Il faut savoir que si cette variable est à 1, le RCON du serveur Counter-Strike doit être connu et que l'IP et l'UID de chaque joueur sera disponible.
    - $Address = (Adresse de votre serveur Cs (IP ou Host))
    - $Port = (Port de votre serveur Cs)
    - $Rcon = (RCON de votre serveur)

    XStats_Perl.php
    Script qui va se charger de mettre à jour les informations dans la base de données reçues par le script Perl (XStats_Perl.pl).

    XStats.php
    Script qui va se charger de mettre à jour les informations dans la base de données reçues par XStats.


    Les scripts :

    XStats_Perl.pl
    Code:
    #!/usr/bin/perl
    
    $POST_SRV = "213.186.36.119";
    $POST_PORT = 80;
    $POST_PAGE = "neku/XStats/XStats_Perl.php";
    
    $Address = "213.186.36.119";
    $Port = "27015";
    $Rcon = "*****";
    
    #FULL INFO Permet d'obtenir l'ip des joueurs en plus et l'UID
    #Il requiere le RCON pour fonctionner
    $FULL_INFO = 0;
    
    use Socket;
    use Fcntl;
    
    sub trim($)
    {
    	my $string = shift;
    	$string =~ s/^\s+//;
    	$string =~ s/\s+$//;
    	return $string;
    }
    
    sub Send_Post {
    		($ID, $Pseudo, $UID, $IP) = @_;
    
    		#On envoie ca à un script PHP via POST
    		socket(POST, PF_INET, SOCK_STREAM, getprotobyname("TCP")) or die ("Unable to create POST Sock");
    		$POST_IP = gethostbyname($POST_SRV);
    		connect(POST,sockaddr_in($POST_PORT, $POST_IP)) or die ("Unable to connect to $POST_IP:$POST_PORT");
    		
    		$Requete_Post = "POST /$POST_PAGE HTTP/1.1\r\n";
    		$Requete_Post = $Requete_Post."HOST: $POST_SRV\r\n";
    		$Requete_Post = $Requete_Post."Content-Type: application/x-www-form-urlencoded\r\n";
    		$Requete_Post = $Requete_Post."Content-Length: 1000\r\n";
    		$Requete_Post = $Requete_Post."\r\n";
    		$Requete_Post = $Requete_Post."ID=$ID";
    		$Requete_Post = $Requete_Post."&Pseudo=$Pseudo";
    		$Requete_Post = $Requete_Post."&UID=$UID";
    		$Requete_Post = $Requete_Post."&IP=$IP\r\n";
    		
    		send(POST,$Requete_Post,0);
    		#print "$Requete_Post\n";
    		#print "Sended : $ID\n";
    }
    
    #On récupère l'ip à partir de l'adresse
    $IP = gethostbyname($Address);
    
    #On récupère le numéro de protocol
    $N_Proto = getprotobyname("UDP");
    
    #On initialise le sockt
    socket (HL, PF_INET, SOCK_DGRAM, $N_Proto) or die("Unable to create socket.\n");
    setsockopt(HL,SOL_SOCKET,SO_RCVTIMEO,pack('LL',4,0));
    #On se connect au serveur
    $sin = sockaddr_in($Port, $IP);
    connect (HL, $sin) or die("Unable to connect to $IP:$PORT.\n");
    #4 x chr(255) devant la commande
    $Head = chr(255).chr(255).chr(255).chr(255);
    
    if ($FULL_INFO == 1) {
    	#On fait une demande RCON (Rcon Challenge)
    	$Request = $Head."challenge rcon".chr(10);
    }
    elsif ($FULL_INFO == 0) {
    	$Request = $Head.chr(87);
    }
    
    send(HL,$Request,0);
    
    #On recupère la valeur du Challenge
    recv(HL,$Challenge,255,0);
    
    if ($FULL_INFO == 1) {
    	$Challenge = substr($Challenge, 19, index($Challenge,chr(10),19) - 19);
    }
    elsif ($FULL_INFO == 0) {
    	$Un = ord(substr($Challenge,5,1));
    	$Deux = ord(substr($Challenge,6,1));
    	$Trois = ord(substr($Challenge,7,1));
    	$Quatre = ord(substr($Challenge,8,1));
    }
    
    while(1) {
    req:
    	if ($FULL_INFO == 1) {
    		#On envoie RCON Status
    		$Request = $Head."rcon $Challenge $Rcon status".chr(10);
    		send (HL, $Request, 0);
    	}
    	elsif ($FULL_INFO == 0) {
    		#On fait une demande PLAYERS
    		$Request = $Head.chr(85).chr($Un).chr($Deux).chr($Trois).chr($Quatre);
    		send(HL,$Request,0);
    	}
    	
    	#On recup
    	recv(HL,$Status,4096,0);
    	
    	if ($FULL_INFO == 1) {
    		#On découpe chaque lignes
    		@Lignes = split(chr(10), $Status);
    
    		#On recherche la ligne de départ de la liste des joueurs
    		$Compteur = 0;
    		while (index(@Lignes[$Compteur],"# ") == -1) {
    			$Compteur++;
    		}
    		#$Compteur++;
    		
    		if (index(@Lignes[$Compteur + 1],"0 users") >= 0) {
    			goto end;
    		}
    		
    		$Compteur++;
    	
    		#On traite chaque lignes
    		while (index(@Lignes[$Compteur],"users") == -1) {
    			#Les 4 permiers caractères représent ID
    			$ID = trim(substr(@Lignes[$Compteur],1,3));
    			
    			#Pseudo : On recherche le premier " puis le second
    			$Debut = index(@Lignes[$Compteur],chr(34));
    			$Fin = rindex(@Lignes[$Compteur],chr(34));
    			$Pseudo = substr(@Lignes[$Compteur], $Debut + 1, $Fin - $Debut - 1);
    		
    			#UserID, se trouve juste apres le pseudo 3 caractères
    			$UID = substr(@Lignes[$Compteur], $Fin + 2, 3);
    		
    			#IP est la derniere colonnes, on retourne la chaine et on recherche le premier espace ;)
    			$Reverse = reverse(@Lignes[$Compteur]);
    			$Fin = index($Reverse,chr(32));
    			$IP = reverse(substr($Reverse, 0, $Fin));
    
    			Send_Post($ID, $Pseudo, $UID, $IP);
    			$Compteur++;
    		
    			print ".";
    			
    			#Un pause pour pas saturer le serveur Web
    			sleep(1);
    		}
    	}
    	elsif ($FULL_INFO == 0) {
    		#On recupère le nombre de joueurs (6eme octet)
    		$Max = ord(substr($Status,5,1));
    		$Offset = 0;
    		$retrait = 0;
    		for ($Compteur = 1; $Compteur <= $Max; $Compteur++) {
    			$Begin = index($Status,chr($Compteur),$Offset);
    			$Offset = $Begin;
    			$End = index($Status,chr($Compteur + 1), $Offset);
    			if ($End == -1) { $End = length($Status) - 1; }
    			$Offset = $End;
    			
    			$Ligne = substr($Status, $Begin, $End - $Begin);
    			
    			$Deca = index(substr($Ligne,1,10),chr($Compteur));
    			if ($Deca != -1) {
    				$Ligne = substr($Status, $Begin + $Deca + 1, $End - ($Begin + $Deca + 1));
    			}
    			
    			$ID = ord(substr($Ligne,0,1)) - $retrait;
    			$Pseudo = substr($Ligne,1,index($Ligne,chr(0)) - 1);
    
    			$UID = -1;
    			$IP = "Undefined";
    			if (index($Pseudo,"HLTV") == -1) {
    				Send_Post($ID, $Pseudo, $UID, $IP);
    				print "$ID - $Pseudo\n";
    				sleep(1);
    			}
    			else {
    				$retrait++;
    			}
    			#print ".";
    			
    		}
    	}
    end:
    	print "\n";
    	#Une pause pour pas saturer le serveur HL
    	sleep(5);
    }
    
    XStats_Perl.php
    Code:
    <?
    	include('MySQL.h');
    	include('Sql_Config.php');
    	
    	$SQL = new MySQL;
    	$SQL->Connect($Sql_Login, $Sql_Password, $Sql_Host, $Sql_Database);
    	$SQL->Query("UPDATE Players SET UID='".$_POST['UID']."',Pseudo='".$_POST['Pseudo']."',IP='".$_POST['IP']."' WHERE ID=".$_POST['ID']);
    	$SQL->Disconnect();
    ?>
    
    MySQL.h
    Code:
    <?
    class MySQL {
    
    	var $Connection;
    	var $QueryRep;
    
    	function Connect($Login,$Pass,$Host,$Database) {
    		$this->Connection = mysql_connect($Host,$Login,$Pass);
    		mysql_select_db($Database);
    	}
    
    	function Query($Query) {
    		$this->QueryRep = mysql_query($Query);
    	}
    
    	function Disconnect() {
    		mysql_close($this->Connection);
    	}
    }
    ?>
    
    XStats.php
    Code:
    <?
    	include('MySQL.h');
    	include('Sql_Config.php');
    	include('MakeXML.php');
    	$SQL = new MySQL;
    	
    	$Compteur = 0;
    	
    	$SQL->Connect($Sql_Login,$Sql_Password,$Sql_Host,$Sql_Database);
    	$SQL->Query("UPDATE Game SET RoundTime='".$_POST['RoundTime']."',BombTime='".$_POST['BombTime']."',IsBombPlanted='".$_POST['IsBombPlanted']."',IsPaused='".$_POST['IsPaused']."',ServerIP='".$_POST['ServerIP']."',Map='".$_POST['Map']."',IsInterRound='".$_POST['IsInterRound']."'");
    	
    	foreach($_POST as $Key => $Value) {
    		if (strstr($Key,"Player")) {
    			$Split = split(";",$Value);
    		
    			$Pseudo = $Split[0];
    			$Team = $Split[1];
    			$Alive = $Split[2];
    			$Weapon = $Split[3];
    			$Defuse = $Split[4];
    			$Bomb = $Split[5];
    			$Frags = $Split[6];
    			$Deaths = $Split[7];
    			$Hs = $Split[8];
    			$Killer = $Split[9];
    			$KillerWeapon = $Split[10];
    		
    			$SQL->Query("UPDATE Players SET Bomb='".$Bomb."',Defuse='".$Defuse."',Weapon='".$Weapon."',Alive='".$Alive."',Frags='".$Frags."',Deaths='".$Deaths."',Team='".$Team."',Killer='".$Killer."',Hs='".$Hs."',KillerWeapon='".$KillerWeapon."' WHERE Pseudo='".$Pseudo."'");
    		}
    		$Compteur++;
    	}
    	$SQL->Disconnect();
    	
    	MakeXML();
    ?>
    
    MakeXML.php
    Code:
    <?
    function MakeXML() {
    	include ('MySQL.h');
    	include('Sql_Config.php');
    	
    	$SQL = new MySQL;
    	$SQL->Connect($Sql_Login, $Sql_Password, $Sql_Host, $Sql_Database);
    	
    	$XML_File = fopen("XStats.xml","r+");
    		fputs($XML_File, "<XStats>\n");
    			$SQL->Query("SELECT * FROM Game");
    			$Donnees = mysql_fetch_array($SQL->QueryRep);
    			
    			fputs($XML_File,chr(9)."<RoundTime>".$Donnees['RoundTime']."</RoundTime>\n");
    			fputs($XML_File,chr(9)."<BombTime>".$Donnees['BombTime']."</BombTime>\n");
    			fputs($XML_File,chr(9)."<Map>".$Donnees['Map']."</Map>\n");
    			fputs($XML_File,chr(9)."<Server>".$Donnees['ServerIP']."</Server>\n");
    			fputs($XML_File,chr(9)."<IsBombPlanted>".$Donnees['IsBombPlanted']."</IsBombPlanted>\n");
    			fputs($XML_File,chr(9)."<IsPaused>".$Donnees['IsPaused']."</IsPaused>\n");
    			fputs($XML_File,chr(9)."<IsInterRound>".$Donnees['IsInterRound']."</IsInterRound>\n");
    			
    			fputs($XML_File,chr(9)."<Players>\n");
    				$SQL->Query("SELECT * FROM Players");
    				while ($Donnees = mysql_fetch_array($SQL->QueryRep)) {
    					fputs($XML_File,chr(9).chr(9)."<Player>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<ID>".$Donnees['ID']."</ID>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<UID>".$Donnees['UID']."</UID>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<IP>".$Donnees['IP']."</IP>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Pseudo>".$Donnees['Pseudo']."</Pseudo>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Bomb>".$Donnees['Bomb']."</Bomb>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Defuse>".$Donnees['Defuse']."</Defuse>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Weapon>".$Donnees['Weapon']."</Weapon>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Alive>".$Donnees['Alive']."</Alive>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Frags>".$Donnees['Frags']."</Frags>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Deaths>".$Donnees['Deaths']."</Deaths>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Team>".$Donnees['Team']."</Team>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Killer>".$Donnees['Killer']."</Killer>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<Hs>".$Donnees['Hs']."</Hs>\n");
    						fputs($XML_File,chr(9).chr(9).chr(9)."<KillerWeapon>".$Donnees['KillerWeapon']."</KillerWeapon>\n");
    					fputs($XML_File,chr(9).chr(9)."</Player>\n");
    				}
    			fputs($XML_File,chr(9)."</Players>\n");
    		fputs($XML_File, "</XStats>");
    	fclose($XML_File);
    }
    ?>
    
    Téléchargement : http://www.nekuz0r.net/neku/Counter-Strike/XStats%201.0/XStats_Script.zip
    neku, 24 Octobre 2006
    #36
  17. Offline
    GUMBAL 1337
  18. Offline
    neku Codeur roumain
    Alors voilà, l'interface publique évolue.
    Voici donc un aperçu du résultat.
    L'image d'arrière plan est fictive !

    [IMG]
    neku, 26 Octobre 2006
    #38
  19. Offline
    Samy_14 ex membre
    Je viens de voir que Neku, tu avais deja commencé l'anim flash donc je vais arreter la mienne ;)

    Pour mon anim, je pensais mettre un perso CT ou terro à la place des drapeaux car la pluparts des lans ce font entre français.

    De plus, Neku j'ai vu que tu avais écris si le gars à la bombe ou le kit diffus mais est-ce que cela serais plus complexe de mettre une image de bombe ou un kit a coté du pseudo ?

    Est-ce qu'on pourra avoir le choix d'afficher le nbre de frags et de mort car je pense que cette information n'est pas nécéssaire pour des matchs en lan.

    Neku, si tu as besoin d'aide pour faire l'anim flash au nivo dev, je suis partant :p
    Samy_14, 26 Octobre 2006
    #39
  20. Offline
    neku Codeur roumain
    J'accepte toutes propositions, mainteant je fournirai les sources de l'anim flash, donc ce qui ne vous convient pas ou voullez modifier, vous en êtes totalement libre :p
    Je ne fais que vous apporter le plus gros du travaille, en vous fournissant des scripts et une base d'interface fonctionnelle.
    neku, 26 Octobre 2006
    #40
Statut de la discussion:
Fermée.