Зимние правки. MVC/

Signed-off-by: lopar <lopar.4ever@gmail.com>
This commit is contained in:
lopar
2022-08-09 22:57:43 +03:00
parent 0f62ee20e7
commit b9b4c01cf0
104 changed files with 2254 additions and 2086 deletions
+48 -27
View File
@@ -1,12 +1,13 @@
<?php
namespace Battles;
use Battles\Database\Db;
use Battles\Models\Inventory;
class InventoryItem extends Item
{
private $present;
private $owner_id;
private ?string $present;
private int $owner_id;
private const TOO_MANY_ITEMS_IN_SLOTS = 'Критическая ошибка: Переполнение слота!';
private const UNKNOWN_ITEM_TYPE = 'Неизвестный тип предмета!';
private const REQUIREMENTS_NOT_MET = 'Персонаж не соответствует требованиям!';
@@ -46,22 +47,21 @@ IMG;
}
}
public function printControls(){
public function printControls()
{
// Для кнопок управления под картинкой.
}
private function dressStatsChecks(): ?string
private function dressStatsChecks(): bool
{
$checkStats = new UserStats($this->owner_id);
$stat = $checkStats->getFullStats();
return
$this->need_strength > $stat->strength
|| $this->need_dexterity > $stat->dexterity
|| $this->need_intuition > $stat->intuition
|| $this->need_endurance > $stat->endurance
|| $this->need_intelligence > $stat->intelligence
|| $this->need_wisdom > $stat->wisdom
? true : null;
return $this->need_strength > $stat->strength
|| $this->need_dexterity > $stat->dexterity
|| $this->need_intuition > $stat->intuition
|| $this->need_endurance > $stat->endurance
|| $this->need_intelligence > $stat->intelligence
|| $this->need_wisdom > $stat->wisdom;
}
/**
@@ -77,8 +77,8 @@ IMG;
// считаем сколько ОДЕТЫХ предметов в слоте в который мы хотим одеть предмет. 1=просто вещь 1-3=шашни с кольцами
// Count добавленный в первый запрос возвращает одну строку в любом случае.
// fetch возвращает одну строку в любом случае.
$weared = Db::getInstance()->ofetchAll('SELECT dressed_slot FROM inventory WHERE dressed_slot != 0 AND item_type = ? AND owner_id = ?', [$this->item_type, $this->owner_id]);
$wearedCount = Db::getInstance()->ofetch('select count(dressed_slot) as c from inventory where dressed_slot !=0 and item_type = ? and owner_id = ?', [$this->item_type, $this->owner_id]);
$weared = Inventory::getDressed($this->item_type, $this->owner_id);
$wearedCount = Inventory::countDressed($this->item_type, $this->owner_id);
// Если в слоте есть предмет(ы), забиваем их массив одетых в слот предметов.
if ($wearedCount) {
foreach ($weared as $item) {
@@ -93,11 +93,11 @@ IMG;
//работаем с нормальными слотами
if ($wearedCount->c == 1) {
//если слот занят, снимаем старый предмет и одеваем новый предмет
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ? AND owner_id = ?', [$itemInSlot[0], $this->owner_id]);
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = item_type WHERE item_id = ? AND owner_id = ?', [$this->item_id, $this->owner_id]);
Inventory::undressOne($itemInSlot[0], $this->owner_id);
Inventory::dressOne($this->item_id, $this->owner_id);
} elseif (!$wearedCount->c) {
//если слот пуст, одеваем новый предмет
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = item_type WHERE item_id = ? AND owner_id = ?', [$this->item_id, $this->owner_id]);
Inventory::dressOne($this->item_id, $this->owner_id);
} else {
/* проверка на переполнение слотов */
$error = self::TOO_MANY_ITEMS_IN_SLOTS;
@@ -111,11 +111,10 @@ IMG;
// Сортируем массив свободных слотов по возрастанию.
sort($emptyRingSlots);
// Одеваем предмет в первый свободный слот.
Db::getInstance()->execute('update inventory set dressed_slot = ? where item_id = ?', [$emptyRingSlots[0], $this->item_id]);
Inventory::dressOneToSlot($this->item_id, $emptyRingSlots[0]);
} elseif ($wearedCount->c == 3) {
// Cнимаем предмет из последнего слота 11 и одеваем новый предмет
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = 11');
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = 11 WHERE item_id = ?', $this->item_id);
Inventory::changeRings($this->item_id);
} else {
/* проверка на переполнение слотов */
$error = self::TOO_MANY_ITEMS_IN_SLOTS;
@@ -128,9 +127,31 @@ IMG;
return $error ?? true;
}
public static function destroyItem($itemId)
// Выбрасываем вещь.
public function drop(): string
{
Db::getInstance()->execute('delete from inventory where dressed_slot = 0 and owner_id = ? and item_id = ?', [$_SESSION['uid'], $itemId]);
if (empty($this->item_id)) {
return 'Ошибка: предмет не найден!';
}
if (Inventory::isWeared($this->item_id)) {
return 'Ошибка: нельзя выбросить одетый предмет!';
}
Inventory::destroyItem($this->item_id, $this->owner_id);
GameLogs::addUserLog(User::getInstance()->getId(), User::getInstance()->getLogin() . ' выбросил предмет ' . $this->name . ' id:(cap' . $this->item_id . ')');
return 'Предмет ' . $this->name . ' выброшен.';
}
/** Снятие всех предметов, которые не подходят по статам. */
public static function autoDrop()
{
$DI = new DressedItems(User::getInstance()->getId());
foreach ($DI->getItemsInSlots() as $dressedItem)
{
$ITM = new self($dressedItem);
if (!$ITM->dressStatsChecks()) {
$DI->undressItem($dressedItem->dressed_slot);
}
}
}
/** Надеюсь, временная заглушка, которая объединяет get_meshok() и другую выдачу одной строкой.
@@ -138,9 +159,9 @@ IMG;
*/
public static function getWeightData(): string
{
$query = 'select sum(weight) as `all`, strength * 4 as max from inventory left join users u on owner_id = id where owner_id = ?';
$weight = Db::getInstance()->ofetch($query, User::getInstance()->getId());
$css = $weight->all > $weight->max ? ' style="color:maroon;"' : '';
return "<span$css>$weight->all / $weight->max</span>";
$all = Inventory::getWeight(User::getInstance()->getId());
$max = User::getInstance()->stats()->getMaxWeight();
$css = $all > $max ? ' style="color:maroon;"' : '';
return "<span$css>$all / $max</span>";
}
}