diff --git a/classes/Database/battles.sql b/classes/Battles/Database/battles.sql
similarity index 100%
rename from classes/Database/battles.sql
rename to classes/Battles/Database/battles.sql
diff --git a/classes/Battles/InventoryItem.php b/classes/Battles/InventoryItem.php
index 7c31570..ccf715b 100644
--- a/classes/Battles/InventoryItem.php
+++ b/classes/Battles/InventoryItem.php
@@ -27,7 +27,7 @@ class InventoryItem extends Item
public function printInfo()
{
- parent::printAllInfo();
+ echo $this->getAllInfo();
if ($this->present) {
echo "
Это подарок от $this->present. Вы не можете передать его кому-либо ещё.
";
}
@@ -48,9 +48,8 @@ IMG;
}
}
- public function printControls()
- {
- /* Тут будут кнопки под картинкой. */
+ public function printControls(){
+ // Для кнопок управления под картинкой.
}
private function dressStatsChecks(): ?string
@@ -130,14 +129,9 @@ IMG;
return $error ?? true;
}
- /**
- * @param $itemId
- *
- * @return bool
- */
- public static function destroyItem($itemId): bool
+ public static function destroyItem($itemId)
{
- return DBPDO::INIT()->execute('delete from inventory where dressed_slot = 0 and owner_id = ? and item_id = ?', [$_SESSION['uid'], $itemId]);
+ DBPDO::INIT()->execute('delete from inventory where dressed_slot = 0 and owner_id = ? and item_id = ?', [$_SESSION['uid'], $itemId]);
}
/** Надеюсь, временная заглушка, которая объединяет get_meshok() и другую выдачу одной строкой.
diff --git a/classes/Battles/Item.php b/classes/Battles/Item.php
index d1f3ec5..1f17327 100644
--- a/classes/Battles/Item.php
+++ b/classes/Battles/Item.php
@@ -102,6 +102,14 @@ class Item
$this->typename = 'Хлам';
}
+ $this->item_cost = $this->calculateItemCost();
+ }
+
+ /** Рассчёт стоимости предмета в зависимости от его характеристик.
+ * @return int
+ */
+ private function calculateItemCost(): int
+ {
$sum_stats =
$this->add_strength +
$this->add_dexterity +
@@ -121,8 +129,7 @@ class Item
$mods_cost_modifier = 2 + floor($sum_mods / 50);
$damage_cost_modifier = 1 + floor($sum_damage / 100);
$result = intval($sum_stats * $stats_cost_modifier + $sum_mods * $mods_cost_modifier + $sum_damage * $damage_cost_modifier);
-
- $this->item_cost = $result < 1 ? 1 : $result;
+ return $result < 1 ? 1 : $result;
}
protected function wrap(int $number): string
@@ -134,50 +141,51 @@ class Item
}
}
- protected function printAllInfo()
+ public function getAllInfo(): string
{
$needsLines = [
- "сила" => $this->need_strength,
- "ловкость" => $this->need_dexterity,
- "интуиция" => $this->need_intuition,
- "выносливость" => $this->need_endurance,
- "интеллект" => $this->need_intelligence,
- "мудрость" => $this->need_wisdom,
+ 'сила' => $this->need_strength,
+ 'ловкость' => $this->need_dexterity,
+ 'интуиция' => $this->need_intuition,
+ 'выносливость' => $this->need_endurance,
+ 'интеллект' => $this->need_intelligence,
+ 'мудрость' => $this->need_wisdom,
];
$addsLines = [
- "Сила" => $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_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,
];
- echo "$this->name (Масса: $this->weight)";
- echo "
Стоимость: " . $this->item_cost;
- echo "
Долговечность: " . $this->durability;
- echo "
$this->typename
";
+ $str = "$this->name (Масса: $this->weight)";
+ $str .= '
Стоимость: ' . $this->item_cost;
+ $str .= '
Долговечность: ' . $this->durability;
+ $str .= "
$this->typename
";
foreach ($needsLines as $stat => $value) {
if ($value > 0) {
- echo "
Требуется $stat" . $this->wrap($value);
+ $str .= "
Требуется $stat" . $this->wrap($value);
}
}
foreach ($addsLines as $stat => $value) {
if ($value) {
- echo "
$stat" . $this->wrap($value);
+ $str .= "
$stat" . $this->wrap($value);
}
}
if ($this->add_min_physical_damage && !$this->add_max_physical_damage) {
- $damage = $this->add_min_physical_damage . " - " . $this->add_min_physical_damage;
+ $damage = $this->add_min_physical_damage . ' - ' . $this->add_min_physical_damage;
} elseif (!$this->add_min_physical_damage && $this->add_max_physical_damage) {
- $damage = $this->add_max_physical_damage . " - " . $this->add_max_physical_damage;
+ $damage = $this->add_max_physical_damage . ' - ' . $this->add_max_physical_damage;
} elseif ($this->add_min_physical_damage && $this->add_max_physical_damage) {
- $damage = $this->add_min_physical_damage . " - " . $this->add_max_physical_damage;
+ $damage = $this->add_min_physical_damage . ' - ' . $this->add_max_physical_damage;
}
if (isset($damage)) {
- echo "
Урон: " . $damage;
+ $str .= '
Урон: ' . $damage;
}
+ return $str;
}
}
\ No newline at end of file
diff --git a/classes/Battles/ShopItem.php b/classes/Battles/ShopItem.php
index b8b7e8b..9c9c137 100644
--- a/classes/Battles/ShopItem.php
+++ b/classes/Battles/ShopItem.php
@@ -49,6 +49,7 @@ SQL;
private $optype;
private ?int $shop_item_quantity;
private ?int $price;
+ public static string $status = '';
public function __construct($row, $operationType = null)
{
@@ -61,11 +62,12 @@ SQL;
$this->item_id = $row->item_id ?? $row->id;
}
- public function printInfo()
+ public function printInfo(): string
{
- $this->printAllInfo();
+ //$this->printAllInfo();
+ $str = $this->getAllInfo();
if ($this->optype === 'buyshop' && $this->shop_item_quantity > 0 && $this->shop_item_quantity < 20) {
- echo "На складе осталось $this->shop_item_quantity единиц товара!
";
+ $str .= "На складе осталось $this->shop_item_quantity единиц товара!
";
}
if ($this->optype === 'sellshop') {
if ($this->getSellPriceMean() < 50) {
@@ -79,36 +81,37 @@ SQL;
} else {
$goods = 'это превосходное изделие';
}
- echo "В среднем за $goods можно выручить {$this->getSellPriceMean()} кр.
";
+ $str .= "В среднем за $goods можно выручить {$this->getSellPriceMean()} кр.
";
}
+ return $str;
}
- public function printImage()
+ public function printImage(): string
{
if (!$this->image) {
$this->image = 'noitem.png';
}
- echo "";
+ return "";
}
//todo наличка после покупки отображается с задержкой.
- public static function buyItem($id, User $buyer): string
+ public static function buyItem($id, User $buyer)
{
$db = new DBPDO();
$check = $db->ofetch("select * from trade_offers where shop_item_id = ?", $id);
if (empty($check->shop_item_quantity) || empty($check->shop_item_id)) {
- return self::NO_ITEMS_IN_STOCK;
+ self::$status = self::NO_ITEMS_IN_STOCK;
}
// TODO БАРТЕР!
if (isset($check->barter_item_list_json)) {
- echo "Работаем по бартеру!";
+ self::$status = "Работаем по бартеру!";
}
$db->execute(self::BUY_QUERY, [$buyer->getId(), $check->shop_item_id]);
$item = $db->ofetch("select item_id, name, price from inventory where item_id = ?", $db->lastInsertId());
if (empty($item->item_id) || empty($item->name)) {
- return 'Запрос в базу не прошёл.';
+ self::$status = 'Запрос в базу не прошёл.';
} else {
$user = new User($_SESSION['uid']);
// Если не хватает налички, снимаем с банка с комиссией.
@@ -117,14 +120,12 @@ SQL;
$bank = new Bank($buyer->getId());
$bank->withdrawMoney($item->price);
} catch (GameException $e) {
- echo 'Банковская ошибка!';
- return self::NO_MONEY;
+ self::$status = 'Банковская ошибка! ' . self::NO_MONEY;
}
} else {
$user->setMoney($user->getMoney() - $item->price);
$user->saveMoney();
}
-
}
if ($check->shop_item_quantity != -1) {
@@ -133,10 +134,10 @@ SQL;
$deloText = $buyer->getLogin() . " купил товар «" . $item->name . "» id:(" . $item->item_id . ") в магазине за " . $item->price . ".";
GameLogs::addUserLog($buyer->getId(), $deloText);
- return "Предмет " . $item->name . " куплен за " . $item->price . ".";
+ self::$status = "Предмет " . $item->name . " куплен за " . $item->price . ".";
}
- public static function sellItem($id, User $seller, $bankTrade = 0): string
+ public static function sellItem($id, User $seller, $bankTrade = 0)
{
$db = new DBPDO();
$item = $db->ofetch('select * from inventory where item_id = ?', $id);
@@ -154,11 +155,10 @@ SQL;
$deloText = "{$seller->getLogin()} продал товар «{$sellingItemName}» id:($id) в магазине за $sellingPrice кр.";
GameLogs::addUserLog($seller->getId(), $deloText);
if ($sellingPrice == 0) {
- $status = "После длительных и изнурительных торгов вы плюнули на всё и просто подарили ваш «{$sellingItemName}» торговцу.";
+ self::$status = "После длительных и изнурительных торгов вы плюнули на всё и просто подарили ваш «{$sellingItemName}» торговцу.";
} else {
- $status = "Вы продали «{$sellingItemName}» за $sellingPrice кр.";
+ self::$status = "Вы продали «{$sellingItemName}» за $sellingPrice кр.";
}
- return $status;
}
/** Подчсчёт средней суммы продажи.
@@ -177,18 +177,19 @@ SQL;
/**
* Для кнопок управления под картинкой предмета в зависимости от ситуации.
*/
- public function printControls()
+ public function printControls(): string
{
- if (in_array($this->optype, ['setmarket', 'unsetmarket', 'buymarket', 'sellshop', 'buyshop',])) {
- $str = $this->optype == 'setmarket' ? '' : '';
- $button_name = self::BUTTON[$this->optype];
- echo <<
FORM;
- }
}
/**
diff --git a/config.php b/config.php
index d846875..e818988 100644
--- a/config.php
+++ b/config.php
@@ -9,6 +9,11 @@
use Battles\Database\DBPDO;
use Battles\User;
+include_once 'classes/Database/db.php';
+include_once 'classes/Database/Mysql.php';
+include_once 'classes/Database/Statement.php';
+include_once 'classes/Database/Exception.php';
+
ini_set('display_errors', 'On');
error_reporting(E_ALL);
const GAMEDOMAIN = "battles.lan";
diff --git a/shop.php b/shop.php
index e79161f..4be9463 100644
--- a/shop.php
+++ b/shop.php
@@ -1,220 +1,75 @@
categoryType = $_GET['otdel'];
+ } else {
+ Shop::$current->categoryType = -1;
+ }
+}
if (!empty($_POST['sellshop'])) {
- $status = ShopItem::sellItem($_POST['itemId'], User::$current, 1);
+ ShopItem::sellItem($_POST['itemId'], User::$current, 1);
}
if (!empty($_POST['buyshop'])) {
- $status = ShopItem::buyItem($_POST['itemId'], User::$current);
-}
-
-$bank = new Bank(User::$current->getId());
-
-switch ($shopCategoryTypeNumber) {
- default:
- $shopCategoryType = "Все товары";
- break;
- case Item::ITEM_TYPE_HELMET:
- $shopCategoryType = "Шлемы";
- break;
- case Item::ITEM_TYPE_ARMOR:
- $shopCategoryType = "Броня";
- break;
- case Item::ITEM_TYPE_LEGS:
- $shopCategoryType = "Поножи";
- break;
- case Item::ITEM_TYPE_BOOTS:
- $shopCategoryType = "Сапоги";
- break;
- case Item::ITEM_TYPE_GLOVES:
- $shopCategoryType = "Перчатки";
- break;
- case Item::ITEM_TYPE_WEAPON:
- $shopCategoryType = "Оружие";
- break;
- case Item::ITEM_TYPE_SHIELD:
- $shopCategoryType = "Щиты";
- break;
- case Item::ITEM_TYPE_BELT:
- $shopCategoryType = "Пояса";
- break;
- case Item::ITEM_TYPE_RING:
- $shopCategoryType = "Кольца";
- break;
- case Item::ITEM_TYPE_AMULET:
- $shopCategoryType = "Амулеты";
- break;
- case Item::ITEM_TYPE_CONSUMABLE:
- $shopCategoryType = "Расходники";
- break;
- case Item::ITEM_TYPE_OTHER:
- $shopCategoryType = "Разное";
- break;
- case 'sale':
- $shopCategoryType = "Предметы в инвентаре";
- $saleItems = true;
- break;
-}
-// MUST BE ARRAY!
-$iteminfo = [];
-if (!$saleItems) {
- $shopItems = DBPDO::$db->ofetchAll("select * from items inner join trade_offers on id = shop_item_id where shop_id = 1 and shop_item_quantity !=0");
- foreach ($shopItems as $shopItemObject) {
- $iteminfo[] = new ShopItem($shopItemObject, 'buyshop');
- }
-} else {
- $inventoryItems = DBPDO::$db->ofetchall("select * from inventory where on_sale = 0 and dressed_slot = 0 and durability > 0 and owner_id = ?", $user->getId());
- foreach ($inventoryItems as $inventoryItemObject) {
- $iteminfo[] = new ShopItem($inventoryItemObject, 'sellshop');
- }
+ ShopItem::buyItem($_POST['itemId'], User::$current);
}
Template::header('Магазин');
?>
+
-
Государственный магазин
← выйти на Центральную площадь
-= $status ?>
+= ShopItem::$status ?>
- = $shopCategoryType ?>
-
+ = Shop::$current->getCategoryName() ?>
+ categoryType === -1): ?>
Вы можете продать ваши предметы за сущие копейки.
- getItemType() != $shopCategoryTypeNumber && $shopCategoryTypeNumber != 'sale') {
- continue;
- }
- echo "";
- $ii->printImage();
- $ii->printControls();
- echo " | ";
- $ii->printInfo();
- }
- ?>
+ = Shop::$current->getItemsList() ?>
|
|
-
- Масса всех вещей: = InventoryItem::getWeightData() ?>
- Деньги: = $user->getMoney() ?> [Б:= $bank->getMoney() ?>].
-
+
+
+ Масса всех вещей: = InventoryItem::getWeightData() ?>
+ Деньги: = User::$current->getMoney() ?>.
+
+
Отделы магазина
- Оружие
- Шлемы
- Броня
- Поножи
- Сапоги
- Перчатки
- Щиты
- Пояса
- Кольца
- Амулеты
- Расходники
- Разное
+ Оружие
+ Шлемы
+ Броня
+ Поножи
+ Сапоги
+ Перчатки
+ Щиты
+ Пояса
+ Кольца
+ Амулеты
+ Расходники
+ Разное
Все товары
Продать вещи
+
+ Если у вас не хватит денег на покупку, деньги будут автоматически сняты с вашего банковского
+ счёта
+ с вычетом банковской комиссии за услуги.
+
|
\ No newline at end of file
diff --git a/user_abilities.php b/user_abilities.php
index 26210ce..c3916c0 100644
--- a/user_abilities.php
+++ b/user_abilities.php
@@ -6,17 +6,19 @@
* One file to rule 'em all!
*/
+use Battles\Database\DBPDO;
use Battles\Template;
+use Battles\User;
require_once 'functions.php';
if (!empty($_GET['teleport']) && $user->getAdmin() == 1) {
- db::c()->query('UPDATE `users`,`online` SET `users`.`room` = 20,`online`.`room` = 20 WHERE `online`.`id` = `users`.`id` AND `online`.`id` = ?i', $_SESSION['uid']);
+ DBPDO::$db->execute('update users, online set users.room = 20, online.room = 20 where user_id = id and user_id = ?', User::$current->getId());
}
# ORDEN PHP
-$_POST['use'] = $_POST['use'] ?? null;
+$_POST['use'] ??= null;
if ($user->getAdmin()) {
- $abil = db::c()->query('SELECT 1 FROM users WHERE id = ?i', $user->getId())->fetch_assoc();
+ $abil = DBPDO::$db->fetch('SELECT 1 FROM users WHERE id = ?i', $user->getId());
//$abil = unserialize($abil['abil']);
switch ($_POST['use']) {
case "healing":