2020-07-06 19:54:50 +00:00
|
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* Author: lopiu
|
|
|
|
|
* Date: 06.07.2020
|
|
|
|
|
* Time: 22:41
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
class DressedItems
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
private $DB;
|
|
|
|
|
private $DBSUM;
|
|
|
|
|
private $USERID;
|
2020-07-06 19:54:50 +00:00
|
|
|
|
private $dressedItem;
|
|
|
|
|
|
2020-07-07 09:52:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* DressedItems constructor.
|
2020-07-20 13:27:32 +00:00
|
|
|
|
*
|
|
|
|
|
* @param $user_id - ID игрока.
|
2020-07-07 09:52:54 +00:00
|
|
|
|
*/
|
2020-07-20 12:07:49 +00:00
|
|
|
|
public function __construct($user_id)
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->USERID = $user_id;
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
2020-07-06 20:34:34 +00:00
|
|
|
|
|
2020-07-21 15:03:46 +00:00
|
|
|
|
private function getDressedItems()
|
2020-07-06 19:54:50 +00:00
|
|
|
|
{
|
|
|
|
|
try {
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->DB = db::c()->query('SELECT * FROM inventory WHERE owner_id = ?i AND dressed_slot > 0', $this->USERID);
|
2020-07-06 20:10:24 +00:00
|
|
|
|
} catch (Exception $e) {
|
2020-07-07 13:01:46 +00:00
|
|
|
|
echo '<div class="debug">Не прогрузилась таблица inventory (*) для класса DressedItems.</div>';
|
2020-07-06 19:54:50 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-22 14:04:15 +00:00
|
|
|
|
private function getDressedItemById($item_id)
|
|
|
|
|
{
|
|
|
|
|
return db::c()->query('SELECT * FROM inventory WHERE item_id = ?i AND dressed_slot > 0', $item_id)->fetch_assoc();
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-21 11:52:39 +00:00
|
|
|
|
private function getBonusesFromDressedItems()
|
2020-07-07 09:50:45 +00:00
|
|
|
|
{
|
|
|
|
|
try {
|
2020-07-07 13:01:46 +00:00
|
|
|
|
$query = <<<SQL
|
|
|
|
|
SELECT SUM(add_strength) as sum_strength,
|
2020-07-20 13:51:23 +00:00
|
|
|
|
SUM(add_dexterity) as sum_dexterity,
|
2020-07-07 13:01:46 +00:00
|
|
|
|
SUM(add_intuition) as sum_intuition,
|
|
|
|
|
SUM(add_endurance) as sum_endurance,
|
|
|
|
|
SUM(add_intelligence) as sum_intelligence,
|
2020-07-20 10:22:29 +00:00
|
|
|
|
SUM(add_wisdom) as sum_wisdom,
|
|
|
|
|
SUM(add_accuracy) as sum_accuracy,
|
2020-07-20 13:27:32 +00:00
|
|
|
|
SUM(add_evasion) as sum_evasion,
|
|
|
|
|
SUM(add_criticals) as sum_criticals,
|
2020-07-20 13:44:31 +00:00
|
|
|
|
SUM(add_min_physical_damage) as sum_min_phys_damage,
|
2020-07-22 14:04:15 +00:00
|
|
|
|
SUM(add_max_physical_damage) as sum_max_phys_damage
|
2020-07-20 14:01:59 +00:00
|
|
|
|
FROM inventory WHERE owner_id = ?i AND dressed_slot > 0
|
2020-07-07 13:01:46 +00:00
|
|
|
|
SQL;
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->DBSUM = db::c()->query($query, $this->USERID)->fetch_assoc();
|
2020-07-07 09:50:45 +00:00
|
|
|
|
} catch (Exception $e) {
|
2020-07-20 12:07:49 +00:00
|
|
|
|
echo '<div class="debug">Не прогрузилась таблица inventory (SUM) для класса DressedItems:' . $e . '</div>';
|
2020-07-07 09:50:45 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-07-07 13:01:46 +00:00
|
|
|
|
|
2020-07-20 12:07:49 +00:00
|
|
|
|
public function getItemsInSlots()
|
2020-07-07 09:50:45 +00:00
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
if (!$this->DB) {
|
2020-07-20 13:51:23 +00:00
|
|
|
|
self::getDressedItems();
|
2020-07-07 09:50:45 +00:00
|
|
|
|
}
|
2020-07-21 15:03:46 +00:00
|
|
|
|
while ($row = $this->DB->fetch_assoc()) {
|
2020-07-22 14:04:15 +00:00
|
|
|
|
$this->dressedItem[$row['item_type']] = $row;
|
2020-07-06 19:54:50 +00:00
|
|
|
|
}
|
2020-07-21 12:10:41 +00:00
|
|
|
|
return $this->dressedItem;
|
2020-07-06 19:54:50 +00:00
|
|
|
|
}
|
2020-07-07 09:50:45 +00:00
|
|
|
|
|
2020-07-21 15:03:46 +00:00
|
|
|
|
private function getBonuses()
|
2020-07-07 13:01:46 +00:00
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
if (!$this->DBSUM) {
|
2020-07-20 13:51:23 +00:00
|
|
|
|
self::getBonusesFromDressedItems();
|
2020-07-07 13:01:46 +00:00
|
|
|
|
}
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return $this->DBSUM;
|
2020-07-07 13:01:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-07-20 12:07:49 +00:00
|
|
|
|
public function getStrengthBonus()
|
|
|
|
|
{
|
2020-07-20 13:51:23 +00:00
|
|
|
|
return self::getBonuses()['sum_strength'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
public function getDexterityBonus()
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return self::getBonuses()['sum_dexterity'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
public function getIntuitionBonus()
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return self::getBonuses()['sum_intuition'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
public function getEnduranceBonus()
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return self::getBonuses()['sum_endurance'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
public function getIntelliganceBonus()
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return self::getBonuses()['sum_intelligence'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
public function getWisdomBonus()
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return self::getBonuses()['sum_wisdom'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
public function getAccuracyBonus()
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return self::getBonuses()['sum_accuracy'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
2020-07-20 13:27:32 +00:00
|
|
|
|
public function getEvasionBonus()
|
2020-07-20 12:07:49 +00:00
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return self::getBonuses()['sum_evasion'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
public function getCriticalsBonus()
|
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
return self::getBonuses()['sum_criticals'];
|
2020-07-20 12:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-07-22 09:45:41 +00:00
|
|
|
|
/**
|
|
|
|
|
* Снимает с предмета статус одетого на персонажа в определённом слоте персонажа.
|
|
|
|
|
* @param $slot_id - номер слота.
|
|
|
|
|
*
|
|
|
|
|
* @throws \Krugozor\Database\Mysql\Exception
|
|
|
|
|
*/
|
2020-07-21 15:03:46 +00:00
|
|
|
|
public function undressItem($slot_id)
|
|
|
|
|
{
|
2020-07-22 09:45:41 +00:00
|
|
|
|
self::getItemsInSlots();
|
|
|
|
|
// Проверяем, что используется один из 12 слотов и наличие предмета в слоте.
|
2020-07-22 14:04:15 +00:00
|
|
|
|
if (in_array($slot_id, Item::ITEM_TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem[$slot_id]) {
|
2020-07-21 15:03:46 +00:00
|
|
|
|
db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ?i AND owner_id = ?i', $slot_id, $this->USERID);
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-07-22 14:04:15 +00:00
|
|
|
|
|
|
|
|
|
public function slotStatus($slot_id)
|
|
|
|
|
{
|
|
|
|
|
self::getItemsInSlots();
|
|
|
|
|
if ($this->dressedItem[$slot_id]) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-07-06 19:54:50 +00:00
|
|
|
|
}
|