<?php /** * Author: lopiu * Date: 06.07.2020 * Time: 22:41 */ namespace Battles; use Battles\Database\DBPDO; class DressedItems { private $USERID; private $dressedItem; private static $db; /** * DressedItems constructor. * @param int $user_id ID игрока. */ public function __construct(int $user_id) { self::$db = DBPDO::INIT(); $this->USERID = $user_id; } public static function getDressedItemBySlot($itemSlot, $ownerId) { return self::$db->fetch('SELECT * FROM inventory WHERE owner_id = ? AND dressed_slot = ?', [$ownerId, $itemSlot]); } public function getItemsInSlots() { $items = self::$db->ofetchALL('SELECT * FROM inventory WHERE owner_id = ? AND dressed_slot > 0', $this->USERID); $i = 0; while ($i < count($items)) { $this->dressedItem[$items[$i]->dressed_slot] = $items; $i++; } return $this->dressedItem; } private function getBonuses(): array { $query = <<<SQL SELECT SUM(add_strength) as sum_strength, SUM(add_dexterity) as sum_dexterity, SUM(add_intuition) as sum_intuition, SUM(add_endurance) as sum_endurance, SUM(add_intelligence) as sum_intelligence, SUM(add_wisdom) as sum_wisdom, SUM(add_accuracy) as sum_accuracy, SUM(add_evasion) as sum_evasion, SUM(add_criticals) as sum_criticals, SUM(add_min_physical_damage) as sum_min_phys_damage, SUM(add_max_physical_damage) as sum_max_phys_damage FROM inventory WHERE owner_id = ? AND dressed_slot > 0 SQL; return self::$db->fetch($query, $this->USERID); } public function getStrengthBonus(): ?int { return self::getBonuses()['sum_strength']; } public function getDexterityBonus(): ?int { return self::getBonuses()['sum_dexterity']; } public function getIntuitionBonus(): ?int { return self::getBonuses()['sum_intuition']; } public function getEnduranceBonus(): ?int { return self::getBonuses()['sum_endurance']; } public function getIntelliganceBonus(): ?int { return self::getBonuses()['sum_intelligence']; } public function getWisdomBonus(): ?int { return self::getBonuses()['sum_wisdom']; } public function getAccuracyBonus(): ?int { return self::getBonuses()['sum_accuracy'] ?? 0; } public function getEvasionBonus(): ?int { return self::getBonuses()['sum_evasion'] ?? 0; } public function getCriticalsBonus(): ?int { return self::getBonuses()['sum_criticals'] ?? 0; } public function getMinPhysDamage(): ?int { return self::getBonuses()['sum_min_phys_damage']; } public function getMaxPhysDamage(): ?int { return self::getBonuses()['sum_max_phys_damage']; } /** * Снимает с предмета статус одетого на персонажа в определённом слоте персонажа. * @param $slot_id - номер слота. */ public function undressItem($slot_id) { self::getItemsInSlots(); // Проверяем, что используется один из 12 слотов и наличие предмета в слоте. if (in_array($slot_id, Item::ITEM_TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem[$slot_id]) { self::$db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ? AND owner_id = ?', [$slot_id, $this->USERID]); } } }