battles/group_arena.php
Igor Barkov (iwork) 3502904656 Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $user во многих файлах.
Singleton в некоторых местах вместо решения #42.
Новые шаги для решения #16 и #52.
Closes #42.
Closes #32.
Closes #31.
2022-01-27 01:15:33 +02:00

299 lines
14 KiB
PHP
Raw Permalink 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\Nick;
use Battles\ShopItem;
use Battles\Template;
use Battles\User;
require_once 'functions.php';
$error = '';
function login($uid)
{
return User::getInstance($uid)->getId() ? Nick::id(User::getInstance()->getId())->full() : 'Место свободно';
}
function form_start($uid)
{
$r = '';
$go = '';
if ($uid > 0) {
$user = mysql_fetch_array(mysql_query('SELECT `id`, `login`, `align`, `level`, `klan`, `zayrist` FROM `users` WHERE `id` = "' . $uid . '" LIMIT 1'));
if (isset($user['id']) ?? $user['zayrist']) {
$zv = mysql_fetch_array(mysql_query('SELECT `id`, `name`, `uid1`, `uid2`, `uid3` FROM `group_ristal` WHERE `id` = "' . $user['zayrist'] . '" LIMIT 1'));
if (isset($zv['id'])) {
$r .= '<form method="POST">';
if ($zv['uid1'] == $user['id']) {
$go = '<input type="submit" name="startZv" value="Начать поход" /> / ';
}
for ($i = 1; $i <= 3; $i++) {
$nick .= login($zv['uid' . $i]) . ', ';
}
$nc = rtrim($nick, ', ');
$r .= '<table style="padding-top: 25px;"><tr><td>Ваша группа («' . $zv['name'] . '»): ' . $nc . ' ' . $go . '<input type="submit" name="leaveZv" value="Покинуть заявку" /></td></tr></table>';
$r .= '</form>';
} else {
$user['zayrist'] = 0;
mysql_query('UPDATE `users` SET `zayrist` = "' . $user['zayrist'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
}
}
}
return $r;
}
function forms($level)
{
$r = '<br /></br />';
$sp = mysql_query('SELECT `id`, `name`, `pass`, `comment`, `uid1`, `uid2`, `uid3` FROM `group_ristal` WHERE `level` = "' . (int)$level . '" ORDER BY `id` DESC');
if (mysql_num_rows($sp) > 0) {
while ($pl = mysql_fetch_array($sp)) {
$i = 1;
while ($i <= 3) {
$nick .= login($pl['uid' . $i]) . ', ';
$i++;
}
$nc = rtrim($nick, ', ');
$r .= '<table><tr><td>Группа («' . $pl['name'] . '»): ' . $nc . ' <input type="hidden" name="zvId" value="' . $pl['id'] . '" /> <input type="submit" name="gotoZv" value="Вступить в заявку" /></td></tr></table>';
}
} else {
$r .= '<i>Заявок вашего уровня нет</i>';
}
unset($sp, $pl, $nick, $nc, $i);
return $r;
}
if (isset($_POST['buyFirst'])) {
if (isset($user['id'])) {
if ($user['money'] >= 5) {
$Firts = mysql_fetch_array(mysql_query('SELECT `id` FROM `inventory` WHERE `type` = 200 AND `name` = "Фамильный Герб" AND `owner` = "' . $user['id'] . '" LIMIT 1'));
if (isset($Firts['id'])) {
$error = 'У Вас уже есть Фамильный Герб';
} else {
$Second = mysql_fetch_array(mysql_query('SELECT `id` FROM `inventory` WHERE `type` = 200 AND `name` = "Фамильный Герб (х2)" AND `owner` = "' . $user['id'] . '" LIMIT 1'));
if (isset($Second['id'])) {
$error = 'У Вас уже есть Фамильный Герб';
} else {
$user['money'] -= 5;
mysql_query('UPDATE `users` SET `money` = "' . $user['money'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
ShopItem::giveNewItem(1930, $user['id']);
mysql_query("INSERT INTO `delo` (`author`, `pers`, `text`, `type`, `date`) VALUES ('0', '{$user['id']}', '\"" . $user['login'] . "\" купил Фамильный Герб за 5кр.', '1', '" . time() . "')");
$error = 'Вы купили Фамильный Герб';
}
}
} else {
$error = 'Недостаточно средств';
}
} else {
$error = 'Вы не авторизированы';
}
}
if (isset($_POST['buySecond'])) {
if (isset($user['id'])) {
if ($user['money'] >= 15) {
$Firts = mysql_fetch_array(mysql_query('SELECT `id` FROM `inventory` WHERE `type` = 200 AND `name` = "Фамильный Герб" AND `owner` = "' . $user['id'] . '" LIMIT 1'));
if (isset($Firts['id'])) {
$error = 'У Вас уже есть Фамильный Герб';
} else {
$Second = mysql_fetch_array(mysql_query('SELECT `id` FROM `inventory` WHERE `type` = 200 AND `name` = "Фамильный Герб (х2)" AND `owner` = "' . $user['id'] . '" LIMIT 1'));
if (isset($Second['id'])) {
$error = 'У Вас уже есть Фамильный Герб';
} else {
$user['money'] -= 15;
mysql_query('UPDATE `users` SET `money` = "' . $user['money'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
ShopItem::giveNewItem(1931, $user['id']);
mysql_query("INSERT INTO `delo` (`author`, `pers`, `text`, `type`, `date`) VALUES ('0', '{$user['id']}', '\"" . $user['login'] . "\" купил Фамильный Герб (x2) за 15кр.', '1', '" . time() . "')");
$error = 'Вы купили Фамильный Герб (x2)';
}
}
} else {
$error = 'Недостаточно средств';
}
} else {
$error = 'Вы не авторизированы';
}
}
if ($_POST['addZayavka']) {
if (isset($user['id'])) {
$name = mysql_real_escape_string($_POST['nameZv']);
$pass = mysql_real_escape_string($_POST['passZv']);
$comment = mysql_real_escape_string($_POST['commentZv']);
$zv = mysql_fetch_array(mysql_query('SELECT `id` FROM `group_ristal` WHERE `id` = "' . $user['zayrist'] . '" LIMIT 1'));
if ($user['zayrist'] > 0 && isset($zv['id'])) {
$error = 'Вы уже состоите в заявке';
} elseif (strlen($name) > 15) {
$error = 'Название может состоять максимум из 15 символов';
} elseif (strlen($name) < 3) {
$error = 'Название может состоять минимум из 3 символов';
} elseif (strlen($pass) > 6) {
$error = 'Пароль может состоять максимум из 6 символов';
} elseif (strlen($comment) > 20) {
$error = 'Комментарий может состоять максимум из 20 символов';
} else {
mysql_query('INSERT INTO `group_ristal` (`name`, `pass`, `comment`, `time`, `uid1`) VALUES ("' . $name . '", "' . $pass . '", "' . $comment . '", "' . time() . '", "' . $user['id'] . '")');
$user['zayrist'] = mysql_insert_id();
mysql_query('UPDATE `users` SET `zayrist` = "' . $user['zayrist'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
$error = 'Заявка создана';
}
} else {
$error = 'Вы не авторизированы';
}
}
if (isset($_POST['leaveZv']) ?? $user['zayrist']) {
$zv = mysql_fetch_array(mysql_query('SELECT `id`, `uid1`, `uid2`, `uid3` FROM `group_ristal` WHERE `id` = "' . $user['zayrist'] . '" LIMIT 1'));
if (isset($zv['id'])) {
$i = 1;
$j = 3;
$k = 0;
$h = 0;
while ($i <= 3) {
if ($k == 0 && $zv['uid' . $i] != $user['id']) {
$k = $zv['uid' . $i];
$h = $i;
}
$i++;
}
$i = 1;
while ($i <= 3) {
if ($zv['uid' . $i] == $user['id']) {
if ($i > 1) {
$zv['uid' . $i] = 0;
} else {
$zv['uid' . $i] = $k;
$zv['uid' . $h] = 0;
}
}
if ($zv['uid' . $i] == 0) {
$j--;
}
$i++;
}
if ($j < 1) {
mysql_query('DELETE FROM `group_ristal` WHERE `id` = "' . $zv['id'] . '" LIMIT 1');
$error = 'Заявка была удалена<br />';
$user['zayrist'] = 0;
mysql_query('UPDATE `users` SET `zayrist` = "' . $user['zayrist'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
} else {
mysql_query('UPDATE `group_ristal` SET `uid1` = "' . $zv['uid1'] . '", `uid2` = "' . $zv['uid2'] . '", `uid3` = "' . $zv['uid3'] . '" WHERE `id` = "' . $zv['id'] . '" lIMIT 1');
$user['zayrist'] = 0;
mysql_query('UPDATE `users` SET `zayrist` = "' . $user['zayrist'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
$error = 'Вы покинули заявку<br />';
}
unset($zv);
}
}
if ($_GET['exit'] == 1) {
mysql_query('UPDATE `users`,`online` SET `users`.`room` = 2702, `online`.`room` = 2702 WHERE `users`.`id` = "' . $user['id'] . '" AND `online`.`id` = "' . $user['id'] . '"');
header('Location: city.php');
}
Template::header('group_arena');
?>
<script>
function growl(title, color, message, stycky) {
if (!stycky) {
stycky = false;
}
if (!color) {
color = 'Red';
}
$.jGrowl(message, {
header: '<img src="/i/jgrowl_moover.png" class="jgrowl-moover" title="Передвинуть" style="cursor: pointer;" /> <font style="color: ' + color + ';">' + title + '</font>',
sticky: stycky,
glue: 'before'
});
}
function shows() {
const clas = $("#alt").attr('class');
$("#mkgrp").toggle();
if (clas == 'show') {
$("#alt").attr('class', 'hide');
$("#alt").text('Скрыть ...');
} else {
$("#alt").attr('class', 'show');
$("#alt").text('Создать группу');
}
}</script>
<style>
body {
background-image: url('i/r240_1.jpg');
background-repeat: no-repeat;
background-position: top right;
}
</style>
<table class="allzeroes">
<tr>
<td>
<div align=center>
<h3>Турниры: Групповые сражения.</h3>
<b>Внимание! В боях этой локации разрешается использовать свитки "Восстановления энергии" номиналом не
более 180НР!</b><br/><br/>
<span style="color: Red;"><b>Внимание! При старте группового турнира руны автоматически будут сняты с персонажа. <br/>Проверьте, что ваши вещи после снятия рун не упадут, и не забудьте надеть руны после выхода из локации!</b></span>
</div>
<? if ($user['zayrist'] == 0) { ?>
<div align=left><h4>Принять участие в турнире:</h4></div><a onclick="shows();" href="#" class="show"
id="alt">Создать группу</a>
<br/><? echo forms($user['level']);
} else {
echo form_start($user['id']);
} ?>
<div id="mkgrp" style="display: none;">
<fieldset
style="text-align: justify; width: 250px; max-width: 250px; height: 100px; max-height: 100px; margin-top: 15px;">
<form method="post">
Название: <input type="text" name="nameZv" size="20"/><br/>
Комментарий: <input type="text" name="commentZv" size="15"/><br/>
Пароль: <input type="text" name="passZv" size="10"/><br/><br/>
<input type="submit" name="addZayavka" value="Создать группу"/>
</form>
</fieldset>
</div>
<div align="left"><p>&nbsp;</p><h4>Победители 10-ти предыдущих турниров: <span
id="levelCheck"><?= $user['level']; ?></span>-е уровни </h4></div>
<div id="rate"></div>
</td>
<td align=right>
<button onclick="location.href='city.php?zaliv'">Вернуться</button>
<br/><br/>
<form method="POST">
<input type="submit" value="Купить «Фамильный Герб» 5 кр." style="background-color: #A9AFC0;"
name="buyFirst"/>
<input type="submit" value="Купить «Фамильный Герб (х2)» 15 кр." style="background-color: #A9AFC0;"
name="buySecond"/>
</form>
</td>
</tr>
</table>
<div id="response"></div>
<script>
$(function () {
let level =;
$('#rate').load('ajax/rate_ruins.php?level=' + level);
$.jGrowl.defaults.closerTemplate = '<div style="text-align: center; cursor: pointer;"><b>[ Закрыть ]</b></div>';
$.jGrowl.defaults.closeTemplate = '<img src="i/clear.gif" alt="x" title="Закрыть" />';
$('body').delegate('div#jGrowl .jgrowl-moover', 'click', function () {
const j = $(this).closest('div#jGrowl');
const c = j.hasClass('top-right') ? 'top-left' : 'top-right';
j.removeClass('top-left top-right').addClass(c);
});
$("#rate").on("click", "a", function (e) {
const level = $(this).attr("id");
$('#rate').load('ajax/rate_ruins.php?level=' + level);
});
});
</script>
<? if ($error != '') {
echo "<script>growl('Внимание', 'Red', '$error');</script>";
}