dev #38
@ -17,7 +17,7 @@ class Bank
|
|||||||
public $user_id;
|
public $user_id;
|
||||||
private $money;
|
private $money;
|
||||||
private $user;
|
private $user;
|
||||||
private $db;
|
private static $db;
|
||||||
|
|
||||||
const ERROR_NO_MONEY_IN_WALLET = "Ошибка! Нет денег в кошельке!";
|
const ERROR_NO_MONEY_IN_WALLET = "Ошибка! Нет денег в кошельке!";
|
||||||
const ERROR_NO_BANK_ACCOUNT = "Ошибка! Счёта не существует!";
|
const ERROR_NO_BANK_ACCOUNT = "Ошибка! Счёта не существует!";
|
||||||
@ -31,11 +31,11 @@ class Bank
|
|||||||
'clanRegister' => 'Оплата стоимости регистрации клана.',
|
'clanRegister' => 'Оплата стоимости регистрации клана.',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct($row)
|
public function __construct(int $user_id)
|
||||||
{
|
{
|
||||||
$this->db = new DBPDO();
|
self::$db = DBPDO::INIT();
|
||||||
$bank_row = $this->db->fetch('SELECT user_id, money FROM bank WHERE user_id = ?', $row);
|
$bank_row = self::$db->fetch('SELECT user_id, money FROM bank WHERE user_id = ?', $user_id);
|
||||||
$this->user = $this->db->fetch('SELECT money FROM users WHERE id = ?', $row);
|
$this->user = self::$db->fetch('SELECT money FROM users WHERE id = ?', $user_id);
|
||||||
foreach ($this as $key => $value) {
|
foreach ($this as $key => $value) {
|
||||||
if (isset($bank_row[$key])) {
|
if (isset($bank_row[$key])) {
|
||||||
$this->$key = $bank_row[$key];
|
$this->$key = $bank_row[$key];
|
||||||
@ -98,7 +98,7 @@ class Bank
|
|||||||
*/
|
*/
|
||||||
public function sendMoney(int $receiver, int $amount): int
|
public function sendMoney(int $receiver, int $amount): int
|
||||||
{
|
{
|
||||||
$receiverWallet = $this->db->fetch('SELECT money FROM bank WHERE user_id = ?', $receiver);
|
$receiverWallet = self::$db->fetch('SELECT money FROM bank WHERE user_id = ?', $receiver);
|
||||||
if ($amount <= 0) {
|
if ($amount <= 0) {
|
||||||
throw new GameException(self::ERROR_WRONG_AMOUNT);
|
throw new GameException(self::ERROR_WRONG_AMOUNT);
|
||||||
}
|
}
|
||||||
@ -134,7 +134,7 @@ class Bank
|
|||||||
if ($amount <= 0) {
|
if ($amount <= 0) {
|
||||||
throw new GameException(self::ERROR_WRONG_AMOUNT);
|
throw new GameException(self::ERROR_WRONG_AMOUNT);
|
||||||
}
|
}
|
||||||
$wallet = $this->db->fetch('SELECT money FROM users WHERE id = ?', $this->user_id);
|
$wallet = self::$db->fetch('SELECT money FROM users WHERE id = ?', $this->user_id);
|
||||||
if ($wallet->money < $amount) {
|
if ($wallet->money < $amount) {
|
||||||
throw new GameException(self::ERROR_NO_MONEY_IN_WALLET);
|
throw new GameException(self::ERROR_NO_MONEY_IN_WALLET);
|
||||||
}
|
}
|
||||||
@ -195,10 +195,9 @@ class Bank
|
|||||||
public static function setBankMoney(int $amount, int $user_id, string $operationType = ''): void
|
public static function setBankMoney(int $amount, int $user_id, string $operationType = ''): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$db = new DBPDO();
|
self::$db->execute('UPDATE bank SET money = ? WHERE user_id = ?', [$amount, $user_id]);
|
||||||
$db->execute('UPDATE bank SET money = ? WHERE user_id = ?', [$amount, $user_id]);
|
|
||||||
if ($operationType) {
|
if ($operationType) {
|
||||||
(new Bank($user_id))->bankLogs(0, $amount, $operationType);
|
GameLogs::addBankLog(0, 0, $amount, $operationType, self::LOG[$operationType]);
|
||||||
}
|
}
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})";
|
echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})";
|
||||||
@ -217,8 +216,7 @@ class Bank
|
|||||||
public static function setWalletMoney(int $amount, int $user_id): void
|
public static function setWalletMoney(int $amount, int $user_id): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$db = new DBPDO();
|
self::$db->execute('UPDATE users SET money = ? WHERE id = ?', [$amount, $user_id]);
|
||||||
$db->execute('UPDATE users SET money = ? WHERE id = ?', [$amount, $user_id]);
|
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})";
|
echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})";
|
||||||
}
|
}
|
||||||
|
@ -13,13 +13,20 @@ class DBPDO
|
|||||||
|
|
||||||
public $pdo;
|
public $pdo;
|
||||||
private $error;
|
private $error;
|
||||||
|
private static $_instance = null;
|
||||||
|
|
||||||
function __construct()
|
function __construct()
|
||||||
{
|
{
|
||||||
$this->connect();
|
$this->connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function INIT(): DBPDO
|
||||||
|
{
|
||||||
|
if (!self::$_instance) {
|
||||||
|
self::$_instance = new DBPDO();
|
||||||
|
}
|
||||||
|
return self::$_instance;
|
||||||
|
}
|
||||||
|
|
||||||
function prep_query($query)
|
function prep_query($query)
|
||||||
{
|
{
|
||||||
@ -102,6 +109,39 @@ class DBPDO
|
|||||||
return $results;
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ofetch($query, $values = null)
|
||||||
|
{
|
||||||
|
if ($values == null) {
|
||||||
|
$values = array();
|
||||||
|
} else if (!is_array($values)) {
|
||||||
|
$values = array($values);
|
||||||
|
}
|
||||||
|
$stmt = $this->execute($query, $values);
|
||||||
|
return $stmt->fetch(PDO::FETCH_OBJ);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ofetchAll($query, $values = null, $key = null)
|
||||||
|
{
|
||||||
|
if ($values == null) {
|
||||||
|
$values = array();
|
||||||
|
} else if (!is_array($values)) {
|
||||||
|
$values = array($values);
|
||||||
|
}
|
||||||
|
$stmt = $this->execute($query, $values);
|
||||||
|
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
|
||||||
|
|
||||||
|
// Allows the user to retrieve results using a
|
||||||
|
// column from the results as a key for the array
|
||||||
|
if ($key != null && $results[0][$key]) {
|
||||||
|
$keyed_results = array();
|
||||||
|
foreach ($results as $result) {
|
||||||
|
$keyed_results[$result[$key]] = $result;
|
||||||
|
}
|
||||||
|
$results = $keyed_results;
|
||||||
|
}
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
function lastInsertId()
|
function lastInsertId()
|
||||||
{
|
{
|
||||||
return $this->pdo->lastInsertId();
|
return $this->pdo->lastInsertId();
|
||||||
|
@ -4,50 +4,46 @@
|
|||||||
* Date: 06.07.2020
|
* Date: 06.07.2020
|
||||||
* Time: 22:41
|
* Time: 22:41
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
use db;
|
|
||||||
use Krugozor\Database\Mysql\Exception;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class DressedItems
|
class DressedItems
|
||||||
{
|
{
|
||||||
private $DB;
|
|
||||||
private $DBSUM;
|
|
||||||
private $USERID;
|
private $USERID;
|
||||||
private $dressedItem;
|
private $dressedItem;
|
||||||
|
private static $db;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DressedItems constructor.
|
* DressedItems constructor.
|
||||||
*
|
* @param int $user_id ID игрока.
|
||||||
* @param $user_id - ID игрока.
|
|
||||||
*/
|
*/
|
||||||
public function __construct($user_id)
|
public function __construct(int $user_id)
|
||||||
{
|
{
|
||||||
|
self::$db = DBPDO::INIT();
|
||||||
$this->USERID = $user_id;
|
$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)
|
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 {
|
$items = self::$db->fetchALL('SELECT * FROM inventory WHERE owner_id = ? AND dressed_slot > 0', $this->USERID);
|
||||||
$query = <<<SQL
|
$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,
|
SELECT SUM(add_strength) as sum_strength,
|
||||||
SUM(add_dexterity) as sum_dexterity,
|
SUM(add_dexterity) as sum_dexterity,
|
||||||
SUM(add_intuition) as sum_intuition,
|
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_criticals) as sum_criticals,
|
||||||
SUM(add_min_physical_damage) as sum_min_phys_damage,
|
SUM(add_min_physical_damage) as sum_min_phys_damage,
|
||||||
SUM(add_max_physical_damage) as sum_max_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;
|
SQL;
|
||||||
$this->DBSUM = db::c()->query($query, $this->USERID)->fetch_assoc();
|
return self::$db->fetch($query, $this->USERID);
|
||||||
} catch (\Exception $e) {
|
|
||||||
echo '<div class="debug">Не прогрузилась таблица inventory (SUM) для класса DressedItems:' . $e . '</div>';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getItemsInSlots()
|
public function getStrengthBonus(): int
|
||||||
{
|
|
||||||
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()
|
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_strength'];
|
return self::getBonuses()['sum_strength'];
|
||||||
}
|
}
|
||||||
public function getDexterityBonus()
|
|
||||||
|
public function getDexterityBonus(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_dexterity'];
|
return self::getBonuses()['sum_dexterity'];
|
||||||
}
|
}
|
||||||
public function getIntuitionBonus()
|
|
||||||
|
public function getIntuitionBonus(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_intuition'];
|
return self::getBonuses()['sum_intuition'];
|
||||||
}
|
}
|
||||||
public function getEnduranceBonus()
|
|
||||||
|
public function getEnduranceBonus(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_endurance'];
|
return self::getBonuses()['sum_endurance'];
|
||||||
}
|
}
|
||||||
public function getIntelliganceBonus()
|
|
||||||
|
public function getIntelliganceBonus(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_intelligence'];
|
return self::getBonuses()['sum_intelligence'];
|
||||||
}
|
}
|
||||||
public function getWisdomBonus()
|
|
||||||
|
public function getWisdomBonus(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_wisdom'];
|
return self::getBonuses()['sum_wisdom'];
|
||||||
}
|
}
|
||||||
public function getAccuracyBonus()
|
|
||||||
|
public function getAccuracyBonus(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_accuracy'] ?? 0;
|
return self::getBonuses()['sum_accuracy'] ?? 0;
|
||||||
}
|
}
|
||||||
public function getEvasionBonus()
|
|
||||||
|
public function getEvasionBonus(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_evasion'] ?? 0;
|
return self::getBonuses()['sum_evasion'] ?? 0;
|
||||||
}
|
}
|
||||||
public function getCriticalsBonus()
|
|
||||||
|
public function getCriticalsBonus(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_criticals'] ?? 0;
|
return self::getBonuses()['sum_criticals'] ?? 0;
|
||||||
}
|
}
|
||||||
public function getMinPhysDamage()
|
|
||||||
|
public function getMinPhysDamage(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_min_phys_damage'];
|
return self::getBonuses()['sum_min_phys_damage'];
|
||||||
}
|
}
|
||||||
public function getMaxPhysDamage()
|
|
||||||
|
public function getMaxPhysDamage(): int
|
||||||
{
|
{
|
||||||
return self::getBonuses()['sum_max_phys_damage'];
|
return self::getBonuses()['sum_max_phys_damage'];
|
||||||
}
|
}
|
||||||
@ -134,23 +118,13 @@ SQL;
|
|||||||
/**
|
/**
|
||||||
* Снимает с предмета статус одетого на персонажа в определённом слоте персонажа.
|
* Снимает с предмета статус одетого на персонажа в определённом слоте персонажа.
|
||||||
* @param $slot_id - номер слота.
|
* @param $slot_id - номер слота.
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
public function undressItem($slot_id)
|
public function undressItem($slot_id)
|
||||||
{
|
{
|
||||||
self::getItemsInSlots();
|
self::getItemsInSlots();
|
||||||
// Проверяем, что используется один из 12 слотов и наличие предмета в слоте.
|
// Проверяем, что используется один из 12 слотов и наличие предмета в слоте.
|
||||||
if (in_array($slot_id, Item::ITEM_TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem[$slot_id]) {
|
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);
|
self::$db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ? AND owner_id = ?', [$slot_id, $this->USERID]);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function slotStatus($slot_id)
|
|
||||||
{
|
|
||||||
self::getItemsInSlots();
|
|
||||||
if ($this->dressedItem[$slot_id]) {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -30,20 +30,4 @@ class InventoryItem extends Item
|
|||||||
parent::printImage();
|
parent::printImage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Для кнопок управления под картинкой предмета в зависимости от ситуации.
|
|
||||||
*/
|
|
||||||
public function printControls()
|
|
||||||
{
|
|
||||||
//FIXME Сменить заглушку на нормальную функцию!!
|
|
||||||
echo <<<BTN
|
|
||||||
<p><button class="button danger" onclick="location.href='/admin.php'">Выбросить</button>
|
|
||||||
BTN;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return $this->item_id;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -38,8 +38,9 @@ abstract class Item
|
|||||||
public const ITEM_TYPE_RING = 9;
|
public const ITEM_TYPE_RING = 9;
|
||||||
public const ITEM_TYPE_AMULET = 10;
|
public const ITEM_TYPE_AMULET = 10;
|
||||||
public const ITEM_TYPE_CONSUMABLE = 20;
|
public const ITEM_TYPE_CONSUMABLE = 20;
|
||||||
const ITEM_TYPE_OTHER = 50;
|
public const ITEM_TYPE_OTHER = 50;
|
||||||
const ITEM_TYPE_TRASH = 100;
|
public const ITEM_TYPE_TRASH = 100;
|
||||||
|
private $typename;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item constructor.
|
* Item constructor.
|
||||||
@ -102,7 +103,7 @@ abstract class Item
|
|||||||
IMG;
|
IMG;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function wrap($number)
|
protected function wrap(int $number):string
|
||||||
{
|
{
|
||||||
if ($number > 0) {
|
if ($number > 0) {
|
||||||
return ": <b>" . $number . "</b>";
|
return ": <b>" . $number . "</b>";
|
||||||
@ -113,6 +114,9 @@ IMG;
|
|||||||
|
|
||||||
protected function printAllInfo()
|
protected function printAllInfo()
|
||||||
{
|
{
|
||||||
|
$lines = [
|
||||||
|
"Долговечность" => $this->durability,
|
||||||
|
];
|
||||||
echo "<b>" . $this->name . "</b> (Масса: " . $this->weight . ")";
|
echo "<b>" . $this->name . "</b> (Масса: " . $this->weight . ")";
|
||||||
if ($this->durability) {
|
if ($this->durability) {
|
||||||
echo "<br> Долговечность: " . $this->durability;
|
echo "<br> Долговечность: " . $this->durability;
|
||||||
|
@ -2,52 +2,49 @@
|
|||||||
# Date: 16.09.2020 (08:23)
|
# Date: 16.09.2020 (08:23)
|
||||||
// Магия лечения травм
|
// Магия лечения травм
|
||||||
namespace Battles\Magic;
|
namespace Battles\Magic;
|
||||||
use Battles\UserEffects;
|
|
||||||
use Battles\User;
|
use Battles\UserEffects, Battles\Database\DBPDO, Battles\User;
|
||||||
use db;
|
|
||||||
use Krugozor\Database\Mysql\Exception;
|
|
||||||
|
|
||||||
class CureInjury extends Magic
|
class CureInjury extends Magic
|
||||||
{
|
{
|
||||||
private $target;
|
private $target;
|
||||||
|
private $login;
|
||||||
use UserEffects;
|
use UserEffects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Магия лечения травм. Если у персонажа несколько травм, лечится самая тяжёлая.
|
* Магия лечения травм. Если у персонажа несколько травм, лечится самая тяжёлая.
|
||||||
* @param $target - кого лечим.
|
* @param int $target - кого лечим.
|
||||||
* @param $injuryType - тип травмы, которую лечим. 11 лёгкая, 12 средняя, 13 тяжёлая, 14 неизлечимая.
|
* @param int $injuryType - тип травмы, которую лечим. 11 лёгкая, 12 средняя, 13 тяжёлая, 14 неизлечимая, 15 все травмы.
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
public function __construct($target, $injuryType)
|
public function __construct(int $target, int $injuryType)
|
||||||
{
|
{
|
||||||
|
$db = DBPDO::INIT();
|
||||||
$this->target = $target;
|
$this->target = $target;
|
||||||
if ($target && $this->isUsable()) {
|
if (!$this->isUsable()) {
|
||||||
$injury = db::c()->query('SELECT effect_id, type, name FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ?i ORDER BY type DESC LIMIT 1', $target)->fetch_object();
|
|
||||||
$targetName = $this->target->login;
|
|
||||||
if (in_array($injury->effect_id, [11, 12, 13, 14]) && $injuryType >= $injury->type) {
|
|
||||||
db::c()->query('DELETE FROM users_effects WHERE effect_id = ?i', $injury->effect_id);
|
|
||||||
if (empty($injury->name) || $injury->name == 'Неизвестный эффект') {
|
|
||||||
$injuryName = self::$effectName[$injury->type];
|
|
||||||
} else {
|
|
||||||
$injuryName = $injury->name;
|
|
||||||
}
|
|
||||||
return "Вы вылечили повреждение ${injuryName} персонажу ${targetName}.";
|
|
||||||
} elseif ($injury->effect_id && $injuryType == 15) {
|
|
||||||
db::c()->query('DELETE FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ?i', $target);
|
|
||||||
return "Вы вылечили все повреждения персонажу ${targetName}.";
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return $this->status;
|
return $this->status;
|
||||||
}
|
}
|
||||||
|
$ok = null;
|
||||||
|
$injury = $db->ofetch('SELECT effect_id, type, name FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ? ORDER BY type DESC LIMIT 1', $target);
|
||||||
|
if (in_array($injury->type, [11, 12, 13, 14]) && $injuryType >= $injury->type) {
|
||||||
|
$db->execute('DELETE FROM users_effects WHERE effect_id = ?', $injury->effect_id);
|
||||||
|
if (empty($injury->name) || $injury->name == 'Неизвестный эффект') {
|
||||||
|
$injuryName = self::$effectName[$injury->type];
|
||||||
|
} else {
|
||||||
|
$injuryName = $injury->name;
|
||||||
|
}
|
||||||
|
$ok = "Вы вылечили повреждение ${injuryName} персонажу $this->login.";
|
||||||
|
} elseif ($injury->effect_id && $injuryType == 15) {
|
||||||
|
$db->execute('DELETE FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ?', $target);
|
||||||
|
$ok = "Вы вылечили все повреждения персонажу $this->login.";
|
||||||
|
}
|
||||||
|
return $ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверки на успех.
|
* Проверки на успех.
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function isUsable()
|
private function isUsable(): bool
|
||||||
{
|
{
|
||||||
$caster = new User($_SESSION['uid']);
|
$caster = new User($_SESSION['uid']);
|
||||||
if ($this->target == $_SESSION['uid']) {
|
if ($this->target == $_SESSION['uid']) {
|
||||||
@ -55,6 +52,7 @@ class CureInjury extends Magic
|
|||||||
} else {
|
} else {
|
||||||
$this->target = new User($this->target);
|
$this->target = new User($this->target);
|
||||||
}
|
}
|
||||||
|
$this->login = $this->target->login;
|
||||||
return ($this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster) && $this->isNotInBattle($caster));
|
return ($this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster) && $this->isNotInBattle($caster));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,7 +2,8 @@
|
|||||||
// Магия восстановления здоровья
|
// Магия восстановления здоровья
|
||||||
use Battles\Magic\Magic;
|
use Battles\Magic\Magic;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
use Krugozor\Database\Mysql\Exception;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class Healing extends Magic
|
class Healing extends Magic
|
||||||
{
|
{
|
||||||
private $target;
|
private $target;
|
||||||
@ -10,38 +11,35 @@ class Healing extends Magic
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Магия лечения.
|
* Магия лечения.
|
||||||
* @param $target - кого лечим.
|
* @param $target - кого лечим.
|
||||||
* @param $power - на сколько лечим.
|
* @param $power - на сколько лечим.
|
||||||
* @param null $isPercentage - если включён, считает $power в процентах, иначе, по-умолчанию просто как число.
|
* @param null $isPercentage - если включён, считает $power в процентах, иначе, по-умолчанию просто как число.
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
public function __construct($target, $power, $isPercentage = null)
|
public function __construct($target, $power, $isPercentage = null)
|
||||||
{
|
{
|
||||||
$this->magicPower = $power;
|
$this->magicPower = $power;
|
||||||
$this->target = $target;
|
$this->target = $target;
|
||||||
if ($target && $this->isUsable()) {
|
if (!$this->isUsable()) {
|
||||||
if ($isPercentage) {
|
|
||||||
$healHealthAmount = $this->target->health + $this->target->maxHealth / 100 * $this->magicPower;
|
|
||||||
} else {
|
|
||||||
$healHealthAmount = $this->target->health + $this->magicPower;
|
|
||||||
}
|
|
||||||
if ($healHealthAmount > $this->target->maxHealth) {
|
|
||||||
$healHealthAmount = $this->target->maxHealth;
|
|
||||||
}
|
|
||||||
db::c()->query('UPDATE users SET health = ?i WHERE id = ?i', $healHealthAmount, $this->target->id);
|
|
||||||
$targetName = $this->target->login;
|
|
||||||
return "Вы восстановили ${healHealthAmount} здоровья персонажу ${targetName}.";
|
|
||||||
} else {
|
|
||||||
return $this->status;
|
return $this->status;
|
||||||
}
|
}
|
||||||
|
if ($isPercentage) {
|
||||||
|
$healHealthAmount = $this->target->health + $this->target->maxHealth / 100 * $this->magicPower;
|
||||||
|
} else {
|
||||||
|
$healHealthAmount = $this->target->health + $this->magicPower;
|
||||||
|
}
|
||||||
|
if ($healHealthAmount > $this->target->maxHealth) {
|
||||||
|
$healHealthAmount = $this->target->maxHealth;
|
||||||
|
}
|
||||||
|
DBPDO::INIT()->execute('UPDATE users SET health = ? WHERE id = ?', [$healHealthAmount, $this->target->id]);
|
||||||
|
$targetName = $this->target->login;
|
||||||
|
return "Вы восстановили ${healHealthAmount} здоровья персонажу ${targetName}.";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверки на успех.
|
* Проверки на успех.
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function isUsable():bool
|
private function isUsable(): bool
|
||||||
{
|
{
|
||||||
$caster = new User($_SESSION['uid']);
|
$caster = new User($_SESSION['uid']);
|
||||||
if ($this->target == $_SESSION['uid']) {
|
if ($this->target == $_SESSION['uid']) {
|
||||||
@ -49,6 +47,6 @@ class Healing extends Magic
|
|||||||
} else {
|
} else {
|
||||||
$this->target = new User($this->target);
|
$this->target = new User($this->target);
|
||||||
}
|
}
|
||||||
return $this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster) && $this->skillCheck($caster);
|
return $this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster) && $this->isSuccess($caster);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ class Magic
|
|||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function skillCheck($caster, int $difficulty = 40):bool
|
protected function isSuccess($caster, int $difficulty = 40):bool
|
||||||
{
|
{
|
||||||
# 40 - потолок стата.
|
# 40 - потолок стата.
|
||||||
if ($difficulty > 40) {
|
if ($difficulty > 40) {
|
||||||
|
@ -3,12 +3,10 @@
|
|||||||
|
|
||||||
namespace Battles\Magic;
|
namespace Battles\Magic;
|
||||||
|
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
use Battles\DressedItems;
|
use Battles\DressedItems;
|
||||||
use Battles\Item;
|
use Battles\Item;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
use Krugozor\Database\Mysql\Exception;
|
|
||||||
use db;
|
|
||||||
|
|
||||||
class Sharpen extends Magic
|
class Sharpen extends Magic
|
||||||
{
|
{
|
||||||
@ -20,30 +18,29 @@ class Sharpen extends Magic
|
|||||||
* @param int $sharpenStrength
|
* @param int $sharpenStrength
|
||||||
* @param int $magicDifficulty
|
* @param int $magicDifficulty
|
||||||
*
|
*
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
public function __construct(int $sharpenStrength, int $magicDifficulty)
|
public function __construct(int $sharpenStrength, int $magicDifficulty)
|
||||||
{
|
{
|
||||||
$this->magicDifficulty = $magicDifficulty;
|
$this->magicDifficulty = $magicDifficulty;
|
||||||
if ($this->isUsable()) {
|
if (!$this->isUsable()) {
|
||||||
$item = DressedItems::getDressedItemBySlot(Item::ITEM_TYPE_WEAPON, $_SESSION['uid']);
|
|
||||||
// Проверяем, что в названии предмета нет цифр и плюсов.
|
|
||||||
if (preg_match('/[\W\S]+\+\[?[\d]]?/', $item['name'])) {
|
|
||||||
return 'Этот предмет точить нельзя!';
|
|
||||||
}
|
|
||||||
$newMinPhysicalDamage = $item['add_min_physical_damage'] + $sharpenStrength;
|
|
||||||
$newMaxPhysicalDamage = $item['add_max_physical_damage'] + $sharpenStrength;
|
|
||||||
$newItemName = $item['name'] . " [+$sharpenStrength]";
|
|
||||||
|
|
||||||
db::c()->query('UPDATE battles.inventory SET name = "?s", add_min_physical_damage = "?s", add_max_physical_damage = "?s" WHERE item_id = ?i ', $newItemName, $newMinPhysicalDamage, $newMaxPhysicalDamage, $item['item_id']);
|
|
||||||
return "У вас получилось изготовить предмет $newItemName!";
|
|
||||||
} else {
|
|
||||||
return $this->status;
|
return $this->status;
|
||||||
}
|
}
|
||||||
|
$item = DressedItems::getDressedItemBySlot(Item::ITEM_TYPE_WEAPON, $_SESSION['uid']);
|
||||||
|
// Проверяем, что в названии предмета нет цифр и плюсов.
|
||||||
|
if (preg_match('/[\W\S]+\+\[?[\d]]?/', $item['name'])) {
|
||||||
|
return 'Этот предмет точить нельзя!';
|
||||||
|
}
|
||||||
|
$newMinPhysicalDamage = $item['add_min_physical_damage'] + $sharpenStrength;
|
||||||
|
$newMaxPhysicalDamage = $item['add_max_physical_damage'] + $sharpenStrength;
|
||||||
|
$newItemName = $item['name'] . " [+$sharpenStrength]";
|
||||||
|
|
||||||
|
DBPDO::INIT()->execute('UPDATE battles.inventory SET name = ?, add_min_physical_damage = ?, add_max_physical_damage = ? WHERE item_id = ? ', [$newItemName, $newMinPhysicalDamage, $newMaxPhysicalDamage, $item['item_id']]);
|
||||||
|
return "У вас получилось изготовить предмет $newItemName!";
|
||||||
}
|
}
|
||||||
private function isUsable():bool
|
|
||||||
|
private function isUsable(): bool
|
||||||
{
|
{
|
||||||
$caster = new User($_SESSION['uid']);
|
$caster = new User($_SESSION['uid']);
|
||||||
return $this->isNotInBattle($caster) && $this->skillCheck($caster, $this->magicDifficulty);
|
return $this->isNotInBattle($caster) && $this->isSuccess($caster, $this->magicDifficulty);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,41 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Battles\Magic;
|
|
||||||
|
|
||||||
use db;
|
|
||||||
|
|
||||||
class attack
|
|
||||||
{
|
|
||||||
private $target_user;
|
|
||||||
private $caster;
|
|
||||||
|
|
||||||
private function __construct($target_user_id)
|
|
||||||
{
|
|
||||||
if (!$this->caster) {
|
|
||||||
$this->caster = db::c()->query('SELECT * FROM `users` WHERE `id` = ?i', $_SESSION['uid']);
|
|
||||||
}
|
|
||||||
if (!$this->target_user) {
|
|
||||||
$this->target_user = db::c()->query('SELECT * FROM `users` WHERE `id` = ?i', $target_user_id);
|
|
||||||
}
|
|
||||||
if ($this->checks() == 1) {
|
|
||||||
return 'Done!';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function checks()
|
|
||||||
{
|
|
||||||
if ($this->caster['battle']) {
|
|
||||||
return 'Не в бою...';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function id($playerId)
|
|
||||||
{
|
|
||||||
return new self($playerId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -4,33 +4,34 @@
|
|||||||
* Date: 05.07.2020
|
* Date: 05.07.2020
|
||||||
* Time: 23:32
|
* Time: 23:32
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Battles\Models;
|
namespace Battles\Models;
|
||||||
|
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class EffectsModel
|
class EffectsModel
|
||||||
{
|
{
|
||||||
protected $DB;
|
protected $DB;
|
||||||
const EFFECT_HIDEUSERINFO = 5; // Обезлик
|
const EFFECT_HIDEUSERINFO = 5; // Обезлик
|
||||||
public function __construct(int $user_id) {
|
|
||||||
try {
|
|
||||||
$this->DB = \db::c()->query('SELECT * FROM users_effects WHERE owner_id = ?i', $user_id);
|
|
||||||
} catch (\Throwable $e) {echo '<div class="debug">class EffectsModel: Не могу подключиться к таблице effects!</div>';}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getEffects($user_id)
|
public function __construct(int $user_id)
|
||||||
{
|
{
|
||||||
|
$this->DB = DBPDO::INIT()->ofetchAll('SELECT * FROM users_effects WHERE owner_id = ?', $user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка обезличен ли персонаж.
|
* Проверка обезличен ли персонаж.
|
||||||
* @return int date() до конца эффекта или 0.
|
* @return int date() до конца эффекта или 0.
|
||||||
*/
|
*/
|
||||||
public function getHideUserInfoStatus()
|
public function getHideUserInfoStatus(): int
|
||||||
{
|
{
|
||||||
if ($this->DB) {
|
if ($this->DB) {
|
||||||
while ($row = $this->DB->fetch_object()) {
|
$i = 0;
|
||||||
if ($row->type == self::EFFECT_HIDEUSERINFO) {
|
while ($i < count($this->DB)) {
|
||||||
return $row->time;
|
if ($this->DB->type == self::EFFECT_HIDEUSERINFO) {
|
||||||
|
return $this->DB->remaining_time;
|
||||||
}
|
}
|
||||||
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
* Time: 13:17
|
* Time: 13:17
|
||||||
*/
|
*/
|
||||||
namespace Battles\Models;
|
namespace Battles\Models;
|
||||||
use Exceptions\GameException;
|
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class PresentsModel
|
class PresentsModel
|
||||||
{
|
{
|
||||||
@ -14,7 +15,7 @@ class PresentsModel
|
|||||||
public function __construct(int $user_id)
|
public function __construct(int $user_id)
|
||||||
{
|
{
|
||||||
if (!$this->DB) {
|
if (!$this->DB) {
|
||||||
$this->DB = \db::c()->query('SELECT sender_id, image FROM `users_presents` WHERE owner_id = ?i', $user_id);
|
$this->DB = DBPDO::INIT()->execute('SELECT sender_id, image FROM `users_presents` WHERE owner_id = ?', $user_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,9 +23,4 @@ class PresentsModel
|
|||||||
{
|
{
|
||||||
return $this->DB;
|
return $this->DB;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPresentsSum()
|
|
||||||
{
|
|
||||||
return $this->DB->getNumRows();
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,27 +1,26 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
use db;
|
|
||||||
/**
|
/**
|
||||||
* Разные способы отображения строки с логином персонажа.
|
* Разные способы отображения строки с логином персонажа.
|
||||||
*/
|
*/
|
||||||
|
const INVIS = '<i>невидимка</i>';
|
||||||
class Nick extends User
|
class Nick extends User
|
||||||
{
|
{
|
||||||
private function getInvisibilityStatus()
|
private function getInvisibilityStatus()
|
||||||
{
|
{
|
||||||
return db::c()->query('SELECT 1 FROM users_effects WHERE type = 1022 AND owner_id = ?i', $this->id);
|
return self::$db->fetch('SELECT 1 FROM users_effects WHERE type = 1022 AND owner_id = ?', $this->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображение иконки склонности.
|
* Отображение иконки склонности.
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function getAlign():string
|
private function getAlign():?string
|
||||||
{
|
{
|
||||||
if (isset($this->align)) {
|
if (isset($this->align)) {
|
||||||
return sprintf('<img src="i/align_%s.gif">', $this->align);
|
return sprintf('<img src="i/align_%s.gif">', $this->align);
|
||||||
} else {
|
} else {
|
||||||
return '';
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,12 +28,12 @@ class Nick extends User
|
|||||||
* Отображение иконки клана.
|
* Отображение иконки клана.
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function getClan():string
|
private function getClan():?string
|
||||||
{
|
{
|
||||||
if (isset($this->clan)) {
|
if (isset($this->clan)) {
|
||||||
return sprintf('<img src="i/clan/%s.png">', $this->clan);
|
return sprintf('<img src="i/clan/%s.png">', $this->clan);
|
||||||
} else {
|
} else {
|
||||||
return '';
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +43,7 @@ class Nick extends User
|
|||||||
*
|
*
|
||||||
* @return Nick
|
* @return Nick
|
||||||
*/
|
*/
|
||||||
public static function id($playerId)
|
public static function id($playerId): Nick
|
||||||
{
|
{
|
||||||
return new self($playerId);
|
return new self($playerId);
|
||||||
}
|
}
|
||||||
@ -59,7 +58,7 @@ class Nick extends User
|
|||||||
public function full($showInvisibility = 0):string
|
public function full($showInvisibility = 0):string
|
||||||
{
|
{
|
||||||
if ($showInvisibility && $this->getInvisibilityStatus()) {
|
if ($showInvisibility && $this->getInvisibilityStatus()) {
|
||||||
return '<i>невидимка</i>';
|
return INVIS;
|
||||||
}
|
}
|
||||||
return $this->getAlign().$this->getClan().sprintf('<b>%s</b> [%s] <a href="inf.php?%s" target="_blank"><img src="i/inf.gif" style="width:12px;height:11px"></a>', $this->login, $this->level, $this->login);
|
return $this->getAlign().$this->getClan().sprintf('<b>%s</b> [%s] <a href="inf.php?%s" target="_blank"><img src="i/inf.gif" style="width:12px;height:11px"></a>', $this->login, $this->level, $this->login);
|
||||||
}
|
}
|
||||||
@ -72,7 +71,7 @@ class Nick extends User
|
|||||||
public function short($showInvisibility = 0):string
|
public function short($showInvisibility = 0):string
|
||||||
{
|
{
|
||||||
if ($showInvisibility && $this->getInvisibilityStatus()) {
|
if ($showInvisibility && $this->getInvisibilityStatus()) {
|
||||||
return '<i>невидимка</i>';
|
return INVIS;
|
||||||
} else {
|
} else {
|
||||||
return htmlspecialchars($this->login);
|
return htmlspecialchars($this->login);
|
||||||
}
|
}
|
||||||
@ -96,7 +95,7 @@ class Nick extends User
|
|||||||
public function battleShort($textstyle):string
|
public function battleShort($textstyle):string
|
||||||
{
|
{
|
||||||
if ($this->getInvisibilityStatus()) {
|
if ($this->getInvisibilityStatus()) {
|
||||||
return '<i>невидимка</i>';
|
return INVIS;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return sprintf('<span style="%s">%s</span> [_hp_/_maxhp_]', $textstyle, $this->login);
|
return sprintf('<span style="%s">%s</span> [_hp_/_maxhp_]', $textstyle, $this->login);
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class ShopItem extends Item
|
class ShopItem extends Item
|
||||||
{
|
{
|
||||||
public function printInfo()
|
public function printInfo()
|
||||||
@ -10,54 +12,61 @@ class ShopItem extends Item
|
|||||||
public function buyItem($owner)
|
public function buyItem($owner)
|
||||||
{
|
{
|
||||||
if ($owner) {
|
if ($owner) {
|
||||||
db::c()->query('
|
$db = new DBPDO();
|
||||||
INSERT INTO `inventory` (`prototype`,`owner`,`name`,`type`,`massa`,`cost`,`img`,`maxdur`,`isrep`,`gsila`,`glovk`,`ginta`,`gintel`,
|
$query = "INSERT INTO inventory (
|
||||||
`ghp`,`gnoj`,`gtopor`,`gdubina`,`gmech`,`gfire`,`gwater`,`gair`,`gearth`,`glight`,`ggray`,`gdark`,
|
owner_id, name, item_type, durability, price,
|
||||||
`needident`,`nsila`,`nlovk`,`ninta`,`nintel`,`nmudra`,`nvinos`,`nnoj`,`ntopor`,`ndubina`,`nmech`,
|
need_strength, need_dexterity, need_intuition,
|
||||||
`nfire`,`nwater`,`nair`,`nearth`,`nlight`,`ngray`,`ndark`,`mfkrit`,`mfakrit`,`mfuvorot`,`mfauvorot`,
|
need_endurance, need_intelligence, need_wisdom,
|
||||||
`bron1`,`bron2`,`bron3`,`bron4`,`maxu`,`minu`,`magic`,`nlevel`,`nalign`,`dategoden`,`goden`,`otdel`,
|
add_strength, add_dexterity, add_intuition,
|
||||||
`artefact`, `koll`) VALUES (?i,?i,"?s",?i,?i,?i,"?s",?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,
|
add_endurance, add_intelligence, add_wisdom,
|
||||||
?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,?i,"?s",?i,?i)
|
add_accuracy, add_evasion, add_criticals,
|
||||||
', $this->id, $owner, $this->name, $this->type, $this->massa, $this->cost, $this->img, $this->maxdur, $this->isrep, $this->gsila, $this->glovk, $this->ginta, $this->gintel,
|
add_min_physical_damage, add_max_physical_damage,
|
||||||
$this->ghp, $this->gnoj, $this->gtopor, $this->gdubina, $this->gmech, $this->gfire, $this->gwater, $this->gair, $this->gearth, $this->glight, $this->ggray, $this->gdark,
|
image, weight)
|
||||||
$this->needident, $this->nsila, $this->nlovk, $this->ninta, $this->nintel, $this->nmudra, $this->nvinos, $this->nnoj, $this->ntopor, $this->ndubina, $this->nmech,
|
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
||||||
$this->nfire, $this->nwater, $this->nair, $this->nearth, $this->nlight, $this->ngray, $this->ndark, $this->mfkrit, $this->mfakrit, $this->mfuvorot, $this->mfauvorot,
|
$values = [
|
||||||
$this->bron1, $this->bron2, $this->bron3, $this->bron4, $this->maxu, $this->minu, $this->magic, $this->nlevel, $this->nalign, $this->dategoden, $this->goden, $this->razdel,
|
$owner, $this->name, $this->item_type, $this->durability, $this->price,
|
||||||
$this->artefact, $this->koll);
|
$this->need_strength, $this->need_dexterity, $this->need_intuition,
|
||||||
|
$this->need_endurance, $this->need_intelligence, $this->need_wisdom,
|
||||||
|
$this->add_strength, $this->add_dexterity, $this->add_intuition,
|
||||||
|
$this->add_endurance, $this->add_intelligence, $this->add_wisdom,
|
||||||
|
$this->add_accuracy, $this->add_evasion, $this->add_criticals,
|
||||||
|
$this->add_min_physical_damage, $this->add_max_physical_damage,
|
||||||
|
$this->image, $this->weight
|
||||||
|
];
|
||||||
|
$db->execute($query, $values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Для кнопок управления под картинкой прелмета в зависимости от ситуации.
|
* Для кнопок управления под картинкой предмета в зависимости от ситуации.
|
||||||
*/
|
*/
|
||||||
public function printControls($shopType = false)
|
public function printControls($shopType = false)
|
||||||
{
|
{
|
||||||
if ($shopType === 'marketput') {
|
if ($shopType === 'marketput') {
|
||||||
echo <<<BTN
|
echo <<<BTN
|
||||||
<form method="post">
|
<form method="post">
|
||||||
<input placeholder="{$this->cost}" name="cost">
|
<input placeholder="{$this->price}" name="cost">
|
||||||
<input type="hidden" name="putId" value="{$this->id}">
|
<input type="hidden" name="putId" value="{$this->item_id}">
|
||||||
<br><input type="submit" name="putToMarket" value="Cдать в магазин">
|
<br><input type="submit" name="putToMarket" value="Cдать в магазин">
|
||||||
</form>
|
</form>
|
||||||
BTN;
|
BTN;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
switch ($shopType) {
|
switch ($shopType) {
|
||||||
default:
|
default:
|
||||||
$btnValue = "Купить за " . intval($this->cost) . " кр.";
|
$btnValue = "Купить за " . intval($this->price) . " кр.";
|
||||||
$btnLink = "/shop.php?buy={$this->id}&rnd=" . mt_rand();
|
$btnLink = "/shop.php?buy={$this->item_id}&rnd=" . mt_rand();
|
||||||
break;
|
break;
|
||||||
case 'sell':
|
case 'sell':
|
||||||
$btnValue = "Продать";
|
$btnValue = "Продать";
|
||||||
$btnLink = "/shop.php?sell={$this->id}&rnd=" . mt_rand();
|
$btnLink = "/shop.php?sell={$this->item_id}&rnd=" . mt_rand();
|
||||||
break;
|
break;
|
||||||
case 'marketgetback':
|
case 'marketgetback':
|
||||||
$btnValue = "Снять с продажи";
|
$btnValue = "Снять с продажи";
|
||||||
$btnLink = "?back={$this->id}&rnd=" . mt_rand();
|
$btnLink = "?back={$this->item_id}&rnd=" . mt_rand();
|
||||||
break;
|
break;
|
||||||
case 'marketbuy':
|
case 'marketbuy':
|
||||||
$btnValue = "Купить за " . intval($this->setsale) . " кр.";
|
$btnValue = "Купить за " . intval($this->setsale) . " кр.";
|
||||||
$btnLink = "?otdel={$this->otdel}&set={$this->id}&rnd=" . mt_rand();
|
$btnLink = "?otdel={$this->item_type}&set={$this->item_id}&rnd=" . mt_rand();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +74,6 @@ BTN;
|
|||||||
<p><input type="button" style="background: darkgrey; border: 1px solid grey; border-radius: 2px;" value="{$btnValue}"
|
<p><input type="button" style="background: darkgrey; border: 1px solid grey; border-radius: 2px;" value="{$btnValue}"
|
||||||
onclick="location='{$btnLink}'">
|
onclick="location='{$btnLink}'">
|
||||||
BTN;
|
BTN;
|
||||||
if ($this->count > 0) echo "<br><small>В наличии: {$this->count} штук</small>";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -36,7 +36,7 @@ HTML_HEADER;
|
|||||||
/**
|
/**
|
||||||
* @param string $buildingName название здания
|
* @param string $buildingName название здания
|
||||||
* @param string $streetName служебное название улицы на которой стоит здание для кнопки возврата.
|
* @param string $streetName служебное название улицы на которой стоит здание для кнопки возврата.
|
||||||
* @return string
|
* @return void
|
||||||
*/
|
*/
|
||||||
public static function buildingTop(string $buildingName, string $streetName): void
|
public static function buildingTop(string $buildingName, string $streetName): void
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
# Date: 26.10.2020 (16:08)
|
# Date: 26.10.2020 (16:08)
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class Travel
|
class Travel
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -55,14 +57,15 @@ class Travel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Перемещение по комнатам.
|
* Перемещение по комнатам.
|
||||||
* @param int $roomId ID куда идём.
|
* @param int $roomId ID куда идём.
|
||||||
* @param int $roomIdCurrent ID откуда идём.
|
* @param int $roomIdCurrent ID откуда идём.
|
||||||
* @throws \Krugozor\Database\Mysql\Exception
|
* @param DBPDO|null $db
|
||||||
*/
|
*/
|
||||||
public static function toRoom(int $roomId, int $roomIdCurrent): void
|
public static function toRoom(int $roomId, int $roomIdCurrent): void
|
||||||
{
|
{
|
||||||
$itemsWeight = \db::c()->query('SELECT SUM(weight) AS all_weight FROM `inventory` WHERE owner_id = ?i AND on_sale = 0', $_SESSION['uid'])->fetch_assoc();
|
$db = DBPDO::INIT();
|
||||||
$eff = \db::c()->query('SELECT type FROM users_effects WHERE owner_id = ?i AND (`type` = 10 OR `type` = 13 OR `type` = 14)', $_SESSION['uid'])->fetch_assoc();
|
$itemsWeight = $db->fetch('SELECT SUM(weight) AS all_weight FROM inventory WHERE owner_id = ? AND on_sale = 0', $_SESSION['uid']);
|
||||||
|
$eff = $db->fetch('SELECT type FROM users_effects WHERE owner_id = ? AND (`type` = 10 OR `type` = 13 OR `type` = 14)', $_SESSION['uid']);
|
||||||
$errors = [];
|
$errors = [];
|
||||||
if ($itemsWeight['all_weight'] > get_meshok()) {
|
if ($itemsWeight['all_weight'] > get_meshok()) {
|
||||||
$errors[0] = 'У вас переполнен рюкзак, вы не можете передвигаться...';
|
$errors[0] = 'У вас переполнен рюкзак, вы не можете передвигаться...';
|
||||||
@ -78,7 +81,7 @@ class Travel
|
|||||||
echo sprintf('<span class="error">%s</span>', $error);
|
echo sprintf('<span class="error">%s</span>', $error);
|
||||||
}
|
}
|
||||||
} elseif (in_array($roomId, self::allowedRoomMoves($roomIdCurrent))) {
|
} elseif (in_array($roomId, self::allowedRoomMoves($roomIdCurrent))) {
|
||||||
\db::c()->query('UPDATE users, online SET users.room = ?i, online.room = ?i WHERE `online`.`user_id` = `users`.`id` AND `online`.`user_id` = ?i', $roomId, $roomId, $_SESSION['uid']);
|
$db->execute('UPDATE users, online SET users.room = ?, online.room = ? WHERE `online`.`user_id` = `users`.`id` AND `online`.`user_id` = ?', [$roomId, $roomId, $_SESSION['uid']]);
|
||||||
header('location: ' . self::$roomFileName[$roomId]);
|
header('location: ' . self::$roomFileName[$roomId]);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
use Exceptions\GameException;
|
use Exceptions\GameException;
|
||||||
use db;
|
|
||||||
|
|
||||||
class User
|
class User
|
||||||
{
|
{
|
||||||
@ -53,10 +53,12 @@ class User
|
|||||||
// Динамически рассчитываемые
|
// Динамически рассчитываемые
|
||||||
public $maxHealth = 5;
|
public $maxHealth = 5;
|
||||||
public $maxMana = 5;
|
public $maxMana = 5;
|
||||||
|
protected static $db;
|
||||||
|
|
||||||
public function __construct($user)
|
public function __construct(int $user)
|
||||||
{
|
{
|
||||||
$user_query = db::c()->query('SELECT * FROM users WHERE id = "?s" OR login = "?s"', $user, $user)->fetch_assoc();
|
self::$db = DBPDO::INIT();
|
||||||
|
$user_query = self::$db->fetch('SELECT * FROM users WHERE id = ? OR login = ?', [$user, $user]);
|
||||||
foreach ($this as $key => $value) {
|
foreach ($this as $key => $value) {
|
||||||
if (isset($user_query[$key])) {
|
if (isset($user_query[$key])) {
|
||||||
$this->$key = $user_query[$key];
|
$this->$key = $user_query[$key];
|
||||||
@ -73,7 +75,7 @@ class User
|
|||||||
* @return string
|
* @return string
|
||||||
* @throws GameException
|
* @throws GameException
|
||||||
*/
|
*/
|
||||||
public function getStat($stat_name, $isMainWindow = 0)
|
public function getStat($stat_name, $isMainWindow = 0):string
|
||||||
{
|
{
|
||||||
$allowed = ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'];
|
$allowed = ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'];
|
||||||
if (in_array($stat_name, $allowed)) {
|
if (in_array($stat_name, $allowed)) {
|
||||||
@ -89,16 +91,16 @@ class User
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков статов.
|
* Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков статов.
|
||||||
* @param $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'.
|
* @param string $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'.
|
||||||
* @throws GameException
|
* @throws GameException
|
||||||
*/
|
*/
|
||||||
public function addOnePointToStat($stat_name)
|
public function addOnePointToStat(string $stat_name)
|
||||||
{
|
{
|
||||||
$allowed = ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'];
|
$allowed = ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'];
|
||||||
if (in_array($stat_name, $allowed)) {
|
if (in_array($stat_name, $allowed)) {
|
||||||
if ($this->free_stat_points > 0 && $this->$stat_name <= self::STAT_MAXIMUM_AMOUNT) {
|
if ($this->free_stat_points > 0 && $this->$stat_name <= self::STAT_MAXIMUM_AMOUNT) {
|
||||||
$query = 'UPDATE users SET ?f = ?f + 1, free_stat_points = free_stat_points - 1 WHERE id = ?i';
|
$query = "UPDATE users SET {$stat_name} = {$stat_name} + 1, free_stat_points = free_stat_points - 1 WHERE id = ?";
|
||||||
db::c()->query($query, $stat_name, $stat_name, $this->id);
|
self::$db->execute($query,$this->id);
|
||||||
} else {
|
} else {
|
||||||
throw new GameException(self::ERROR_STAT_IS_MAXIMUM);
|
throw new GameException(self::ERROR_STAT_IS_MAXIMUM);
|
||||||
}
|
}
|
||||||
@ -108,7 +110,7 @@ class User
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function showStarSign()
|
protected function showStarSign(): ?string
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* 1 aries
|
* 1 aries
|
||||||
@ -124,19 +126,21 @@ class User
|
|||||||
* 11 aquarius
|
* 11 aquarius
|
||||||
* 12 pisches
|
* 12 pisches
|
||||||
*/
|
*/
|
||||||
$zodiac[356] = "10";
|
$zodiac = [
|
||||||
$zodiac[326] = "09";
|
356 => "10",
|
||||||
$zodiac[296] = "08";
|
326 => "09",
|
||||||
$zodiac[266] = "07";
|
296 => "08",
|
||||||
$zodiac[235] = "06";
|
266 => "07",
|
||||||
$zodiac[203] = "05";
|
235 => "06",
|
||||||
$zodiac[172] = "04";
|
203 => "05",
|
||||||
$zodiac[140] = "03";
|
172 => "04",
|
||||||
$zodiac[111] = "02";
|
140 => "03",
|
||||||
$zodiac[78] = "01";
|
111 => "02",
|
||||||
$zodiac[51] = "12";
|
78 => "01",
|
||||||
$zodiac[20] = "11";
|
51 => "12",
|
||||||
$zodiac[0] = "10";
|
20 => "11",
|
||||||
|
0 => "10",
|
||||||
|
];
|
||||||
$dayOfYear = date("z", strtotime($this->borndate));
|
$dayOfYear = date("z", strtotime($this->borndate));
|
||||||
$isLeapYear = date("L", strtotime($this->borndate)); //Высокосный?
|
$isLeapYear = date("L", strtotime($this->borndate)); //Высокосный?
|
||||||
if ($isLeapYear && $dayOfYear > 59) {
|
if ($isLeapYear && $dayOfYear > 59) {
|
||||||
@ -159,4 +163,17 @@ class User
|
|||||||
{
|
{
|
||||||
return $this->mana . '/' . $this->maxMana;
|
return $this->mana . '/' . $this->maxMana;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function setUserEffect(int $userId, int $type, string $name, int $time):bool
|
||||||
|
{
|
||||||
|
return self::$db->execute('INSERT INTO users_effects (owner_id, type, name, remaining_time) VALUES (?,?,?,?)',[$userId, $type, $name, $time]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function removeUserEffect(int $userId, int $type):bool
|
||||||
|
{
|
||||||
|
if (self::$db->fetch('SELECT 1 FROM users_effects WHERE owner_id = ? AND type = ?', [$userId, $type])) {
|
||||||
|
self::$db->execute('DELETE FROM users_effects WHERE owner_id = ? AND type = ?', [$userId, $type]);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
@ -5,16 +5,15 @@ namespace Battles;
|
|||||||
trait UserEffects
|
trait UserEffects
|
||||||
{
|
{
|
||||||
public static $effectName = [
|
public static $effectName = [
|
||||||
|
2 => 'Заклинание молчания',
|
||||||
|
3 => 'Заклятие форумного молчания',
|
||||||
|
4 => 'Заклятие хаоса',
|
||||||
|
5 => 'Заклятие обезличивания',
|
||||||
10 => 'паралич',
|
10 => 'паралич',
|
||||||
11 => 'легкая травма',
|
11 => 'легкая травма',
|
||||||
12 => 'средняя травма',
|
12 => 'средняя травма',
|
||||||
13 => 'тяжёлая травма',
|
13 => 'тяжёлая травма',
|
||||||
14 => 'неизлечимая травма',
|
14 => 'неизлечимая травма',
|
||||||
1022 => 'невидимость',
|
|
||||||
2 => 'Заклинание молчания',
|
|
||||||
3 => 'Заклятие форумного молчания',
|
|
||||||
4 => 'Заклятие хаоса',
|
|
||||||
5 => 'Заклятие обезличивания',
|
|
||||||
20 => 'Проверка Паладинов',
|
20 => 'Проверка Паладинов',
|
||||||
21 => 'Сила нейтралитета',
|
21 => 'Сила нейтралитета',
|
||||||
22 => 'Защита от кулачного нападения',
|
22 => 'Защита от кулачного нападения',
|
||||||
@ -47,6 +46,7 @@ trait UserEffects
|
|||||||
226 => 'Стена Воды [3]',
|
226 => 'Стена Воды [3]',
|
||||||
227 => 'Защита от нападений',
|
227 => 'Защита от нападений',
|
||||||
405 => 'Микстура жизненных сил',
|
405 => 'Микстура жизненных сил',
|
||||||
|
1022 => 'невидимость',
|
||||||
9994 => 'Антидот/Путы (Эликсир?)',
|
9994 => 'Антидот/Путы (Эликсир?)',
|
||||||
];
|
];
|
||||||
}
|
}
|
@ -11,12 +11,10 @@ class UserInfo extends User
|
|||||||
/**
|
/**
|
||||||
* Отображает куклу персонажа (образ и слоты).
|
* Отображает куклу персонажа (образ и слоты).
|
||||||
*
|
*
|
||||||
* @param int $isBattle - установить 1, если куклу нужно отобразить в поединке (показывает параметры при наведении
|
* @param int $isBattle установить 1, если куклу нужно отобразить в поединке (показывает параметры при наведении
|
||||||
* на образ).
|
* на образ).
|
||||||
* @param int $isMain - установить 1, если куклу надо показать на странице игрока (по клику на предмет снимает
|
* @param int $isMain установить 1, если куклу надо показать на странице игрока (по клику на предмет снимает
|
||||||
* его).
|
* его).
|
||||||
*
|
|
||||||
* @throws \Krugozor\Database\Mysql\Exception
|
|
||||||
*/
|
*/
|
||||||
private function UserInfoDoll($isBattle = 0, $isMain = 0)
|
private function UserInfoDoll($isBattle = 0, $isMain = 0)
|
||||||
{
|
{
|
||||||
@ -150,16 +148,16 @@ class UserInfo extends User
|
|||||||
|
|
||||||
public function showUserInfo()
|
public function showUserInfo()
|
||||||
{
|
{
|
||||||
$this->effects = new \Battles\Models\EffectsModel($this->id);
|
|
||||||
$this->WatcherStatus();
|
$this->WatcherStatus();
|
||||||
|
$effects = new \Battles\Models\EffectsModel($this->id);
|
||||||
|
|
||||||
if ($this->block && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
|
if ($this->block && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
|
||||||
throw new \Exceptions\GameException('<span class="error">Персонаж ' . $this->login . ' заблокирован!</span>');
|
throw new \Exceptions\GameException('<span class="error">Персонаж ' . $this->login . ' заблокирован!</span>');
|
||||||
} elseif ($this->effects->getHideUserInfoStatus() && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
|
} elseif ($effects->getHideUserInfoStatus() && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
|
||||||
if ($this->effects->getHideUserInfoStatus() == -1) {
|
if ($effects->getHideUserInfoStatus() == -1) {
|
||||||
$date = 'навсегда';
|
$date = 'навсегда';
|
||||||
} else {
|
} else {
|
||||||
$date = 'до' . date('d.m.Y', strtotime($this->effects->getHideUserInfoStatus()));
|
$date = 'до' . date('d.m.Y', strtotime($effects->getHideUserInfoStatus()));
|
||||||
}
|
}
|
||||||
throw new \Exceptions\GameException('<span class="error">Персонаж ' . $this->login . ' обезличен ' . $date . '.</span>');
|
throw new \Exceptions\GameException('<span class="error">Персонаж ' . $this->login . ' обезличен ' . $date . '.</span>');
|
||||||
} else {
|
} else {
|
||||||
@ -169,7 +167,7 @@ class UserInfo extends User
|
|||||||
|
|
||||||
private function WatcherStatus()
|
private function WatcherStatus()
|
||||||
{
|
{
|
||||||
$query = \db::c()->query('SELECT `align`,`admin` FROM `users` WHERE `id` = ?i', $this->watcher_id)->fetch_assoc();
|
$query = parent::$db->fetch('SELECT align, admin FROM users WHERE id = ?', $this->watcher_id);
|
||||||
if ($query['admin']) {
|
if ($query['admin']) {
|
||||||
$this->watcherIsAdmin = 1;
|
$this->watcherIsAdmin = 1;
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
# Date: 28.10.2020 (17:41)
|
# Date: 28.10.2020 (17:41)
|
||||||
|
|
||||||
namespace Exceptions;
|
namespace Exceptions;
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class GameException extends Exception { }
|
||||||
class GameException extends \Exception
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@ -4,7 +4,7 @@
|
|||||||
* Author: Igor Barkov <lopar.4ever@gmail.com>
|
* Author: Igor Barkov <lopar.4ever@gmail.com>
|
||||||
* Project name: Battles-Game
|
* Project name: Battles-Game
|
||||||
*/
|
*/
|
||||||
if (empty($_SESSION['uid'])) {
|
if (empty($_SESSION['uid']) && $_SERVER['REQUEST_URI'] != "/enter.php") {
|
||||||
header("Location: index.php");
|
header("Location: index.php");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
1627
tmp/chat.txt
1627
tmp/chat.txt
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user