<?php class User { public $id; public $login; public $email; public $realname; public $borndate; public $info; public $level; public $align; public $clan; public $money; public $strength; public $dexterity; public $intuition; public $endurance; public $intelligence; public $wisdom; public $ip; public $session_id; public $admin; public $enter_game; public $room; public $block; // Пока несуществующие, для совместимости. public $married; public $stats; public $shadow; public $experience; public $stat_points; //Статусы того, кто смотрит на информацию. protected $watcherIsAdmin; protected $watcherIsModerator; use Rooms; public function __construct($user) { $user_query = db::c()->query('SELECT * FROM users WHERE id = "?s" OR login = "?s"', $user, $user)->fetch_assoc(); $watchingUser_query = db::c()->query('SELECT `align`,`admin` FROM `users` WHERE `id` = ?i', $_SESSION['uid'])->fetch_assoc(); foreach ($this as $key => $value) { if (isset($user_query[$key])) { $this->$key = $user_query[$key]; } } if ($watchingUser_query['admin']) { $this->watcherIsAdmin = 1; } if ($watchingUser_query['align'] == 1) { $this->watcherIsModerator = 1; } } protected function showItem($item = 0) { $itemSlot = $item['dressed_slot'] ?? 0; $itemName = $item['name'] ?? ''; $itemImage = $item['image'] ?? ''; if ($itemSlot) { echo <<<SLOT <img src="/i/sh/{$itemImage}" class="item-wrap-normal tip" alt="Слот [{$itemSlot}]"> <span class="tiptext"><strong>{$itemName}</strong></span> SLOT; } else { echo <<<EMPTY_SLOT <img src="/i/sh/noitem.png" class="item-wrap-normal" title="Пустой слот [{$item}]" alt="Пустой слот [{$item}]"> EMPTY_SLOT; } } public function showUserInfo() { $dressed_items = db::c()->query('SELECT * FROM inventory WHERE owner_id = ?i AND dressed_slot > 0', $this->id); while ($row = $dressed_items->fetch_assoc()) { $dressed_item[$row['dressed_slot']] = $row; } echo '<div class="user-info-container">'; echo '<div class="slot-1">'; if (isset($dressed_item[1])) { $this->showItem($dressed_item[1]); } else { $this->showItem(1); } echo '</div><!-- slot-1 -->'; echo '<div class="slot-2">'; if (isset($dressed_item[2])) { $this->showItem($dressed_item[2]); } else { $this->showItem(2); } echo '</div><!-- slot-2 -->'; echo '<div class="slot-3">'; if (isset($dressed_item[3])) { $this->showItem($dressed_item[3]); } else { $this->showItem(3); } echo '</div><!-- slot-3 -->'; echo '<div class="slot-4">'; if (isset($dressed_item[4])) { $this->showItem($dressed_item[4]); } else { $this->showItem(4); } echo '</div><!-- slot-4 -->'; echo '<div class="slot-5">'; if (isset($dressed_item[5])) { $this->showItem($dressed_item[5]); } else { $this->showItem(5); } echo '</div><!-- slot-5 -->'; echo '<div class="slot-6">'; if (isset($dressed_item[6])) { $this->showItem($dressed_item[6]); } else { $this->showItem(6); } echo '</div><!-- slot-6 -->'; echo '<div class="slot-7">'; if (isset($dressed_item[7])) { $this->showItem($dressed_item[7]); } else { $this->showItem(7); } echo '</div><!-- slot-7 -->'; echo '<div class="slot-8">'; if (isset($dressed_item[8])) { $this->showItem($dressed_item[8]); } else { $this->showItem(8); } echo '</div><!-- slot-8 -->'; echo '<div class="slot-lower">'; if (isset($dressed_item[9])) { $this->showItem($dressed_item[9]); } else { $this->showItem(9); } if (isset($dressed_item[10])) { $this->showItem($dressed_item[10]); } else { $this->showItem(10); } if (isset($dressed_item[11])) { $this->showItem($dressed_item[11]); } else { $this->showItem(11); } echo '</div><!-- slot-lower -->'; echo '<div class="slot-image">'; echo sprintf('<img src="/i/shadow/%s" alt="%s">', $this->shadow, $this->login); echo '</div><!-- slot-image -->'; echo '<div class="user-signs">'; echo sprintf('<img src="i/zodiac/%s.png" alt="Родовой знак">', $this->showStarSign()); echo '</div><!-- user-signs -->'; echo '<div class="user-info">'; echo '<div class="stats-container">'; echo '<div class="column">'; echo 'Уровень:<br>Сила:<br>Ловкость:<br>Интуиция:<br>Выносливость:<br>Интеллект:<br>Мудрость:<br>Местонахождение:'; echo '</div><!-- column -->'; echo '<div class="column">'; echo $this->level . '<br>' . $this->strength . '<br>' . $this->dexterity . '<br>' . $this->intuition . '<br>' . $this->endurance . '<br>' . $this->intelligence . '<br>' . $this->wisdom . '<br>' . $this->getRoomName($this->room); echo '</div><!-- column -->'; echo '</div><!-- stats-container -->'; if ($this->married) { echo sprintf('<a href = "inf.php?%s" target = _blank ><img alt = "В браке с %s" src = "i/married.gif" title = "В браке с %s"></a >', $this->married, $this->married, $this->married); } echo '<div class="debug">TODO: Сделать отображение имени. Сделать рассчёт здоровья и модификаторов. Вывести полоску здоровья когда будет от чего отталкиваться.</div>'; echo '</div><!-- user-info -->'; echo '</div><!-- user-info-container -->'; echo '<hr><!-- Нижняя часть -->'; echo '<div class="user-info-container-lower">'; echo '<h2>Об игроке</h2>'; if ($this->realname) { echo sprintf('Имя: %s<br>', $this->realname); } if ($this->info) { echo nl2br($this->info); } echo '</div><!-- user-info-container-lower -->'; if ($this->watcherIsAdmin || $this->watcherIsModerator) { echo '<div class="secretInfo">'; $infoString = '<b>Личное дело</b><br>ИД Игрока: %s<br> ДР Игрока: %s<br> IP Регистрации: %s'; echo sprintf($infoString, $this->id, date('d.m.Y', strtotime($this->borndate)), $this->ip); if ($this->watcherIsAdmin) { $this->Bank = new Bank($this->id); $infoString = '<br><span>ИД Комнаты: %s<br> Деньги: %s<br> Деньги в банке: %s<br> Опыт: %s<br> Нераспределённые очки: %s<br> E-Mail: %s<br> Текущая сессия: %s</span>'; echo sprintf($infoString, $this->room, $this->money, $this->Bank->money, $this->experience, $this->stat_points, $this->email, $this->session_id); } $this->UserLogs = new UserLogModel($this->id); while ($userLogRow = $this->UserLogs->getUserLog()->fetch_object()) { echo sprintf('<code>%s</code><br>', date("d.m.Y H:i ", strtotime($userLogRow->date)) . $userLogRow->text); } echo '</div>'; } } public function showStarSign() { /* * 1 aries * 2 taurus * 3 gemini * 4 cancer * 5 leo * 6 virgo * 7 libra * 8 scorpio * 9 sagittarios * 10 capricorn * 11 aquarius * 12 pisches */ $zodiac[356] = "10"; $zodiac[326] = "09"; $zodiac[296] = "08"; $zodiac[266] = "07"; $zodiac[235] = "06"; $zodiac[203] = "05"; $zodiac[172] = "04"; $zodiac[140] = "03"; $zodiac[111] = "02"; $zodiac[78] = "01"; $zodiac[51] = "12"; $zodiac[20] = "11"; $zodiac[0] = "10"; $dayOfYear = date("z", strtotime($this->borndate)); $isLeapYear = date("L", strtotime($this->borndate)); //Высокосный? if ($isLeapYear && $dayOfYear >59) { --$dayOfYear; } foreach ($zodiac as $day => $sign) { if ($dayOfYear > $day) { break; } } return $sign ?? null; } public function showPrivateUserInfo() { $this->watchingUser; function privateAccessCheck() { $own = db::c()->query('SELECT `align`,`admin` FROM `users` WHERE `id` = ?i', $uid)->fetch_assoc(); if ($own['admin'] == 1) { return ADMINISTRATOR_ACCESS; } elseif ($own['align'] == 1) { return MODERATOR_ACCESS; } return false; } } }