Файл: pvp.php
Строк: 149
<?php
//Файл боя
include_once "./#sys/bd.php";
include_once SYS."/aut.php";
//
function addToLog($logfile,$text)
{
if (file_exists($logfile))
{
$fp = fopen($logfile,"a");
flock ($fp,LOCK_EX);
fputs($fp,$text);
flock ($fp,LOCK_UN);
fclose($fp);
$retvar=true;
}else{
$retvar=false;
}
return $retvar;
}
//
//
#include_once GH."#inc/cutinfo.php";
#include_once GH."#inc/mess.php";
// Старт боя если установлена fight и найден пользователь
$err="";
if(isset($_GET['fight']) and $user['fight']<=0)
{
$fight=intval(abs($_GET['fight']));
$interval=$time-300; //Время онлайна
$ank=mysql_fetch_array(mysql_query("SELECT * FROM `guser` WHERE `uid`='$fight' AND `uptime`>'$interval' LIMIT 1"),MYSQL_ASSOC);
if(!$ank){$err.="Пользователь не найден!<br />";}
//Проверка локации
if($ank['locate']!=$guser['locate']){$err="Пользователя нет в Вашей локации!<br />";}
#if($ank['fight']>0){$err.="Пользователь уже в бою!<br />";}
if($err=="" and $ank['fight']<=0) //если нет ошибок то создаем новый бой
{
//
mysql_query("INSERT INTO `gfight` SET
`akom`='$guser[uid]',
`bkom`='$ank[uid]',
`up_a`='$time',
`up_b`='$time',
`start`='$time',
`stop`='',
`locate`='$guser[locate]'
");
if(mysql_affected_rows()>0) //если бой создан
{
$id_new_fight=mysql_insert_id();
// Лог файл и лог сообщение
(string)$log_file=GH."#fight_log/".$id_new_fight.'.log';
$log_mess='';
//
mysql_query("UPDATE `guser` SET `fight`='$id_new_fight', `fight_com`='a' WHERE `uid`='$guser[uid]' LIMIT 1");
mysql_query("UPDATE `guser` SET `fight`='$id_new_fight', `fight_com`='b' WHERE `uid`='$ank[uid]' LIMIT 1");
$log_mess.=date("H:i.s ",$time)."<b>$guser[nick]</b> напал на <b>$ank[nick]</b>!";
file_put_contents($log_file,$log_mess);
}
}
if($err=="" and $ank['fight']>0) //если пользователь уже в бою (вмешательство в бой)
{
$fight=mysql_fetch_array(mysql_query("SELECT * FROM `gfight` WHERE `id`='$ank[fight]' LIMIT 1"),MYSQL_ASSOC);
(string)$log_file=GH."#fight_log/".$fight['id'].'.log';
$log_mess='';
#if($fight)
if($ank['fight_com']=='a'){$m_fight_com='b';}else{$m_fight_com='a';}
mysql_query("UPDATE `guser` SET `fight`='$fight[id]', `fight_com`='$m_fight_com' WHERE `uid`='$guser[uid]' LIMIT 1");
$log_mess.="n".date("H:i.s ",$time)."<b>$guser[nick]</b> вмешался в бой против <b>$ank[nick]</b>!";
addToLog($log_file,$log_mess);
}
$_SESSION['err'].=$err;
header("Location: ".M."/pvp.php?".SU);
exit;
echo $err;
}else{
// Сам бой
#$_SESSION['err'].="Вы находитесь в бою!<br />";
$fight=mysql_fetch_array(mysql_query("SELECT * FROM `fight` WHERE `id`='$user[fight]' AND `stop`='0' LIMIT 1"),MYSQL_ASSOC);
if($fight)
{
// Определяем литеры команд
$mk_lit=('count_'."$guser[fight_com]"); //Литера моей команды
if($guser['fight_com']=='a'){$tmp_lit='b';}else{$tmp_lit='a';}
$pk_lit=('count_'."$tmp_lit"); // Литера команды противника
#echo $mk_lit." - литера моей команды<br />"; // DEBUG
#echo $pk_lit." - Литера команды противника<br />"; // DEBUG
// Создаем лог файл
(string)$log_file=H."/#fight_log/".$fight['id'].'.log';
$log_mess='';
#echo "Номер боя $fight[id]<br />";
$maykom=mysql_query("SELECT * FROM `guser` WHERE `fight`='$fight[id]' AND `live`>'0' AND `fight_com`='$guser[fight_com]'");
#echo mysql_error()."$fight[akom]<br />";
if($guser['fight_com']=='a'){$protkom_l='b';}else{$protkom_l='a';}
$protkom=mysql_query("SELECT * FROM `guser` WHERE `fight`='$fight[id]' AND `live`>'0' AND `fight_com`='$protkom_l'");
#echo mysql_error()."$fight[bkom]<br />";
// Определение времени таймаута (пропуска удара)
#if($guser['fight_com']=='a'){$kp_timeaut=='up_b';}else{$kp_timeaut=='up_a';}
$time_aut=$time-$fight['up_'.$protkom_l];
echo $time_aut." таймаут<br />";
if($time_aut>60 and $fight['up_'.$protkom_l]<$fight['up_'.$guser['fight_com']]) //Здесь 180 тайм аут 3 минуты
{
// Дополнительный удар
$tmp_lit='count_'.$protkom_l; // count_
$tmp_lit2='up_'.$protkom_l;
mysql_query("UPDATE `gfight` SET `$tmp_lit`=(`$tmp_lit`+1), `$tmp_lit2`='$time' WHERE `id`='$fight[id]' LIMIT 1");
if(mysql_affected_rows()>0)
{
$log_mess="n".date("H:i.s ",$time)."Команда <b>".strtoupper($protkom_l)."</b> пропускает ход по таймауту!";
addToLog($log_file,$log_mess);
unset($tmp_lit,$tmp_lit2);
}
}
// Обработка атаки
if(isset($_POST['attack']) and $fight[$mk_lit]<=$fight[$pk_lit] and $guser['live']>0)
{
$protivnik_uid=intval(abs($_POST['protivnik']));
$orujie_id=intval($_POST['orujie']);
// Чтение типов оружия
$t_oruz=file(GH."#dat/oruz_attack.dat");
$types_or=array();
foreach($t_oruz as $key=>$val)
{
$t_oruz=explode(':',$val);
$types_or[$t_oruz['0']]=trim($t_oruz['1'].":".$t_oruz['2'].":".$t_oruz['3'].":".$t_oruz['4']);
#echo $t_oruz['0']." - ".$t_oruz['1']." - ".$t_oruz['2']." - ".$t_oruz['3']."<br />"; // DEBUG
}
unset($t_oruz);
//
$err="";
#echo $protivnik_uid." - uid противника<br />"; // DEBUG
#echo $orujie_id." - id позиции рюкзака<br />"; // DEBUG
// Читаем данные противника
$protivnik=mysql_fetch_array(mysql_query("SELECT * FROM `guser` WHERE `uid`='$protivnik_uid' AND `fight`='$guser[fight]' LIMIT 1"),MYSQL_ASSOC);
if(!$protivnik){$err.="Противник не найден!<br />";}
// Читаем данные оружия
if($orujie_id>0)
{
$orujie=mysql_fetch_array(mysql_query("SELECT * FROM `grukzak` WHERE `uid`='$guser[uid]' AND `id`='$orujie_id' AND `kol`>'0' LIMIT 1"),MYSQL_ASSOC);
}else{
//
if($orujie_id==-1)
{
$orujie['type']="ruka";
}else{
$orujie['type']="noga";
}
}
$or_tmp=explode(':',$types_or[$orujie['type']]);
$or_min=$or_tmp['1'];
$or_max=$or_tmp['2'];
$or_patron=intval($or_tmp['3']);
$or_name=$or_tmp['0'];
(int)$udar_int=mt_rand($or_min,$or_max)+$guser['glevel'];
#echo $types_or[$orujie['type']]." - тип оружия<br />"; // DEBUG
#echo $udar_int." - сила удара<br />"; // DEBUG
if($err=='') //Записываем удар
{ /*
(string)$log_file=GH."#fight_log/".$fight['id'].'.log';
echo $log_file." - лог файл<br />";
*/
mysql_query("UPDATE `guser` SET `live`=(`live`-$udar_int) WHERE `uid`='$protivnik[uid]' AND `live`>'0' LIMIT 1");
if(mysql_affected_rows()>0){$log_mess.="n".date("H:i.s ",$time)."<b>$guser[nick]</b> атаковал <b>$protivnik[nick]</b> используя $or_name ослабив его на $udar_int хр";}else{$log_mess.="n".date("H:i.s ",$time)."<b>$guser[nick]</b> атаковал <b>$protivnik[nick]</b> используя $or_name, но промахнулся!";}
if($udar_int>=$protivnik['live']){$log_mess.="n".date("H:i.s ",$time)."<b>$protivnik[nick]</b> повержен!";}
// Убавить патроны если есть
if($or_patron>0)
{
mysql_query("UPDATE `grukzak` SET `kol`=(`kol`-1) WHERE `uid`='$guser[uid]' AND `id`='$orujie[id]' LIMIT 1");
#$_SESSION['err'].=mysql_error().$orujie['id']."<br />";
}
// Обновляем данные боя
$up_com=('up_'."$guser[fight_com]");
$count_com=('count_'."$guser[fight_com]");
mysql_query("UPDATE `gfight` SET `$up_com`='$time', `$count_com`=(`$count_com`+1) WHERE `id`='$fight[id]' LIMIT 1");
addToLog($log_file,$log_mess);
}
#$_SESSION['err'].=$err;
mset_err($err);
header("Location: ".M."/pvp.php?".SU);
exit;
}
//
//
if(mysql_num_rows($maykom))
{
echo "Ваша команда (".strtoupper($guser['fight_com']).")<br />";
while($data_kom=mysql_fetch_array($maykom, MYSQL_ASSOC))
{
echo $data_kom['nick']."(".ceil($data_kom['live']).") хр<br />";
}
}
//
if(mysql_num_rows($protkom))
{
echo "Команда противника (".strtoupper($protkom_l).")<br />";
while($data_kom=mysql_fetch_array($protkom, MYSQL_ASSOC))
{
echo $data_kom['nick']."(".ceil($data_kom['live']).") хр<br />";
}
}else{ //Команда противника повержена
// Перечислить команду победителей
#mysql_data_seek($protkom,0);
#mysql_data_seek($maykom,0);
$com_all=mysql_query("SELECT * FROM `guser` WHERE `fight`='$fight[id]'"); //выбор всех участников боя
if(mysql_num_rows($com_all))
{
$maykom_sp='';
$protkom_sp='';
$log_mess='';
while($data_kom=mysql_fetch_array($com_all, MYSQL_ASSOC))
{
if($data_kom['fight_com']==$guser['fight_com']){$maykom_sp.=$data_kom['nick'].', ';}else{$protkom_sp.=$data_kom['nick'].', ';}
}
}
// Перечислить команду проиг8равших
$log_mess.="n".date("H:i.s ",$time).'Бой закончен! Победа за '.$maykom_sp." не повезло ".$protkom_sp." удачи в следующий раз!";
addToLog($log_file,$log_mess);
// Остановка боя
mysql_query("UPDATE `gfight` SET `stop`='$time' WHERE `id`='$fight[id]' LIMIT 1");
#echo mysql_error()."<br />";
// Снять все идентификаторы и литеры боя со всех участников
mysql_query("UPDATE `guser` SET `fight`='0', `fight_com`='', `locate`='$fight[locate]' WHERE `fight`='$fight[id]'");
#echo mysql_error()."<br />";
}
//Обновление страницы (вручную)
$x_rand=mt_rand(1000,9999);
echo "<a href='?$x_rand'>обновить</a>";
// Ограничение если пользователь уже убит
if($guser['live']<=0)
{
$guser['live']=0;
echo "<div class='err'>Вы повержены!<br />Дождитесь окончания боя!</div>";
// Вывод лог файла
$read_log=file($log_file);
#echo $log_file." - лог файл<br />";
$read_log=array_reverse($read_log,false);
for($i=0;$i<=10;$i++)
{
if(isset($read_log[$i]))echo $read_log[$i]."<br />";
}
include_once GH."#inc/mainmenu.php";
include_once H.'sys/inc/tfoot.php';
exit;
}
//
if($fight[$mk_lit]<=$fight[$pk_lit]) //Если количество ударов нашей команды меньше или ровно количества ударов противника
{
// Интерфейс расстановки ударов
echo"<form action='' method='post'>";
echo"Выбор противника<br />";
echo"<select name='protivnik'><br />";
{
#echo "Команда противника <br />";
mysql_data_seek($protkom,0);
echo mysql_error()."<br />";
while($data_kom=mysql_fetch_array($protkom, MYSQL_ASSOC))
{
echo "<option value='$data_kom[uid]'>$data_kom[nick] (".ceil($data_kom[live])." xp)</option>";
}
}
echo"</select><br />";
// Выбор оружия
$orujie=mysql_query("SELECT * FROM `grukzak` WHERE `uid`='$guser[uid]' AND `subtype` LIKE '%oruz,%' AND `kol`>'0'");
echo"Атаковать используя:<br />";
echo"<select name='orujie'><br />";
if(mysql_num_rows($orujie))
{
while($data_or=mysql_fetch_array($orujie, MYSQL_ASSOC))
{
echo "<option value='$data_or[id]'>$data_or[name] ($data_or[kol])</option>";
}
}
echo "<option value='-1'>Рукой</option>";
echo "<option value='-2'>Ногой</option>";
echo"</select><br />";
//
echo "<input type='submit' name='attack' value='удар' />";
echo"</form>";
//
}else{echo "<div class='err'>Ждем команду противника!</div>";}
// Вывод лог файла
$read_log=file($log_file);
#echo $log_file." - лог файл<br />";
$read_log=array_reverse($read_log,false);
for($i=0;$i<=10;$i++)
{
if(isset($read_log[$i]))echo $read_log[$i]."<br />";
}
//
}else{
#$_SESSION['err'].="Бой закончен!<br />";
mset_err("Бой закончен!");
#$_SESSION['err'].=$err;
mset_err($err);
// Принудительный выход из боя
mysql_query("UPDATE `user` SET `fight`='0', `fight_com`='' WHERE `id`='$user[id]' LIMIT 1");
header("Location: ".M."/index.php?l=locat");
exit;
}
}
//
//
#include_once GH."#inc/mainmenu.php";
#include_once H.'sys/inc/tfoot.php';
?>