Вход Регистрация
Файл: _gladiators2_/gladiators2/gladiators/gladiators/system/class/class_battle.php
Строк: 577
<?
class battle extends DBconn 
{
    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;
    var 
$myself;
    var 
$opponent;
    
    function 
get_info($id) {

        
$this->query("select id,start,finish,timeout,side1,side2,winner,action,kick_time,data,hp,type,battle from battle where id='$id'");
        
$this->num_rows();
        
        if( !
$this->num )
            return 
false;
           else {
               
            
$this->fetch_array();

             
$this->id = $this->row["id"];
             
$this->start = $this->row["start"];
             
$this->finish = $this->row["finish"];
             
$this->timeout = $this->row["timeout"];
             
$this->side1 = $this->row["side1"];
             
$this->side2 = $this->row["side2"];
             
$this->winner = $this->row["winner"];
             
$this->action = $this->row["action"];
             
$this->kick_time = $this->row["kick_time"];
             
$this->data = $this->row["data"];
            
$this->hp = $this->row["hp"];
            
$this->type = $this->row["type"];
             
$this->battle_w = $this->row["battle"];
             

             return 
true;
        }
    }


    function 
write() {
      
          
$this->query("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."'");
      }

      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;

           
//-- Установленный урон первого персонажа

           
$real_uron_myself = mt_rand($myself->uronmin,$myself->uronmax) + round(mt_rand($myself->u*0.9,$myself->u*1.1));

           
//-- Установленный урон второго персонажа

           
$real_uron_opponent = mt_rand($kick_opponent->uronmin,$kick_opponent->uronmax) + round(mt_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;

                   if((
mt_rand(1,$maxmfuvert) <= $real_uvert_opponent)) // Удар - уворот
                   
{
                       
$uronlite = 0; $uronkrit = 0; $comm = 1;
                       
$comm_fr = file("battle/comment/evade.dat");
                       
$rand_frases = mt_rand(0,(count($comm_fr)-1));
                       
$comment[] = "('".$this->id."','".$rand_frases."','".time()."','evade','".$kick_opponent->id."','".$myself->id."','0','0','".$f."','0','0')";
                   }
                   elseif(
mt_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."'");

                       
$comm_fr = @file("battle/comment/attack.dat");
                       
$rand_frases = mt_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."'");

                       
$comm_fr = file("battle/comment/attack.dat");
                       
$rand_frases = mt_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 = mt_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 = mt_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( 
mt_rand(1,$maxmfkrit) <= $real_krit_opponent ) // Удар - крит
                       
$uronkrit = round($real_uron_opponent*1.5);
                   else
                       
$uronlite = $real_uron_opponent;

                   if((
mt_rand(1,$maxmfuvert) <= $real_uvert_myself)) // Удар - уворот
                   
{
                       
$uronlite = 0; $uronkrit = 0; $comm = 1;
                       
$comm_fr = @file("battle/comment/evade.dat");
                       
$rand_frases = mt_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(
mt_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."'");

                       
$comm_fr = @file("battle/comment/attack.dat");
                       
$rand_frases = mt_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."'");

                       
$comm_fr = @file("battle/comment/attack.dat");
                       
$rand_frases = mt_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 = mt_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 = mt_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 = mt_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 = mt_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];
           }

           
$this->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"];  
   }

  }
 }
}
?>
Онлайн: 1
Реклама