<?php use Battles\DressedItems; use Battles\GameLogs; use Battles\InventoryItem; use Battles\Template; use Battles\Travel; use Battles\UserInfo; ob_start("ob_gzhandler"); session_start(); $get = filter_input(INPUT_SERVER, 'QUERY_STRING'); if ($get == 'exit') { session_destroy(); header("Location: fight.php"); } require_once 'functions.php'; try { db::c()->query('UPDATE `online` SET `real_time` = ?i WHERE `user_id` = ?i', time(), $user->id); } catch (\Krugozor\Database\Mysql\Exception $e) { echo "<div class='debug' '>Ошибка: " . $e->getMessage() . "<br> Стек: " . $e->getTraceAsString() . "</div>"; } // Инициализируем входящие GET\POST переменные. $goto = $_GET['goto'] ?? null; $obraz = $_GET['obraz'] ?? null; $del = $_GET['del'] ?? null; $effectId = $_GET['efid'] ?? null; $brons = $_GET['modif_bron'] ?? null; $stats = $_GET['modif_stat'] ?? null; $mfs = $_GET['modif_mf'] ?? null; $ids = $_GET['ids'] ?? null; $setShadow = $_POST['setshadow'] ?? null; $edit = $_GET['edit'] ?? null; // Подготавливаем отображение инфы и предметов. $userInfo = new UserInfo($user->id); $getItemsBonuses = new DressedItems($_SESSION['uid']); $data_query = 'SELECT * FROM inventory WHERE owner_id = ?i AND dressed_slot = 0 AND on_sale = 0'; $data = db::c()->query($data_query, $_SESSION['uid']); $iteminfo = []; while ($row = $data->fetch_assoc()) { $iteminfo[] = new InventoryItem($row); } //Обработчики нажатий на кнопки. if ($_POST['battlefield'] ?? 0 && $user->room == 1) { header('Location: zayavka.php'); exit(); } if ($_POST['module_quest'] ?? 0) { header('Location: module_quest.php'); exit(); } if ($_POST['move_inside'] ?? 0 && $user->room == 20) { header('Location: main.php?goto=arena'); exit(); } if ($_POST['move_outside'] ?? 0 && $user->room == 1) { header('Location: main.php?goto=plo'); exit(); } if ($_POST['main_page'] ?? 0) { header('Location: main.php'); exit(); } if ($edit === null) { /* === проверяем соответствие комнаты и скрипта === */ if (in_array($user->room, [20, 21, 26, 48, 51, 52, 651, 2655, 2601, 2701, 2702, 2111])) { header('Location: city.php'); exit(); } if (in_array($user->room, [22, 23, 25, 27, 29, 30, 31, 34, 45, 53, 61, 402, 403, 600, 601, 602, 603, 620, 621, 650, 660, 661, 662, 666, 760, 1051, 1052, 1055])) { header('location: ' . Travel::$roomFileName[$user->room]); exit(); } } function del_efs($id, $type) { if ($id && !in_array($type, [2, 3, 4, 5, 8, 10, 11, 12, 13, 14, 20])) { db::c()->query('DELETE FROM users_effects WHERE owner_id = ?i AND effect_id = ?i', $_SESSION['uid'], $id); if ($type == 1022) { db::c()->query('UPDATE `users` SET `invis` = 0 WHERE `id` = ?i', $_SESSION['uid']); } return 'Эффект удалён.'; } else { return 'Эффект нельзя удалить.'; } } // одеть предмет function dressitem($id) { //bug #7 define('HELMET', 1); define('ARMOR', 2); define('LEGS', 3); define('BOOTS', 4); define('GLOVES', 5); define('WEAPON', 6); define('SHIELD', 7); define('BELT', 8); define('RING', 9); define('AMULET', 10); define('DRESSITEM_ERROR', [ 'TOO_MANY_ITEMS_IN_SLOTS' => 'Критическая ошибка: Переполнение слота!', 'UNKNOWN_ITEM_TYPE' => 'Неизвестный тип предмета!', 'ITEM_NOT_FOUND' => 'Предмет не найден!', ]); $itemInSlot = []; $selectedItemRow = db::c()->query('SELECT item_type FROM `inventory` WHERE item_id = ?i AND owner_id = ?i AND `dressed_slot` = 0', $id, $_SESSION['uid']); if ($selectedItemRow->getNumRows()) { $selectedItem = $selectedItemRow->fetch_object(); $itemInSlotRow = db::c()->query('SELECT dressed_slot FROM inventory WHERE owner_id = ?i AND dressed_slot > 0 AND item_type = ?i', $_SESSION['uid'], $selectedItem->item_type); $itemInSlotQuantity = $itemInSlotRow->getNumRows(); if ($itemInSlotQuantity) { while ($row = $itemInSlotRow->fetch_object()) { $itemInSlot[] = $row->dressed_slot; } } if (in_array($selectedItem->item_type, [HELMET, ARMOR, LEGS, BOOTS, GLOVES, WEAPON, SHIELD, BELT, AMULET])) { //работаем с нормальными слотами if (!$itemInSlotQuantity) { // просто одеваем предмет db::c()->query('UPDATE inventory SET dressed_slot = item_type WHERE item_id = ?i', $id); } elseif ($itemInSlotQuantity == 1) { // снимаем предмет и одеваем вместо db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ?i', $itemInSlot[0]); db::c()->query('UPDATE inventory SET dressed_slot = item_type WHERE item_id = ?i', $id); } else { // невозможная ситуация - два предмета в одиночном слоте. критическая ошибка, запись в лог, раздевание. $error = DRESSITEM_ERROR['TOO_MANY_ITEMS_IN_SLOTS']; db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot BETWEEN 1 AND 12 AND owner_id = ?i', $_SESSION['uid']); } } elseif ($selectedItem->item_type == RING) { // работаем с кольцами if ($itemInSlotQuantity < 3) { // Сравниваем массив колец и массив слотов для колец. $emptyRingSlots = array_diff([9, 10, 11], $itemInSlot); // Сортируем массив свободных слотов по возрастанию. sort($emptyRingSlots); // Одеваем предмет в первый свободный слот. db::c()->query('UPDATE inventory SET dressed_slot = ?i WHERE item_id = ?i', $emptyRingSlots[0], $id); } elseif ($itemInSlotQuantity == 3) { db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = 11'); db::c()->query('UPDATE inventory SET dressed_slot = 11 WHERE item_id = ?i', $id); // снимаем предмет из слота 11 и одеваем вместо } else { // невозможная ситуация - больше трёх предметов на три слота. критическая ошибка, запись в лог, раздевание. $error = DRESSITEM_ERROR['TOO_MANY_ITEMS_IN_SLOTS']; db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot BETWEEN 1 AND 12 AND owner_id = ?i', $_SESSION['uid']); } } else { //предмет вообще не должен одеваться, ошибка $error = DRESSITEM_ERROR['UNKNOWN_ITEM_TYPE']; } } else { //с предметом что-то сильно не ок, ошибка. $error = DRESSITEM_ERROR['ITEM_NOT_FOUND']; } if (isset($error)) { return $error; } else { return null; } } // Входим и выходим если можем. if ($goto) { $imove = true; $d = db::c()->query('SELECT SUM(weight) AS sum_weight FROM inventory WHERE owner_id = ?i AND on_sale = 0', $user->id)->fetch_assoc(); $eff = db::c()->query('SELECT 1 FROM `users_effects` WHERE `owner_id` = ?i AND (`type` = 14 OR `type` = 13)', $user->id); //(масса: <?= $getItemsBonuses->getItemsWeight() . '/' . $user->strength * 4 if ($d['sum_weight'] > $user->strength * 4 && $goto) { err('У вас переполнен рюкзак, вы не можете передвигаться...'); $imove = false; } if ($eff->getNumRows() && $goto) { err('У вас тяжелая травма, вы не можете передвигатся...'); $imove = false; } if ($goto == 'plo' && !$user->zayavka && $imove && $user->room != 20) { db::c()->query('UPDATE users, online SET users.room = 20, online.room = 20 WHERE online.user_id = users.id AND online.user_id = ?i', $_SESSION['uid']); header('Location: city.php'); exit("<i>Топ-топ-топ...</i>"); } else { err('Подали заявку на бой и убегаете из клуба? Нехорошо...'); } if ($goto == 'arena' && $user->room == 20 && $imove) { db::c()->query('UPDATE users, online SET users.room = 1, online.room = 1 WHERE online.user_id = users.id AND online.user_id = ?i', $_SESSION['uid']); header('Location: main.php'); exit("<i>Топ-топ-топ...</i>"); } } if (isset($_GET['use'])) { usemagic($_GET['use'], $_POST['target']); } function setShadow($image) { global $user; $shadows = [ 'm01', 'm02', 'm03', 'm04', 'm05', 'm06', 'm07', 'm08', 'm09', 'm10', 'f01', 'f02', 'f03', 'f04', 'f05', 'f06', 'f07', 'f08', 'f09', 'f10', 'person', ]; if (in_array($image, $shadows)) { $i = $image . '.png'; db::c()->query('UPDATE `users` SET `shadow` = "?s" WHERE `id` = ?i', $i, $user->id); } else { err('Ошибка!'); } } if ($obraz && ($user->shadow == 'g0.gif' || $user->shadow == 'man0.gif')) { setShadow($obraz); } if ($del == 1 && $effectId > 0) { $pl = db::c()->query('SELECT type FROM users_effects WHERE owner_id = ?i AND effect_id = ?i', $user->id, $effectId)->fetch_assoc(); if (isset($pl['type'])) { echo del_efs($effectId, $pl['type']); } else { echo "<span class='error'>Эффект не найден!</span>"; } } if ($brons && $ids) { try { $cur = db::c()->query('SELECT free_bron, bron1, bron2, bron3, bron4 FROM inventory WHERE owner = ?i AND id = ?i', $user->id, $ids)->fetch_assoc(); } catch (\Krugozor\Database\Mysql\Exception $e) { echo "<div style='background-color: #ffaaaa;'>Ошибка: " . $e->getMessage() . "<br> В файле: " . $e->getFile() . " (" . $e->getLine() . ")</div>"; } if ($cur['free_bron'] > 0 && $cur[$brons] > 0) { db::c()->query('UPDATE inventory SET free_bron = free_bron - 1, ?f = ?f +1 WHERE owner_id = ?i AND item_id = ?i', $brons, $brons, $user->id, $ids); echo "<span class='success'>Параметр брони увеличен!</span>"; } } if ($stats && $ids) { $cur = db::c()->query('SELECT free_stat, gsila, glovk, ginta, gintel FROM inventory WHERE owner_id = ?i AND item_id = ?i', $user->id, $ids); if ($cur['free_stat'] > 0 && $cur[$stats] > 0) { db::c()->query('UPDATE inventory SET free_stat = free_stat - 1, ?f = ?f +1 WHERE owner_id = ?i AND item_id = ?i', $stats, $stats, $user->id, $ids); echo "<span class='success'>Параметр увеличен!</span>"; } } if ($mfs && $ids) { $cur = db::c()->query('SELECT free_mf, mfkrit, mfuvorot, mfakrit, mfauvorot FROM inventory WHERE owner_id = ?i AND item_id = ?i', $user->id, $ids); if (isset($cur['id']) && $cur['free_mf'] > 0 && $cur[$mfs] > 0) { db::c()->query('UPDATE inventory SET free_mf = free_mf - 1, ?f = ?f +1 WHERE owner_id = ?i AND item_id = ?i', $mfs, $mfs, $user->id, $ids); echo "<span class='success'>Параметр увеличен!</span>"; } } if ($setShadow) { Template::header('Образ персонажа'); ?> <div style="text-align: right;"> <input type=button value="Вернуться" onClick="location.href='main.php?edit=<?= mt_rand() ?>';" class="button"> </div> <table style="padding:5px; margin:auto;"> <caption><b style="color: red;">Внимание! Образ персонажа выбирается только один раз.</b></caption> <tr> <td><a href="?edit=1&obraz=m1"><img alt="m01" src="i/shadow/m1.gif"></a> <td><a href="?edit=1&obraz=m2"><img alt="m02" src="i/shadow/m2.gif"></a> <td><a href="?edit=1&obraz=m3"><img alt="m03" src="i/shadow/m3.gif"></a> <td><a href="?edit=1&obraz=m4"><img alt="m04" src="i/shadow/m4.gif"></a> <td><a href="?edit=1&obraz=m5"><img alt="m05" src="i/shadow/m5.gif"></a> <td><a href="?edit=1&obraz=m6"><img alt="m06" src="i/shadow/m6.gif"></a> <td><a href="?edit=1&obraz=m7"><img alt="m07" src="i/shadow/m7.gif"></a> <td><a href="?edit=1&obraz=m8"><img alt="m08" src="i/shadow/m8.gif"></a> <td><a href="?edit=1&obraz=m9"><img alt="m09" src="i/shadow/m9.gif"></a> <td><a href="?edit=1&obraz=m10"><img alt="m10" src="i/shadow/m10.gif"></a> <tr> <td><a href="?edit=1&obraz=f1"><img alt="f01" src="i/shadow/f1.gif"></a> <td><a href="?edit=1&obraz=f2"><img alt="f02" src="i/shadow/f2.gif"></a> <td><a href="?edit=1&obraz=f3"><img alt="f03" src="i/shadow/f3.gif"></a> <td><a href="?edit=1&obraz=f4"><img alt="f04" src="i/shadow/f4.gif"></a> <td><a href="?edit=1&obraz=f5"><img alt="f05" src="i/shadow/f5.gif"></a> <td><a href="?edit=1&obraz=f6"><img alt="f06" src="i/shadow/f6.gif"></a> <td><a href="?edit=1&obraz=f7"><img alt="f07" src="i/shadow/f7.gif"></a> <td><a href="?edit=1&obraz=f8"><img alt="f08" src="i/shadow/f8.gif"></a> <td><a href="?edit=1&obraz=f9"><img alt="f09" src="i/shadow/f9.gif"></a> <td><a href="?edit=1&obraz=f10"><img alt="f10" src="i/shadow/f10.gif"></a> </table> <?php exit(); } if ($edit) { $ups = $_GET['ups'] ?? null; $upm = $_GET['upm'] ?? null; $use = $_GET['use'] ?? null; $useTarget = $_POST['target'] ?? null; $drop = $_GET['drop'] ?? null; $dress = $_GET['dress'] ?? null; $undress = $_GET['undress'] ?? null; $destruct = $_GET['destruct'] ?? null; if ($ups) { $user->addOnePointToStat($ups); } if ($upm) { addOnePoint($upm, 'mastery'); } if ($drop) { $items = new DressedItems($_SESSION['uid']); $items->undressItem($drop); } //Пока что одеваем предмет отсюда. if ($dress) { echo dressitem($dress); } if ($destruct) { $q = db::c()->query('SELECT `id`, `dressed`, `name`, `duration`, `maxdur` FROM `inventory` WHERE `owner` = ?i AND `id` = ?i', $_SESSION['uid'], $destruct); if ($q->getNumRows()) { $q = $q->fetch_assoc(); if (empty($q['dressed'])) { destructitem($q['id']); GameLogs::addUserLog($user->id, $user->login . " выбросил предмет " . $q['name'] . " id:(cap" . $q['id'] . ")"); err('Предмет ' . $q['name'] . ' выброшен.'); } else { err('Ошибка: нельзя выбросить одетый предмет!'); } } else { err('Ошибка: предмет не найден!'); } } if ($use) { usemagic($use, $useTarget); } if ($undress) { undressall($_SESSION['uid']); } } Template::header('Игра'); ?> <script src="js/funcs.js"></script> <script> $(function () { $(".tooltip").tipTip({maxWidth: "auto", edgeOffset: 0, fadeIn: 300, fadeOut: 500}); }); let Hint3Name = ''; function okno(title, script, name, errk) { let errkom = ''; let com = ''; if (errk === 1) { errkom = 'Нельзя использовать символы: /\:*?"<>|+%<br>'; } document.getElementById("hint3").innerHTML = '<table width=100% cellspacing=1 cellpadding=0 bgcolor=CCC3AA><tr><td align=center><B>' + title + '</td><td width=20 align=right valign=top style="cursor: pointer" onclick="closehint3();"><BIG><B>x</td></tr><tr><td colspan=2>' + '<form action="' + script + '" method=POST><table width=100% cellspacing=0 cellpadding=2 bgcolor=FFF6DD><tr><INPUT TYPE=hidden name=sd4 value="6"><td colspan=2><span class="error">' + errkom + '</span>введите название предмета</TD></TR><TR><TD width=50% align=right><INPUT TYPE=text NAME="' + name + '" value="' + com + '"></TD><TD width=50%><INPUT TYPE="submit" value=" »» "></TD></TR></TABLE></FORM></td></tr></table>'; document.getElementById("hint3").style.visibility = "visible"; document.getElementById("hint3").style.left = '100'; document.getElementById("hint3").style.top = '100'; document.getElementById(name).focus(); Hint3Name = name; } </script> <div id=hint3 class=ahint></div> <div id="hint4" style="position: absolute;"></div> <div id="chpassbank" style="display:none; position:absolute; top:50px; left:250px;"></div> <table width=100%> <TR> <td style="vertical-align: top; width: 350px"> <?php $userInfo->showUserDoll(0, 1); ?> <!-- Первый столбец --> <div align="center"> <a href='main.php?edit=1&undress=all' class="button">Снять все</a><BR> <div class="effectList" style="padding-top: 15px; max-height: 150px; width: 220px;"> <?= show_eff_inf($user->id) ?> </div> </div> <br> </td> <td style="vertical-align: top; width: 250px"> <!-- Второй столбец --> <div> <br>Уровень: <strong><?= $user->level ?></strong> <br>Опыт: <strong><?= $user->experience ?></strong> <br>Побед: <strong>??</strong> <br>Поражений: <strong>??</strong> <br>Ничьих: <strong>??</strong> <br>Деньги: <strong><?= $user->money ?></strong> кр. <HR> </div> <!--Параметры--> <div> <div class="container"> Сила: <?= ($user->free_stat_points ? $user->getStat('strength', 1) . '(' . strval($user->strength + $getItemsBonuses->getStrengthBonus()) . ')' : $user->strength + $getItemsBonuses->getStrengthBonus()) ?> <br> Ловкость: <?= ($user->free_stat_points ? $user->getStat('dexterity', 1) . '(' . strval($user->dexterity + $getItemsBonuses->getDexterityBonus()) . ')' : $user->dexterity + $getItemsBonuses->getDexterityBonus()) ?> <br> Интуиция: <?= ($user->free_stat_points ? $user->getStat('intuition', 1) . '(' . strval($user->intuition + $getItemsBonuses->getIntuitionBonus()) . ')' : $user->intuition + $getItemsBonuses->getIntuitionBonus()) ?> <br> Выносливость: <?= ($user->free_stat_points ? $user->getStat('endurance', 1) . '(' . strval($user->endurance + $getItemsBonuses->getEnduranceBonus()) . ')' : $user->endurance + $getItemsBonuses->getEnduranceBonus()) ?> <br> Интеллект: <?= ($user->free_stat_points ? $user->getStat('intelligence', 1) . '(' . strval($user->intelligence + $getItemsBonuses->getIntelliganceBonus()) . ')' : $user->intelligence + $getItemsBonuses->getIntelliganceBonus()) ?> <br> Мудрость: <?= ($user->free_stat_points ? $user->getStat('wisdom', 1) . '(' . strval($user->wisdom + $getItemsBonuses->getWisdomBonus()) . ')' : $user->wisdom + $getItemsBonuses->getWisdomBonus()) ?> <br> <?php if ($user->free_stat_points): ?> <small style="color: darkgreen;">Возможных увеличений: <?= $user->free_stat_points ?></small><br> <?php endif; ?> <br> Здоровье: <?= $user->getHealth() ?><br> Пыль: <?= $user->getMana() ?><br> Уворот: <?= $getItemsBonuses->getEvasionBonus() ?><br> Точность: <?= $getItemsBonuses->getAccuracyBonus() ?><br> Шанс крита: <?= $getItemsBonuses->getCriticalsBonus() ?><br> Урон: <?= $user->minDamage + $getItemsBonuses->getMinPhysDamage() ?> - <?= $user->maxDamage + $getItemsBonuses->getMaxPhysDamage() ?> <br> <br> Защита от огня: ?? <br> Защита от воды: ?? <br> Защита от вохдуха: ?? <br> Защита от земли: ?? <br> Защита от яда: ?? <br> Броня головы: <?= $user->headArmor ?> <br> Броня корпуса: <?= $user->chestArmor ?> <br> Броня ног: <?= $user->legArmor ?> <br> </div> </div> </td> <td valign=top> <div class="button-container"> <!--Меню-кнопки--> <FORM METHOD=POST ACTION="?edit=1" name=f1> <?php if ($user->shadow == '0.gif' || $user->admin == 1): ?> <INPUT class="button primary icon user" TYPE="submit" name="setshadow" value="Образы" title="Образы"> <?php endif; ?> <div class="button-group"> <?php if ($user->room == 20): ?> <input class="button icon move" type="submit" name="move_inside" value="Войти внутрь"> <?php elseif ($user->room == 1): ?> <input class="button primary" type="submit" name="battlefield" value="Поединки"> <input class="button icon move" type="submit" name="move_outside" value="Выйти на улицу"> <?php endif; ?> <input class="button" type="submit" name="module_quest" value="Активные задания"> <input class="button" type="submit" name="main_page" value="На главную"> </div> </div> <div> <!--рюкзак--> <table BORDER=0 WIDTH=100% CELLSPACING="1" CELLPADDING="2" BGCOLOR="#A5A5A5"> <caption>Рюкзак (масса: <?= '?? /' . $user->strength * 4 ?>) </caption> <?php foreach ($iteminfo as $ii) { echo "<tr><td width='100' align='center' bgcolor='#d3d3d3'>"; $ii->printImage(); $ii->printControls(); echo "<td valign='top' bgcolor='#d3d3d3'>"; $ii->printInfo(); } if ($data->getNumRows() == 0) { echo "<tr><th colspan='3' align=center bgcolor=#C7C7C7>Пусто"; } ?> </table> </div> </td> </tr> </table>