PraetoriansWiki:Sequence HowTo/Scann File
From PraetoriansWiki
Contents |
[edit] Sequence File Struct
Sequencefile in order how to read.
SPACE VALUES ARE UNKOWN VALUES = $leer
[edit] function readstring ($fp,$bytelong)
STRING : 1byte for string length follow by string bytes (BOOM false)
<?php
function readstring($fp,$bytelong) {
$scount = ord(fgetc($fp));
$resultstring = "";
if ($scount > 0 ) {
for ($ii=0 ; $ii < $scount;$ii++) {
if ($bytelong == 1 ) {
$resultstring.= fgetc($fp);
}
if ($bytelong == 2 ) {
$resultstring.= fgetc($fp);
$resultstring.= fgetc($fp);
}
}
if ($bytelong == 2) {
$resultstring = utf16_decode($resultstring);
}
}
return $resultstring;
}
?>
[edit] function readZahl($fp,$bytelong)
VALUES : 4byte order -> byte*(256^0)+byte*(256^1)+byte*(256^2)+byte*(256^3)
<?php
function readZahl($fp,$bytelong) {
$resultzahl = 0;
if ( $bytelong > 0 ) {$resultzahl += ord(fgetc($fp));}
if ( $bytelong > 1 ) {$resultzahl += ord(fgetc($fp))*256;}
if ( $bytelong > 2 ) {$resultzahl += ord(fgetc($fp))*256*256;}
if ( $bytelong > 3 ) {$resultzahl += ord(fgetc($fp))*256*256*256;}
return $resultzahl;
}
?>
[edit] code , get main data
General Sequence Data
8byte = space
1byte = version
3byte = space
4byte = playtime
1Byte String = date (savers system short date)
1Byte String = time (savers system time)
1Byte String = Map
3byte = space
1byte = playercount
2byte = space
<?php $leer=fread($fp,8); $datas['sversion'] = ord(fgetc($fp)); $leer=fread($fp,3); $datas['nallTime'] = readZahl($fp,4); $datas['Datum'] = readstring($fp,1); $datas['Zeit'] = readstring($fp,1); $datas['Mape'] = readstring($fp,1); $leer=fread($fp,3); $datas['playerCounter'] = readZahl($fp,1); $leer=fread($fp,2); ?>
[edit] code cycle player names
cycle players setting
2byte = ID
2Byte String = name
1Byte String = race
23byte = space
cycle troops to find next player
1byte = troop ID
1Byte String = troop name
<?php
for ($ii=0 ; $ii < $datas['playerCounter'] ; $ii++) {
$theid = ord(fread($fp,1)). ord(fread($fp,1))*256;
$player="";
$player['name'] = readstring($fp,2);
$player['rasse'] = readstring($fp,1);
$leer=fread($fp,23);
switch ($player['rasse']) {
case "ROMANOS" :
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
break;
case "BARBAROS" :
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$leer = array("id"=> $id,"value"=>readstring($fp,1));
break;
case "EGIPCIOS" :
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
break;
case "CARTAGINESES" :
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
break;
case "PERSAS" :
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
break;
case "GRIEGOS" :
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
$id = ord(fread($fp,1)) ;
$leer = array("id"=> $id,"value"=>readstring($fp,1));
break;
}
$datas['troops'][]=array( "name" =>$player['name'],
"rasse" =>$player['rasse'],
"saved" =>"","wins" =>"",
"color" =>"","team" =>"",
"score" =>"",
"villa" =>"",
"time" =>"",
"train" =>"",
"kills" =>"",
"losts" =>""
);
}
?>
GET PLAYER STATISTIC
[edit] code players staitic begin
READ LAST playercount * 120 bytes from sequencefile
START FIND BEGIN of playerstatistics
search byteorder (hex) 45 00 00 80 00 00
<?php
$lastbytes = -($datas['playerCounter'] * 120);
$whereiam=fseek($fp,$lastbytes,SEEK_END);
$findid = mdechex(ord(fread($fp,1))).mdechex(ord(fread($fp,1)));
$findid .= mdechex(ord(fread($fp,1))).mdechex(ord(fread($fp,1)));
$findid .= mdechex(ord(fread($fp,1))).mdechex(ord(fread($fp,1)));
while ($findid != "450000800000" AND !feof($fp)) {
$nextnewchar = mdechex(ord(fread($fp,1)));
$findid = substr($findid,2).$nextnewchar;
}
?>
[edit] code players staitic
4byte = space
1byte = playerscount
cycle player statistics
1byte = saved (0/1)
1byte = wins (0/1)
1byte = color (0-7)
1byte = team (1-8)
4byte = score
4byte = villa
4byte = time (units running)
4byte = train
4byte = kills
4byte = losts
2Byte String = name
2Byte String = race (savers charset)
Compare name with already scanned names , cause the order is different.
<?php
$leer=fread($fp,4);
$playerscoming = ord(fread($fp,1));
for ($ii=0 ; $ii < $playerscoming ; $ii++) {
$datassaved = readZahl($fp,1) ;
$dataswins = readZahl($fp,1);
$datascolor = readZahl($fp,1);
$datasteam = readZahl($fp,1);
$datasscore = readZahl($fp,4);
$datasvilla = readZahl($fp,4);
$datastime = readZahl($fp,4);
$datastrain = readZahl($fp,4);
$dataskills = readZahl($fp,4);
$dataslosts = readZahl($fp,4);
$datasname = readstring($fp,2);
$leer = readstring($fp,2);
foreach ( $datas['troops'] as &$adata) {
if ($adata['name'] == $datasname){
$adata['saved'] = $datassaved ;
$adata['wins'] = $dataswins;
$adata['color'] = $datascolor;
$adata['team'] = $datasteam;
$adata['score'] = $datasscore;
$adata['villa'] = $datasvilla;
$adata['time'] = $datastime;
$adata['train'] = $datastrain;
$adata['kills'] = $dataskills;
$adata['losts'] = $dataslosts;
}
}
}
?>
Here some Datas HEX
START END :
00 00 45 00 00 80 00 00
UNTIL FIRST PLAYER
2F 01 00 00 DELAY 04 PLAYER COUNT 0000 0704 E700 0000 0100 0000 784C 0000 FC00 0000 0400 0000 D300 0000 FIRST 0101 0606 4911 0000 0600 0000 784C 0000 FF01 0000 FC02 0000 B800 0000 SECOND 0000 0003 9707 0000 0200 0000 784C 0000 5401 0000 7F01 0000 AE01 0000 THIRD
0A Datum 1 byte string 30 32 2F 30 37 2F 32 30 31 30 08 Zeit 1 byte string 30 33 3A 35 36 3A 34 39 13 MAPNAME ^byte string 4D 49 53 49 4F 4E 45 53 5C 4D 50 5F 36 5F 31 2E 4D 53 53 01 02 00 04 00 00 00 00 UNKOWN 11 PLAYERNAME 2 BYTE string 4A00 6F00 6B00 6500 7200 2E00 4A00 6100 6300 6B00 2000 4D00 6500 7300 7200 6900 6E00 07 RASSE 1 byte string 52 4F 4D 41 4E 4F 53 UNKOWN 01 00 00 00 07 00 00 00 04 00 00 00 A3 23 82 41 F8 33 16 43 05 00 00 00 09 CENTURION 43 45 4E 54 55 52 49 4F 4E 01 ID 11 INFANTERIAN_LIGERA 49 4E 46 41 4E 54 45 52 49 41 5F 4C 49 47 45 52 41 1E 07 50 49 51 55 45 52 4F 1E 07 41 52 51 55 45 52 4F 1E 0F 45 58 50 4C 4F 52 41 44 4F 52 5F 4C 4F 42 4F 01 00 11 5D00 5B00 5500 3400 4100 5D00 5B00 5900 4600 4D00 4F00 5400 5300 5D00 5B00 5200 5D000 7524 F4D4 14E4 F53
