Покупки-продажи из класса

This commit is contained in:
Igor Barkov (iwork) 2021-03-12 18:26:15 +02:00
parent 3480dcf5a8
commit 6176be30b7
2 changed files with 52 additions and 38 deletions

View File

@ -1,5 +1,7 @@
<?php
namespace Battles;
use Battles\Database\DBPDO;
class ShopItem extends Item
@ -9,11 +11,12 @@ class ShopItem extends Item
parent::printAllInfo();
}
public function buyItem($owner)
public static function buyItem($id, User $buyer): string
{
if ($owner) {
$db = new DBPDO();
$query = "INSERT INTO inventory (
//TODO Добавить снятие денег с проверками на их наличие.
$db = new DBPDO();
$item = $db->ofetch('select * from shop where item_id = ?', $id);
$query = "INSERT INTO inventory (
owner_id, name, item_type, durability, price,
need_strength, need_dexterity, need_intuition,
need_endurance, need_intelligence, need_wisdom,
@ -23,24 +26,51 @@ class ShopItem extends Item
add_min_physical_damage, add_max_physical_damage,
image, weight)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$values = [
$owner, $this->name, $this->item_type, $this->durability, $this->price,
$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);
$values = [
$buyer->getId(), $item->name, $item->item_type, $item->durability, $item->price,
$item->need_strength, $item->need_dexterity, $item->need_intuition,
$item->need_endurance, $item->need_intelligence, $item->need_wisdom,
$item->add_strength, $item->add_dexterity, $item->add_intuition,
$item->add_endurance, $item->add_intelligence, $item->add_wisdom,
$item->add_accuracy, $item->add_evasion, $item->add_criticals,
$item->add_min_physical_damage, $item->add_max_physical_damage,
$item->image, $item->weight
];
$db->execute($query, $values);
$deloText = "{$buyer->getLogin()} купил товар «{$item->name}» id:($id) в магазине за $item->price кр.";
GameLogs::addUserLog($buyer->getId(), $deloText);
return "Предмет $item->name куплен за $item->price.";
}
public static function sellItem($id, User $seller, $bankTrade = 0): string
{
$db = new DBPDO();
$item = $db->ofetch('select * from inventory where item_id = ?', $id);
// Продажа за цену от нуля до половины стоимости.
$sellingPrice = mt_rand(0, $item->price / 2);
$db->execute('delete from inventory where item_id = ?', $id);
if ($bankTrade) {
$bank = new Bank($seller->getId());
$bank->setMoney($bank->getMoney() - $sellingPrice);
Bank::setBankMoney($bank->getMoney(), $seller->getId(), 'shopsell');
} else {
$db->execute('update users set money = money - ? where id = ?', [$sellingPrice, $_SESSION['uid']]);
}
$deloText = "{$seller->getLogin()} продал товар «{$item->name}» id:($id) в магазине за $sellingPrice кр.";
GameLogs::addUserLog($seller->getId(), $deloText);
if ($sellingPrice == 0) {
$status = "После длительных и изнурительных торгов вы плюнули на всё и просто подарили ваш «{$item->name}» торговцу.";
} else {
$status = "Вы продали «{$item->name}» за $sellingPrice кр.";
}
return $status;
}
/**
* Для кнопок управления под картинкой предмета в зависимости от ситуации.
* @param null $shopType
*/
public function printControls($shopType = false)
public function printControls($shopType = null)
{
if ($shopType === 'marketput') {
echo <<<BTN

View File

@ -1,5 +1,6 @@
<?php
use Battles\Database\DBPDO;
use Battles\GameLogs;
use Battles\ShopItem;
use Battles\Template;
@ -9,6 +10,7 @@ ob_start();
session_start();
require_once 'functions.php';
$user = $user ?? new User($_SESSION['uid']);
$db = new DBPDO();
/*
* aheroshop.php
* $data = db::c()->query('SELECT * FROM `ahero_shop` WHERE `count` > 0 AND `razdel` = ?i ORDER by `point` ASC', $_GET['otdel']);
@ -124,30 +126,12 @@ ORDER BY `update` DESC', null, $_SESSION['uid']);
$sellItemId = $_GET['sell'] ?? 0;
if ($sellItemId) {
$dress = db::c()->query('SELECT `id`, `name`, `cost`, `koll` FROM `inventory` WHERE `dressed` = 0 AND `artefact` = 0 AND `id` = ?i AND `owner` = ?i', $sellItemId, $user['id'])->fetch_assoc();
$kols = '';
if ($dress['koll']) {
$dress['cost'] *= $dress['koll'];
$kols = "(x{$dress['koll']}) ";
}
$allcost = mt_rand(0, $dress['cost'] / 2);
db::c()->query('DELETE FROM `inventory` WHERE `id` = ?i', $dress['id']);
db::c()->query('UPDATE `users` SET `money` = `money` + ?i WHERE `id` = ?i', $allcost, $_SESSION['uid']);
if ($allcost == 0) {
$status = "После длительных и изнурительных торгов вы плюнули на всё и просто подарили ваш «{$dress['name']}» торговцу.";
} else {
$status = "Вы продали «{$dress['name']}» $kols за " . $allcost . " кр.";
}
$deloText = "{$user->getLogin()} продал товар «{$dress['name']}» {$kols}id:({$dress['id']}) в магазине за {$allcost} кр.";
GameLogs::addUserLog($user->getId(), $deloText);
// Для обновления данных о деньгах на странице
$user['money'] += $allcost;
ShopItem::sellItem($sellItemId, $user);
}
if (!empty($_GET['buy'])) {
$dress = db::c()->query('SELECT * FROM `shop` WHERE `id`=?i', $_GET['buy'])->fetch_assoc();
ShopItem::buyItem($_GET['buy'], $user);
/* $dress = db::c()->query('SELECT * FROM `shop` WHERE `id`=?i', $_GET['buy'])->fetch_assoc();
$itemWeight = db::c()->query('SELECT sum(`massa`) AS `m` FROM `inventory` WHERE `owner` = ?i AND `setsale` = 0', $_SESSION['uid'])->fetch_assoc();
if (($dress['massa'] + $itemWeight['m']) > (get_meshok())) {
@ -236,7 +220,7 @@ if (!empty($_GET['buy'])) {
} else {
$status = "Недостаточно денег или нет вещей в наличии.";
}
}*/
}
Template::header('Магазин');
?>