game/modules_data/_zv.php

578 lines
27 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 Core\Config;
use Core\Db;
use Tournament\Tournament;
use Tournament\TournamentModel;
use User\Stats;
if (!defined('GAME')) {
die();
}
/** @var User $u */
if ($u->info['inTurnir'] > 0 && $u->info['inUser'] == 0 && $u->info['room'] == 318) {
die('<script>location="main.php";</script>');
}
$zv = new FightRequest();
$r = $_GET['r'] ?? '';
// Турниры по умолчанию.
// 4-group,5-chaos,6-current,7-ended,10-tournament
$r = match ($r) {
'4' => FightRequest::BATTLE_RAZDEL_GROUP,
'5' => FightRequest::BATTLE_RAZDEL_CHAOTIC,
'6' => FightRequest::BATTLE_RAZDEL_CURRENT,
'7' => FightRequest::BATTLE_RAZDEL_ENDED,
default => FightRequest::BATTLE_RAZDEL_TOURNAMENTS
};
$js_5356 = sprintf(
"top.lafstReg[%d] = 0; top.startHpRegen(\"main\",%d,%d,%d,%d,%d,%d,%d,%d,%d,1);",
$u->info['id'],
$u->info['id'],
$u->stats['hpNow'],
$u->stats['hpAll'],
$u->stats['mpNow'],
$u->stats['mpAll'],
time() - $u->info['regHP'],
time() - $u->info['regMP'],
$u->rgd[0],
$u->rgd[1]
);
$code ??= PassGen::intCode();
$userinfo = Stats::getLoginHpManaBars($u);
$slogin = null;
$dt = null;
$dateformatter = null;
if ($r === FightRequest::BATTLE_RAZDEL_ENDED) {
$dateformatter = new IntlDateFormatter(
'ru_RU',
IntlDateFormatter::LONG,
IntlDateFormatter::NONE
);
$dt = $_GET['logs2'] ??= (new DateTime('now midnight'))->gettimestamp();
$slogin = $_GET['filter'] ?? $_POST['filter'] ?? $u->info['login'];
$slogin = str_replace('"', '', $slogin);
$slogin = str_replace("'", '', $slogin);
$slogin = str_replace('\\', '', $slogin);
}
?>
<script type="text/javascript" src="js/jquery.js"></script>
<script>
var zv_Priem = 0;
function openfizrmk() {
$('#hidezv1_btn').slideUp(300, function () {
$('#hidezv1').slideDown(700);
});
}
<?= $js_5356 ?>
</script>
<style>
table.wfix {
table-layout: fixed;
width: 100%;
}
.m {
background: #99CCCC;
text-align: center;
}
.s {
background: #BBDDDD;
text-align: center;
}
.firsttd {
width: 70px;
}
.seehp, .hpborder, .senohp, .senomp, .hp_none, .seemp {
position: absolute;
}
.seehp, .hpborder, .hp_none, .seemp {
width: 120px;
}
.seehp, .hp_none, .seemp {
height: 10px;
}
.hpborder, .senohp, .senomp {
height: 9px;
}
.seehp {
z-index: 12;
}
.hpborder {
z-index: 13;
}
.senohp {
width: <?= $userinfo->hpbarwidth ?>px;
z-index: 11;
}
.senomp {
width: <?= $userinfo->hpbarwidth ?>px;
z-index: 11;
}
.hp_none {
z-index: 10;
}
.seemp {
z-index: 12;
}
.hptop {
top: -10px;
}
.mptop {
top: 0px;
}
</style>
<TABLE class="wfix" cellspacing=1 cellpadding=3>
<TR>
<TD colspan=6 align=right>
<div style="float:left">
<table border="0" cellspacing="0" cellpadding="0" height="20">
<tr>
<td valign="middle">&nbsp;<?= $userinfo->login ?>&nbsp;</td>
<td valign="middle" width="120">
<div style="position:relative;<?= $userinfo->divstyle ?>">
<div id="vhp$uid" title="Уровень жизни"
class="seehp hptop"><?= $userinfo->hpbartext ?></div>
<div title="Уровень жизни" class="hpborder hptop">
<img src="//img.new-combats.tech/1x1.gif" height="9" width="1" alt="">
</div>
<div class="hp_3 senohp hptop" id="lhp$uid">
<img src="//img.new-combats.tech/1x1.gif" height="9" width="1">
</div>
<div title="Уровень жизни" class="hp_none hptop">
<img src="//img.new-combats.tech/1x1.gif" height="10">
</div>
<?php if ($userinfo->hasmana): ?>
<div id="vmp$uid" title="Уровень маны"
class="seemp mptop"><?= $userinfo->mpbartext ?></div>
<div title="Уровень маны" class="hpborder mptop">
<img src="//img.new-combats.tech/1x1.gif" height="9" width="1" alt="">
</div>
<div class="hp_mp senomp mptop" id="lmp$uid">
<img src="//img.new-combats.tech/1x1.gif" height="9" width="1" alt="">
</div>
<div title="Уровень маны" class="hp_none mptop"></div>
<?php endif; ?>
</div>
</td>
</tr>
</table>
</div>
<div style="float:right;">
<INPUT class="btn" onClick="location='main.php?zayvka&r=<?= $r ?>&rnd=<?= $code ?>';"
TYPE=button name=tmp value="Обновить">
<INPUT class="btn" TYPE=button value="Вернуться" onClick="location.href='main.php?rnd=<?= $code ?>';">
</div>
</td>
</tr>
<tr>
<td class="firsttd m">&nbsp;<b>Бои:</b>&nbsp;</td>
<td class="<?= $r == FightRequest::BATTLE_RAZDEL_TOURNAMENTS ? 's' : 'm' ?>">
<a href="/main.php?zayvka=1&r=<?= FightRequest::BATTLE_RAZDEL_TOURNAMENTS ?>&rnd=<?= $code ?>">Турниры</a>
</td>
<td class="<?= $r == FightRequest::BATTLE_RAZDEL_GROUP ? 's' : 'm' ?>">
<a href="/main.php?zayvka=1&r=<?= FightRequest::BATTLE_RAZDEL_GROUP ?>&rnd=<?= $code ?>">Групповые</a>
</td>
<td class="<?= $r == FightRequest::BATTLE_RAZDEL_CHAOTIC ? 's' : 'm' ?>">
<a href="/main.php?zayvka=1&r=<?= FightRequest::BATTLE_RAZDEL_CHAOTIC ?>&rnd=<?= $code ?>">Хаотичные</a>
</td>
<td class="<?= $r == FightRequest::BATTLE_RAZDEL_CURRENT ? 's' : 'm' ?>">
<a href="/main.php?zayvka=1&r=<?= FightRequest::BATTLE_RAZDEL_CURRENT ?>&rnd=<?= $code ?>">Текущие</a>
</td>
<td class="<?= $r == FightRequest::BATTLE_RAZDEL_ENDED ? 's' : 'm' ?>">
<a href="/main.php?zayvka=1&r=<?= FightRequest::BATTLE_RAZDEL_ENDED ?>&rnd=<?= $code ?>">Завершенные</a>
</td>
</tr>
</table>
<div style="padding:2px;">
<?php
$zi = [];
if (
$u->info['battle'] == 0 &&
(isset($_GET['add_group']) || isset($_GET['start_haot']))
) {
$zv->addGroupOrChaoticRequest($r);
}
if ($u->info['zv'] != 0) {
//fixme результаты этого запроса используются в методах класса FightRequest как global $zi.
$zi = Db::getRow(
'select * from zayvki where id = ? and start = 0 and cancel = 0 and time > unix_timestamp() - 60 * 60 * 2 or razdel > 3',
[$u->info['zv']]
);
if (!isset($zi['id'])) {
$zi = [];
$u->info['zv'] = 0;
Db::sql('update stats set zv = 0 where id = ?', [$u->info['id']]);
}
}
if ($u->info['battle'] == 0) {
if (isset($_POST['groupClick']) && !isset($zi['id'])) {
$zg = Db::getRow(
'select * from zayvki where id = ? and start = 0 and cancel = 0 and time > unix_timestamp() - 60 * 60 * 2 and btl_id = 0 and razdel = 4',
[(int)$_POST['groupClick']]
);
if (!isset($zg['id'])) {
echo '<div style="text-align: center;"><br><br>Заявка на групповой бой не найдена.</div>';
} else {
$tm_start = floor(($zg['time'] + $zg['time_start'] - time()) / 6) / 10;
$tm_start = $zv->rzv($tm_start);
$tm1 = '';
$tm2 = '';
$tm3 = '';
$users = Db::getRow(
'select users.id, login, level, align, clan, admin, team from users left join stats on users.id = stats.id where zv = ?',
[$zg['id']]
);
foreach ($users as $user) {
${'tm' . $user['team']} .= '<b>' . $user['login'] . '</b> [' . $user['level'] . ']<a href="info/' . $user['id'] . '" target="_blank"><img src="' . Config::img(
) . '/i/inf_capitalcity.gif" title="Инф. о ' . $user['login'] . '" alt="inf"></a><br>';
}
if (empty($tm1)) {
$tm1 = 'группа пока не набрана';
} else {
$tm1 = rtrim($tm1, '<br />');
}
if (empty($tm2)) {
$tm2 = 'группа пока не набрана';
} else {
$tm2 = rtrim($tm2, '<br />');
}
//
if ($zg['teams'] == 3) {
if (empty($tm3)) {
$tm3 = 'группа пока не набрана';
} else {
$tm3 = rtrim($tm3, '<br />');
}
}
$sv1 = Db::getValue('select count(*) from stats where zv = ? and team = 1');
$sv2 = Db::getValue('select count(*) from stats where zv = ? and team = 2');
$sv3 = Db::getValue('select count(*) from stats where zv = ? and team = 3');
$sv1 = $zg['tm1max'] - $sv1;
$sv2 = $zg['tm2max'] - $sv2;
if ($zg['teams'] == 3) {
$sv3 = $zg['tm2max'] - $sv3;
}
?>
</div>
<table style="margin-top:2px;" width="100%">
<tr>
<td> Бой начнется через <?= $tm_start; ?> мин.</td>
<td align="right">
<INPUT class="btn" onClick="location='main.php?zayvka&r=<?= $r; ?>&rnd=<?= $code; ?>';"
TYPE=button name=tmp value="Обновить">
<input class="btn" type="button" value="Вернуться"
onclick="location.href='main.php?zayvka&r=<?= $r; ?>&rnd=<?= $code; ?>';">
</td>
</tr>
</table>
<h3 align="center">На чьей стороне будете сражаться?</h3>
<table align="center" cellspacing="4" cellpadding="1">
<tr>
<td bgcolor="99CCCC"><b>Группа один:</b><br/>
Максимальное кол-во: <?= $zg['tm1max']; ?><br/>
Ограничения по уровню: <?= $zg['min_lvl_1'] . ' - ' . $zg['max_lvl_1']; ?></td>
<td bgcolor="99CCCC"><b>Группа два:</b><br/>
Максимальное кол-во: <?= $zg['tm2max']; ?><br/>
Ограничения по уровню: <?= $zg['min_lvl_2'] . ' - ' . $zg['max_lvl_2']; ?> </td>
<?php
if ($zg['teams'] == 3) {
?>
<td bgcolor="99CCCC"><b>Группа три:</b><br/>
Максимальное кол-во: <?= $zg['tm2max']; ?><br/>
Ограничения по уровню: <?= $zg['min_lvl_2'] . ' - ' . $zg['max_lvl_2']; ?> </td>
<?php
}
?>
</tr>
<tr>
<td align="center"><?= $tm1; ?>
<br/>
</td>
<td align="center"><?= $tm2; ?>
<br/>
</td>
<?php
if ($zg['teams'] == 3) {
?>
<td align="center"><?= $tm3; ?>
<br/>
</td>
<?php
}
?>
</tr>
<tr>
<td align="center">
<input class="btn" title="На данный момент свободно мест: <?= $sv1 ?>"
onclick="location='main.php?r=<?= $r ?>&zayvka&btl_go=<?= $zg['id'] ?>&tm1=<?= $code ?>'"
type="submit" name="confirm1" value="Я за этих!"/>
</td>
<td align="center">
<input class="btn" title="На данный момент свободно мест: <?= $sv2 ?>"
onclick="location='main.php?r=<?= $r ?>&zayvka&btl_go=<?= $zg['id'] ?>&tm2=<?= $code ?>'"
type="submit" name="confirm2" value="Я за этих!"/>
</td>
<?php
if ($zg['teams'] == 3) {
?>
<td align="center">
<input class="btn" title="На данный момент свободно мест: <?= $sv3 ?>"
onclick="location='main.php?r=<?= $r ?>&zayvka&btl_go=<?= $zg['id'] ?>&tm3=<?= $code ?>'"
type="submit" name="confirm3" value="Я за этих!"/>
</td>
<?php
}
?>
</tr>
</table>
<?php
}
} elseif (isset($_GET['startBattle']) && isset($zi['id']) && ($zi['razdel'] >= 1 && $zi['razdel'] <= 3)) {
$zv->startBattle($zi['id']);
}
}
$btl_go = 0;
if (isset($_POST['btl_go']) || isset($_GET['btl_go'])) {
$btl_go = (int)$_POST['btl_go'] ?? (int)$_GET['btl_go'];
}
$zv->go($btl_go);
if ($zv->error) {
echo '<b style="color: red">' . $zv->error . '</b><br>';
}
?>
<table style="padding:2px;" width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td>
<?php if ($r === FightRequest::BATTLE_RAZDEL_GROUP && $u->room['zvsee'] == 0): ?>
<span id="hidezv1_btn"><INPUT class="btn" onClick="openfizrmk();" TYPE=button name=tmp
value="Подать заявку на групповой бой" style="margin:3px;"></span>
<FIELDSET id="hidezv1" style="display:none; border-color:#FFF; width:500px;">
<LEGEND><B style="color:#8f0000">Подать заявку на групповой бой</B></LEGEND>
<form method="post" action="/main.php?zayvka&r=<?= $r ?>&add_group&rnd=<?= $code ?>">
<table>
<tr>
<td>
Начало боя через
<select style="padding:2px;" name="startime">
<option value="300" selected>5 минут</option>
<option value="600">10 минут</option>
</select>
&nbsp;&nbsp;&nbsp;&nbsp;Таймаут
<select style="padding:2px;" name="timeout">
<option value="1" selected>1 мин.</option>
<option value="2">2 мин.</option>
<option value="3">3 мин.</option>
</select>
<br/>
Ваша команда
<input style="padding:2px;" type="text" name="nlogin1" size="3" maxlength="2"/>
игроков
<select style="padding:2px;" name="levellogin1">
<option value="0">любой</option>
<option value="1">только моего и ниже</option>
<option value="2">только ниже моего уровня</option>
<option value="3" selected>только моего уровня</option>
<option value="4">не старше меня более чем на уровень</option>
<option value="5">не младше меня более чем на уровень</option>
<option value="6">мой уровень +/- 1</option>
<option value="99">мой клан</option>
<option value="98">моя склонность</option>
</select>
<br>
Противники &nbsp;
<input style="padding:2px;" type="text" name="nlogin2" size="3" maxlength="2"/>
игроков
<select style="padding:2px;" name="levellogin2">
<option value="0">любой</option>
<option value="1">только моего и ниже</option>
<option value="2">только ниже моего уровня</option>
<option value="3" selected>только моего уровня</option>
<option value="4">не старше меня более чем на уровень</option>
<option value="5">не младше меня более чем на уровень</option>
<option value="6">мой уровень +/- 1</option>
<option value="99">только клан</option>
<option value="98">только склонность</option>
</select>
<br/>
<input type="checkbox" name="travma">
<label for="travma">Бой без правил <span class="dsc">(проигравшая сторона
получает инвалидность)</span></label><br>
<INPUT maxLength="40" size="40" name="cmt" placeholder="Комментарий к бою"><BR>
</td>
</tr>
<tr>
<td align="left">
<input class="btn" type="submit" value="Подать заявку" name="open">
</td>
</tr>
</table>
</form>
</FIELDSET>
<?php elseif ($r === FightRequest::BATTLE_RAZDEL_CHAOTIC && $u->room['zvsee'] == 0): ?>
<div id="hidezv1_btn">
<INPUT class="btn" onClick="openfizrmk();" TYPE=button name=tmp
value="Подать заявку на хаотичный бой" style="margin:3px;">
</div>
<form method="post" action="/main.php?zayvka&r=<?= $r ?>&add_group&rnd=<?= $code ?>">
<input type="hidden" name="timeout" value="1">
<div style="display:none; width:600px;" id="hidezv1">
<br>
<FIELDSET style="border-color:#FFF;">
<LEGEND><strong style="color:#8f0000">Подать заявку на хаотичный бой</strong></LEGEND>
Начало боя через
<SELECT name="startime2">
<option value="60" selected>1 минута
<OPTION value="180">3 минуты
<OPTION value="300">5 минут
</SELECT>
Игроков
<SELECT name="players">
<OPTION selected value="6">6</OPTION>
<OPTION value="8">8</OPTION>
<OPTION value="10">10</OPTION>
<OPTION value="12">12</OPTION>
</SELECT>
<BR>
Уровни бойцов
<SELECT name="levellogin1">
<OPTION value="0">любой
<OPTION selected value="3">только моего уровня
<OPTION value="6">мой уровень +/- 1</OPTION>
</SELECT>
<BR><BR>
<INPUT type="checkbox" name="travma">
Бой без правил <span
style="color: #777; ">(проигравшая сторона получает инвалидность)</span><BR>
<INPUT type="checkbox" name="noatack"> Закрытый поединок <span style="color: #777; ">(бой будет изолирован от нападений)</span><BR>
<INPUT type="checkbox" name="noeff">
Запрет на использование свитков восстановления НР и Маны<BR>
<?php if (!$u->info['no_zv_key']):
$security = new Captcha\Captcha();
$security->width(70)->height(20)->newImage();
$_SESSION['code'] = $security->getSum();
?>
Код подтверждения: <input style="width:40px;" type="text" name="code21">
<?php endif; ?>
<INPUT maxLength="40" size="40" name="cmt" placeholder="Комментарий к бою"><BR>
<INPUT class="btn" value="Подать заявку" type="submit" name="open">
</FIELDSET>
</div>
</form>
<?php elseif ($r === FightRequest::BATTLE_RAZDEL_CURRENT): ?>
<h3>Записи текущих боев на <?= date('d.m.Y'); ?></h3>
<?php $zv->getCurrentBattlesList(); ?>
<?php elseif ($r === FightRequest::BATTLE_RAZDEL_ENDED): ?>
<TABLE width=100% cellspacing=0 cellpadding=0>
<TR>
<TD valign=top>
&nbsp;
<A HREF="?filter=<?= $slogin ?>&zayvka=1&r=7&logs2=<?= $dt - 86400 ?>">« Предыдущий день</A>
</TD>
<TD valign=top align=center>
<H3>Записи о завершенных боях за <?= $dateformatter->format($dt) ?></H3>
</TD>
<TD valign=top align=right>
<A HREF="?filter=<?= $slogin ?>&zayvka=1&r=7&logs2=<?= $dt + 86400 ?>">Следующий день »</A>
&nbsp;
</TD>
</TR>
<TR>
<TD colspan=3 align=center>
<form method="POST" action="main.php?zayvka=1&r=7&rnd=<?= $code ?>">
Показать только бои персонажа:
<INPUT TYPE=text NAME=filter value="<?= $slogin ?>"> за
<INPUT TYPE=text NAME=logs size=12 value="<?= date('d.m.Y', $dt) ?>">
<INPUT class="btn" TYPE=submit value="фильтр!">
</form>
</TD>
</TR>
</TABLE>
<?php $zv->getEndedBattlesList($slogin, $dt); ?>
<?php elseif ($r === FightRequest::BATTLE_RAZDEL_TOURNAMENTS): ?>
<?php if (Tournament::IS_ENABLED): ?>
<div>
<strong style="color: red;">Внимание!</strong>
<ul>
<li style="color: blue;">В случае создания либо присоединения к Турниру, покинуть его -
<u>невозможно</u>!
</li>
<?php if (TournamentModel::isEkrOverpriced($u->info['id'])): ?>
<li>Стоимость предметов, одетых на вас не должна
превышать <?= Tournament::ekrOverpriceFormula($u->info['level']) ?> еврокредитов.
</li>
<?php endif; ?>
<?php if ($u->info['exp'] < Tournament::MIN_EXP): ?>
<li>У вас должно быть не менее <?= Tournament::MIN_EXP ?> опыта.</li>
<?php endif; ?>
<li style="color: blue;">Турнир начнётся, когда в заявке
наберётся <?= Tournament::START_TOURNAMENT ?> человек.
</li>
<li style="color: blue;">Игроки занявшие 1, 2 и 3 места получат ----, а так же задержки на участие в турнире 12 часов, 6 и 3 часа соответственно!
</li>
</ul>
</div>
<?php $trn = $zv->getTournaments(); ?>
<?php if ($trn->hasTournaments): ?>
<div>
<strong>Активные турниры.</strong><br>
<?= $trn->listTournaments ?>
</div>
<?php endif; ?>
<?php if (!TournamentModel::getTournamentIdByUserId(
$this->u->info['id']
) || !TournamentModel::isStarted($this->u->info['level'])): ?>
<form method="post">
<input type="submit" name="tournament_start" value="Принять участие в турнире">
<input type="hidden" name="key" value="<?= $_SESSION['bypass'] ?>">
</form>
<?php else: ?>
Вы учавствуете.
<?php endif; ?>
<?php else: ?>
<div style="font-weight: bold; color: firebrick;">В данный момент турниры не проводятся!</div>
<?php endif; ?>
<?php else: ?>
nan
<?php endif; ?>
<?php $zv->getCurrentStatus($zi, $r); ?>
</td>
</tr>
<tr>
<td><?php $zv->seeZv($zi, $r); ?></td>
</tr>
</table>
<div style="text-align: right; margin-top: 5px;">
<?= Config::get('counters') ?>
</div>