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

483 lines
24 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\Database\Db;
use Battles\InventoryItem;
use Battles\Template;
use Battles\User;
use Battles\UserInfo;
require_once "functions.php";
$d = mysql_fetch_array(mysql_query("SELECT SUM(`massa`) AS `mass` FROM `inventory` WHERE `owner` = '{$user['id']}' AND `dressed` = 0 AND `setsale` = 0"));
$in = mysql_fetch_array(mysql_query('SELECT COUNT(*) AS `cnt` FROM `inventory` WHERE `owner` = "-101' . $user['id'] . '"'));
$hostel = mysql_fetch_array(mysql_query('SELECT * FROM `hostel` WHERE `uid` = "' . $user['id'] . '" LIMIT 1'));
$base = [1 => 15, 2 => 30, 3 => 50, 4 => 100];
$vips = [1 => 0.15, 2 => 0.30, 3 => 0.45];
function get_meshok(): object
{
$allweight = Db::getInstance()->ofetch('select sum(weight) as items_weight_sum from inventory where on_sale = 0 and owner_id = ?', User::getInstance()->getId());
$stat = new UserInfo(User::getInstance()->getId());
return (object)[
'currentweight' => $allweight->items_weight_sum,
'maxweight' => $stat->getMaxWeight() + $allweight->items_weight_sum,
];
}
function show_item($row, $txt, $place)
{
if (($row['maxdur'] <= $row['duration']) || ($row['dategoden'] && $row['dategoden'] <= time())) {
InventoryItem::destroyItem($row['id']);
}
$r = '';
$ntxt = "В инвентаре";
if ($txt == "В сундук") {
$ntxt = "В сундуке";
}
$magic = db::c()->query('SELECT * FROM `magic` WHERE `id` = ?i', $$row['magic'])->fetch_assoc();
$incmagic = mysql_fetch_array(mysql_query('SELECT * FROM `magic` WHERE `id` = \'' . $row['includemagic'] . '\' LIMIT 1'));
$incmagic['name'] = $row['includemagicname'];
$incmagic['cur'] = $row['includemagicdex'];
$incmagic['max'] = $row['includemagicmax'];
if (!$magic) {
$magic['chanse'] = $incmagic['chanse'];
$magic['time'] = $incmagic['time'];
$magic['targeted'] = $incmagic['targeted'];
}
if (isset($row['id'])) {
$r .= '<div id="inv_' . $row['id'] . '"><table><tbody>';
$r .= '<tr valign="top" style="border: 2px groove threedface;">';
$r .= '<td class="even links original"><img src="/i/sh/' . $row['img'] . '">
<span class="pk-new">
<a href="javascript: void(0);" style="display: none;">' . $ntxt . '</a><a href="?search=1&otdel=' . $row['otdel'] . '&place=' . $place . '&itm=' . $row['id'] . '&set=1" name="imt" id="itm_' . $row['id'] . '">' . $txt . '</a>
</span></td>';
$r .= '<input type="hidden" name="itid" value="' . $row['id'] . '" />';
$r .= '<td class="even item">';
$r .= '<div class="thinginfo"><a href="javascript: void(0);">' . $row['name'] . '</a> <img src="/i/align_' . $row['nalign'] . '.gif" /> (масса: ' . $row['massa'] . ') ' . (($row['present']) ? ' <img src="i/podarok.gif" width="16" height="18" title="Этот предмет вам подарил ' . $row['present'] . '. Вы не сможете передать этот предмет кому-либо еще." />' : "") . '<br />';
if ($row['ecost'] > 0) {
$r .= '<b>Цена: ' . $row['ecost'] . ' екр.</b> &nbsp; &nbsp;<br />';
} elseif ($row['point'] > 0) {
$r .= '<b>Цена: <font color=blue>' . $row['point'] . ' реп.</font></b> &nbsp; &nbsp;<br />';
} else {
$r .= '<b>Цена: ' . $row['cost'] . ' кр.</b> &nbsp; &nbsp;<br />';
}
if ($row['zeton'] > 0) {
$r .= '<b>Жетон: ' . $row['zeton'] . '</b>&nbsp<br />';
}
$r .= 'Долговечность: ' . $row['duration'] . '/' . $row['maxdur'] . '<br />';
if (!$row['needident']) {
if ($magic['chanse']) {
if ($magic['chanse'] >= 95) {
$magic['chanse'] = 95;
}
$r .= 'Вероятность срабатывания: ' . $magic['chanse'] . '%<br />';
}
if ($magic['time']) {
$r .= 'Продолжительность действия магии: ' . $magic['time'] . ' мин.<br />';
}
if ($row['goden']) {
$r .= 'Срок годности: ' . $row['goden'] . ' дн. (до ' . date("Y.m.d H:i", $row['dategoden']) . ')<br />';
}
$r .= '<div class="need">';
$user = [];
if ($row['nsila']) {
$r .= '&bull; ';
if ($row['nsila'] > $user['sila']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Сила: ' . $row['nsila'] . '</span><br />';
}
if ($row['nlovk']) {
$r .= '&bull; ';
if ($row['nlovk'] > $user['lovk']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Ловкость: ' . $row['nlovk'] . '</span><br />';
}
if ($row['ninta']) {
$r .= '&bull; ';
if ($row['ninta'] > $user['inta']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Интуиция: ' . $row['ninta'] . '</span><br />';
}
if ($row['nvinos']) {
$r .= '&bull; ';
if ($row['nvinos'] > $user['vinos']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Выносливость: ' . $row['nvinos'] . '</span><br />';
}
if ($row['nlevel']) {
$r .= '&bull; ';
if ($row['nlevel'] > $user['level']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Уровень: ' . $row['nlevel'] . '</span><br />';
}
if ($row['nintel']) {
$r .= '&bull; ';
if ($row['nintel'] > $user['intel']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Интеллект: ' . $row['nintel'] . '</span><br />';
}
if ($row['nnoj']) {
$r .= '&bull; ';
if ($row['nnoj'] > $user['noj']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Мастерство владения ножами и кастетами: ' . $row['nnoj'] . '</span><br />';
}
if ($row['ntopor']) {
$r .= '&bull; ';
if ($row['ntopor'] > $user['topor']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Мастерство владения топорами и секирами: ' . $row['ntopor'] . '</span><br />';
}
if ($row['ndubina']) {
$r .= '&bull; ';
if ($row['ndubina'] > $user['dubina']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Мастерство владения дубинами и булавами: ' . $row['ndubina'] . '</span><br />';
}
if ($row['nmech']) {
$r .= '&bull; ';
if ($row['nmech'] > $user['mech']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Мастерство владения мечами: ' . $row['nmech'] . '</span><br />';
}
if ($row['nfire']) {
$r .= '&bull; ';
if ($row['nfire'] > $user['mfire']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Магия Огня: ' . $row['nfire'] . '</span><br />';
}
if ($row['nwater']) {
$r .= '&bull; ';
if ($row['nwater'] > $user['mwater']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Магия Воды: ' . $row['nwater'] . '</span><br />';
}
if ($row['nair']) {
$r .= '&bull; ';
if ($row['nair'] > $user['mair']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Магия Воздуха:: ' . $row['nair'] . '</span><br />';
}
if ($row['nearth']) {
$r .= '&bull; ';
if ($row['nearth'] > $user['mearth']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Магия Земли: ' . $row['nearth'] . '</span><br />';
}
if ($row['nlight']) {
$r .= '&bull; ';
if ($row['nlight'] > $user['mlight']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Магия Света: ' . $row['nlight'] . '</span><br />';
}
if ($row['ngray']) {
$r .= '&bull; ';
if ($row['ngray'] > $user['mgray']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Магия Равновесия: ' . $row['ngray'] . '</span><br />';
}
if ($row['ndark']) {
$r .= '&bull; ';
if ($row['ndark'] > $user['mdark']) {
$r .= '<span class="red">';
}
$r .= 'Требуется Магия Тьмы: ' . $row['ndark'] . '</span><br />';
}
$r .= '</div><br />';
$r .= '<div class="bonus">';
if ($row['minu']) $r .= '+' . $row['minu'] . ' Минимальное наносимое повреждение <br />';
if ($row['maxu']) $r .= '+' . $row['maxu'] . ' Максимальное наносимое повреждение <br />';
if ($row['gsila']) $r .= '+' . $row['gsila'] . ' Сила <br />';
if ($row['glovk']) $r .= '+' . $row['glovk'] . ' Ловкость <br />';
if ($row['ginta']) $r .= '+' . $row['ginta'] . ' Интуиция <br />';
if ($row['gintel']) $r .= '+' . $row['gintel'] . ' Интеллект <br />';
if ($row['ghp']) $r .= '+' . $row['ghp'] . ' Уровень жизни <br />';
if ($row['mfkrit']) $r .= '+' . $row['mfkrit'] . '% Мф. критических ударов <br />';
if ($row['mfakrit']) $r .= '+' . $row['mfakrit'] . '% Мф. против крит. ударов <br />';
if ($row['mfuvorot']) $r .= '+' . $row['mfuvorot'] . '% Мф. увертливости <br />';
if ($row['mfauvorot']) $r .= '+' . $row['mfauvorot'] . '% Мф. против увертливости <br />';
if ($row['gnoj']) $r .= '+' . $row['gnoj'] . ' Мастерство владения ножами и кастетами <br />';
if ($row['gtopor']) $r .= '+' . $row['gtopor'] . ' Мастерство владения топорами и секирами <br />';
if ($row['gdubina']) $r .= '+' . $row['gdubina'] . ' Мастерство владения дубинами и булавами <br />';
if ($row['gmech']) $r .= '+' . $row['gmech'] . ' Мастерство владения мечами <br />';
if ($row['gfire']) $r .= '+' . $row['gfire'] . ' Мастерство владения стихией Огня <br />';
if ($row['gwater']) $r .= '+' . $row['gwater'] . ' Мастерство владения стихией Воды <br />';
if ($row['gair']) $r .= '+' . $row['gair'] . ' Мастерство владения стихией Воздуха <br />';
if ($row['gearth']) $r .= '+' . $row['gearth'] . ' Мастерство владения стихией Земли <br />';
if ($row['glight']) $r .= '+' . $row['glight'] . ' Мастерство владения магией Светa <br />';
if ($row['ggray']) $r .= '+' . $row['ggray'] . ' Мастерство владения Cерой магией <br />';
if ($row['gdark']) $r .= '+' . $row['gdark'] . ' Мастерство владения магией Тьмы <br />';
if ($row['bron1']) $r .= '+' . $row['bron1'] . ' Броня головы <br />';
if ($row['bron2']) $r .= '+' . $row['bron2'] . ' Броня корпуса <br />';
if ($row['bron3']) $r .= '+' . $row['bron3'] . ' Броня пояса <br />';
if ($row['bron4']) $r .= '+' . $row['bron4'] . ' Броня ног <br />';
if ($row['gmeshok']) $r .= '+' . $row['gmeshok'] . ' Увеличивает рюкзак: <br />';
$r .= '</div">';
if ($row['letter']) $r .= 'На бумаге записан текст: <div style="background-color:#FAF0E6;"> ' . nl2br($row['letter']) . '</div><br />';
if ($magic['name'] && $row['type'] != 50) $r .= '<span style="color: maroon;">Наложены заклятия:</span> ' . $magic['name'] . '<br />';
if ($row['text']) $r .= 'На ручке выгравирована надпись: <center>' . $row['text'] . '</center><br />';
if ($incmagic['max']) $r .= 'Встроено заклятие <img src="i/magic/' . $incmagic['img'] . '" /> ' . $incmagic['cur'] . ' шт.<br />';
if ($row['podzem']) $r .= '<span style="font-size: 11px; color: #990000">Предмет из подземелья</span><br />';
if ($row['laba'] == 1) $r .= '<span style="font-size: 11px; color: #990000">Пропадёт если не найти выход</span><br />';
if ($row['laba'] == 2) $r .= '<span style="font-size: 11px; color: #990000">Предмет пропадёт после выхода</span><br />';
if ($row['isrep']) $r .= '<small><span style="color: maroon;">Предмет не подлежит ремонту</span></small><br />';
if ($row['free_bron']) $r .= '+' . $row['free_bron'] . ' Улучшений брони <br />';
if ($row['free_stat']) $r .= '+' . $row['free_stat'] . ' Улучшений параметров <br />';
if ($row['free_mf']) $r .= '+' . $row['free_mf'] . ' Улучшений модификаторов <br />';
$r .= '</div>';
} else {
$r .= '<span style="color: maroon;"><b>Свойства предмета не идентифицированы</b></span><br />';
}
$osob = [22, 23];
if (in_array($row['type'], $osob)) {
$r .= 'Особенности:<br />';
if ($row['type'] == 22) {
$r .= '&bull; может одеваться под броню';
} elseif ($row['type'] == 23) {
$r .= '&bull; может одеваться на броню';
}
}
$r .= '</td>';
$r .= '</tr>';
$r .= '</tbody></table></div>';
}
return $r;
}
function show_itm_hostel($uid, $otdel, $type = 1)
{
$r = '';
if ($type != 1) {
$sql = $uid;
$txt = 'В сундук';
} else {
$sql = '-101' . $uid . '';
$txt = 'В инвентарь';
}
$data = mysql_query("SELECT * FROM `inventory` WHERE `otdel` = '{$otdel}' AND `owner` = " . $sql . " AND `dressed`='0' ORDER BY `id` ASC");
while ($pl = mysql_fetch_array($data)) {
$r .= show_item($pl, 10, $txt, $type);
}
if ($r == '') {
$r = '<tr><td width="100%" align="center" class="even"><center><b>Пусто. <br />Попробуйте другой вариант фильтрации.</center></b></td></tr>';
}
return $r;
}
if ($user['vip'] > 0 && $user['vip_time'] > time()) {
$count = $base[$hostel['type']];
$count += floor($base[$hostel['type']] * $vips[$user['vip']]);
} else {
$count = $base[$hostel['type']];
}
if ($_GET['search']) {
$r = show_itm_hostel($user['id'], (int)$_GET['otdel'], (int)$_GET['place']);
} else {
$r = '<tr><td width="100%" align="center" class="even" style="text-align: center;"><b><center>Поиск ...</center></b></td></tr>';
}
if ($_GET['set'] && $_GET['set'] == 1) {
$it = mysql_fetch_array(mysql_query('SELECT `id`, `owner` FROM `inventory` WHERE `id` = "' . (int)$_GET['itm'] . '" LIMIT 1'));
if (isset($it['id'])) {
if ($it['owner'] == $user['id']) {
if ($in['cnt'] < $count) {
mysql_query('UPDATE `inventory` SET `owner` = "-101' . $user['id'] . '" WHERE `id` = "' . $it['id'] . '" LIMIT 1');
$in['cnt']++;
} else {
$error = 'Не хватает места ...';
}
} elseif ($it['owner'] == '-101' . $user['id']) {
mysql_query('UPDATE `inventory` SET `owner` = "' . $user['id'] . '" WHERE `id` = "' . $it['id'] . '" LIMIT 1');
$in['cnt']--;
}
}
unset($it);
header('Location: hostel_room.php?search=1&otdel=' . $_GET['otdel'] . '&place=' . $_GET['place']);
}
if ($_GET['search']) {
$r = show_itm_hostel($user['id'], (int)$_GET['otdel'], (int)$_GET['place']);
}
#######
$w = (270 * get_meshok()->currentweight / get_meshok()->allweight);
$w_a = 270 - $w;
$h = (270 * $in['cnt'] / $count);
$h_a = 270 - $h;
#######
if ($_GET['go_back'] == 1) {
mysql_query('UPDATE `users`,`online` SET `users`.`room` = 660, `online`.`room` = 660 WHERE `users`.`id` = "' . $user['id'] . '" AND `online`.`id` = "' . $user['id'] . '"');
header('Location: hostel.php');
}
Template::header('hostel_room');
?>
<script src="js/ajaxLoad.js"></script>
<link rel="stylesheet" type="text/css" href="css/hostel.css"/>
<div class="contentContainer" id="hostelContainer">
<div id="systemMsg" class="system-msg"></div>
<div class="buttonContainer">
<input type="button" class="btns" value="Обновить" onclick="location.href='hostel_room.php';"/>
<input type="button" class="btns button-route" value="Спуститься" onclick="location.href='?go_back=1';"/>
<h1>Комнатуха</h1>
</div>
<style type="text/css">
.hides {
display: none;
}
#hstInventory td.item {
width: 85%;
}
#hstInventory td.links {
text-align: center;
vertical-align: middle;
width: 117px;
}
#hstInventory td.links span {
display: block;
}
#hstInventory td.original span.pk-current {
display: none;
}
#hstInventory td.moved {
font-weight: bold;
}
#hstInventory td.odd {
background-color: #c7c7c7;
}
#hstInventory td.even {
background-color: #d5d5d5;
}
label {
font-weight: bold;
margin-right: 15px;
}
</style>
<script>
function hide_this(id) {
const node = document.getElementById(id);
if (node) {
node.style.display = 'none';
}
}
</script>
<div style="overflow: hidden;">
<fieldset id="hstInventoryA" style="width: 377px; float: left; text-align: center;">
<legend>Фильтр инвентаря</legend>
<div style="height: 53px">
<form method="GET">
<input type="radio" class="radio" id="hstF1" name="place" value="2"/><label
for="hstF1">мешок</label>
<input type="radio" class="radio" id="hstF2" name="place" value="1"/><label
for="hstF2">сундук</label>
<div style="height: 5px;overflow: hidden;"></div>
<select name="otdel">
<option value="-1">&nbsp;</option>
<optgroup label="Оружие">
<option value="1">кастеты,ножи</option>
<option value="11">топоры</option>
<option value="12">дубины,булавы</option>
<option value="13">мечи</option>
</optgroup>
<optgroup label="Одежда">
<option value="2">сапоги</option>
<option value="21">перчатки</option>
<option value="22">легкая броня</option>
<option value="23">тяжелая броня</option>
<option value="24">шлемы</option>
</optgroup>
<optgroup label="Щиты">
<option value="3">щиты</option>
</optgroup>
<optgroup label="Ювелирные товары">
<option value="4">серьги</option>
<option value="41">ожерелья</option>
<option value="42">кольца</option>
</optgroup>
<optgroup label="Заклинания">
<option value="5">нейтральные</option>
<option value="51">боевые и защитные</option>
</optgroup>
<optgroup label="Амуниция">
<option value="6">амуниция</option>
</optgroup>
</select>&nbsp;
<input type="submit" class="button" style="margin-right: 20px;" value="Поиск" name="search"/>
</form>
</div>
</fieldset>
<fieldset id="hstInventoryB">
<legend>Состояние</legend>
<div style="height: 53px">
<div class="progressBar" style='height:14px'><img title="Мешок за спиной" src="/i/bag.gif"
height="14px"><img title="Мешок за спиной"
src="/i/660000.gif"
style="width: <?= $w; ?>px; height: 14px;"><img
title="Мешок за спиной" src="/i/1silver.gif"
style=" width: <?= $w_a; ?>px; height:14px"><tt
style="font-size:13px"> <?= InventoryItem::getWeightData() ?> </tt></div>
<div class="progressBar" style='height:14px'><img title="Заполнение сундука" src="/i/chest.gif"
height="14px"><img title="Заполнение сундука"
src="/i/1blue.gif"
style=" width: <?= $h; ?>px; height:14px"><img
title="Заполнение сундука" src="/i/1silver.gif"
style=" width: <?= $h_a; ?>px; height:14px"><tt
style="font-size:13px"> <?= $in['cnt']; ?>/<?= $count; ?></tt></div>
</div>
</fieldset>
</div>
<div id="hstInventory" style="width: 100%; background-color: #a5a5a5;">
<?= $r; ?>
</div>
<?php
if (!empty($error)) {
echo sprintf('<div style="text-align: center; font-weight: bold; color: #f80000;">%s</div>', $error);
}