$Priz=array(1=>array(1=>10,20,30,40,50,60,70,80),
2=>array(1=>8,15,20,30,35,45,50,60),
3=>array(1=>5,10,15,20,25,30,35,40));
class TTournament {
public
$MaxUserLevel=9;
/* function __construct($id){
}
function __destruct(){
}*/
function AddUserInTournament($id){
global $user;
$chek=mysql_fetch_row(mysql_query("select id from turnament where id=".$id." and old=0"));
if ($chek[0]=='') die("Жаль, очень жаль....");
if (mysql_query("insert into turnamuser (idturnam,iduser,level) values(".$id.",".$user['id'].",".$user['level'].")")){
mysql_query("update turnament set kolvo=kolvo+1 where id=".$id);
echo "Регистрация пройдена!";
}
else die("Вы уже зарегистрированы.");
}
function DellUserInTournament($id){
global $user;
mysql_query("delete from turnamuser where idturnam=".$id." and iduser=".$user['id']);
mysql_query("update turnament set kolvo=kolvo-1 where id=".$id);
echo "Заявка отозвана
";
}
function fract($num = 0) {
if(!is_double($num)) return false;
$out = explode('.', $num);
return $out[1];
}
function PrepearTournir(){//запускается за час до начала турнира
for ($i=1;$i<$this->MaxUserLevel;$i++){
$uch=mysql_query("select id,iduser from turnamuser where loose=0 and idturnam=(select id from turnament where old=0 and level=".$i.") order by id desc");
$kol=mysql_num_rows($uch);
$cop=$kol;
if ($kol>7){
While (true){
$stepen=log($cop)/log(2);
if ($this->fract($stepen)==false){ //==false - дробная часть отсутствует
for($j=1;$j<=($kol-$cop);$j++){
$res=mysql_fetch_row($uch);
mysql_query("delete from turnamuser where id=".$res[0]);
addchp ('Внимание! На этой неделе Вам не нашлелся противник в турнире.
','{[]}'.Nick::id($res[1])->short().'{[]}');
}
mysql_query("update turnament set kolvo=kolvo-".($kol-$cop)." where old=0 and level=".$i);
break;
}
$cop--;
}
$CountUser=array();
while ($res=mysql_fetch_row($uch)){
$CountUser[]=$res[1];
}
@shuffle($CountUser);
for ($ii=0;$iiВнимание! Подготовтесь к турниру.
','{[]}'.Nick::id($user1)->short().'{[]}');
addchp ('Внимание! Подготовтесь к турниру.
','{[]}'.Nick::id($user2)->short().'{[]}');
}
}
else{
//Если команда не набралась удалить из таблицы и поставить турниру статус 2
while ($res=mysql_fetch_row($uch)){
mysql_query("delete from turnamuser where id=".$res['0']);
addchp ('Внимание!На этой неделе команда для турнира не набралась.
','{[]}'.Nick::id($res[1])->short().'{[]}');
}
mysql_query("delete from turnament where old=0 and level=".$i);
}
}
}
// созает поединок между 2 юзерами
function MakeBattle ($user1,$user2) {
$res=mysql_fetch_array(mysql_query("select * from turnirbattle where userid=".$user1." or userid1=".$user1." limit 1"));
if ($res['userid1']==$user1 && $res['badmaxweap1']!=0 ){
if ((time()-$res['badmaxweap1'])>120){
mysql_query("update turnamuser set loose=2, place=".time()." where iduser=".$user1." and idturnam=".$res['idtur']);
mysql_query("delete from turnirbattle where userid1=".$user1);
addchp ('Внимание!Вы выбыли из турнира
','{[]}'.Nick::id($user1)->short().'{[]}');
addchp ('Внимание!Ваш противник отказался от боя. Техническая победа.
','{[]}'.Nick::id($user2)->short().'{[]}');
}
}elseif ($res['userid']==$user2 && $res['badmaxweap']!=0){
if ((time()-$res['badmaxweap'])>120){
mysql_query("update turnamuser set loose=2, place=".time()." where iduser=".$user2." and idturnam=".$res['idtur']);
mysql_query("delete from turnirbattle where userid=".$user2);
addchp ('Внимание!Вы выбыли из турнира
','{[]}'.Nick::id($user2)->short().'{[]}');
addchp ('Внимание!Ваш противник отказался от боя. Техническая победа.
','{[]}'.Nick::id($user1)->short().'{[]}');
}
}
elseif ($res['userid']==$user1 && $res['badmaxweap']!=0){
if ((time()-$res['badmaxweap'])>120){
mysql_query("update turnamuser set loose=2, place=".time()." where iduser=".$user1." and idturnam=".$res['idtur']);
mysql_query("delete from turnirbattle where userid=".$user1);
addchp ('Внимание!Вы выбыли из турнира
','{[]}'.Nick::id($user1)->short().'{[]}');
addchp ('Внимание!Ваш противник отказался от боя. Техническая победа.
','{[]}'.Nick::id($user2)->short().'{[]}');
}
}
elseif ($res['userid1']==$user2 && $res['badmaxweap1']!=0 ){
if ((time()-$res['badmaxweap1'])>120){
mysql_query("update turnamuser set loose=2, place=".time()." where iduser=".$user2." and idturnam=".$res['idtur']);
mysql_query("delete from turnirbattle where userid1=".$user2);
addchp ('Внимание!Вы выбыли из турнира
','{[]}'.Nick::id($user2)->short().'{[]}');
addchp ('Внимание!Ваш противник отказался от боя. Техническая победа.
','{[]}'.Nick::id($user1)->short().'{[]}');
}
}
else{
//Если на человеке лишняя одежда написать чтобы снял поставить время ожидания 2 минуты
$Shmotuser=mysql_fetch_array(mysql_query("select * from users where id=".$user1));
$Shmotuser1=mysql_fetch_array(mysql_query("select * from users where id=".$user2));
$PriceWeap=mysql_fetch_row(mysql_query("select cost from inventory where id=".$Shmotuser['weap']." limit 1"));
$PriceWeap1=mysql_fetch_row(mysql_query("select cost from inventory where id=".$Shmotuser1['weap']." limit 1"));
if ($PriceWeap[0]=='') $PriceWeap[0]=0;
if ($PriceWeap1[0]=='') $PriceWeap1[0]=0;
if ($PriceWeap[0]>16 || $Shmotuser['sergi']!=0 || $Shmotuser['kulon']!=0 || $Shmotuser['perchi']!=0 || $Shmotuser['bron']!=0 || $Shmotuser['r1']!=0 || $Shmotuser['r2']!=0 || $Shmotuser['r3']!=0 || $Shmotuser['helm']!=0 || $Shmotuser['shit']!=0 || $Shmotuser['boots']!=0 || $Shmotuser['stats']!=0 || $Shmotuser['m1']!=0 || $Shmotuser['m2']!=0 || $Shmotuser['m3']!=0 || $Shmotuser['m4']!=0 || $Shmotuser['m5']!=0 || $Shmotuser['m6']!=0 || $Shmotuser['m7']!=0 || $Shmotuser['m8']!=0 || $Shmotuser['m9']!=0 || $Shmotuser['m10']!=0){
if ($res['userid']==$user1)
mysql_query("update turnirbattle set badmaxweap=".time()." , checkuser=0 where userid=".$user1);
if ($res['userid1']==$user1)
mysql_query("update turnirbattle set badmaxweap1=".time()." , checkuser2=0 where userid1=".$user1);
addchp ('Внимание!Оставьте оружие только до 16экр или оставьте только оружие.
','{[]}'.Nick::id($user1)->short().'{[]}');
}
elseif ($PriceWeap1[0]>16 || $Shmotuser1['sergi']!=0 || $Shmotuser1['kulon']!=0 || $Shmotuser1['perchi']!=0 || $Shmotuser1['bron']!=0 || $Shmotuser1['r1']!=0 || $Shmotuser1['r2']!=0 || $Shmotuser1['r3']!=0 || $Shmotuser1['helm']!=0 || $Shmotuser1['shit']!=0 || $Shmotuser1['boots']!=0 || $Shmotuser1['stats']!=0 || $Shmotuser1['m1']!=0 || $Shmotuser1['m2']!=0 || $Shmotuser1['m3']!=0 || $Shmotuser1['m4']!=0 || $Shmotuser1['m5']!=0 || $Shmotuser1['m6']!=0 || $Shmotuser1['m7']!=0 || $Shmotuser1['m8']!=0 || $Shmotuser1['m9']!=0 || $Shmotuser1['m10']!=0){
if ($res['userid']==$user2)
mysql_query("update turnirbattle set badmaxweap=".time()." , checkuser=0 where userid=".$user2);
if ($res['userid1']==$user2)
mysql_query("update turnirbattle set badmaxweap1=".time()." , checkuser2=0 where userid1=".$user2);
addchp ('Внимание!Оставьте оружие только до 16экр или оставьте только оружие.
','{[]}'.Nick::id($user2)->short().'{[]}');
}
else{
// генерим массив с командами
$teams = array();
$teams[$user1][$user2] = array(0,0,time());
$teams[$user2][$user1] = array(0,0,time());
//Востанавливаем HP
mysql_query("update users set hp=maxhp where id=".$user1." or id=".$user2);
// создаем битву
mysql_query("INSERT INTO `battle`(
`id`,`coment`,`teams`,`timeout`,`type`,`status`,`t1`,`t2`,`to1`,`to2`,`blood`)
VALUES(
NULL,'','".serialize($teams)."','3','1','0','".$user1."','".$user2."','".time()."','".time()."','0')");
// айди боя
$id = mysql_insert_id();
// кидаем в бой
mysql_query("UPDATE `users` SET `battle` = {$id} WHERE `id` = ".$user1." OR `id` = ".$user2);
// создаем лог
$rr = "".Nick::id($user['id'])->full(1)." и ".Nick::id($jert['id'])->full(1)."";
addch ("Бой между ".Nick::id($user['id'])->short()." и ".Nick::id($jert['id'])->short()." начался. ",$user['room']);
addlog($id,"Часы показывали ".date("Y.m.d H.i").", когда ".$rr." решили выяснить кто из них сильнее. (турнир)
");
return $id;
}
}
}
// функция проверки статуса боя
function CheckBattle($id) {
// если по айдишнику возвращается
// 1 - победил USER1
// 2 - победил USER2
// 3 - бои идет
$res = mysql_fetch_array(mysql_query("SELECT `win` FROM `battle` WHERE `id` = ".(int)$id." LIMIT 1;"));
return $res['win'];
}
function UpdateTournir(){
for($i=1;$i<$this->MaxUserLevel;$i++){
$sql=mysql_query("select * from turnirbattle where level=".$i);
if (mysql_numrows($sql)==0){
$this->NextTournir($i);
//$this->StartTournir($i);
}
else {
echo "Для ".$i." уровня игроков следующий этап турнира начнется после завершения следующих боёв:
";
}
while($res=mysql_fetch_array($sql)){
$win=$this->CheckBattle($res['battleid']);
if ($win==1){
mysql_query("update turnamuser set place=".time().", loose=loose+1 where iduser=".$res['userid1']);
mysql_query("update turnamuser set place=0 where iduser=".$res['userid']);
mysql_query("delete from turnirbattle where id=".$res['id']);
}
if($win==2){
mysql_query("update turnamuser set place=".time().", loose=loose+1 where iduser=".$res['userid']);
mysql_query("update turnamuser set place=0 where iduser=".$res['userid1']);
mysql_query("delete from turnirbattle where id=".$res['id']);
}
if($win==3){
echo Nick::id($res['userid'])->full(1)." против ".Nick::id($res['useridl'])->full(1);
}
}
}
}
function NextTournir($level){
$CheckFinal=array();
for ($i=0;$i<=1;$i++){
$sql=mysql_query("select iduser from turnamuser where level=".$level." and loose=".$i." and idturnam=(select id from turnament where old=0 and level=".$level.")");
$ArrayUsers=array();
while ($res=mysql_fetch_row($sql)){
$ArrayUsers[]=$res[0];
}
@shuffle($CountUser);
if (count($ArrayUsers)==1) $CheckFinal[]=$ArrayUsers[0];
if (count($ArrayUsers)==1 && $i==0) addchp ('Внимание! Вы вышли в финал. Дождитесь второго финалиста.
','{[]}'.Nick::id($ArrayUsers[0])->short().'{[]}');
if ($this->fract(count($ArrayUsers)/2)!=false)
$countUs=count($ArrayUsers)-1;
else
$countUs=count($ArrayUsers);
for ($ii=0;$ii<$countUs;$ii++){
$user1=$ArrayUsers[$ii];
$user2=$ArrayUsers[++$ii];
//Востанавливаем HP
mysql_query("update users set hp=maxhp where id=".$user1." or id=".$user2);
mysql_query("insert into turnirbattle(userid,userid1,level,idtur) values(".$user1.",".$user2.",".$level.",(select id from turnament where old=0 and level=".$level."))");
addchp ('Внимание! Подготовтесь к следующему туру.
','{[]}'.Nick::id($user1)->short().'{[]}');
addchp ('Внимание! Подготовтесь к следующему туру.
','{[]}'.Nick::id($user2)->short().'{[]}');
}
}
if (count($CheckFinal)==2) $this->TournirFinal($level,$CheckFinal);
if (count($CheckFinal)==1) {
$this->CreateHTML($level);
//поставить турниру статус 2. создать HTML для подгрузки результатов
//Если команда не набралась - удалить турнир. - эо при старте в 4 часа.
//$this->ShowTournirFinaliats($level);
}
}
function CreateHTML($level){
global $Priz;
$dir="logtur/".$level;
if (!file_exists($dir)) mkdir($dir);
$tur=mysql_fetch_array(mysql_query("select * from turnament where old=0 and level=".$level." limit 1"));
$f=fopen($dir."/".$tur['datetime'].".html",'w+');
fwrite($f,'');
fwrite($f,'Игрок | Место |
');
mysql_query("update turnamuser set place=".(time()+1000)." where place=0 and idturnam=".$tur['id']." and level=".$level);
$sql=mysql_query("select tur.*, us.login from turnamuser as tur left join users as us on us.id=tur.iduser where tur.idturnam=".$tur['id']." order by tur.place desc");
$i=1;
while ($res=mysql_fetch_array($sql)){
if ($i==1 || $i==2 || $i==3){
mysql_query("INSERT INTO `delo`(`id` , `author` ,`pers`, `text`, `type`, `date`) VALUES ('','0','".$res['iduser']."','Выиграл в турнире ".$Priz[$i][$level]." кр.','1','".time()."');");
addchp ('Внимание! За '.$i.' место в турнире, Вы получили '.$Priz[$i][$level].' кр.
','{[]}'.Nick::id($res['iduser'])->short().'{[]}');
}
fwrite($f, ''.$res['login'].' | '.$i++.' |
');
}
fwrite($f, '