diff --git a/classes/User.php b/classes/User.php index c5a3ff8..04c8e88 100644 --- a/classes/User.php +++ b/classes/User.php @@ -67,104 +67,6 @@ class User $this->maxMana = round(($this->wisdom * 3) + ($this->wisdom / 2) * ($this->level - 1) + ($this->wisdom / 5) * (($this->level - 1) * ($this->level - 2) / 2)); } - /** - * Отображает куклу персонажа (образ и слоты). - * - * @param int $isBattle - установить 1, если куклу нужно отобразить в поединке (показывает параметры при наведении - * на образ). - * @param int $isMain - установить 1, если куклу надо показать на странице игрока (по клику на предмет снимает - * его). - * - * @throws \Krugozor\Database\Mysql\Exception - */ - private function UserInfoDoll($isBattle = 0, $isMain = 0) - { - //https://jsfiddle.net/ngx0yvhc - //TODO переверстать grid, чтобы он касался только куклы. - $di = new DressedItems($this->id); - $dressedItems = $di->getItemsInSlots(); - for ($i = 1; $i <= 12; $i++) { - echo sprintf('
', $i); - if (!empty($dressedItems[$i])) { - if (!$isBattle && $isMain) { - $itemString = '%s'; - echo sprintf($itemString, $i, $dressedItems[$i]['image'], $dressedItems[$i]['name'], $dressedItems[$i]['name']); - } else { - $itemString = '%s%s'; - echo sprintf($itemString, $dressedItems[$i]['image'], $dressedItems[$i]['name'], $dressedItems[$i]['name']); - } - } else { - echo sprintf('Пустой слот [%s]', $i, $i); - } - echo sprintf('
', $i); - } - echo '
'; - if ($isBattle) { - $sh = '%s%sУровень: %s
Сила: %s
Ловкость: %s
Интуиция: %s
Выносливость: %s
Интеллект: %s
Мудрость: %s
'; - echo sprintf($sh, $this->shadow, $this->login, $this->login, $this->level, $this->strength, $this->dexterity, $this->intuition, $this->endurance, $this->intelligence, $this->wisdom); - unset($sh); - } else { - echo '' . $this->login . ''; - } - echo '
'; - } - - private function UserInfoStats($isMainWindow = 0) - { - $captions = 'Уровень:
Сила:
Ловкость:
Интуиция:
Выносливость:
Интеллект:
Мудрость:
Местонахождение:'; - $variables = - $this->level . '
' . - $this->getStat('strength') . '
' . - $this->getStat('dexterity') . '
' . - $this->getStat('intuition') . '
' . - $this->getStat('endurance') . '
' . - $this->getStat('intelligence') . '
' . - $this->getStat('wisdom') . '
' . - $this->getRoomName($this->room); - if ($isMainWindow) { - $this->Bank = new Bank($this->id); - $captions = 'Уровень:
Здоровье:
Сила:
Ловкость:
Интуиция:
Выносливость:
Интеллект:
Мудрость:
Опыт:
Очки характеристик:
Деньги:
Деньги в банке:'; - $variables = - $this->level . '
' . - $this->health . '
' . - $this->getStat('strength', 1) . '
' . - $this->getStat('dexterity', 1) . '
' . - $this->getStat('intuition', 1) . '
' . - $this->getStat('endurance', 1) . '
' . - $this->getStat('intelligence', 1) . '
' . - $this->getStat('wisdom', 1) . '
' . - $this->experience . '
' . - $this->free_stat_points . '
' . - $this->money . '
' . - $this->Bank->money; - } - if ($this->align) { - $nameString = sprintf('Склонность', $this->align); - } - if ($this->block) { - $nameString .= '' . $this->login . ''; - } else { - $nameString .= ' ' . $this->login . ' '; - } - if ($this->clan) { - $nameString .= sprintf('Клан', $this->clan); - } - echo '
'; - echo '
'; - echo '' . $nameString . ''; - echo '
'; - echo '
'; - echo '
'; - echo $captions; - echo '
'; - echo '
'; - echo $variables; - echo '
'; - echo '
'; - echo '
TODO: Сделать рассчёт модификаторов. Вывести полоску здоровья когда будет от чего отталкиваться.
'; - echo '
'; - } - /** * Отдаёт информацию о базовом(!) стате. * @param $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'. @@ -207,51 +109,7 @@ class User } - private function UserInfo() - { - echo '
'; - $this->UserInfoDoll(); - $this->UserInfoStats(); - echo '
'; - if ($this->married) { - echo sprintf('В браке с %s', $this->married, $this->married, $this->married); - } - echo '
'; - echo '
'; - echo sprintf('Родовой знак', $this->showStarSign()); - echo '
'; - echo '
'; - echo '
'; - echo '
'; - echo '

Об игроке

'; - if ($this->realname) { - echo sprintf('Имя: %s
', $this->realname); - } - if ($this->info) { - echo nl2br($this->info); - } - echo '
'; - - if ($this->watcherIsAdmin || $this->watcherIsModerator) { - echo '
'; - $infoString = 'E-Mail: %s
ДР Игрока: %s
IP Регистрации: %s'; - echo sprintf($infoString, $this->email, date('d.m.Y', strtotime($this->borndate)), $this->ip); - if ($this->watcherIsAdmin) { - $this->Bank = new Bank($this->id); - $infoString = '
ИД Игрока: %s
ИД Комнаты: %s
Деньги: %s
Деньги в банке: %s
Опыт: %s
Нераспределённые очки: %s
Текущая сессия: %s
'; - echo sprintf($infoString, $this->id, $this->room, $this->money, $this->Bank->money, $this->experience, $this->free_stat_points, $this->session_id); - } - $this->UserLogs = new UserLogModel($this->id); - echo '
Личное дело
'; - while ($userLogRow = $this->UserLogs->getUserLog()->fetch_object()) { - echo sprintf('%s
', date("d.m.Y H:i ", strtotime($userLogRow->date)) . $userLogRow->text); - } - echo '
'; - echo '
'; - } - } - - private function WatcherStatus() + protected function WatcherStatus() { $query = db::c()->query('SELECT `align`,`admin` FROM `users` WHERE `id` = ?i', $this->watcher_id)->fetch_assoc(); if ($query['admin']) { @@ -262,41 +120,7 @@ class User } } - public function showUserInfo() - { - $this->effects = new EffectsModel($this->id); - $this->WatcherStatus(); - - if ($this->block && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) { - throw new Exception('Персонаж ' . $this->login . ' заблокирован!'); - } elseif ($this->effects->getHideUserInfoStatus() && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) { - if ($this->effects->getHideUserInfoStatus() == -1) { - $date = 'навсегда'; - } else { - $date = 'до' . date('d.m.Y', strtotime($this->effects->getHideUserInfoStatus())); - } - throw new Exception('Персонаж ' . $this->login . ' обезличен ' . $date . '.'); - } else { - $this->UserInfo(); - } - } - - public function showUserDoll($isBattle = 0, $isMain = 0) - { - echo '
'; - $this->UserInfoDoll($isBattle, $isMain); - echo '
'; - } - - public function showUserInfoMain() - { - echo '
'; - $this->UserInfoDoll(); - $this->userInfoStats(1); - echo '
'; - } - - public function showStarSign() + protected function showStarSign() { /* * 1 aries @@ -347,9 +171,4 @@ class User { return $this->mana . '/' . $this->maxMana; } - - public function setRoom() - { - - } } \ No newline at end of file diff --git a/classes/UserInfo.php b/classes/UserInfo.php new file mode 100644 index 0000000..9c9bf4a --- /dev/null +++ b/classes/UserInfo.php @@ -0,0 +1,187 @@ +id); + $dressedItems = $di->getItemsInSlots(); + for ($i = 1; $i <= 12; $i++) { + echo sprintf('
', $i); + if (!empty($dressedItems[$i])) { + if (!$isBattle && $isMain) { + $itemString = '%s'; + echo sprintf($itemString, mt_rand(), $i, $dressedItems[$i]['image'], $dressedItems[$i]['name'], $dressedItems[$i]['name']); + } else { + $itemString = '%s%s'; + echo sprintf($itemString, $dressedItems[$i]['image'], $dressedItems[$i]['name'], $dressedItems[$i]['name']); + } + } else { + echo sprintf('Пустой слот [%s]', $i, $i); + } + echo sprintf('
', $i); + } + echo '
'; + if ($isBattle) { + $sh = '%s%sУровень: %s
Сила: %s
Ловкость: %s
Интуиция: %s
Выносливость: %s
Интеллект: %s
Мудрость: %s
'; + echo sprintf($sh, $this->shadow, $this->login, $this->login, $this->level, $this->strength, $this->dexterity, $this->intuition, $this->endurance, $this->intelligence, $this->wisdom); + unset($sh); + } else { + echo '' . $this->login . ''; + } + echo '
'; + } + + private function UserInfoStats($isMainWindow = 0) + { + $captions = 'Уровень:
Сила:
Ловкость:
Интуиция:
Выносливость:
Интеллект:
Мудрость:
Местонахождение:'; + $variables = + $this->level . '
' . + parent::getStat('strength') . '
' . + parent::getStat('dexterity') . '
' . + parent::getStat('intuition') . '
' . + parent::getStat('endurance') . '
' . + parent::getStat('intelligence') . '
' . + parent::getStat('wisdom') . '
' . + parent::getRoomName($this->room); + if ($isMainWindow) { + $this->Bank = new Bank($this->id); + $captions = 'Уровень:
Здоровье:
Сила:
Ловкость:
Интуиция:
Выносливость:
Интеллект:
Мудрость:
Опыт:
Очки характеристик:
Деньги:
Деньги в банке:'; + $variables = + $this->level . '
' . + $this->health . '
' . + parent::getStat('strength', 1) . '
' . + parent::getStat('dexterity', 1) . '
' . + parent::getStat('intuition', 1) . '
' . + parent::getStat('endurance', 1) . '
' . + parent::getStat('intelligence', 1) . '
' . + parent::getStat('wisdom', 1) . '
' . + $this->experience . '
' . + $this->free_stat_points . '
' . + $this->money . '
' . + $this->Bank->money; + } + $nameString = ''; + if ($this->align) { + $nameString = sprintf('Склонность', $this->align); + } + if ($this->block) { + $nameString .= '' . $this->login . ''; + } else { + $nameString .= ' ' . $this->login . ' '; + } + if ($this->clan) { + $nameString .= sprintf('Клан', $this->clan); + } + echo '
'; + echo '
'; + echo '' . $nameString . ''; + echo '
'; + echo '
'; + echo '
'; + echo $captions; + echo '
'; + echo '
'; + echo $variables; + echo '
'; + echo '
'; + echo '
TODO: Сделать рассчёт модификаторов. Вывести полоску здоровья когда будет от чего отталкиваться.
'; + echo '
'; + } + + private function Info() + { + echo '
'; + $this->UserInfoDoll(); + $this->UserInfoStats(); + echo '
'; + if ($this->married) { + echo sprintf('В браке с %s', $this->married, $this->married, $this->married); + } + echo '
'; + echo '
'; + echo sprintf('Родовой знак', $this->showStarSign()); + echo '
'; + echo '
'; + echo '
'; + echo '
'; + echo '

Об игроке

'; + if ($this->realname) { + echo sprintf('Имя: %s
', $this->realname); + } + if ($this->info) { + echo nl2br($this->info); + } + echo '
'; + + if ($this->watcherIsAdmin || $this->watcherIsModerator) { + echo '
'; + $infoString = 'E-Mail: %s
ДР Игрока: %s
IP Регистрации: %s'; + echo sprintf($infoString, $this->email, date('d.m.Y', strtotime($this->borndate)), $this->ip); + if ($this->watcherIsAdmin) { + $this->Bank = new Bank($this->id); + $infoString = '
ИД Игрока: %s
ИД Комнаты: %s
Деньги: %s
Деньги в банке: %s
Опыт: %s
Нераспределённые очки: %s
Текущая сессия: %s
'; + echo sprintf($infoString, $this->id, $this->room, $this->money, $this->Bank->money, $this->experience, $this->free_stat_points, $this->session_id); + } + $this->UserLogs = new UserLogModel($this->id); + echo '
Личное дело
'; + while ($userLogRow = $this->UserLogs->getUserLog()->fetch_object()) { + echo sprintf('%s
', date("d.m.Y H:i ", strtotime($userLogRow->date)) . $userLogRow->text); + } + echo '
'; + echo '
'; + } + } + + public function showUserInfo() + { + $this->effects = new EffectsModel($this->id); + $this->WatcherStatus(); + + if ($this->block && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) { + throw new Exception('Персонаж ' . $this->login . ' заблокирован!'); + } elseif ($this->effects->getHideUserInfoStatus() && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) { + if ($this->effects->getHideUserInfoStatus() == -1) { + $date = 'навсегда'; + } else { + $date = 'до' . date('d.m.Y', strtotime($this->effects->getHideUserInfoStatus())); + } + throw new Exception('Персонаж ' . $this->login . ' обезличен ' . $date . '.'); + } else { + $this->Info(); + } + } + + public function showUserDoll($isBattle = 0, $isMain = 0) + { + echo '
'; + $this->UserInfoDoll($isBattle, $isMain); + echo '
'; + } + + public function showUserInfoMain() + { + echo '
'; + $this->UserInfoDoll(); + $this->userInfoStats(1); + echo '
'; + } + +} \ No newline at end of file diff --git a/functions.php b/functions.php index 3453445..6f4c058 100644 --- a/functions.php +++ b/functions.php @@ -6,17 +6,11 @@ * Project name: Battles-Game */ require_once 'config.php'; -/** - * Класс-заглушка для работы глобальных переменных в функциях. - * Возвращает массив данных таблицы users. - */ if (isset($_SESSION['uid'])) { - //$user = (new users_row($_SESSION['uid']))->result(); $user = new User($_SESSION['uid']); } else { echo "Не могу проинициализировать игрока!"; } - if ($user->id && $user->block) { exit('user blocked!'); } diff --git a/inf.php b/inf.php index 80ac604..11ee4ea 100644 --- a/inf.php +++ b/inf.php @@ -3,10 +3,10 @@ session_start(); include_once 'config.php'; $login = urldecode($_SERVER['QUERY_STRING']) ?? ''; -$user = new User($login); -$presentsModel = new PresentsModel($user->id); +$userInfo = new UserInfo($login); +$presentsModel = new PresentsModel($userInfo->id); $presentsList = $presentsModel->getAllPresents(); -$user->watcher_id = $_SESSION['uid'] ?? null; +$userInfo->watcher_id = $userInfo->id ?? null; if (empty($user->id)): ?> @@ -31,7 +31,8 @@ if (empty($user->id)): ?> showUserInfo(); + $userInfo->showUserInfo(); + } catch (Exception $e_showUserInfo) { echo "
Ошибка генератора showUserInfo() в User.php: {$e_showUserInfo}
"; } diff --git a/main.php b/main.php index d99ccb1..09dbc69 100644 --- a/main.php +++ b/main.php @@ -39,6 +39,7 @@ $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']); @@ -47,6 +48,7 @@ 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');