banniere
<=
<?php
 
/*
  Options (accessibles par objet->nom_de_l_option):
   country
   login
   nick
   guildname
   guildrank
   guildusers
   ip
   nyx
   securelevel
   emailtype
   totallevel
   countrylevel
   totalranking
   countryranking
   totalrankup
   countryrankup
   win
   lose
   winningaverage
   gp
   gold
   cash
   mapname1
   mapname2
   mapaverage1
   mapaverage2
   mobilename1
   mobilename2
   mobileaverage1
   mobileaverage2
   damages
   nextwinningpercent
 */
 
class gunboundstats {
  private 
$savefile './gunboundstats.db'/* Fichier dans lequel sont sauvegardées les données */
  
private $savedelay 600/* Temps en seconde avant la prochaine mise a jour du fichier de sauvegarde */
  
private $my = Array();
  public final function 
__construct ($login$password) {
   if (
is_readable($this->savefile)) {
    
$a filemtime($this->savefile);
    if ((
$a+$this->savedelay) > time()) {
     
$this->my unserialize(gzinflate(file_get_contents($this->savefile)));
     return 
true;
    }
   }
   try { 
/* Recuperation du cookie de session */
    
$a = new httprequest('GET');
    
$a->setheader('Connection''close');
    
$a->go('http://softnyx.net/member/login.asp');
    
$c $a->getcookies();
    
$a->close();
    if (!
$c) {
     throw new 
exception ('Impossible de recuperer le cookie de session.');
     return 
false;
    }
    try { 
/* Identification */
     
$a = new httprequest('POST');
     
$a->setheader('Referer''http://softnyx.net/member/login.asp');
     
$a->setheader('Cookie'implode('; '$c));
     
$a->setheader('Connection''close');
     
$a->addcontent('RetURL''/');
     
$a->addcontent('ID'$login);
     
$a->addcontent('Passwd'$password);
     
$a->go('http://softnyx.net/member/LoginProcessor.asp');
     
$b $a->getcookies();
     
$a->close();
     if ((!isset(
$b[0])) || (!strcasecmp($b[0], 'Softnyx%5FEng=Login%5FCount=2'))) {
      throw new 
exception ('Login/password incorrect(s).');
      return 
false;
     }
     
$c array_merge($c$b);
     try { 
/* Recuperation des infos */
      
$a = new httprequest('GET');
      
$a->setheader('Connection''close');
      
$a->setheader('Cookie'implode('; '$c));
      
$a->go('http://gunbound.softnyx.net/01_myinfo/01_my_info.asp');
      
$u false;
      
$w '';
      while ((
$b trim($a->readline())) !== false) {
       if ((!
$u) && (!strcasecmp($b'<td width="581"><table width="581" border="0" cellpadding="0" cellspacing="0" class="text1">'))) {
        
$u true;
       }
       else if (
$u) {
        if (!
strcasecmp($b'</table> </td>')) break;
        else if (
$b != ''$w .= $b."\n";
       }
      }
      
$a->close();
      if (!
$w) {
       throw new 
exception ('Website changé, impossible de parser les informations.');
       return 
false;
      }
      
preg_match_all('/<tr>(.*)<\/tr>/Uis'$w$r);
      
$r $r[1];
      if (
count($r) != 28) {
       throw new 
exception ('Website changé, impossible de parser les informations.');
       return 
false;
      }
      else {
       unset(
$r[0], $r[2], $r[6], $r[7], $r[10], $r[11], $r[15], $r[16], $r[20], $r[21], $r[23], $r[24], $r[27]);
       
$r array_values($r);
       
$s = Array();
       foreach (
$r as $R$s[] = preg_split("/[\r\n]/"$R);
       
$infos = Array('login' => $login);
       foreach (
$s as $i => $t) {
        switch (
$i) {
         case 
0:
          
$infos['nick'] = (string) trim(html_entity_decode($t[5]));
         break;
         case 
1:
          if (
preg_match('/^\[(.*)\]$/'$t[5], $r)) $infos['guild']['name'] = (string) $r[1];
          else 
$infos['guild']['name'] = (string) '';
         break;
         case 
2:
          
$tmp trim(strip_tags($t[4]));
          
$infos['nyx'] = (int) ((($tmp == '---') ? strtotime($tmp)));
         break;
         case 
3:
          
$infos['ip'] = (string) trim(strip_tags($t[4]));
         break;
         case 
4:
          
$infos['securelevel'] = (string) trim(strip_tags($t[4]));
         break;
         case 
5:
          
$infos['emailtype'] = (string) trim(strip_tags($t[4]));
         break;
         case 
6:
          if (
preg_match('/rank_([\d\-]+)/is'$t[4], $r)) $infos['t_level'] = (int) $r[1];
          else 
$infos['t_level'] = 0;
          if (
preg_match('/\((.*)(\d+)\)/Uis'$t[4], $r)) {
           
$infos['t_num'] = (int) $r[2];
           if (!
preg_match('/arrow_up/i'$r[1])) $infos['t_num'] = -($infos['t_num']);
          }
          else 
$infos['t_num'] = 0;
          if (
preg_match('/(\d+)$/'$t[4], $r)) $infos['t_rank'] = $r[1];
          else 
$infos['t_rank'] = 0;
          
$infos['gp'] = (int) trim(substr($t[5], 1));
         break;
         case 
7:
          if (
preg_match('/rank_([\d\-]+)/is'$t[4], $r)) $infos['n_level'] = $r[1];
          else 
$infos['n_level'] = 0;
          if (
preg_match('/\((.*)(\d+)\)/Uis'$t[4], $r)) {
           
$infos['n_num'] = (int) $r[2];
           if (!
preg_match('/arrow_up/i'$r[1])) $infos['n_num'] = -($infos['n_num']);
          }
          else 
$infos['n_num'] = 0;
          if (
preg_match('/(\d+)$/'$t[4], $r)) $infos['n_rank'] = $r[1];
          else 
$infos['n_rank'] = 0;
          if (
preg_match('/&nbsp;(.*)&nbsp;&nbsp;/iUs'$t[4], $r)) $infos['country'] = (string) $r[1];
          else 
$infos['country'] = (string) '???';
         break;
         case 
8:
          
$infos['guild']['rank'] = (int) trim(strip_tags($t[4]));
          
$infos['guild']['of'] = (int) substr(trim(strip_tags($t[4])), 2);
         break;
         case 
9:
          if (
preg_match('/\((\d+) win (\d+) lose\)/iUs'$t[4], $r)) {
           
$infos['stats']['win'] = (int) $r[1];
           
$infos['stats']['lose'] = (int) $r[2];
           if ((
$r[1]+$r[2]) != 0$infos['stats']['average'] = (float) ($r[1]*100/($r[1]+$r[2]));
           else 
$infos['stats']['average'] = 0;
          }
          else 
$infos['stats']['win'] = $infos['stats']['lose'] = $infos['stats']['average'] = 0;
         break;
         case 
10:
          
$infos['stats']['map'] = Array();
          for (
$j 4$j <= 5$j++) {
           if (
preg_match('/(.*)&nbsp;(\d+)%/'trim(strip_tags($t[$j])), $r)) {
            
$infos['stats']['map'][] = Array('name' => (string) $r[1], 'average' => (int) $r[2]);
           }
          }
         break;
         case 
11:
          
$infos['stats']['mobile'] = Array();
          for (
$j 4$j <= 5$j++) {
           if (
preg_match('/(.*)&nbsp;(\d+)%/'trim(strip_tags($t[$j])), $r)) {
            
$infos['stats']['mobile'][] = Array('name' => (string) $r[1], 'average' => (int) $r[2]);
           }
          }
         break;
         case 
12:
          
$infos['stats']['damages'] = (float) trim(strip_tags($t[4]));
         break;
         case 
13:
          
$infos['golds'] = (int) trim(strip_tags($t[4]));
         break;
         case 
14:
          
$infos['cashs'] = (int) trim(strip_tags($t[4]));
         break;
        }
       }
       
$this->my $infos;
       @
file_put_contents($this->savefilegzdeflate(serialize($infos), 9));
       return 
true;
      }
     }
     catch (
Exception $e) {
      throw new 
exception ($e->getMessage());
      return 
false;
     }
    }
    catch (
Exception $e) {
     throw new 
exception ($e->getMessage());
     return 
false;
    }
   }
   catch (
Exception $e) {
    throw new 
exception ($e->getMessage());
    return 
false;
   }
  }
  
  public final function 
__get($name) {
   switch (
strtolower($name)) {
    case 
'country': return $this->my['country'];
    case 
'login': return $this->my['login'];
    case 
'nick': return $this->my['nick'];
    case 
'guildname': return $this->my['guild']['name'];
    case 
'guildrank': return $this->my['guild']['rank'];
    case 
'guildusers': return $this->my['guild']['of'];
    case 
'ip': return $this->my['ip'];
    case 
'nyx': return $this->my['nyx'];
    case 
'securelevel': return $this->my['securelevel'];
    case 
'emailtype': return $this->my['emailtype'];
    case 
'totallevel': return $this->my['t_level'];
    case 
'countrylevel': return $this->my['n_level'];
    case 
'totalranking': return $this->my['t_rank'];
    case 
'countryranking': return $this->my['n_rank'];
    case 
'totalrankup': return $this->my['t_num'];
    case 
'countryrankup': return $this->my['n_num'];
    case 
'win': return $this->my['stats']['win'];
    case 
'lose': return $this->my['stats']['win'];
    case 
'winningaverage': return $this->my['stats']['average'];
    case 
'gp': return $this->my['gp'];
    case 
'gold': return $this->my['golds'];
    case 
'cash': return $this->my['cashs'];
    case 
'mapname1': return @$this->my['stats']['map'][0]['name'];
    case 
'mapname2': return @$this->my['stats']['map'][1]['name'];
    case 
'mapaverage1': return @$this->my['stats']['map'][0]['average'];
    case 
'mapaverage2': return @$this->my['stats']['map'][1]['average'];
    case 
'mobilename1': return @$this->my['stats']['mobile'][0]['name'];
    case 
'mobilename2': return @$this->my['stats']['mobile'][1]['name'];
    case 
'mobileaverage1': return @$this->my['stats']['mobile'][0]['average'];
    case 
'mobileaverage2': return @$this->my['stats']['mobile'][1]['average'];
    case 
'damages': return $this->my['stats']['damages'];
    case 
'nextwinningpercent':
     if (
$this->my['stats']['win']+$this->my['stats']['lose'] == 0) return 0;
     return (
ceil(($this->my['stats']['win']+$this->my['stats']['lose'])*(round($this->my['stats']['average'])+0.51)/100)-floor($this->my['stats']['win']));
    default:
     return 
false;
   }
  }
 }
?>