battles/classes/User.php

295 lines
11 KiB
PHP
Raw Normal View History

<?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;
//Статусы того, кто смотрит на информацию.
public $watcher_id;
protected $watcherIsAdmin;
protected $watcherIsModerator;
2020-07-04 23:25:14 +00:00
2020-07-04 10:49:43 +00:00
use Rooms;
2020-07-03 13:33:34 +00:00
public function __construct($user)
{
$user_query = db::c()->query('SELECT * FROM users WHERE id = "?s" OR login = "?s"', $user, $user)->fetch_assoc();
foreach ($this as $key => $value) {
if (isset($user_query[$key])) {
$this->$key = $user_query[$key];
}
}
}
protected function showItem($item)
{
$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="{$itemName}">
<span class="tiptext"><strong>{$itemName}</strong></span>
SLOT;
} else {
echo <<<EMPTY_SLOT
2020-07-04 23:29:32 +00:00
<img src="/i/sh/noitem.png" class="item-wrap-normal" title="Пустой слот [{$item}]" alt="Пустой слот [{$item}]">
EMPTY_SLOT;
}
}
private function UserInfoDoll() {
$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">';
for ($i = 1; $i <= 12; $i++) {
echo sprintf('<div class="slot-%s">', $i);
if (isset($dressed_item[$i])) {
//$this->showItem($dressed_item[$i]);
$itemString = '<img src="/i/sh/%s" class="item-wrap-normal tip" alt="%s"><span class="tiptext"><strong>%s</strong></span>';
echo sprintf($itemString, $dressed_item[$i]['image'], $dressed_item[$i]['name'], $dressed_item[$i]['name']);
} else {
echo sprintf('<img src="/i/sh/noitem.png" class="item-wrap-normal" title="Пустой слот [%s]" alt="Пустой слот [%s]">', $i, $i);
}
echo sprintf('</div><!-- slot-%s -->', $i);
}
echo '<div class="slot-image">';
echo sprintf('<img src="/i/shadow/%s" alt="%s">', $this->shadow, $this->login);
echo '</div><!-- slot-image -->';
echo '</div><!-- user-info-container -->';
}
private function UserInfo()
{
$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">';
2020-07-05 15:45:59 +00:00
echo '<div class="stats-container">';
echo '<div class="column">';
2020-07-05 16:54:57 +00:00
echo 'Уровень:<br>Сила:<br>Ловкость:<br>Интуиция:<br>Выносливость:<br>Интеллект:<br>Мудрость:<br>Местонахождение:';
echo '</div><!-- column -->';
2020-07-05 15:45:59 +00:00
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);
}
2020-07-05 16:54:57 +00:00
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) {
2020-07-05 21:35:25 +00:00
echo '<div class="secret-info">';
$infoString = '<b>Личное дело</b><br>E-Mail: %s<br> ДР Игрока: %s<br> 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 = '<br><span>ИД Игрока: %s<br> ИД Комнаты: %s<br> Деньги: %s<br> Деньги в банке: %s<br> Опыт: %s<br> Нераспределённые очки: %s<br> Текущая сессия: %s</span>';
echo sprintf($infoString, $this->id, $this->room, $this->money, $this->Bank->money, $this->experience, $this->stat_points, $this->email, $this->session_id);
}
$this->UserLogs = new UserLogModel($this->id);
2020-07-05 21:35:25 +00:00
echo '<div class="secret-info-user-log">';
while ($userLogRow = $this->UserLogs->getUserLog()->fetch_object()) {
echo sprintf('<code>%s</code><br>', date("d.m.Y H:i ", strtotime($userLogRow->date)) . $userLogRow->text);
}
2020-07-05 21:35:25 +00:00
echo '</div><!-- secret-info-user-log -->';
echo '</div><!-- secret-info -->';
}
2020-07-04 10:49:43 +00:00
}
private function WatcherStatus() {
$query = db::c()->query('SELECT `align`,`admin` FROM `users` WHERE `id` = ?i', $this->watcher_id)->fetch_assoc();
if ($query['admin']) {
$this->watcherIsAdmin = 1;
}
if ($query['align'] == 1) {
$this->watcherIsModerator = 1;
}
}
public function showUserInfo()
{
$this->effects = new EffectsModel($this->id);
$this->WatcherStatus();
if ($this->block && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
throw new Exception('<span class="error">Персонаж ' . $this->login . ' заблокирован!</span>');
} 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('<span class="error">Персонаж ' . $this->login . ' обезличен ' . $date . '.</span>');
} else {
$this->UserInfoDoll();
}
}
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;
}
}