PraetoriansWiki:Sequence HowTo/Scann File

From PraetoriansWiki

Jump to: navigation, search

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