Файл: _gladiators2_/gladiators2/gladiators/gladiators/battle/class_battle.php
Строк: 585
<?php
class battle
{
var $id;
var $start;
var $finish;
var $timeout;
var $side1;
var $side2;
var $winner;
var $action;
var $kick_time;
var $data;
var $hp;
var $type;
var $battle_w;
  function get_info($id)
  {
    $result = @mysql_query("select id,start,finish,timeout,side1,side2,winner,action,kick_time,data,hp,type,battle from battle where id='$id'");
    if(@mysql_num_rows($result)==0) return false;
    else
    {
     $mass = @mysql_fetch_array($result);
     $this->id = $mass["id"];
     $this->start = $mass["start"];
     $this->finish = $mass["finish"];
     $this->timeout = $mass["timeout"];
     $this->side1 = $mass["side1"];
     $this->side2 = $mass["side2"];
     $this->winner = $mass["winner"];
     $this->action = $mass["action"];
     $this->kick_time = $mass["kick_time"];
     $this->data = $mass["data"];
     $this->hp = $mass["hp"];
     $this->type = $mass["type"];
     $this->battle_w = $mass["battle"];
     return true;
    }
  }
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
  function write()
  {
    $sql="update battle set id='$this->id',finish='$this->finish', side1='$this->side1', side2='$this->side2', winner='$this->winner', action='$this->action', kick_time='$this->kick_time', hp='$this->hp' where id='$this->id'";
    $result=@mysql_query($sql);
  }
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
  function put_note($note)
  {
    $log_date = explode(" ",$this->start); 
    $fp = @fopen("battle/log/".$log_date[0].".dat","a+");
    @flock($fp,2);
    @fwrite($fp,$this->id."|".Date("H:i")."|".$note."|n");
    @flock($fp,3);
    @fclose($fp);
  }
  function kick($f,$b,$opponent_id,$my_id,$opp_side,$myself,$kick_opponent)
  {
   // $opponent_id - id номер соперника, которому я наношу удар.
   // $my_id - мой id.
    $dead1 = 0; // First player not dead
    $dead2 = 0; // Second player no dead
    if($opp_side=="side2")
    {
     $ch_opp_side = 2;
     $ch_my_side = 1;
    }
    else
    {
     $ch_opp_side = 1;
     $ch_my_side = 2;
    }
    if($opp_side=="side2")
    {
      $comm_myself_color="#A0522D";
      $comm_opponent_color="#708090";
    }
    else
    {
      $comm_myself_color="#708090";
      $comm_opponent_color="#A0522D";
    }
    //------------------------------------------------------
    //-- Вычисляем процентные характеристики двух персонажей
    //-- Гибкость = 1% уворота && 1% антикрита
    //-- Логика = 1% крита && 1% уворота 
    //-- Установленный крит первого персонажа
    $krit_myself = $myself->mfkrit + $myself->l;
    $real_krit_myself = $krit_myself - $kick_opponent->mfakrit - round($kick_opponent->l/2) - round($kick_opponent->g/2);
    if($real_krit_myself < 0)
     $real_krit_myself = 0;
    //-- Установленный крит второго персонажа
    $krit_opponent = $kick_opponent->mfkrit + $kick_opponent->l;
    $real_krit_opponent = $krit_opponent - $myself->mfakrit - round($myself->l/2) - round($myself->g/2);
    if($real_krit_opponent < 0)
     $real_krit_opponent = 0;
    //-- Установленный уворот первого персонажа
    $uvert_myself = $myself->mfuvert + $myself->g;
    $real_uvert_myself = $uvert_myself - $kick_opponent->mfauvert - round($kick_opponent->g/2) - round($kick_opponent->l/2);
    if($real_uvert_myself < 0)
     $real_uvert_myself = 0;
    //-- Установленный уворот второго персонажа
  
    $uvert_opponent = $kick_opponent->mfuvert + $kick_opponent->g;
    $real_uvert_opponent = $uvert_opponent - $myself->mfauvert - round($myself->g/2) - round($myself->l/2);
    if($real_uvert_opponent < 0)
     $real_uvert_opponent = 0;
 
    //-- Установленный урон первого персонажа
    srand ((double) microtime() * 1000000);
    $real_uron_myself = rand($myself->uronmin,$myself->uronmax) + round(rand($myself->u*0.9,$myself->u*1.1));
    //-- Установленный урон второго персонажа
    srand ((double) microtime() * 1000000);
    $real_uron_opponent = rand($kick_opponent->uronmin,$kick_opponent->uronmax) + round(rand($kick_opponent->u*0.9,$kick_opponent->u*1.1));
    //---------------------
    $comment = array();
    $action_mass = explode(";",$this->action);
    for($i=0;$i<=count($action_mass)-2;$i++)
    {
      $a_mass = explode("(",$action_mass[$i]);
      $id_mass = explode(":",$a_mass[0]);
      $b_mass = explode(")",$a_mass[1]);
      $kick_mass = explode(":",$b_mass[0]);
      if($id_mass[1]==$my_id && $id_mass[0]==$opponent_id && !$kick_mass[1])
      {
        $opponent_kick=explode(",",$kick_mass[0]);
        $opponent_f=$opponent_kick[0];  // Удар противника
        $opponent_b=$opponent_kick[1]; // Блок противника
      }
    }
    $block_zones = array('1,5,','1,2,','2,3,','3,4,','4,5,');
    $plc_kick = array("голову","грудь","живот","пояс","ноги");
    if($opponent_f && $opponent_b)
    {
      $need_zones_block_opponent = $block_zones[$f-1];
      $need_zones_block_opponent = explode(",",$need_zones_block_opponent);
      if($opponent_b != $need_zones_block_opponent[0] && $opponent_b != $need_zones_block_opponent[1])
      {
        if($myself->mfaarmor > 100)
         $maxmfaarmor = $myself->mfaarmor;
        else 
         $maxmfaarmor = 100;
        if($krit_myself > $krit_opponent)
         $maxmfkrit = $krit_myself;
        else
         $maxmfkrit = $krit_opponent;
  
        if($uvert_myself > $uvert_opponent)
         $maxmfuvert = $uvert_myself;
        else
         $maxmfuvert = $uvert_opponent;
        if(rand(1,$maxmfkrit) <= $real_krit_myself) // Удар - крит
         $uronkrit = round($real_uron_myself*1.5);
        else
         $uronlite = $real_uron_myself;
        srand ((double) microtime() * 1000000);
        if((rand(1,$maxmfuvert) <= $real_uvert_opponent)) // Удар - уворот
        {
          $uronlite = 0; $uronkrit = 0; $comm = 1;
          $comm_fr = file("battle/comment/evade.dat");
          $rand_frases = rand(0,(count($comm_fr)-1));
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','evade','".$kick_opponent->id."','".$myself->id."','0','0','".$f."','0','0')";
        }
        elseif(rand(1,$maxmfaarmor) > $myself->mfaarmor) // Не Удар сквозь броню
        {
          switch($f)
          {
            case"1":
              $uronkrit -= $kick_opponent->armhead;
              $uronlite -= $kick_opponent->armhead;
            break;
            case"2":
              $uronkrit -= $kick_opponent->armcorpus;
              $uronlite -= $kick_opponent->armcorpus;
            break;
            case"3":
              $uronkrit -= $kick_opponent->armcorpus;
              $uronlite -= $kick_opponent->armcorpus;
            break;
            case"4":
              $uronkrit -= $kick_opponent->armbelt;
              $uronlite -= $kick_opponent->armbelt;
            break;
            case"5":
              $uronkrit -= $kick_opponent->armhand;
              $uronlite -= $kick_opponent->armhand;
            break;
          }
        }
        if($myself->mfpowkrit && $uronkrit)
        {
         $plusuron = ($myself->mfpowkrit*$uronkrit)/100;
         $uronkrit = round($uronkrit+$plusuron);
        }
        if($myself->mfuron && $uronlite)
        {
          $plusuron = ($myself->mfuron*$uronlite)/100;
          $uronlite = round($uronlite+$plusuron);
        }
        if($kick_opponent->defuron && $uronlite)
         $uronlite -= $kick_opponent->defuron;
        if($uronlite > 0)
        {
          $futur_hp = $kick_opponent->hp - $uronlite;
          if($futur_hp <= 0)
          {
            $futur_hp = 0;
            $dead1 = 1;
          }
          if(strstr($kick_opponent->login,"(клон)"))
           $from = "temp";
          else
           $from = "users";
          @mysql_query("update ".$from." set hp='".$futur_hp."' where id='".$kick_opponent->id."'");
         
          srand ((double) microtime() * 1000000);
          $comm_fr = file("battle/comment/attack.dat");
          $rand_frases = rand(0,(count($comm_fr)-1));
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','attack','".$kick_opponent->id."','".$myself->id."','0','".$uronlite."','".$f."','".$futur_hp."','".$kick_opponent->maxhp."')";
          $comm = 1;
          $my_hp += $uronlite;
        }
        if($uronkrit > 0)
        {
         $futur_hp = $kick_opponent->hp - $uronkrit;
         if($futur_hp <= 0)
         {
          $futur_hp = 0;
          $dead1 = 1;
         }
         if(strstr($kick_opponent->login,"(клон)"))
          $from = "temp";
         else
          $from = "users";
         @mysql_query("update ".$from." set hp='".$futur_hp."' where id='".$kick_opponent->id."'"); 
          srand ((double) microtime() * 1000000);
      $comm_fr = file("battle/comment/attack.dat");
          $rand_frases = rand(0,(count($comm_fr)-1));
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','attack','".$kick_opponent->id."','".$myself->id."','1','".$uronkrit."','".$f."','".$futur_hp."','".$kick_opponent->maxhp."')";
          $my_hp += $uronkrit;
        }        
        if($uronlite <= 0 && $uronkrit <= 0 && $comm!=1)
        {
          $comm = 1;
          $comm_fr = @file("battle/comment/evade.dat");
          $rand_frases = rand(0,(count($comm_fr)-1));
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','evade','".$kick_opponent->id."','".$myself->id."','0','0','".$f."','0','0')";
        }
      }
      else
      {
        $comm = 1;
        $comm_fr = @file("battle/comment/block.dat");
        $rand_frases = rand(0,(count($comm_fr)-1));
    $comment[] = "('".$this->id."','".$rand_frases."','".time()."','block','".$kick_opponent->id."','".$myself->id."','0','0','".$f."','0','0')";
      }
      $uronlite = 0;
      $uronkrit = 0;
      $comm = 0;
      $need_zones_block_myself = $block_zones[$opponent_f-1];
      $need_zones_block_myself = explode(",",$need_zones_block_myself);
      if($b != $need_zones_block_myself[0] && $b != $need_zones_block_myself[1])
      {
        if($kick_opponent->mfaarmor > 100)
         $maxmfaarmor = $myself->mfaarmor;
        else 
         $maxmfaarmor = 100;
        if($krit_myself > $krit_opponent)
         $maxmfkrit = $krit_myself;
        else
         $maxmfkrit = $krit_opponent;
  
        if($uvert_myself > $uvert_opponent)
         $maxmfuvert = $uvert_myself;
        else
         $maxmfuvert = $uvert_opponent;
        if(rand(1,$maxmfkrit) <= $real_krit_opponent) // Удар - крит
         $uronkrit = round($real_uron_opponent*1.5);
        else
         $uronlite = $real_uron_opponent;
        if((rand(1,$maxmfuvert) <= $real_uvert_myself)) // Удар - уворот
        {
          $uronlite = 0; $uronkrit = 0; $comm = 1;
          $comm_fr = @file("battle/comment/evade.dat");
          $rand_frases = rand(0,(count($comm_fr)-1));
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','evade','".$myself->id."','".$kick_opponent->id."','0','0','".$opponent_f."','0','0')";
        }
        elseif(rand(1,$maxmfaarmor) > $kick_opponent->mfaarmor) // Не Удар сквозь броню
        {
         switch($opponent_f)
         {
          case"1":
           $uronkrit -= $myself->armhead;
           $uronlite -= $myself->armhead;
          break;
          case"2":
           $uronkrit -= $myself->armcorpus;
           $uronlite -= $myself->armcorpus;
          break;
          case"3":
           $uronkrit -= $myself->armcorpus;
           $uronlite -= $myself->armcorpus;
          break;
          case"4":
           $uronkrit -= $myself->armbelt;
           $uronlite -= $myself->armbelt;
          break;
          case"5":
           $uronkrit -= $myself->armhand;
           $uronlite -= $myself->armhand;
          break;
          }
         }
        if($kick_opponent->mfpowkrit && $uronkrit)
        {
         $plusuron = ($kick_opponent->mfpowkrit*$uronkrit)/100;
         $uronkrit = round($uronkrit+$plusuron);
        }
        if($kick_opponent->mfuron && $uronlite)
        {
          $plusuron = ($kick_opponent->mfuron*$uronlite)/100;
          $uronlite = round($uronlite+$plusuron);
        }
        if($myself->defuron && $uronlite)
         $uronlite -= $myself->defuron;
        if($uronlite > 0)
        {
          $futur_hp = $myself->hp - $uronlite;
          if($futur_hp <= 0)
          {
            $futur_hp = 0;
            $dead2 = 1;
          }
          if(strstr($myself->login,"(клон)"))
           $from = "temp";
          else
           $from = "users";
          @mysql_query("update ".$from." set hp='".$futur_hp."' where id='".$myself->id."'");
          srand ((double) microtime() * 1000000);
          $comm_fr = @file("battle/comment/attack.dat");
          $rand_frases = rand(0,(count($comm_fr)-1));
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','attack','".$myself->id."','".$kick_opponent->id."','0','".$uronlite."','".$opponent_f."','".$futur_hp."','".$myself->maxhp."')";
          $opp_hp += $uronlite;
        }
        if($uronkrit > 0)
        {
         $futur_hp = $myself->hp - $uronkrit;
         if($futur_hp <= 0)
         {
          $futur_hp = 0;
          $dead2 = 1;
         }
         if(strstr($myself->login,"клон"))
          $from = "temp";
         else
          $from = "users";
         @mysql_query("update ".$from." set hp='".$futur_hp."' where id='".$myself->id."'"); 
          srand ((double) microtime() * 1000000);
          $comm_fr = @file("battle/comment/attack.dat");
          $rand_frases = rand(0,(count($comm_fr)-1));
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','attack','".$myself->id."','".$kick_opponent->id."','1','".$uronkrit."','".$opponent_f."','".$futur_hp."','".$myself->maxhp."')";
          $opp_hp += $uronkrit;
        }
        
        if($uronlite<=0 && $uronkrit<=0 && $comm!=1)
        {
         $comm_fr = @file("battle/comment/evade.dat");
         $rand_frases = rand(0,(count($comm_fr)-1));
     $comment[] = "('".$this->id."','".$rand_frases."','".time()."','evade','".$myself->id."','".$kick_opponent->id."','0','0','".$opponent_f."','0','0')";
        }
       }
       else
       {
        $comm = 1;
        $comm_fr = @file("battle/comment/block.dat");
        $rand_frases = rand(0,(count($comm_fr)-1));
        $comment[] = "('".$this->id."','".$rand_frases."','".time()."','block','".$myself->id."','".$kick_opponent->id."','0','0','".$opponent_f."','0','0')";
       }
       $comm_fr = @file("battle/comment/dead.dat");
       $rand_frases = rand(0,(count($comm_fr)-1));
       if($dead1)
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','dead','".$kick_opponent->id."','0','0','0','1','0','0')";
       $rand_frases = rand(0,(count($comm_fr)-1));
       if($dead2)
      $comment[] = "('".$this->id."','".$rand_frases."','".time()."','dead','".$myself->id."','0','0','0','1','0','0')";
       $action = @str_replace($opponent_id.":".$my_id."(". $opponent_f.",". $opponent_b.":);","",$this->action);
       $this->action = $action;
       $mass_kick_time = explode(";",$this->kick_time);
       for($i=0;$i<=count($mass_kick_time)-1;$i++)
       {
          $a_mass = explode("=",$mass_kick_time[$i]);
          if($a_mass[0]==$myself->id)
          {
            $new_time = time();
            $mass_kick_time[$i]=$myself->id."=".$new_time;
          }
          if($a_mass[0]==$kick_opponent->id)
          {
            $new_time = time();
            $mass_kick_time[$i]=$kick_opponent->id."=".$new_time;
          }
        }
        $this->kick_time = implode(";",$mass_kick_time);
    }
    else
    {
      if(strstr($this->$opp_side,$opponent_id.";"))
      {
        $action = $this->action.$my_id.":".$opponent_id."(".$f.",".$b.":);";
        $this->action=$action;
        $mass_kick_time = explode(";",$this->kick_time);
        for($i=0;$i<=count($mass_kick_time)-1;$i++)
        {
          $a_mass = explode("=",$mass_kick_time[$i]);
          if($a_mass[0]==$myself->id)
          {
           $new_time = time();
           $mass_kick_time[$i]=$myself->id."=".$new_time;
          }
        }
        $this->kick_time=implode(";",$mass_kick_time);
      }
    }
    
    $values = "";
    for($i=0;$i<=count($comment)-1;$i++) {
    if( $i )
        $values .= ",";
    $values .= $comment[$i]; 
    }
    @mysql_query("insert into battle_logs values ".$values);
    $mass_hp = explode(";",$this->hp);
    for($i=0;$i<=count($mass_hp)-1;$i++)
    {
     $a_mass = explode("=",$mass_hp[$i]);
     if($a_mass[0]==$myself->id)
      $a_mass[1] = $a_mass[1] + $my_hp;
     if($a_mass[0]==$kick_opponent->id)
      $a_mass[1] = $a_mass[1] + $opp_hp;
     $mass_hp[$i] = implode("=",$a_mass);
    }
    $this->hp = implode(";",$mass_hp);
   }
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 function winner()
 {
  $side1 = explode(";",$this->side1);
  $side2 = explode(";",$this->side2);
  for($i=0;$i<=count($side1)-2;$i++)
  {
   if(!$i)
    $query = " id=".$side1[$i]; 
   else
    $query .= " or id=".$side1[$i];
  }
  $res_users = @mysql_query("select hp from users where ".$query);
  $num_users = @mysql_num_rows($res_users);
  $hp_side1_down_kol=0;
  for($i=1;$i<=$num_users;$i++)
  {
   $row_users = @mysql_fetch_array($res_users);
   if($row_users["hp"] <= 0)
    $hp_side1_down_kol++;
  }
  for($i=0;$i<=count($side2)-2;$i++)
  {
   if(!$i)
    $query = " id=".$side2[$i]; 
   else
    $query .= " or id=".$side2[$i];
  }
  if($this->type=="bot")
   $from = "temp";
  else
   $from = "users";
  $res_users = @mysql_query("select hp from ".$from." where ".$query);
  $num_users = @mysql_num_rows($res_users);
  $hp_side2_down_kol = 0;
  for($i=1;$i<=$num_users;$i++)
  {
   $row_users = @mysql_fetch_array($res_users);
   if($row_users["hp"] <= 0)
    $hp_side2_down_kol++;
  }
  if($hp_side1_down_kol==(count($side1)-1) and $hp_side2_down_kol==(count($side2)-1))
  {
   $this->winner = 'noone';
   $this->finish = time();
   $finished = 1;
  }
  elseif($hp_side1_down_kol==(count($side1)-1))
  {
   $this->winner = 'side2';
   $this->finish = time();
   $finished = 1;
  }
  elseif($hp_side2_down_kol==(count($side2)-1))
  {
   $this->winner = 'side1';
   $this->finish = time(); 
   $finished = 1;
  }
  
  if($finished)
  {
   if($this->type=="bot")
    $mass_sides = $this->side1;
   else
    $mass_sides = $this->side1.$this->side2;
   $mass_sides = explode(";",$mass_sides);
   for($i=0;$i<=count($mass_sides)-2;$i++)
   {
    if(!$i)
     $query = " id='".$mass_sides[$i]."'";
    else
     $query .= " or id='".$mass_sides[$i]."'";
   }
   @mysql_query("update users set last_update_uron='".time()."' where ".$query);
 
   $winner = $this->winner;
   $mass_sides = explode(";",$this->$winner);
   for($i=0;$i<=count($mass_sides)-2;$i++)
   {
    if(!$i)
     $query = " id='".$mass_sides[$i]."'";
    else
     $query .= " or id='".$mass_sides[$i]."'";
   }
 
   if($this->type=="bot" && $this->winner=="side2")
    $from = "temp";
   else
    $from = "users";
   $res = @mysql_query("select login from ".$from." where ".$query);
   $num = @mysql_num_rows($res);
    
   for($i=1;$i<=$num;$i++)
   {
    $row = @mysql_fetch_array($res);
    if($i==1)
     $winner_side = $row["login"];
    else
     $winner_side .= ",".$row["login"];  
   }
  }
 }
}
?>