battles/classes/Battles/DressedItems.php

91 lines
2.7 KiB
PHP
Raw Permalink Normal View History

2020-07-06 19:54:50 +00:00
<?php
/**
* Author: lopiu
* Date: 06.07.2020
* Time: 22:41
*/
namespace Battles;
use Battles\Database\Db;
use Battles\Models\Inventory;
use stdClass;
2020-07-06 19:54:50 +00:00
class DressedItems
{
2022-12-16 23:20:43 +00:00
private int $userId;
2022-06-10 23:57:27 +00:00
private stdClass $dressedItem;
private static Db $db;
private object $dressed;
2020-07-06 19:54:50 +00:00
/**
* DressedItems constructor.
2022-12-16 23:20:43 +00:00
* @param int $userId ID игрока.
*/
2022-12-16 23:20:43 +00:00
public function __construct(int $userId)
{
self::$db = Db::getInstance();
2022-12-16 23:20:43 +00:00
$this->userId = $userId;
$this->dressed = self::$db->ofetchAll('select * from inventory where dressed_slot > 0 and owner_id = ?', $this->userId);
}
2020-07-06 20:34:34 +00:00
public static function getDressedItemBySlot($itemSlot, $ownerId)
{
return self::$db->ofetch('SELECT *, COUNT(1) AS count FROM inventory WHERE owner_id = ? AND dressed_slot = ?', [$ownerId, $itemSlot]);
}
public function getItemsInSlots(): stdClass
2020-07-22 14:04:15 +00:00
{
$this->dressedItem = new stdClass();
2022-06-10 23:57:27 +00:00
foreach ($this->dressed as $item) {
$i = $item->dressed_slot;
$this->dressedItem->$i = $item;
}
return $this->dressedItem;
2020-07-22 14:04:15 +00:00
}
/**
* Снимает с предмета статус одетого на персонажа в определённом слоте персонажа.
2022-12-16 23:20:43 +00:00
* @param $slotId - номер слота.
*/
2022-12-16 23:20:43 +00:00
public function undressItem($slotId)
{
self::getItemsInSlots();
// Проверяем, что используется один из 12 слотов и наличие предмета в слоте.
2022-12-16 23:20:43 +00:00
if (in_array($slotId, Item::TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem->$slotId) {
Inventory::undressOne($slotId, $this->userId);
2020-07-22 14:04:15 +00:00
}
}
2022-06-10 23:57:27 +00:00
2022-12-16 23:20:43 +00:00
public static function undressAllItems($userId)
{
2022-12-16 23:20:43 +00:00
return self::$db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot BETWEEN 1 AND 12 AND owner_id = ?', $userId);
}
2022-06-10 23:57:27 +00:00
public function checkRequirements()
{
2022-12-16 23:20:43 +00:00
$stats = (new UserStats($this->userId))->getFullStats();
$q = 'select count(*) from inventory where
dressed_slot > 0 and
2022-06-10 23:57:27 +00:00
need_strength > ? and
2022-12-16 23:20:43 +00:00
need_dexterity > ? and
need_intuition > ? and
need_endurance > ? and
2022-06-10 23:57:27 +00:00
need_intelligence > ? and
2022-12-16 23:20:43 +00:00
need_wisdom > ? and
2022-06-10 23:57:27 +00:00
owner_id = ?';
$args = [
$stats->strength,
$stats->dexterity,
$stats->intuition,
$stats->endurance,
$stats->intelligence,
$stats->wisdom,
2022-12-16 23:20:43 +00:00
$this->userId
2022-06-10 23:57:27 +00:00
];
if (self::$db->fetchColumn($q, $args) > 0) {
2022-12-16 23:20:43 +00:00
self::undressAllItems($this->userId);
2022-06-10 23:57:27 +00:00
}
}
2022-12-16 23:20:43 +00:00
}