Удалён зодиак. Фиксы перехода php7.2 -> php7.4. Покупка и продажа за банкноты (#25). Унификация вывода кнопок в магазине. Удалён старый закомментированый код. Больше констант. Плавная текучка от библиотеки db::c в сторону DBPDO. И тому подобное. Процесс идёт...

This commit is contained in:
Igor Barkov (iwork)
2021-08-20 20:40:06 +03:00
parent fd6c1e8986
commit 5714ab83f3
13 changed files with 423 additions and 509 deletions
+79 -46
View File
@@ -1,15 +1,24 @@
<?php
namespace Battles;
use Battles\Database\DBPDO;
use Battles\Models\EffectsModel;
class UserInfo extends UserStats
{
use Rooms;
//Статусы того, кто смотрит на информацию.
public $watcher_id;
private $watcherIsAdmin;
private $watcherIsModerator;
private int $bankMoney;
//Тот, кто смотрит на информацию.
private User $watcher;
public function __construct($user)
{
parent::__construct($user);
$bank = new Bank($this->id);
$this->bankMoney = $bank->getMoney();
}
/**
* Отображает куклу персонажа (образ и слоты).
@@ -19,7 +28,7 @@ class UserInfo extends UserStats
* @param int $isMain установить 1, если куклу надо показать на странице игрока (по клику на предмет снимает
* его).
*/
private function UserInfoDoll($isBattle = 0, $isMain = 0)
private function UserInfoDoll(int $isBattle = 0, int $isMain = 0)
{
$di = new DressedItems($this->id);
$dressedItems = $di->getItemsInSlots();
@@ -49,6 +58,45 @@ class UserInfo extends UserStats
echo '</div><!-- slot-image -->';
}
private function ttz()
{
$arr = [
'Уровень' => $this->level,
'Сила' => $this->printStat('strength'),
'Ловкость' => $this->printStat('dexterity'),
'Интуиция' => $this->printStat('intuition'),
'Выносливость' => $this->printStat('endurance'),
'Интеллект' => $this->printStat('intelligence'),
'Мудрость' => $this->printStat('wisdom'),
'Уворот' => $this->getFullStats()->evasion,
'Точность' => $this->getFullStats()->accuracy,
'Шанс крита' => $this->getFullStats()->criticals,
'Урон' => $this->getFullStats()->min_physical_damage . ' - ' . $this->getFullStats()->max_physical_damage,
'Локация' => Rooms::$roomNames[$this->room],
];
$str = null;
$i = 0;
foreach ($arr as $item => $value) {
$str .= "<div class='column' style='text-align: right; margin-right: 10px;'>$item</div><div class='column'>$value</div>";
if (in_array($i,[6,9])) {
$str .= "<div style='margin-top: 10px;'></div><div></div>";
}
$i++;
}
$nameString = $this->align ? "<img src='/i/align_$this->align.png' alt='Склонность'>" : "";
$nameString .= $this->block ? "<span class='private' style='text-decoration: line-through;'>$this->login</span>" : "<b>$this->login</b>";
$nameString .= $this->clan ? "<img src='/i/clan/$this->clan.png' alt='Клан'>" : "";
echo "<div class='info'><b>$nameString</b></div><!-- info -->";
echo "<div class='stats-container' style='display: grid; grid-template-columns: 150px 100px; font-size: 1.2em;'>$str</div>";
}
private function printStat($statName): string
{
return $this->getFreeStatPoints() ? $this->getStat($statName, 1) . '(' . $this->getFullStats()->$statName . ')' : $this->getFullStats()->$statName;
}
//TODO вызывать из main.php
private function UserInfoStats($isMainWindow = 0)
{
$captions = 'Уровень:<br>Сила:<br>Ловкость:<br>Интуиция:<br>Выносливость:<br>Интеллект:<br>Мудрость:<br>Местонахождение:';
@@ -62,7 +110,6 @@ class UserInfo extends UserStats
parent::getFullStats()->wisdom . '<br>' .
Rooms::$roomNames[$this->room];
if ($isMainWindow) {
$this->Bank = new Bank($this->id);
$captions = 'Уровень:<br>Здоровье:<br>Сила:<br>Ловкость:<br>Интуиция:<br>Выносливость:<br>Интеллект:<br>Мудрость:<br>Опыт:<br>Очки характеристик:<br>Деньги:<br>Деньги в банке:';
$variables =
$this->level . '<br>' .
@@ -76,7 +123,7 @@ class UserInfo extends UserStats
$this->experience . '<br>' .
$this->free_stat_points . '<br>' .
$this->money . '<br>' .
$this->Bank->getMoney();
$this->bankMoney;
}
$nameString = null;
$nameString .= $this->align ? "<img src='/i/align_$this->align.png' alt='Склонность'>" : "";
@@ -100,16 +147,13 @@ HTML;
*/
private function showPrivateData(): ?string
{
if (!$this->watcherIsAdmin || !$this->watcherIsModerator) {
return null;
}
$birthday = date('d.m.Y', strtotime($this->borndate));
$userLogs = GameLogs::getUserLogs($this->id);
$log = null;
while ($userLogRow = $userLogs->fetchArray(SQLITE3_ASSOC)) {
$log .= sprintf('<code>%s</code><br>', date('d.m.Y H:i ', strtotime($userLogRow['date'])) . $userLogRow['text']);
}
$adminData = $this->watcherIsAdmin ? $this->showAdminOnlyData() : null;
$adminData = $this->watcher->getAdmin() ? $this->showAdminOnlyData() : null;
return <<<INFO
<div class="secret-info">
E-Mail: $this->email<br>
@@ -129,15 +173,13 @@ INFO;
*/
private function showAdminOnlyData(): ?string
{
$this->Bank = new Bank($this->id);
$bankMoney = $this->Bank->getMoney();
return <<<INFO
ИД Игрока: $this->id<br>
ИД Комнаты: $this->room<br>
Деньги: $this->money<br>
Деньги в банке: $bankMoney<br>
Опыт: $this->experience<br>
Нераспределённые очки: $this->free_stat_points<br>
ИД Игрока: $this->id<br>
ИД Комнаты: $this->room<br>
Деньги: $this->money<br>
Деньги в банке: $this->bankMoney<br>
Опыт: $this->experience<br>
Нераспределённые очки: $this->free_stat_points<br>
INFO;
}
@@ -146,30 +188,27 @@ INFO;
{
echo '<div class="user-info-container">';
$this->UserInfoDoll();
$this->UserInfoStats();
echo '<div class="slot-lower"> <!-- statuses! -->';
echo '</div><!-- slot-lower -->';
echo '<div class="user-signs">';
echo sprintf('<img src="i/zodiac/%s.png" alt="Родовой знак">', $this->showStarSign());
echo '</div><!-- user-signs -->';
echo '</div><!-- user-info-container -->';
$this->ttz();
echo '<div class="slot-lower"> <!-- statuses! --></div>';
echo '</div><!-- u-i-c -->';
echo '<hr><!-- Нижняя часть -->';
echo '<div class="user-info-container-lower">';
echo '<h2>Об игроке</h2>';
echo $this->realname ? "Имя: $this->realname" : "";
echo $this->info ? "<br>" . nl2br($this->info) : "";
echo '</div><!-- user-info-container-lower -->';
echo $this->showPrivateData();
echo '</div><!-- u-i-c-l -->';
if ($this->watcher->getAdmin() || $this->watcher->getAlign() == 1) {
echo $this->showPrivateData();
}
}
public function showUserInfo()
{
$this->WatcherStatus();
$effects = new EffectsModel($this->id);
if ($this->block && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
if ($this->block && (!$this->watcher->getAdmin() || !$this->watcher->getAlign() == 1)) {
echo "<span class='error'>Персонаж $this->login заблокирован!</span>";
} elseif ($effects->getHideUserInfoStatus() && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
} elseif ($effects->getHideUserInfoStatus() && (!$this->watcher->getAdmin() || !$this->watcher->getAlign() == 1)) {
if ($effects->getHideUserInfoStatus() == -1) {
$date = 'навсегда';
} else {
@@ -181,17 +220,6 @@ INFO;
}
}
private function WatcherStatus()
{
$query = parent::$db->fetch('SELECT align, admin FROM users WHERE id = ?', $this->watcher_id);
if ($query['admin']) {
$this->watcherIsAdmin = 1;
}
if ($query['align'] == 1) {
$this->watcherIsModerator = 1;
}
}
public function showUserDoll($isBattle = 0, $isMain = 0)
{
echo '<div class="user-info-container">';
@@ -216,17 +244,22 @@ INFO;
$timeleft = timeOut($effect->remaining_time - time());
$r .= "
<div>
<img class='image' src='/i/{$img[$effect->type]}' alt='{$effect->name}'>
<span class='title'>{$effect->name}</span>
<img class='image' src='/i/{$img[$effect->type]}' alt='$effect->name'>
<span class='title'>$effect->name</span>
<div class='timeleft'>$timeleft</div>
</div>
";
}
return $r;
}
public function showStarSign(): ?string
/**
* @param mixed $watcher_id
*/
public function setWatcher(int $watcher_id): void
{
return parent::showStarSign();
$this->watcher = new User($watcher_id);
}
}