Файл: _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"];
}
}
}
}
?>