Code smell.
This commit is contained in:
parent
b1f578f4b0
commit
0398425205
@ -15,84 +15,140 @@ 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>
|
||||||
<option value="0" selected disabled>Тип магазина</option>
|
<select name="shop">
|
||||||
<option value="1">Обычный</option>
|
<option value="0" selected disabled>Тип магазина</option>
|
||||||
<option value="2">Цветной</option>
|
<option value="1">Обычный</option>
|
||||||
</select>
|
<option value="2">Цветной</option>
|
||||||
|
</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>
|
||||||
<option value="0" selected disabled>Тип предмета</option>
|
<select name="item_type">
|
||||||
<option value="1">Шлем</option>
|
<option value="0" selected disabled>Тип предмета</option>
|
||||||
<option value="2">Броня</option>
|
<option value="1">Шлем</option>
|
||||||
<option value="3">Поножи</option>
|
<option value="2">Броня</option>
|
||||||
<option value="4">Сапоги</option>
|
<option value="3">Поножи</option>
|
||||||
<option value="5">Перчатки</option>
|
<option value="4">Сапоги</option>
|
||||||
<option value="6">Оружие</option>
|
<option value="5">Перчатки</option>
|
||||||
<option value="7">Щит</option>
|
<option value="6">Оружие</option>
|
||||||
<option value="8">Пояс</option>
|
<option value="7">Щит</option>
|
||||||
<option value="9">Кольцо</option>
|
<option value="8">Пояс</option>
|
||||||
<option value="10">Амулет</option>
|
<option value="9">Кольцо</option>
|
||||||
<option value="20">Расходник</option>
|
<option value="10">Амулет</option>
|
||||||
<option value="50">Всё остальное</option>
|
<option value="20">Расходник</option>
|
||||||
<option value="100">Хлам</option>
|
<option value="50">Всё остальное</option>
|
||||||
</select>
|
<option value="100">Хлам</option>
|
||||||
|
</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="Добавить">
|
||||||
|
@ -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">
|
||||||
<input placeholder="Логин или ID" name="player">
|
<label>
|
||||||
|
<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='Стриптиз'>
|
||||||
|
@ -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]);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -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']);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,11 +9,11 @@ class Item
|
|||||||
public static function add(array $params): void
|
public static function add(array $params): void
|
||||||
{
|
{
|
||||||
$query = 'insert into items (
|
$query = 'insert into items (
|
||||||
name, item_type, durability,
|
name, item_type, durability,
|
||||||
need_strength, need_dexterity, need_intuition, need_endurance, need_intelligence, need_wisdom,
|
need_strength, need_dexterity, need_intuition, need_endurance, need_intelligence, need_wisdom,
|
||||||
add_strength, add_dexterity, add_intuition, add_endurance, add_intelligence, add_wisdom,
|
add_strength, add_dexterity, add_intuition, add_endurance, add_intelligence, add_wisdom,
|
||||||
add_accuracy, add_evasion, add_criticals, add_min_physical_damage, add_max_physical_damage,
|
add_accuracy, add_evasion, add_criticals, add_min_physical_damage, add_max_physical_damage,
|
||||||
image, weight)
|
image, weight)
|
||||||
values (
|
values (
|
||||||
:name, :item_type, :durability,
|
:name, :item_type, :durability,
|
||||||
:need_strength, :need_dexterity, :need_intuition, :need_endurance, :need_intelligence, :need_wisdom,
|
:need_strength, :need_dexterity, :need_intuition, :need_endurance, :need_intelligence, :need_wisdom,
|
||||||
|
@ -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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -61,20 +61,20 @@ class Bank
|
|||||||
/**
|
/**
|
||||||
* Пишем банковское событие в лог в БД
|
* Пишем банковское событие в лог в БД
|
||||||
*
|
*
|
||||||
* @param int $receiverId ID получателя.
|
* @param int $receiverId ID получателя.
|
||||||
* @param int $amount сумма.
|
* @param int $amount сумма.
|
||||||
* @param string $operationType тип банковской операции.
|
* @param string $operationType тип банковской операции.
|
||||||
* @param ?int $senderId ID отправителя (ID игрока, если не указано иное).
|
* @param ?int $senderId ID отправителя (ID игрока, если не указано иное).
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
@ -86,7 +86,7 @@ class Bank
|
|||||||
* Перевод денег между банковскими счетами игроков с банковской комиссией.
|
* Перевод денег между банковскими счетами игроков с банковской комиссией.
|
||||||
*
|
*
|
||||||
* @param mixed $receiver ID получателя.
|
* @param mixed $receiver ID получателя.
|
||||||
* @param mixed $amount Cумма.
|
* @param mixed $amount Cумма.
|
||||||
*/
|
*/
|
||||||
public function sendMoney($receiver, $amount)
|
public function sendMoney($receiver, $amount)
|
||||||
{
|
{
|
||||||
@ -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
|
||||||
|
@ -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']);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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);
|
private static function getLogByType(int $type): array
|
||||||
} elseif ($userId && !$type) {
|
{
|
||||||
$query = "SELECT * FROM users_logs WHERE user_id = ?";
|
$result = [];
|
||||||
$row = $db->prepare($query);
|
$logs = Db::getInstance()->fetchAll('select json_data from logs where type = ?', $type);
|
||||||
$row->bindValue(1, $userId, SQLITE3_INTEGER);
|
foreach ($logs as $log) {
|
||||||
} elseif (!$userId && $type) {
|
$result[] = json_decode($log, true);
|
||||||
$query = "SELECT * FROM users_logs WHERE type= ?";
|
}
|
||||||
$row = $db->prepare($query);
|
return $result;
|
||||||
$row->bindValue(1, $type, SQLITE3_TEXT);
|
}
|
||||||
} elseif (!$userId && !$type) {
|
|
||||||
$query = "SELECT * FROM users_logs";
|
public static function getUserLogs(?int $userId): array
|
||||||
$row = $db->prepare($query);
|
{
|
||||||
|
$logs = self::getLogByType(self::USER_ACTIONS);
|
||||||
|
if (is_null($userId)) {
|
||||||
|
return $logs;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $row->execute();
|
$result = [];
|
||||||
|
foreach ($logs as $log) {
|
||||||
|
if ($userId !== $log['userId']) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$result[] = $log;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function addBattleLog(int $battle_id, string $text)
|
public static function addBattleLog(int $battleId, string $text)
|
||||||
{
|
{
|
||||||
$db = new SQLite3(__DIR__ . '../../Database/battle.logs.getInstance');
|
self::addLog(
|
||||||
$row = $db->prepare('insert into newbattles (battle_id, text) values (?,?)');
|
json_encode([
|
||||||
$row->bindParam(1, $battle_id, SQLITE3_INTEGER);
|
'battleId' => $battleId,
|
||||||
$row->bindParam(2, $text, SQLITE3_TEXT);
|
'text' => $text,
|
||||||
$row->execute();
|
]),
|
||||||
$row->close();
|
self::BATTLE,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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!";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,130 +6,114 @@ 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,
|
||||||
sum(add_endurance) as item_endurance,
|
sum(add_endurance) as item_endurance,
|
||||||
sum(add_intelligence) as item_intelligence,
|
sum(add_intelligence) as item_intelligence,
|
||||||
sum(add_wisdom) as item_wisdom,
|
sum(add_wisdom) as item_wisdom,
|
||||||
sum(add_accuracy) as item_accuracy,
|
sum(add_accuracy) as item_accuracy,
|
||||||
sum(add_evasion) as item_evasion,
|
sum(add_evasion) as item_evasion,
|
||||||
sum(add_criticals) as item_criticals,
|
sum(add_criticals) as item_criticals,
|
||||||
sum(add_min_physical_damage) as item_min_physical_damage,
|
sum(add_min_physical_damage) as item_min_physical_damage,
|
||||||
sum(add_max_physical_damage) as item_max_physical_damage
|
sum(add_max_physical_damage) as item_max_physical_damage
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,30 +6,31 @@ 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,
|
||||||
sum(mod_endurance) as effect_endurance,
|
sum(mod_endurance) as effect_endurance,
|
||||||
sum(mod_intelligence) as effect_intelligence,
|
sum(mod_intelligence) as effect_intelligence,
|
||||||
sum(mod_wisdom) as effect_wisdom
|
sum(mod_wisdom) as effect_wisdom
|
||||||
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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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)
|
||||||
|
@ -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 => "Центральная площадь",
|
||||||
|
@ -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 => 'Все товары',
|
||||||
];
|
];
|
||||||
|
@ -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,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -16,12 +35,12 @@ class UserInfo extends UserStats
|
|||||||
*
|
*
|
||||||
* @param int $isBattle установить 1, если куклу нужно отобразить в поединке (показывает параметры при наведении
|
* @param int $isBattle установить 1, если куклу нужно отобразить в поединке (показывает параметры при наведении
|
||||||
* на образ).
|
* на образ).
|
||||||
* @param int $isMain установить 1, если куклу надо показать на странице игрока (по клику на предмет снимает
|
* @param int $isMain установить 1, если куклу надо показать на странице игрока (по клику на предмет снимает
|
||||||
* его).
|
* его).
|
||||||
*
|
*
|
||||||
* @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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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())),
|
||||||
|
@ -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 .= 'Неверный пароль!';
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
]);
|
]);
|
||||||
|
@ -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
|
||||||
|
{}
|
||||||
|
@ -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);
|
||||||
|
@ -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']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user