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);
//(масса: = $getItemsBonuses->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) {
?>
Внимание! Образ персонажа выбирается только один раз.
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); ?>
Уровень: = $showUser->level ?>
Опыт: = $showUser->experience ?>
Побед: ??
Поражений: ??
Ничьих: ??
Деньги: = $showUser->money ?> кр.
Сила: = ($showUser->free_stat_points ? $showUser->getStrength(1) . '(' . strval($showUser->strength + $getItemsBonuses->getStrengthBonus()) . ')' : $showUser->strength + $getItemsBonuses->getStrengthBonus()) ?>
Ловкость: = ($showUser->free_stat_points ? $showUser->getDexterity(1) . '(' . strval($showUser->dexterity + $getItemsBonuses->getDexterityBonus()) . ')' : $showUser->dexterity + $getItemsBonuses->getDexterityBonus()) ?>
Интуиция: = ($showUser->free_stat_points ? $showUser->getIntuition(1) . '(' . strval($showUser->intuition + $getItemsBonuses->getIntuitionBonus()) . ')' : $showUser->intuition + $getItemsBonuses->getIntuitionBonus()) ?>
Выносливость: = ($showUser->free_stat_points ? $showUser->getEndurance(1) . '(' . strval($showUser->endurance + $getItemsBonuses->getEnduranceBonus()) . ')' : $showUser->endurance + $getItemsBonuses->getEnduranceBonus()) ?>
Интеллект: = ($showUser->free_stat_points ? $showUser->getIntelligence(1) . '(' . strval($showUser->intelligence + $getItemsBonuses->getIntelliganceBonus()) . ')' : $showUser->intelligence + $getItemsBonuses->getIntelliganceBonus()) ?>
Мудрость: = ($showUser->free_stat_points ? $showUser->getWisdom(1) . '(' . strval($showUser->wisdom + $getItemsBonuses->getWisdomBonus()) . ')' : $showUser->wisdom + $getItemsBonuses->getWisdomBonus()) ?>
free_stat_points): ?>
Возможных
увеличений: = $showUser->free_stat_points ?>
Здоровье: = $showUser->getHealth() ?>
Пыль: = $showUser->getMana() ?>
Уворот: = $getItemsBonuses->getEvasionBonus() ?>
Точность: = $getItemsBonuses->getAccuracyBonus() ?>
Шанс крита: = $getItemsBonuses->getCriticalsBonus() ?>
Урон: = $showUser->minDamage + $getItemsBonuses->getMinPhysDamage() ?>
- = $showUser->maxDamage + $getItemsBonuses->getMaxPhysDamage() ?>
Защита от огня: ??
Защита от воды: ??
Защита от вохдуха: ??
Защита от земли: ??
Защита от яда: ??
Броня головы: = $showUser->headArmor ?>
Броня корпуса: = $showUser->chestArmor ?>
Броня ног: = $showUser->legArmor ?>
Рюкзак
(масса: = '?? /' . $showUser->strength * 4 ?>)
";
$ii->printImage();
$ii->printControls();
echo " ";
$ii->printInfo();
}
if ($data->getNumRows() == 0) {
echo " Пусто";
}
?>