query('UPDATE `online` SET `real_time` = ?i WHERE `user_id` = ?i', time(), $user->getId()); } catch (\Krugozor\Database\Mysql\Exception $e) { echo "
Ошибка: " . $e->getMessage() . "
Стек: " . $e->getTraceAsString() . "
"; } // Инициализируем входящие 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->getId()); $userStats = new UserStats($user->getId()); $getItemsBonuses = new DressedItems($_SESSION['uid']); $data = \Battles\Database\DBPDO::INIT()->ofetchAll('SELECT * FROM inventory WHERE owner_id = ? AND dressed_slot = 0 AND on_sale = 0', $user->getId()); $iteminfo = []; foreach ($data as $row) { $iteminfo[] = new InventoryItem($row); } //Обработчики нажатий на кнопки. if ($_POST['battlefield'] ?? 0 && $user->getRoom() == 1) { header('Location: zayavka.php'); exit(); } if ($_POST['module_quest'] ?? 0) { header('Location: module_quest.php'); exit(); } if ($_POST['move_inside'] ?? 0 && $user->getRoom() == 20) { header('Location: main.php?goto=arena'); exit(); } if ($_POST['move_outside'] ?? 0 && $user->getRoom() == 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->getRoom(), [20, 21, 26, 48, 51, 52, 651, 2655, 2601, 2701, 2702, 2111])) { header('Location: city.php'); exit(); } if (in_array($user->getRoom(), [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->getRoom()]); 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->getId())->fetch_assoc(); $eff = db::c()->query('SELECT 1 FROM `users_effects` WHERE `owner_id` = ?i AND (`type` = 14 OR `type` = 13)', $user->getId()); //(масса: getItemsWeight() . '/' . $user->strength * 4 if ($d['sum_weight'] > $userStats->getStrength() * 4 && $goto) { err('У вас переполнен рюкзак, вы не можете передвигаться...'); $imove = false; } if ($eff->getNumRows() && $goto) { err('У вас тяжелая травма, вы не можете передвигатся...'); $imove = false; } if ($goto == 'plo' && !$user->getZayavka() && $imove && $user->getRoom() != 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', $user->getId()); header('Location: city.php'); exit("Топ-топ-топ..."); } else { err('Подали заявку на бой и убегаете из клуба? Нехорошо...'); } if ($goto == 'arena' && $user->getRoom() == 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', $user->getId()); header('Location: main.php'); exit("Топ-топ-топ..."); } } if (isset($_GET['use'])) { usemagic($_GET['use'], $_POST['target']); } if ($obraz) { $user->setShadow($obraz); $user->saveShadow(); } if ($setShadow) { Template::header('Образ персонажа'); ?>
Внимание! Образ персонажа выбирается только один раз.
m01 m02 m03 m04 m05 m06 m07 m08 m09 m10
f01 f02 f03 f04 f05 f06 f07 f08 f09 f10
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->getId(), $user->getLogin() . " выбросил предмет " . $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('Игра'); ?>
showUserDoll(0, 1); ?>
Снять все
getId()) ?>


Уровень: getLevel() ?>
Опыт: getExperience() ?>
Побед: ??
Поражений: ??
Ничьих: ??
Деньги: getMoney() ?> кр.
Сила: getFreeStatPoints() ? $userStats->getStat('strength', 1) . '(' . strval($userStats->getStrength() + $getItemsBonuses->getStrengthBonus()) . ')' : $userStats->getStrength() + $getItemsBonuses->getStrengthBonus()) ?>
Ловкость: getFreeStatPoints() ? $userStats->getStat('dexterity', 1) . '(' . strval($userStats->getDexterity() + $getItemsBonuses->getDexterityBonus()) . ')' : $userStats->getDexterity() + $getItemsBonuses->getDexterityBonus()) ?>
Интуиция: getFreeStatPoints() ? $userStats->getStat('intuition', 1) . '(' . strval($userStats->getIntuition() + $getItemsBonuses->getIntuitionBonus()) . ')' : $userStats->getIntuition() + $getItemsBonuses->getIntuitionBonus()) ?>
Выносливость: getFreeStatPoints() ? $userStats->getStat('endurance', 1) . '(' . strval($userStats->getEndurance() + $getItemsBonuses->getEnduranceBonus()) . ')' : $userStats->getEndurance() + $getItemsBonuses->getEnduranceBonus()) ?>
Интеллект: getFreeStatPoints() ? $userStats->getStat('intelligence', 1) . '(' . strval($userStats->getIntelligence() + $getItemsBonuses->getIntelliganceBonus()) . ')' : $userStats->getIntelligence() + $getItemsBonuses->getIntelliganceBonus()) ?>
Мудрость: getFreeStatPoints() ? $userStats->getStat('wisdom', 1) . '(' . strval($userStats->getWisdom() + $getItemsBonuses->getWisdomBonus()) . ')' : $userStats->getWisdom() + $getItemsBonuses->getWisdomBonus()) ?>
getFreeStatPoints()): ?> Возможных увеличений: getFreeStatPoints() ?>

Здоровье: getHealth() ?>
Пыль: getMana() ?>
Уворот: getEvasionBonus() ?>
Точность: getAccuracyBonus() ?>
Шанс крита: getCriticalsBonus() ?>
Урон: getMinDamage() + $getItemsBonuses->getMinPhysDamage() ?> - getMaxDamage() + $getItemsBonuses->getMaxPhysDamage() ?>

Защита от огня: ??
Защита от воды: ??
Защита от вохдуха: ??
Защита от земли: ??
Защита от яда: ??
Броня головы: getHeadArmor() ?>
Броня корпуса: getChestArmor() ?>
Броня ног: getLegArmor() ?>
getShadow() == '0.gif' || $user->getAdmin() == 1): ?>
getRoom() == 20): ?> getRoom() == 1): ?>
Рюкзак (масса: getStrength() * 4 ?>)
"; $ii->printImage(); $ii->printControls(); echo ""; $ii->printInfo(); } if (!$data) { echo "
Пусто"; } ?>