[CS 1.6] XStats devenu public !

Statut
N'est pas ouverte pour d'autres réponses.
D

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 ^^
 
D

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?
 
1er
OP
neku

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.
 
D

dogua

ex membre
neku a dit:
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.
je m'en doutai un ti peu quil ne fesait que recuperrer les stats etc...

Mais merci qd mm on refera tt sa ^^
 
1er
OP
neku

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 ;)
 
D

dogua

ex membre
neku a dit:
J'ai commencé une interface en flash, avec la base MySql qui va avec, désque je l'ia finie, je la distribuerai ;)
Merci, que demander de plus... TES UN DIEU Neku :-D :-D :-D :-D :-D
 
1er
OP
neku

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, ...
 
D

dogua

ex membre
neku a dit:
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, ...
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 ;)
 

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 ^^
 

GUMBAL

💎💎💎💎💎
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.
 
1er
OP
neku

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>
 
1er
OP
neku

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);
}
 
D

dogua

ex membre
merci merci ;)

Sinon je commencerai le headeur se soir ou demain ;)
 
1er
OP
neku

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
 
1er
OP
neku

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 !

 
S

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
 
1er
OP
neku

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.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut