Основные классы переехали на обёртку PDO. Плановое №16.

This commit is contained in:
lopar
2021-01-28 23:05:34 +02:00
parent 0099c235a7
commit 8402912098
22 changed files with 284 additions and 1940 deletions
+45 -71
View File
@@ -4,50 +4,46 @@
* Date: 06.07.2020
* Time: 22:41
*/
namespace Battles;
use db;
use Krugozor\Database\Mysql\Exception;
use Battles\Database\DBPDO;
class DressedItems
{
private $DB;
private $DBSUM;
private $USERID;
private $dressedItem;
private static $db;
/**
* DressedItems constructor.
*
* @param $user_id - ID игрока.
* @param int $user_id ID игрока.
*/
public function __construct($user_id)
public function __construct(int $user_id)
{
self::$db = DBPDO::INIT();
$this->USERID = $user_id;
}
private function getDressedItems()
{
try {
$this->DB = db::c()->query('SELECT * FROM inventory WHERE owner_id = ?i AND dressed_slot > 0', $this->USERID);
} catch (\Exception $e) {
echo '<div class="debug">Не прогрузилась таблица inventory (*) для класса DressedItems.</div>';
}
}
private static function getDressedItemById($item_id)
{
return db::c()->query('SELECT * FROM inventory WHERE item_id = ?i AND dressed_slot > 0', $item_id)->fetch_assoc();
}
public static function getDressedItemBySlot($itemSlot, $ownerId)
{
return db::c()->query('SELECT * FROM battles.inventory WHERE owner_id = ?i AND dressed_slot = ?i', $ownerId, $itemSlot)->fetch_assoc();
return self::$db->fetch('SELECT * FROM inventory WHERE owner_id = ? AND dressed_slot = ?', [$ownerId, $itemSlot]);
}
private function getBonusesFromDressedItems()
public function getItemsInSlots()
{
try {
$query = <<<SQL
$items = self::$db->fetchALL('SELECT * FROM inventory WHERE owner_id = ? AND dressed_slot > 0', $this->USERID);
$i = 0;
while ($i < count($items)) {
$this->dressedItem[$items['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,
@@ -59,74 +55,62 @@ SELECT SUM(add_strength) as sum_strength,
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 = ?i AND dressed_slot > 0
FROM inventory WHERE owner_id = ? AND dressed_slot > 0
SQL;
$this->DBSUM = db::c()->query($query, $this->USERID)->fetch_assoc();
} catch (\Exception $e) {
echo '<div class="debug">Не прогрузилась таблица inventory (SUM) для класса DressedItems:' . $e . '</div>';
}
return self::$db->fetch($query, $this->USERID);
}
public function getItemsInSlots()
{
if (!$this->DB) {
self::getDressedItems();
}
while ($row = $this->DB->fetch_assoc()) {
$this->dressedItem[$row['dressed_slot']] = $row;
}
return $this->dressedItem;
}
private function getBonuses()
{
if (!$this->DBSUM) {
self::getBonusesFromDressedItems();
}
return $this->DBSUM;
}
public function getStrengthBonus()
public function getStrengthBonus(): int
{
return self::getBonuses()['sum_strength'];
}
public function getDexterityBonus()
public function getDexterityBonus(): int
{
return self::getBonuses()['sum_dexterity'];
}
public function getIntuitionBonus()
public function getIntuitionBonus(): int
{
return self::getBonuses()['sum_intuition'];
}
public function getEnduranceBonus()
public function getEnduranceBonus(): int
{
return self::getBonuses()['sum_endurance'];
}
public function getIntelliganceBonus()
public function getIntelliganceBonus(): int
{
return self::getBonuses()['sum_intelligence'];
}
public function getWisdomBonus()
public function getWisdomBonus(): int
{
return self::getBonuses()['sum_wisdom'];
}
public function getAccuracyBonus()
public function getAccuracyBonus(): int
{
return self::getBonuses()['sum_accuracy'] ?? 0;
}
public function getEvasionBonus()
public function getEvasionBonus(): int
{
return self::getBonuses()['sum_evasion'] ?? 0;
}
public function getCriticalsBonus()
public function getCriticalsBonus(): int
{
return self::getBonuses()['sum_criticals'] ?? 0;
}
public function getMinPhysDamage()
public function getMinPhysDamage(): int
{
return self::getBonuses()['sum_min_phys_damage'];
}
public function getMaxPhysDamage()
public function getMaxPhysDamage(): int
{
return self::getBonuses()['sum_max_phys_damage'];
}
@@ -134,23 +118,13 @@ SQL;
/**
* Снимает с предмета статус одетого на персонажа в определённом слоте персонажа.
* @param $slot_id - номер слота.
*
* @throws Exception
*/
public function undressItem($slot_id)
{
self::getItemsInSlots();
// Проверяем, что используется один из 12 слотов и наличие предмета в слоте.
if (in_array($slot_id, Item::ITEM_TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem[$slot_id]) {
db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ?i AND owner_id = ?i', $slot_id, $this->USERID);
}
}
public function slotStatus($slot_id)
{
self::getItemsInSlots();
if ($this->dressedItem[$slot_id]) {
self::$db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ? AND owner_id = ?', [$slot_id, $this->USERID]);
}
}
}