HarryPotter 发表于 2003-10-25 18:29:56

[分享] 显示CSSTATS的TOP15的PHP程序

早就想了解csstats.dat的格式,可是官方网站现在还是提供0.93的源代码。没办法,我只好自己试验了一上午,终于知道csstats.dat的格式,发出来给大家共享,同时也写了一个PHP程序可以直接在网站显示CSSTATS的TOP15

//top15.php
<table border><caption>CS排行榜</caption><tr><th>排名<th>名字<th>杀人数<th>爆头(%)<th>死<th>命中/子弹数(命中率)<th>得分(爆头*2+杀人数-死)
<?function bin2int($bin)
{return ord($bin)+ord($bin)*256;
}
$fp=fopen("D:\\HLServer\\cstrike\\addons\\amx\\csstats.dat","rb");
if(bin2int(fread($fp,2))!=5) exit("请安装CSStats 0.97");
for($i=1;$i<=15;$i++)
{if(!$namelen=bin2int(fread($fp,2))) break;//WORD名字长度(包括\0)
$player=fread($fp,$namelen-1);
fseek($fp,$namelen+3,SEEK_CUR);
$a=unpack("V15stats",fread($fp,60));
//15个DWORD依次为1?,2Damage,3Death,4Kill,5Shots,6Hits,7Headshots,8?,9head,10chest,11stomach,12leftarm,13rightarm,14leftleg,15rightleg
echo "<tr><td>$i<td>$player<td>".$a["stats4"]."<td>".$a["stats7"]."(".round($a["stats7"]/$a["stats4"]*100,1)."%)<td>".$a["stats3"]."<td>".$a["stats6"]."/".$a["stats5"]."=".round($a["stats6"]/$a["stats5"]*100,1)."%)<td>".($a["stats4"]+$a["stats7"]*2-$a["stats3"]);
}
fclose($fp);
?></table>

becking 发表于 2003-10-26 00:58:39

harrypotter的那个查询地址是:
http://my.ncusc.com/cs
大家可以看看。。。

飘风 发表于 2003-10-26 12:40:13

在这里可以找到csstats.dat的格式
包括amx最新版本的Source
http://cvs.sourceforge.net/viewcvs.py/amxmod/
不过有时可能连接不上~

HarryPotter 发表于 2003-10-27 13:59:50

哈哈!找到了源代码,一下就明朗了
void RankSystem::loadRank( const char* filename )
{
        FILE *bfp = fopen( filename , "rb" );
       
        if ( !bfp ) return;
       
        short int i = 0;
        fread(&i, 1 , sizeof(short int) , bfp);
       
        if (i == RANK_VERSION)
        {
                Stats d;
                char unique, name;
                fread(&i , 1, sizeof(short int), bfp);

                while( i )
                {
                        fread(name , i,sizeof(char) , bfp);
                        fread(&i , 1, sizeof(short int), bfp);
                        fread(unique , i,sizeof(char) , bfp);
                        fread(&d.tks, 1,sizeof(int), bfp);
                        fread(&d.damage, 1,sizeof(int), bfp);
                        fread(&d.deaths, 1,sizeof(int), bfp);
                        fread(&d.kills, 1,sizeof(int), bfp);
                        fread(&d.shots, 1,sizeof(int), bfp);
                        fread(&d.hits, 1,sizeof(int), bfp);
                        fread(&d.hs, 1,sizeof(int), bfp);
                        fread(d.bodyHits, 1,sizeof(d.bodyHits), bfp);
                        fread(&i , 1, sizeof(short int), bfp);

                        RankSystem::RankStats* a = findEntryInRank( unique , name );
                        if ( a ) a->updatePosition( &d );
                }
        }
       
        fclose(bfp);
}

deem 发表于 2003-10-27 16:38:13

nice~

ykc007 发表于 2003-11-25 13:18:07

好顶呀

duketang 发表于 2003-12-18 19:58:15

这里面有没有武器使用的数据?

OssamaBen.Laden 发表于 2003-12-18 20:21:22

谢谢大大的分享!

duketang 发表于 2003-12-18 21:09:49

你把statme的格式也搞出来吧

金闪闪 发表于 2003-12-20 10:35:58

我记得谁放了个statmeTOhtml的exe文件。

我看楼主也作一个吧。:)
页: [1] 2
查看完整版本: [分享] 显示CSSTATS的TOP15的PHP程序