battles/zayavka.php

1079 lines
51 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use Battles\Template;
use Battles\User;
session_start();
require_once "functions.php";
$user = $user ?? new User($_SESSION['uid']);
try {
db::c()->query('LOCK TABLES `bots` WRITE, `battle` WRITE, `logs` WRITE, `users` WRITE, `inventory` WRITE, `zayavka` WRITE, `effects` WRITE, `online` WRITE, `clans` WRITE');
} catch (Exception $e) {
echo $e->getMessage();
}
$do = $_GET['do'] ?? null;
if ($do == "clear" && $user->getAdmin() == 1) {
db::c()->query('UPDATE `zayavka` SET `coment` = "?s" WHERE `id` = ?i', '<em>Вырезано цензурой!</em>', $_GET['zid']);
}
if (!empty($_GET['del']) && $user->getAdmin() == 1) { //удаление заявки на бой.
$zayavka = db::c()->query('SELECT `id` FROM `zayavka` WHERE `id` = ?i', $_GET['zid'])->fetch_assoc();
if (isset($zayavka['id'])) {
db::c()->query('UPDATE `users` SET `zayavka` = 0 WHERE `zayavka` = ?i', $zayavka['id']);
db::c()->query('DELETE FROM `zayavka` WHERE `id` = ?i', $zayavka['id']);
} else {
echo 'Заявка не найдена ...';
}
}
$_SESSION['view'] = false;
if (isset($_REQUEST['view'])) {
$_SESSION['view'] = $_REQUEST['view'];
}
class Zayavka
{
/**
* @var string
*/
private $errorMessage;
private $user;
function __construct($user_id)
{
$this->user = $user_id;
}
function fteam($team)
{
$team = explode(";", $team);
unset($team[count($team) - 1]);
return $team;
}
/**
* @param int $razdel - тип поединка (1-нубы,2-физы,4-группы,5-хаос)
* @param null $level - показывать заявки только N уровня
* @param null $id
*
* @return mixed
* @throws \Krugozor\Database\Mysql\Exception
*/
public function getlist($razdel = 4, $level = null, $id = null)
{
$sql = db::c()->prepare('SELECT * FROM `zayavka` WHERE `level` = ?i', $razdel);
if (!is_null($level)) {
$sql .= db::c()->prepare(' AND (`t1min` <= ?i OR `t1min` = 99) AND (`t1max` >= ?i OR `t1max` = 99)', $level, $level);
if (4 == $razdel) {
$sql .= db::c()->prepare(' AND (`t2min` <= ?i OR `t2min` = 99) AND (`t2max` >= ?i OR `t2max` = 99)', $level, $level);
}
}
if (!is_null($id)) {
$sql .= db::c()->prepare(' AND `id` = ?i', $id);
}
$fict = db::c()->query($sql);
while ($row = $fict->fetch_assoc()) {
if (($row['start'] + 300) < time()) {
if (db::c()->query('DELETE FROM `zayavka` WHERE `id` = ?i', $row['id'])) {
$team1 = $this->fteam($row['team1']);
foreach ($team1 as $k => $v) {
db::c()->query('UPDATE `users` SET `zayavka` = 0 WHERE `id` = ?i', $v);
}
$team2 = $this->fteam($row['team2']);
foreach ($z[$zay]['team2'] as $k => $v) {
db::c()->query('UPDATE `users` SET `zayavka` = 0 WHERE `id` = ?i', $v);
}
}
}
$zay[$row['id']] = ["team1" => $this->fteam($row['team1']), "team2" => $this->fteam($row['team2']), "coment" => $row['coment'], "type" => $row['type'], "timeout" => $row['timeout'], "start" => $row['start'], "t1min" => $row['t1min'], "t1max" => $row['t1max'], "t2min" => $row['t2min'], "t2max" => $row['t2max'], "t1c" => $row['t1c'], "t2c" => $row['t2c'], "podan" => $row['podan'], "id" => $row['id'], "level" => $row['level'], "blood" => $row['blood'], "bots" => $row['bots']];
}
return $zay;
}
public function addteam($team, $r)
{
$id = $_SESSION['uid'];
$zay = $_REQUEST['gocombat'];
$owntravma = db::c()->query('SELECT `id`, `type` FROM `effects` WHERE (`type` = 12 OR `type` = 13) AND `owner` = ?i', $id)->fetch_assoc();
$z = $this->getlist($r, null, $zay);
if ($owntravma['type'] == 12 && ($z[$zay]['type'] != 4 && $z[$zay]['type'] != 5)) {
$this->errorMessage = "У Вас средняя травма, поединки с оружием слишком тяжелы для Вас...";
} elseif ($owntravma['type'] == 13) {
$this->errorMessage = "У Вас тяжелая травма, Вы не сможете драться...";
}
if ($this->user->zayavka) {
$this->errorMessage = "Вы находитесь в заявке";
}
if ($this->user->health < $this->user->maxHealth * 0.33) {
$this->errorMessage = "Вы слишком ослаблены для боя, восстановитесь.";
}
if (!$z || !empty($this->user_status($id))) {
$this->errorMessage = "Эта заявка не может быть принята Вами.";
}
if ($z[$zay]['type'] != 3 || $z[$zay]['type'] != 5) {
if ($team == 1) {
$teamz = 2;
} else {
$teamz = 1;
}
foreach ($z[$zay]['team' . $teamz] as $v) {
$enemy = db::c()->query('SELECT `klan` FROM `users` WHERE `id` = ?i', $v)->fetch_assoc();
if ($this->user->clan == $enemy['klan']) {
$this->errorMessage = "Нельзя драться против сокланов!";
}
}
}
if ($z[$zay]['t' . $team . 'min'] == 99) {
$toper = db::c()->query('SELECT `klan` FROM `users` WHERE `id` = ?i', $z[$zay]['team' . $team][0])->fetch_assoc();
if ($this->user->clan != $toper['klan']) {
$this->errorMessage = "Эта заявка не может быть принята Вами.";
}
} else {
if ($this->user->level > 0 && !($z[$zay]['t' . $team . 'min'] <= $this->user->level && $z[$zay]['t' . $team . 'max'] >= $this->user->level)) {
$this->errorMessage = "Эта заявка не может быть принята Вами. - " . $z[$zay]['t' . $team . 'min'];
}
}
if (count($z[$zay]['team' . $team]) >= $z[$zay]['t' . $team . 'c']) {
$this->errorMessage = "Группа уже набрана.";
}
$z[$zay]['team' . $team][] = '';
if ($this->errorMessage) {
return $this->errorMessage;
} else {
mysql_query("UPDATE `users`, `zayavka` SET `users`.`zayavka` = {$zay}, `zayavka`.`team{$team}` = '" . implode(";", $z[$zay]['team' . $team]) . "" . $id . ";' WHERE `users`.`id` = {$id} AND `users`.`zayavka` = 0 AND `zayavka`.`id` = {$zay}");
return "Вы приняли заявку на бой.";
}
}
public function delteam($id, $zay, $r)
{
$z = $this->getlist($r, null, $zay);
if ($z[$zay]['level'] > 3 || $z[$zay]['level'] == null) {
$this->errorMessage = 'Неизвестная ошибка.';
}
foreach ($z[$zay]['team2'] as $v) {
if ($v != $id) {
$teams[] = $v;
}
}
if ($this->errorMessage) {
return $this->errorMessage;
} else {
mysql_query("UPDATE `users`, `zayavka` SET `users`.`zayavka` = '0', `zayavka`.`team{$team}` = '{$teams}' WHERE `users`.`id` = {$id} AND `zayavka`.`id` = {$zay};");
return "Вы отозвали запрос";
}
}
public function addzayavka($start, $timeout, $t1c, $t2c, $type, $t1min, $t2min, $t1max, $t2max, $coment, $level, $blood = 0)
{
if (!in_array($level, [2, 4, 5])) {
$level = 4;
} /*2-физ, 4-группа, 5-хаос*/
if ($level == 2 && $type != 1 && $type != 4 && $type != 6) {
$type = 1;
}
if ($level == 4 && $type != 2 && $type != 4) {
$type = 2;
}
if ($level == 5 && $type != 3 && $type != 5) {
$type = 3;
}
if (!in_array($start, [1, 3, 5, 10, 15, 30, 60])) {
$start = 1;
}
if (!in_array($timeout, [1, 3, 5, 10])) {
$timeout = 1;
}
if ($this->user_status($this->user->id) != 0) {
exit();
}
if (!$this->user->clan && $t1min == 99) {
$this->errorMessage = "Вы не состоите в клане.";
}
if ($this->user->health < $this->user->maxHealth * 0.33) {
$this->errorMessage = "Вы слишком ослаблены для боя, восстановитесь.";
}
if ($this->errorMessage) {
return $this->errorMessage;
} else {
if ($type == 3) {
AddChatSystem('Внимание! Подана заявка на хаотический поединок ({$t1min} - {$t1max}), который начнется через {$start} минут.');
}
$start = time() + $start * 60;
db::c()->query('INSERT INTO `zayavka`
(`start`, `timeout`, `t1c`, `t2c`, `type`, `level`, `coment`, `team1`, `t1min`, `t2min`, `t1max`, `t2max`,`podan`,`blood`)
VALUES (?i,?i,?i,?i,?i,?i,"?s","?s",?d,?i,?i,?i,?i,"?s",?i)',
$start, $timeout, $t1c, $t2c, $type, $level, $coment, $this->user->id, $t1min, $t2min, $t1max, $t2max, date('H:i'), $blood);
db::c()->query('UPDATE `users` SET `zayavka` = ?i WHERE `id` = ?i', db::c()->getLastInsertId(), $this->user->id);
return 'Заявка подана!';
}
}
public function delzayavka($id, $zay, $r, $f = 1)
{
$z = $this->getlist($r, null, $zay);
if ($f != 1 && $z[$zay]['level'] > 3) {
return 'Неизвестная ошибка.';
} else {
mysql_query("DELETE FROM `zayavka` WHERE `id` = {$zay} AND (`team1` LIKE '{$id};%' OR `team2` LIKE '{$id};%') LIMIT 1");
if (count($z[$zay]['team1']) > 0) {
foreach ($z[$zay]['team1'] as $k => $v) {
db::c()->query('UPDATE `users` SET `zayavka` = 0 WHERE `id` = ?i', $v);
}
}
if (count($z[$zay]['team2']) > 0) {
foreach ($z[$zay]['team2'] as $k => $v) {
db::c()->query('UPDATE `users` SET `zayavka` = 0 WHERE `id` = ?i', $v);
}
}
return 'Вы отозвали заявку.';
}
}
public function showfiz($row)
{
$rr = "<input type=\"radio\" " . ((in_array($this->user->id, $row['team1']) || in_array($this->user->id, $row['team2']) || $row['team2']) ? "disabled " : "") . " name=\"gocombat\" value=\"{$row['id']}\" /><font class=date>{$row['podan']}</font> ";
foreach ($row['team1'] as $k => $v) {
$rr .= Nick::id($v)->full(1);
}
if ($row['team2']) {
$rr .= " <i>против</i> ";
foreach ($row['team2'] as $k => $v) {
$rr .= Nick::id($v)->full(1);
}
}
$rr .= "&nbsp; тип боя: ";
if ($row['type'] == 4) {
$rr .= "<img src=\"i/fighttype4.gif\" width=\"20\" height=\"20\" title=\"Кулачный бой\" /> ";
} elseif ($row['type'] == 6) {
$rr .= "<img src=\"i/fighttype6.gif\" width=\"20\" height=\"20\" title=\"Кровавый бой\" /> ";
} elseif ($row['type'] == 1) {
$rr .= "<img src=\"i/fighttype1.gif\" width=\"20\" height=\"20\" title=\"Физический бой\" /> ";
}
$rr .= " (таймаут {$row['timeout']} мин.) <br />";
return $rr;
}
public function showgroup($row)
{
if ($row['t1min'] == 99) {
$range1 = "<i>клан</i>";
} else {
$range1 = "{$row['t1min']}-{$row['t1max']}";
}
if ($row['t2min'] == 99) {
$range2 = "<i>клан</i>";
} else {
$range2 = "{$row['t2min']}-{$row['t2max']}";
}
$rr = "<input type=\"radio\" " . ((in_array($this->user->id, $row['team1']) || in_array($this->user->id, $row['team2'])) ? "disabled " : "") . " name=\"gocombat\" value=\"{$row['id']}\"><span class=date>{$row['podan']}</span> <b>{$row['t1c']}</b>({$range1}) (";
foreach ($row['team1'] as $k => $v) {
if ($k != 0) {
$rr .= ", ";
}
$rr .= Nick::id($v)->full(1);
}
$rr .= ") <i>против</i> <b>{$row['t2c']}</b>({$range2})(";
foreach ($row['team2'] as $k => $v) {
if ($k != 0) {
$rr .= ", ";
}
$rr .= Nick::id($v)->full(1);
}
if (count($row['team2']) == 0) {
$rr .= "<i>группа не набрана</i>";
}
if ($row['blood'] && $row['type'] == 5) {
$rr .= "<img src=\"i/fighttype6.gif\" width=\"20\" height=\"20\" />";
}
$a = db::c()->query('SELECT `admin` FROM `users` WHERE `id` = ?i', $this->user->id)->fetch_assoc();
$rr .= ")&nbsp; тип боя: ";
if ($row['blood'] && $row['type'] == 4) {
$rr .= "<img src=\"i/fighttype4.gif\" width=\"20\" height=\"20\" title=\"кулачный бой\" /><img src=\"i/fighttype6.gif\" width=\"20\" height=\"20\" title=\"Кровавый поединок\" />";
} elseif ($row['blood'] && $row['type'] == 2) {
$rr .= "<img src=\"i/fighttype6.gif\" width=\"20\" height=\"20\" title=\"Кровавый поединок\" />";
} elseif ($row['type'] == 2) {
$rr .= "<img src=\"i/fighttype2.gif\" width=\"20\" height=\"20\" title=\"групповой бой\" />";
} elseif ($row['type'] == 4) {
$rr .= "<img src=\"i/fighttype4.gif\" width=\"20\" height=\"20\" title=\"кулачный групповой бой\" />";
}
$rr .= "(таймаут {$row['timeout']} мин.) <span style='color: gray;'><i>бой начнется через " . round(($row['start'] - time()) / 60, 1) . " мин. " . (($row['coment']) ? "(" . $row['coment'] . ")" : "") . "</i></span>";
if ($a['admin'] === 1) {
$rr .= "<a href='?zid={$row['id']}&do=clear'><small>Удалить комментарий</small></a><br />";
} else {
$rr .= "<br />";
}
return $rr;
}
public function showhaos($row)
{
global $user;
$rr = "<input type=\"radio\" " . ((in_array($this->user->id, $row['team1']) || in_array($this->user->id, $row['team2'])) ? "disabled " : "") . " name=\"gocombat\" value=\"{$row['id']}\" /><font class=\"date\">{$row['podan']}</font> (";
if ($row['bots'] == '7') {
$rr .= Nick::id(10962)->full(1);
$rr .= ", ";
$rr .= Nick::id(10964)->full(1);
$rr .= ", ";
$rr .= Nick::id(10965)->full(1);
$rr .= ", ";
} elseif ($row['bots'] == '8' || $row['bots'] == '13') {
$rr .= Nick::id(10124)->full(1);
$rr .= ", ";
$rr .= Nick::id(10125)->full(1);
$rr .= ", ";
$rr .= Nick::id(10126)->full(1);
$rr .= ", ";
}
foreach ($row['team1'] as $k => $v) {
if ($k != 0) {
$rr .= ", ";
}
$rr .= Nick::id($v)->full(1);
}
if (count($row['team1']) == 0 && $row['bots'] == 0) {
$rr .= "<i>группа не набрана</i>";
}
$rr .= ") ({$row['t1min']}-{$row['t1max']}) &nbsp; тип боя: ";
if ($row['blood'] && $row['type'] == 5) {
$rr .= "<img src=\"i/fighttype5.gif\" style=\"width: 20px; height: 20px;\" title=\"Кулачный бой\" /><img src=\"i/fighttype6.gif\" style=\"width: 20px; height: 20px;\" title=\"Кровавый поединок\" />";
} elseif ($row['blood'] && $row['type'] == 3) {
$rr .= "<img src=\"i/fighttype6.gif\" style=\"width: 20px; height: 20px;\" title=\"Кровавый поединок\" />";
} elseif ($row['type'] == 3) {
$rr .= "<img src=\"i/fighttype3.gif\" style=\"width: 20px; height: 20px;\" title=\"Групповой бой\" />";
} elseif ($row['type'] == 5) {
$rr .= "<img src=\"i/fighttype5.gif\" style=\"width: 20px; height: 20px;\" title=\"Кулачный групповой бой\" />";
}
$rr .= "(таймаут {$row['timeout']} мин.) <span style='color: gray;'><i >бой начнется через " . round(($row['start'] - time()) / 60, 1) . " мин. " . (($row['coment']) ? "(" . $row['coment'] . ")" : "") . "</i></span>";
if ($this->user->admin == 1) {
$rr .= "<small><a href='?zid={$row['id']}&do=clear'>Удалить комментарий</a> | <a href=\'?level=haos&zid={$row['id']}&del=true\'>Удалить заявку</a></small><br />";
} else {
$rr .= "<br />";
}
return $rr;
}
public function user_status($id)
{
$r = db::c()->query('SELECT `team1`,`team2` FROM `zayavka`, `users` WHERE `users`.`id` = ?i AND `zayavka`.`id` = `users`.`zayavka`', $id)->fetch_assoc();
$t1 = $this->fteam($r['team1']);
$t2 = $this->fteam($r['team2']);
if (in_array($id, $t1)) {
return 1;
} elseif (in_array($id, $t2)) {
return 2;
} else {
return 0;
}
}
public function battlestart($id, $zay, $r)
{
global $user;
$z = $this->getlist($r, null, $zay);
if ($id == 'CHAOS') {
$id = $z[$zay]['team1'][0];
}
$this->delzayavka($id, $zay, $r);
$z = $z[$zay];
$count_users = count($z['team1']);
$bot = 0;
if ($z['bots'] > 0 && $count_users > 0) {
$bots_raw = [7 => [10962, 10964, 10965], 8 => [10124, 10125, 10126], 13 => [10124, 10125, 10126]];
$i = 0;
while ($i <= count($bots_raw[$z['bots']])) {
$bot_id = $bots_raw[$z['bots']][$i];
$bot = createbot($bot_id, '');
$z['team1'][] = $bot['id'];
$i++;
$count_users++;
}
}
if ($z['type'] == 4 || $z['type'] == 5) {
foreach ($z['team1'] as $k => $v) {
undressall($v);
}
foreach ($z['team2'] as $k => $v) {
undressall($v);
}
}
if ($z['level'] == 2) {
$btfl = fopen('' . $z['team1'][0] . '.btl', 'a');
fwrite($btfl, '{[=' . $z['team2'][0] . '=]}');
fclose($btfl);
$btfl = fopen('' . $z['team2'][0] . '.btl', 'a');
fwrite($btfl, '{[=' . $z['team1'][0] . '=]}');
fclose($btfl);
}
if ($z['type'] == 3 || $z['type'] == 5) {
if ($count_users < 4) {
db::c()->query('UPDATE `users` SET `zayavka` = 0 WHERE `zayavka` = ?i', $zay);
foreach ($z['team1'] as $k => $v) {
if ($v < _BOTSEPARATOR_) {
//Написать добавлялку в чат для определённого чеговека. Плясать от AddChatSystem().
#addchp('<font color=red>Внимание!</font> Ваш бой не может начаться по причине <b>Группа не набрана</b>.', '{[]}' . nick::id($v)->short() . '{[]}');
exit('Bitch');
}
}
db::c()->query('UPDATE `variables` SET `value` = ?i WHERE `var` = "?s"', $count_users, 'haos_match');
db::c()->query('DELETE FROM `zayavka` WHERE `id` = ?i', $zay);
header("Location: zayavka.php");
}
$all = count($z['team1']) - 1;
$power1 = 0;
$power2 = 0;
// А ЭТО ещё что за хренотень?! О_о
for ($i = 0; $i <= $all; $i++) {
if ($z['team1'][$i] < _BOTSEPARATOR_) {
$gamer = db::c()->query('SELECT (`level`*50)+`sila`+`lovk`+`inta`+`vinos`+`intel`+`stats`+IFNULL((SELECT SUM(`cost`) FROM `inventory` WHERE `owner` = `users`.`id` AND `dressed` = 1), 0) FROM `users` WHERE `id` = ?i', $z['team1'][$i])->fetch_assoc();
} else {
$bt = db::c()->query('SELECT `prototype` FROM `bots` WHERE `id` = ?i', $z['team1'][$i])->fetch_assoc();
$gamer = db::c()->query('SELECT (`level`*50)+`sila`+`lovk`+`inta`+`vinos`+`intel`+`stats`+IFNULL((SELECT SUM(`cost`) FROM `inventory` WHERE `owner` = `users`.`id` AND `dressed` = 1), 0) FROM `users` WHERE `id` = ?i', $bt['prototype'])->fetch_assoc();
}
$cost[] = [$z['team1'][$i], $gamer[0]];
}
$z['team1'] = null;
$z['team2'] = null;
$flag = true;
while ($flag) {
$flag = false;
for ($ii = 0; $ii <= $all - 1; $ii++) {
if ($cost[$ii][1] < $cost[$ii + 1][1]) {
$ctr = $cost[$ii + 1];
$cost[$ii + 1] = $cost[$ii];
$cost[$ii] = $ctr;
$flag = true;
}
}
}
while (!empty($cost)) {
if ($power1 <= $power2) {
$tmp = array_shift($cost);
$power1 += $tmp[1];
$z['team1'][] = $tmp[0];
} else {
$tmp = array_shift($cost);
$power2 += $tmp[1];
$z['team2'][] = $tmp[0];
}
}
}
$teams = [];
foreach ($z['team1'] as $k => $v) {
foreach ($z['team2'] as $kk => $vv) {
$teams[$v][$vv] = [0, 0, time()];
}
}
foreach ($z['team2'] as $k => $v) {
foreach ($z['team1'] as $kk => $vv) {
$teams[$v][$vv] = [0, 0, time()];
}
}
if (count($z['team2']) == 0) {
db::c()->query('UPDATE `users` SET `zayavka` = 0 WHERE `zayavka` = ?i', $zay);
db::c()->query('DELETE FROM `zayavka` WHERE `id` = ?i', $zay);
foreach ($z['team1'] as $k => $v) {
//Написать добавлялку в чат для определённого чеговека. Плясать от AddChatSystem().[2]
#addchp('<font color=red>Внимание!</font> Ваш бой не может начаться по причине "Группа не набрана".', '{[]}' . nick::id($v)->short() . '{[]}');
return null;
}
header("Location: zayavka.php");
exit;
}
if (!in_array($z['timeout'], [3, 4, 5, 7, 10])) {
$z['timeout'] = 3;
}
if (count($teams) > 1) {
if ($z['type'] == 1 || $z['type'] == 4) {
$rs = ', `fiz`';
$rss = ', 1';
} else {
$rs = '';
$rss = '';
}
db::c()->query('
INSERT INTO `battle` (`coment`, `teams`, `timeout`, `type`, `status`, `t1`, `t2`, `to1`, `to2`, ?f, `bots`)
VALUES ("?s","?s",?i,?i,?i,"?s","?s",?i,?i,?i,?i)',
'blood' . $rs, $z['coment'], serialize($teams), $z['timeout'], $z['type'], 0, implode(';', $z['team1']), implode(';', $z['team2']), time(), time(), $z['blood'], $rss, $z['bots']);
$id = db::c()->getLastInsertId();
$rr = "<b>";
foreach ($z['team1'] as $k => $v) {
if ($k != 0) {
$rr .= ", ";
}
$rr .= Nick::id($v)->full(1);
//Написать добавлялку в чат для определённого чеговека. Плясать от AddChatSystem().[3]
#addchp('<font color=red>Внимание!</font> Ваш бой начался!<br />\'; top.frames[\'main\'].location=\'fbattle.php\'; var z = \' ', '{[]}' . nick::id($v)->short() . '{[]}');
}
$rr .= "</b> и <b>";
foreach ($z['team2'] as $k => $v) {
if ($k != 0) {
$rr .= ", ";
}
$rr .= Nick::id($v)->full(1);
//Написать добавлялку в чат для определённого чеговека. Плясать от AddChatSystem().[4]
#addchp('<font color=red>Внимание!</font> Ваш бой начался!<br />\'; top.frames[\'main\'].location=\'fbattle.php\'; var z = \' ', '{[]}' . nick::id($v)->short() . '{[]}');
}
$rr .= "</b>";
addlog($id, "Часы показывали <span class=date>" . date("Y.m.d H.i") . "</span>, когда " . $rr . " бросили вызов друг другу.<BR>");
foreach ($z['team1'] as $k => $v) {
if ($v < _BOTSEPARATOR_) {
db::c()->query('UPDATE `users` SET `battle` = ?i, `zayavka` = 0 WHERE `id` = ?i', $id, $v);
} else {
db::c()->query('UPDATE `bots` SET `battle` = ?i WHERE `id` = ?i', $id, $v);
}
}
foreach ($z['team2'] as $k => $v) {
if ($v < _BOTSEPARATOR_) {
db::c()->query('UPDATE `users` SET `battle` = ?i, `zayavka` = 0 WHERE `id` = ?i', $id, $v);
} else {
db::c()->query('UPDATE `bots` SET `battle` = ?i WHERE `id` = ?i', $id, $v);
}
}
if ($bot) {
db::c()->query('UPDATE `bots` SET `battle` = ?i WHERE `id` = ?i', $id, $bot['id']);
}
}
if ($this->user->zayavka == $zay) {
exit("<script>location.href='fbattle.php';</script>");
}
}
}
$zay = new Zayavka;
if (!empty($_POST['open'])) {
$f = fopen("/tmp/zayavka/" . $user->getId() . ".txt", "w+");
fputs($f, time());
fclose($f);
}
Template::header('zayavka');
?>
<style>
.m {
background: #99CCCC;
text-align: center;
}
.s {
background: #BBDDDD;
text-align: center;
}
</style>
<TABLE width=100% cellspacing=1 cellpadding=1>
<TR>
<TD colspan=5>
<?php if (!empty($level)) {
echo Nick::id($user)->battle();
} ?>
</TD>
<TD colspan=4 align=right>
<INPUT TYPE=button value="Вернуться" onclick="location.href='main.php?top=<?= mt_rand() ?>';">
</TD>
</TR>
<TR>
<TD class=m width=40>&nbsp;<B>Бои:</B></TD>
<TD class=s><A HREF="?fiz">Физические</A></TD>
<TD class=s><A HREF="?group">Групповые</A></TD>
<TD class=s><A HREF="?haos">Хаотические</A></TD>
<TD class=s><A HREF="?current">Текущие</A>
</TD>
</TR>
</TABLE>
<TABLE class="allzeroes">
<TR>
<TD>
<?php
$get = urldecode(filter_input(INPUT_SERVER, 'QUERY_STRING'));
if ($user->getRoom() != 1 && $get != 'current') {
exit('В этой комнате невозможно подавать заявки!');
}
if (!$get) {
echo '<p style="text-align: center; font-weight: bold; margin-top: 16px;">Выберите раздел</p>';
}
if ($get == 'fiz') {
echo "<b style='color: #f80000;'>";
if (!empty($_POST['open'])) {
if ($_POST['k'] == 6) {
$blood = 1;
} else {
$blood = 0;
}
echo $zay->addzayavka(0, $_POST['timeout'], 1, 1, $_POST['k'], $user->getLevel(), 1, $user->getLevel(), 21, '', 2, $blood);
exit("<script>document.location='zayavka.php?fiz';</script>");
}
if (!empty($_POST['back'])) {
unlink("/tmp/zayavka/" . $user->getId() . ".txt");
echo $zay->delzayavka($user->getId(), $user->zayavka, 2, 0);
}
if (!empty($_POST['back2'])) {
$z = $zay->getlist(2, null, $user->zayavka);
AddChatSystem('Внимание!' . Nick::id($user->getId())->short() . ' отозвал заявку.');
echo $zay->delteam($user->getId(), $user->zayavka, 2);
}
if (!empty($_POST['cansel'])) {
$z = $zay->getlist(2, null, $user->zayavka);
echo $zay->delteam($z[$user->zayavka]['team2'][0], $user->zayavka, 2);
AddChatSystem('Внимание!' . Nick::id($user->getId())->short() . ' отказался от поединка.');
}
if (!empty($_POST['confirm2']) && empty($user->zayavka)) {
$z = $zay->getlist(2, null, $_REQUEST['gocombat']);
$toper = db::c()->query('SELECT `klan` FROM `users` WHERE `id` = ?i', $z[$_REQUEST['gocombat']]['team1'][0])->fetch_assoc();
if ($user->getClan() != $toper['klan'] || !$user->getClan()) {
AddChatSystem('Внимание!' . Nick::id($user->getId())->short() . ' принял заявку, нужно принять вызов или отказать.');
}
echo $zay->addteam(2, 2);
echo "</b></font><BR>Ожидаем подтверждения боя. <input type=submit name=back2 value='Отозвать заявку'>";
}
if (!empty($_POST['gofi'])) {
$zay->battlestart($user->getId(), $user->zayavka, 2);
}
echo "</b>";
echo '<table cellspacing=0 cellpadding=0><tr><td>';
if ($zay->user_status($user->getId()) == 0) { ?>
<FIELDSET>
<LEGEND><B>Подать заявку на бой</B></LEGEND>
Таймаут
<SELECT NAME=timeout>
<OPTION value=1 selected>1 мин.
<OPTION value=3>3 мин.
<OPTION value=5>5 мин.
<OPTION value=10>10 мин.
</SELECT>
Тип боя
<SELECT NAME=k>
<OPTION value=1>с оружием
<OPTION value=4>кулачный
<OPTION value=6>кровавый
</SELECT>
<INPUT TYPE=submit name=open value="Подать заявку">
</FIELDSET>
<?php }
$z = $zay->getlist(2, null, $user->zayavka);
if ($zay->user_status($user->getId()) == 1) {
if (count($z[$user->zayavka]['team2']) > 0) {
echo "<B><font color=red>Внимание! " . Nick::id($z[$user->zayavka]['team2'][0])->full(1) . " принял заявку на бой, нужно отказать или принять вызов.</font></b> <input type=submit value='Битва!' name=gofi> <input type=submit value='Отказать' name=cansel>";
} else {
if ($z[$user->zayavka]['level'] == 2) {
echo "Заявка на бой подана, ожидаем противника. <input type=submit name=back value='Отозвать заявку'>";
$Path = "/tmp/zayavka/" . $user->getId() . ".txt";
$f = fopen($Path, "r");
$timeFigth = fread($f, filesize($Path));
fclose($f);
if ($timeFigth < time() && ($user->getLevel() <= 14)) {
if ($get == 'trainstart' && $user->getHealth() > $user->getMaxHealth() * 0.33 && ($user->getLevel() <= 7 || $user->getAdmin() == 1)) {
unlink("/tmp/zayavka/" . $user->id . ".txt");
$zay->delzayavka($user->id, $user->zayavka, 2, 0);
mysql_query("INSERT INTO `bots` (`name`, `prototype`, `battle`, `hp`) values ('" . $user->getLogin() . " (Клон 1)','" . $user->getId() . "','','" . $user->getMaxHealth() . "');");
$bot = mysql_insert_id();
$teams = [];
$teams[$user->id][$bot] = [0, 0, time()];
$teams[$bot][$user->id] = [0, 0, time()];
mysql_query("INSERT INTO `battle`
(`teams`,`timeout`,`type`,`status`,`t1`,`t2`,`to1`,`to2`, `clone`
)
VALUES
('" . serialize($teams) . "','3','1','0','" . $user->id . "','" . $bot . "','" . time() . "','" . time() . "', 1
)");
$id = mysql_insert_id();
mysql_query("UPDATE `bots` SET `battle` = {$id} WHERE `id` = {$bot} LIMIT 1");
$rr = "<b>" . Nick::id($user->id)->full(1) . "</b> и <b>" . Nick::id($bot)->full(1) . "</b>";
addlog($id, "Часы показывали <span class=date>" . date("Y.m.d H.i") . "</span>, когда " . $rr . " бросили вызов друг другу. <BR>");
mysql_query("UPDATE users SET `battle` ={$id},`zayavka`=0 WHERE `id`= {$user->id};");
exit("<script>location.href='fbattle.php';</script>");
}
$Path = "/tmp/zayavka/" . $user->id . ".txt";
$f = fopen($Path, "r");
$timeFigth = fread($f, filesize($Path));
fclose($f);
if ($user->getAdmin() == 1) {
echo " или <input type=button onclick=\"location.href='zayavka.php?trainstart';\" value=\"Начать тренировочный бой\">";
}
}
}
}
}
if ($zay->user_status($user->id) == 2 && $z[$user->zayavka]['level'] == 2) {
echo "Ожидаем подтверждения боя. <input type=submit name=back2 value='Отозвать заявку'>";
}
echo '</td></tr></table></TD><TD align=right valign=top rowspan=2><INPUT TYPE=submit name=tmp value="Обновить"><BR><FIELDSET style="width:150px;"><LEGEND>Показывать заявки</LEGEND><table cellspacing=0 cellpadding=0 ><tr><td width=1%><input type=radio name=view value="' . $user->getLevel() . '" ' . (($_SESSION['view'] != null) ? "checked" : "") . '></td><td>моего уровня</td></tr><tr><td><input type=radio name=view value="" ' . (($_SESSION['view'] == null) ? "checked" : "") . '></td><td>все</td></tr></table></FIELDSET>';
echo '<tr><td><INPUT TYPE=hidden name=level value=fiz><INPUT TYPE=submit value="Принять вызов" NAME=confirm2><BR>';
if ($z = $zay->getlist(2, $_SESSION['view'])) {
foreach ($z as $k => $v) {
echo $zay->showfiz($v);
}
}
echo '<INPUT TYPE=submit value="Принять вызов" NAME=confirm2></TD></TR></TABLE>';
}
if ($get == 'group') {
if ($zay->user_status($user->id) != 0) {
$z = $zay->getlist(4, null, $user->zayavka);
if ($z[$user->zayavka]['level'] == 4) {
$battleStartTime = round(($z[$user->zayavka]['start'] - time()) / 60, 1);
echo "<div><b>Ожидаем начала группового боя...</b><br>Бой начнется через: $battleStartTime мин.</div>";
}
} else { ?>
<TABLE>
<TR>
<TD>
<H3>Подать заявку на поединок</H3>
<select NAME=startime>
<option selected disabled>Начало боя</option>
<option value=60>через 1 минуту</option>
<option value=180>через 3 минуты</option>
<option value=300>через 5 минут</option>
<option value=600>через 10 минут</option>
</select>
<select NAME=timeout>
<option selected disabled>Таймаут</option>
<option value=1>1 мин.</option>
<option value=3 selected>3 мин.</option>
<option value=5>5 мин.</option>
<option value=10>10 мин.</option>
</select>
<BR><BR>
Ваша команда <INPUT TYPE=text NAME=nlogin1 size=3 maxlength=2
placeholder="Количество союзников"> бойцов<BR>
Уровни союзников &nbsp;&nbsp;<SELECT NAME=levellogin1>
<option value=0>любой
<option value=1>только моего и ниже
<option value=2>только ниже моего уровня
<option value=3>только моего уровня
<option value=4>не старше меня более чем на уровень
<option value=5>не младше меня более чем на уровень
<option value=6>мой уровень +/- 1
<option value=99>мой клан
</SELECT>
<BR><BR>
Противники &nbsp;&nbsp;<INPUT TYPE=text NAME=nlogin2 size=3 maxlength=2> бойцов<BR>
Уровни противников <SELECT NAME=levellogin2>
<option value=0>любой
<option value=1>только моего и ниже
<option value=2>только ниже моего уровня
<option value=3>только моего уровня
<option value=4>не старше меня более чем на уровень
<option value=5>не младше меня более чем на уровень
<option value=6>мой уровень +/- 1
<option value=99>только клан
</SELECT>
<p><INPUT TYPE=checkbox NAME=k> Кулачный бой</p>
<INPUT TYPE=checkbox NAME=travma> Бой без правил (<span class=dsc>проигравшая сторона получает инвалидность</span>)<BR>
Комментарий к бою <INPUT TYPE=text NAME=cmt maxlength=40 size=40>
</TD>
</TR>
<TR>
<TD align=center>
<INPUT TYPE=submit value="Начнем месилово! :)" name=open>
</TD>
</TR>
</TABLE>
</TD>
<TD align=right valign=top>
<INPUT TYPE=submit value="Вернуться">
</TD>
</TR>
</TABLE>
<INPUT TYPE=hidden name=level value=group>
<?php }
if (!empty($_POST['goconfirm']) && empty($user->zayavka)) {
echo '<TABLE width=100%><TR><TD>';
$z = $zay->getlist(4, null, $_POST['gocombat']);
echo "<B>Ожидаем начала группового боя...</B><BR>Бой начнется через: " . round(($z[$_POST['gocombat']]['start'] - time()) / 60, 1) . " мин.";
echo '</TD><TD align=right><INPUT TYPE=submit value="Вернуться"></TD></TR></TABLE><H3>На чьей стороне будете сражаться?</H3>
<TABLE align=center cellspacing=4 cellpadding=1><TR><TD bgcolor=99CCCC><B>Группа 1:</B><BR>
Максимальное кол-во: ' . $z[$_POST['gocombat']]['t1c'] . '<BR>
Ограничения по уровню: ' . ($z[$_POST['gocombat']]['t1min'] == 99 ? 'клан' : $z[$_POST['gocombat']]['t1min'] . " - " . $z[$_POST['gocombat']]['t1max']) . '
</TD><TD bgcolor=99CCCC><B>Группа 2:</B><BR>
Максимальное кол-во: ' . $z[$_POST['gocombat']]['t2c'] . '<BR>
Ограничения по уровню: ' . ($z[$_POST['gocombat']]['t2min'] == 99 ? 'клан' : $z[$_POST['gocombat']]['t2min'] . " - " . $z[$_POST['gocombat']]['t2max']) . '
</TD></TR><TR>
<TD align=center>';
foreach ($z[$_POST['gocombat']]['team1'] as $k => $v) {
if ($k != 0) {
$rr .= "<BR>";
}
echo Nick::id($v)->full(1);
}
echo '</TD><TD align=center>';
foreach ($z[$_POST['gocombat']]['team2'] as $k => $v) {
if ($k != 0) {
$rr .= "<BR>";
}
echo Nick::id($v)->full(1);
}
echo '</TD></TR><TR>';
if ($z[$_POST['gocombat']]['team1'][0] != 1000 && $z[$_POST['gocombat']]['team1'][0] != 1001) {
echo '<TD align=center><INPUT TYPE=submit name=confirm1 value="Я за этих!"></TD>';
} else {
echo '<TD align=center>Силы Хаоса</TD>';
}
echo '<TD align=center><INPUT TYPE=submit name=confirm2 value="Я за этих!"></TD></TR></TABLE><INPUT TYPE=hidden name=gocombat value="' . $_POST['gocombat'] . '"><INPUT TYPE=hidden name=level value=group>';
exit;
}
echo "<b style='color: #f80000;'>";
if (!empty($_POST['confirm1']) && !empty($_POST['gocombat']) && empty($user->zayavka)) {
echo $zay->addteam(1, 4);
}
if (!empty($_POST['confirm2']) && $_POST['gocombat'] && empty($user->zayavka)) {
echo $zay->addteam(2, 4);
}
if (!empty($_POST['open']) && empty($user->zayavka)) {
switch ($_POST['levellogin1']) {
default:
case 0 : //любой
$min1 = 0;
$max1 = 21;
break;
case 1 : //только моего и ниже
$min1 = 0;
$max1 = $user->getLevel();
break;
case 2 : //только ниже моего уровня
$min1 = 0;
$max1 = $user->getLevel() - 1;
break;
case 3 : //только моего уровня
$min1 = $user->getLevel();
$max1 = $user->getLevel();
break;
case 4 : //не старше меня более чем на уровень
$min1 = $user->getLevel();
$max1 = $user->getLevel() + 1;
break;
case 5 : //не младше меня более чем на уровень
$min1 = $user->getLevel() - 1;
$max1 = $user->getLevel();
break;
case 6 : //мой уровень +/- 1
$min1 = (int)$user->getLevel() - 1;
$max1 = (int)$user->getLevel() + 1;
break;
case 99 : // кланы
$min1 = 99;
$max1 = 99;
break;
}
switch ($_POST['levellogin2']) {
default:
case 0 : //любой
$min1 = 0;
$max1 = 21;
break;
case 1 : //только моего и ниже
$min1 = 0;
$max1 = $user->getLevel();
break;
case 2 : //только ниже моего уровня
$min1 = 0;
$max1 = $user->getLevel() - 1;
break;
case 3 : //только моего уровня
$min1 = $user->getLevel();
$max1 = $user->getLevel();
break;
case 4 : //не старше меня более чем на уровень
$min1 = $user->getLevel();
$max1 = $user->getLevel() + 1;
break;
case 5 : //не младше меня более чем на уровень
$min1 = $user->getLevel() - 1;
$max1 = $user->getLevel();
break;
case 6 : //мой уровень +/- 1
$min1 = (int)$user->getLevel() - 1;
$max1 = (int)$user->getLevel() + 1;
break;
case 99 : // кланы
$min1 = 99;
$max1 = 99;
break;
}
if ($min1 < 0) {
$min1 = 0;
}
if ($max1 < 0) {
$max1 = 0;
}
if ($_POST['k']) {
$_POST['k'] = 4;
} else {
$_POST['k'] = 2;
}
if ($_POST['travma']) {
$blood = 1;
} else {
$blood = 0;
}
echo $zay->addzayavka($_POST['startime'] / 60, $_POST['timeout'], $_POST['nlogin1'], $_POST['nlogin2'], $_POST['k'], $min1, $min2, $max1, $max2, $_POST['cmt'], 4, $blood);
}
echo "</b><INPUT TYPE=hidden name=level value=group>";
echo '</TD><TD align=right valign=top rowspan=2><INPUT TYPE=submit name=tmp value="Обновить"><BR><FIELDSET style="width:150px;"><LEGEND>Показывать заявки</LEGEND><table cellspacing=0 cellpadding=0 ><tr><td width=1%><input type=radio name=view value="' . $user->getLevel() . '" ' . (($_SESSION['view'] != null) ? "checked" : "") . '></td><td>моего уровня</td></tr><tr><td><input type=radio name=view value="" ' . (($_SESSION['view'] == null) ? "checked" : "") . '></td><td>все</td></tr></table></FIELDSET>';
echo '<tr><td width=85%>';
echo '<BR><INPUT TYPE=submit value="Принять участие" NAME=goconfirm><BR>';
if ($z = $zay->getlist(4, $_SESSION['view'])) {
foreach ($z as $k => $v) {
if ((($z[$k]['start'] - time()) < 0) || (($z[$k]['t1c'] == count($z[$k]['team1'])) && ($z[$k]['t2c'] == count($z[$k]['team2'])))) {
$zay->battlestart("CHAOS", $k, 4);
}
echo $zay->showgroup($v);
}
}
echo '<INPUT TYPE=submit value="Принять участие" NAME=goconfirm></td></tr></table>';
}
if ($get == 'haos') {
if (!empty($_POST['open']) && empty($user->zayavka)) {
switch ($_POST['levellogin1']) {
default:
case 0 :
$min1 = 1;
$max1 = 21;
break;
case 3 :
$min1 = $user->getLevel();
$max1 = $user->getLevel();
break;
case 6 :
$min1 = (int)$user->getLevel() - 1;
$max1 = (int)$user->getLevel() + 1;
break;
}
$blood = 0;
if ($_POST['travma']) {
$blood = 1;
}
echo $zay->addzayavka($_POST['startime2'] / 60, $_POST['timeout'], 99, 99, $_POST['k'], $min1, $min1, $max1, $max1, $_POST['cmt'], 5, $blood);
}
if (!empty($_POST['confirm2'])) {
echo "<span class='success'>" . $zay->addteam(1, 5) . "</span>";
}
echo '<table cellspacing=0 cellpadding=0><tr><td>';
if ($zay->user_status($user->id) == 0) {
echo 'Хаотичный бой - разновидность группового, где группы формируются автоматически. Бой не начнется, если собралось меньше 4-х человек. <DIV id="dv2" style="display:"><A href="#" onclick="dv1.style.display=\'\'; dv2.style.display=\'none\'; return false">Подать заявку на хаотичный бой</A></DIV><DIV id="dv1" style="display: none"><FIELDSET><LEGEND><B>Подать заявку на хаотичный бой</B> </LEGEND>Начало боя через <SELECT NAME=startime2><option value=180>3 минуты</option><option value=300 selected>5 минут</option><option value=600>10 минут</option><option value=900>15 минут</option><option value=1800>30 минут</option><option value=2700>45 минут</option><option value=3600>1 час</option></SELECT>&nbsp;&nbsp;&nbsp;&nbsp;Таймаут <SELECT NAME=timeout><OPTION value=3 SELECTED>3 мин.<OPTION value=5>5 мин.<OPTION value=10>10 мин.</SELECT><BR>Уровни бойцов &nbsp;&nbsp;<SELECT NAME=levellogin1><option value=0>любой<option value=3>только моего уровня<option value=6 selected>мой уровень +/- 1</SELECT><BR><BR>Тип боя <SELECT NAME=k><OPTION value=3>с оружием<OPTION value=5>кулачный</SELECT><BR><INPUT TYPE=checkbox NAME=travma> Бой без правил (<font class=dsc>проигравшая сторона получает инвалидность</font>)<BR><INPUT TYPE=submit name=open value="Подать заявку">&nbsp;<BR>Комментарий к бою <INPUT TYPE=text NAME=cmt maxlength=40 size=40></FIELDSET><BR></DIV>';
}
if ($zay->user_status($user->id)) {
$z = $zay->getlist(5, null, $user->zayavka);
if ($z[$user->zayavka]['level'] == 5) {
echo "<B>Ожидаем начала группового боя...</B><BR>Бой начнется через: " . round(($z[$user->zayavka]['start'] - time()) / 60, 1) . " мин.";
}
}
echo '</td></tr></table></TD><TD align=right valign=top rowspan=2><INPUT TYPE=submit name=tmp value="Обновить"><BR><FIELDSET style="width:150px;"><LEGEND>Показывать заявки</LEGEND><table cellspacing=0 cellpadding=0 ><tr><td width=1%><input type=radio name=view value="' . $user->getLevel() . '" ' . (($_SESSION['view'] != null) ? "checked" : "") . '></td><td>моего уровня</td></tr><tr><td><input type=radio name=view value="" ' . (($_SESSION['view'] == null) ? "checked" : "") . '></td><td>все</td></tr></table></FIELDSET>';
echo '<tr><td width=85%><INPUT TYPE=hidden name=level value=haos><INPUT TYPE=submit value="Принять участие" NAME=confirm2><BR>';
if ($z = $zay->getlist(5, $_SESSION['view'])) {
foreach ($z as $k => $v) {
if (($z[$k]['start'] - time()) < 0) {
$zay->battlestart("CHAOS", $k, 5);
}
echo $zay->showhaos($v);
}
}
echo '<INPUT TYPE=submit value="Принять участие" NAME=confirm2></TD></TR></TABLE>';
}
if ($get == 'current') {
$t1 = floor(time() - 900);
$data = db::c()->query('SELECT * FROM `battle` WHERE `win` = 3 AND `to1` > ?i AND `to2` > ?i ORDER BY `id` ASC', $t1, $t1);
if (empty($data->getNumRows())) {
echo 'Надо же! Ни одного поединка!';
}
else {
while ($row = $data->fetch_assoc()) {
echo "<span class=date>{$row['date']}</span>";
$z = explode(";", $row['t1']);
foreach ($z as $k => $v) {
if ($k > 0) {
echo ",";
}
Nick::id($v)->full();
}
echo " против ";
$z = explode(";", $row['t2']);
foreach ($z as $k => $v) {
if ($k > 0) {
echo ",";
}
Nick::id($v)->full();
}
echo "<img src='i/fighttype{$row['type']}.gif'> <a href='logs.php?log={$row['id']}' target=_blank>»»</a><br />";
}
}
}
db::c()->query('UNLOCK TABLES');