130 lines
3.6 KiB
PHP
130 lines
3.6 KiB
PHP
<?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 *, COUNT(1) AS count FROM inventory WHERE owner_id = ? AND dressed_slot = ?', [$ownerId, $itemSlot]);
|
||
}
|
||
|
||
public function getItemsInSlots(): \stdClass
|
||
{
|
||
$items = self::$db->ofetchALL('SELECT * FROM inventory WHERE owner_id = ? AND dressed_slot > 0', $this->USERID);
|
||
$this->dressedItem = new \stdClass();
|
||
foreach ($items as $item) {
|
||
$i = $item->dressed_slot;
|
||
$this->dressedItem->$i = $item;
|
||
}
|
||
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]);
|
||
}
|
||
}
|
||
} |