query('UPDATE `online` SET `real_time` = ?i WHERE `user_id` = ?i', time(), $user->id); } catch (\Krugozor\Database\Mysql\Exception $e) { echo "
Ошибка: " . $e->getMessage() . "
Стек: " . $e->getTraceAsString() . "
"; } if ($user->battle) { header('location: fbattle.php'); exit(); } //БС if ($user->in_tower == 1) { header('Location: towerin.php'); exit(); } // Инициализируем входящие 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; // Подготавливаем отображение инфы и предметов. $showUser = new User($_SESSION['uid']); $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 (in_array($user->room, [20, 21, 26, 48, 51, 52, 651, 2655, 2601, 2701, 2702, 2111], 1)) { header('Location: city.php'); exit(); } if ($user->room == 22) { header('Location: shop.php'); exit(); } if ($user->room == 23) { header('Location: repair.php'); exit(); } if ($user->room == 25) { header('Location: comission.php'); exit(); } if ($user->room == 27) { header('Location: post.php'); exit(); } if ($user->room == 29) { header('Location: bank.php'); exit(); } if ($user->room == 31) { header('Location: tower.php'); exit(); } if ($user->room == 30) { header('Location: clan_create.php'); exit(); } if ($user->room == 34) { header('Location: fshop.php'); exit(); } if ($user->room == 42) { header('Location: lotery.php'); exit(); } if ($user->room == 43) { header('Location: znahar.php'); exit(); } if ($user->room == 44) { header('Location: new_year.php'); exit(); } if ($user->room == 45) { header('Location: clan_castle.php'); exit(); } if ($user->room == 47) { header('Location: wall_build.php'); exit(); } if ($user->room == 49) { header('Location: dig.php'); exit(); } if ($user->room == 50) { header('Location: ashop.php'); exit(); } if ($user->room == 53) { header('Location: library.php'); exit(); } if ($user->room == 61) { header('Location: akadem.php'); exit(); } if ($user->room == 650) { header('Location: ul_clans.php'); exit(); } //Храм древнх if ($user->room == 203) { header('Location: church.php'); exit(); } //ЦХ if ($user->room == 600) { header('Location: c_haos.php'); exit(); } if ($user->room == 601) { header('Location: c_haos_in.php'); exit(); } if ($user->room == 602) { header('Location: c_park.php'); exit(); } if ($user->room == 603) { header('Location: aren_of_angels.php'); exit(); } if ($user->room == 620) { header('Location: enter_cave.php'); exit(); } if ($user->room == 621) { header('Location: cave.php'); exit(); } if ($user->room == 660) { header('Location: hostel.php'); exit(); } if ($user->room == 661) { header('Location: hostel_room.php'); exit(); } if ($user->room == 662) { header('Location: quest_room.php'); exit(); } if ($user->room == 760) { header('Location: c_forest.php'); exit(); } if ($user->room == 1000) { header('Location: solib/enterbezdna.php'); exit(); } if ($user->room == 1001) { header('Location: solib/dungeon.php'); exit(); } if ($user->room == 1051) { header('Location: lab_enter.php'); exit(); } if ($user->room == 1052) { header('Location: labirint.php'); exit(); } if ($user->room == 402) { header('Location: vxod.php'); exit(); } if ($user->room == 403) { header('Location: canalizaciya.php'); exit(); } if ($user->room == 1054) { header('Location: fontan_luck.php'); exit(); } if ($user->room == 1055) { header('Location: group_arena.php'); exit(); } if ($user->room == 666) { header('Location: jail.php'); 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) { //FIXME Предметы не должны одеваться, если не соответствуют требованиям! 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); //(масса: getItemsWeight() . '/' . $showUser->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 === true) { db::c()->query('UPDATE users, online SET users.room = 20, online.room = 20 WHERE online.user_id = users.id AND online.users_id = ?i', $_SESSION['uid']); header('Location: city.php'); exit("Топ-топ-топ..."); } else { err('Подали заявку на бой и убегаете из клуба? Нехорошо...'); } if ($goto == 'arena' && $user->room === 20 && $imove === true) { 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("Топ-топ-топ..."); } } 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 "Эффект не найден!"; } } 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 "
Ошибка: " . $e->getMessage() . "
В файле: " . $e->getFile() . " (" . $e->getLine() . ")
"; } 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 "Параметр брони увеличен!"; } } 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 "Параметр увеличен!"; } } 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 "Параметр увеличен!"; } } if ($setShadow) { ?>
Внимание! Образ персонажа выбирается только один раз.
m01 m02 m03 m04 m05 m06 m07 m08 m09 m10
f01 f02 f03 f04 f05 f06 f07 f08 f09 f10
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']); addToDelo($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']); } } ?> Окно игры
showUserDoll(0, 1); ?>
Снять все
id, 2) ?>


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

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

Защита от огня: ??
Защита от воды: ??
Защита от вохдуха: ??
Защита от земли: ??
Защита от яда: ??
Броня головы: headArmor ?>
Броня корпуса: chestArmor ?>
Броня ног: legArmor ?>
shadow == '0.gif' || $user->admin == 1): ?>
room === 20): ?>
Рюкзак (масса: strength * 4 ?>)
"; $ii->printImage(); $ii->printControls(); echo ""; $ii->printInfo(); } if ($data->getNumRows() == 0) { echo "
Пусто"; } ?>