Code smell.

This commit is contained in:
Ivor Barhansky 2022-12-17 01:20:43 +02:00
parent b1f578f4b0
commit 0398425205
45 changed files with 875 additions and 851 deletions

View File

@ -15,19 +15,28 @@ if (isset($_POST)) {
<tr> <tr>
<th id="main">Основное <th id="main">Основное
<tr> <tr>
<td><input name="name" placeholder="Название"> <td><label>
<input name="name" placeholder="Название">
</label>
<tr> <tr>
<td><input name="image" placeholder="Картинка"> <td><label>
<input name="image" placeholder="Картинка">
</label>
<tr> <tr>
<td><select name="shop"> <td><label>
<select name="shop">
<option value="0" selected disabled>Тип магазина</option> <option value="0" selected disabled>Тип магазина</option>
<option value="1">Обычный</option> <option value="1">Обычный</option>
<option value="2">Цветной</option> <option value="2">Цветной</option>
</select> </select>
</label>
<tr> <tr>
<td><input name=count placeholder="Количество (шт.)" disabled> <td><label>
<input name=count placeholder="Количество (шт.)" disabled>
</label>
<tr> <tr>
<td><select name="item_type"> <td><label>
<select name="item_type">
<option value="0" selected disabled>Тип предмета</option> <option value="0" selected disabled>Тип предмета</option>
<option value="1">Шлем</option> <option value="1">Шлем</option>
<option value="2">Броня</option> <option value="2">Броня</option>
@ -43,56 +52,103 @@ if (isset($_POST)) {
<option value="50">Всё остальное</option> <option value="50">Всё остальное</option>
<option value="100">Хлам</option> <option value="100">Хлам</option>
</select> </select>
</label>
<tr> <tr>
<td><input name=weight placeholder="Масса"> <td><label>
<input name=weight placeholder="Масса">
</label>
<tr> <tr>
<td><input name=durability placeholder="Макс. износ"> <td><label>
<input name=durability placeholder="Макс. износ">
</label>
<tr> <tr>
<td><input name=price placeholder="Цена (кр.)" disabled> <td><label>
<input name=price placeholder="Цена (кр.)" disabled>
</label>
<tr> <tr>
<th id="needs">Требования <th id="needs">Требования
<tr> <tr>
<td><input name=need_level placeholder="Уровень"> <td><label>
<input name=need_level placeholder="Уровень">
</label>
<tr> <tr>
<td><input name=need_strength placeholder="Сила"> <td><label>
<input name=need_strength placeholder="Сила">
</label>
<tr> <tr>
<td><input name=need_dexterity placeholder="Ловкость"> <td><label>
<input name=need_dexterity placeholder="Ловкость">
</label>
<tr> <tr>
<td><input name=need_intuition placeholder="Интуиция"> <td><label>
<input name=need_intuition placeholder="Интуиция">
</label>
<tr> <tr>
<td><input name=need_endurance placeholder="Выносливость"> <td><label>
<input name=need_endurance placeholder="Выносливость">
</label>
<tr> <tr>
<td><input name=need_intelligence placeholder="Интеллект"> <td><label>
<input name=need_intelligence placeholder="Интеллект">
</label>
<tr> <tr>
<td><input name=need_wisdom placeholder="Мудрость"> <td><label>
<input name=need_wisdom placeholder="Мудрость">
</label>
<tr> <tr>
<th id="adds">Характеристики <th id="adds">Характеристики
<tr> <tr>
<td><input name=minu placeholder="Мин.урон"> <td><label>
<input name=minu placeholder="Мин.урон">
</label>
<tr> <tr>
<td><input name=maxu placeholder="Макс.урон"> <td><label>
<input name=maxu placeholder="Макс.урон">
</label>
<tr> <tr>
<td><input name=add_strength placeholder="Сила"> <td><label>
<input name=add_strength placeholder="Сила">
</label>
<tr> <tr>
<td><input name=add_dexterity placeholder="Ловкость"> <td><label>
<input name=add_dexterity placeholder="Ловкость">
</label>
<tr> <tr>
<td><input name=add_intuition placeholder="Интуиция"> <td><label>
<input name=add_intuition placeholder="Интуиция">
</label>
<tr> <tr>
<td><input name=add_endurance placeholder="Выносливость"> <td><label>
<input name=add_endurance placeholder="Выносливость">
</label>
<tr> <tr>
<td><input name=add_intelligence placeholder="Интеллект"> <td><label>
<input name=add_intelligence placeholder="Интеллект">
</label>
<tr> <tr>
<td><input name=add_wisdom placeholder="Мудрость"> <td><label>
<input name=add_wisdom placeholder="Мудрость">
</label>
<tr> <tr>
<td><input name=add_accuracy placeholder="Точность"> <td><label>
<input name=add_accuracy placeholder="Точность">
</label>
<tr> <tr>
<td><input name=add_evasion placeholder="Уворот"> <td><label>
<input name=add_evasion placeholder="Уворот">
</label>
<tr> <tr>
<td><input name=add_criticals placeholder="Крит"> <td><label>
<input name=add_criticals placeholder="Крит">
</label>
<tr> <tr>
<td><input name=add_min_physical_damage placeholder="Мин.удар"> <td><label>
<input name=add_min_physical_damage placeholder="Мин.удар">
</label>
<tr> <tr>
<td><input name=add_min_physical_damage placeholder="Макс.удар"> <td><label>
<input name=add_min_physical_damage placeholder="Макс.удар">
</label>
</table> </table>
<INPUT TYPE="submit" value="Добавить"> <INPUT TYPE="submit" value="Добавить">

View File

@ -20,6 +20,7 @@ $player = $_POST['player'] ?? null;
$undress_char = $_POST['undress_char'] ?? null; $undress_char = $_POST['undress_char'] ?? null;
$end = $_POST['end'] ?? null; $end = $_POST['end'] ?? null;
$del = $_POST['del'] ?? null; $del = $_POST['del'] ?? null;
$inv = [];
if ($player) { if ($player) {
$row = Db::getInstance()->ofetch('select id, login from users where id = ? or login = ?', [$player, $player]); $row = Db::getInstance()->ofetch('select id, login from users where id = ? or login = ?', [$player, $player]);
@ -35,10 +36,10 @@ if ($end) {
unset($_SESSION['player_name']); unset($_SESSION['player_name']);
} }
if (isset($_SESSION['player_id'])) { if (isset($_SESSION['player_id'])) {
$inv = db::c()->query('SELECT item_id, name, image FROM inventory WHERE owner = ?i ORDER BY id DESC', $_SESSION['player_id']); $inv = Db::getInstance()->fetchAll('SELECT item_id, name, image FROM inventory WHERE owner_id = ? ORDER BY item_id DESC', $_SESSION['player_id']);
} }
if ($del) { if ($del) {
$itemdel = db::c()->query('SELECT item_type, dressed_slot FROM inventory WHERE id=?i', $del)->fetch_assoc(); $itemdel = Db::getInstance()->fetch('SELECT item_type, dressed_slot FROM inventory WHERE item_id = ?', $del);
if ($itemdel['dressed_slot'] == 1) { if ($itemdel['dressed_slot'] == 1) {
$item = new DressedItems($del); $item = new DressedItems($del);
$item->undressItem($itemdel['item_type']); $item->undressItem($itemdel['item_type']);
@ -47,34 +48,36 @@ if ($del) {
$item->undressItem(7); $item->undressItem(7);
} }
} }
Db::getInstance()->execute('delete from inventory where id = ?', $del); Db::getInstance()->execute('delete from inventory where item_id = ?', $del);
} }
Template::header('ᐰdminка инвентаря'); Template::header('ᐰdminка инвентаря');
?> ?>
<h1>Администрирование инвентаря <?php if (isset($_SESSION['player_name'])) echo $_SESSION['player_name']; ?></h1> <h1>Администрирование инвентаря <?php if (isset($_SESSION['player_name'])) { echo $_SESSION['player_name']; } ?></h1>
<table class='adm'> <table class='adm'>
<tr> <tr>
<th>ID</th> <th scope="col">ID</th>
<th>Название</th> <th scope="col">Название</th>
<th>Количество</th> <th scope="col">Количество</th>
<th>Картинка</th> <th scope="col">Картинка</th>
<th></th> <th scope="col"></th>
</tr> </tr>
<?php if (empty($_SESSION['player_id'])): ?> <?php if (empty($_SESSION['player_id'])): ?>
<tr> <tr>
<th colspan="5"> <th scope="col" colspan="5">
<form method="post"> <form method="post">
<label>
<input placeholder="Логин или ID" name="player"> <input placeholder="Логин или ID" name="player">
</label>
<input type="submit"> <input type="submit">
</form> </form>
</th> </th>
</tr> </tr>
<?php else: while ($row = $inv->fetch_assoc()): ?> <?php else: foreach ($inv as $row): ?>
<tr> <tr>
<td><?= $row['id'] ?></td> <td><?= $row['id'] ?></td>
<td><?= $row['name'] ?></td> <td><?= $row['name'] ?></td>
<td><?= $row['koll'] ?></td> <td><?= $row['koll'] ?></td>
<td><img src='/i/sh/<?= $row['img'] ?>'></td> <td><img src='/i/sh/<?= $row['img'] ?>' alt=""></td>
<td> <td>
<form method='post'> <form method='post'>
<input name='del' type='hidden' value='<?= $row['id'] ?>'> <input name='del' type='hidden' value='<?= $row['id'] ?>'>
@ -82,7 +85,7 @@ Template::header('ᐰdminка инвентаря');
</form> </form>
</td> </td>
</tr> </tr>
<?php endwhile; ?> <?php endforeach; ?>
<th colspan='6'> <th colspan='6'>
<form method='post'> <form method='post'>
<input name='undress_char' type='submit' value='Стриптиз'> <input name='undress_char' type='submit' value='Стриптиз'>

View File

@ -1,73 +0,0 @@
<?php
include "config.php";
//$user = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `id` = '2106' LIMIT 1;"));
//include "functions.php";
//$komp_users = mysql_query("SELECT * FROM `users`,`online` WHERE `users`.`id`=`online`.`id` AND `online`.`date` >= ".(time()-60).";");
$komp_users = mysql_query("SELECT * FROM `users`;");
while($ku=mysql_fetch_array($komp_users))
{
$kompl_raw=mysql_query("SELECT * FROM inventory where owner=".$ku['id']." AND dressed=1");
$items_on_user=array();
$set_id_wear=array();
$kompl_har=0;
while ($kompl=mysql_fetch_array($kompl_raw))
{
$items_on_user[]=$kompl['prototype'];
}
$sets_raw=mysql_query("SELECT * FROM item_sets;");
while ($set_items=mysql_fetch_array($sets_raw))
{
$kompl_full=1;
$in_set=explode(',',$set_items['prot_id']);
foreach($in_set as $tmp_set)
if (!in_array($tmp_set,$items_on_user))
{$kompl_full=0;}
if ($kompl_full==1) $set_id_wear[]=$set_items['set_id'];
}
foreach($set_id_wear as $s)
{
$items_raw=mysql_fetch_array(mysql_query("SELECT * FROM item_sets where set_id='{$s}' limit 1;"));
$kompl_har+=$items_raw['gsila'];
$kompl_har+=$items_raw['glovk'];
$kompl_har+=$items_raw['gintel'];
$kompl_har+=$items_raw['ginta'];
}
if(!$kompl_har) $kompl_har=0;
$explim=0;
foreach(array_keys(EXPTABLE) as $k)
{
if($k>=$ku['exp'])
{
$explim=$k;
break;
}
}
$sum_stat=15;
foreach(array_keys(EXPTABLE) as $k)
{
if($k==$explim)
break;
else
{
$sum_stat+=EXPTABLE[$k][0];
$sum_stat+=EXPTABLE[$k][2];
}
}
$res=mysql_fetch_array(
mysql_query("SELECT IFNULL( (SUM( gsila ) + SUM( glovk ) + SUM( ginta ) + SUM( gintel )) , 0)+ {$kompl_har} + {$sum_stat}
FROM `inventory` WHERE `owner` = '{$ku['id']}' AND `dressed` = 1;"));
$res2=mysql_fetch_array(mysql_query("SELECT `sila`+`lovk`+`intel`+`inta`+`vinos`+`mudra`+`stats` FROM `users` WHERE `id`={$ku['id']};"));
if($res[0]!=$res2[0])
echo("<br/>".$kompl_har." _ ID=".$ku['id']."[".$ku['exp']."] : All=".$res2[0]."/norm=".$res[0]);
}

View File

@ -44,6 +44,6 @@ UNREGCLANLIST;
{ {
$bank = new Bank($id); $bank = new Bank($id);
Db::getInstance()->execute('DELETE FROM clans WHERE status = 0 AND owner_id = ?', $id); Db::getInstance()->execute('DELETE FROM clans WHERE status = 0 AND owner_id = ?', $id);
$bank::setBankMoney($bank->getMoney() + GameConfigs::CLAN['clan_register_cost'], $id); $bank->modify(GameConfigs::CLAN['clan_register_cost']);
} }
} }

View File

@ -11,7 +11,7 @@ use Battles\Database\Db;
class Bank class Bank
{ {
private int $user_id = 0; private int $userId = 0;
private int $money = 0; private int $money = 0;
private string $error = ''; private string $error = '';
private string $status = ''; private string $status = '';
@ -31,15 +31,15 @@ class Bank
'sellShop' => 'Продажа товара в магазине.' 'sellShop' => 'Продажа товара в магазине.'
]; ];
public function __construct(int $user_id = null) public function __construct(int $userId = null)
{ {
if (empty($user_id)) { if (empty($userId)) {
$user_id = User::getInstance()->getId(); $userId = User::getInstance()->getId();
} }
$bank_row = Db::getInstance()->fetch('SELECT user_id, money FROM bank WHERE user_id = ?', $user_id); $bankRow = Db::getInstance()->fetch('SELECT user_id, money FROM bank WHERE user_id = ?', $userId);
foreach ($this as $key => $value) { foreach ($this as $key => $value) {
if (isset($bank_row[$key])) { if (isset($bankRow[$key])) {
$this->$key = $bank_row[$key]; $this->$key = $bankRow[$key];
} }
} }
} }
@ -71,10 +71,10 @@ class Bank
private function addLog(int $receiverId, int $amount, string $operationType, ?int $senderId = null): void private function addLog(int $receiverId, int $amount, string $operationType, ?int $senderId = null): void
{ {
if (is_null($senderId)) { if (is_null($senderId)) {
$senderId = $this->user_id; $senderId = $this->userId;
} }
if ($operationType === 'depositMoney' || $operationType === 'withdrawMoney') { if ($operationType === 'depositMoney' || $operationType === 'withdrawMoney') {
$receiverId = $this->user_id; $receiverId = $this->userId;
} }
$commText = $this->comission ? ' Комиссия: ' . $this->comission : ''; $commText = $this->comission ? ' Комиссия: ' . $this->comission : '';
$text = self::LOG[$operationType] . $commText; $text = self::LOG[$operationType] . $commText;
@ -98,7 +98,7 @@ class Bank
if (!is_numeric($amount) || $amount <= 0) { if (!is_numeric($amount) || $amount <= 0) {
$this->error = self::ERROR_WRONG_AMOUNT; $this->error = self::ERROR_WRONG_AMOUNT;
} }
if (!$rec->user_id) { if (!$rec->userId) {
$this->error = self::ERROR_NO_BANK_ACCOUNT; $this->error = self::ERROR_NO_BANK_ACCOUNT;
} }
$amountWithComission = $amount + $this->commission($amount); $amountWithComission = $amount + $this->commission($amount);
@ -110,10 +110,10 @@ class Bank
} }
// Снимаем сумму с комиссией у отправителя // Снимаем сумму с комиссией у отправителя
$this->modify(-$amountWithComission); $this->modify(-$amountWithComission);
$this->addLog($rec->user_id, $this->money, 'sendMoney', $this->user_id); $this->addLog($rec->userId, $this->money, 'sendMoney', $this->userId);
// Отдаём сумму на счёт получателю // Отдаём сумму на счёт получателю
$rec->modify($amount); $rec->modify($amount);
$rec->addLog($rec->user_id, $rec->money, 'receiveMoney', $this->user_id); $rec->addLog($rec->userId, $rec->money, 'receiveMoney', $this->userId);
} }
/** /**
@ -128,7 +128,7 @@ class Bank
$this->error = self::ERROR_WRONG_AMOUNT; $this->error = self::ERROR_WRONG_AMOUNT;
} }
// Забираем деньги из кошелька получателя // Забираем деньги из кошелька получателя
if (!User::getInstance($this->user_id)->money()->spend($amount)) { if (!User::getInstance($this->userId)->money()->spend($amount)) {
$this->error = self::ERROR_NO_MONEY_IN_WALLET; $this->error = self::ERROR_NO_MONEY_IN_WALLET;
} }
if ($this->error) { if ($this->error) {
@ -161,12 +161,12 @@ class Bank
$this->modify(-$amountWithComission); $this->modify(-$amountWithComission);
$this->addLog(0, $this->money, 'withdrawMoney'); $this->addLog(0, $this->money, 'withdrawMoney');
// Отдаём сумму в кошелёк получателя // Отдаём сумму в кошелёк получателя
User::getInstance($this->user_id)->money()->earn($amount); User::getInstance($this->userId)->money()->earn($amount);
} }
private function save() private function save()
{ {
Db::getInstance()->execute('UPDATE bank SET money = ? WHERE user_id = ?', [$this->money, $this->user_id]); Db::getInstance()->execute('UPDATE bank SET money = ? WHERE user_id = ?', [$this->money, $this->userId]);
} }
public function getMoney(): int public function getMoney(): int

View File

@ -67,13 +67,14 @@ class Chat
$this->db->execute('insert into chat (user_id, msg) values (?,?)', [User::getInstance()->getId(), $msg]); $this->db->execute('insert into chat (user_id, msg) values (?,?)', [User::getInstance()->getId(), $msg]);
} }
public static function sendSys(string $msg, ?int $receiver_id = null) public static function sendSys(string $msg, ?int $receiverId = null)
{ {
Db::getInstance()->execute('insert into chat (user_id, msg, receiver_id, type) values (-1,?,?,?)', [$msg, $receiver_id, 'sys']); Db::getInstance()->execute('insert into chat (user_id, msg, receiver_id, type) values (-1,?,?,?)', [$msg, $receiverId, 'sys']);
} }
public static function sendTelegraf(string $msg, int $receiver_id)
public static function sendTelegraf(string $msg, int $receiverId)
{ {
Db::getInstance()->execute('insert into chat (user_id, msg, receiver_id, type) values (-1,?,?,?)', [$msg, $receiver_id, 'sms']); Db::getInstance()->execute('insert into chat (user_id, msg, receiver_id, type) values (-1,?,?,?)', [$msg, $receiverId, 'sms']);
} }
} }

View File

@ -1,13 +1,16 @@
<?php <?php
# Date: 26.10.2020 (17:56) # Date: 26.10.2020 (17:56)
namespace Battles; namespace Battles;
class City class City
{ {
use Rooms; use Rooms;
public static function showStreet(int $id) public static function showStreet(int $id)
{ {
echo '<div style="position:relative; display: inline-block;" id="ione">';
if ($id === 20) { if ($id === 20) {
echo '<div style="position:relative; display: inline-block;" id="ione"><img alt="background" src="/i/city/spring_cap_cp_day.jpg">' . echo '<img alt="background" src="/i/city/spring_cap_cp_day.jpg">' .
self::showBuilding(1, "spring_cap_club", 30, 235, self::$roomNames[1]) . self::showBuilding(1, "spring_cap_club", 30, 235, self::$roomNames[1]) .
self::showBuilding(2, "spring_cap_shop", 202, 171, self::$roomNames[22]) . self::showBuilding(2, "spring_cap_shop", 202, 171, self::$roomNames[22]) .
self::showBuilding(4, "spring_cap_rem", 202, 290, self::$roomNames[23]) . self::showBuilding(4, "spring_cap_rem", 202, 290, self::$roomNames[23]) .
@ -17,68 +20,61 @@ class City
self::showBuilding(9, "winter_cap_tree2", 215, 500, self::$roomNames[44]) . self::showBuilding(9, "winter_cap_tree2", 215, 500, self::$roomNames[44]) .
self::showBuilding(13, "spring_cap_statue", 222, 365, self::$roomNames[24]) . self::showBuilding(13, "spring_cap_statue", 222, 365, self::$roomNames[24]) .
self::showBuilding(14, "winter_cap_statue", 210, 390, "Снеговик") . self::showBuilding(14, "winter_cap_statue", 210, 390, "Снеговик") .
self::showBuilding(222, "cap_arr_top", 180, 650, "Торговая улица") . self::showBuilding(222, "cap_arr_top", 180, 650, "Торговая улица");
'</div>';
} elseif ($id === 21) { } elseif ($id === 21) {
echo '<div style="position:relative; display: inline-block;" id="ione"><img alt="background" src="/i/city/spring_cap_strash_day.jpg">' . echo '<img alt="background" src="/i/city/spring_cap_strash_day.jpg">' .
self::showBuilding(3, "cap_arr_right", 255, 708, "Ристалище") . self::showBuilding(3, "cap_arr_right", 255, 708, "Ристалище") .
self::showBuilding(4, "cap_arr_left", 258, 21, self::$roomNames[20]) . self::showBuilding(4, "cap_arr_left", 258, 21, self::$roomNames[20]) .
self::showBuilding(5, "spring_cap_bank", 180, 485, self::$roomNames[29]) . self::showBuilding(5, "spring_cap_bank", 180, 485, self::$roomNames[29]) .
self::showBuilding(13, "spring_cap_flowershop", 220, 613, self::$roomNames[34]) . self::showBuilding(13, "spring_cap_flowershop", 220, 613, self::$roomNames[34]) .
self::showBuilding(14, "spring_cap_registratura", 170, 113, self::$roomNames[30]) . self::showBuilding(14, "spring_cap_registratura", 170, 113, self::$roomNames[30]) .
self::showBuilding(16, "spring_cap_tower", 5, 315, self::$roomNames[31]) . self::showBuilding(16, "spring_cap_tower", 5, 315, self::$roomNames[31]);
'</div>';
} elseif ($id === 26) { } elseif ($id === 26) {
echo '<div style="position:relative; display: inline-block;" id="ione"><img alt="background" src="/i/city/spring_cap_park_day.jpg">' . echo '<img alt="background" src="/i/city/spring_cap_park_day.jpg">' .
self::showBuilding(3, "cap_arr_left", 259, 27, self::$roomNames[2601]) . self::showBuilding(3, "cap_arr_left", 259, 27, self::$roomNames[2601]) .
self::showBuilding(4, "cap_arr_right", 259, 715, self::$roomNames[20]) . self::showBuilding(4, "cap_arr_right", 259, 715, self::$roomNames[20]) .
self::showBuilding(6, "cap_gate", 170, 340, "Городские ворота") . self::showBuilding(6, "cap_gate", 170, 340, "Городские ворота") .
self::showBuilding(660, "spring_cap_vokzal", 163, 43, self::$roomNames[661]) . self::showBuilding(660, "spring_cap_vokzal", 163, 43, self::$roomNames[661]);
'</div>';
} elseif ($id === 2601) { } elseif ($id === 2601) {
echo '<div style="position:relative; display: inline-block;" id="ione"><img alt="background" src="/i/city/sub/cap_zamk_day.jpg">' . echo '<img alt="background" src="/i/city/sub/cap_zamk_day.jpg">' .
self::showBuilding(1, "spring_cap_ruins", 166, 48, "Руины Старого замка") . self::showBuilding(1, "spring_cap_ruins", 166, 48, "Руины Старого замка") .
self::showBuilding(4, "cap_arr_right", 260, 710, self::$roomNames[26]) . self::showBuilding(4, "cap_arr_right", 260, 710, self::$roomNames[26]) .
self::showBuilding(10, "ava_post", 240, 300, self::$roomNames[35]) . self::showBuilding(10, "ava_post", 240, 300, self::$roomNames[35]) .
self::showBuilding(55, "cap_arr_left", 258, 21, self::$roomNames[2655]) . self::showBuilding(55, "cap_arr_left", 258, 21, self::$roomNames[2655]) .
self::showBuilding(1051, "spring_cap_lab", 130, 327, self::$roomNames[33]) . self::showBuilding(1051, "spring_cap_lab", 130, 327, self::$roomNames[33]) .
self::showBuilding(1052, "spring_cap_lavka", 240, 425, self::$roomNames[1053]) . self::showBuilding(1052, "spring_cap_lavka", 240, 425, self::$roomNames[1053]);
'</div>';
} elseif ($id === 2655) { } elseif ($id === 2655) {
echo '<div style="position:relative; display: inline-block;" id="ione"><img alt="background" src="/i/city/ar_e_d.jpg">' . echo '<img alt="background" src="/i/city/ar_e_d.jpg">' .
self::showBuilding(10, "arr_right_png2", 260, 710, self::$roomNames[2601]) . self::showBuilding(10, "arr_right_png2", 260, 710, self::$roomNames[2601]) .
self::showBuilding(2055, "altr_g", 230, 340, self::$roomNames[603]) . self::showBuilding(2055, "altr_g", 230, 340, self::$roomNames[603]);
'</div>';
} elseif ($id === 2111) { } elseif ($id === 2111) {
echo '<div style="position:relative; display: inline-block;" id="ione"><img alt="background" src="/i/city/av_rist_day.jpg">' . echo '<img alt="background" src="/i/city/av_rist_day.jpg">' .
self::showBuilding(1, "cap_arr_left", 240, 30, self::$roomNames[21]) . self::showBuilding(1, "cap_arr_left", 240, 30, self::$roomNames[21]) .
self::showBuilding(14, "spring_cap_rist_solo", 210, 160, "Вход в Одиночные сражения") . self::showBuilding(14, "spring_cap_rist_solo", 210, 160, "Вход в Одиночные сражения") .
self::showBuilding(14, "spring_cap_rist_group", 243, 340, "Вход в Сражение отрядов") . self::showBuilding(14, "spring_cap_rist_group", 243, 340, "Вход в Сражение отрядов") .
self::showBuilding(203, "spring_cap_rist_monstr", 145, 570, "Вход в Груповые сражения") . self::showBuilding(203, "spring_cap_rist_monstr", 145, 570, "Вход в Груповые сражения") .
self::showBuilding(1000, "av_zamk_rud", 80, 310, self::$roomNames[1001]) . self::showBuilding(1000, "av_zamk_rud", 80, 310, self::$roomNames[1001]);
'</div>';
} elseif ($id === 2701) { } elseif ($id === 2701) {
echo '<div style="position:relative; display: inline-block;" id="ione"><img alt="background" src="/i/city/av_arena_bg1_day2.jpg">' . echo '<img alt="background" src="/i/city/av_arena_bg1_day2.jpg">' .
self::showBuilding(1, "cap_3strelka", 260, 30, "Берег Залива") . self::showBuilding(1, "cap_3strelka", 260, 30, "Берег Залива") .
self::showBuilding(2, "cap_shar_dark", 234, 356, "Лабиринт Хаоса") . self::showBuilding(2, "cap_shar_dark", 234, 356, "Лабиринт Хаоса");
'</div>';
} elseif ($id === 2702) { } elseif ($id === 2702) {
echo '<div style="position:relative; display: inline-block;" id="ione"><img alt="background" src="/i/city/spring_cap_torg_day.jpg">' . echo '<img alt="background" src="/i/city/spring_cap_torg_day.jpg">' .
self::showBuilding(6, "spring_cap_build1", 175, 70, "Академия") . self::showBuilding(6, "spring_cap_build1", 175, 70, "Академия") .
self::showBuilding(10, "cap_rist_arr_left", 259, 25, self::$roomNames[20]) . self::showBuilding(10, "cap_rist_arr_left", 259, 25, self::$roomNames[20]) .
self::showBuilding(16, "auk", 120, 300, "Аукцион") . self::showBuilding(16, "auk", 120, 300, "Аукцион") .
self::showBuilding(21, "spring_cap_build2", 150, 565, "Ломбард") . self::showBuilding(21, "spring_cap_build2", 150, 565, "Ломбард") .
self::showBuilding(16555, "spring_cap_build3", 155, 480, "Прокатная лавка") . self::showBuilding(16555, "spring_cap_build3", 155, 480, "Прокатная лавка");
'</div>';
} }
echo '</div>';
} }
private static function showBuilding(int $id, string $image, int $top, int $left, string $description) private static function showBuilding(int $id, string $image, int $top, int $left, string $description): string
{ {
return sprintf(' return <<<HTML
<div style="position:absolute; left:%spx; top:%spx; z-index:90; cursor: pointer;"> <div style="position:absolute; left:{$left}px; top:{$top}px; z-index:90; cursor: pointer;">
<img src="/i/city/sub/%s.png" alt="%s" title="%s" class="building" id="%s" onclick="window.location.href = \'city.php?got/level%s\'"> <img src="/i/city/sub/$image.png" alt="$description" title="$description" class="building" id="$id" onclick="window.location.href = 'city.php?got/level$id'">
</div>', </div>
$left, $top, $image, $description, $description, $id, $id); HTML;
} }
} }

View File

@ -7,7 +7,7 @@ use Battles\Models\User\Effects;
class Clan class Clan
{ {
private static ?self $_instance = null; private static ?self $instance = null;
private $clan; private $clan;
private function __construct() private function __construct()
@ -17,10 +17,10 @@ class Clan
public static function getInstance(): self public static function getInstance(): self
{ {
if (is_null(self::$_instance)) { if (is_null(self::$instance)) {
self::$_instance = new self(); self::$instance = new self();
} }
return self::$_instance; return self::$instance;
} }
public function addMember(string $login): string public function addMember(string $login): string
@ -46,6 +46,11 @@ class Clan
return "Персонаж «{$login}» успешно принят в клан."; return "Персонаж «{$login}» успешно принят в клан.";
} }
private function getProverka($userId)
{
return Effects::count($userId, 20);
}
public function removeMember(string $login): string public function removeMember(string $login): string
{ {
$error = null; $error = null;
@ -96,11 +101,6 @@ class Clan
return Db::getInstance()->fetchAll('select id, (select 1 from clans where short_name = clan and owner_id = id) as clan_owner, room from users where clan = ? order by clan_owner desc, room, login', User::getInstance()->getClan()); return Db::getInstance()->fetchAll('select id, (select 1 from clans where short_name = clan and owner_id = id) as clan_owner, room from users where clan = ? order by clan_owner desc, room, login', User::getInstance()->getClan());
} }
private function getProverka($user_id)
{
return Effects::count($user_id, 20);
}
public function getClanOwnerId(): ?int public function getClanOwnerId(): ?int
{ {
return $this->clan->owner_id; return $this->clan->owner_id;

View File

@ -4,13 +4,14 @@ declare(strict_types=1);
namespace Battles\Database; namespace Battles\Database;
use Battles\GameConfigs; use Battles\GameConfigs;
use PDO, PDOException; use PDO;
use PDOException;
class Db class Db
{ {
private PDO $pdo; private PDO $pdo;
private static ?self $_instance = null; private static ?self $instance = null;
private function __construct() private function __construct()
{ {
@ -32,10 +33,10 @@ class Db
public static function getInstance(): self public static function getInstance(): self
{ {
if (is_null(self::$_instance)) { if (is_null(self::$instance)) {
self::$_instance = new self(); self::$instance = new self();
} }
return self::$_instance; return self::$instance;
} }
public function execute($query, $values = null) public function execute($query, $values = null)
@ -74,11 +75,11 @@ class Db
// Allows the user to retrieve results using a // Allows the user to retrieve results using a
// column from the results as a key for the array // column from the results as a key for the array
if (!is_null($key) && $results[0][$key]) { if (!is_null($key) && $results[0][$key]) {
$keyed_results = array(); $keyedResults = [];
foreach ($results as $result) { foreach ($results as $result) {
$keyed_results[$result[$key]] = $result; $keyedResults[$result[$key]] = $result;
} }
$results = $keyed_results; $results = $keyedResults;
} }
return $results; return $results;
} }
@ -107,11 +108,11 @@ class Db
// Allows the user to retrieve results using a // Allows the user to retrieve results using a
// column from the results as a key for the array // column from the results as a key for the array
if (!is_null($key) && $results[0][$key]) { if (!is_null($key) && $results[0][$key]) {
$keyed_results = (object)[]; $keyedResults = (object)[];
foreach ($results as $result) { foreach ($results as $result) {
$keyed_results->$result[$key] = $result; $keyedResults->$result[$key] = $result;
} }
$results = $keyed_results; $results = $keyedResults;
} }
return $results; return $results;
} }

View File

@ -13,20 +13,20 @@ use stdClass;
class DressedItems class DressedItems
{ {
private int $USERID; private int $userId;
private stdClass $dressedItem; private stdClass $dressedItem;
private static Db $db; private static Db $db;
private object $dressed; private object $dressed;
/** /**
* DressedItems constructor. * DressedItems constructor.
* @param int $user_id ID игрока. * @param int $userId ID игрока.
*/ */
public function __construct(int $user_id) public function __construct(int $userId)
{ {
self::$db = Db::getInstance(); self::$db = Db::getInstance();
$this->USERID = $user_id; $this->userId = $userId;
$this->dressed = self::$db->ofetchAll('select * from inventory where dressed_slot > 0 and owner_id = ?', $this->USERID); $this->dressed = self::$db->ofetchAll('select * from inventory where dressed_slot > 0 and owner_id = ?', $this->userId);
} }
public static function getDressedItemBySlot($itemSlot, $ownerId) public static function getDressedItemBySlot($itemSlot, $ownerId)
@ -46,25 +46,25 @@ class DressedItems
/** /**
* Снимает с предмета статус одетого на персонажа в определённом слоте персонажа. * Снимает с предмета статус одетого на персонажа в определённом слоте персонажа.
* @param $slot_id - номер слота. * @param $slotId - номер слота.
*/ */
public function undressItem($slot_id) public function undressItem($slotId)
{ {
self::getItemsInSlots(); self::getItemsInSlots();
// Проверяем, что используется один из 12 слотов и наличие предмета в слоте. // Проверяем, что используется один из 12 слотов и наличие предмета в слоте.
if (in_array($slot_id, Item::ITEM_TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem->$slot_id) { if (in_array($slotId, Item::TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem->$slotId) {
Inventory::undressOne($slot_id, $this->USERID); Inventory::undressOne($slotId, $this->userId);
} }
} }
public static function undressAllItems($user_id) public static function undressAllItems($userId)
{ {
return self::$db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot BETWEEN 1 AND 12 AND owner_id = ?', $user_id); return self::$db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot BETWEEN 1 AND 12 AND owner_id = ?', $userId);
} }
public function checkRequirements() public function checkRequirements()
{ {
$stats = (new UserStats($this->USERID))->getFullStats(); $stats = (new UserStats($this->userId))->getFullStats();
$q = 'select count(*) from inventory where $q = 'select count(*) from inventory where
dressed_slot > 0 and dressed_slot > 0 and
need_strength > ? and need_strength > ? and
@ -81,10 +81,10 @@ class DressedItems
$stats->endurance, $stats->endurance,
$stats->intelligence, $stats->intelligence,
$stats->wisdom, $stats->wisdom,
$this->USERID $this->userId
]; ];
if (self::$db->fetchColumn($q, $args) > 0) { if (self::$db->fetchColumn($q, $args) > 0) {
self::undressAllItems($this->USERID); self::undressAllItems($this->userId);
} }
} }
} }

View File

@ -3,11 +3,14 @@
namespace Battles; namespace Battles;
use SQLite3; use Battles\Database\Db;
use SQLite3Result;
class GameLogs class GameLogs
{ {
private const BANK = 1;
private const USER_ACTIONS = 2;
private const BATTLE = 3;
/** /**
* Добавление записи в лог банковских операций. * Добавление записи в лог банковских операций.
* @param int $senderId отправитель средств. * @param int $senderId отправитель средств.
@ -18,15 +21,16 @@ class GameLogs
*/ */
public static function addBankLog(int $senderId, int $receiverId, int $amount, string $type, string $text) public static function addBankLog(int $senderId, int $receiverId, int $amount, string $type, string $text)
{ {
$db = new SQLite3(GameConfigs::DB_SQLITE); self::addLog(
$row = $db->prepare("INSERT INTO bank_logs (sender_id, receiver_id, amount, type, text) VALUES (?, ?, ?, ?, ?)"); json_encode([
$row->bindParam(1, $senderId, SQLITE3_INTEGER); 'senderId' => $senderId,
$row->bindParam(2, $receiverId, SQLITE3_INTEGER); 'receiverId' => $receiverId,
$row->bindParam(3, $amount, SQLITE3_INTEGER); 'amount' => $amount,
$row->bindParam(4, $type, SQLITE3_TEXT); 'type' => $type,
$row->bindParam(5, $text, SQLITE3_TEXT); 'text' => $text,
$row->execute(); ]),
$row->close(); self::BANK,
);
} }
/** /**
@ -44,48 +48,61 @@ class GameLogs
if (empty($type)) { if (empty($type)) {
$type = "system"; $type = "system";
} }
$db = new SQLite3(GameConfigs::DB_SQLITE);
$row = $db->prepare("INSERT INTO users_logs (user_id, author_id, type, text) VALUES (?,?,?,?)"); self::addLog(
$row->bindParam(1, $userId, SQLITE3_INTEGER); json_encode([
$row->bindParam(2, $authorId, SQLITE3_INTEGER); 'userId' => $userId,
$row->bindParam(3, $type, SQLITE3_TEXT); 'authotId' => $authorId,
$row->bindParam(4, $text, SQLITE3_TEXT); 'type' => $type,
$row->execute(); 'text' => $text,
$row->close(); ]),
self::USER_ACTIONS,
);
} }
public static function getUserLogs($userId = null, $type = null): SQLite3Result private static function addLog($jsonString, $logType)
{ {
$db = new SQLite3(GameConfigs::DB_SQLITE); Db::getInstance()->execute('insert into logs (json_data, type) VALUES (?,?)', [
$row = false; $jsonString,
if ($userId && $type) { $logType
$query = "SELECT * FROM users_logs WHERE user_id = ? AND type = ?"; ]);
$row = $db->prepare($query);
$row->bindValue(1, $userId, SQLITE3_INTEGER);
$row->bindValue(2, $type, SQLITE3_TEXT);
} elseif ($userId && !$type) {
$query = "SELECT * FROM users_logs WHERE user_id = ?";
$row = $db->prepare($query);
$row->bindValue(1, $userId, SQLITE3_INTEGER);
} elseif (!$userId && $type) {
$query = "SELECT * FROM users_logs WHERE type= ?";
$row = $db->prepare($query);
$row->bindValue(1, $type, SQLITE3_TEXT);
} elseif (!$userId && !$type) {
$query = "SELECT * FROM users_logs";
$row = $db->prepare($query);
} }
return $row->execute(); private static function getLogByType(int $type): array
}
public static function addBattleLog(int $battle_id, string $text)
{ {
$db = new SQLite3(__DIR__ . '../../Database/battle.logs.getInstance'); $result = [];
$row = $db->prepare('insert into newbattles (battle_id, text) values (?,?)'); $logs = Db::getInstance()->fetchAll('select json_data from logs where type = ?', $type);
$row->bindParam(1, $battle_id, SQLITE3_INTEGER); foreach ($logs as $log) {
$row->bindParam(2, $text, SQLITE3_TEXT); $result[] = json_decode($log, true);
$row->execute(); }
$row->close(); return $result;
}
public static function getUserLogs(?int $userId): array
{
$logs = self::getLogByType(self::USER_ACTIONS);
if (is_null($userId)) {
return $logs;
}
$result = [];
foreach ($logs as $log) {
if ($userId !== $log['userId']) {
continue;
}
$result[] = $log;
}
return $result;
}
public static function addBattleLog(int $battleId, string $text)
{
self::addLog(
json_encode([
'battleId' => $battleId,
'text' => $text,
]),
self::BATTLE,
);
} }
} }

View File

@ -39,9 +39,9 @@ class Hostel
Db::getInstance()->execute('insert into hostel (uid, type, time) values (?,?,?)', [$this->uid, $type, time() + 60 * 60 * 24 * 7]); Db::getInstance()->execute('insert into hostel (uid, type, time) values (?,?,?)', [$this->uid, $type, time() + 60 * 60 * 24 * 7]);
} }
private function addRentTime($hostel_id, $time) private function addRentTime($hostelId, $time)
{ {
Db::getInstance()->execute('update hostel set time = ? where id = ? and uid = ?', [$time, $hostel_id, $this->uid]); Db::getInstance()->execute('update hostel set time = ? where id = ? and uid = ?', [$time, $hostelId, $this->uid]);
} }
private function removeItems() private function removeItems()
@ -123,7 +123,7 @@ class Hostel
$this->newRent($type); $this->newRent($type);
} }
public function changeTime(int $ordered_time): bool public function changeTime(int $orderedTime): bool
{ {
$daysByOrder = [ $daysByOrder = [
1 => 7, 1 => 7,
@ -132,12 +132,12 @@ class Hostel
4 => 28, 4 => 28,
]; ];
if ( if (
!$this->typeIsAllowed($ordered_time) || !$this->typeIsAllowed($orderedTime) ||
!$this->pay(self::PRICEPERTYPE[$this->type][$ordered_time - 1]) !$this->pay(self::PRICEPERTYPE[$this->type][$orderedTime - 1])
) { ) {
return false; return false;
} }
$this->time += 60 * 60 * 24 * $daysByOrder[$ordered_time]; $this->time += 60 * 60 * 24 * $daysByOrder[$orderedTime];
$this->addRentTime($this->hid, $this->time); $this->addRentTime($this->hid, $this->time);
$this->setSuccess('Всё прошло успешно!'); $this->setSuccess('Всё прошло успешно!');
return true; return true;

View File

@ -7,7 +7,7 @@ use Battles\Models\Inventory;
class InventoryItem extends Item class InventoryItem extends Item
{ {
private ?string $present; private ?string $present;
private int $owner_id; private int $ownerId;
private const TOO_MANY_ITEMS_IN_SLOTS = 'Критическая ошибка: Переполнение слота!'; private const TOO_MANY_ITEMS_IN_SLOTS = 'Критическая ошибка: Переполнение слота!';
private const UNKNOWN_ITEM_TYPE = 'Неизвестный тип предмета!'; private const UNKNOWN_ITEM_TYPE = 'Неизвестный тип предмета!';
private const REQUIREMENTS_NOT_MET = 'Персонаж не соответствует требованиям!'; private const REQUIREMENTS_NOT_MET = 'Персонаж не соответствует требованиям!';
@ -20,7 +20,7 @@ class InventoryItem extends Item
public function __construct($row) public function __construct($row)
{ {
parent::__construct($row); parent::__construct($row);
$this->owner_id = $row->owner_id; $this->ownerId = $row->owner_id;
$this->present = $row->present; $this->present = $row->present;
} }
@ -34,9 +34,9 @@ class InventoryItem extends Item
public function printImage() public function printImage()
{ {
if (in_array($this->item_type, range(1, 12))) { if (in_array($this->type, range(1, 12))) {
echo <<<HTML echo <<<HTML
<a href=/main.php?edit=1&dress=$this->item_id title='Надеть'> <a href=/main.php?edit=1&dress=$this->id title='Надеть'>
<img src="/i/sh/$this->image" class="item-wrap-normal" alt=""> <img src="/i/sh/$this->image" class="item-wrap-normal" alt="">
</a> </a>
HTML; HTML;
@ -47,21 +47,16 @@ IMG;
} }
} }
public function printControls()
{
// Для кнопок управления под картинкой.
}
private function dressStatsChecks(): bool private function dressStatsChecks(): bool
{ {
$checkStats = new UserStats($this->owner_id); $checkStats = new UserStats($this->ownerId);
$stat = $checkStats->getFullStats(); $stat = $checkStats->getFullStats();
return $this->need_strength > $stat->strength return $this->needStrength > $stat->strength
|| $this->need_dexterity > $stat->dexterity || $this->needDexterity > $stat->dexterity
|| $this->need_intuition > $stat->intuition || $this->needIntuition > $stat->intuition
|| $this->need_endurance > $stat->endurance || $this->needEndurance > $stat->endurance
|| $this->need_intelligence > $stat->intelligence || $this->needIntelligence > $stat->intelligence
|| $this->need_wisdom > $stat->wisdom; || $this->needWisdom > $stat->wisdom;
} }
/** /**
@ -77,33 +72,33 @@ IMG;
// считаем сколько ОДЕТЫХ предметов в слоте в который мы хотим одеть предмет. 1=просто вещь 1-3=шашни с кольцами // считаем сколько ОДЕТЫХ предметов в слоте в который мы хотим одеть предмет. 1=просто вещь 1-3=шашни с кольцами
// Count добавленный в первый запрос возвращает одну строку в любом случае. // Count добавленный в первый запрос возвращает одну строку в любом случае.
// fetch возвращает одну строку в любом случае. // fetch возвращает одну строку в любом случае.
$weared = Inventory::getDressed($this->item_type, $this->owner_id); $weared = Inventory::getDressed($this->type, $this->ownerId);
$wearedCount = Inventory::countDressed($this->item_type, $this->owner_id); $wearedCount = Inventory::countDressed($this->type, $this->ownerId);
// Если в слоте есть предмет(ы), забиваем их массив одетых в слот предметов. // Если в слоте есть предмет(ы), забиваем их массив одетых в слот предметов.
if ($wearedCount) { if ($wearedCount) {
foreach ($weared as $item) { foreach ($weared as $item) {
$itemInSlot[] = $item->dressed_slot; $itemInSlot[] = $item->dressed_slot;
} }
} }
if (in_array($this->item_type, [ if (in_array($this->type, [
self::ITEM_TYPE_HELMET, self::ITEM_TYPE_ARMOR, self::ITEM_TYPE_LEGS, self::ITEM_TYPE_BOOTS, self::TYPE_HELMET, self::TYPE_ARMOR, self::TYPE_LEGS, self::TYPE_BOOTS,
self::ITEM_TYPE_GLOVES, self::ITEM_TYPE_WEAPON, self::ITEM_TYPE_SHIELD, self::ITEM_TYPE_BELT, self::TYPE_GLOVES, self::TYPE_WEAPON, self::TYPE_SHIELD, self::TYPE_BELT,
self::ITEM_TYPE_AMULET, self::TYPE_AMULET,
])) { ])) {
//работаем с нормальными слотами //работаем с нормальными слотами
if ($wearedCount->c == 1) { if ($wearedCount->c == 1) {
//если слот занят, снимаем старый предмет и одеваем новый предмет //если слот занят, снимаем старый предмет и одеваем новый предмет
Inventory::undressOne($itemInSlot[0], $this->owner_id); Inventory::undressOne($itemInSlot[0], $this->ownerId);
Inventory::dressOne($this->item_id, $this->owner_id); Inventory::dressOne($this->id, $this->ownerId);
} elseif (!$wearedCount->c) { } elseif (!$wearedCount->c) {
//если слот пуст, одеваем новый предмет //если слот пуст, одеваем новый предмет
Inventory::dressOne($this->item_id, $this->owner_id); Inventory::dressOne($this->id, $this->ownerId);
} else { } else {
/* проверка на переполнение слотов */ /* проверка на переполнение слотов */
$error = self::TOO_MANY_ITEMS_IN_SLOTS; $error = self::TOO_MANY_ITEMS_IN_SLOTS;
DressedItems::undressAllItems($this->owner_id); DressedItems::undressAllItems($this->ownerId);
} }
} elseif ($this->item_type == self::ITEM_TYPE_RING) { } elseif ($this->type == self::TYPE_RING) {
// работаем с кольцами // работаем с кольцами
if ($wearedCount->c < 3) { if ($wearedCount->c < 3) {
// Сравниваем массив колец и массив слотов для колец. // Сравниваем массив колец и массив слотов для колец.
@ -111,14 +106,14 @@ IMG;
// Сортируем массив свободных слотов по возрастанию. // Сортируем массив свободных слотов по возрастанию.
sort($emptyRingSlots); sort($emptyRingSlots);
// Одеваем предмет в первый свободный слот. // Одеваем предмет в первый свободный слот.
Inventory::dressOneToSlot($this->item_id, $emptyRingSlots[0]); Inventory::dressOneToSlot($this->id, $emptyRingSlots[0]);
} elseif ($wearedCount->c == 3) { } elseif ($wearedCount->c == 3) {
// Cнимаем предмет из последнего слота 11 и одеваем новый предмет // Cнимаем предмет из последнего слота 11 и одеваем новый предмет
Inventory::changeRings($this->item_id); Inventory::changeRings($this->id);
} else { } else {
/* проверка на переполнение слотов */ /* проверка на переполнение слотов */
$error = self::TOO_MANY_ITEMS_IN_SLOTS; $error = self::TOO_MANY_ITEMS_IN_SLOTS;
DressedItems::undressAllItems($this->owner_id); DressedItems::undressAllItems($this->ownerId);
} }
} else { } else {
$error = self::UNKNOWN_ITEM_TYPE; $error = self::UNKNOWN_ITEM_TYPE;
@ -130,26 +125,25 @@ IMG;
// Выбрасываем вещь. // Выбрасываем вещь.
public function drop(): string public function drop(): string
{ {
if (empty($this->item_id)) { if (empty($this->id)) {
return 'Ошибка: предмет не найден!'; return 'Ошибка: предмет не найден!';
} }
if (Inventory::isWeared($this->item_id)) { if (Inventory::isWeared($this->id)) {
return 'Ошибка: нельзя выбросить одетый предмет!'; return 'Ошибка: нельзя выбросить одетый предмет!';
} }
Inventory::destroyItem($this->item_id, $this->owner_id); Inventory::destroyItem($this->id, $this->ownerId);
GameLogs::addUserLog(User::getInstance()->getId(), User::getInstance()->getLogin() . ' выбросил предмет ' . $this->name . ' id:(cap' . $this->item_id . ')'); GameLogs::addUserLog(User::getInstance()->getId(), User::getInstance()->getLogin() . ' выбросил предмет ' . $this->name . ' id:(cap' . $this->id . ')');
return 'Предмет ' . $this->name . ' выброшен.'; return 'Предмет ' . $this->name . ' выброшен.';
} }
/** Снятие всех предметов, которые не подходят по статам. */ /** Снятие всех предметов, которые не подходят по статам. */
public static function autoDrop() public static function autoDrop()
{ {
$DI = new DressedItems(User::getInstance()->getId()); $di = new DressedItems(User::getInstance()->getId());
foreach ($DI->getItemsInSlots() as $dressedItem) foreach ($di->getItemsInSlots() as $dressedItem) {
{ $itm = new self($dressedItem);
$ITM = new self($dressedItem); if (!$itm->dressStatsChecks()) {
if (!$ITM->dressStatsChecks()) { $di->undressItem($dressedItem->dressed_slot);
$DI->undressItem($dressedItem->dressed_slot);
} }
} }
} }

View File

@ -1,48 +1,49 @@
<?php <?php
namespace Battles; namespace Battles;
use Battles\Database\Db; use Battles\Database\Db;
class Item class Item
{ {
protected int $item_id; protected int $id;
protected string $name = ''; protected string $name = '';
protected int $item_type = self::ITEM_TYPE_TRASH; protected int $type = self::TYPE_TRASH;
protected int $durability = 0; protected int $durability = 0;
protected int $need_strength = 0; protected int $needStrength = 0;
protected int $need_dexterity = 0; protected int $needDexterity = 0;
protected int $need_intuition = 0; protected int $needIntuition = 0;
protected int $need_endurance = 0; protected int $needEndurance = 0;
protected int $need_intelligence = 0; protected int $needIntelligence = 0;
protected int $need_wisdom = 0; protected int $needWisdom = 0;
protected int $add_strength = 0; protected int $addStrength = 0;
protected int $add_dexterity = 0; protected int $addDexterity = 0;
protected int $add_intuition = 0; protected int $addIntuition = 0;
protected int $add_endurance = 0; protected int $addEndurance = 0;
protected int $add_intelligence = 0; protected int $addIntelligence = 0;
protected int $add_wisdom = 0; protected int $addWisdom = 0;
protected int $add_accuracy = 0; protected int $addAccuracy = 0;
protected int $add_evasion = 0; protected int $addEvasion = 0;
protected int $add_criticals = 0; protected int $addCriticals = 0;
protected int $add_min_physical_damage = 0; protected int $addMinPhysicalDamage = 0;
protected int $add_max_physical_damage = 0; protected int $addMaxPhysicalDamage = 0;
protected int $weight = 0; protected int $weight = 0;
protected string $image = ''; protected string $image = '';
protected int $item_cost = 0; protected int $cost = 0;
public const ITEM_TYPES_ALLOWED_IN_SLOTS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; public const TYPES_ALLOWED_IN_SLOTS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
public const ITEM_TYPE_HELMET = 1; public const TYPE_HELMET = 1;
public const ITEM_TYPE_ARMOR = 2; public const TYPE_ARMOR = 2;
public const ITEM_TYPE_LEGS = 3; public const TYPE_LEGS = 3;
public const ITEM_TYPE_BOOTS = 4; public const TYPE_BOOTS = 4;
public const ITEM_TYPE_GLOVES = 5; public const TYPE_GLOVES = 5;
public const ITEM_TYPE_WEAPON = 6; public const TYPE_WEAPON = 6;
public const ITEM_TYPE_SHIELD = 7; public const TYPE_SHIELD = 7;
public const ITEM_TYPE_BELT = 8; public const TYPE_BELT = 8;
public const ITEM_TYPE_RING = 9; public const TYPE_RING = 9;
public const ITEM_TYPE_AMULET = 10; public const TYPE_AMULET = 10;
public const ITEM_TYPE_CONSUMABLE = 20; public const TYPE_CONSUMABLE = 20;
public const ITEM_TYPE_OTHER = 50; public const TYPE_OTHER = 50;
public const ITEM_TYPE_TRASH = 100; public const TYPE_TRASH = 100;
private string $typename; private string $typename;
/** /**
@ -66,45 +67,45 @@ class Item
} }
} }
switch ($this->item_type) { switch ($this->type) {
case self::ITEM_TYPE_HELMET: case self::TYPE_HELMET:
$this->typename = 'Шлем'; $this->typename = 'Шлем';
break; break;
case self::ITEM_TYPE_ARMOR: case self::TYPE_ARMOR:
$this->typename = 'Броня'; $this->typename = 'Броня';
break; break;
case self::ITEM_TYPE_LEGS: case self::TYPE_LEGS:
$this->typename = 'Поножи'; $this->typename = 'Поножи';
break; break;
case self::ITEM_TYPE_BOOTS: case self::TYPE_BOOTS:
$this->typename = 'Сапоги'; $this->typename = 'Сапоги';
break; break;
case self::ITEM_TYPE_GLOVES: case self::TYPE_GLOVES:
$this->typename = 'Перчатки'; $this->typename = 'Перчатки';
break; break;
case self::ITEM_TYPE_WEAPON: case self::TYPE_WEAPON:
$this->typename = 'Оружие'; $this->typename = 'Оружие';
break; break;
case self::ITEM_TYPE_SHIELD: case self::TYPE_SHIELD:
$this->typename = 'Щит'; $this->typename = 'Щит';
break; break;
case self::ITEM_TYPE_BELT: case self::TYPE_BELT:
$this->typename = 'Пояс'; $this->typename = 'Пояс';
break; break;
case self::ITEM_TYPE_RING: case self::TYPE_RING:
$this->typename = 'Кольцо'; $this->typename = 'Кольцо';
break; break;
case self::ITEM_TYPE_AMULET: case self::TYPE_AMULET:
$this->typename = 'Амулет'; $this->typename = 'Амулет';
break; break;
case self::ITEM_TYPE_CONSUMABLE: case self::TYPE_CONSUMABLE:
$this->typename = 'Расходуемый предмет'; $this->typename = 'Расходуемый предмет';
break; break;
default: default:
$this->typename = 'Хлам'; $this->typename = 'Хлам';
} }
$this->item_cost = $this->calculateItemCost(); $this->cost = $this->calculateItemCost();
} }
/** Рассчёт стоимости предмета в зависимости от его характеристик. /** Рассчёт стоимости предмета в зависимости от его характеристик.
@ -112,26 +113,26 @@ class Item
*/ */
protected function calculateItemCost(): int protected function calculateItemCost(): int
{ {
$sum_stats = $sumStats =
$this->add_strength + $this->addStrength +
$this->add_dexterity + $this->addDexterity +
$this->add_intuition + $this->addIntuition +
$this->add_endurance + $this->addEndurance +
$this->add_intelligence + $this->addIntelligence +
$this->add_wisdom; $this->addWisdom;
$sum_mods = $sumMods =
$this->add_accuracy + $this->addAccuracy +
$this->add_evasion + $this->addEvasion +
$this->add_criticals; $this->addCriticals;
$sum_damage = $sumDamage =
$this->add_min_physical_damage + $this->addMinPhysicalDamage +
$this->add_max_physical_damage; $this->addMaxPhysicalDamage;
// За каждые N параметров повышаем множитель на 1 чтобы цена пропрорционально росла. // За каждые N параметров повышаем множитель на 1 чтобы цена пропрорционально росла.
$stats_cost_modifier = 5 + floor($sum_stats / 10); $statsCostModifier = 5 + floor($sumStats / 10);
$mods_cost_modifier = 2 + floor($sum_mods / 50); $modsCostModifier = 2 + floor($sumMods / 50);
$damage_cost_modifier = 1 + floor($sum_damage / 100); $damageCostModifier = 1 + floor($sumDamage / 100);
$result = intval($sum_stats * $stats_cost_modifier + $sum_mods * $mods_cost_modifier + $sum_damage * $damage_cost_modifier); $result = intval($sumStats * $statsCostModifier + $sumMods * $modsCostModifier + $sumDamage * $damageCostModifier);
return $result < 1 ? 1 : $result; return max($result, 1);
} }
protected function wrap(int $number): string protected function wrap(int $number): string
@ -146,26 +147,26 @@ class Item
public function getAllInfo(): string public function getAllInfo(): string
{ {
$needsLines = [ $needsLines = [
'сила' => $this->need_strength, 'сила' => $this->needStrength,
'ловкость' => $this->need_dexterity, 'ловкость' => $this->needDexterity,
'интуиция' => $this->need_intuition, 'интуиция' => $this->needIntuition,
'выносливость' => $this->need_endurance, 'выносливость' => $this->needEndurance,
'интеллект' => $this->need_intelligence, 'интеллект' => $this->needIntelligence,
'мудрость' => $this->need_wisdom, 'мудрость' => $this->needWisdom,
]; ];
$addsLines = [ $addsLines = [
'Сила' => $this->add_strength, 'Сила' => $this->addStrength,
'Ловкость' => $this->add_dexterity, 'Ловкость' => $this->addDexterity,
'Интуиция' => $this->add_intuition, 'Интуиция' => $this->addIntuition,
'Выносливость' => $this->add_endurance, 'Выносливость' => $this->addEndurance,
'Интеллект' => $this->add_intelligence, 'Интеллект' => $this->addIntelligence,
'Мудрость' => $this->add_wisdom, 'Мудрость' => $this->addWisdom,
'Точность' => $this->add_accuracy, 'Точность' => $this->addAccuracy,
'Увёртливость' => $this->add_evasion, 'Увёртливость' => $this->addEvasion,
'Шанс крита' => $this->add_criticals, 'Шанс крита' => $this->addCriticals,
]; ];
$str = "<b>$this->name</b> (Масса: $this->weight)"; $str = "<b>$this->name</b> (Масса: $this->weight)";
$str .= '<br> Стоимость: ' . $this->item_cost; $str .= '<br> Стоимость: ' . $this->cost;
$str .= '<br> Долговечность: ' . $this->durability; $str .= '<br> Долговечность: ' . $this->durability;
$str .= "<br><em>$this->typename</em><br>"; $str .= "<br><em>$this->typename</em><br>";
foreach ($needsLines as $stat => $value) { foreach ($needsLines as $stat => $value) {
@ -178,12 +179,12 @@ class Item
$str .= "<br>$stat" . $this->wrap($value); $str .= "<br>$stat" . $this->wrap($value);
} }
} }
if ($this->add_min_physical_damage && !$this->add_max_physical_damage) { if ($this->addMinPhysicalDamage && !$this->addMaxPhysicalDamage) {
$damage = $this->add_min_physical_damage . ' - ' . $this->add_min_physical_damage; $damage = $this->addMinPhysicalDamage . ' - ' . $this->addMinPhysicalDamage;
} elseif (!$this->add_min_physical_damage && $this->add_max_physical_damage) { } elseif (!$this->addMinPhysicalDamage && $this->addMaxPhysicalDamage) {
$damage = $this->add_max_physical_damage . ' - ' . $this->add_max_physical_damage; $damage = $this->addMaxPhysicalDamage . ' - ' . $this->addMaxPhysicalDamage;
} elseif ($this->add_min_physical_damage && $this->add_max_physical_damage) { } elseif ($this->addMinPhysicalDamage && $this->addMaxPhysicalDamage) {
$damage = $this->add_min_physical_damage . ' - ' . $this->add_max_physical_damage; $damage = $this->addMinPhysicalDamage . ' - ' . $this->addMaxPhysicalDamage;
} }
if (isset($damage)) { if (isset($damage)) {
$str .= '<br>Урон: ' . $damage; $str .= '<br>Урон: ' . $damage;
@ -191,8 +192,8 @@ class Item
return $str; return $str;
} }
public static function getItemById($item_id): Item public static function getItemById($itemId): Item
{ {
return new Item(Db::getInstance()->ofetch('select * from items where id = ?', $item_id)); return new Item(Db::getInstance()->ofetch('select * from items where id = ?', $itemId));
} }
} }

View File

@ -25,16 +25,16 @@ class Sharpen extends Magic
if (!$this->isUsable()) { if (!$this->isUsable()) {
return $this->status; return $this->status;
} }
$item = DressedItems::getDressedItemBySlot(Item::ITEM_TYPE_WEAPON, $_SESSION['uid']); $item = DressedItems::getDressedItemBySlot(Item::TYPE_WEAPON, $_SESSION['uid']);
// Проверяем, что в названии предмета нет цифр и плюсов. // Проверяем, что в названии предмета нет цифр и плюсов.
if (preg_match('/[\W\S]+\+\[?[\d]]?/', $item->name)) { if (preg_match('/\+\d/', $item->name)) {
return 'Этот предмет точить нельзя!'; return 'Этот предмет точить нельзя!';
} }
$newMinPhysicalDamage = $item->add_min_physical_damage + $sharpenStrength; $newMinPhysicalDamage = $item->add_min_physical_damage + $sharpenStrength;
$newMaxPhysicalDamage = $item->add_max_physical_damage + $sharpenStrength; $newMaxPhysicalDamage = $item->add_max_physical_damage + $sharpenStrength;
$newItemName = $item->name . " [+$sharpenStrength]"; $newItemName = $item->name . " [+$sharpenStrength]";
Db::getInstance()->execute('UPDATE battles.inventory SET name = ?, add_min_physical_damage = ?, add_max_physical_damage = ? WHERE item_id = ? ', [$newItemName, $newMinPhysicalDamage, $newMaxPhysicalDamage, $item->item_id]); Db::getInstance()->execute('UPDATE inventory SET name = ?, add_min_physical_damage = ?, add_max_physical_damage = ? WHERE item_id = ? ', [$newItemName, $newMinPhysicalDamage, $newMaxPhysicalDamage, $item->item_id]);
return "У вас получилось изготовить предмет $newItemName!"; return "У вас получилось изготовить предмет $newItemName!";
} }

View File

@ -6,23 +6,18 @@ use Battles\Database\Db;
class Inventory class Inventory
{ {
public static function getWeight(int $user_id): int public static function getWeight(int $userId): int
{ {
return Db::getInstance()->fetchColumn(' return Db::getInstance()->fetchColumn(
select 'select sum(weight) from inventory where owner_id = ? and on_sale = 0',
sum(weight) $userId
from );
inventory
where
owner_id = ?
and on_sale = 0
', $user_id);
} }
public static function getBonuses(int $user_id) public static function getBonuses(int $userId)
{ {
return Db::getInstance()->ofetch(" return Db::getInstance()->ofetch(
select "select
sum(add_strength) as item_strength, sum(add_strength) as item_strength,
sum(add_dexterity) as item_dexterity, sum(add_dexterity) as item_dexterity,
sum(add_intuition) as item_intuition, sum(add_intuition) as item_intuition,
@ -37,99 +32,88 @@ class Inventory
from from
inventory inventory
where where
dressed_slot != 0 and dressed_slot != 0 and owner_id = ?",
owner_id = ? $userId
", $user_id); );
} }
public static function getDressed(int $item_type, int $user_id): object public static function getDressed(int $itemType, int $userId): object
{ {
return Db::getInstance()->ofetchAll(' return Db::getInstance()->ofetchAll(
SELECT 'SELECT
dressed_slot dressed_slot
FROM FROM
inventory inventory
WHERE WHERE
dressed_slot != 0 dressed_slot != 0 AND item_type = ? AND owner_id = ?',
AND item_type = ? [$itemType, $userId]
AND owner_id = ? );
', [$item_type, $user_id]);
} }
public static function countDressed(int $item_type, int $user_id): object public static function countDressed(int $itemType, int $userId): object
{ {
return Db::getInstance()->ofetchAll(' return Db::getInstance()->ofetchAll(
SELECT 'SELECT
count(dressed_slot) count(dressed_slot)
FROM FROM
inventory inventory
WHERE WHERE
dressed_slot != 0 dressed_slot != 0 AND item_type = ? AND owner_id = ?',
AND item_type = ? [$itemType, $userId]
AND owner_id = ? );
', [$item_type, $user_id]);
} }
public static function undressOne(int $slot, int $user_id) public static function undressOne(int $slot, int $userId)
{ {
Db::getInstance()->execute(' Db::getInstance()->execute(
UPDATE 'UPDATE
inventory inventory
SET SET
dressed_slot = 0 dressed_slot = 0
WHERE WHERE
dressed_slot = ? dressed_slot = ? AND owner_id = ?',
AND owner_id = ? [$slot, $userId]
', [$slot, $user_id]); );
} }
public static function dressOne(int $item_id, int $user_id) public static function dressOne(int $itemId, int $userId)
{ {
Db::getInstance()->execute(' Db::getInstance()->execute(
UPDATE 'UPDATE
inventory inventory
SET SET
dressed_slot = item_type dressed_slot = item_type
WHERE WHERE
item_id = ? item_id = ? AND owner_id = ?',
AND owner_id = ? [$itemId, $userId]
', [$item_id, $user_id]); );
} }
public static function dressOneToSlot(int $item_id, int $slot) public static function dressOneToSlot(int $itemId, int $slot)
{ {
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = ? WHERE item_id = ?', [$slot, $item_id]); Db::getInstance()->execute('UPDATE inventory SET dressed_slot = ? WHERE item_id = ?', [$slot, $itemId]);
} }
public static function destroyItem(int $item_id, int $user_id) public static function destroyItem(int $itemId, int $userId)
{ {
Db::getInstance()->execute(' Db::getInstance()->execute(
delete 'delete
from from
inventory inventory
where where
dressed_slot = 0 dressed_slot = 0 and owner_id = ? and item_id = ?',
and owner_id = ? [$userId, $itemId]
and item_id = ? );
', [$user_id, $item_id]);
} }
public static function changeRings(int $item_id) public static function changeRings(int $itemId)
{ {
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = 11'); Db::getInstance()->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = 11');
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = 11 WHERE item_id = ?', $item_id); Db::getInstance()->execute('UPDATE inventory SET dressed_slot = 11 WHERE item_id = ?', $itemId);
} }
public static function isWeared(int $item_id): bool public static function isWeared(int $itemId): bool
{ {
return Db::getInstance()->fetchColumn(' return Db::getInstance()->fetchColumn('select count(*) from inventory where item_id = ? and dressed_slot > 0', $itemId) > 0;
select
count(*)
from
inventory
where
item_id = ?
and dressed_slot > 0
', $item_id) > 0;
} }
} }

View File

@ -4,6 +4,7 @@
* Date: 04.07.2020 * Date: 04.07.2020
* Time: 13:17 * Time: 13:17
*/ */
namespace Battles\Models; namespace Battles\Models;
use Battles\Database\Db; use Battles\Database\Db;
@ -12,11 +13,11 @@ use Battles\User;
class Presents class Presents
{ {
public function getAll($user_id = null) public function getAll($userId = null)
{ {
if (is_null($user_id)) { if (is_null($userId)) {
$user_id = User::getInstance()->getId(); $userId = User::getInstance()->getId();
} }
return Db::getInstance()->execute('SELECT sender_id, image FROM `users_presents` WHERE owner_id = ?', $user_id); return Db::getInstance()->execute('SELECT sender_id, image FROM `users_presents` WHERE owner_id = ?', $userId);
} }
} }

View File

@ -6,10 +6,10 @@ use Battles\Database\Db;
class Effects class Effects
{ {
public static function getStatMods(int $user_id) public static function getStatMods(int $userId)
{ {
return Db::getInstance()->ofetch(" return Db::getInstance()->ofetch(
select "select
sum(mod_strength) as effect_strength, sum(mod_strength) as effect_strength,
sum(mod_dexterity) as effect_dexterity, sum(mod_dexterity) as effect_dexterity,
sum(mod_intuition) as effect_intuition, sum(mod_intuition) as effect_intuition,
@ -19,17 +19,18 @@ class Effects
from from
users_effects users_effects
where where
owner_id = ? owner_id = ?",
", $user_id); $userId
);
} }
public static function getAll(int $user_id): object public static function getAll(int $userId): object
{ {
return Db::getInstance()->ofetchAll('SELECT * FROM users_effects WHERE owner_id = ?', $user_id); return Db::getInstance()->ofetchAll('SELECT * FROM users_effects WHERE owner_id = ?', $userId);
} }
public static function count(int $user_id, int $type) public static function count(int $userId, int $type)
{ {
return Db::getInstance()->fetchColumn('select count(*) from users_effects where type = ? and owner_id = ?', [$type, $user_id]); return Db::getInstance()->fetchColumn('select count(*) from users_effects where type = ? and owner_id = ?', [$type, $userId]);
} }
} }

View File

@ -15,24 +15,25 @@ class Stats
return Db::getInstance()->ofetch('select id, strength, dexterity, intuition, endurance, intelligence, wisdom, health, mana, free_stat_points, level from users where ' . $col . ' = ?', $user); return Db::getInstance()->ofetch('select id, strength, dexterity, intuition, endurance, intelligence, wisdom, health, mana, free_stat_points, level from users where ' . $col . ' = ?', $user);
} }
public static function addOne(string $stat, int $user_id) public static function addOne(string $stat, int $userId)
{ {
Db::getInstance()->execute(" Db::getInstance()->execute(
UPDATE "UPDATE
users users
SET SET
$stat = $stat + 1, $stat = $stat + 1,
free_stat_points = free_stat_points - 1 free_stat_points = free_stat_points - 1
WHERE WHERE
id = ? id = ?",
", $user_id); $userId
);
} }
public static function save(array $vars) public static function save(array $vars)
{ {
Db::getInstance()->execute(' Db::getInstance()->execute(
update 'update
users users
set set
strength = ?, strength = ?,
@ -46,7 +47,8 @@ class Stats
free_stat_points = ?, free_stat_points = ?,
level = ? level = ?
where where
id = ? id = ?',
', $vars); $vars
);
} }
} }

View File

@ -44,9 +44,15 @@ class RememberPassword
$hash = uniqid(); $hash = uniqid();
$tomorrow = date('d-M-Y', strtotime('+1 days')); $tomorrow = date('d-M-Y', strtotime('+1 days'));
Db::getInstance()->execute('INSERT INTO users_recovery (login, hash, ip, date) VALUES (?,?,?,?)', [$to, $hash, $tomorrow, $_SERVER['REMOTE_ADDR']]); Db::getInstance()->execute('INSERT INTO users_recovery (login, hash, ip, date) VALUES (?,?,?,?)', [$to, $hash, $tomorrow, $_SERVER['REMOTE_ADDR']]);
$message = sprintf('Здравствуйте!<br><br>Кто-то запросил восстановление пароля к вашему персонажу %s <br><br> $message = sprintf(
'Здравствуйте!<br><br>Кто-то запросил восстановление пароля к вашему персонажу %s <br><br>
Для смены пароля пройдите по <a href="//%s/rememberpassword.php?change=%s">данной ссылке</a>.<br><br> Для смены пароля пройдите по <a href="//%s/rememberpassword.php?change=%s">данной ссылке</a>.<br><br>
Ссылка будет действовать до <em>%s</em>',$to, GAMEDOMAIN, $hash, $tomorrow); Ссылка будет действовать до <em>%s</em>',
$to,
GAMEDOMAIN,
$hash,
$tomorrow
);
return self::mailSend($check->email, $message) ? self::OK_MAIL_SENT : self::ERROR_MAIL_NOT_SENT; return self::mailSend($check->email, $message) ? self::OK_MAIL_SENT : self::ERROR_MAIL_NOT_SENT;
} }
public function isAllowed($hash) public function isAllowed($hash)

View File

@ -1,11 +1,12 @@
<?php <?php
namespace Battles; namespace Battles;
/* /*
* Список наименований игровых комнат. * Список наименований игровых комнат.
*/ */
trait Rooms trait Rooms
{ {
public static $roomNames = [ public static array $roomNames = [
0 => "Секретная Комната", 0 => "Секретная Комната",
1 => "Дом поединков", 1 => "Дом поединков",
20 => "Центральная площадь", 20 => "Центральная площадь",

View File

@ -12,9 +12,9 @@ class Shop
public int $categoryType = 0; public int $categoryType = 0;
private int $shopId; private int $shopId;
private function __construct($shop_id) private function __construct($shopId)
{ {
$this->shopId = $shop_id; $this->shopId = $shopId;
} }
public static function id($shopid): self public static function id($shopid): self
@ -70,18 +70,18 @@ class Shop
public function getCategoryName(): string public function getCategoryName(): string
{ {
$names = [ $names = [
Item::ITEM_TYPE_HELMET => 'Шлемы', Item::TYPE_HELMET => 'Шлемы',
Item::ITEM_TYPE_ARMOR => 'Броня', Item::TYPE_ARMOR => 'Броня',
Item::ITEM_TYPE_LEGS => 'Поножи', Item::TYPE_LEGS => 'Поножи',
Item::ITEM_TYPE_BOOTS => 'Сапоги', Item::TYPE_BOOTS => 'Сапоги',
Item::ITEM_TYPE_GLOVES => 'Перчатки', Item::TYPE_GLOVES => 'Перчатки',
Item::ITEM_TYPE_WEAPON => 'Оружие', Item::TYPE_WEAPON => 'Оружие',
Item::ITEM_TYPE_SHIELD => 'Щиты', Item::TYPE_SHIELD => 'Щиты',
Item::ITEM_TYPE_BELT => 'Пояса', Item::TYPE_BELT => 'Пояса',
Item::ITEM_TYPE_RING => 'Кольца', Item::TYPE_RING => 'Кольца',
Item::ITEM_TYPE_AMULET => 'Амулеты', Item::TYPE_AMULET => 'Амулеты',
Item::ITEM_TYPE_CONSUMABLE => 'Расходники', Item::TYPE_CONSUMABLE => 'Расходники',
Item::ITEM_TYPE_OTHER => 'Разное', Item::TYPE_OTHER => 'Разное',
self::CATEGORY_SALE_ITEMS => 'Предметы в инвентаре', self::CATEGORY_SALE_ITEMS => 'Предметы в инвентаре',
0 => 'Все товары', 0 => 'Все товары',
]; ];

View File

@ -45,7 +45,7 @@ SQL;
// Тип операции в магазине. Для отображения разных блоков в разных случаях. // Тип операции в магазине. Для отображения разных блоков в разных случаях.
private $optype; private $optype;
private ?int $shop_item_quantity; private ?int $shopItemQuantity;
private ?int $price; private ?int $price;
public static string $status = ''; public static string $status = '';
private ?string $jsonBarterList; private ?string $jsonBarterList;
@ -59,8 +59,8 @@ SQL;
$this->optype = $operationType; $this->optype = $operationType;
} }
$this->price = $row->price ?? null; $this->price = $row->price ?? null;
$this->shop_item_quantity = $row->shop_item_quantity ?? null; $this->shopItemQuantity = $row->shop_item_quantity ?? null;
$this->item_id = $row->item_id ?? $row->id; $this->id = $row->item_id ?? $row->id;
if ($operationType === 'buyshop' || $operationType === 'buymarket') { if ($operationType === 'buyshop' || $operationType === 'buymarket') {
$this->offerId = $row->offer_id ?? 0; // Ид позиции в магазине. $this->offerId = $row->offer_id ?? 0; // Ид позиции в магазине.
$this->jsonBarterList = $row->barter_items_list_json ?? null; $this->jsonBarterList = $row->barter_items_list_json ?? null;
@ -102,10 +102,10 @@ SQL;
private function getLowItemQuantityNote(): string private function getLowItemQuantityNote(): string
{ {
if ($this->shop_item_quantity < 1 || $this->shop_item_quantity > 19) { if ($this->shopItemQuantity < 1 || $this->shopItemQuantity > 19) {
return ''; return '';
} }
return "<div style='margin-top: 9px; font-style: italic;'>На складе осталось $this->shop_item_quantity единиц товара!</div>"; return "<div style='margin-top: 9px; font-style: italic;'>На складе осталось $this->shopItemQuantity единиц товара!</div>";
} }
private function getTextBasedOnPrice(): string private function getTextBasedOnPrice(): string
@ -152,14 +152,14 @@ SQL;
self::$status = "Предмет " . $item->name . " куплен за " . $price . "."; self::$status = "Предмет " . $item->name . " куплен за " . $price . ".";
} }
private static function checkAndRemoveBarteredItems(?string $json_list, int $user_id): bool private static function checkAndRemoveBarteredItems(?string $jsonList, int $userId): bool
{ {
if (empty($json_list)) { if (empty($jsonList)) {
return true; return true;
} }
$allowItemRemove = true; $allowItemRemove = true;
foreach (json_decode($json_list) as $item) { foreach (json_decode($jsonList) as $item) {
$row = Db::getInstance()->ofetch('select sum(1) as s from inventory where name = ? and owner_id = ?', [Item::getItemById($item->item_id)->name, $user_id]); $row = Db::getInstance()->ofetch('select sum(1) as s from inventory where name = ? and owner_id = ?', [Item::getItemById($item->item_id)->name, $userId]);
if ($row->s < $item->quantity) { if ($row->s < $item->quantity) {
$allowItemRemove = false; $allowItemRemove = false;
} }
@ -168,10 +168,10 @@ SQL;
self::$status = self::NO_BARTER_ITEMS; self::$status = self::NO_BARTER_ITEMS;
return false; return false;
} }
foreach (json_decode($json_list) as $item) { foreach (json_decode($jsonList) as $item) {
$query = 'delete from inventory where name = ? and owner_id = ? limit ' . (int)$item->quantity; $query = 'delete from inventory where name = ? and owner_id = ? limit ' . (int)$item->quantity;
// У-у-у, сука! https://phpdelusions.net/pdo#limit // У-у-у, сука! https://phpdelusions.net/pdo#limit
Db::getInstance()->execute($query, [Item::getItemById($item->item_id)->name, $user_id]); Db::getInstance()->execute($query, [Item::getItemById($item->item_id)->name, $userId]);
} }
return true; return true;
} }
@ -185,16 +185,16 @@ SQL;
return true; return true;
} }
private static function checkAndChangeRemainingItems(int $current_quantity, $item_id): bool private static function checkAndChangeRemainingItems(int $currentQuantity, $itemId): bool
{ {
if (empty($current_quantity)) { if (empty($currentQuantity)) {
self::$status = self::NO_ITEMS_IN_STOCK; self::$status = self::NO_ITEMS_IN_STOCK;
return false; return false;
} }
if ($current_quantity === -1) { if ($currentQuantity === -1) {
return true; return true;
} }
Db::getInstance()->execute("update trade_offers set shop_item_quantity = shop_item_quantity -1 where shop_item_quantity != -1 and shop_item_id = ? ", $item_id); Db::getInstance()->execute("update trade_offers set shop_item_quantity = shop_item_quantity -1 where shop_item_quantity != -1 and shop_item_id = ? ", $itemId);
return true; return true;
} }
@ -241,12 +241,12 @@ SQL;
return ''; return '';
} }
$str = $this->optype == 'setmarket' ? '<input placeholder=" ' . $this->price . ' " name="cost">' : ''; $str = $this->optype == 'setmarket' ? '<input placeholder=" ' . $this->price . ' " name="cost">' : '';
$hiddenValue = $this->optype === 'buyshop' ? $this->offerId : $this->item_id; $hiddenValue = $this->optype === 'buyshop' ? $this->offerId : $this->id;
$button_name = self::BUTTON[$this->optype]; $buttonName = self::BUTTON[$this->optype];
return <<<FORM return <<<FORM
<form method="post">$str <form method="post">$str
<input type="hidden" name="itemId" value="$hiddenValue"> <input type="hidden" name="itemId" value="$hiddenValue">
<br><input type="submit" name="$this->optype" value="$button_name"> <br><input type="submit" name="$this->optype" value="$buttonName">
</form> </form>
FORM; FORM;
} }
@ -256,27 +256,27 @@ FORM;
*/ */
public function getItemType(): int public function getItemType(): int
{ {
return $this->item_type; return $this->type;
} }
/** Выдача магазинных предметов по запросу. /** Выдача магазинных предметов по запросу.
* Ввелась чтобы перебить takeshopitem() в functions с идентичным функционалом. * Ввелась чтобы перебить takeshopitem() в functions с идентичным функционалом.
* *
* @param int $item_id ИД предмета. * @param int $itemId ИД предмета.
* @param int $to ИД пперсонажа-получателя. * @param int $to ИД пперсонажа-получателя.
*/ */
public static function giveNewItem(int $item_id, int $to): array public static function giveNewItem(int $itemId, int $to): array
{ {
$check = Db::getInstance()->ofetch('select 1 from items where id = ?', $item_id); $check = Db::getInstance()->ofetch('select 1 from items where id = ?', $itemId);
if (!$check) { if (!$check) {
return []; return [];
} }
Db::getInstance()->execute(self::BUY_QUERY, [$to, $item_id]); Db::getInstance()->execute(self::BUY_QUERY, [$to, $itemId]);
$return = Db::getInstance()->ofetch('select image, name from inventory where item_id = ?', Db::getInstance()->lastInsertId()); $return = Db::getInstance()->ofetch('select image, name from inventory where item_id = ?', Db::getInstance()->lastInsertId());
return [ return [
'img' => $return->image, 'img' => $return->image,
'name' => $return->name, 'name' => $return->name,
'id' => $item_id, 'id' => $itemId,
]; ];
} }

View File

@ -1,6 +1,7 @@
<?php <?php
# Date: 30.09.2020 (09:42) # Date: 30.09.2020 (09:42)
namespace Battles; namespace Battles;
class Template class Template
{ {
/** /**

View File

@ -7,7 +7,7 @@ use Battles\Database\Db;
class User class User
{ {
use Users; use Users;
private static ?self $_instance = null; private static ?self $instance = null;
private ?UserProfile $profile = null; private ?UserProfile $profile = null;
private ?UserEffect $effect = null; private ?UserEffect $effect = null;
private ?UserStats $stats = null; private ?UserStats $stats = null;
@ -19,6 +19,7 @@ class User
protected int $experience = 0; protected int $experience = 0;
protected int $battle = 0; protected int $battle = 0;
protected int $zayavka = 0; protected int $zayavka = 0;
private object $profileData;
protected function __construct($user = null) protected function __construct($user = null)
{ {
@ -28,10 +29,10 @@ class User
// Отсекаем 2.0000~ // Отсекаем 2.0000~
$col = ctype_digit(strval($user)) ? 'id' : 'login'; $col = ctype_digit(strval($user)) ? 'id' : 'login';
$query = "select * from users where $col = ?"; $query = "select * from users where $col = ?";
$user_query = Db::getInstance()->fetch($query, $user); $userQuery = Db::getInstance()->fetch($query, $user);
foreach ($this as $key => $value) { foreach ($this as $key => $value) {
if (isset($user_query[$key])) { if (isset($userQuery[$key])) {
$this->$key = $user_query[$key]; $this->$key = $userQuery[$key];
} }
} }
@ -48,10 +49,10 @@ class User
public static function getInstance($user = null): self public static function getInstance($user = null): self
{ {
if (is_null(self::$_instance)) { if (is_null(self::$instance)) {
self::$_instance = new self($user); self::$instance = new self($user);
} }
return self::$_instance; return self::$instance;
} }
public function profile(): UserProfile public function profile(): UserProfile
@ -100,7 +101,6 @@ class User
return $this->userMoney; return $this->userMoney;
} }
public function getId(): int public function getId(): int
{ {
return $this->id; return $this->id;
@ -128,11 +128,11 @@ class User
} }
/** /**
* @param string|null $short_name Короткое название клана. Передать null для очистки. * @param string|null $shortName Короткое название клана. Передать null для очистки.
*/ */
public function setClan(?string $short_name) public function setClan(?string $shortName)
{ {
$this->clan = is_null($short_name) ? null : $short_name; $this->clan = is_null($shortName) ? null : $shortName;
$this->saveUser(); $this->saveUser();
} }

View File

@ -94,11 +94,11 @@ class UserEffect
* @param int $type * @param int $type
* @param string $name * @param string $name
* @param int $time * @param int $time
* @param string|null $json_modifiers_list (str, dex, int, end, intel, wis). * @param string|null $jsonModifiersList (str, dex, int, end, intel, wis).
*/ */
public static function add(int $userId, int $type, string $name, int $time, string $json_modifiers_list = null) public static function add(int $userId, int $type, string $name, int $time, string $jsonModifiersList = null)
{ {
$mods = json_decode($json_modifiers_list); $mods = json_decode($jsonModifiersList);
Db::getInstance()->execute('INSERT INTO users_effects (owner_id, type, name, remaining_time, mod_strength, mod_dexterity, mod_intuition, mod_endurance, mod_intelligence, mod_wisdom) VALUES (?,?,?,?,?,?,?,?,?,?)', [$userId, $type, $name, $time, $mods->str ?? null, $mods->dex ?? null, $mods->int ?? null, $mods->end ?? null, $mods->intel ?? null, $mods->wis ?? null]); Db::getInstance()->execute('INSERT INTO users_effects (owner_id, type, name, remaining_time, mod_strength, mod_dexterity, mod_intuition, mod_endurance, mod_intelligence, mod_wisdom) VALUES (?,?,?,?,?,?,?,?,?,?)', [$userId, $type, $name, $time, $mods->str ?? null, $mods->dex ?? null, $mods->int ?? null, $mods->end ?? null, $mods->intel ?? null, $mods->wis ?? null]);
} }

View File

@ -7,8 +7,27 @@ use Exceptions\GameException;
class UserInfo extends UserStats class UserInfo extends UserStats
{ {
private const STRENGTH = 'Сила';
private const DEXTERITY = 'Ловкость';
private const INTUITION = 'Интуиция';
private const ENDURANCE = 'Выносливость';
private const INTELLIGENCE = 'Интеллект';
private const WISDOM = 'Мудрость';
private const PERCENT_20 = (20 / 100); private const PERCENT_20 = (20 / 100);
private const PERCENT_80 = (80 / 100); private const PERCENT_80 = (80 / 100);
private const LEVEL = 'Уровень';
private const HEALTH = 'Здоровье';
private const MANA = 'Пыль';
private const EXPERIENCE = 'Опыт';
private const FREE_STAT_POINTS = 'Очки характеристик';
private const MONEY = 'Деньги';
private const MONEY_IN_BANK = self::MONEY . ' в банке';
private const EVASION = 'Уворот';
private const ACCURACY = 'Точность';
private const CRITICALS = 'Шанс крита';
private const DAMAGE = 'Урон';
private const LOCATION = 'Локация';
use Rooms; use Rooms;
/** /**
@ -21,7 +40,7 @@ class UserInfo extends UserStats
* *
* @throws GameException * @throws GameException
*/ */
private function UserInfoDoll(int $isBattle = 0, int $isMain = 0): string private function userInfoDoll(int $isBattle = 0, int $isMain = 0): string
{ {
$di = new DressedItems($this->id); $di = new DressedItems($this->id);
$stats = new UserStats($this->id); $stats = new UserStats($this->id);
@ -31,11 +50,21 @@ class UserInfo extends UserStats
$str .= sprintf('<div class="slot-%s">', $i); $str .= sprintf('<div class="slot-%s">', $i);
if (!empty($dressedItems->$i)) { if (!empty($dressedItems->$i)) {
if (!$isBattle && $isMain) { if (!$isBattle && $isMain) {
$str .= sprintf('<a href="?edit=%s&drop=%s"><img src="/i/sh/%s" class="item-wrap-normal" alt="%s" title="%s"></a>', $str .= sprintf(
mt_rand(), $i, $dressedItems->$i->image, $dressedItems->$i->name, $dressedItems->$i->name); '<a href="?edit=%s&drop=%s"><img src="/i/sh/%s" class="item-wrap-normal" alt="%s" title="%s"></a>',
mt_rand(),
$i,
$dressedItems->$i->image,
$dressedItems->$i->name,
$dressedItems->$i->name
);
} else { } else {
$str .= sprintf('<img src="/i/sh/%s" class="item-wrap-normal tip" alt="%s"><span class="tiptext"><strong>%s</strong></span>', $str .= sprintf(
$dressedItems->$i->image, $dressedItems->$i->name, $dressedItems->$i->name); '<img src="/i/sh/%s" class="item-wrap-normal tip" alt="%s"><span class="tiptext"><strong>%s</strong></span>',
$dressedItems->$i->image,
$dressedItems->$i->name,
$dressedItems->$i->name
);
} }
} else { } else {
$str .= sprintf('<img src="/i/sh/noitem.png" class="item-wrap-normal" title="Пустой слот [%s]" alt="Пустой слот [%s]">', $i, $i); $str .= sprintf('<img src="/i/sh/noitem.png" class="item-wrap-normal" title="Пустой слот [%s]" alt="Пустой слот [%s]">', $i, $i);
@ -43,47 +72,42 @@ class UserInfo extends UserStats
$str .= sprintf('</div><!-- slot-%s -->', $i); $str .= sprintf('</div><!-- slot-%s -->', $i);
} }
$str .= '<div class="slot-image">'; $str .= '<div class="slot-image">';
$str .= '<img src="/i/shadow/' . $this->shadow . '" alt="' . $this->login;
if ($isBattle) { if ($isBattle) {
$str .= sprintf('<img src="/i/shadow/%s" alt="%s" class="tip"><span class="tiptext"><b>%s</b>Уровень: %s<br>Сила: %s<br>Ловкость: %s<br>Интуиция: %s<br>Выносливость: %s<br>Интеллект: %s<br>Мудрость: %s</span>', $str .= '" class = "tip">';
$this->shadow, $stats->getLogin(), $stats->getLogin(), $stats->getLevel(), $stats->getStat('strength'), $stats->getStat('dexterity'), $stats->getStat('intuition'), $stats->getStat('endurance'), $stats->getStat('intelligence'), $stats->getStat('wisdom')); $str .= '<span class="tiptext"><b>' . $stats->getLogin() . '</b>';
unset($sh); $str .= self::LEVEL . ': ' . $stats->getLevel();
$str .= '<br>' . self::STRENGTH . ': ' . $stats->getStat('strength');
$str .= '<br>' . self::DEXTERITY . ': ' . $stats->getStat('dexterity');
$str .= '<br>' . self::INTUITION . ': ' . $stats->getStat('intuition');
$str .= '<br>' . self::ENDURANCE . ': ' . $stats->getStat('endurance');
$str .= '<br>' . self::INTELLIGENCE . ': ' . $stats->getStat('intelligence');
$str .= '<br>' . self::WISDOM . ': ' . $stats->getStat('wisdom');
$str .= '</span>';
} else { } else {
$str .= '<img src="/i/shadow/' . $this->shadow . '" alt="' . $this->login . '">'; $str .= '">';
} }
$str .= '</div><!-- slot-image -->'; $str .= '</div><!-- slot-image -->';
return $str; return $str;
} }
public function test(): array
{
return [
'Сила' => $this->strength,
'Ловкость' => $this->dexterity,
'Интуиция' => $this->intuition,
'Выносливость' => $this->endurance,
'Интеллект' => $this->intelligence,
'Мудрость' => $this->wisdom,
];
}
/** Вызов из inf.php */ /** Вызов из inf.php */
private function ttz(): string private function ttz(): string
{ {
$stat = $this->getFullStats(); $stat = $this->getFullStats();
$arr = [ $arr = [
'Уровень' => $this->level, self::LEVEL => $this->level,
'Сила' => $this->strength, self::STRENGTH => $this->strength,
'Ловкость' => $this->dexterity, self::DEXTERITY => $this->dexterity,
'Интуиция' => $this->intuition, self::INTUITION => $this->intuition,
'Выносливость' => $this->endurance, self::ENDURANCE => $this->endurance,
'Интеллект' => $this->intelligence, self::INTELLIGENCE => $this->intelligence,
'Мудрость' => $this->wisdom, self::WISDOM => $this->wisdom,
'Уворот' => $stat->evasion, self::EVASION => $stat->evasion,
'Точность' => $stat->accuracy, self::ACCURACY => $stat->accuracy,
'Шанс крита' => $stat->criticals, self::CRITICALS => $stat->criticals,
'Урон' => $stat->min_physical_damage . ' - ' . $stat->max_physical_damage, self::DAMAGE => $stat->min_physical_damage . ' - ' . $stat->max_physical_damage,
'Локация' => Rooms::$roomNames[$this->room], self::LOCATION => Rooms::$roomNames[$this->room],
]; ];
$str = null; $str = null;
@ -102,13 +126,13 @@ class UserInfo extends UserStats
); );
} }
private function showProgressBar(int $value, int $max_value) private function showProgressBar(int $value, int $maxValue)
{ {
$values = [ $values = [
'%20%' => (int)round(self::PERCENT_20 * $max_value), '%20%' => (int)round(self::PERCENT_20 * $maxValue),
'%80%' => (int)round(self::PERCENT_80 * $max_value), '%80%' => (int)round(self::PERCENT_80 * $maxValue),
'%value' => $value, '%value' => $value,
'%max' => $max_value '%max' => $maxValue
]; ];
$string = '<meter max="%max" low="%20%" high="%80%" optimum="%max" value="%value">%value / %max</meter>'; $string = '<meter max="%max" low="%20%" high="%80%" optimum="%max" value="%value">%value / %max</meter>';
return str_replace(array_keys($values), array_values($values), $string); return str_replace(array_keys($values), array_values($values), $string);
@ -117,60 +141,57 @@ class UserInfo extends UserStats
/** Для вызова из main.php /** Для вызова из main.php
* @throws GameException * @throws GameException
*/ */
private function UserInfoStats(): string private function userInfoStats(): string
{ {
$captions = 'Уровень:<br>Здоровье:<br>Пыль: $data = [
<br>Сила:<br>Ловкость:<br>Интуиция:<br>Выносливость:<br>Интеллект:<br>Мудрость: self::LEVEL => $this->level,
<br>Опыт:<br>Очки характеристик:<br>Деньги:<br>Деньги в банке: self::HEALTH => $this->showProgressBar($this->health, $this->maxHealth),
'; self::MANA => $this->showProgressBar($this->mana, $this->maxMana),
$variables = self::STRENGTH => parent::getStat('strength', 1),
$this->level . '<br>' . self::DEXTERITY => parent::getStat('dexterity', 1),
$this->showProgressBar($this->health, $this->maxHealth) . '<br>' . self::INTUITION => parent::getStat('intuition', 1),
$this->showProgressBar($this->mana, $this->maxMana) . '<br>' . self::ENDURANCE => parent::getStat('endurance', 1),
parent::getStat('strength', 1) . '<br>' . self::INTELLIGENCE => parent::getStat('intelligence', 1),
parent::getStat('dexterity', 1) . '<br>' . self::WISDOM => parent::getStat('wisdom', 1),
parent::getStat('intuition', 1) . '<br>' . self::EXPERIENCE => $this->experience,
parent::getStat('endurance', 1) . '<br>' . self::FREE_STAT_POINTS => $this->freeStatPoints,
parent::getStat('intelligence', 1) . '<br>' . self::MONEY => User::getInstance()->money()->get(),
parent::getStat('wisdom', 1) . '<br>' . self::MONEY_IN_BANK => User::getInstance()->money()->getBank(),
$this->experience . '<br>' . ];
$this->free_stat_points . '<br>' .
User::getInstance()->money()->get() . '<br>' .
User::getInstance()->money()->getBank();
$nameString = Nick::id($this->id)->full(); $str = '<div class="user-info">';
$str .= '<div class="info"><b>' . Nick::id($this->id)->full() . '</b></div><!-- info -->';
$str .= '<div class="stats-container">';
foreach ($data as $caption => $variable) {
$str .= '<div class="column" style="float: left;">' . $caption . '</div><!-- column -->';
$str .= '<div class="column">' . $variable . '</div><!-- column -->';
}
$str .= '</div><!-- stats-container -->';
$str .= '</div><!-- user-info -->';
return <<<HTML return $str;
<div class="user-info">
<div class="info"><b>$nameString</b></div><!-- info -->
<div class="stats-container">
<div class="column" style="float: left;">$captions</div><!-- column -->
<div class="column">$variables</div><!-- column -->
</div><!-- stats-container -->
</div><!-- user-info -->
HTML;
} }
public function userInfoStatsTest(): array public function userInfoStatsTest(): array
{ {
$stat = $this->getFullStats(); $stat = $this->getFullStats();
return [ return [
'Сила' => $this->strength, self::STRENGTH => $this->strength,
'Ловкость' => $this->dexterity, self::DEXTERITY => $this->dexterity,
'Интуиция' => $this->intuition, self::INTUITION => $this->intuition,
'Выносливость' => $this->endurance, self::ENDURANCE => $this->endurance,
'Интеллект' => $this->intelligence, self::INTELLIGENCE => $this->intelligence,
'Мудрость' => $this->wisdom, self::WISDOM => $this->wisdom,
'<br>HP' => $this->health . ' / ' . $this->maxHealth, '<br>' . self::HEALTH => $this->health . ' / ' . $this->maxHealth,
'MP' => $this->mana . ' / ' . $this->maxMana, self::MANA => $this->mana . ' / ' . $this->maxMana,
'Уворот' => $stat->evasion, self::EVASION => $stat->evasion,
'Точность' => $stat->accuracy, self::ACCURACY => $stat->accuracy,
'Шанс крита' => $stat->criticals, self::CRITICALS => $stat->criticals,
'Урон' => $stat->min_physical_damage . ' - ' . $stat->max_physical_damage, self::DAMAGE => $stat->min_physical_damage . ' - ' . $stat->max_physical_damage,
'<br>Уровень' => $this->level, '<br>' . self::LEVEL => $this->level,
'Опыт' => $this->experience, self::EXPERIENCE => $this->experience,
'Деньги' => $this->money()->get(), self::MONEY => $this->money()->get(),
'<br>Локация' => Rooms::$roomNames[$this->room], '<br>' . self::LOCATION => Rooms::$roomNames[$this->room],
]; ];
} }
@ -188,7 +209,7 @@ HTML;
$str .= "<span class='error'>Персонаж $this->login обезличен $hidden.</span>"; $str .= "<span class='error'>Персонаж $this->login обезличен $hidden.</span>";
} else { } else {
$str .= '<div class="user-info-container">'; $str .= '<div class="user-info-container">';
$str .= $this->UserInfoDoll(); $str .= $this->userInfoDoll();
$str .= $this->ttz(); $str .= $this->ttz();
$str .= '<div class="slot-lower" style="font-size: xxx-large">' . $this->showProgressBar($this->health, $this->maxHealth) . '<br>' . $this->showProgressBar($this->mana, $this->maxMana) . '</div>'; $str .= '<div class="slot-lower" style="font-size: xxx-large">' . $this->showProgressBar($this->health, $this->maxHealth) . '<br>' . $this->showProgressBar($this->mana, $this->maxMana) . '</div>';
$str .= '</div><!-- u-i-c -->'; $str .= '</div><!-- u-i-c -->';
@ -208,7 +229,7 @@ HTML;
public function showUserDoll($isBattle = 0, $isMain = 0): string public function showUserDoll($isBattle = 0, $isMain = 0): string
{ {
try { try {
return '<div class="user-info-container">' . $this->UserInfoDoll($isBattle, $isMain) . '</div><!-- u-i-c -->'; return '<div class="user-info-container">' . $this->userInfoDoll($isBattle, $isMain) . '</div><!-- u-i-c -->';
} catch (GameException $e) { } catch (GameException $e) {
return $e; return $e;
} }
@ -219,7 +240,7 @@ HTML;
public function showUserInfoMain(): string public function showUserInfoMain(): string
{ {
try { try {
return '<div class="user-doll-container">' . $this->UserInfoDoll() . '</div><!-- user-doll-container -->' . $this->userInfoStats(); return '<div class="user-doll-container">' . $this->userInfoDoll() . '</div><!-- user-doll-container -->' . $this->userInfoStats();
} catch (GameException $e) { } catch (GameException $e) {
return $e; return $e;
} }

View File

@ -7,13 +7,13 @@ use Battles\Database\Db;
class UserMoney class UserMoney
{ {
private int $uid; private int $uid;
private int $wallet_money; private int $walletMoney;
private Bank $bank; private Bank $bank;
public function __construct(int $uid, int $money) public function __construct(int $uid, int $money)
{ {
$this->uid = $uid; $this->uid = $uid;
$this->wallet_money = $money; $this->walletMoney = $money;
$this->initBank(); $this->initBank();
} }
@ -24,12 +24,12 @@ class UserMoney
public function get(): int public function get(): int
{ {
return $this->wallet_money; return $this->walletMoney;
} }
public function set(int $money) public function set(int $money)
{ {
$this->wallet_money = max($money, 0); $this->walletMoney = max($money, 0);
} }
public function getBank(): int public function getBank(): int
@ -44,14 +44,14 @@ class UserMoney
private function save() private function save()
{ {
Db::getInstance()->execute('update users set money = ? where id = ?', [$this->wallet_money, $this->uid]); Db::getInstance()->execute('update users set money = ? where id = ?', [$this->walletMoney, $this->uid]);
} }
/** Тратим деньги */ /** Тратим деньги */
public function spend(int $value): bool public function spend(int $value): bool
{ {
if ($this->wallet_money > $value && $value > 0) { if ($this->walletMoney > $value && $value > 0) {
$this->wallet_money -= $value; $this->walletMoney -= $value;
$this->save(); $this->save();
return true; return true;
} }
@ -64,7 +64,7 @@ class UserMoney
if ($value <= 0) { if ($value <= 0) {
return false; return false;
} }
$this->wallet_money += $value; $this->walletMoney += $value;
$this->save(); $this->save();
return true; return true;
} }

View File

@ -9,11 +9,12 @@ class UserPrivateInfo
/** Блок информации для модераторов. */ /** Блок информации для модераторов. */
public static function get(User $user) public static function get(User $user)
{ {
$log = '';
$userLogs = GameLogs::getUserLogs($user->getId()); $userLogs = GameLogs::getUserLogs($user->getId());
$log = null; foreach ($userLogs as $row) {
while ($userLogRow = $userLogs->fetchArray(SQLITE3_ASSOC)) { $log .= sprintf('<code>%s</code><br>', date('d.m.Y H:i ', strtotime($row['date'])) . $row['text']);
$log .= sprintf('<code>%s</code><br>', date('d.m.Y H:i ', strtotime($userLogRow['date'])) . $userLogRow['text']);
} }
$data = [ $data = [
'%email' => $user->profile()->getEmail(), '%email' => $user->profile()->getEmail(),
'%bday' => date('d.m.Y', strtotime($user->profile()->getBorndate())), '%bday' => date('d.m.Y', strtotime($user->profile()->getBorndate())),

View File

@ -47,10 +47,10 @@ class UserProfile
public function changePassword($old_password, $new_password) public function changePassword($oldPassword, $newPassword)
{ {
if (password_verify($old_password, $this->pass)) { if (password_verify($oldPassword, $this->pass)) {
$this->pass = password_hash($new_password, PASSWORD_DEFAULT); $this->pass = password_hash($newPassword, PASSWORD_DEFAULT);
} else { } else {
$this->status .= 'Неверный пароль!'; $this->status .= 'Неверный пароль!';
} }

View File

@ -19,7 +19,7 @@ class UserStats extends User
protected int $wisdom; protected int $wisdom;
protected int $health; protected int $health;
protected int $mana; protected int $mana;
protected int $free_stat_points = 0; protected int $freeStatPoints = 0;
protected int $level; protected int $level;
private const STAT_MAXIMUM_AMOUNT = 40; private const STAT_MAXIMUM_AMOUNT = 40;
private const ERROR_STAT_IS_MAXIMUM = 'Ошибка: Параметр достиг своего лимита!'; private const ERROR_STAT_IS_MAXIMUM = 'Ошибка: Параметр достиг своего лимита!';
@ -54,7 +54,7 @@ class UserStats extends User
$this->wisdom = $data->wisdom; $this->wisdom = $data->wisdom;
$this->health = $data->health; $this->health = $data->health;
$this->mana = $data->mana; $this->mana = $data->mana;
$this->free_stat_points = $data->free_stat_points; $this->freeStatPoints = $data->free_stat_points;
$this->level = $data->level; $this->level = $data->level;
parent::__construct($user); parent::__construct($user);
$this->maxHealth = round(($this->endurance * 3) + ($this->endurance / 2) * ($this->level - 1) + ($this->endurance / 5) * (($this->level - 1) * ($this->level - 2) / 2)); $this->maxHealth = round(($this->endurance * 3) + ($this->endurance / 2) * ($this->level - 1) + ($this->endurance / 5) * (($this->level - 1) * ($this->level - 2) / 2));
@ -64,7 +64,7 @@ class UserStats extends User
/** /**
* Отдаёт информацию о базовом(!) стате. * Отдаёт информацию о базовом(!) стате.
* *
* @param string $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', * @param string $statName - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition',
* 'endurance', 'intelligence', 'wisdom'. * 'endurance', 'intelligence', 'wisdom'.
* @param int $isMainWindow - переключатель "главного окна". Если включить, дополнительно будет показывать ссылку * @param int $isMainWindow - переключатель "главного окна". Если включить, дополнительно будет показывать ссылку
* на повышение стата на 1, при условии наличия свободных очков статов. * на повышение стата на 1, при условии наличия свободных очков статов.
@ -72,15 +72,15 @@ class UserStats extends User
* @return string * @return string
* @throws GameException * @throws GameException
*/ */
public function getStat(string $stat_name, int $isMainWindow = 0): string public function getStat(string $statName, int $isMainWindow = 0): string
{ {
if (!in_array($stat_name, self::STAT_NAMES_ARRAY)) { if (!in_array($statName, self::STAT_NAMES_ARRAY)) {
throw new GameException(self::ERROR_STAT_UNKNOWN); throw new GameException(self::ERROR_STAT_UNKNOWN);
} }
$stat = strval($this->$stat_name); $stat = strval($this->$statName);
if ($this->free_stat_points && $isMainWindow && $this->$stat_name < self::STAT_MAXIMUM_AMOUNT) { if ($this->freeStatPoints && $isMainWindow && $this->$statName < self::STAT_MAXIMUM_AMOUNT) {
$rand = strval(mt_rand()); $rand = strval(mt_rand());
$stat .= " <a href='/main.php?edit=$rand&ups=$stat_name'>[+]</a>"; $stat .= " <a href='/main.php?edit=$rand&ups=$statName'>[+]</a>";
} }
return $stat; return $stat;
} }
@ -89,20 +89,20 @@ class UserStats extends User
* Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков * Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков
* статов. * статов.
* *
* @param string $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', * @param string $statName - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition',
* 'endurance', 'intelligence', 'wisdom'. * 'endurance', 'intelligence', 'wisdom'.
* *
* @throws GameException * @throws GameException
*/ */
public function addOnePointToStat(string $stat_name) public function addOnePointToStat(string $statName)
{ {
if (!in_array($stat_name, self::STAT_NAMES_ARRAY)) { if (!in_array($statName, self::STAT_NAMES_ARRAY)) {
throw new GameException(self::ERROR_STAT_UNKNOWN); throw new GameException(self::ERROR_STAT_UNKNOWN);
} }
if ($this->free_stat_points <= 0 || $this->$stat_name >= self::STAT_MAXIMUM_AMOUNT) { if ($this->freeStatPoints <= 0 || $this->$statName >= self::STAT_MAXIMUM_AMOUNT) {
throw new GameException(self::ERROR_STAT_IS_MAXIMUM); throw new GameException(self::ERROR_STAT_IS_MAXIMUM);
} else { } else {
Stats::addOne($stat_name, $this->id); Stats::addOne($statName, $this->id);
} }
} }
@ -132,7 +132,7 @@ class UserStats extends User
*/ */
public function getFreeStatPoints() public function getFreeStatPoints()
{ {
return $this->free_stat_points; return $this->freeStatPoints;
} }
/** /**
@ -160,12 +160,6 @@ class UserStats extends User
foreach (self::STAT_NAMES_ARRAY as $stat) { foreach (self::STAT_NAMES_ARRAY as $stat) {
$obj->$stat = max(0, $stats->$stat + $itemBonuses->{'item_' . $stat} + $effectBonuses->{'effect_' . $stat}); $obj->$stat = max(0, $stats->$stat + $itemBonuses->{'item_' . $stat} + $effectBonuses->{'effect_' . $stat});
} }
//$obj->strength = max(0, $stats->strength + $itemBonuses->item_strength + $effectBonuses->effect_strength);
//$obj->dexterity = max(0, $stats->dexterity + $itemBonuses->item_dexterity + $effectBonuses->effect_dexterity);
//$obj->intuition = max(0, $stats->intuition + $itemBonuses->item_intuition + $effectBonuses->effect_intuition);
//$obj->endurance = max(0, $stats->endurance + $itemBonuses->item_endurance + $effectBonuses->effect_endurance);
//$obj->intelligence = max(0, $stats->intelligence + $itemBonuses->item_intelligence + $effectBonuses->effect_intelligence);
//$obj->wisdom = max(0, $stats->wisdom + $itemBonuses->item_wisdom + $effectBonuses->effect_wisdom);
$obj->accuracy = max(0, $itemBonuses->item_accuracy); $obj->accuracy = max(0, $itemBonuses->item_accuracy);
$obj->evasion = max(0, $itemBonuses->item_evasion); $obj->evasion = max(0, $itemBonuses->item_evasion);
$obj->criticals = max(0, $itemBonuses->item_criticals); $obj->criticals = max(0, $itemBonuses->item_criticals);
@ -177,9 +171,9 @@ class UserStats extends User
public function levelUp(): string public function levelUp(): string
{ {
$this->level += 1; $this->level += 1;
$this->free_stat_points += 2; $this->freeStatPoints += 2;
$this->save(); $this->save();
Chat::addSYSMessage('Внимание, вы получили ' . $this->level . 'уровень. Доступны очки распределения параметров.'); Chat::sendSys('Внимание, вы получили ' . $this->level . 'уровень. Доступны очки распределения параметров.');
return 'Персонаж перешёл на ' . $this->level . 'уровень.'; return 'Персонаж перешёл на ' . $this->level . 'уровень.';
} }
@ -197,7 +191,7 @@ class UserStats extends User
$this->wisdom, $this->wisdom,
$this->health, $this->health,
$this->mana, $this->mana,
$this->free_stat_points, $this->freeStatPoints,
$this->level, $this->level,
$this->id //where $this->id //where
]); ]);

View File

@ -2,6 +2,8 @@
# Date: 28.10.2020 (17:41) # Date: 28.10.2020 (17:41)
namespace Exceptions; namespace Exceptions;
use Exception; use Exception;
class GameException extends Exception { } class GameException extends Exception //custom exception
{}

View File

@ -17,8 +17,10 @@ class Register
) { ) {
return 0; return 0;
} }
Db::getInstance()->execute('insert into users (login,pass,email,borndate,ip,session_id,shadow) values (?,?,?,?,?,?,?)', Db::getInstance()->execute(
[$login, $password, $email, $birthday, $_SERVER['REMOTE_ADDR'], session_id(), '0.png']); 'insert into users (login,pass,email,borndate,ip,session_id) values (?,?,?,?,?,?)',
[$login, $password, $email, $birthday, $_SERVER['REMOTE_ADDR'], session_id()]
);
$userId = Db::getInstance()->lastInsertId(); $userId = Db::getInstance()->lastInsertId();
Db::getInstance()->execute('insert into online (user_id, login_time, room, real_time) values (?,?,1,?)', [$userId, time(), time()]); Db::getInstance()->execute('insert into online (user_id, login_time, room, real_time) values (?,?,1,?)', [$userId, time(), time()]);
Db::getInstance()->execute('insert into bank (user_id) values ?', $userId); Db::getInstance()->execute('insert into bank (user_id) values ?', $userId);

View File

@ -5,6 +5,7 @@
* Project name: Battles-Game * Project name: Battles-Game
*/ */
use Battles\Chat;
use Battles\Database\Db; use Battles\Database\Db;
use Battles\Travel; use Battles\Travel;
use Battles\User; use Battles\User;
@ -76,17 +77,17 @@ function savecavedata($cavedata, $caveleader, $floor)
* *
* @param $current - Текущее значение. * @param $current - Текущее значение.
* @param $maximum - Максимальное значение. * @param $maximum - Максимальное значение.
* @param string $line_color - Цвет полоски прогрессбара. * @param string $lineColor - Цвет полоски прогрессбара.
* @param string $bg_color - Фон прогрессбара. * @param string $bgColor - Фон прогрессбара.
* *
* @return string * @return string
*/ */
function showProgressBar($current, $maximum, string $line_color = 'limegreen', string $bg_color = 'silver'): string function showProgressBar($current, $maximum, string $lineColor = 'limegreen', string $bgColor = 'silver'): string
{ {
$bar = round($current / $maximum * 100); $bar = round($current / $maximum * 100);
return <<<HTML return <<<HTML
<div style="width: 100%; height: 16px; background: $bg_color; overflow: hidden; border-radius: 3px;"> <div style="width: 100%; height: 16px; background: $bgColor; overflow: hidden; border-radius: 3px;">
<div style="height: 16px; background: $line_color; border-radius: 3px; width: $bar%;"></div> <div style="height: 16px; background: $lineColor; border-radius: 3px; width: $bar%;"></div>
</div> </div>
<div style="width: 100%; height: 16px; font-size: 14px; text-align: center; margi <div style="width: 100%; height: 16px; font-size: 14px; text-align: center; margi
n-top: -16px;"> n-top: -16px;">
@ -105,26 +106,25 @@ HTML;
*/ */
function echoscroll($slot): string function echoscroll($slot): string
{ {
$all_magic = 0; $allMagic = 0;
if (User::getInstance()->getBattle()) { if (User::getInstance()->getBattle()) {
$script = 'fbattle'; $script = 'fbattle';
$all_magic = Db::getInstance()->fetchColumn('select magic from battle where id = ?', User::getInstance()->getBattle()); $allMagic = Db::getInstance()->fetchColumn('select magic from battle where id = ?', User::getInstance()->getBattle());
$all_magic = unserialize($all_magic); $allMagic = unserialize($allMagic);
} else { } else {
$script = 'main'; $script = 'main';
} }
$dress = Db::getInstance()->fetch('select magic, name, image, durability from inventory where item_id - ?', User::getInstance()->$slot); $dress = Db::getInstance()->fetch('select magic, name, image, durability from inventory where item_id = ?', User::getInstance()->$slot);
$need_charge = Db::getInstance()->fetchColumn('select needcharge from magic where id = ?', $dress['magic']); $needCharge = Db::getInstance()->fetchColumn('select needcharge from magic where id = ?', $dress['magic']);
$str = null; $str = null;
if ((User::getInstance()->$slot > 0) && ($all_magic[User::getInstance()->getId()] < 1 || empty($need_charge))) { if ((User::getInstance()->$slot > 0) && ($allMagic[User::getInstance()->getId()] < 1 || empty($needCharge))) {
$row['id'] = User::getInstance()->$slot; $row['id'] = User::getInstance()->$slot;
if ($dress['magic']) { if ($dress['magic']) {
$magic_targeted = Db::getInstance()->fetchColumn('select targeted from magic where id = ?', $dress['magic']); $magicTargeted = Db::getInstance()->fetchColumn('select targeted from magic where id = ?', $dress['magic']);
$str .= "<a onclick=\""; $str .= "<a onclick=\"";
if ($magic_targeted === 1) { if ($magicTargeted === 1) {
$str .= "okno('Введите название предмета', '" . $script . ".php?use={$row['id']}', 'target'); "; $str .= "okno('Введите название предмета', '" . $script . ".php?use={$row['id']}', 'target'); ";
} else } elseif ($magicTargeted === 2) {
if ($magic_targeted === 2) {
$str .= "findlogin('Введите имя персонажа', '" . $script . ".php?use={$row['id']}', 'target'); "; $str .= "findlogin('Введите имя персонажа', '" . $script . ".php?use={$row['id']}', 'target'); ";
} else { } else {
$str .= "if(confirm('Использовать сейчас?')) { window.location='" . $script . ".php?use=" . $row['id'] . "';}"; $str .= "if(confirm('Использовать сейчас?')) { window.location='" . $script . ".php?use=" . $row['id'] . "';}";
@ -134,7 +134,7 @@ function echoscroll($slot): string
$str .= <<<ACTIVE_SCROLL $str .= <<<ACTIVE_SCROLL
<img class='tooltip' src="i/sh/{$dress['img']}" width='40' title="<b>{$dress['name']}</b><br> Прочность {$dress['duration']} / {$dress['maxdur']} " height='25' alt="Свиток"></a> <img class='tooltip' src="i/sh/{$dress['img']}" width='40' title="<b>{$dress['name']}</b><br> Прочность {$dress['duration']} / {$dress['maxdur']} " height='25' alt="Свиток"></a>
ACTIVE_SCROLL; ACTIVE_SCROLL;
} elseif ((User::getInstance()->$slot > 0) && ($all_magic[User::getInstance()->getId()] >= 1) && $need_charge['needcharge'] > 0) { } elseif ((User::getInstance()->$slot > 0) && ($allMagic[User::getInstance()->getId()] >= 1) && $needCharge['needcharge'] > 0) {
$str .= <<<INACTIVE_SCROLL $str .= <<<INACTIVE_SCROLL
<img src="i/sh/magicclock.gif" width="40" height="25" title='Произведите размен ударами и магия снова станет доступна' alt="Свиток"> <img src="i/sh/magicclock.gif" width="40" height="25" title='Произведите размен ударами и магия снова станет доступна' alt="Свиток">
INACTIVE_SCROLL; INACTIVE_SCROLL;
@ -176,12 +176,26 @@ function addActions($time, $vars, $vls, $uid)
* по нескольку раз вызывают эти функции. * по нескольку раз вызывают эти функции.
*/ */
function addch($text, $room = 0) /**
* @param $text
* @param $room
* @param $smth
* @return void
* @deprecated use Chat::sendSys($msg) instead.
*/
function addch($text, $room = 0, $smth = null)
{ {
Chat::sendSys($text); Chat::sendSys($text);
} }
/**
* @param $text
* @param $who
* @param $room
* @return void
* @deprecated use Chat::sendSys($msg, $receiverId) instead.
*/
function addchp($text, $who, $room = 0) function addchp($text, $who, $room = 0)
{ {
Chat::sendSys($text, $who); Chat::sendSys($text, $who);
@ -200,9 +214,8 @@ function err($t)
*/ */
function telegraph(int $userId, string $text) function telegraph(int $userId, string $text)
{ {
$userExists = Db::getInstance()->fetchColumn('select count(*) from users where id = ?', $userId) > 0; if (User::getInstance($userId)->getId() > 0) {
if ($userExists) { Chat::sendTelegraf($text, $userId);
Db::getInstance()->execute('INSERT INTO chat (user_id,receiver_id,msg,type) VALUES (-1,?,?,?)', [$userId, $text, 'sms']);
} }
} }

View File

@ -32,7 +32,7 @@ Template::header('Подземелье Луки');
</div> </div>
</TD> </TD>
<TD> <TD>
<i> <em>
<?php <?php
$gag = Db::getInstance()->fetchAll('select * from qwest where login = ?', User::getInstance()->getLogin()); $gag = Db::getInstance()->fetchAll('select * from qwest where login = ?', User::getInstance()->getLogin());
foreach ($gag as $qw) { foreach ($gag as $qw) {
@ -74,7 +74,7 @@ Template::header('Подземелье Луки');
$item_name = 'Гайка ловкости'; $item_name = 'Гайка ловкости';
} }
if ($ok_qwest == 1 && ($_GET['d'] == 1.3 || $_GET['d'] == 1.4)) { if ($ok_qwest == 1 && ($_GET['d'] == 1.3 || $_GET['d'] == 1.4)) {
Db::getInstance()->execute($query, [User::getInstance()->getId(), $item_name, 3, 30, Item::ITEM_TYPE_AMULET, 20]); Db::getInstance()->execute($query, [User::getInstance()->getId(), $item_name, 3, 30, Item::TYPE_AMULET, 20]);
$query = 'delete from inventory where owner_id = ? and item_type = 200 and name = ?'; $query = 'delete from inventory where owner_id = ? and item_type = 200 and name = ?';
Db::getInstance()->execute($query, [User::getInstance()->getId(), QUEST_ITEM_NAME['k']]); Db::getInstance()->execute($query, [User::getInstance()->getId(), QUEST_ITEM_NAME['k']]);
$query = 'update qwest set status = ? where name_qwest = ? and login = ?'; $query = 'update qwest set status = ? where name_qwest = ? and login = ?';
@ -221,7 +221,7 @@ Template::header('Подземелье Луки');
} }
} }
?> ?>
</i><BR><BR> </em><BR><BR>
<?php <?php
//Вопросы) //Вопросы)
if (!isset($_GET['d'])) { if (!isset($_GET['d'])) {
@ -296,6 +296,5 @@ Template::header('Подземелье Луки');
</TD> </TD>
</TR> </TR>
</TABLE> </TABLE>
<!-- <DIV ID=oMenu CLASS=menu onmouseout="closeMenu()"></DIV> -->
<DIV ID="oMenu" style="position:absolute; border:1px solid #666; background-color:#CCC; display:none; "></DIV> <DIV ID="oMenu" style="position:absolute; border:1px solid #666; background-color:#CCC; display:none; "></DIV>
<TEXTAREA ID=holdtext STYLE="display:none;"></TEXTAREA> <label for=holdtext></label><TEXTAREA ID=holdtext STYLE="display:none;"></TEXTAREA>

View File

@ -29,18 +29,18 @@ Template::header('Магазин');
</div> </div>
<hr> <hr>
<div>Отделы магазина</div> <div>Отделы магазина</div>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_WEAPON ?>&rnd=<?= mt_rand() ?>">Оружие</a> <a class="waretype" href="?otdel=<?= Item::TYPE_WEAPON ?>&rnd=<?= mt_rand() ?>">Оружие</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_HELMET ?>&rnd=<?= mt_rand() ?>">Шлемы</a> <a class="waretype" href="?otdel=<?= Item::TYPE_HELMET ?>&rnd=<?= mt_rand() ?>">Шлемы</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_ARMOR ?>&rnd=<?= mt_rand() ?>">Броня</a> <a class="waretype" href="?otdel=<?= Item::TYPE_ARMOR ?>&rnd=<?= mt_rand() ?>">Броня</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_LEGS ?>&rnd=<?= mt_rand() ?>">Поножи</a> <a class="waretype" href="?otdel=<?= Item::TYPE_LEGS ?>&rnd=<?= mt_rand() ?>">Поножи</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_BOOTS ?>&rnd=<?= mt_rand() ?>">Сапоги</a> <a class="waretype" href="?otdel=<?= Item::TYPE_BOOTS ?>&rnd=<?= mt_rand() ?>">Сапоги</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_GLOVES ?>&rnd=<?= mt_rand() ?>">Перчатки</a> <a class="waretype" href="?otdel=<?= Item::TYPE_GLOVES ?>&rnd=<?= mt_rand() ?>">Перчатки</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_SHIELD ?>&rnd=<?= mt_rand() ?>">Щиты</a> <a class="waretype" href="?otdel=<?= Item::TYPE_SHIELD ?>&rnd=<?= mt_rand() ?>">Щиты</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_BELT ?>&rnd=<?= mt_rand() ?>">Пояса</a> <a class="waretype" href="?otdel=<?= Item::TYPE_BELT ?>&rnd=<?= mt_rand() ?>">Пояса</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_RING ?>&rnd=<?= mt_rand() ?>">Кольца</a> <a class="waretype" href="?otdel=<?= Item::TYPE_RING ?>&rnd=<?= mt_rand() ?>">Кольца</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_AMULET ?>&rnd=<?= mt_rand() ?>">Амулеты</a> <a class="waretype" href="?otdel=<?= Item::TYPE_AMULET ?>&rnd=<?= mt_rand() ?>">Амулеты</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_CONSUMABLE ?>&rnd=<?= mt_rand() ?>">Расходники</a> <a class="waretype" href="?otdel=<?= Item::TYPE_CONSUMABLE ?>&rnd=<?= mt_rand() ?>">Расходники</a>
<a class="waretype" href="?otdel=<?= Item::ITEM_TYPE_OTHER ?>&rnd=<?= mt_rand() ?>">Разное</a> <a class="waretype" href="?otdel=<?= Item::TYPE_OTHER ?>&rnd=<?= mt_rand() ?>">Разное</a>
<a class="waretype alltypes" href="?rnd=<?= mt_rand() ?>">Все товары</a> <a class="waretype alltypes" href="?rnd=<?= mt_rand() ?>">Все товары</a>
<a class="waretype sell" href="?otdel=sale&rnd=<?= mt_rand() ?>">Продать вещи</a> <a class="waretype sell" href="?otdel=sale&rnd=<?= mt_rand() ?>">Продать вещи</a>
<div id="hint3" class="ahint"></div> <div id="hint3" class="ahint"></div>