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
merci mec tu dechire tt
je m'en doutai un ti peu quil ne fesait que recuperrer les stats etc...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.
Merci, que demander de plus... TES UN DIEU Neku :-D :-D :-D :-D :-Dneku 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
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.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, ...
<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>
#!/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);
}
#!/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);
}
<?
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();
?>
<?
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);
}
}
?>
<?
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();
?>
<?
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);
}
?>