Compare commits
No commits in common. "master" and "6b878f4ef9563759b2eafc0f476a689a1ac25723" have entirely different histories.
master
...
6b878f4ef9
@ -1,156 +1,143 @@
|
|||||||
<?php
|
<?php
|
||||||
# Date: 31.01.2021 (20:21)
|
# Date: 31.01.2021 (20:21)
|
||||||
require_once '../config.php';
|
|
||||||
|
|
||||||
use Battles\Admin\Item;
|
|
||||||
|
|
||||||
if (isset($_POST)) {
|
|
||||||
Item::add($_POST);
|
|
||||||
}
|
|
||||||
?>
|
?>
|
||||||
<form method=post>
|
<form method=post>
|
||||||
<div>
|
<div>
|
||||||
<table>
|
<table>
|
||||||
<caption>Добавление вещей в игру</caption>
|
<caption>Добавление вещей в магазин</caption>
|
||||||
<tr>
|
<tr>
|
||||||
<th id="main">Основное
|
<th id="main">Основное
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name="name" placeholder="Название">
|
||||||
<input name="name" placeholder="Название">
|
<tr>
|
||||||
</label>
|
<td><input name="image" placeholder="Картинка">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><select name="shop">
|
||||||
<input name="image" placeholder="Картинка">
|
<option value="0" selected disabled>Тип магазина</option>
|
||||||
</label>
|
<option value="1">Обычный</option>
|
||||||
<tr>
|
<option value="2">Цветной</option>
|
||||||
<td><label>
|
</select>
|
||||||
<select name="shop">
|
<tr>
|
||||||
<option value="0" selected disabled>Тип магазина</option>
|
<td><input name=count placeholder="Количество (шт.)">
|
||||||
<option value="1">Обычный</option>
|
<tr>
|
||||||
<option value="2">Цветной</option>
|
<td><select name="item_type">
|
||||||
</select>
|
<option value="0" selected disabled>Тип предмета</option>
|
||||||
</label>
|
<option value="1">Шлем</option>
|
||||||
<tr>
|
<option value="2">Броня</option>
|
||||||
<td><label>
|
<option value="3">Поножи</option>
|
||||||
<input name=count placeholder="Количество (шт.)" disabled>
|
<option value="4">Сапоги</option>
|
||||||
</label>
|
<option value="5">Перчатки</option>
|
||||||
<tr>
|
<option value="6">Оружие</option>
|
||||||
<td><label>
|
<option value="7">Щит</option>
|
||||||
<select name="item_type">
|
<option value="8">Пояс</option>
|
||||||
<option value="0" selected disabled>Тип предмета</option>
|
<option value="9">Кольцо</option>
|
||||||
<option value="1">Шлем</option>
|
<option value="10">Амулет</option>
|
||||||
<option value="2">Броня</option>
|
<option value="20">Расходник</option>
|
||||||
<option value="3">Поножи</option>
|
<option value="50">Всё остальное</option>
|
||||||
<option value="4">Сапоги</option>
|
<option value="100">Хлам</option>
|
||||||
<option value="5">Перчатки</option>
|
</select>
|
||||||
<option value="6">Оружие</option>
|
<tr>
|
||||||
<option value="7">Щит</option>
|
<td><input name=weight placeholder="Масса">
|
||||||
<option value="8">Пояс</option>
|
<tr>
|
||||||
<option value="9">Кольцо</option>
|
<td><input name=durability placeholder="Макс. износ">
|
||||||
<option value="10">Амулет</option>
|
<tr>
|
||||||
<option value="20">Расходник</option>
|
<td><input name=price placeholder="Цена (кр.)">
|
||||||
<option value="50">Всё остальное</option>
|
<tr>
|
||||||
<option value="100">Хлам</option>
|
<th id="needs">Требования
|
||||||
</select>
|
<tr>
|
||||||
</label>
|
<td><input name=need_level placeholder="Уровень">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=need_strength placeholder="Сила">
|
||||||
<input name=weight placeholder="Масса">
|
<tr>
|
||||||
</label>
|
<td><input name=need_dexterity placeholder="Ловкость">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=need_intuition placeholder="Интуиция">
|
||||||
<input name=durability placeholder="Макс. износ">
|
<tr>
|
||||||
</label>
|
<td><input name=need_endurance placeholder="Выносливость">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=need_intelligence placeholder="Интеллект">
|
||||||
<input name=price placeholder="Цена (кр.)" disabled>
|
<tr>
|
||||||
</label>
|
<td><input name=need_wisdom placeholder="Мудрость">
|
||||||
<tr>
|
<tr>
|
||||||
<th id="needs">Требования
|
<th id="adds">Характеристики
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=minu placeholder="Мин.урон">
|
||||||
<input name=need_level placeholder="Уровень">
|
<tr>
|
||||||
</label>
|
<td><input name=maxu placeholder="Макс.урон">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=gsila placeholder="Сила">
|
||||||
<input name=need_strength placeholder="Сила">
|
<tr>
|
||||||
</label>
|
<td><input name=glovk placeholder="Ловкость">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=ginta placeholder="Интуиция">
|
||||||
<input name=need_dexterity placeholder="Ловкость">
|
<tr>
|
||||||
</label>
|
<td><input name=gintel placeholder="Интеллект">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=ghp placeholder="НР">
|
||||||
<input name=need_intuition placeholder="Интуиция">
|
<tr>
|
||||||
</label>
|
<td><input name=mfkrit placeholder="Мф.крит">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=mfakrit placeholder="Мф.антикрит">
|
||||||
<input name=need_endurance placeholder="Выносливость">
|
<tr>
|
||||||
</label>
|
<td><input name=mfuvorot placeholder="Мф.уворот">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=mfauvorot placeholder="Мф.антиуворот">
|
||||||
<input name=need_intelligence placeholder="Интеллект">
|
<tr>
|
||||||
</label>
|
<td><input name=gnoj placeholder="Ум.ножи">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=gtopor placeholder="Ум.топоры">
|
||||||
<input name=need_wisdom placeholder="Мудрость">
|
<tr>
|
||||||
</label>
|
<td><input name=gdubina placeholder="Ум.дубины">
|
||||||
<tr>
|
<tr>
|
||||||
<th id="adds">Характеристики
|
<td><input name=gmech placeholder="Ум.мечи">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=bron1 placeholder="Броня головы">
|
||||||
<input name=minu placeholder="Мин.урон">
|
<tr>
|
||||||
</label>
|
<td><input name=bron2 placeholder="Броня корпуса">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=bron3 placeholder="Броня пояса">
|
||||||
<input name=maxu placeholder="Макс.урон">
|
<tr>
|
||||||
</label>
|
<td><input name=bron4 placeholder="Броня ног">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=gfire placeholder="Мастерство огня">
|
||||||
<input name=add_strength placeholder="Сила">
|
<tr>
|
||||||
</label>
|
<td><input name=gwater placeholder="Мастерство воды">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=gair placeholder="Мастерство воздуха">
|
||||||
<input name=add_dexterity placeholder="Ловкость">
|
<tr>
|
||||||
</label>
|
<td><input name=gearth placeholder="Мастерство земли">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=glight placeholder="Светлая магия">
|
||||||
<input name=add_intuition placeholder="Интуиция">
|
<tr>
|
||||||
</label>
|
<td><input name=ggray placeholder="Серая магия">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=gdark placeholder="Темная магия">
|
||||||
<input name=add_endurance placeholder="Выносливость">
|
<tr>
|
||||||
</label>
|
<td><input name=encicl placeholder="В энциклопедию">
|
||||||
<tr>
|
<tr>
|
||||||
<td><label>
|
<td><input name=magic placeholder="Наложенно заклятие">
|
||||||
<input name=add_intelligence placeholder="Интеллект">
|
</table>
|
||||||
</label>
|
<INPUT TYPE="submit" value="Добавить">
|
||||||
<tr>
|
</div>
|
||||||
<td><label>
|
</form>
|
||||||
<input name=add_wisdom placeholder="Мудрость">
|
|
||||||
</label>
|
|
||||||
<tr>
|
|
||||||
<td><label>
|
|
||||||
<input name=add_accuracy placeholder="Точность">
|
|
||||||
</label>
|
|
||||||
<tr>
|
|
||||||
<td><label>
|
|
||||||
<input name=add_evasion placeholder="Уворот">
|
|
||||||
</label>
|
|
||||||
<tr>
|
|
||||||
<td><label>
|
|
||||||
<input name=add_criticals placeholder="Крит">
|
|
||||||
</label>
|
|
||||||
<tr>
|
|
||||||
<td><label>
|
|
||||||
<input name=add_min_physical_damage placeholder="Мин.удар">
|
|
||||||
</label>
|
|
||||||
<tr>
|
|
||||||
<td><label>
|
|
||||||
<input name=add_min_physical_damage placeholder="Макс.удар">
|
|
||||||
</label>
|
|
||||||
|
|
||||||
</table>
|
<?php
|
||||||
<INPUT TYPE="submit" value="Добавить">
|
if (isset($_POST)) {
|
||||||
</div>
|
echo "Ждём лучших времён!";
|
||||||
</form>
|
//if($_POST['razdel'] !=7) $goden_tmp=0; else */
|
||||||
|
// $goden_tmp = $_POST['goden'];
|
||||||
|
//
|
||||||
|
// if ($_POST['shop'] == 1) if (mysql_query("INSERT INTO shop(name,duration,maxdur,cost,ecost,nlevel,nsila,nlovk,ninta,nvinos,nintel,nmudra,nnoj,ntopor,ndubina,nmech,nalign,minu,maxu,goden,gsila,glovk,ginta,gintel,ghp,mfkrit,mfakrit,mfuvorot,mfauvorot,gnoj,gtopor,gdubina,gmech,img,count,bron1,bron2,bron3,bron4,magic,type,massa,needident,nfire,nwater,nair,nearth,nlight,ngray,ndark,gfire,gwater,gair,gearth,glight,ggray,gdark,encicl,artefact,letter,isrep,razdel) VALUES ('" . $_POST['name'] . "','" . $_POST['duration'] . "','" . $_POST['maxdur'] . "','" . $_POST['cost'] . "','" . $_POST['ecost'] . "','" . $_POST['nlevel'] . "','" . $_POST['nsila'] . "','" . $_POST['nlovk'] . "','" . $_POST['ninta'] . "','" . $_POST['nvinos'] . "','" . $_POST['nintel'] . "','" . $_POST['nmudra'] . "','" . $_POST['nnoj'] . "','" . $_POST['ntopor'] . "','" . $_POST['ndubina'] . "','" . $_POST['nmech'] . "','" . $_POST['nalign'] . "','" . $_POST['minu'] . "','" . $_POST['maxu'] . "','" . $goden_tmp . "','" . $_POST['gsila'] . "','" . $_POST['glovk'] . "','" . $_POST['ginta'] . "','" . $_POST['gintel'] . "','" . $_POST['ghp'] . "','" . $_POST['mfkrit'] . "','" . $_POST['mfakrit'] . "','" . $_POST['mfuvorot'] . "','" . $_POST['mfauvorot'] . "','" . $_POST['gnoj'] . "','" . $_POST['gtopor'] . "','" . $_POST['gdubina'] . "','" . $_POST['gmech'] . "','" . $_POST['img'] . "','" . $_POST['count'] . "','" . $_POST['bron1'] . "','" . $_POST['bron2'] . "','" . $_POST['bron3'] . "','" . $_POST['bron4'] . "','" . $_POST['magic'] . "','" . $_POST['type'] . "','" . $_POST['massa'] . "','" . $_POST['needident'] . "','" . $_POST['nfire'] . "','" . $_POST['nwater'] . "','" . $_POST['nair'] . "','" . $_POST['nearth'] . "','" . $_POST['nlight'] . "','" . $_POST['ngray'] . "','" . $_POST['ndark'] . "','" . $_POST['gfire'] . "','" . $_POST['gwater'] . "','" . $_POST['gair'] . "','" . $_POST['gearth'] . "','" . $_POST['glight'] . "','" . $_POST['ggray'] . "','" . $_POST['gdark'] . "','" . $_POST['encicl'] . "','0','" . $_POST['letter'] . "','" . $_POST['isrep'] . "','" . $_POST['razdel'] . "');")) {
|
||||||
|
// echo "Предмет успешно добавлен";
|
||||||
|
// } else {
|
||||||
|
// echo "Предмет не был добавлен!-1";
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// if ($_POST['shop'] == 2) if (mysql_query("INSERT INTO fshop(name,duration,maxdur,cost,ecost,nlevel,nsila,nlovk,ninta,nvinos,nintel,nmudra,nnoj,ntopor,ndubina,nmech,nalign,minu,maxu,goden,gsila,glovk,ginta,gintel,ghp,mfkrit,mfakrit,mfuvorot,mfauvorot,gnoj,gtopor,gdubina,gmech,img,count,bron1,bron2,bron3,bron4,magic,type,massa,needident,nfire,nwater,nair,nearth,nlight,ngray,ndark,gfire,gwater,gair,gearth,glight,ggray,gdark,letter,isrep,razdel) VALUES ('" . $_POST['name'] . "','" . $_POST['duration'] . "','" . $_POST['maxdur'] . "','" . $_POST['cost'] . "','" . $_POST['ecost'] . "','" . $_POST['nlevel'] . "','" . $_POST['nsila'] . "','" . $_POST['nlovk'] . "','" . $_POST['ninta'] . "','" . $_POST['nvinos'] . "','" . $_POST['nintel'] . "','" . $_POST['nmudra'] . "','" . $_POST['nnoj'] . "','" . $_POST['ntopor'] . "','" . $_POST['ndubina'] . "','" . $_POST['nmech'] . "','" . $_POST['nalign'] . "','" . $_POST['minu'] . "','" . $_POST['maxu'] . "','" . $goden_tmp . "','" . $_POST['gsila'] . "','" . $_POST['glovk'] . "','" . $_POST['ginta'] . "','" . $_POST['gintel'] . "','" . $_POST['ghp'] . "','" . $_POST['mfkrit'] . "','" . $_POST['mfakrit'] . "','" . $_POST['mfuvorot'] . "','" . $_POST['mfauvorot'] . "','" . $_POST['gnoj'] . "','" . $_POST['gtopor'] . "','" . $_POST['gdubina'] . "','" . $_POST['gmech'] . "','" . $_POST['img'] . "','" . $_POST['count'] . "','" . $_POST['bron1'] . "','" . $_POST['bron2'] . "','" . $_POST['bron3'] . "','" . $_POST['bron4'] . "','" . $_POST['magic'] . "','" . $_POST['type'] . "','" . $_POST['massa'] . "','" . $_POST['needident'] . "','" . $_POST['nfire'] . "','" . $_POST['nwater'] . "','" . $_POST['nair'] . "','" . $_POST['nearth'] . "','" . $_POST['nlight'] . "','" . $_POST['ngray'] . "','" . $_POST['ndark'] . "','" . $_POST['gfire'] . "','" . $_POST['gwater'] . "','" . $_POST['gair'] . "','" . $_POST['gearth'] . "','" . $_POST['glight'] . "','" . $_POST['ggray'] . "','" . $_POST['gdark'] . "','" . $_POST['letter'] . "','" . $_POST['isrep'] . "','" . $_POST['razdel'] . "');")) {
|
||||||
|
// echo "Предмет успешно добавлен";
|
||||||
|
// } else {
|
||||||
|
// echo "Предмет не был добавлен!" . mysql_error();
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
}
|
||||||
|
//End item adder
|
||||||
|
120
admin/admin.php
120
admin/admin.php
@ -4,25 +4,28 @@
|
|||||||
* Author: Igor Barkov <lopar.4ever@gmail.com>
|
* Author: Igor Barkov <lopar.4ever@gmail.com>
|
||||||
* Project name: Battles-Game
|
* Project name: Battles-Game
|
||||||
*/
|
*/
|
||||||
require_once '../config.php';
|
require_once '../functions.php';
|
||||||
|
|
||||||
use Battles\Admin\Clan;
|
use Battles\Bank;
|
||||||
use Battles\Admin\User as AUser;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Chat;
|
use Battles\GameConfigs;
|
||||||
use Battles\Moderation;
|
use Battles\Moderation;
|
||||||
|
use Battles\Nick;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
|
|
||||||
if (!User::getInstance()->getAdmin()) {
|
if (!User::$current->getAdmin()) {
|
||||||
header("HTTP/1.0 404 Not Found");
|
header("HTTP/1.0 404 Not Found");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
if (isset($_GET['sleep'])) {
|
if (isset($_GET['sleep'])) {
|
||||||
Moderation::muteChat(User::getInstance()->getId(), strtotime('15min'));
|
Moderation::muteChat(User::$current->getId(), strtotime('15min'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['ldnick']) && isset($_POST['ldtext'])) {
|
if (isset($_POST['ldnick']) && isset($_POST['ldtext'])) {
|
||||||
Moderation::addToUserLog(User::getInstance($_POST['ldnick'])->getId(), $_POST['ldtext'], User::getInstance()->getId());
|
$u = new User($_POST['ldnick']);
|
||||||
|
Moderation::addToUserLog($u->getId(), $_POST['ldtext'], User::$current->getId());
|
||||||
|
unset($u);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['syschatmsg'])) {
|
if (isset($_POST['syschatmsg'])) {
|
||||||
@ -30,24 +33,72 @@ if (isset($_POST['syschatmsg'])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//clans to reg
|
//clans to reg
|
||||||
Clan::getUnapprovedList();
|
$unregisteredClans = new class {
|
||||||
|
|
||||||
|
public function getList()
|
||||||
|
{
|
||||||
|
$row = DBPDO::$db->ofetchAll('SELECT * FROM clans WHERE status = 0');
|
||||||
|
$i = 0;
|
||||||
|
while ($i < count($row)) {
|
||||||
|
$id = $row[$i]->owner_id;
|
||||||
|
$login = Nick::id($row[$i]->owner_id)->short(1);
|
||||||
|
$fullName = $row[$i]->full_name;
|
||||||
|
$shortName = $row[$i]->short_name;
|
||||||
|
$info = nl2br($row[$i]->info);
|
||||||
|
$i++;
|
||||||
|
echo <<<UNREGCLANLIST
|
||||||
|
<div>
|
||||||
|
<fieldset style="display: inline;">
|
||||||
|
<legend>$fullName [$shortName]</legend>
|
||||||
|
Глава клана: <span class="abils">$login</span><br>
|
||||||
|
Описание:<div class="abils">$info</div>
|
||||||
|
<BR>
|
||||||
|
<button onclick="location.href='?regclan=$id'">Зарегистрировать</button>
|
||||||
|
<button onclick="location.href='?remclan=$id'">Отказать</button>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
UNREGCLANLIST;
|
||||||
|
}
|
||||||
|
unset($i);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function allowRegister($id)
|
||||||
|
{
|
||||||
|
DBPDO::$db->execute('UPDATE clans SET status = 1 WHERE status = 0 AND owner_id = ?', $id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function disallowRegister($id)
|
||||||
|
{
|
||||||
|
$bank = new Bank($id);
|
||||||
|
DBPDO::$db->execute('DELETE FROM clans WHERE status = 0 AND owner_id = ?', $id);
|
||||||
|
$bank::setBankMoney($bank->getMoney() + GameConfigs::CLAN['clan_register_cost'], $id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$unregisteredClans->getList();
|
||||||
|
|
||||||
if (isset($_GET['regclan'])) {
|
if (isset($_GET['regclan'])) {
|
||||||
Clan::allowRegister($_GET['regclan']);
|
$unregisteredClans->allowRegister($_GET['regclan']);
|
||||||
header('Location:/admin/admin.php');
|
header('Location:/admin/admin.php');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
if (isset($_GET['remclan'])) {
|
if (isset($_GET['remclan'])) {
|
||||||
Clan::disallowRegister($_GET['remclan']);
|
$unregisteredClans->disallowRegister($_GET['remclan']);
|
||||||
header('Location:/admin/admin.php');
|
header('Location:/admin/admin.php');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Телеграф.
|
# Телеграф.
|
||||||
if (!empty($_POST['receiver']) && !empty($_POST['tgmsg'])) {
|
if (!empty($_POST['receiver']) && !empty($_POST['tgmsg'])) {
|
||||||
Chat::sendTelegraf($_POST['tgmsg'], User::getInstance($_POST['receiver'])->getId());
|
$receiver = DBPDO::$db->ofetch('SELECT id FROM users WHERE login= ?', $_POST['receiver']);
|
||||||
|
telegraph($receiver->id, $_POST['tgmsg']);
|
||||||
echo "Успешно.";
|
echo "Успешно.";
|
||||||
}
|
}
|
||||||
|
# Показывает невидимок.
|
||||||
|
$row = DBPDO::$db->ofetchAll('SELECT id,login FROM users LEFT JOIN users_effects ue on users.id = ue.owner_id WHERE type = 1022 ORDER BY `id` DESC');
|
||||||
|
foreach ($row as $r) {
|
||||||
|
$invisList .= '<b>[id] = ' .$r->id. ', ' .$r->login. '</b><br>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Template::header('ᐰdminка');
|
Template::header('ᐰdminка');
|
||||||
?>
|
?>
|
||||||
@ -77,50 +128,27 @@ Template::header('ᐰdminка');
|
|||||||
<button disabled><img src="../i/magic/check.gif" alt="check"> Проверка</button>
|
<button disabled><img src="../i/magic/check.gif" alt="check"> Проверка</button>
|
||||||
|
|
||||||
<form method='post'>
|
<form method='post'>
|
||||||
<fieldset>
|
<legend>Добавить в «дело» игрока заметку о нарушении правил, прокрутке и пр.</legend>
|
||||||
<legend>Добавить в «дело» игрока заметку о нарушении правил, прокрутке и пр.</legend>
|
<input name='ldnick' placeholder='Логин'> <input name='ldtext' size='50' placeholder='Сообщение'>
|
||||||
<label>
|
<input type='submit' value='Добавить'><br>
|
||||||
<input name='ldnick' placeholder='Логин'>
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<input name='ldtext' size='50' placeholder='Сообщение'>
|
|
||||||
</label>
|
|
||||||
<input type='submit' value='Добавить'><br>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
</form>
|
||||||
<form method='post'>
|
<form method='post'>
|
||||||
<fieldset>
|
|
||||||
<legend>Отправить системное сообщение в чат</legend>
|
<legend>Отправить системное сообщение в чат</legend>
|
||||||
<label>
|
<input name='syschatmsg' size='74' placeholder='Введите сообщение'>
|
||||||
<input name='syschatmsg' size='74' placeholder='Введите сообщение'>
|
<input type='submit' value='Отправить'>
|
||||||
</label>
|
|
||||||
<input type='submit' value='Отправить'>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
</form>
|
||||||
<form method='post'>
|
<form method='post'>
|
||||||
<fieldset>
|
|
||||||
<legend>Телеграф</legend>
|
<legend>Телеграф</legend>
|
||||||
<label>
|
<input name='receiver' placeholder='Логин'>
|
||||||
<input name='receiver' placeholder='Логин'>
|
<input name='tgmsg' size='50' placeholder='Сообщение'>
|
||||||
</label>
|
<input type='submit' value='Отправить'>
|
||||||
<label>
|
|
||||||
<input name='tgmsg' size='50' placeholder='Сообщение'>
|
|
||||||
</label>
|
|
||||||
<input type='submit' value='Отправить'>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
</form>
|
||||||
<form method='post'>
|
<form method='post'>
|
||||||
<fieldset>
|
|
||||||
<legend>Поменять статус</legend>
|
<legend>Поменять статус</legend>
|
||||||
<label>
|
<input name='login' placeholder='Логин'>
|
||||||
<input name='login' placeholder='Логин'>
|
<input name='status' placeholder='Статус'>
|
||||||
</label>
|
<input type='submit' value='Изменить статус'>
|
||||||
<label>
|
|
||||||
<input name='status' placeholder='Статус'>
|
|
||||||
</label>
|
|
||||||
<input type='submit' value='Изменить статус'>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<span class="legend">Невидимки</span><br>
|
<span class="legend">Невидимки</span><br>
|
||||||
<div class="abils" style="width: fit-content; font-weight: bold;"><?= AUser::getInvisiblesList() ?></div>
|
<div class="abils" style="width: fit-content;"><?= $invisList ?></div>
|
@ -5,13 +5,12 @@
|
|||||||
* Project name: Battles-Game
|
* Project name: Battles-Game
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\DressedItems;
|
use Battles\DressedItems;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
require_once "../functions.php";
|
require_once "../functions.php";
|
||||||
if (!User::getInstance()->getAdmin()) {
|
if (!$user->getAdmin()) {
|
||||||
header("HTTP/1.0 404 Not Found");
|
header("HTTP/1.0 404 Not Found");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
@ -20,10 +19,9 @@ $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 = DBPDO::$db->ofetch('select id, login from users where id = ? or login = ?', [$player, $player]);
|
||||||
$_SESSION['player_id'] = $row->id;
|
$_SESSION['player_id'] = $row->id;
|
||||||
$_SESSION['player_name'] = $row->login;
|
$_SESSION['player_name'] = $row->login;
|
||||||
unset($row);
|
unset($row);
|
||||||
@ -36,10 +34,10 @@ if ($end) {
|
|||||||
unset($_SESSION['player_name']);
|
unset($_SESSION['player_name']);
|
||||||
}
|
}
|
||||||
if (isset($_SESSION['player_id'])) {
|
if (isset($_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']);
|
$inv = db::c()->query('SELECT item_id, name, image FROM inventory WHERE owner = ?i ORDER BY id DESC', $_SESSION['player_id']);
|
||||||
}
|
}
|
||||||
if ($del) {
|
if ($del) {
|
||||||
$itemdel = Db::getInstance()->fetch('SELECT item_type, dressed_slot FROM inventory WHERE item_id = ?', $del);
|
$itemdel = db::c()->query('SELECT item_type, dressed_slot FROM inventory WHERE id=?i', $del)->fetch_assoc();
|
||||||
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']);
|
||||||
@ -48,36 +46,34 @@ if ($del) {
|
|||||||
$item->undressItem(7);
|
$item->undressItem(7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Db::getInstance()->execute('delete from inventory where item_id = ?', $del);
|
DBPDO::$db->execute('delete from inventory where 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 scope="col">ID</th>
|
<th>ID</th>
|
||||||
<th scope="col">Название</th>
|
<th>Название</th>
|
||||||
<th scope="col">Количество</th>
|
<th>Количество</th>
|
||||||
<th scope="col">Картинка</th>
|
<th>Картинка</th>
|
||||||
<th scope="col"></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
<?php if (empty($_SESSION['player_id'])): ?>
|
<?php if (empty($_SESSION['player_id'])): ?>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col" colspan="5">
|
<th colspan="5">
|
||||||
<form method="post">
|
<form method="post">
|
||||||
<label>
|
<input placeholder="Логин или ID" name="player">
|
||||||
<input placeholder="Логин или ID" name="player">
|
|
||||||
</label>
|
|
||||||
<input type="submit">
|
<input type="submit">
|
||||||
</form>
|
</form>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
<?php else: foreach ($inv as $row): ?>
|
<?php else: while ($row = $inv->fetch_assoc()): ?>
|
||||||
<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'] ?>' alt=""></td>
|
<td><img src='/i/sh/<?= $row['img'] ?>'></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'] ?>'>
|
||||||
@ -85,7 +81,7 @@ Template::header('ᐰdminка инвентаря');
|
|||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php endforeach; ?>
|
<?php endwhile; ?>
|
||||||
<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='Стриптиз'>
|
||||||
@ -95,4 +91,4 @@ Template::header('ᐰdminка инвентаря');
|
|||||||
</form>
|
</form>
|
||||||
</th>
|
</th>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</table>
|
</table>
|
73
admin/test_stats.php
Normal file
73
admin/test_stats.php
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
<?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]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
17
akadem.php
17
akadem.php
@ -1,9 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Battles\Bank;
|
||||||
use Battles\GameLogs;
|
use Battles\GameLogs;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\Travel;
|
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
require_once 'functions.php';
|
require_once 'functions.php';
|
||||||
const SMITH = 'оружейник';
|
const SMITH = 'оружейник';
|
||||||
@ -13,7 +12,7 @@ const MEDIC = 'лекарь';
|
|||||||
$status = 'Внимание! Моментальная оплата без подтверждения!';
|
$status = 'Внимание! Моментальная оплата без подтверждения!';
|
||||||
$get = urldecode(filter_input(INPUT_SERVER, 'QUERY_STRING'));
|
$get = urldecode(filter_input(INPUT_SERVER, 'QUERY_STRING'));
|
||||||
|
|
||||||
function setProfession($name, $type, $needMoney, $needLevel): string
|
function setProfession($name, $type, $needMoney, $needLevel)
|
||||||
{
|
{
|
||||||
global $user;
|
global $user;
|
||||||
$profId = 0;
|
$profId = 0;
|
||||||
@ -43,8 +42,9 @@ function setProfession($name, $type, $needMoney, $needLevel): string
|
|||||||
$profId = 22;
|
$profId = 22;
|
||||||
}
|
}
|
||||||
if (!empty($profId)) {
|
if (!empty($profId)) {
|
||||||
User::getInstance()->money()->spend($needMoney);
|
$user->setMoney($user->getMoney() - $needMoney);
|
||||||
db::c()->query('UPDATE `users` SET ?f = ?i WHERE `id` = ?i', 'prof' . $type, $profId, User::getInstance()->getId());
|
Bank::setWalletMoney($user->getMoney(), $user->getId());
|
||||||
|
db::c()->query('UPDATE `users` SET ?f = ?i WHERE `id` = ?i', 'prof' . $type, $profId, $user->getId());
|
||||||
$deloText = "{$user['login']} купил профессию «{$name}» в академии за {$needMoney} кр.";
|
$deloText = "{$user['login']} купил профессию «{$name}» в академии за {$needMoney} кр.";
|
||||||
GameLogs::addUserLog($_SESSION['uid'], $deloText);
|
GameLogs::addUserLog($_SESSION['uid'], $deloText);
|
||||||
$user['prof' . $type] = true;
|
$user['prof' . $type] = true;
|
||||||
@ -66,7 +66,8 @@ if ($get == 'medic') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($get == 'exit') {
|
if ($get == 'exit') {
|
||||||
Travel::toRoom(2702, User::getInstance()->getRoom());
|
db::c()->query('UPDATE `users`,`online` SET `users`.`room` = 2702, `online`.`room` = 2702 WHERE `users`.`id` = ?i AND `online`.`id` = ?i', $user->getId(), $user->getId());
|
||||||
|
header('Location: city.php');
|
||||||
}
|
}
|
||||||
Template::header('Академия');
|
Template::header('Академия');
|
||||||
?>
|
?>
|
||||||
@ -78,8 +79,8 @@ Template::header('Академия');
|
|||||||
<div><?= $status ?></div>
|
<div><?= $status ?></div>
|
||||||
<div class="appblock appblock-main">
|
<div class="appblock appblock-main">
|
||||||
<span class="legend">Информация</span>
|
<span class="legend">Информация</span>
|
||||||
<span class="wrap">Кредиты<span class="num"><?= User::getInstance()->money()->get() ?></span></span>
|
<span class="wrap">Кредиты<span class="num"><?= $user->getMoney() ?></span></span>
|
||||||
<span class="wrap">Уровень персонажа<span class="num"><?= User::getInstance()->getLevel() ?></span></span>
|
<span class="wrap">Уровень персонажа<span class="num"><?= $user->getLevel() ?></span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="appblock">
|
<div class="appblock">
|
||||||
<span class="legend">Наёмник</span>
|
<span class="legend">Наёмник</span>
|
||||||
|
77
bank.php
77
bank.php
@ -1,23 +1,76 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Bank;
|
use Battles\Bank;
|
||||||
|
use Battles\GameConfigs;
|
||||||
|
use Battles\Rooms;
|
||||||
|
use Battles\Template;
|
||||||
|
use Exceptions\GameException;
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
|
const SUCCESS = "Успешная операция!";
|
||||||
|
|
||||||
$_POST['action'] ??= null;
|
$bank = new Bank($user->getId());
|
||||||
$bank = new Bank();
|
$status = '';
|
||||||
|
|
||||||
|
$toid = $_POST['to_id'] ?? 0;
|
||||||
|
$summa = $_POST['summa'] ?? 0;
|
||||||
|
$submit = $_POST['action'] ?? '';
|
||||||
|
try {
|
||||||
// Зачисление кредитов на счёт.
|
// Зачисление кредитов на счёт.
|
||||||
if ($_POST['action'] === 'depositMoney' && !empty($_POST['summa'])) {
|
if ($submit === 'depositMoney' && $summa) {
|
||||||
$bank->depositMoney($_POST['summa']);
|
$operation = $bank->depositMoney($summa);
|
||||||
}
|
$user->setMoney($operation['walletMoney']);
|
||||||
|
$bank->setMoney($operation['bankMoney']);
|
||||||
|
$status = SUCCESS;
|
||||||
|
}
|
||||||
// Снятие кредитов со счёта.
|
// Снятие кредитов со счёта.
|
||||||
if ($_POST['action'] === 'withdrawMoney' && !empty($_POST['summa'])) {
|
if ($submit === 'withdrawMoney' && $summa) {
|
||||||
$bank->withdrawMoney($_POST['summa']);
|
$operation = $bank->withdrawMoney($summa);
|
||||||
}
|
$user->setMoney($operation['walletMoney']);
|
||||||
|
$bank->setMoney($operation['bankMoney']);
|
||||||
|
$status = SUCCESS;
|
||||||
|
}
|
||||||
// Перевод кредитов на другой счёт.
|
// Перевод кредитов на другой счёт.
|
||||||
if ($_POST['action'] === 'sendMoney' && !empty($_POST['summa']) && !empty($_POST['to-id'])) {
|
if ($submit === 'sendMoney' && $summa && $toid) {
|
||||||
$bank->sendMoney($_POST['to-id'], $_POST['summa']);
|
$user->setMoney($bank->sendMoney($toid, $summa));
|
||||||
|
$status = SUCCESS;
|
||||||
|
}
|
||||||
|
} catch (GameException $e) {
|
||||||
|
echo 'Банковская ошибка!';
|
||||||
|
} finally {
|
||||||
|
unset($submit, $summa, $toid);
|
||||||
}
|
}
|
||||||
|
Template::header('Банк');
|
||||||
require_once 'views/bank.php';
|
?>
|
||||||
|
<link href="css/secondary.css" rel="stylesheet"/>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
|
<?php Template::buildingTop(Rooms::$roomNames[29], 'strah') ?>
|
||||||
|
<div><?= $status ?></div>
|
||||||
|
<div class="appblock appblock-main">
|
||||||
|
<span class="wrap">На счету: <span class="num"><?= $bank->getMoney() ?></span></span>
|
||||||
|
<hr>
|
||||||
|
<span class="wrap">На руках: <span class="num"><?= $user->getMoney() ?></span></span>
|
||||||
|
</div>
|
||||||
|
<div class="appblock">
|
||||||
|
<span class="legend">Работа со счётом</span>
|
||||||
|
<form method="post">
|
||||||
|
<input size="10" name="summa" placeholder="Сумма">
|
||||||
|
<input type="hidden" name="action" value="depositMoney">
|
||||||
|
<input type="submit" value="Положить деньги">
|
||||||
|
</form>
|
||||||
|
<form method="post">
|
||||||
|
<input size="10" name="summa" placeholder="Сумма">
|
||||||
|
<input type="hidden" name="action" value="withdrawMoney">
|
||||||
|
<input type="submit" value="Снять деньги">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="appblock">
|
||||||
|
<span class="legend">Перевод кредитов</span>
|
||||||
|
<form method="post">
|
||||||
|
<input size="10" name="summa" placeholder="Сумма">
|
||||||
|
<input size="10" name="to-id" placeholder="Cчёт"><br>
|
||||||
|
<input type="hidden" name="action" value="sendMoney">
|
||||||
|
<input type="submit" value="Перевести кредиты">
|
||||||
|
</form>
|
||||||
|
<span class="wrap">Комиссия: <?= GameConfigs::BANK_COMISSION * 100 ?>% от переводимой суммы, но не менее 1 кр.</span>
|
||||||
|
</div>
|
||||||
|
15
buy.php
15
buy.php
@ -1,10 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Bank;
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
if (User::getInstance()->getBattle()) {
|
if (User::$current->getBattle()) {
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
const PRICES = [
|
const PRICES = [
|
||||||
@ -25,7 +26,7 @@ const PRICES = [
|
|||||||
'unclone' => 25,
|
'unclone' => 25,
|
||||||
];
|
];
|
||||||
|
|
||||||
$check_bonuses = Db::getInstance()->ofetch('select 1 from users_bonuses where user_id = ?', User::getInstance()->getId());
|
$check_bonuses = DBPDO::$db->ofetch('select 1 from users_bonuses where user_id = ?', User::$current->getId());
|
||||||
|
|
||||||
if (!$check_bonuses) {
|
if (!$check_bonuses) {
|
||||||
exit('Запрещено: Вам нельзя покупать бонусы.');
|
exit('Запрещено: Вам нельзя покупать бонусы.');
|
||||||
@ -33,12 +34,14 @@ if (!$check_bonuses) {
|
|||||||
|
|
||||||
function buy_bonus($name): bool
|
function buy_bonus($name): bool
|
||||||
{
|
{
|
||||||
if (User::getInstance()->money()->getBank() <= PRICES[$name]) {
|
global $prices;
|
||||||
|
$bank = new Bank(User::$current->getId());
|
||||||
|
if ($bank->getMoney() <= PRICES[$name]) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$query = sprintf('update users_bonuses set %s = %s + 1 where user_id = ?', $name, $name);
|
$query = sprintf('update users_bonuses set %s = %s + 1 where user_id = ?', $name, $name);
|
||||||
Db::getInstance()->execute($query, User::getInstance()->getId());
|
DBPDO::$db->execute($query, User::$current->getId());
|
||||||
User::getInstance()->money()->modifyBank(-PRICES[$name]);
|
$bank->setMoney($bank->getMoney() - $prices[$name]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
20
buy_klan.php
20
buy_klan.php
@ -1,10 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Bank;
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
if (!User::getInstance()->getClan() || User::getInstance()->getBattle()) {
|
if (!User::$current->getClan() || User::$current->getBattle()) {
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
const PRICES = [
|
const PRICES = [
|
||||||
@ -25,10 +26,10 @@ const PRICES = [
|
|||||||
'unclone' => 25,
|
'unclone' => 25,
|
||||||
];
|
];
|
||||||
|
|
||||||
$check_owner = Db::getInstance()->execute('select short_name from clans where owner_id = ?', User::getInstance()->getId())->fetchColumn();
|
$check_owner = DBPDO::$db->ofetch('select short_name from clans where owner_id = ?', User::$current->getId());
|
||||||
$check_bonuses = Db::getInstance()->execute('select count(*) from clan_bonuses where short_name = ?', User::getInstance()->getClan())->fetchColumn();
|
$check_bonuses = DBPDO::$db->ofetch('select 1 from clan_bonuses where short_name = ?', User::$current->getClan());
|
||||||
|
|
||||||
if (User::getInstance()->getClan() !== $check_owner) {
|
if (User::$current->getClan() !== $check_owner->short_name) {
|
||||||
exit('Запрещено: Вы не глава клана.');
|
exit('Запрещено: Вы не глава клана.');
|
||||||
}
|
}
|
||||||
if (!$check_bonuses) {
|
if (!$check_bonuses) {
|
||||||
@ -37,13 +38,14 @@ if (!$check_bonuses) {
|
|||||||
|
|
||||||
function buy_bonus($name): bool
|
function buy_bonus($name): bool
|
||||||
{
|
{
|
||||||
if (User::getInstance()->money()->getBank() <= PRICES[$name]) {
|
global $prices;
|
||||||
|
$bank = new Bank(User::$current->getId());
|
||||||
|
if ($bank->getMoney() <= PRICES[$name]) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = sprintf('update clan_bonuses set %s = %s + 1 where short_name = ?', $name, $name);
|
$query = sprintf('update clan_bonuses set %s = %s + 1 where short_name = ?', $name, $name);
|
||||||
Db::getInstance()->execute($query, User::getInstance()->getClan());
|
DBPDO::$db->execute($query, User::$current->getClan());
|
||||||
User::getInstance()->money()->modifyBank(-PRICES[$name]);
|
$bank->setMoney($bank->getMoney() - $prices[$name]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Template, Battles\User;
|
use Battles\Template;
|
||||||
|
|
||||||
require_once('functions.php');
|
require_once('functions.php');
|
||||||
if (User::getInstance()->getRoom() == 51) {
|
if ($user->getRoom() == 51) {
|
||||||
header('location: city.php');
|
header('location: city.php');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
@ -26,8 +26,8 @@ $map_user = loadmap_cell();
|
|||||||
|
|
||||||
if ($_GET['exit_forest'] == 'true') {
|
if ($_GET['exit_forest'] == 'true') {
|
||||||
if ($forest['room']) {
|
if ($forest['room']) {
|
||||||
#getInstance::c()->query('DELETE FROM `forest_bots` WHERE `user` = ?i AND `group` = ?i', $user['id'], $forest['id']);
|
#db::c()->query('DELETE FROM `forest_bots` WHERE `user` = ?i AND `group` = ?i', $user['id'], $forest['id']);
|
||||||
#getInstance::c()->query('DELETE FROM `forest_items` WHERE `user` = ?i AND `group` = ?i', $user['id'], $forest['id']);
|
#db::c()->query('DELETE FROM `forest_items` WHERE `user` = ?i AND `group` = ?i', $user['id'], $forest['id']);
|
||||||
db::c()->query('UPDATE `users`,`online` SET `users`.`room` = 51, `online`.`room` = 51 WHERE `online`.`id` = `users`.`id` AND `online`.`id` = ?i', $user['id']);
|
db::c()->query('UPDATE `users`,`online` SET `users`.`room` = 51, `online`.`room` = 51 WHERE `online`.`id` = `users`.`id` AND `online`.`id` = ?i', $user['id']);
|
||||||
db::c()->query('DELETE FROM `forest` WHERE `user` = ?i', $user['id']);
|
db::c()->query('DELETE FROM `forest` WHERE `user` = ?i', $user['id']);
|
||||||
unset($forest);
|
unset($forest);
|
||||||
|
@ -67,7 +67,7 @@ if ($_POST['pay']) {
|
|||||||
if ($_POST['adm_start_raid'] && $user['id'] == 1256) {
|
if ($_POST['adm_start_raid'] && $user['id'] == 1256) {
|
||||||
mysql_query("DELETE FROM `cit_haos_status`;");
|
mysql_query("DELETE FROM `cit_haos_status`;");
|
||||||
mysql_query("DELETE FROM `cit_haos_var`;");
|
mysql_query("DELETE FROM `cit_haos_var`;");
|
||||||
Chat::sendSys('Начинается прием заявок в рейд на Цитадель Хаоса! Начало рейда через 15 минут.');
|
Chat::addSYSMessage('Начинается прием заявок в рейд на Цитадель Хаоса! Начало рейда через 15 минут.');
|
||||||
$ch_time = time();
|
$ch_time = time();
|
||||||
mysql_query("UPDATE variables SET value='{$ch_time}' where var='cit_haos_time';");
|
mysql_query("UPDATE variables SET value='{$ch_time}' where var='cit_haos_time';");
|
||||||
}
|
}
|
||||||
|
@ -323,7 +323,7 @@ if (!$ch_rooms[$in_haos['room']]) {
|
|||||||
addchp('За убийство босса Цитадели Хаоса вы получили ' . $dress['name'], '{[]}' . Nick::id($all_get[$l_id])->short() . '{[]}');
|
addchp('За убийство босса Цитадели Хаоса вы получили ' . $dress['name'], '{[]}' . Nick::id($all_get[$l_id])->short() . '{[]}');
|
||||||
}
|
}
|
||||||
if ($priz_exp > 0) {
|
if ($priz_exp > 0) {
|
||||||
\Battles\User::getInstance($all_get[$l_id])->addExperience($priz_exp);
|
GiveExp($all_get[$l_id], $priz_exp);
|
||||||
addchp('За убийство босса Цитадели Хаоса вы получили ' . $priz_exp . ' опыта', '{[]}' . Nick::id($all_get[$l_id])->short() . '{[]}');
|
addchp('За убийство босса Цитадели Хаоса вы получили ' . $priz_exp . ' опыта', '{[]}' . Nick::id($all_get[$l_id])->short() . '{[]}');
|
||||||
mysql_query("INSERT INTO `delo` (`id` , `author` ,`pers`, `text`, `type`, `date`)
|
mysql_query("INSERT INTO `delo` (`id` , `author` ,`pers`, `text`, `type`, `date`)
|
||||||
VALUES ('','0','{$cur_user['id']}','\"" . $all_get[$l_id] . "\" получил в ЦХ \"" . $priz_exp . "\" опыта',1,'" . time() . "');");
|
VALUES ('','0','{$cur_user['id']}','\"" . $all_get[$l_id] . "\" получил в ЦХ \"" . $priz_exp . "\" опыта',1,'" . time() . "');");
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Template, Battles\User;
|
use Battles\Template;
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
if (User::getInstance()->getRoom() == 403) {
|
if ($user->getRoom() == 403) {
|
||||||
include "startpodzemel.php";
|
include "startpodzemel.php";
|
||||||
if ($_GET['act'] == "cexit") {
|
if ($_GET['act'] == "cexit") {
|
||||||
$das = mysql_query("select glava,glav_id from `labirint` where user_id='" . $user['id'] . "'");
|
$das = mysql_query("select glava,glav_id from `labirint` where user_id='" . $user['id'] . "'");
|
||||||
@ -38,7 +38,7 @@ if (User::getInstance()->getRoom() == 403) {
|
|||||||
'Ключик №9',
|
'Ключик №9',
|
||||||
'Ключик №10'
|
'Ключик №10'
|
||||||
];
|
];
|
||||||
db::c()->query('DELETE FROM inventory WHERE name IN ("?s") AND owner_id = ?i', implode(",", $items_to_delete), User::getInstance()->getId());
|
db::c()->query('DELETE FROM inventory WHERE name IN ("?s") AND owner_id = ?i', implode(",", $items_to_delete), $user->getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$e = mysql_query("DELETE FROM labirint WHERE user_id='" . $user['id'] . "'");
|
$e = mysql_query("DELETE FROM labirint WHERE user_id='" . $user['id'] . "'");
|
||||||
@ -51,7 +51,7 @@ if (User::getInstance()->getRoom() == 403) {
|
|||||||
{
|
{
|
||||||
$frt = mysql_query("select user_id from `labirint` where glava='" . $glava . "'");
|
$frt = mysql_query("select user_id from `labirint` where glava='" . $glava . "'");
|
||||||
while ($rbb = mysql_fetch_array($frt)) {
|
while ($rbb = mysql_fetch_array($frt)) {
|
||||||
addchp('<b>' . User::getInstance()->getLogin() . '</b> поднял предмет "' . $mis . '". ', '{[]}' . Nick::id($rbb["user_id"])->short() . '{[]}');
|
addchp('<b>' . $user->getLogin() . '</b> поднял предмет "' . $mis . '". ', '{[]}' . Nick::id($rbb["user_id"])->short() . '{[]}');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
if ($user->getRoom() == 403) {
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
if (User::getInstance()->getRoom() == 403) {
|
|
||||||
$s = db::c()->query('SELECT * FROM podzem2 WHERE name= "?s"', $mir['name'])->fetch_assoc();
|
$s = db::c()->query('SELECT * FROM podzem2 WHERE name= "?s"', $mir['name'])->fetch_assoc();
|
||||||
|
|
||||||
$rooms[0] = "";
|
$rooms[0] = "";
|
||||||
|
24
ch.php
24
ch.php
@ -1,15 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
|
|
||||||
require_once 'functions.php';
|
require_once 'functions.php';
|
||||||
Db::getInstance()->execute('update online set real_time = ? where user_id = ?', [time(), User::getInstance()->getId()]);
|
DBPDO::$db->execute('update online set real_time = ? where user_id = ?', [time(), User::$current->getId()]);
|
||||||
|
|
||||||
if (isset($_GET['online']) && $_GET['online'] != null) {
|
if (isset($_GET['online']) && $_GET['online'] != null) {
|
||||||
if ($_GET['room'] && (int)$_GET['room'] < 500) {
|
if ($_GET['room'] && (int)$_GET['room'] < 500) {
|
||||||
User::getInstance()->setRoom($_GET['room']);
|
$user->setRoom($_GET['room']);
|
||||||
}
|
}
|
||||||
if ($u->i()['caveleader'] > 0) {
|
if ($u->i()['caveleader'] > 0) {
|
||||||
$data = db::c()->query('
|
$data = db::c()->query('
|
||||||
@ -35,13 +35,13 @@ if (isset($_GET['online']) && $_GET['online'] != null) {
|
|||||||
ORDER BY
|
ORDER BY
|
||||||
`u`.`login`
|
`u`.`login`
|
||||||
');
|
');
|
||||||
$ttl = "<span style=\"color: #8f0000; font-size: 10pt;\"><b>" . $rooms[User::getInstance()->getRoom()] . " (" . mysql_num_rows($data) . ")</b></span>";
|
$ttl = "<span style=\"color: #8f0000; font-size: 10pt;\"><b>" . $rooms[$user->getRoom()] . " (" . mysql_num_rows($data) . ")</b></span>";
|
||||||
$ch1 = '_active';
|
$ch1 = '_active';
|
||||||
$ch2 = '_passive';
|
$ch2 = '_passive';
|
||||||
$ch3 = '_passive';
|
$ch3 = '_passive';
|
||||||
$ch4 = '_passive';
|
$ch4 = '_passive';
|
||||||
$ch5 = '_passive';
|
$ch5 = '_passive';
|
||||||
} elseif (User::getInstance()->getRoom() == 760) {
|
} elseif ($user->getRoom() == 760) {
|
||||||
$forest = db::c()->query('SELECT `id`, `room`, `time`, `user`, `data` FROM `forest` WHERE `user` = "' . $user['id'] . '" LIMIT 1')->fetch_assoc();
|
$forest = db::c()->query('SELECT `id`, `room`, `time`, `user`, `data` FROM `forest` WHERE `user` = "' . $user['id'] . '" LIMIT 1')->fetch_assoc();
|
||||||
$sp = db::c()->query('SELECT `id`, `room`, `user` FROM `forest` WHERE `room` = "' . $forest['room'] . '"');
|
$sp = db::c()->query('SELECT `id`, `room`, `user` FROM `forest` WHERE `room` = "' . $forest['room'] . '"');
|
||||||
while ($pl = $sp->fetch_assoc()) {
|
while ($pl = $sp->fetch_assoc()) {
|
||||||
@ -100,18 +100,18 @@ if (isset($_GET['online']) && $_GET['online'] != null) {
|
|||||||
WHERE
|
WHERE
|
||||||
`o`.`id` = `u`.`id` AND
|
`o`.`id` = `u`.`id` AND
|
||||||
(`o`.login_time >= ' . (time() - 90) . ' OR `u`.`in_tower` = 1) AND
|
(`o`.login_time >= ' . (time() - 90) . ' OR `u`.`in_tower` = 1) AND
|
||||||
`o`.`room` = "' . User::getInstance()->getRoom() . '"
|
`o`.`room` = "' . $user->getRoom() . '"
|
||||||
ORDER BY
|
ORDER BY
|
||||||
`u`.`login`
|
`u`.`login`
|
||||||
');
|
');
|
||||||
$ttl = "<span style=\"color: #8f0000; font-size: 10pt;\"><b>" . $rooms[User::getInstance()->getRoom()] . " (" . mysql_num_rows($data) . ")</b></span>";
|
$ttl = "<span style=\"color: #8f0000; font-size: 10pt;\"><b>" . $rooms[$user->getRoom()] . " (" . mysql_num_rows($data) . ")</b></span>";
|
||||||
$ch1 = '_active';
|
$ch1 = '_active';
|
||||||
$ch2 = '_passive';
|
$ch2 = '_passive';
|
||||||
$ch3 = '_passive';
|
$ch3 = '_passive';
|
||||||
$ch4 = '_passive';
|
$ch4 = '_passive';
|
||||||
$ch5 = '_passive';
|
$ch5 = '_passive';
|
||||||
}
|
}
|
||||||
Template::header(sprintf('%s (%s)', $rooms[User::getInstance()->getRoom()], mysql_num_rows($data)));
|
Template::header(sprintf('%s (%s)', $rooms[$user->getRoom()], mysql_num_rows($data)));
|
||||||
?>
|
?>
|
||||||
<script>
|
<script>
|
||||||
function fastshow(content) {
|
function fastshow(content) {
|
||||||
@ -366,7 +366,7 @@ if (isset($_GET['online']) && $_GET['online'] != null) {
|
|||||||
$ks++;
|
$ks++;
|
||||||
$lastpost = $math[1];
|
$lastpost = $math[1];
|
||||||
unset($math[3]);
|
unset($math[3]);
|
||||||
} elseif ((strpos($math[3], "private") === FALSE) /*&& (User::getInstance()->getRoom() == $math[4])*/) {
|
} elseif ((strpos($math[3], "private") === FALSE) /*&& ($user->getRoom() == $math[4])*/) {
|
||||||
$times = '';
|
$times = '';
|
||||||
$soundON = '';
|
$soundON = '';
|
||||||
if ((strpos($math[3], "[" . $user['login'] . "]") > 0) || ($math[2] == $user['login'])) {
|
if ((strpos($math[3], "[" . $user['login'] . "]") > 0) || ($math[2] == $user['login'])) {
|
||||||
@ -414,7 +414,7 @@ if (isset($_GET['online']) && $_GET['online'] != null) {
|
|||||||
|
|
||||||
$_GET['text'] = preg_replace('/private \[klan-([a-zA-Z]*)\]/', '', $_GET['text']);
|
$_GET['text'] = preg_replace('/private \[klan-([a-zA-Z]*)\]/', '', $_GET['text']);
|
||||||
|
|
||||||
if (empty(User::getInstance()->getClan())) {
|
if (empty($user->getClan())) {
|
||||||
$_GET['text'] = str_replace('private [klan]', '', $_GET['text']);
|
$_GET['text'] = str_replace('private [klan]', '', $_GET['text']);
|
||||||
$_GET['text'] = str_replace('private [klan]', 'private [klan-' . $user['klan'] . ']', $_GET['text']);
|
$_GET['text'] = str_replace('private [klan]', 'private [klan-' . $user['klan'] . ']', $_GET['text']);
|
||||||
} else {
|
} else {
|
||||||
@ -461,7 +461,7 @@ if (isset($_GET['online']) && $_GET['online'] != null) {
|
|||||||
if ($action != 1) {
|
if ($action != 1) {
|
||||||
$file = 'tmp/chat.txt';
|
$file = 'tmp/chat.txt';
|
||||||
if (filesize("tmp/chat.txt") > 100 * 1024) {
|
if (filesize("tmp/chat.txt") > 100 * 1024) {
|
||||||
$line = "\r\n:[" . time() . "]:[{$user['login']}]:[<font color=\"" . (($user['color']) ? $user['color'] : "#000000") . "\">" . ($_GET['text']) . "</font>]:[" . User::getInstance()->getRoom() . "]\r\n";
|
$line = "\r\n:[" . time() . "]:[{$user['login']}]:[<font color=\"" . (($user['color']) ? $user['color'] : "#000000") . "\">" . ($_GET['text']) . "</font>]:[" . $user->getRoom() . "]\r\n";
|
||||||
// Пишем содержимое в файл,
|
// Пишем содержимое в файл,
|
||||||
// используя флаг FILE_APPEND flag для дописывания содержимого в конец файла
|
// используя флаг FILE_APPEND flag для дописывания содержимого в конец файла
|
||||||
// и флаг LOCK_EX для предотвращения записи данного файла кем-нибудь другим в данное время
|
// и флаг LOCK_EX для предотвращения записи данного файла кем-нибудь другим в данное время
|
||||||
@ -469,7 +469,7 @@ if (isset($_GET['online']) && $_GET['online'] != null) {
|
|||||||
file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
|
file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
|
||||||
echo "1";
|
echo "1";
|
||||||
} else {
|
} else {
|
||||||
$line = ":[" . time() . "]:[{$user['login']}]:[<font color=\"" . (($user['color']) ? $user['color'] : "#000000") . "\">" . ($_GET['text']) . "</font>]:[" . User::getInstance()->getRoom() . "]\r\n";
|
$line = ":[" . time() . "]:[{$user['login']}]:[<font color=\"" . (($user['color']) ? $user['color'] : "#000000") . "\">" . ($_GET['text']) . "</font>]:[" . $user->getRoom() . "]\r\n";
|
||||||
file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
|
file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
|
||||||
echo "2";
|
echo "2";
|
||||||
}
|
}
|
||||||
|
6
chat.php
6
chat.php
@ -6,13 +6,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use Battles\Chat;
|
use Battles\Chat;
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
|
|
||||||
require_once "config.php";
|
require_once "config.php";
|
||||||
$chat = new Chat(Db::getInstance());
|
$chat = new Chat(new DBPDO());
|
||||||
if (!empty($_POST['msg'])) {
|
if (!empty($_POST['msg'])) {
|
||||||
$chat->sendMessage($_POST['msg']);
|
$chat->addMessage($_POST['msg']);
|
||||||
}
|
}
|
||||||
|
|
||||||
Template::header('chat');
|
Template::header('chat');
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
<?
|
<?
|
||||||
|
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
include('config.php');
|
include('config.php');
|
||||||
|
|
||||||
function addch($text, $who, $room) {
|
function addch($text, $who, $room) {
|
||||||
@ -36,12 +33,12 @@ if($_GET['id'] == 1) {
|
|||||||
} elseif($_GET['id'] == 6) {
|
} elseif($_GET['id'] == 6) {
|
||||||
$user = mysql_fetch_array(mysql_query('SELECT `id`, `login`, `room` FROM `users` WHERE `id` = "'.(int)$_GET['user'].'" LIMIT 1'));
|
$user = mysql_fetch_array(mysql_query('SELECT `id`, `login`, `room` FROM `users` WHERE `id` = "'.(int)$_GET['user'].'" LIMIT 1'));
|
||||||
if(isset($user['id'])) {
|
if(isset($user['id'])) {
|
||||||
addch('<font color=red>Внимание!</font> Ваш бой не может начаться по причине <b>Группа не набрана</b>', $user['login'], User::getInstance()->getRoom());
|
addch('<font color=red>Внимание!</font> Ваш бой не может начаться по причине <b>Группа не набрана</b>', $user['login'], $user->getRoom());
|
||||||
}
|
}
|
||||||
} elseif($_GET['id'] == 7) {
|
} elseif($_GET['id'] == 7) {
|
||||||
$user = mysql_fetch_array(mysql_query('SELECT `id`, `login`, `room` FROM `users` WHERE `id` = "'.(int)$_GET['user'].'" LIMIT 1'));
|
$user = mysql_fetch_array(mysql_query('SELECT `id`, `login`, `room` FROM `users` WHERE `id` = "'.(int)$_GET['user'].'" LIMIT 1'));
|
||||||
if(isset($user['id'])) {
|
if(isset($user['id'])) {
|
||||||
addch('<font color=red>Внимание!</font> Ваш бой начался.', $user['login'], User::getInstance()->getRoom());
|
addch('<font color=red>Внимание!</font> Ваш бой начался.', $user['login'], $user->getRoom());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
exit;
|
exit;
|
||||||
|
113
city.php
113
city.php
@ -3,194 +3,193 @@
|
|||||||
* Центральная площадь
|
* Центральная площадь
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
|
|
||||||
if (User::getInstance()->getZayavka()) {
|
if ($user->getZayavka()) {
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$online = Db::getInstance()->fetchColumn('select count(*) from online where real_time >= ?', time()-60);
|
$online = DBPDO::$db->fetchColumn('select count(*) from online where real_time >= ?', time()-60);
|
||||||
$location = explode('/', filter_input(INPUT_SERVER, 'QUERY_STRING'));
|
$location = explode('/', filter_input(INPUT_SERVER, 'QUERY_STRING'));
|
||||||
|
|
||||||
switch ($location[0]) {
|
switch ($location[0]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'cp':
|
case 'cp':
|
||||||
Battles\Travel::toRoom(20,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(20,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'strah':
|
case 'strah':
|
||||||
Battles\Travel::toRoom(21,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(21,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'bps':
|
case 'bps':
|
||||||
Battles\Travel::toRoom(26,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(26,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'ps':
|
case 'ps':
|
||||||
Battles\Travel::toRoom(51,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(51,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'zaliv':
|
case 'zaliv':
|
||||||
Battles\Travel::toRoom(2111,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2111,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'zamk':
|
case 'zamk':
|
||||||
Battles\Travel::toRoom(2601,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2601,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'abog':
|
case 'abog':
|
||||||
Battles\Travel::toRoom(2655,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2655,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'torg':
|
case 'torg':
|
||||||
Battles\Travel::toRoom(2702,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2702,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'got':
|
case 'got':
|
||||||
if (User::getInstance()->getRoom() == 20) {
|
if ($user->getRoom() == 20) {
|
||||||
switch ($location[1]) {
|
switch ($location[1]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'level1':
|
case 'level1':
|
||||||
Battles\Travel::toRoom(1,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(1,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level7':
|
case 'level7':
|
||||||
Battles\Travel::toRoom(21,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(21,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level8':
|
case 'level8':
|
||||||
Battles\Travel::toRoom(26,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(26,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level13':
|
case 'level13':
|
||||||
header('location: quest_room.php');
|
header('location: quest_room.php');
|
||||||
break;
|
break;
|
||||||
case 'level222':
|
case 'level222':
|
||||||
Battles\Travel::toRoom(2702,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2702,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level17':
|
case 'level17':
|
||||||
Battles\Travel::toRoom(50,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(50,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level2':
|
case 'level2':
|
||||||
Battles\Travel::toRoom(22,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(22,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level4':
|
case 'level4':
|
||||||
Battles\Travel::toRoom(23,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(23,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level6':
|
case 'level6':
|
||||||
Battles\Travel::toRoom(27,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(27,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} elseif (User::getInstance()->getRoom() == 21) {
|
} elseif ($user->getRoom() == 21) {
|
||||||
switch ($location[1]) {
|
switch ($location[1]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'level4':
|
case 'level4':
|
||||||
Battles\Travel::toRoom(20,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(20,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level3':
|
case 'level3':
|
||||||
Battles\Travel::toRoom(2111,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2111,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level13':
|
case 'level13':
|
||||||
Battles\Travel::toRoom(34,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(34,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level5':
|
case 'level5':
|
||||||
Battles\Travel::toRoom(29,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(29,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level16':
|
case 'level16':
|
||||||
Battles\Travel::toRoom(31,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(31,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level14':
|
case 'level14':
|
||||||
Battles\Travel::toRoom(30,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(30,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level650':
|
case 'level650':
|
||||||
Battles\Travel::toRoom(650,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(650,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} elseif (User::getInstance()->getRoom() == 2111) {
|
} elseif ($user->getRoom() == 2111) {
|
||||||
switch ($location[1]) {
|
switch ($location[1]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'level1':
|
case 'level1':
|
||||||
Battles\Travel::toRoom(21,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(21,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level203':
|
case 'level203':
|
||||||
Battles\Travel::toRoom(1055,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(1055,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level1000':
|
case 'level1000':
|
||||||
Battles\Travel::toRoom(620,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(620,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'room666':
|
case 'room666':
|
||||||
//Нет на карте
|
//Нет на карте
|
||||||
//Battles\Travel::toRoom(666,User::getInstance()->getRoom());
|
//Battles\Travel::toRoom(666,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} elseif (User::getInstance()->getRoom() == 2601) {
|
} elseif ($user->getRoom() == 2601) {
|
||||||
switch ($location[1]) {
|
switch ($location[1]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'level4':
|
case 'level4':
|
||||||
Battles\Travel::toRoom(26,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(26,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level55':
|
case 'level55':
|
||||||
Battles\Travel::toRoom(2655,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2655,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level1':
|
case 'level1':
|
||||||
Battles\Travel::toRoom(37,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(37,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level1051':
|
case 'level1051':
|
||||||
Battles\Travel::toRoom(1051,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(1051,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level5':
|
case 'level5':
|
||||||
Battles\Travel::toRoom(404,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(404,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} elseif (User::getInstance()->getRoom() == 2701) {
|
} elseif ($user->getRoom() == 2701) {
|
||||||
switch ($location[1]) {
|
switch ($location[1]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'level1':
|
case 'level1':
|
||||||
Battles\Travel::toRoom(2111,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2111,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level2':
|
case 'level2':
|
||||||
Battles\Travel::toRoom(402,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(402,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} elseif (User::getInstance()->getRoom() == 2702) {
|
} elseif ($user->getRoom() == 2702) {
|
||||||
switch ($location[1]) {
|
switch ($location[1]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'level10':
|
case 'level10':
|
||||||
Battles\Travel::toRoom(20,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(20,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level6':
|
case 'level6':
|
||||||
Battles\Travel::toRoom(61,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(61,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} elseif (User::getInstance()->getRoom() == 2655) {
|
} elseif ($user->getRoom() == 2655) {
|
||||||
switch ($location[1]) {
|
switch ($location[1]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'level10':
|
case 'level10':
|
||||||
Battles\Travel::toRoom(2601,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2601,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level2055':
|
case 'level2055':
|
||||||
Battles\Travel::toRoom(603,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(603,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} elseif (User::getInstance()->getRoom() == 26) {
|
} elseif ($user->getRoom() == 26) {
|
||||||
switch ($location[1]) {
|
switch ($location[1]) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 'level4':
|
case 'level4':
|
||||||
Battles\Travel::toRoom(20,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(20,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level3':
|
case 'level3':
|
||||||
Battles\Travel::toRoom(2601,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(2601,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level660':
|
case 'level660':
|
||||||
Battles\Travel::toRoom(660,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(660,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level7':
|
case 'level7':
|
||||||
Battles\Travel::toRoom(777,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(777,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
case 'level56':
|
case 'level56':
|
||||||
Battles\Travel::toRoom(401,User::getInstance()->getRoom());
|
Battles\Travel::toRoom(401,$user->getRoom());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,7 +197,7 @@ switch ($location[0]) {
|
|||||||
|
|
||||||
Template::header('city');
|
Template::header('city');
|
||||||
echo sprintf('<div style="text-align: right;">Сейчас в игре: %s игроков.></div>', $online);
|
echo sprintf('<div style="text-align: right;">Сейчас в игре: %s игроков.></div>', $online);
|
||||||
if (in_array(User::getInstance()->getRoom(), [20, 21, 26, 2601, 2655, 2111, 2701, 2702])) {
|
if (in_array($user->getRoom(), [20, 21, 26, 2601, 2655, 2111, 2701, 2702])) {
|
||||||
/* Улицы:
|
/* Улицы:
|
||||||
* 20 Центральная
|
* 20 Центральная
|
||||||
* 21 Страшилкина
|
* 21 Страшилкина
|
||||||
@ -209,5 +208,5 @@ if (in_array(User::getInstance()->getRoom(), [20, 21, 26, 2601, 2655, 2111, 2701
|
|||||||
* 2701 С ещё одним ристалищем?
|
* 2701 С ещё одним ристалищем?
|
||||||
* 2702 Торговая
|
* 2702 Торговая
|
||||||
*/
|
*/
|
||||||
Battles\City::showStreet(User::getInstance()->getRoom());
|
Battles\City::showStreet($user->getRoom());
|
||||||
}
|
}
|
21
clan.php
21
clan.php
@ -8,12 +8,13 @@ use Battles\Template;
|
|||||||
use Battles\User;
|
use Battles\User;
|
||||||
|
|
||||||
require_once 'functions.php';
|
require_once 'functions.php';
|
||||||
if (!User::getInstance()->getClan()) {
|
if (!User::$current->getClan()) {
|
||||||
exit('Ошибка! Вы не состоите в клане!');
|
exit('Ошибка! Вы не состоите в клане!');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (User::getInstance()->getClan() != Clan::getInstance()->getClanShortName()) {
|
Clan::$current = new Clan();
|
||||||
exit('Ошибка! Клана ' . User::getInstance()->getClan() . ' не существует!');
|
if (User::$current->getClan() != Clan::$current->getClanShortName()) {
|
||||||
|
exit('Ошибка! Клана ' . User::$current->getClan() . ' не существует!');
|
||||||
}
|
}
|
||||||
|
|
||||||
Template::header('clan');
|
Template::header('clan');
|
||||||
@ -47,23 +48,23 @@ Template::header('clan');
|
|||||||
<?php if (!empty($_POST['login']) && !empty($_POST['action'])): ?>
|
<?php if (!empty($_POST['login']) && !empty($_POST['action'])): ?>
|
||||||
<span class="error">
|
<span class="error">
|
||||||
<?php if ($_POST['action'] == 'add_member'): ?>
|
<?php if ($_POST['action'] == 'add_member'): ?>
|
||||||
<?= Clan::getInstance()->addMember($_POST['login']) ?>
|
<?= Clan::$current->addMember($_POST['login']) ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php if ($_POST['action'] == 'remove_member'): ?>
|
<?php if ($_POST['action'] == 'remove_member'): ?>
|
||||||
<?= Clan::getInstance()->removeMember($_POST['login']) ?>
|
<?= Clan::$current->removeMember($_POST['login']) ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php if ($_POST['action'] == 'change_owner'): ?>
|
<?php if ($_POST['action'] == 'change_owner'): ?>
|
||||||
<?= Clan::getInstance()->changeOwner($_POST['login']) ?>
|
<?= Clan::$current->changeOwner($_POST['login']) ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</span>
|
</span>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="column left">
|
<div class="column left">
|
||||||
<h3><img src="./i/clan/<?= Clan::getInstance()->getClanShortName() ?>.png"
|
<h3><img src="./i/clan/<?= Clan::$current->getClanShortName() ?>.png"
|
||||||
alt="<?= Clan::getInstance()->getClanShortName() ?>"><?= Clan::getInstance()->getClanName() ?></h3>
|
alt="<?= Clan::$current->getClanShortName() ?>"><?= Clan::$current->getClanName() ?></h3>
|
||||||
|
|
||||||
<?php if (Clan::getInstance()->getClanOwnerId() === User::getInstance()->getId()): ?>
|
<?php if (Clan::$current->getClanOwnerId() === User::$current->getId()): ?>
|
||||||
<div>
|
<div>
|
||||||
<span id="add_member">
|
<span id="add_member">
|
||||||
<input type="submit" onclick="use('add_member')" value="Принять в клан">
|
<input type="submit" onclick="use('add_member')" value="Принять в клан">
|
||||||
@ -92,7 +93,7 @@ Template::header('clan');
|
|||||||
<th id='c1'>Имя</th>
|
<th id='c1'>Имя</th>
|
||||||
<th id='c2'>Местонахождение</th>
|
<th id='c2'>Местонахождение</th>
|
||||||
</tr>
|
</tr>
|
||||||
<?php foreach (Clan::getInstance()->getMemberlist() as $member): ?>
|
<?php foreach (Clan::$current->getMemberlist() as $member): ?>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<?php if ($member->clan_owner): ?>
|
<?php if ($member->clan_owner): ?>
|
||||||
|
317
clan_castle.php
Normal file
317
clan_castle.php
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Battles\Chat;
|
||||||
|
use Battles\GameLogs;
|
||||||
|
use Battles\Template;
|
||||||
|
|
||||||
|
require_once "functions.php";
|
||||||
|
$owntravma = mysql_fetch_array(mysql_query("SELECT * FROM `effects` WHERE `owner` = " . $user['id'] . " AND (type=13 OR type=12 OR type=14) limit 1;"));
|
||||||
|
$klan = mysql_fetch_array(mysql_query("SELECT * FROM `clans` WHERE `id` = '{$user['klan']}' LIMIT 1;"));
|
||||||
|
$cc_date = mysql_fetch_array(mysql_query("SELECT * FROM `variables` WHERE `var`='cc_time' LIMIT 1;"));
|
||||||
|
$ccd = $cc_date['value'];
|
||||||
|
|
||||||
|
if ($_POST['admin_start']) {
|
||||||
|
$tm = time();
|
||||||
|
mysql_query("UPDATE `variables` SET `value`='{$tm}' WHERE `var`='cc_time';");
|
||||||
|
exit("<script>location.href='clan_castle.php';</script>");
|
||||||
|
}
|
||||||
|
if ($_POST['admin_start1']) {
|
||||||
|
$tm = time() - 900;
|
||||||
|
mysql_query("UPDATE `variables` SET `value`='{$tm}' WHERE `var`='cc_time';");
|
||||||
|
exit("<script>location.href='clan_castle.php';</script>");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_POST['add_zay']) {
|
||||||
|
mysql_query("INSERT INTO `clan_castle` VALUES ('{$user['id']}','{$user['klan']}');");
|
||||||
|
exit("<script>location.href='clan_castle.php';</script>");
|
||||||
|
}
|
||||||
|
Template::header('Замок Мэра');
|
||||||
|
?>
|
||||||
|
<script>
|
||||||
|
function refreshPeriodic() {
|
||||||
|
location.href = 'clan_castle.php';
|
||||||
|
timerID = setTimeout("refreshPeriodic()", 30000);
|
||||||
|
}
|
||||||
|
|
||||||
|
timerID = setTimeout("refreshPeriodic()", 30000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<TABLE border=0 width=600 cellspacing="0" cellpadding="0" align=left>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><h3>Замок Мэра</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<FORM action="city.php" method=GET><INPUT TYPE="submit" value="Вернуться в Город" name="bps"></FORM>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Добро пожаловать в Замок доброго и справедливого Мэра!
|
||||||
|
Если Вы заинтерисованы в обладании правами на Замок, либо считаете что обладаете достаточными способностями
|
||||||
|
для исполнения
|
||||||
|
обязанностей Мэра, приглашаем Вас и Ваших единомышлеников поселиться в Замке! <br/> <br/>
|
||||||
|
Внимание! Администрация не несет ответственности за возможные конфликты на основе спора о правах обладания
|
||||||
|
Замком,
|
||||||
|
целость и сохранность Ваших личных вещей, здоровье и жизни посетителей!<br/>
|
||||||
|
<?php
|
||||||
|
$own = mysql_fetch_array(mysql_query("SELECT `value` FROM `variables` WHERE `var` = 'castle_owner'"));
|
||||||
|
if ($own['value'] > 0) {
|
||||||
|
$tmp_k = mysql_fetch_array(mysql_query("SELECT `name` FROM `clans` WHERE `id` = '{$own['value']}'"));
|
||||||
|
}
|
||||||
|
echo '<br />Над Замком развевается флаг ';
|
||||||
|
if ($tmp_k['name']) {
|
||||||
|
echo '<strong>клана <img title="' . $tmp_k['name'] . '" src="i/clan/' . $tmp_k['name'] . '.png">' . $tmp_k['name'] . '</strong><br />';
|
||||||
|
} else {
|
||||||
|
echo '<strong>сил Хаоса</strong><br />';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($user->getAdmin()) {
|
||||||
|
echo '<FORM action="clan_castle.php" method=POST><INPUT TYPE="submit" value="Админ: запустить" name="admin_start"><br></FORM>';
|
||||||
|
echo '<FORM action="clan_castle.php" method=POST><INPUT TYPE="submit" value="Админ: старт боя" name="admin_start1"><br></FORM>';
|
||||||
|
}
|
||||||
|
if ($ccd >= time()) {
|
||||||
|
echo "Следующая битва: " . (date("j.m", $ccd)) . " в " . (date("H:i", $ccd));
|
||||||
|
} elseif ($ccd < time() && ($ccd + 900) >= time()) {
|
||||||
|
$zays = [];
|
||||||
|
echo "Заявили права на Замок Мэра:";
|
||||||
|
echo '<TABLE border=0 width=100% cellspacing="0" cellpadding="0" align=left>';
|
||||||
|
$all_c = mysql_query("SELECT * FROM `clan_castle`;");
|
||||||
|
while ($a_zay = mysql_fetch_array($all_c)) {
|
||||||
|
$zays[] = $a_zay['clan'];
|
||||||
|
$tmp_k = mysql_fetch_array(mysql_query("SELECT `name` FROM `clans` WHERE `id` = '{$a_zay['clan']}' LIMIT 1;"));
|
||||||
|
echo '<tr><td><strong>Клан <img title="' . $tmp_k['name'] . '" src="i/clan/' . $tmp_k['name'] . '.png">' . $tmp_k['name'] . '</strong></td></tr>';
|
||||||
|
}
|
||||||
|
if (empty($zays)) {
|
||||||
|
echo '<tr><td><strong>Ждем смелых ...</strong></td></tr>';
|
||||||
|
}
|
||||||
|
echo '</TABLE>';
|
||||||
|
echo "<br/>Прием заявок до: <strong>" . (date("H:i", $ccd + 900)) . "</strong>";
|
||||||
|
|
||||||
|
$own = mysql_fetch_array(mysql_query("SELECT `value` FROM `variables` WHERE `var` = 'castle_owner' LIMIT 1;"));
|
||||||
|
|
||||||
|
if ($klan['glava'] == $user['id'] && !in_array($user['klan'], $zays) && $user['klan'] != $own['value']) {
|
||||||
|
echo "<br />Прием заявок от глав кланов:";
|
||||||
|
echo '<tr><td><FORM action="clan_castle.php" method=POST><INPUT TYPE="submit" value="Заявиться" name="add_zay"></FORM></td></tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
} elseif (($ccd + 900) < time() && ($ccd + 90 + 900) >= time()) {
|
||||||
|
$zays = [];
|
||||||
|
$all_zay = mysql_query("SELECT * FROM `clan_castle`;");
|
||||||
|
while ($a_zay = mysql_fetch_array($all_zay)) {
|
||||||
|
$cur_c = mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `klan`='{$a_zay['clan']}' AND `room`='45';"));
|
||||||
|
for ($cc = 0; $cc < $cur_c; $cc++) {
|
||||||
|
$zays[] = $a_zay['clan'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$own = mysql_fetch_array(mysql_query("SELECT `value` FROM `variables` WHERE `var` = 'castle_owner' LIMIT 1;"));
|
||||||
|
shuffle($zays);
|
||||||
|
$lucky = $zays[array_rand($zays)];
|
||||||
|
mysql_query("UPDATE `variables` SET `value`='{$lucky}' WHERE `var`='castle_att';");
|
||||||
|
$tmp_k = mysql_fetch_array(mysql_query("SELECT `name` FROM `clans` WHERE `id` = '{$lucky}' LIMIT 1;"));
|
||||||
|
|
||||||
|
if ($own['value'] > 0) {
|
||||||
|
$tmp_o = mysql_fetch_array(mysql_query("SELECT `name` FROM `clans` WHERE `id` = '{$own['value']}' LIMIT 1;"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($tmp_k) {
|
||||||
|
echo 'Внимание!<img title="' . $tmp_k['name'] . '" src="i/clan/' . $tmp_k['name'] . '.png"><strong>' . $tmp_k['name'] . '</strong> собираются штурмовать замок';
|
||||||
|
}
|
||||||
|
if ($tmp_k && $own['value'] > 0) {
|
||||||
|
echo '<img title="' . $tmp_o['name'] . '" src="i/clan/' . $tmp_o['name'] . '.png"><strong>' . $tmp_o['name'] . '</strong>!';
|
||||||
|
}
|
||||||
|
if ($tmp_k && !$own['value'] > 0) {
|
||||||
|
echo '!';
|
||||||
|
}
|
||||||
|
} elseif (($ccd + 90 + 900) <= time()) {
|
||||||
|
$att = mysql_fetch_array(mysql_query("SELECT `value` FROM `variables` WHERE `var` = 'castle_att' LIMIT 1;"));
|
||||||
|
$own = mysql_fetch_array(mysql_query("SELECT `value` FROM `variables` WHERE `var` = 'castle_owner' LIMIT 1;"));
|
||||||
|
|
||||||
|
$at_t = [];
|
||||||
|
$ow_t = [];
|
||||||
|
|
||||||
|
if ($att['value'] > 0) {
|
||||||
|
$att_r = mysql_query("SELECT `id` FROM `users` WHERE `klan`='{$att['value']}' AND `room`='45';");
|
||||||
|
while ($a = mysql_fetch_array($att_r)) {
|
||||||
|
$at_on = mysql_fetch_array(mysql_query("select `id` from `online` WHERE login_time >= " . (time() - 60) . " AND `id` = '{$a['id']}' LIMIT 1;"));
|
||||||
|
if ($at_on[0]) {
|
||||||
|
$at_t[] = $a['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($own['value'] > 0) {
|
||||||
|
$def_r = mysql_query("SELECT `id` FROM `users` WHERE `klan`='{$own['value']}' AND `room`='45';");
|
||||||
|
while ($o = mysql_fetch_array($def_r)) {
|
||||||
|
$df_on = mysql_fetch_array(mysql_query("select `id` from `online` WHERE login_time >= " . (time() - 60) . " AND `id` = '{$o['id']}' LIMIT 1;"));
|
||||||
|
if ($df_on[0]) {
|
||||||
|
$ow_t[] = $o['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($at_t)) {
|
||||||
|
echo "Смелых так и не нашлось...<br/>";
|
||||||
|
} elseif (empty($ow_t) && ($own['value'] > 0)) {
|
||||||
|
echo "Хозяева слили замок без боя...<br/>";
|
||||||
|
$cc_own = mysql_fetch_array(mysql_query("SELECT `value` FROM variables WHERE var='castle_owner' LIMIT 1;"));
|
||||||
|
$cc_k = mysql_fetch_array(mysql_query("SELECT `name` FROM `clans` WHERE `id` = '{$cc_own['value']}' LIMIT 1;"));
|
||||||
|
$cc_att = mysql_fetch_array(mysql_query("SELECT `value` FROM variables WHERE var='castle_att' LIMIT 1;"));
|
||||||
|
$cc_a = mysql_fetch_array(mysql_query("SELECT `name` FROM `clans` WHERE `id` = '{$cc_att['value']}' LIMIT 1;"));
|
||||||
|
|
||||||
|
Chat::addSYSMessage('Клан <img title="' . $cc_a['name'] . '" src="i/clan/' . $cc_a['name'] . '.png">' . $cc_a['name'] . ' без боя забрал у <strong>клана <img title="' . $cc_k['name'] . '" src="i/clan/' . $cc_k['name'] . '.gif">' . $cc_k['name'] . '</strong> Замок Мэра');
|
||||||
|
|
||||||
|
|
||||||
|
$c_prev = mysql_fetch_array(mysql_query("SELECT `glava`,`align` FROM `clans` WHERE `id`='{$own['value']}' LIMIT 1;"));
|
||||||
|
mysql_query("UPDATE `users` SET `align`='{$c_prev['align']}',`abil`='' WHERE `id`='{$c_prev['glava']}';");
|
||||||
|
|
||||||
|
mysql_query("UPDATE `variables` SET `value`='{$att['value']}' WHERE `var`='castle_owner';");
|
||||||
|
mysql_query("UPDATE `variables` SET `value`='0' WHERE `var`='castle_att';");
|
||||||
|
mysql_query("UPDATE `variables` SET `value`='{$tm}' WHERE `var`='cc_time';");
|
||||||
|
|
||||||
|
$c_lead = mysql_fetch_array(mysql_query("SELECT `glava` FROM `clans` WHERE `id`='{$att['value']}' LIMIT 1;"));
|
||||||
|
$abil = [];
|
||||||
|
for ($i = 0; $i < 10; $i++) {
|
||||||
|
$abil[$i] = 9;
|
||||||
|
}
|
||||||
|
mysql_query("UPDATE `users` SET `align`='7.97',`abil`='" . serialize($abil) . "' WHERE `id`='{$c_lead['glava']}';");
|
||||||
|
mysql_query("DELETE FROM `clan_castle`");
|
||||||
|
} elseif ($own['value'] == 0) {
|
||||||
|
//побоище против ботов
|
||||||
|
//ставим ботов
|
||||||
|
$bots_raw = ["2897", "2897", "2897", "2897", "2897", "2897", "2897", "2897", "2897", "2897", "4150", "4150", "4156", "4156", "4156", "4156",
|
||||||
|
"2895", "2895", "4158", "4158", "4158", "4158", "4158", "2900"];
|
||||||
|
$bots = [];
|
||||||
|
foreach ($bots_raw as $bot_id) {
|
||||||
|
if ($bot_id > 0) {
|
||||||
|
$b_pers = mysql_fetch_array(mysql_query("SELECT `login`,`maxhp` FROM users WHERE id='{$bot_id}' LIMIT 1;"));
|
||||||
|
$bot_hp = $b_pers['maxhp'];
|
||||||
|
$bot_name = $b_pers['login'];
|
||||||
|
$nb = mysql_fetch_array(mysql_query("SELECT count(`id`) FROM `bots` WHERE `name` LIKE '" . $bot_name . "%';"));
|
||||||
|
mysql_query("INSERT INTO `bots` (`name`,`prototype`,`battle`,`hp`) values ('" . $bot_name . " " . ($nb[0] + 1) . "','" . $bot_id . "','','" . $bot_hp . "');");
|
||||||
|
$bots[] = mysql_insert_id();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//отаке!
|
||||||
|
$teams = [];
|
||||||
|
foreach ($at_t as $b) {
|
||||||
|
foreach ($bots as $gf) {
|
||||||
|
$teams[$gf][$b] = [0, 0, time()];
|
||||||
|
$teams[$b][$gf] = [0, 0, time()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mysql_query("INSERT INTO `battle`
|
||||||
|
(
|
||||||
|
`id`,`coment`,`teams`,`timeout`,`type`,`status`,`t1`,`t2`,`to1`,`to2`,`blood`
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
NULL,'','" . serialize($teams) . "','3','1','0','" . implode(";", $at_t) . "','" . implode(";", $bots) . "','" . time() . "','" . time() . "','0'
|
||||||
|
)");
|
||||||
|
|
||||||
|
$id = mysql_insert_id();
|
||||||
|
// создаем лог
|
||||||
|
$rr = "<b>";
|
||||||
|
|
||||||
|
foreach ($at_t as $k => $v) {
|
||||||
|
if ($k != 0) {
|
||||||
|
$rr .= ", ";
|
||||||
|
$rrc .= ", ";
|
||||||
|
}
|
||||||
|
$rr .= Nick::id($v)->full(1);
|
||||||
|
$rrc .= Nick::id($v)->short();
|
||||||
|
addchp('<font color=red>Внимание!</font> Ваш бой начался!<BR>\'; top.frames[\'main\'].location=\'fbattle.php\'; var z = \' ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
||||||
|
}
|
||||||
|
$rr .= "</b> и <b>";
|
||||||
|
$rrc .= "</b> и <b>";
|
||||||
|
foreach ($bots as $k => $v) {
|
||||||
|
if ($k != 0) {
|
||||||
|
$rr .= ", ";
|
||||||
|
$rrc .= ", ";
|
||||||
|
}
|
||||||
|
$rr .= Nick::id($v)->full(1);
|
||||||
|
$rrc .= Nick::id($v)->short();
|
||||||
|
}
|
||||||
|
$rr .= "</b>";
|
||||||
|
addch("<a href=logs.php?log=" . $id . " target=_blank>Поединок</a> между <B>" . $rrc . "</B> начался. ", $user->getRoom());
|
||||||
|
mysql_query("INSERT INTO `logs` (`id`,`log`) VALUES('{$id}','Часы показывали <span class=date>" . date("Y.m.d H.i") . "</span>, когда " . $rr . " бросили вызов друг другу. <BR>');");
|
||||||
|
|
||||||
|
GameLogs::addBattleLog($id, "Часы показывали <span class=date>" . date("Y.m.d H.i") . "</span>, когда " . $rr . " бросили вызов друг другу. <BR>");
|
||||||
|
$add_time = time();
|
||||||
|
// всех в БОЙ!!!
|
||||||
|
foreach ($at_t as $k => $v) {
|
||||||
|
mysql_query("UPDATE users SET `battle` ={$id},`zayavka`=0 WHERE `id`= {$v}");
|
||||||
|
}
|
||||||
|
foreach ($bots as $k => $v) {
|
||||||
|
mysql_query("UPDATE `bots` SET `battle` ={$id} WHERE `id`= {$v}");
|
||||||
|
}
|
||||||
|
mysql_query("DELETE FROM `clan_castle`");
|
||||||
|
} elseif (!empty($at_t) && !empty($ow_t)) {
|
||||||
|
//побоище
|
||||||
|
|
||||||
|
$teams = [];
|
||||||
|
foreach ($at_t as $b) {
|
||||||
|
foreach ($ow_t as $gf) {
|
||||||
|
$teams[$gf][$b] = [0, 0, time()];
|
||||||
|
$teams[$b][$gf] = [0, 0, time()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mysql_query("INSERT INTO `battle`
|
||||||
|
(
|
||||||
|
`id`,`coment`,`teams`,`timeout`,`type`,`status`,`t1`,`t2`,`to1`,`to2`,`blood`
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
NULL,'','" . serialize($teams) . "','3','1','0','" . implode(";", $at_t) . "','" . implode(";", $ow_t) . "','" . time() . "','" . time() . "','0'
|
||||||
|
)");
|
||||||
|
|
||||||
|
$id = mysql_insert_id();
|
||||||
|
// создаем лог
|
||||||
|
$rr = "<b>";
|
||||||
|
|
||||||
|
foreach ($at_t as $k => $v) {
|
||||||
|
if ($k != 0) {
|
||||||
|
$rr .= ", ";
|
||||||
|
$rrc .= ", ";
|
||||||
|
}
|
||||||
|
$rr .= Nick::id($v)->full(1);
|
||||||
|
$rrc .= Nick::id($v)->short();
|
||||||
|
addchp('<font color=red>Внимание!</font> Ваш бой начался!<BR>\'; top.frames[\'main\'].location=\'fbattle.php\'; var z = \' ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
||||||
|
}
|
||||||
|
$rr .= "</b> и <b>";
|
||||||
|
$rrc .= "</b> и <b>";
|
||||||
|
foreach ($ow_t as $k => $v) {
|
||||||
|
if ($k != 0) {
|
||||||
|
$rr .= ", ";
|
||||||
|
$rrc .= ", ";
|
||||||
|
}
|
||||||
|
$rr .= Nick::id($v)->full(1);
|
||||||
|
$rrc .= Nick::id($v)->short();
|
||||||
|
addchp('<font color=red>Внимание!</font> Ваш бой начался!<BR>\'; top.frames[\'main\'].location=\'fbattle.php\'; var z = \' ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
||||||
|
}
|
||||||
|
$rr .= "</b>";
|
||||||
|
addch("<a href=logs.php?log=" . $id . " target=_blank>Поединок</a> между <B>" . $rrc . "</B> начался. ", $user->getRoom());
|
||||||
|
mysql_query("INSERT INTO `logs` (`id`,`log`) VALUES('{$id}','Часы показывали <span class=date>" . date("Y.m.d H.i") . "</span>, когда " . $rr . " бросили вызов друг другу. <BR>');");
|
||||||
|
|
||||||
|
GameLogs::addBattleLog($id, "Часы показывали <span class=date>" . date("Y.m.d H.i") . "</span>, когда " . $rr . " бросили вызов друг другу. <BR>");
|
||||||
|
$add_time = time();
|
||||||
|
// всех в БОЙ!!!
|
||||||
|
foreach ($at_t as $k => $v) {
|
||||||
|
mysql_query("UPDATE users SET `battle` ={$id},`zayavka`=0 WHERE `id`= {$v}");
|
||||||
|
}
|
||||||
|
foreach ($ow_t as $k => $v) {
|
||||||
|
mysql_query("UPDATE users SET `battle` ={$id},`zayavka`=0 WHERE `id`= {$v}");
|
||||||
|
}
|
||||||
|
mysql_query("DELETE FROM `clan_castle`");
|
||||||
|
}
|
||||||
|
$tm = time() + 23 * 60 * 60;
|
||||||
|
mysql_query("UPDATE `variables` SET `value`='0' WHERE `var`='castle_att';");
|
||||||
|
mysql_query("UPDATE `variables` SET `value`='{$tm}' WHERE `var`='cc_time';");
|
||||||
|
mysql_query("DELETE FROM `clan_castle`");
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div align=right><img width="260" src="i/castle.jpg"></div>
|
@ -1,31 +1,31 @@
|
|||||||
<?php
|
<?php
|
||||||
// Здание регистратуры!
|
|
||||||
use Battles\Database\Db;
|
use Battles\Bank;
|
||||||
use Battles\GameConfigs;
|
use Battles\GameConfigs;
|
||||||
use Battles\Rooms;
|
use Battles\Rooms;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
require_once 'functions.php';
|
require_once 'functions.php';
|
||||||
$userClan = Db::getInstance()->ofetch('select * from clans where owner_id = ?', User::getInstance()->getId());
|
$userClan = db::c()->query('SELECT short_name, full_name, info FROM clans where owner_id = ?i', $user->getId())->fetch_object();
|
||||||
$clanFullName = $_POST['clan_full_name'] ?? '';
|
$clanFullName = $_POST['clan_full_name'] ?? '';
|
||||||
$clanShortName = $_POST['clan_short_name'] ?? '';
|
$clanShortName = $_POST['clan_short_name'] ?? '';
|
||||||
$clanInfo = $_POST['clan_info'] ?? '';
|
$clanInfo = $_POST['clan_info'] ?? '';
|
||||||
|
$userBank = new Bank($user->getId());
|
||||||
if ($clanFullName && $clanShortName && $clanInfo && !$userClan) {
|
if ($clanFullName && $clanShortName && $clanInfo && !$userClan) {
|
||||||
|
|
||||||
$eff = Db::getInstance()->execute('select count(*) from users_effects where type = 20 and owner_id = ?', User::getInstance()->getId())->fetchColumn();
|
$eff = db::c()->query('SELECT 1 FROM users_effects WHERE type = 20 AND owner_id = ?i', $user->getId());
|
||||||
$name_check = Db::getInstance()->execute('select count(*) from clans where full_name = ? or short_name = ?', [$clanFullName, $clanShortName])->fetchColumn();
|
$name_check = db::c()->query('SELECT owner_id FROM clans WHERE full_name = "?s" OR short_name = "?s"', $clanFullName, $clanShortName);
|
||||||
$errorMessage = [];
|
$errorMessage = [];
|
||||||
if (GameConfigs::CLAN['clan_register_lock']) {
|
if (GameConfigs::CLAN['clan_register_lock']) {
|
||||||
$errorMessage[10] = 'Регистрация кланов закрыта! <BR>';
|
$errorMessage[10] = 'Регистрация кланов закрыта! <BR>';
|
||||||
}
|
}
|
||||||
if (User::getInstance()->getAlign()) {
|
if ($user->getAlign()) {
|
||||||
$errorMessage[0] = 'Вы уже имеете направленность!. <BR>';
|
$errorMessage[0] = 'Вы уже имеете направленность!. <BR>';
|
||||||
}
|
}
|
||||||
if (User::getInstance()->getClan()) {
|
if ($user->getClan()) {
|
||||||
$errorMessage[1] = 'Вы уже состоите в клане!. <BR>';
|
$errorMessage[1] = 'Вы уже состоите в клане!. <BR>';
|
||||||
}
|
}
|
||||||
if (GameConfigs::CLAN['clan_register_cost'] >= User::getInstance()->money()->getBank()) {
|
if (GameConfigs::CLAN['clan_register_cost'] >= $userBank->getMoney()) {
|
||||||
$errorMessage[2] = 'Не хватает денег на регистрацию клана. <BR>';
|
$errorMessage[2] = 'Не хватает денег на регистрацию клана. <BR>';
|
||||||
}
|
}
|
||||||
if (!$eff) {
|
if (!$eff) {
|
||||||
@ -34,11 +34,11 @@ if ($clanFullName && $clanShortName && $clanInfo && !$userClan) {
|
|||||||
if (!$name_check) {
|
if (!$name_check) {
|
||||||
$errorMessage[4] = 'Клан с такими данными уже существует.<br>';
|
$errorMessage[4] = 'Клан с такими данными уже существует.<br>';
|
||||||
}
|
}
|
||||||
if (!$errorMessage || User::getInstance()->getAdmin()) {
|
if (!$errorMessage || $user->getAdmin()) {
|
||||||
try {
|
try {
|
||||||
Db::getInstance()->execute('insert into clans (owner_id, full_name, short_name, info) values (?,?,?,?)', [User::getInstance()->getId(), $clanFullName, $clanShortName, $clanInfo]);
|
db::c()->query('INSERT INTO clans (owner_id, full_name, short_name, info) VALUES (?i,"?s","?s","?s")', $user->getId(), $clanFullName, $clanShortName, $clanInfo);
|
||||||
|
$userBank->setMoney($userBank->getMoney() - GameConfigs::CLAN['clan_register_cost']);
|
||||||
User::getInstance()->money()->modifyBank(-GameConfigs::CLAN['clan_register_cost'], 'clanRegister');
|
Battles\Bank::setBankMoney($userBank->getMoney(), $user->getId(), 'clanRegister');
|
||||||
// Заглушка для отображения данных по только что зарегистрированному клану, когда запрос в базу в начале файла ещё не проходит.
|
// Заглушка для отображения данных по только что зарегистрированному клану, когда запрос в базу в начале файла ещё не проходит.
|
||||||
$userClan = new stdClass();
|
$userClan = new stdClass();
|
||||||
$userClan->full_name = $clanFullName;
|
$userClan->full_name = $clanFullName;
|
||||||
@ -61,16 +61,10 @@ if ($userClan): ?>
|
|||||||
<div>
|
<div>
|
||||||
<fieldset style="display: inline;">
|
<fieldset style="display: inline;">
|
||||||
<legend>Заявка на регистрацию</legend>
|
<legend>Заявка на регистрацию</legend>
|
||||||
<label>
|
<input size=30 disabled value="<?= $userClan->full_name ?>">
|
||||||
<input size=30 disabled value="<?= $userClan->full_name ?>">
|
<input size=30 disabled value="<?= $userClan->short_name ?>"><BR>
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<input size=30 disabled value="<?= $userClan->short_name ?>">
|
|
||||||
</label><BR>
|
|
||||||
<BR>
|
<BR>
|
||||||
<label>
|
<textarea cols=80 rows=10 disabled><?= nl2br($userClan->info) ?></textarea><BR>
|
||||||
<textarea cols=80 rows=10 disabled><?= nl2br($userClan->info) ?></textarea>
|
|
||||||
</label><BR>
|
|
||||||
<button disabled>Заявка подана и рассматривается</button>
|
<button disabled>Заявка подана и рассматривается</button>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
@ -79,18 +73,12 @@ if ($userClan): ?>
|
|||||||
<form method="post">
|
<form method="post">
|
||||||
<fieldset style="display: inline;">
|
<fieldset style="display: inline;">
|
||||||
<legend>Заявка на регистрацию</legend>
|
<legend>Заявка на регистрацию</legend>
|
||||||
<label>
|
<input size=30 name="clan_full_name" placeholder="Название клана" value="<?= $clanFullName ?>">
|
||||||
<input size=30 name="clan_full_name" placeholder="Название клана" value="<?= $clanFullName ?>">
|
<input size=30 name="clan_short_name" maxlength="5" placeholder="Английская аббревиатура"
|
||||||
</label>
|
value="<?= $clanShortName ?>"><BR>
|
||||||
<label>
|
|
||||||
<input size=30 name="clan_short_name" maxlength="5" placeholder="Английская аббревиатура"
|
|
||||||
value="<?= $clanShortName ?>">
|
|
||||||
</label><BR>
|
|
||||||
<BR>
|
<BR>
|
||||||
<label>
|
<textarea cols=80 rows=10 name="clan_info"
|
||||||
<textarea cols=80 rows=10 name="clan_info"
|
placeholder="Информация о клане для энциклопедии"><?= nl2br($clanInfo) ?></textarea><BR>
|
||||||
placeholder="Информация о клане для энциклопедии"><?= nl2br($clanInfo) ?></textarea>
|
|
||||||
</label><BR>
|
|
||||||
<input type="submit" value="Подать заявку">
|
<input type="submit" value="Подать заявку">
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
@ -99,7 +87,7 @@ if ($userClan): ?>
|
|||||||
Для регистрации клана необходимо иметь:
|
Для регистрации клана необходимо иметь:
|
||||||
<ol>
|
<ol>
|
||||||
<li>Проверку на чистоту. У вас её нет.
|
<li>Проверку на чистоту. У вас её нет.
|
||||||
<li>10000 кредитов на банковском счёте. У вас на счету <?= User::getInstance()->money()->getBank() ?>.
|
<li>10000 кредитов на банковском счёте. У вас на счету <?= $userBank->getMoney() ?>.
|
||||||
</ol>
|
</ol>
|
||||||
Поле информации не обазательное. Но его содержимое может серьёзно повысить шансы на регистрацию клана.<BR>
|
Поле информации не обазательное. Но его содержимое может серьёзно повысить шансы на регистрацию клана.<BR>
|
||||||
Заявку на регистрацию подает глава клана.
|
Заявку на регистрацию подает глава клана.
|
||||||
|
15
clans.php
15
clans.php
@ -1,25 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
/** Список кланов и игроков в клане?
|
/**
|
||||||
* Copyright (c) 2018.
|
* Copyright (c) 2018.
|
||||||
* Author: Igor Barkov <lopar.4ever@gmail.com>
|
* Author: Igor Barkov <lopar.4ever@gmail.com>
|
||||||
* Project name: Battles-Game
|
* Project name: Battles-Game
|
||||||
*/
|
*/
|
||||||
|
\Battles\Template::header('Список кланов');
|
||||||
use Battles\Template;
|
|
||||||
|
|
||||||
Template::header('Список кланов');
|
|
||||||
include_once "config.php";
|
include_once "config.php";
|
||||||
$claninf = urldecode(filter_input(INPUT_SERVER,'QUERY_STRING'));
|
$claninf = urldecode(filter_input(INPUT_SERVER,'QUERY_STRING'));
|
||||||
|
|
||||||
if ($claninf && ($query = db::c()->query('SELECT * FROM `clans` WHERE `name` = "?s"', $claninf)->fetch_assoc())) {
|
if ($claninf AND ($query = db::c()->query('SELECT * FROM `clans` WHERE `name` = "?s"', $claninf)->fetch_assoc())) {
|
||||||
echo "<h1>{$query['name']}</h1><p>{$query['descr']}</p>";
|
echo "<h1>{$query['name']}</h1><p>{$query['descr']}</p>";
|
||||||
$clanlist = \Battles\Database\Db::getInstance()->execute('select login from users where clan = ?', $claninf);
|
$clanlist = db::c()->query('SELECT `login`,`status` FROM `users` WHERE `klan` = ?i',$query['id']);
|
||||||
while ($member = $clanlist->fetch()) {
|
while ($member = $clanlist->fetch_assoc()) {
|
||||||
echo "<img src=i/align_",$query['align'],".png> <img src=i/clan/",$query['short'],".png> ",$member['login']," - ",$member['status'],"<br>";
|
echo "<img src=i/align_",$query['align'],".png> <img src=i/clan/",$query['short'],".png> ",$member['login']," - ",$member['status'],"<br>";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo "<h1>Список кланов</h1>";
|
echo "<h1>Список кланов</h1>";
|
||||||
$query = db::c()->query('SELECT `align`,`name`,`short` FROM `clans` ORDER BY `name`');
|
$query = db::c()->query('SELECT `align`,`name`,`short` FROM `clans` ORDER BY `name` ASC');
|
||||||
while ($clanrow = $query->fetch_assoc()) {
|
while ($clanrow = $query->fetch_assoc()) {
|
||||||
$frm = "<img src='i/align_%s.png'> <img src='i/clan/%s.png'> <a href='?%s'>%s</a><br>";
|
$frm = "<img src='i/align_%s.png'> <img src='i/clan/%s.png'> <a href='?%s'>%s</a><br>";
|
||||||
echo sprintf($frm,$clanrow['align'],$clanrow['short'],$clanrow['name'],$clanrow['name']);
|
echo sprintf($frm,$clanrow['align'],$clanrow['short'],$clanrow['name'],$clanrow['name']);
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Battles\Admin;
|
|
||||||
|
|
||||||
use Battles\Bank;
|
|
||||||
use Battles\Database\Db;
|
|
||||||
use Battles\GameConfigs;
|
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
class Clan
|
|
||||||
{
|
|
||||||
public static function getUnapprovedList(): string
|
|
||||||
{
|
|
||||||
$list = '';
|
|
||||||
$rows = Db::getInstance()->ofetchAll('select * from clans where status = 0');
|
|
||||||
foreach ($rows as $row) {
|
|
||||||
$id = $row->owner_id;
|
|
||||||
$login = User::getInstance($id)->getLogin();
|
|
||||||
$full = $row->full_name;
|
|
||||||
$short = $row->short_name;
|
|
||||||
$info = nl2br($row->info);
|
|
||||||
$list .= <<<UNREGCLANLIST
|
|
||||||
<div>
|
|
||||||
<fieldset style="display: inline;">
|
|
||||||
<legend>$full [$short]</legend>
|
|
||||||
Глава клана: <span class="abils">$login</span><br>
|
|
||||||
Описание:<div class="abils">$info</div>
|
|
||||||
<BR>
|
|
||||||
<button onclick="location.href='?regclan=$id'">Зарегистрировать</button>
|
|
||||||
<button onclick="location.href='?remclan=$id'">Отказать</button>
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
UNREGCLANLIST;
|
|
||||||
}
|
|
||||||
return $list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function allowRegister($id)
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute('UPDATE clans SET status = 1 WHERE status = 0 AND owner_id = ?', $id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function disallowRegister($id)
|
|
||||||
{
|
|
||||||
$bank = new Bank($id);
|
|
||||||
Db::getInstance()->execute('DELETE FROM clans WHERE status = 0 AND owner_id = ?', $id);
|
|
||||||
$bank->modify(GameConfigs::CLAN['clan_register_cost']);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Battles\Admin;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class Item
|
|
||||||
{
|
|
||||||
public static function add(array $params): void
|
|
||||||
{
|
|
||||||
$query = 'insert into items (
|
|
||||||
name, item_type, durability,
|
|
||||||
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_accuracy, add_evasion, add_criticals, add_min_physical_damage, add_max_physical_damage,
|
|
||||||
image, weight)
|
|
||||||
values (
|
|
||||||
:name, :item_type, :durability,
|
|
||||||
: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_accuracy, :add_evasion, :add_criticals, :add_min_physical_damage, :add_max_physical_damage,
|
|
||||||
:image, :weight)';
|
|
||||||
$values = [
|
|
||||||
'name' => $params['name'] ?? uniqid(),
|
|
||||||
'item_type' => $params['item_type'],
|
|
||||||
'durability' => $params['durability'] ?? 1,
|
|
||||||
'need_strength' => $params['need_strength'] ?? 0,
|
|
||||||
'need_dexterity' => $params['need_dexterity'] ?? 0,
|
|
||||||
'need_intuition' => $params['need_intuition'] ?? 0,
|
|
||||||
'need_endurance' => $params['need_endurance'] ?? 0,
|
|
||||||
'need_intelligence' => $params['need_intelligence'] ?? 0,
|
|
||||||
'need_wisdom' => $params['need_wisdom'] ?? 0,
|
|
||||||
'add_strength' => $params['add_strength'] ?? 0,
|
|
||||||
'add_dexterity' => $params['add_dexterity'] ?? 0,
|
|
||||||
'add_intuition' => $params['add_intuition'] ?? 0,
|
|
||||||
'add_endurance' => $params['add_endurance'] ?? 0,
|
|
||||||
'add_intelligence' => $params['add_intelligence'] ?? 0,
|
|
||||||
'add_wisdom' => $params['add_wisdom'] ?? 0,
|
|
||||||
'add_accuracy' => $params['add_accuracy'] ?? 0,
|
|
||||||
'add_evasion' => $params['add_evasion'] ?? 0,
|
|
||||||
'add_criticals' => $params['add_criticals'] ?? 0,
|
|
||||||
'add_min_physical_damage' => $params['add_min_physical_damage'] ?? 0,
|
|
||||||
'add_max_physical_damage' => $params['add_max_physical_damage'] ?? 0,
|
|
||||||
'image' => $params['image'] ?? 'noitem.png',
|
|
||||||
'weight' => $params['weight'] ?? 1,
|
|
||||||
];
|
|
||||||
Db::getInstance()->execute($query, $values);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Battles\Admin;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class User
|
|
||||||
{
|
|
||||||
private const INVISIBILITY_EFFECT = 1022;
|
|
||||||
|
|
||||||
public static function getInvisiblesList(): string
|
|
||||||
{
|
|
||||||
$list = '';
|
|
||||||
$row = Db::getInstance()->ofetchAll('select id, login from users left join users_effects ue on users.id = ue.owner_id where type = ' . self::INVISIBILITY_EFFECT);
|
|
||||||
foreach ($row as $item) {
|
|
||||||
$list .= '[id] = ' . $item->id . ', ' . $item->login . '<br>';
|
|
||||||
}
|
|
||||||
return $list;
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,22 +7,22 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Exceptions\GameException;
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
class Bank
|
class Bank
|
||||||
{
|
{
|
||||||
private int $userId = 0;
|
public int $user_id = 0;
|
||||||
private int $money = 0;
|
private int $money = 0;
|
||||||
private string $error = '';
|
private $user;
|
||||||
private string $status = '';
|
private static DBPDO $db;
|
||||||
private int $comission = 0;
|
|
||||||
|
|
||||||
private const ERROR_NO_MONEY_IN_WALLET = "Ошибка! Нет денег в кошельке!";
|
const ERROR_NO_MONEY_IN_WALLET = "Ошибка! Нет денег в кошельке!";
|
||||||
private const ERROR_NO_BANK_ACCOUNT = "Ошибка! Счёта не существует!";
|
const ERROR_NO_BANK_ACCOUNT = "Ошибка! Счёта не существует!";
|
||||||
private const ERROR_NO_MONEY_IN_BANK_ACCOUNT = "Ошибка! Нет денег на счету!";
|
const ERROR_NO_MONEY_IN_BANK_ACCOUNT = "Ошибка! Нет денег на счету!";
|
||||||
private const ERROR_WRONG_AMOUNT = "Ошибка! Сумма должна быть положительной!";
|
const ERROR_WRONG_AMOUNT = "Ошибка! Сумма должна быть положительной!";
|
||||||
private const ERROR_WRONG_ID = 'Неверный ID!';
|
const LOG = [
|
||||||
private const LOG = [
|
|
||||||
'sendMoney' => 'Банк: Перевод средств на другой счёт.',
|
'sendMoney' => 'Банк: Перевод средств на другой счёт.',
|
||||||
'receiveMoney' => 'Банк: Получение средств.',
|
'receiveMoney' => 'Банк: Получение средств.',
|
||||||
'depositMoney' => 'Пополнение счёта.',
|
'depositMoney' => 'Пополнение счёта.',
|
||||||
@ -31,15 +31,14 @@ class Bank
|
|||||||
'sellShop' => 'Продажа товара в магазине.'
|
'sellShop' => 'Продажа товара в магазине.'
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct(int $userId = null)
|
public function __construct(int $user_id)
|
||||||
{
|
{
|
||||||
if (empty($userId)) {
|
self::$db = DBPDO::INIT();
|
||||||
$userId = User::getInstance()->getId();
|
$bank_row = self::$db->fetch('SELECT user_id, money FROM bank WHERE user_id = ?', $user_id);
|
||||||
}
|
$this->user = self::$db->fetch('SELECT money FROM users WHERE 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($bankRow[$key])) {
|
if (isset($bank_row[$key])) {
|
||||||
$this->$key = $bankRow[$key];
|
$this->$key = $bank_row[$key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -51,11 +50,14 @@ class Bank
|
|||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
private function commission(int $amount): int
|
private function bankCommission(int $amount): int
|
||||||
{
|
{
|
||||||
$bankCommission = round($amount * GameConfigs::BANK_COMISSION);
|
$bankCommission = round($amount * GameConfigs::BANK_COMISSION);
|
||||||
$this->comission = max(1, (int)$bankCommission);
|
if ($bankCommission < 1) {
|
||||||
return $this->comission;
|
return 1;
|
||||||
|
} else {
|
||||||
|
return (int)$bankCommission;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,56 +66,59 @@ 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 bankLogs(int $receiverId, int $amount, string $operationType, int $senderId = 0): void
|
||||||
{
|
{
|
||||||
if (is_null($senderId)) {
|
if (!$senderId) {
|
||||||
$senderId = $this->userId;
|
$senderId = $this->user_id;
|
||||||
}
|
}
|
||||||
if ($operationType === 'depositMoney' || $operationType === 'withdrawMoney') {
|
$text = self::LOG[$operationType];
|
||||||
$receiverId = $this->userId;
|
if ($operationType == "sendMoney") {
|
||||||
|
$text .= " Комиссия: " . $this->bankCommission($amount);
|
||||||
|
} elseif ($operationType == "depositMoney") {
|
||||||
|
$receiverId = $this->user_id;
|
||||||
|
} elseif ($operationType == "withdrawMoney") {
|
||||||
|
$receiverId = $this->user_id;
|
||||||
|
$text .= " Комиссия: " . $this->bankCommission($amount);
|
||||||
}
|
}
|
||||||
$commText = $this->comission ? ' Комиссия: ' . $this->comission : '';
|
GameLogs::addBankLog($senderId,$receiverId,$amount,$operationType,$text);
|
||||||
$text = self::LOG[$operationType] . $commText;
|
|
||||||
$this->status = $text;
|
|
||||||
GameLogs::addBankLog($senderId, $receiverId, $amount, $operationType, $text);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Перевод денег между банковскими счетами игроков с банковской комиссией.
|
* Перевод денег между банковскими счетами игроков с банковской комиссией.
|
||||||
*
|
*
|
||||||
* @param mixed $receiver ID получателя.
|
* @param int $receiver ID получателя.
|
||||||
* @param mixed $amount Cумма.
|
* @param int $amount сумма.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
* @throws GameException
|
||||||
*/
|
*/
|
||||||
public function sendMoney($receiver, $amount)
|
public function sendMoney(int $receiver, int $amount): int
|
||||||
{
|
{
|
||||||
if (!is_numeric($receiver)) {
|
$receiverWallet = self::$db->fetch('SELECT money FROM bank WHERE user_id = ?', $receiver);
|
||||||
$this->error = self::ERROR_WRONG_ID;
|
if ($amount <= 0) {
|
||||||
return;
|
throw new GameException(self::ERROR_WRONG_AMOUNT);
|
||||||
}
|
}
|
||||||
$rec = new self($receiver);
|
if (!$receiverWallet) {
|
||||||
if (!is_numeric($amount) || $amount <= 0) {
|
throw new GameException(self::ERROR_NO_BANK_ACCOUNT);
|
||||||
$this->error = self::ERROR_WRONG_AMOUNT;
|
|
||||||
}
|
}
|
||||||
if (!$rec->userId) {
|
$amountWithComission = $amount + $this->bankCommission($amount);
|
||||||
$this->error = self::ERROR_NO_BANK_ACCOUNT;
|
|
||||||
}
|
|
||||||
$amountWithComission = $amount + $this->commission($amount);
|
|
||||||
if ($amountWithComission > $this->money) {
|
if ($amountWithComission > $this->money) {
|
||||||
$this->error = self::ERROR_NO_MONEY_IN_BANK_ACCOUNT;
|
throw new GameException(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT);
|
||||||
}
|
|
||||||
if ($this->error) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
// Снимаем сумму с комиссией у отправителя
|
// Снимаем сумму с комиссией у отправителя
|
||||||
$this->modify(-$amountWithComission);
|
$this->money -= $amountWithComission;
|
||||||
$this->addLog($rec->userId, $this->money, 'sendMoney', $this->userId);
|
self::setBankMoney($this->money, $this->user_id);
|
||||||
|
$this->bankLogs($receiver, $this->money, "sendMoney");
|
||||||
// Отдаём сумму на счёт получателю
|
// Отдаём сумму на счёт получателю
|
||||||
$rec->modify($amount);
|
$receiverWallet->money += $amount;
|
||||||
$rec->addLog($rec->userId, $rec->money, 'receiveMoney', $this->userId);
|
self::setBankMoney($receiverWallet->money, $receiver);
|
||||||
|
$this->bankLogs($receiver, $receiverWallet->money, "receiveMoney");
|
||||||
|
// Возвращаем изменившиеся значения
|
||||||
|
return $this->money;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -121,22 +126,30 @@ class Bank
|
|||||||
*
|
*
|
||||||
* @param int $amount сумма.
|
* @param int $amount сумма.
|
||||||
*
|
*
|
||||||
|
* @return array
|
||||||
|
* @throws GameException
|
||||||
*/
|
*/
|
||||||
public function depositMoney(int $amount)
|
public function depositMoney(int $amount): array
|
||||||
{
|
{
|
||||||
if ($amount <= 0) {
|
if ($amount <= 0) {
|
||||||
$this->error = self::ERROR_WRONG_AMOUNT;
|
throw new GameException(self::ERROR_WRONG_AMOUNT);
|
||||||
|
}
|
||||||
|
$wallet = self::$db->fetch('SELECT money FROM users WHERE id = ?', $this->user_id);
|
||||||
|
if ($wallet->money < $amount) {
|
||||||
|
throw new GameException(self::ERROR_NO_MONEY_IN_WALLET);
|
||||||
}
|
}
|
||||||
// Забираем деньги из кошелька получателя
|
// Забираем деньги из кошелька получателя
|
||||||
if (!User::getInstance($this->userId)->money()->spend($amount)) {
|
$this->user->money -= $amount;
|
||||||
$this->error = self::ERROR_NO_MONEY_IN_WALLET;
|
self::setWalletMoney($this->user->money, $this->user_id);
|
||||||
}
|
|
||||||
if ($this->error) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Отдаём сумму на счёт получателю
|
// Отдаём сумму на счёт получателю
|
||||||
$this->modify($amount);
|
$this->money += $amount;
|
||||||
$this->addLog(0, $this->money, 'depositMoney');
|
self::setBankMoney($this->money, $this->user_id);
|
||||||
|
$this->bankLogs(0, $this->money, "depositMoney");
|
||||||
|
// Возвращаем изменившиеся значения
|
||||||
|
return [
|
||||||
|
'walletMoney' => $this->user->money,
|
||||||
|
'bankMoney' => $this->money
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -144,29 +157,67 @@ class Bank
|
|||||||
*
|
*
|
||||||
* @param int $amount сумма.
|
* @param int $amount сумма.
|
||||||
*
|
*
|
||||||
|
* @return array
|
||||||
|
* @throws GameException
|
||||||
*/
|
*/
|
||||||
public function withdrawMoney(int $amount)
|
public function withdrawMoney(int $amount): array
|
||||||
{
|
{
|
||||||
if ($amount <= 0) {
|
if ($amount <= 0) {
|
||||||
$this->error = self::ERROR_WRONG_AMOUNT;
|
throw new GameException(self::ERROR_WRONG_AMOUNT);
|
||||||
}
|
}
|
||||||
$amountWithComission = $amount + $this->commission($amount);
|
$amountWithComission = $amount + $this->bankCommission($amount);
|
||||||
if ($this->money < $amountWithComission) {
|
if ($this->money < $amountWithComission) {
|
||||||
$this->error = self::ERROR_NO_MONEY_IN_BANK_ACCOUNT;
|
throw new GameException(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT);
|
||||||
}
|
|
||||||
if ($this->error) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
// Снимаем сумму с комиссией у отправителя
|
// Снимаем сумму с комиссией у отправителя
|
||||||
$this->modify(-$amountWithComission);
|
$this->money -= $amountWithComission;
|
||||||
$this->addLog(0, $this->money, 'withdrawMoney');
|
self::setBankMoney($this->money, $this->user_id);
|
||||||
|
$this->bankLogs(0, $this->money, "withdrawMoney");
|
||||||
// Отдаём сумму в кошелёк получателя
|
// Отдаём сумму в кошелёк получателя
|
||||||
User::getInstance($this->userId)->money()->earn($amount);
|
$this->user['money'] += $amount;
|
||||||
|
self::setWalletMoney($this->user['money'], $this->user_id);
|
||||||
|
// Возвращаем изменившиеся значения
|
||||||
|
return [
|
||||||
|
'walletMoney' => $this->user['money'],
|
||||||
|
'bankMoney' => $this->money
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
private function save()
|
/**
|
||||||
|
* Установить количество денег на банковском счету.
|
||||||
|
*
|
||||||
|
* @param int $amount сумма.
|
||||||
|
* @param int $user_id ID пользователя.
|
||||||
|
* @param string $operationType Тип операции. По умолчанию пусто. Если ввести, система запишет событие в банковский лог.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function setBankMoney(int $amount, int $user_id, string $operationType = ''): void
|
||||||
{
|
{
|
||||||
Db::getInstance()->execute('UPDATE bank SET money = ? WHERE user_id = ?', [$this->money, $this->userId]);
|
try {
|
||||||
|
self::$db->execute('UPDATE bank SET money = ? WHERE user_id = ?', [$amount, $user_id]);
|
||||||
|
if ($operationType) {
|
||||||
|
GameLogs::addBankLog(0, 0, $amount, $operationType, self::LOG[$operationType]);
|
||||||
|
}
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Установить количество денег на руках.
|
||||||
|
*
|
||||||
|
* @param int $amount сумма.
|
||||||
|
* @param int $user_id ID пользователя.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function setWalletMoney(int $amount, int $user_id): void
|
||||||
|
{
|
||||||
|
$u = new User($user_id);
|
||||||
|
$u->setMoney($amount);
|
||||||
|
$u->saveMoney();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMoney(): int
|
public function getMoney(): int
|
||||||
@ -174,30 +225,8 @@ class Bank
|
|||||||
return $this->money;
|
return $this->money;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function modify(int $amount, string $logType = '')
|
public function setMoney($amount)
|
||||||
{
|
{
|
||||||
if ($amount > 0) {
|
$this->money = $amount;
|
||||||
// add_money
|
|
||||||
$this->money += $amount;
|
|
||||||
$this->save();
|
|
||||||
} elseif ($amount < 0) {
|
|
||||||
// remove_money
|
|
||||||
if ($this->money < $amount) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$this->money -= $amount;
|
|
||||||
$this->save();
|
|
||||||
}
|
|
||||||
if ($logType && $amount !== 0) {
|
|
||||||
$this->addLog(0, $this->money, $logType);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public function getStatus(): string
|
|
||||||
{
|
|
||||||
if (!$this->error) {
|
|
||||||
return $this->status;
|
|
||||||
}
|
|
||||||
return $this->error;
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,39 +2,39 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
class Chat
|
class Chat
|
||||||
{
|
{
|
||||||
private DateTime $d;
|
private DateTime $d;
|
||||||
private Db $db;
|
private DBPDO $db;
|
||||||
|
|
||||||
public function __construct(Db $db)
|
public function __construct(DBPDO $db)
|
||||||
{
|
{
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMessages(): ?string
|
public function getMessages(): ?string
|
||||||
{
|
{
|
||||||
$query = 'select
|
$query = 'select
|
||||||
msg,
|
msg,
|
||||||
msgdate,
|
msgdate,
|
||||||
type,
|
type,
|
||||||
s.login as sender,
|
s.login as sender,
|
||||||
r.login as receiver,
|
r.login as receiver,
|
||||||
s.id as sid,
|
s.id as sid,
|
||||||
r.id as rid
|
r.id as rid
|
||||||
from chat
|
from chat
|
||||||
left join users s on s.id = chat.user_id
|
left join users s on s.id = chat.user_id
|
||||||
left join users r on r.id = chat.receiver_id
|
left join users r on r.id = chat.receiver_id
|
||||||
where
|
where
|
||||||
r.id = ?
|
r.id = ?
|
||||||
or r.id is null
|
or r.id is null
|
||||||
or s.id = ?
|
or s.id = ?
|
||||||
order by chat.id';
|
order by chat.id';
|
||||||
$chatrows = $this->db->ofetchALL($query, [User::getInstance()->getId(), User::getInstance()->getId()]);
|
$chatrows = $this->db->ofetchALL($query, [User::$current->getId(), User::$current->getId()]);
|
||||||
$wrappedMessage = null;
|
$wrappedMessage = null;
|
||||||
foreach ($chatrows as $row) {
|
foreach ($chatrows as $row) {
|
||||||
try {
|
try {
|
||||||
@ -45,7 +45,7 @@ class Chat
|
|||||||
$m = htmlspecialchars($row->msg);
|
$m = htmlspecialchars($row->msg);
|
||||||
if ($row->type === 'sys' && empty($row->rid)) {
|
if ($row->type === 'sys' && empty($row->rid)) {
|
||||||
$wrappedMessage .= sprintf('<span class="chatsys">%s %s</span><br>', $this->d->format('H:i'), $m);
|
$wrappedMessage .= sprintf('<span class="chatsys">%s %s</span><br>', $this->d->format('H:i'), $m);
|
||||||
} elseif ($row->rid === User::getInstance()->getId()) {
|
} elseif ($row->rid === User::$current->getId()) {
|
||||||
if ($row->type === 'sys') {
|
if ($row->type === 'sys') {
|
||||||
$wrappedMessage .= sprintf('<span class="chatsys">%s [Система] → %s</span><br>', $this->d->format('H:i'), $m);
|
$wrappedMessage .= sprintf('<span class="chatsys">%s [Система] → %s</span><br>', $this->d->format('H:i'), $m);
|
||||||
} elseif ($row->type == 'sms') {
|
} elseif ($row->type == 'sms') {
|
||||||
@ -62,19 +62,14 @@ class Chat
|
|||||||
return $wrappedMessage;
|
return $wrappedMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function sendMessage(string $msg)
|
public function addMessage(string $msg)
|
||||||
{
|
{
|
||||||
$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::$current->getId(), $msg]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function sendSys(string $msg, ?int $receiverId = null)
|
public static function addSYSMessage( string $msg, ?int $receiver_id = null)
|
||||||
{
|
{
|
||||||
Db::getInstance()->execute('insert into chat (user_id, msg, receiver_id, type) values (-1,?,?,?)', [$msg, $receiverId, 'sys']);
|
DBPDO::$db->execute('insert into chat (user_id, msg, receiver_id, type) values (?,?,?,?)', [User::$current->getId(), $msg, $receiver_id, 'sys']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function sendTelegraf(string $msg, int $receiverId)
|
}
|
||||||
{
|
|
||||||
Db::getInstance()->execute('insert into chat (user_id, msg, receiver_id, type) values (-1,?,?,?)', [$msg, $receiverId, 'sms']);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -3,32 +3,26 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class Check
|
class Check
|
||||||
{
|
{
|
||||||
private User $user;
|
private User $user;
|
||||||
private Db $db;
|
private DBPDO $db;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check constructor.
|
* Check constructor.
|
||||||
*
|
*
|
||||||
* @param User $user
|
* @param User $user
|
||||||
* @param Db $db
|
|
||||||
*/
|
*/
|
||||||
public function __construct(User $user, Db $db)
|
public function __construct(User $user, DBPDO $db)
|
||||||
{
|
{
|
||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function expiredEffects()
|
public function Effects()
|
||||||
{
|
{
|
||||||
return Db::getInstance()->execute('delete from users_effects where remaining_time <= ?', strtotime('now'));
|
return $this->db->execute('delete from users_effects where remaining_time <= ?', strtotime('now'));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public static function userExists($id): bool
|
|
||||||
{
|
|
||||||
return Db::getInstance()->fetchColumn('select count(*) from users where id = ?', $id) > 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +1,13 @@
|
|||||||
<?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 '<img alt="background" src="/i/city/spring_cap_cp_day.jpg">' .
|
echo '<div style="position:relative; display: inline-block;" id="ione"><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]) .
|
||||||
@ -20,61 +17,68 @@ 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 '<img alt="background" src="/i/city/spring_cap_strash_day.jpg">' .
|
echo '<div style="position:relative; display: inline-block;" id="ione"><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 '<img alt="background" src="/i/city/spring_cap_park_day.jpg">' .
|
echo '<div style="position:relative; display: inline-block;" id="ione"><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 '<img alt="background" src="/i/city/sub/cap_zamk_day.jpg">' .
|
echo '<div style="position:relative; display: inline-block;" id="ione"><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 '<img alt="background" src="/i/city/ar_e_d.jpg">' .
|
echo '<div style="position:relative; display: inline-block;" id="ione"><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 '<img alt="background" src="/i/city/av_rist_day.jpg">' .
|
echo '<div style="position:relative; display: inline-block;" id="ione"><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 '<img alt="background" src="/i/city/av_arena_bg1_day2.jpg">' .
|
echo '<div style="position:relative; display: inline-block;" id="ione"><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 '<img alt="background" src="/i/city/spring_cap_torg_day.jpg">' .
|
echo '<div style="position:relative; display: inline-block;" id="ione"><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): string
|
private static function showBuilding(int $id, string $image, int $top, int $left, string $description)
|
||||||
{
|
{
|
||||||
return <<<HTML
|
return sprintf('
|
||||||
<div style="position:absolute; left:{$left}px; top:{$top}px; z-index:90; cursor: pointer;">
|
<div style="position:absolute; left:%spx; top:%spx; z-index:90; cursor: pointer;">
|
||||||
<img src="/i/city/sub/$image.png" alt="$description" title="$description" class="building" id="$id" onclick="window.location.href = 'city.php?got/level$id'">
|
<img src="/i/city/sub/%s.png" alt="%s" title="%s" class="building" id="%s" onclick="window.location.href = \'city.php?got/level%s\'">
|
||||||
</div>
|
</div>',
|
||||||
HTML;
|
$left, $top, $image, $description, $description, $id, $id);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,103 +2,104 @@
|
|||||||
# Date: 23.08.2021 (23:05)
|
# Date: 23.08.2021 (23:05)
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Models\User\Effects;
|
|
||||||
|
|
||||||
class Clan
|
class Clan
|
||||||
{
|
{
|
||||||
private static ?self $instance = null;
|
private DBPDO $db;
|
||||||
|
private User $user;
|
||||||
private $clan;
|
private $clan;
|
||||||
|
public static Clan $current;
|
||||||
|
|
||||||
private function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->clan = Db::getInstance()->ofetch('select * from clans where owner_id = ?', User::getInstance()->getId());
|
$this->db = DBPDO::$db;
|
||||||
}
|
$this->user = User::$current;
|
||||||
|
$this->clan = $this->db->ofetch('select * from clans where owner_id = ?', $this->user->getId());
|
||||||
public static function getInstance(): self
|
|
||||||
{
|
|
||||||
if (is_null(self::$instance)) {
|
|
||||||
self::$instance = new self();
|
|
||||||
}
|
|
||||||
return self::$instance;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addMember(string $login): string
|
public function addMember(string $login): string
|
||||||
{
|
{
|
||||||
|
$target = new User($login);
|
||||||
$error = null;
|
$error = null;
|
||||||
if (!$this->getProverka(User::getInstance($login)->getId())) {
|
if (!$this->getProverka($target->getId())) {
|
||||||
$error .= '<br>Нет проверки!';
|
$error .= '<br>Нет проверки!';
|
||||||
}
|
}
|
||||||
if (User::getInstance($login)->getClan()) {
|
if ($target->getClan()) {
|
||||||
$error .= '<br>Персонаж уже состоит в клане!';
|
$error .= '<br>Персонаж уже состоит в клане!';
|
||||||
}
|
}
|
||||||
if (User::getInstance($login)->getLevel() < 1) {
|
if ($target->getLevel() < 1) {
|
||||||
$error .= '<br>Персонаж 0 уровня не может быть принят!';
|
$error .= '<br>Персонаж 0 уровня не может быть принят!';
|
||||||
}
|
}
|
||||||
if (!User::getInstance()->money()->spend(GameConfigs::CLAN['add_member_cost'])) {
|
if ($this->user->getMoney() < GameConfigs::CLAN['add_member_cost']) {
|
||||||
$error .= '<br>Недостаточно денег!';
|
$error .= '<br>Недостаточно денег!';
|
||||||
}
|
}
|
||||||
if ($error) {
|
if ($error) {
|
||||||
return $error;
|
return $error;
|
||||||
}
|
}
|
||||||
|
$this->user->setMoney($this->user->getMoney() - GameConfigs::CLAN['add_member_cost']);
|
||||||
User::getInstance($login)->setClan(User::getInstance()->getClan());
|
$this->user->saveMoney();
|
||||||
|
$target->setClan($this->user->getClan());
|
||||||
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
|
||||||
{
|
{
|
||||||
|
$target = new User($login);
|
||||||
$error = null;
|
$error = null;
|
||||||
if (User::getInstance($login)->getId() === User::getInstance()->getId()) {
|
if ($this->user->getMoney() < GameConfigs::CLAN['remove_member_cost']) {
|
||||||
|
$error .= '<br>Недостаточно денег!';
|
||||||
|
}
|
||||||
|
if ($target->getId() === $this->user->getId()) {
|
||||||
$error .= '<br>Себя выгонять нельзя!';
|
$error .= '<br>Себя выгонять нельзя!';
|
||||||
}
|
}
|
||||||
if (User::getInstance($login)->getClan() !== User::getInstance()->getClan()) {
|
if ($target->getClan() !== $this->user->getClan()) {
|
||||||
$error .= '<br>Персонаж не состоит в этом клане!';
|
$error .= '<br>Персонаж не состоит в этом клане!';
|
||||||
}
|
}
|
||||||
if (!User::getInstance()->money()->spend(GameConfigs::CLAN['remove_member_cost'])) {
|
|
||||||
$error .= '<br>Недостаточно денег!';
|
|
||||||
}
|
|
||||||
if ($error) {
|
if ($error) {
|
||||||
return $error;
|
return $error;
|
||||||
}
|
}
|
||||||
User::getInstance($login)->setClan(null);
|
$this->user->setMoney($this->user->getMoney() - GameConfigs::CLAN['remove_member_cost']);
|
||||||
|
$this->user->saveMoney();
|
||||||
|
$target->setClan(null);
|
||||||
return "Персонаж «{$login}» покинул клан.";
|
return "Персонаж «{$login}» покинул клан.";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function changeOwner(string $login): string
|
public function changeOwner(string $login): string
|
||||||
{
|
{
|
||||||
|
$target = new User($login);
|
||||||
$error = null;
|
$error = null;
|
||||||
if (User::getInstance($login)->getId() === User::getInstance()->getId()) {
|
if ($target->getId() === $this->user->getId()) {
|
||||||
$error .= '<br>Самоудовлетворяетесь? ;)';
|
$error .= '<br>Самоудовлетворяетесь? ;)';
|
||||||
}
|
}
|
||||||
if (User::getInstance($login)->getClan() !== User::getInstance()->getClan()) {
|
if ($target->getClan() !== $this->user->getClan()) {
|
||||||
$error .= '<br>Персонаж не состоит в этом клане!';
|
$error .= '<br>Персонаж не состоит в этом клане!';
|
||||||
}
|
}
|
||||||
if ($error) {
|
if ($error) {
|
||||||
return $error;
|
return $error;
|
||||||
}
|
}
|
||||||
Db::getInstance()->execute('update clans set owner_id = ? where owner_id = ?', [User::getInstance($login)->getId(), User::getInstance()->getId()]);
|
$this->db->execute('update clans set owner_id = ? where owner_id = ?', [$target->getId(), $this->user->getId()]);
|
||||||
return 'Вы передали управление кланом персонажу «' . $login . '».';
|
return 'Вы передали управление кланом персонажу «' . $login . '».';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setClanInfo(string $text): string
|
public function setClanInfo(string $text): string
|
||||||
{
|
{
|
||||||
$checkId = Db::getInstance()->fetchColumn('select id from users where clan = (select short_name from clans where owner_id = ?)', User::getInstance()->getId());
|
$check = $this->db->ofetch('select id from users where clan = (select short_name from clans where owner_id = ?)', $this->user->getId());
|
||||||
if ($checkId !== User::getInstance()->getId()) {
|
if ($check->id !== $this->user->getId()) {
|
||||||
return 'Ошибка доступа!';
|
return 'Ошибка доступа!';
|
||||||
}
|
}
|
||||||
Db::getInstance()->execute('update clans set info = ? where owner_id = ?', [$text, $checkId]);
|
$this->db->execute('update clans set info = ? where owner_id = ?', [$text, $check->id]);
|
||||||
return 'Описание клана изменено!';
|
return 'Описание клана изменено!';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMemberlist(): array
|
public function getMemberlist(): array
|
||||||
{
|
{
|
||||||
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 $this->db->ofetchAll('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', $this->user->getClan());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getProverka($user_id)
|
||||||
|
{
|
||||||
|
return $this->db->fetch('select 1 from users_effects where type = 20 and owner_id = ?', $user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getClanOwnerId(): ?int
|
public function getClanOwnerId(): ?int
|
||||||
@ -115,4 +116,4 @@ class Clan
|
|||||||
{
|
{
|
||||||
return $this->clan->short_name;
|
return $this->clan->short_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
154
classes/Battles/Database/DBPDO.php
Normal file
154
classes/Battles/Database/DBPDO.php
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace Battles\Database;
|
||||||
|
use Battles\GameConfigs;
|
||||||
|
use PDO, PDOException;
|
||||||
|
class DBPDO
|
||||||
|
{
|
||||||
|
|
||||||
|
public $pdo;
|
||||||
|
private static $_instance = null;
|
||||||
|
public static DBPDO $db;
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
$this->connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function INIT(): DBPDO
|
||||||
|
{
|
||||||
|
if (!self::$_instance) {
|
||||||
|
self::$_instance = new DBPDO();
|
||||||
|
}
|
||||||
|
return self::$_instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
function prep_query($query)
|
||||||
|
{
|
||||||
|
return $this->pdo->prepare($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function connect():bool
|
||||||
|
{
|
||||||
|
if (!$this->pdo) {
|
||||||
|
|
||||||
|
$dsn = 'mysql:dbname=' . GameConfigs::DATABASE_NAME . ';host=' . GameConfigs::DATABASE_HOST . ';port=' . GameConfigs::DATABASE_PORT . ';charset=utf8;';
|
||||||
|
$user = GameConfigs::DATABASE_USER;
|
||||||
|
$password = GameConfigs::DATABASE_PASS;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->pdo = new PDO($dsn, $user, $password, array(PDO::ATTR_PERSISTENT => true));
|
||||||
|
return true;
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
die($e->getMessage());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function table_exists($table_name)
|
||||||
|
{
|
||||||
|
$stmt = $this->prep_query('SHOW TABLES LIKE ?');
|
||||||
|
$stmt->execute(array($table_name));
|
||||||
|
return $stmt->rowCount() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function execute($query, $values = null)
|
||||||
|
{
|
||||||
|
if ($values == null) {
|
||||||
|
$values = array();
|
||||||
|
} else if (!is_array($values)) {
|
||||||
|
$values = array($values);
|
||||||
|
}
|
||||||
|
$stmt = $this->prep_query($query);
|
||||||
|
$stmt->execute($values);
|
||||||
|
return $stmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch($query, $values = null)
|
||||||
|
{
|
||||||
|
if ($values == null) {
|
||||||
|
$values = array();
|
||||||
|
} else if (!is_array($values)) {
|
||||||
|
$values = array($values);
|
||||||
|
}
|
||||||
|
$stmt = $this->execute($query, $values);
|
||||||
|
return $stmt->fetch(PDO::FETCH_ASSOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetchAll($query, $values = null, $key = null)
|
||||||
|
{
|
||||||
|
if ($values == null) {
|
||||||
|
$values = array();
|
||||||
|
} else if (!is_array($values)) {
|
||||||
|
$values = array($values);
|
||||||
|
}
|
||||||
|
$stmt = $this->execute($query, $values);
|
||||||
|
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
// Allows the user to retrieve results using a
|
||||||
|
// column from the results as a key for the array
|
||||||
|
if ($key != null && $results[0][$key]) {
|
||||||
|
$keyed_results = array();
|
||||||
|
foreach ($results as $result) {
|
||||||
|
$keyed_results[$result[$key]] = $result;
|
||||||
|
}
|
||||||
|
$results = $keyed_results;
|
||||||
|
}
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ofetch($query, $values = null)
|
||||||
|
{
|
||||||
|
if ($values == null) {
|
||||||
|
$values = array();
|
||||||
|
} else if (!is_array($values)) {
|
||||||
|
$values = array($values);
|
||||||
|
}
|
||||||
|
$stmt = $this->execute($query, $values);
|
||||||
|
return $stmt->fetch(PDO::FETCH_OBJ);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ofetchAll($query, $values = null, $key = null)
|
||||||
|
{
|
||||||
|
if ($values == null) {
|
||||||
|
$values = array();
|
||||||
|
} else if (!is_array($values)) {
|
||||||
|
$values = array($values);
|
||||||
|
}
|
||||||
|
$stmt = $this->execute($query, $values);
|
||||||
|
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
|
||||||
|
|
||||||
|
// Allows the user to retrieve results using a
|
||||||
|
// column from the results as a key for the array
|
||||||
|
if ($key != null && $results[0][$key]) {
|
||||||
|
$keyed_results = (object) array();
|
||||||
|
foreach ($results as $result) {
|
||||||
|
$keyed_results->$result[$key] = $result;
|
||||||
|
}
|
||||||
|
$results = $keyed_results;
|
||||||
|
}
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
|
function lastInsertId()
|
||||||
|
{
|
||||||
|
return $this->pdo->lastInsertId();
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetchColumn($query, $values = null) {
|
||||||
|
if (is_null($values)) {
|
||||||
|
$values = [];
|
||||||
|
} elseif (!is_array($values)) {
|
||||||
|
$values = [$values];
|
||||||
|
}
|
||||||
|
$stmt = $this->execute($query, $values);
|
||||||
|
return $stmt->fetchColumn();
|
||||||
|
}
|
||||||
|
}
|
@ -1,135 +0,0 @@
|
|||||||
<?php
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Battles\Database;
|
|
||||||
|
|
||||||
use Battles\GameConfigs;
|
|
||||||
use PDO;
|
|
||||||
use PDOException;
|
|
||||||
|
|
||||||
class Db
|
|
||||||
{
|
|
||||||
|
|
||||||
private PDO $pdo;
|
|
||||||
private static ?self $instance = null;
|
|
||||||
|
|
||||||
private function __construct()
|
|
||||||
{
|
|
||||||
$this->connect();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function connect(): void
|
|
||||||
{
|
|
||||||
$dsn = 'mysql:dbname=' . GameConfigs::DATABASE_NAME . ';host=' . GameConfigs::DATABASE_HOST . ';port=' . GameConfigs::DATABASE_PORT . ';charset=utf8;';
|
|
||||||
$user = GameConfigs::DATABASE_USER;
|
|
||||||
$password = GameConfigs::DATABASE_PASS;
|
|
||||||
try {
|
|
||||||
$this->pdo = new PDO($dsn, $user, $password, array(PDO::ATTR_PERSISTENT => true));
|
|
||||||
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
die($e->getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getInstance(): self
|
|
||||||
{
|
|
||||||
if (is_null(self::$instance)) {
|
|
||||||
self::$instance = new self();
|
|
||||||
}
|
|
||||||
return self::$instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function execute($query, $values = null)
|
|
||||||
{
|
|
||||||
if (is_null($values)) {
|
|
||||||
$values = [];
|
|
||||||
} elseif (!is_array($values)) {
|
|
||||||
$values = [$values];
|
|
||||||
}
|
|
||||||
$stmt = $this->pdo->prepare($query);
|
|
||||||
$stmt->execute($values);
|
|
||||||
return $stmt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fetch($query, $values = null)
|
|
||||||
{
|
|
||||||
if (is_null($values)) {
|
|
||||||
$values = [];
|
|
||||||
} elseif (!is_array($values)) {
|
|
||||||
$values = [$values];
|
|
||||||
}
|
|
||||||
$stmt = $this->execute($query, $values);
|
|
||||||
return $stmt->fetch(PDO::FETCH_ASSOC);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fetchAll($query, $values = null, $key = null): array
|
|
||||||
{
|
|
||||||
if (is_null($values)) {
|
|
||||||
$values = [];
|
|
||||||
} elseif (!is_array($values)) {
|
|
||||||
$values = [$values];
|
|
||||||
}
|
|
||||||
$stmt = $this->execute($query, $values);
|
|
||||||
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
||||||
|
|
||||||
// Allows the user to retrieve results using a
|
|
||||||
// column from the results as a key for the array
|
|
||||||
if (!is_null($key) && $results[0][$key]) {
|
|
||||||
$keyedResults = [];
|
|
||||||
foreach ($results as $result) {
|
|
||||||
$keyedResults[$result[$key]] = $result;
|
|
||||||
}
|
|
||||||
$results = $keyedResults;
|
|
||||||
}
|
|
||||||
return $results;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function ofetch($query, $values = null)
|
|
||||||
{
|
|
||||||
if (is_null($values)) {
|
|
||||||
$values = [];
|
|
||||||
} elseif (!is_array($values)) {
|
|
||||||
$values = [$values];
|
|
||||||
}
|
|
||||||
$stmt = $this->execute($query, $values);
|
|
||||||
return $stmt->fetch(PDO::FETCH_OBJ);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function ofetchAll($query, $values = null, $key = null): object
|
|
||||||
{
|
|
||||||
if (is_null($values)) {
|
|
||||||
$values = [];
|
|
||||||
} elseif (!is_array($values)) {
|
|
||||||
$values = [$values];
|
|
||||||
}
|
|
||||||
$stmt = $this->execute($query, $values);
|
|
||||||
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
|
|
||||||
|
|
||||||
// Allows the user to retrieve results using a
|
|
||||||
// column from the results as a key for the array
|
|
||||||
if (!is_null($key) && $results[0][$key]) {
|
|
||||||
$keyedResults = (object)[];
|
|
||||||
foreach ($results as $result) {
|
|
||||||
$keyedResults->$result[$key] = $result;
|
|
||||||
}
|
|
||||||
$results = $keyedResults;
|
|
||||||
}
|
|
||||||
return $results;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function lastInsertId()
|
|
||||||
{
|
|
||||||
return $this->pdo->lastInsertId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fetchColumn($query, $values = null)
|
|
||||||
{
|
|
||||||
if (is_null($values)) {
|
|
||||||
$values = [];
|
|
||||||
} elseif (!is_array($values)) {
|
|
||||||
$values = [$values];
|
|
||||||
}
|
|
||||||
$stmt = $this->execute($query, $values);
|
|
||||||
return $stmt->fetchColumn();
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,37 +7,35 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Models\Inventory;
|
|
||||||
use stdClass;
|
use stdClass;
|
||||||
|
|
||||||
class DressedItems
|
class DressedItems
|
||||||
{
|
{
|
||||||
private int $userId;
|
private $USERID;
|
||||||
private stdClass $dressedItem;
|
private $dressedItem;
|
||||||
private static Db $db;
|
private static $db;
|
||||||
private object $dressed;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DressedItems constructor.
|
* DressedItems constructor.
|
||||||
* @param int $userId ID игрока.
|
* @param int $user_id ID игрока.
|
||||||
*/
|
*/
|
||||||
public function __construct(int $userId)
|
public function __construct(int $user_id)
|
||||||
{
|
{
|
||||||
self::$db = Db::getInstance();
|
self::$db = DBPDO::INIT();
|
||||||
$this->userId = $userId;
|
$this->USERID = $user_id;
|
||||||
$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)
|
||||||
{
|
{
|
||||||
return self::$db->ofetch('SELECT *, COUNT(1) AS count FROM inventory WHERE owner_id = ? AND dressed_slot = ?', [$ownerId, $itemSlot]);
|
return self::$db->fetch('SELECT *, COUNT(1) AS count FROM inventory WHERE owner_id = ? AND dressed_slot = ?', [$ownerId, $itemSlot]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getItemsInSlots(): stdClass
|
public function getItemsInSlots(): stdClass
|
||||||
{
|
{
|
||||||
|
$items = self::$db->ofetchALL('SELECT * FROM inventory WHERE owner_id = ? AND dressed_slot > 0', $this->USERID);
|
||||||
$this->dressedItem = new stdClass();
|
$this->dressedItem = new stdClass();
|
||||||
foreach ($this->dressed as $item) {
|
foreach ($items as $item) {
|
||||||
$i = $item->dressed_slot;
|
$i = $item->dressed_slot;
|
||||||
$this->dressedItem->$i = $item;
|
$this->dressedItem->$i = $item;
|
||||||
}
|
}
|
||||||
@ -46,45 +44,18 @@ class DressedItems
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Снимает с предмета статус одетого на персонажа в определённом слоте персонажа.
|
* Снимает с предмета статус одетого на персонажа в определённом слоте персонажа.
|
||||||
* @param $slotId - номер слота.
|
* @param $slot_id - номер слота.
|
||||||
*/
|
*/
|
||||||
public function undressItem($slotId)
|
public function undressItem($slot_id)
|
||||||
{
|
{
|
||||||
self::getItemsInSlots();
|
self::getItemsInSlots();
|
||||||
// Проверяем, что используется один из 12 слотов и наличие предмета в слоте.
|
// Проверяем, что используется один из 12 слотов и наличие предмета в слоте.
|
||||||
if (in_array($slotId, Item::TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem->$slotId) {
|
if (in_array($slot_id, Item::ITEM_TYPES_ALLOWED_IN_SLOTS) && $this->dressedItem->$slot_id) {
|
||||||
Inventory::undressOne($slotId, $this->userId);
|
self::$db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ? AND owner_id = ?', [$slot_id, $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 = ?', $userId);
|
return self::$db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot BETWEEN 1 AND 12 AND owner_id = ?', $user_id);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public function checkRequirements()
|
|
||||||
{
|
|
||||||
$stats = (new UserStats($this->userId))->getFullStats();
|
|
||||||
$q = 'select count(*) from inventory where
|
|
||||||
dressed_slot > 0 and
|
|
||||||
need_strength > ? and
|
|
||||||
need_dexterity > ? and
|
|
||||||
need_intuition > ? and
|
|
||||||
need_endurance > ? and
|
|
||||||
need_intelligence > ? and
|
|
||||||
need_wisdom > ? and
|
|
||||||
owner_id = ?';
|
|
||||||
$args = [
|
|
||||||
$stats->strength,
|
|
||||||
$stats->dexterity,
|
|
||||||
$stats->intuition,
|
|
||||||
$stats->endurance,
|
|
||||||
$stats->intelligence,
|
|
||||||
$stats->wisdom,
|
|
||||||
$this->userId
|
|
||||||
];
|
|
||||||
if (self::$db->fetchColumn($q, $args) > 0) {
|
|
||||||
self::undressAllItems($this->userId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -23,4 +23,4 @@ class GameConfigs
|
|||||||
const BANK_COMISSION = 0.05; // 5%
|
const BANK_COMISSION = 0.05; // 5%
|
||||||
|
|
||||||
const DB_SQLITE = '/volume2/web/battles/databases/logs.sqlite';
|
const DB_SQLITE = '/volume2/web/battles/databases/logs.sqlite';
|
||||||
}
|
}
|
@ -3,14 +3,11 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use SQLite3;
|
||||||
|
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 отправитель средств.
|
||||||
@ -21,16 +18,15 @@ 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)
|
||||||
{
|
{
|
||||||
self::addLog(
|
$db = new SQLite3(GameConfigs::DB_SQLITE);
|
||||||
json_encode([
|
$row = $db->prepare("INSERT INTO bank_logs (sender_id, receiver_id, amount, type, text) VALUES (?, ?, ?, ?, ?)");
|
||||||
'senderId' => $senderId,
|
$row->bindParam(1, $senderId, SQLITE3_INTEGER);
|
||||||
'receiverId' => $receiverId,
|
$row->bindParam(2, $receiverId, SQLITE3_INTEGER);
|
||||||
'amount' => $amount,
|
$row->bindParam(3, $amount, SQLITE3_INTEGER);
|
||||||
'type' => $type,
|
$row->bindParam(4, $type, SQLITE3_TEXT);
|
||||||
'text' => $text,
|
$row->bindParam(5, $text, SQLITE3_TEXT);
|
||||||
]),
|
$row->execute();
|
||||||
self::BANK,
|
$row->close();
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,61 +44,48 @@ class GameLogs
|
|||||||
if (empty($type)) {
|
if (empty($type)) {
|
||||||
$type = "system";
|
$type = "system";
|
||||||
}
|
}
|
||||||
|
$db = new SQLite3(GameConfigs::DB_SQLITE);
|
||||||
self::addLog(
|
$row = $db->prepare("INSERT INTO users_logs (user_id, author_id, type, text) VALUES (?,?,?,?)");
|
||||||
json_encode([
|
$row->bindParam(1, $userId, SQLITE3_INTEGER);
|
||||||
'userId' => $userId,
|
$row->bindParam(2, $authorId, SQLITE3_INTEGER);
|
||||||
'authotId' => $authorId,
|
$row->bindParam(3, $type, SQLITE3_TEXT);
|
||||||
'type' => $type,
|
$row->bindParam(4, $text, SQLITE3_TEXT);
|
||||||
'text' => $text,
|
$row->execute();
|
||||||
]),
|
$row->close();
|
||||||
self::USER_ACTIONS,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function addLog($jsonString, $logType)
|
public static function getUserLogs($userId = null, $type = null): SQLite3Result
|
||||||
{
|
{
|
||||||
Db::getInstance()->execute('insert into logs (json_data, type) VALUES (?,?)', [
|
$db = new SQLite3(GameConfigs::DB_SQLITE);
|
||||||
$jsonString,
|
$row = false;
|
||||||
$logType
|
if ($userId && $type) {
|
||||||
]);
|
$query = "SELECT * FROM users_logs WHERE user_id = ? AND type = ?";
|
||||||
}
|
$row = $db->prepare($query);
|
||||||
|
$row->bindValue(1, $userId, SQLITE3_INTEGER);
|
||||||
private static function getLogByType(int $type): array
|
$row->bindValue(2, $type, SQLITE3_TEXT);
|
||||||
{
|
} elseif ($userId && !$type) {
|
||||||
$result = [];
|
$query = "SELECT * FROM users_logs WHERE user_id = ?";
|
||||||
$logs = Db::getInstance()->fetchAll('select json_data from logs where type = ?', $type);
|
$row = $db->prepare($query);
|
||||||
foreach ($logs as $log) {
|
$row->bindValue(1, $userId, SQLITE3_INTEGER);
|
||||||
$result[] = json_decode($log, true);
|
} elseif (!$userId && $type) {
|
||||||
}
|
$query = "SELECT * FROM users_logs WHERE type= ?";
|
||||||
return $result;
|
$row = $db->prepare($query);
|
||||||
}
|
$row->bindValue(1, $type, SQLITE3_TEXT);
|
||||||
|
} elseif (!$userId && !$type) {
|
||||||
public static function getUserLogs(?int $userId): array
|
$query = "SELECT * FROM users_logs";
|
||||||
{
|
$row = $db->prepare($query);
|
||||||
$logs = self::getLogByType(self::USER_ACTIONS);
|
|
||||||
if (is_null($userId)) {
|
|
||||||
return $logs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = [];
|
return $row->execute();
|
||||||
foreach ($logs as $log) {
|
|
||||||
if ($userId !== $log['userId']) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$result[] = $log;
|
|
||||||
}
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function addBattleLog(int $battleId, string $text)
|
public static function addBattleLog(int $battle_id, string $text)
|
||||||
{
|
{
|
||||||
self::addLog(
|
$db = new SQLite3(__DIR__ . '../../Database/battle.logs.db');
|
||||||
json_encode([
|
$row = $db->prepare('insert into newbattles (battle_id, text) values (?,?)');
|
||||||
'battleId' => $battleId,
|
$row->bindParam(1, $battle_id, SQLITE3_INTEGER);
|
||||||
'text' => $text,
|
$row->bindParam(2, $text, SQLITE3_TEXT);
|
||||||
]),
|
$row->execute();
|
||||||
self::BATTLE,
|
$row->close();
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,177 +0,0 @@
|
|||||||
<?php
|
|
||||||
# Date: 19.02.2022 (2:33)
|
|
||||||
namespace Battles;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class Hostel
|
|
||||||
{
|
|
||||||
private array $status = [];
|
|
||||||
private int $uid;
|
|
||||||
private int $hid;
|
|
||||||
private int $type;
|
|
||||||
private int $time;
|
|
||||||
|
|
||||||
public const PRICEPERTYPE = [
|
|
||||||
1 => [8, 16, 24, 32],
|
|
||||||
2 => [15, 30, 45, 60],
|
|
||||||
3 => [25, 50, 75, 100],
|
|
||||||
4 => [40, 80, 120, 160]
|
|
||||||
];
|
|
||||||
public const BASENAME = [
|
|
||||||
1 => 'Сумка',
|
|
||||||
2 => 'Сундук',
|
|
||||||
3 => 'Комната',
|
|
||||||
4 => 'Амбар',
|
|
||||||
];
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
$this->uid = User::getInstance()->getId();
|
|
||||||
$data = Db::getInstance()->ofetch('select id, type, time from hostel where uid = ?', $this->uid);
|
|
||||||
$this->hid = $data->id ?? null;
|
|
||||||
$this->type = $data->type ?? null;
|
|
||||||
$this->time = $data->time ?? null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function add7DayRent($type)
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute('insert into hostel (uid, type, time) values (?,?,?)', [$this->uid, $type, time() + 60 * 60 * 24 * 7]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function addRentTime($hostelId, $time)
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute('update hostel set time = ? where id = ? and uid = ?', [$time, $hostelId, $this->uid]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function removeItems()
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute('update inventory set in_hostel = 0 where owner_id = ? and in_hostel = 1', $this->uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function removeRent()
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute('delete from hostel where id = ? and uid = ?', [$this->hid, $this->uid]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function pay($amount): bool
|
|
||||||
{
|
|
||||||
if (!User::getInstance()->money()->spend($amount)) {
|
|
||||||
$this->setError('Недостаточно денег!');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function hasNoRents(): bool
|
|
||||||
{
|
|
||||||
if ($this->hid) {
|
|
||||||
$this->setError('Не более 1 арендованного места!');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function typeIsAllowed($type): bool
|
|
||||||
{
|
|
||||||
if (!in_array($type, [1, 2, 3, 4])) {
|
|
||||||
$this->setError('Неверный тип аренды!');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setError(string $message)
|
|
||||||
{
|
|
||||||
$this->status = ['type' => 'error', 'message' => $message];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function setSuccess(string $message)
|
|
||||||
{
|
|
||||||
$this->status = ['type' => 'success', 'message' => $message];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function newRent($type): bool
|
|
||||||
{
|
|
||||||
if (
|
|
||||||
!$this->typeIsAllowed($type) ||
|
|
||||||
!$this->hasNoRents() ||
|
|
||||||
!$this->pay(self::PRICEPERTYPE[$type][0])
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$this->add7DayRent($type);
|
|
||||||
$this->setSuccess('Поздравляем с успешной арендой!');
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function remove(): bool
|
|
||||||
{
|
|
||||||
if ($this->time < time()) {
|
|
||||||
$this->setError('Нельзя отказаться от услуг если имеется задолежнность!');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$this->removeRent();
|
|
||||||
$this->removeItems();
|
|
||||||
$this->setSuccess('Вы успешно отказались от аренды!');
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function changeType(int $type)
|
|
||||||
{
|
|
||||||
$this->remove();
|
|
||||||
$this->newRent($type);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function changeTime(int $orderedTime): bool
|
|
||||||
{
|
|
||||||
$daysByOrder = [
|
|
||||||
1 => 7,
|
|
||||||
2 => 14,
|
|
||||||
3 => 21,
|
|
||||||
4 => 28,
|
|
||||||
];
|
|
||||||
if (
|
|
||||||
!$this->typeIsAllowed($orderedTime) ||
|
|
||||||
!$this->pay(self::PRICEPERTYPE[$this->type][$orderedTime - 1])
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$this->time += 60 * 60 * 24 * $daysByOrder[$orderedTime];
|
|
||||||
$this->addRentTime($this->hid, $this->time);
|
|
||||||
$this->setSuccess('Всё прошло успешно!');
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return int|null
|
|
||||||
*/
|
|
||||||
public function getHid(): ?int
|
|
||||||
{
|
|
||||||
return $this->hid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return int|null
|
|
||||||
*/
|
|
||||||
public function getType(): ?int
|
|
||||||
{
|
|
||||||
return $this->type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return int|null
|
|
||||||
*/
|
|
||||||
public function getTime(): ?int
|
|
||||||
{
|
|
||||||
return $this->time;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getStatus(): array
|
|
||||||
{
|
|
||||||
return $this->status;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Models\Inventory;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class InventoryItem extends Item
|
class InventoryItem extends Item
|
||||||
{
|
{
|
||||||
private ?string $present;
|
private $present;
|
||||||
private int $ownerId;
|
private $owner_id;
|
||||||
|
private $db;
|
||||||
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,8 +20,9 @@ class InventoryItem extends Item
|
|||||||
public function __construct($row)
|
public function __construct($row)
|
||||||
{
|
{
|
||||||
parent::__construct($row);
|
parent::__construct($row);
|
||||||
$this->ownerId = $row->owner_id;
|
$this->owner_id = $row->owner_id;
|
||||||
$this->present = $row->present;
|
$this->present = $row->present;
|
||||||
|
$this->db = DBPDO::INIT();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function printInfo()
|
public function printInfo()
|
||||||
@ -34,29 +35,35 @@ class InventoryItem extends Item
|
|||||||
|
|
||||||
public function printImage()
|
public function printImage()
|
||||||
{
|
{
|
||||||
if (in_array($this->type, range(1, 12))) {
|
if (in_array($this->item_type, range(1, 12))) {
|
||||||
echo <<<HTML
|
echo <<<HTML
|
||||||
<a href=/main.php?edit=1&dress=$this->id title='Надеть'>
|
<a href=/main.php?edit=1&dress={$this->item_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;
|
||||||
} else {
|
} else {
|
||||||
echo <<<IMG
|
echo <<<IMG
|
||||||
<img src="/i/sh/$this->image" class="item-wrap-normal" alt="">
|
<img src="/i/sh/{$this->image}" class="item-wrap-normal" alt="">
|
||||||
IMG;
|
IMG;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function dressStatsChecks(): bool
|
public function printControls(){
|
||||||
|
// Для кнопок управления под картинкой.
|
||||||
|
}
|
||||||
|
|
||||||
|
private function dressStatsChecks(): ?string
|
||||||
{
|
{
|
||||||
$checkStats = new UserStats($this->ownerId);
|
$checkStats = new UserStats($this->owner_id);
|
||||||
$stat = $checkStats->getFullStats();
|
$stat = $checkStats->getFullStats();
|
||||||
return $this->needStrength > $stat->strength
|
return
|
||||||
|| $this->needDexterity > $stat->dexterity
|
$this->need_strength > $stat->strength
|
||||||
|| $this->needIntuition > $stat->intuition
|
|| $this->need_dexterity > $stat->dexterity
|
||||||
|| $this->needEndurance > $stat->endurance
|
|| $this->need_intuition > $stat->intuition
|
||||||
|| $this->needIntelligence > $stat->intelligence
|
|| $this->need_endurance > $stat->endurance
|
||||||
|| $this->needWisdom > $stat->wisdom;
|
|| $this->need_intelligence > $stat->intelligence
|
||||||
|
|| $this->need_wisdom > $stat->wisdom
|
||||||
|
? true : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,33 +79,33 @@ IMG;
|
|||||||
// считаем сколько ОДЕТЫХ предметов в слоте в который мы хотим одеть предмет. 1=просто вещь 1-3=шашни с кольцами
|
// считаем сколько ОДЕТЫХ предметов в слоте в который мы хотим одеть предмет. 1=просто вещь 1-3=шашни с кольцами
|
||||||
// Count добавленный в первый запрос возвращает одну строку в любом случае.
|
// Count добавленный в первый запрос возвращает одну строку в любом случае.
|
||||||
// fetch возвращает одну строку в любом случае.
|
// fetch возвращает одну строку в любом случае.
|
||||||
$weared = Inventory::getDressed($this->type, $this->ownerId);
|
$weared = $this->db->ofetchAll('SELECT dressed_slot FROM inventory WHERE dressed_slot != 0 AND item_type = ? AND owner_id = ?', [$this->item_type, $this->owner_id]);
|
||||||
$wearedCount = Inventory::countDressed($this->type, $this->ownerId);
|
$wearedCount = $this->db->ofetch('select count(dressed_slot) as c from inventory where dressed_slot !=0 and item_type = ? and owner_id = ?', [$this->item_type, $this->owner_id]);
|
||||||
// Если в слоте есть предмет(ы), забиваем их массив одетых в слот предметов.
|
// Если в слоте есть предмет(ы), забиваем их массив одетых в слот предметов.
|
||||||
if ($wearedCount) {
|
if ($wearedCount) {
|
||||||
foreach ($weared as $item) {
|
foreach ($weared as $item) {
|
||||||
$itemInSlot[] = $item->dressed_slot;
|
$itemInSlot[] = $item->dressed_slot;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (in_array($this->type, [
|
if (in_array($this->item_type, [
|
||||||
self::TYPE_HELMET, self::TYPE_ARMOR, self::TYPE_LEGS, self::TYPE_BOOTS,
|
self::ITEM_TYPE_HELMET, self::ITEM_TYPE_ARMOR, self::ITEM_TYPE_LEGS, self::ITEM_TYPE_BOOTS,
|
||||||
self::TYPE_GLOVES, self::TYPE_WEAPON, self::TYPE_SHIELD, self::TYPE_BELT,
|
self::ITEM_TYPE_GLOVES, self::ITEM_TYPE_WEAPON, self::ITEM_TYPE_SHIELD, self::ITEM_TYPE_BELT,
|
||||||
self::TYPE_AMULET,
|
self::ITEM_TYPE_AMULET,
|
||||||
])) {
|
])) {
|
||||||
//работаем с нормальными слотами
|
//работаем с нормальными слотами
|
||||||
if ($wearedCount->c == 1) {
|
if ($wearedCount->c == 1) {
|
||||||
//если слот занят, снимаем старый предмет и одеваем новый предмет
|
//если слот занят, снимаем старый предмет и одеваем новый предмет
|
||||||
Inventory::undressOne($itemInSlot[0], $this->ownerId);
|
$this->db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ? AND owner_id = ?', [$itemInSlot[0], $this->owner_id]);
|
||||||
Inventory::dressOne($this->id, $this->ownerId);
|
$this->db->execute('UPDATE inventory SET dressed_slot = item_type WHERE item_id = ? AND owner_id = ?', [$this->item_id, $this->owner_id]);
|
||||||
} elseif (!$wearedCount->c) {
|
} elseif (!$wearedCount->c) {
|
||||||
//если слот пуст, одеваем новый предмет
|
//если слот пуст, одеваем новый предмет
|
||||||
Inventory::dressOne($this->id, $this->ownerId);
|
$this->db->execute('UPDATE inventory SET dressed_slot = item_type WHERE item_id = ? AND owner_id = ?', [$this->item_id, $this->owner_id]);
|
||||||
} else {
|
} else {
|
||||||
/* проверка на переполнение слотов */
|
/* проверка на переполнение слотов */
|
||||||
$error = self::TOO_MANY_ITEMS_IN_SLOTS;
|
$error = self::TOO_MANY_ITEMS_IN_SLOTS;
|
||||||
DressedItems::undressAllItems($this->ownerId);
|
DressedItems::undressAllItems($this->owner_id);
|
||||||
}
|
}
|
||||||
} elseif ($this->type == self::TYPE_RING) {
|
} elseif ($this->item_type == self::ITEM_TYPE_RING) {
|
||||||
// работаем с кольцами
|
// работаем с кольцами
|
||||||
if ($wearedCount->c < 3) {
|
if ($wearedCount->c < 3) {
|
||||||
// Сравниваем массив колец и массив слотов для колец.
|
// Сравниваем массив колец и массив слотов для колец.
|
||||||
@ -106,14 +113,15 @@ IMG;
|
|||||||
// Сортируем массив свободных слотов по возрастанию.
|
// Сортируем массив свободных слотов по возрастанию.
|
||||||
sort($emptyRingSlots);
|
sort($emptyRingSlots);
|
||||||
// Одеваем предмет в первый свободный слот.
|
// Одеваем предмет в первый свободный слот.
|
||||||
Inventory::dressOneToSlot($this->id, $emptyRingSlots[0]);
|
$this->db->execute('update inventory set dressed_slot = ? where item_id = ?', [$emptyRingSlots[0], $this->item_id]);
|
||||||
} elseif ($wearedCount->c == 3) {
|
} elseif ($wearedCount->c == 3) {
|
||||||
// Cнимаем предмет из последнего слота 11 и одеваем новый предмет
|
// Cнимаем предмет из последнего слота 11 и одеваем новый предмет
|
||||||
Inventory::changeRings($this->id);
|
$this->db->execute('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = 11');
|
||||||
|
$this->db->execute('UPDATE inventory SET dressed_slot = 11 WHERE item_id = ?', $this->item_id);
|
||||||
} else {
|
} else {
|
||||||
/* проверка на переполнение слотов */
|
/* проверка на переполнение слотов */
|
||||||
$error = self::TOO_MANY_ITEMS_IN_SLOTS;
|
$error = self::TOO_MANY_ITEMS_IN_SLOTS;
|
||||||
DressedItems::undressAllItems($this->ownerId);
|
DressedItems::undressAllItems($this->owner_id);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$error = self::UNKNOWN_ITEM_TYPE;
|
$error = self::UNKNOWN_ITEM_TYPE;
|
||||||
@ -122,30 +130,9 @@ IMG;
|
|||||||
return $error ?? true;
|
return $error ?? true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Выбрасываем вещь.
|
public static function destroyItem($itemId)
|
||||||
public function drop(): string
|
|
||||||
{
|
{
|
||||||
if (empty($this->id)) {
|
DBPDO::INIT()->execute('delete from inventory where dressed_slot = 0 and owner_id = ? and item_id = ?', [$_SESSION['uid'], $itemId]);
|
||||||
return 'Ошибка: предмет не найден!';
|
|
||||||
}
|
|
||||||
if (Inventory::isWeared($this->id)) {
|
|
||||||
return 'Ошибка: нельзя выбросить одетый предмет!';
|
|
||||||
}
|
|
||||||
Inventory::destroyItem($this->id, $this->ownerId);
|
|
||||||
GameLogs::addUserLog(User::getInstance()->getId(), User::getInstance()->getLogin() . ' выбросил предмет ' . $this->name . ' id:(cap' . $this->id . ')');
|
|
||||||
return 'Предмет ' . $this->name . ' выброшен.';
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Снятие всех предметов, которые не подходят по статам. */
|
|
||||||
public static function autoDrop()
|
|
||||||
{
|
|
||||||
$di = new DressedItems(User::getInstance()->getId());
|
|
||||||
foreach ($di->getItemsInSlots() as $dressedItem) {
|
|
||||||
$itm = new self($dressedItem);
|
|
||||||
if (!$itm->dressStatsChecks()) {
|
|
||||||
$di->undressItem($dressedItem->dressed_slot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Надеюсь, временная заглушка, которая объединяет get_meshok() и другую выдачу одной строкой.
|
/** Надеюсь, временная заглушка, которая объединяет get_meshok() и другую выдачу одной строкой.
|
||||||
@ -153,9 +140,9 @@ IMG;
|
|||||||
*/
|
*/
|
||||||
public static function getWeightData(): string
|
public static function getWeightData(): string
|
||||||
{
|
{
|
||||||
$all = Inventory::getWeight(User::getInstance()->getId());
|
$query = 'select sum(weight) as `all`, strength * 4 as max from inventory left join users u on owner_id = id where owner_id = ?';
|
||||||
$max = User::getInstance()->stats()->getMaxWeight();
|
$weight = DBPDO::$db->ofetch($query, User::$current->getId());
|
||||||
$css = $all > $max ? ' style="color:maroon;"' : '';
|
$css = $weight->all > $weight->max ? ' style="color:maroon;"' : '';
|
||||||
return "<span$css>$all / $max</span>";
|
return "<span$css>$weight->all / $weight->max</span>";
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,49 +1,48 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class Item
|
class Item
|
||||||
{
|
{
|
||||||
protected int $id;
|
protected int $item_id;
|
||||||
protected string $name = '';
|
protected string $name = '';
|
||||||
protected int $type = self::TYPE_TRASH;
|
protected int $item_type = self::ITEM_TYPE_TRASH;
|
||||||
protected int $durability = 0;
|
protected int $durability = 0;
|
||||||
protected int $needStrength = 0;
|
protected int $need_strength = 0;
|
||||||
protected int $needDexterity = 0;
|
protected int $need_dexterity = 0;
|
||||||
protected int $needIntuition = 0;
|
protected int $need_intuition = 0;
|
||||||
protected int $needEndurance = 0;
|
protected int $need_endurance = 0;
|
||||||
protected int $needIntelligence = 0;
|
protected int $need_intelligence = 0;
|
||||||
protected int $needWisdom = 0;
|
protected int $need_wisdom = 0;
|
||||||
protected int $addStrength = 0;
|
protected int $add_strength = 0;
|
||||||
protected int $addDexterity = 0;
|
protected int $add_dexterity = 0;
|
||||||
protected int $addIntuition = 0;
|
protected int $add_intuition = 0;
|
||||||
protected int $addEndurance = 0;
|
protected int $add_endurance = 0;
|
||||||
protected int $addIntelligence = 0;
|
protected int $add_intelligence = 0;
|
||||||
protected int $addWisdom = 0;
|
protected int $add_wisdom = 0;
|
||||||
protected int $addAccuracy = 0;
|
protected int $add_accuracy = 0;
|
||||||
protected int $addEvasion = 0;
|
protected int $add_evasion = 0;
|
||||||
protected int $addCriticals = 0;
|
protected int $add_criticals = 0;
|
||||||
protected int $addMinPhysicalDamage = 0;
|
protected int $add_min_physical_damage = 0;
|
||||||
protected int $addMaxPhysicalDamage = 0;
|
protected int $add_max_physical_damage = 0;
|
||||||
protected int $weight = 0;
|
protected int $weight = 0;
|
||||||
protected string $image = '';
|
protected string $image = '';
|
||||||
protected int $cost = 0;
|
protected int $item_cost = 0;
|
||||||
public const TYPES_ALLOWED_IN_SLOTS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
public const ITEM_TYPES_ALLOWED_IN_SLOTS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
||||||
public const TYPE_HELMET = 1;
|
public const ITEM_TYPE_HELMET = 1;
|
||||||
public const TYPE_ARMOR = 2;
|
public const ITEM_TYPE_ARMOR = 2;
|
||||||
public const TYPE_LEGS = 3;
|
public const ITEM_TYPE_LEGS = 3;
|
||||||
public const TYPE_BOOTS = 4;
|
public const ITEM_TYPE_BOOTS = 4;
|
||||||
public const TYPE_GLOVES = 5;
|
public const ITEM_TYPE_GLOVES = 5;
|
||||||
public const TYPE_WEAPON = 6;
|
public const ITEM_TYPE_WEAPON = 6;
|
||||||
public const TYPE_SHIELD = 7;
|
public const ITEM_TYPE_SHIELD = 7;
|
||||||
public const TYPE_BELT = 8;
|
public const ITEM_TYPE_BELT = 8;
|
||||||
public const TYPE_RING = 9;
|
public const ITEM_TYPE_RING = 9;
|
||||||
public const TYPE_AMULET = 10;
|
public const ITEM_TYPE_AMULET = 10;
|
||||||
public const TYPE_CONSUMABLE = 20;
|
public const ITEM_TYPE_CONSUMABLE = 20;
|
||||||
public const TYPE_OTHER = 50;
|
public const ITEM_TYPE_OTHER = 50;
|
||||||
public const TYPE_TRASH = 100;
|
public const ITEM_TYPE_TRASH = 100;
|
||||||
private string $typename;
|
private string $typename;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,45 +66,45 @@ class Item
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($this->type) {
|
switch ($this->item_type) {
|
||||||
case self::TYPE_HELMET:
|
case self::ITEM_TYPE_HELMET:
|
||||||
$this->typename = 'Шлем';
|
$this->typename = 'Шлем';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_ARMOR:
|
case self::ITEM_TYPE_ARMOR:
|
||||||
$this->typename = 'Броня';
|
$this->typename = 'Броня';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_LEGS:
|
case self::ITEM_TYPE_LEGS:
|
||||||
$this->typename = 'Поножи';
|
$this->typename = 'Поножи';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_BOOTS:
|
case self::ITEM_TYPE_BOOTS:
|
||||||
$this->typename = 'Сапоги';
|
$this->typename = 'Сапоги';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_GLOVES:
|
case self::ITEM_TYPE_GLOVES:
|
||||||
$this->typename = 'Перчатки';
|
$this->typename = 'Перчатки';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_WEAPON:
|
case self::ITEM_TYPE_WEAPON:
|
||||||
$this->typename = 'Оружие';
|
$this->typename = 'Оружие';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_SHIELD:
|
case self::ITEM_TYPE_SHIELD:
|
||||||
$this->typename = 'Щит';
|
$this->typename = 'Щит';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_BELT:
|
case self::ITEM_TYPE_BELT:
|
||||||
$this->typename = 'Пояс';
|
$this->typename = 'Пояс';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_RING:
|
case self::ITEM_TYPE_RING:
|
||||||
$this->typename = 'Кольцо';
|
$this->typename = 'Кольцо';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_AMULET:
|
case self::ITEM_TYPE_AMULET:
|
||||||
$this->typename = 'Амулет';
|
$this->typename = 'Амулет';
|
||||||
break;
|
break;
|
||||||
case self::TYPE_CONSUMABLE:
|
case self::ITEM_TYPE_CONSUMABLE:
|
||||||
$this->typename = 'Расходуемый предмет';
|
$this->typename = 'Расходуемый предмет';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$this->typename = 'Хлам';
|
$this->typename = 'Хлам';
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->cost = $this->calculateItemCost();
|
$this->item_cost = $this->calculateItemCost();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Рассчёт стоимости предмета в зависимости от его характеристик.
|
/** Рассчёт стоимости предмета в зависимости от его характеристик.
|
||||||
@ -113,26 +112,26 @@ class Item
|
|||||||
*/
|
*/
|
||||||
protected function calculateItemCost(): int
|
protected function calculateItemCost(): int
|
||||||
{
|
{
|
||||||
$sumStats =
|
$sum_stats =
|
||||||
$this->addStrength +
|
$this->add_strength +
|
||||||
$this->addDexterity +
|
$this->add_dexterity +
|
||||||
$this->addIntuition +
|
$this->add_intuition +
|
||||||
$this->addEndurance +
|
$this->add_endurance +
|
||||||
$this->addIntelligence +
|
$this->add_intelligence +
|
||||||
$this->addWisdom;
|
$this->add_wisdom;
|
||||||
$sumMods =
|
$sum_mods =
|
||||||
$this->addAccuracy +
|
$this->add_accuracy +
|
||||||
$this->addEvasion +
|
$this->add_evasion +
|
||||||
$this->addCriticals;
|
$this->add_criticals;
|
||||||
$sumDamage =
|
$sum_damage =
|
||||||
$this->addMinPhysicalDamage +
|
$this->add_min_physical_damage +
|
||||||
$this->addMaxPhysicalDamage;
|
$this->add_max_physical_damage;
|
||||||
// За каждые N параметров повышаем множитель на 1 чтобы цена пропрорционально росла.
|
// За каждые N параметров повышаем множитель на 1 чтобы цена пропрорционально росла.
|
||||||
$statsCostModifier = 5 + floor($sumStats / 10);
|
$stats_cost_modifier = 5 + floor($sum_stats / 10);
|
||||||
$modsCostModifier = 2 + floor($sumMods / 50);
|
$mods_cost_modifier = 2 + floor($sum_mods / 50);
|
||||||
$damageCostModifier = 1 + floor($sumDamage / 100);
|
$damage_cost_modifier = 1 + floor($sum_damage / 100);
|
||||||
$result = intval($sumStats * $statsCostModifier + $sumMods * $modsCostModifier + $sumDamage * $damageCostModifier);
|
$result = intval($sum_stats * $stats_cost_modifier + $sum_mods * $mods_cost_modifier + $sum_damage * $damage_cost_modifier);
|
||||||
return max($result, 1);
|
return $result < 1 ? 1 : $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function wrap(int $number): string
|
protected function wrap(int $number): string
|
||||||
@ -147,26 +146,26 @@ class Item
|
|||||||
public function getAllInfo(): string
|
public function getAllInfo(): string
|
||||||
{
|
{
|
||||||
$needsLines = [
|
$needsLines = [
|
||||||
'сила' => $this->needStrength,
|
'сила' => $this->need_strength,
|
||||||
'ловкость' => $this->needDexterity,
|
'ловкость' => $this->need_dexterity,
|
||||||
'интуиция' => $this->needIntuition,
|
'интуиция' => $this->need_intuition,
|
||||||
'выносливость' => $this->needEndurance,
|
'выносливость' => $this->need_endurance,
|
||||||
'интеллект' => $this->needIntelligence,
|
'интеллект' => $this->need_intelligence,
|
||||||
'мудрость' => $this->needWisdom,
|
'мудрость' => $this->need_wisdom,
|
||||||
];
|
];
|
||||||
$addsLines = [
|
$addsLines = [
|
||||||
'Сила' => $this->addStrength,
|
'Сила' => $this->add_strength,
|
||||||
'Ловкость' => $this->addDexterity,
|
'Ловкость' => $this->add_dexterity,
|
||||||
'Интуиция' => $this->addIntuition,
|
'Интуиция' => $this->add_intuition,
|
||||||
'Выносливость' => $this->addEndurance,
|
'Выносливость' => $this->add_endurance,
|
||||||
'Интеллект' => $this->addIntelligence,
|
'Интеллект' => $this->add_intelligence,
|
||||||
'Мудрость' => $this->addWisdom,
|
'Мудрость' => $this->add_wisdom,
|
||||||
'Точность' => $this->addAccuracy,
|
'Точность' => $this->add_accuracy,
|
||||||
'Увёртливость' => $this->addEvasion,
|
'Увёртливость' => $this->add_evasion,
|
||||||
'Шанс крита' => $this->addCriticals,
|
'Шанс крита' => $this->add_criticals,
|
||||||
];
|
];
|
||||||
$str = "<b>$this->name</b> (Масса: $this->weight)";
|
$str = "<b>$this->name</b> (Масса: $this->weight)";
|
||||||
$str .= '<br> Стоимость: ' . $this->cost;
|
$str .= '<br> Стоимость: ' . $this->item_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) {
|
||||||
@ -179,12 +178,12 @@ class Item
|
|||||||
$str .= "<br>$stat" . $this->wrap($value);
|
$str .= "<br>$stat" . $this->wrap($value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($this->addMinPhysicalDamage && !$this->addMaxPhysicalDamage) {
|
if ($this->add_min_physical_damage && !$this->add_max_physical_damage) {
|
||||||
$damage = $this->addMinPhysicalDamage . ' - ' . $this->addMinPhysicalDamage;
|
$damage = $this->add_min_physical_damage . ' - ' . $this->add_min_physical_damage;
|
||||||
} elseif (!$this->addMinPhysicalDamage && $this->addMaxPhysicalDamage) {
|
} elseif (!$this->add_min_physical_damage && $this->add_max_physical_damage) {
|
||||||
$damage = $this->addMaxPhysicalDamage . ' - ' . $this->addMaxPhysicalDamage;
|
$damage = $this->add_max_physical_damage . ' - ' . $this->add_max_physical_damage;
|
||||||
} elseif ($this->addMinPhysicalDamage && $this->addMaxPhysicalDamage) {
|
} elseif ($this->add_min_physical_damage && $this->add_max_physical_damage) {
|
||||||
$damage = $this->addMinPhysicalDamage . ' - ' . $this->addMaxPhysicalDamage;
|
$damage = $this->add_min_physical_damage . ' - ' . $this->add_max_physical_damage;
|
||||||
}
|
}
|
||||||
if (isset($damage)) {
|
if (isset($damage)) {
|
||||||
$str .= '<br>Урон: ' . $damage;
|
$str .= '<br>Урон: ' . $damage;
|
||||||
@ -192,8 +191,8 @@ class Item
|
|||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getItemById($itemId): Item
|
public static function getItemById($item_id): Item
|
||||||
{
|
{
|
||||||
return new Item(Db::getInstance()->ofetch('select * from items where id = ?', $itemId));
|
return new Item(DBPDO::$db->ofetch('select * from items where id = ?', $item_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,13 +3,13 @@
|
|||||||
// Магия лечения травм
|
// Магия лечения травм
|
||||||
namespace Battles\Magic;
|
namespace Battles\Magic;
|
||||||
|
|
||||||
use Battles\Database\Db, Battles\User, Battles\UserEffect;
|
use Battles\UserEffects, Battles\Database\DBPDO, Battles\User;
|
||||||
|
|
||||||
class CureInjury extends Magic
|
class CureInjury extends Magic
|
||||||
{
|
{
|
||||||
private $target;
|
private $target;
|
||||||
private $login;
|
private $login;
|
||||||
//use UserEffects;
|
use UserEffects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Магия лечения травм. Если у персонажа несколько травм, лечится самая тяжёлая.
|
* Магия лечения травм. Если у персонажа несколько травм, лечится самая тяжёлая.
|
||||||
@ -18,21 +18,23 @@ class CureInjury extends Magic
|
|||||||
*/
|
*/
|
||||||
public function __construct(int $target, int $injuryType)
|
public function __construct(int $target, int $injuryType)
|
||||||
{
|
{
|
||||||
$db = Db::getInstance();
|
$db = DBPDO::INIT();
|
||||||
$this->target = $target;
|
$this->target = $target;
|
||||||
if (!$this->isUsable()) {
|
if (!$this->isUsable()) {
|
||||||
return $this->status;
|
return $this->status;
|
||||||
}
|
}
|
||||||
$ok = null;
|
$ok = null;
|
||||||
$injury = $db->ofetch('SELECT effect_id, type, name FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ? ORDER BY type DESC LIMIT 1', $target);
|
$injury = $db->ofetch('SELECT effect_id, type, name FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ? ORDER BY type DESC LIMIT 1', $target);
|
||||||
if (in_array($injury->type, [11, 12, 13, 14]) && $injuryType >= $injury->type && UserEffect::remove($target, $injury->effect_id)) {
|
if (in_array($injury->type, [11, 12, 13, 14]) && $injuryType >= $injury->type) {
|
||||||
if (empty($injury->name) || $injury->name === 'Неизвестный эффект') {
|
$db->execute('DELETE FROM users_effects WHERE effect_id = ?', $injury->effect_id);
|
||||||
$injuryName = UserEffect::$effectName[$injury->type];
|
if (empty($injury->name) || $injury->name == 'Неизвестный эффект') {
|
||||||
|
$injuryName = self::$effectName[$injury->type];
|
||||||
} else {
|
} else {
|
||||||
$injuryName = $injury->name;
|
$injuryName = $injury->name;
|
||||||
}
|
}
|
||||||
$ok = "Вы вылечили повреждение ${injuryName} персонажу $this->login.";
|
$ok = "Вы вылечили повреждение ${injuryName} персонажу $this->login.";
|
||||||
} elseif ($injury->effect_id && $injuryType === 15 && UserEffect::massRemove($target, [11,12,13,14])) {
|
} elseif ($injury->effect_id && $injuryType == 15) {
|
||||||
|
$db->execute('DELETE FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ?', $target);
|
||||||
$ok = "Вы вылечили все повреждения персонажу $this->login.";
|
$ok = "Вы вылечили все повреждения персонажу $this->login.";
|
||||||
}
|
}
|
||||||
return $ok;
|
return $ok;
|
||||||
@ -44,18 +46,13 @@ class CureInjury extends Magic
|
|||||||
*/
|
*/
|
||||||
private function isUsable(): bool
|
private function isUsable(): bool
|
||||||
{
|
{
|
||||||
$this->target = $this->target == $_SESSION['uid'] ? User::getInstance() : User::getInstance($this->target);
|
$caster = new User($_SESSION['uid']);
|
||||||
|
if ($this->target == $_SESSION['uid']) {
|
||||||
|
$this->target = $caster;
|
||||||
|
} else {
|
||||||
|
$this->target = new User($this->target);
|
||||||
|
}
|
||||||
$this->login = $this->target->getLogin();
|
$this->login = $this->target->getLogin();
|
||||||
return (
|
return ($this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster) && $this->isNotInBattle($caster));
|
||||||
$this->isVisible(User::getInstance(), $this->target) &&
|
|
||||||
$this->isNotDead(User::getInstance()) &&
|
|
||||||
$this->enoughMana(User::getInstance()) &&
|
|
||||||
$this->isNotInBattle(User::getInstance())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function cast($target, $type): self
|
|
||||||
{
|
|
||||||
return new self($target, $type);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,7 +2,7 @@
|
|||||||
// Магия восстановления здоровья
|
// Магия восстановления здоровья
|
||||||
use Battles\Magic\Magic;
|
use Battles\Magic\Magic;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class Healing extends Magic
|
class Healing extends Magic
|
||||||
{
|
{
|
||||||
@ -30,7 +30,7 @@ class Healing extends Magic
|
|||||||
if ($healHealthAmount > $this->target->maxHealth) {
|
if ($healHealthAmount > $this->target->maxHealth) {
|
||||||
$healHealthAmount = $this->target->maxHealth;
|
$healHealthAmount = $this->target->maxHealth;
|
||||||
}
|
}
|
||||||
Db::getInstance()->execute('UPDATE users SET health = ? WHERE id = ?', [$healHealthAmount, $this->target->id]);
|
DBPDO::INIT()->execute('UPDATE users SET health = ? WHERE id = ?', [$healHealthAmount, $this->target->id]);
|
||||||
$targetName = $this->target->login;
|
$targetName = $this->target->login;
|
||||||
return "Вы восстановили ${healHealthAmount} здоровья персонажу ${targetName}.";
|
return "Вы восстановили ${healHealthAmount} здоровья персонажу ${targetName}.";
|
||||||
}
|
}
|
||||||
@ -41,7 +41,12 @@ class Healing extends Magic
|
|||||||
*/
|
*/
|
||||||
private function isUsable(): bool
|
private function isUsable(): bool
|
||||||
{
|
{
|
||||||
$this->target = $this->target == $_SESSION['uid'] ? User::getInstance() : User::getInstance($this->target);
|
$caster = new User($_SESSION['uid']);
|
||||||
return $this->isVisible(User::getInstance(), $this->target) && $this->isNotDead(User::getInstance()) && $this->enoughMana(User::getInstance()) && $this->isSuccess(User::getInstance());
|
if ($this->target == $_SESSION['uid']) {
|
||||||
|
$this->target = $caster;
|
||||||
|
} else {
|
||||||
|
$this->target = new User($this->target);
|
||||||
|
}
|
||||||
|
return $this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster) && $this->isSuccess($caster);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
# Date: 16.09.2020 (08:45)
|
# Date: 16.09.2020 (08:45)
|
||||||
namespace Battles\Magic;
|
namespace Battles\Magic;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class Magic
|
class Magic
|
||||||
{
|
{
|
||||||
protected string $status;
|
protected $status;
|
||||||
private Db $db;
|
|
||||||
private object $magic;
|
|
||||||
|
|
||||||
public function __construct(Db $db, int $id)
|
protected function isVisible($caster, $target):bool
|
||||||
{
|
|
||||||
$this->magic = $db->ofetch('select * from magic where id = ?', $id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMagic(): object
|
|
||||||
{
|
|
||||||
return $this->magic;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function isVisible($caster, $target): bool
|
|
||||||
{
|
{
|
||||||
if ($caster->battle != $target->battle || $caster->room != $target->room) {
|
if ($caster->battle != $target->battle || $caster->room != $target->room) {
|
||||||
$this->status = 'Вы не видите цель!';
|
$this->status = 'Вы не видите цель!';
|
||||||
@ -30,7 +15,7 @@ class Magic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function isNotDead($caster): bool
|
protected function isNotDead($caster):bool
|
||||||
{
|
{
|
||||||
if ($caster->health < 1) {
|
if ($caster->health < 1) {
|
||||||
$this->status = 'Вы мертвы!';
|
$this->status = 'Вы мертвы!';
|
||||||
@ -40,7 +25,7 @@ class Magic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function enoughMana($caster): bool
|
protected function enoughMana($caster):bool
|
||||||
{
|
{
|
||||||
if ($caster->mana < 1) {
|
if ($caster->mana < 1) {
|
||||||
$this->status = 'Недостаточно пыли!';
|
$this->status = 'Недостаточно пыли!';
|
||||||
@ -50,7 +35,7 @@ class Magic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function isNotInBattle($caster): bool
|
protected function isNotInBattle($caster):bool
|
||||||
{
|
{
|
||||||
if ($caster->battle) {
|
if ($caster->battle) {
|
||||||
$this->status = 'Невозможно применить в поединке!';
|
$this->status = 'Невозможно применить в поединке!';
|
||||||
@ -67,12 +52,12 @@ class Magic
|
|||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function isSuccess($caster, int $difficulty = 40): bool
|
protected function isSuccess($caster, int $difficulty = 40):bool
|
||||||
{
|
{
|
||||||
# 40 - потолок стата.
|
# 40 - потолок стата.
|
||||||
if ($difficulty > 40) {
|
if ($difficulty > 40) {
|
||||||
$difficulty = 40;
|
$difficulty = 40;
|
||||||
}
|
}
|
||||||
return mt_rand(1, $difficulty) < $caster->intelligence;
|
return mt_rand(1,$difficulty) < $caster->intelligence;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
namespace Battles\Magic;
|
namespace Battles\Magic;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\DressedItems;
|
use Battles\DressedItems;
|
||||||
use Battles\Item;
|
use Battles\Item;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
@ -25,21 +25,22 @@ class Sharpen extends Magic
|
|||||||
if (!$this->isUsable()) {
|
if (!$this->isUsable()) {
|
||||||
return $this->status;
|
return $this->status;
|
||||||
}
|
}
|
||||||
$item = DressedItems::getDressedItemBySlot(Item::TYPE_WEAPON, $_SESSION['uid']);
|
$item = DressedItems::getDressedItemBySlot(Item::ITEM_TYPE_WEAPON, $_SESSION['uid']);
|
||||||
// Проверяем, что в названии предмета нет цифр и плюсов.
|
// Проверяем, что в названии предмета нет цифр и плюсов.
|
||||||
if (preg_match('/\+\d/', $item->name)) {
|
if (preg_match('/[\W\S]+\+\[?[\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 inventory SET name = ?, add_min_physical_damage = ?, add_max_physical_damage = ? WHERE item_id = ? ', [$newItemName, $newMinPhysicalDamage, $newMaxPhysicalDamage, $item->item_id]);
|
DBPDO::INIT()->execute('UPDATE battles.inventory SET name = ?, add_min_physical_damage = ?, add_max_physical_damage = ? WHERE item_id = ? ', [$newItemName, $newMinPhysicalDamage, $newMaxPhysicalDamage, $item['item_id']]);
|
||||||
return "У вас получилось изготовить предмет $newItemName!";
|
return "У вас получилось изготовить предмет $newItemName!";
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isUsable(): bool
|
private function isUsable(): bool
|
||||||
{
|
{
|
||||||
return $this->isNotInBattle(User::getInstance()) && $this->isSuccess(User::getInstance(), $this->magicDifficulty);
|
$caster = new User($_SESSION['uid']);
|
||||||
|
return $this->isNotInBattle($caster) && $this->isSuccess($caster, $this->magicDifficulty);
|
||||||
}
|
}
|
||||||
}
|
}
|
39
classes/Battles/Models/EffectsModel.php
Normal file
39
classes/Battles/Models/EffectsModel.php
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Author: lopiu
|
||||||
|
* Date: 05.07.2020
|
||||||
|
* Time: 23:32
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Battles\Models;
|
||||||
|
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
|
class EffectsModel
|
||||||
|
{
|
||||||
|
protected $DB;
|
||||||
|
const EFFECT_HIDEUSERINFO = 5; // Обезлик
|
||||||
|
|
||||||
|
public function __construct(int $user_id)
|
||||||
|
{
|
||||||
|
$this->DB = DBPDO::INIT()->ofetchAll('SELECT * FROM users_effects WHERE owner_id = ?', $user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка обезличен ли персонаж.
|
||||||
|
* @return int date() до конца эффекта или 0.
|
||||||
|
*/
|
||||||
|
public function getHideUserInfoStatus(): int
|
||||||
|
{
|
||||||
|
if ($this->DB) {
|
||||||
|
$i = 0;
|
||||||
|
while ($i < count($this->DB)) {
|
||||||
|
if ($this->DB[$i]->type == self::EFFECT_HIDEUSERINFO) {
|
||||||
|
return $this->DB[$i]->remaining_time;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@ -1,119 +0,0 @@
|
|||||||
<?php
|
|
||||||
# Date: 23.02.2022 (2:47)
|
|
||||||
namespace Battles\Models;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class Inventory
|
|
||||||
{
|
|
||||||
public static function getWeight(int $userId): int
|
|
||||||
{
|
|
||||||
return Db::getInstance()->fetchColumn(
|
|
||||||
'select sum(weight) from inventory where owner_id = ? and on_sale = 0',
|
|
||||||
$userId
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getBonuses(int $userId)
|
|
||||||
{
|
|
||||||
return Db::getInstance()->ofetch(
|
|
||||||
"select
|
|
||||||
sum(add_strength) as item_strength,
|
|
||||||
sum(add_dexterity) as item_dexterity,
|
|
||||||
sum(add_intuition) as item_intuition,
|
|
||||||
sum(add_endurance) as item_endurance,
|
|
||||||
sum(add_intelligence) as item_intelligence,
|
|
||||||
sum(add_wisdom) as item_wisdom,
|
|
||||||
sum(add_accuracy) as item_accuracy,
|
|
||||||
sum(add_evasion) as item_evasion,
|
|
||||||
sum(add_criticals) as item_criticals,
|
|
||||||
sum(add_min_physical_damage) as item_min_physical_damage,
|
|
||||||
sum(add_max_physical_damage) as item_max_physical_damage
|
|
||||||
from
|
|
||||||
inventory
|
|
||||||
where
|
|
||||||
dressed_slot != 0 and owner_id = ?",
|
|
||||||
$userId
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getDressed(int $itemType, int $userId): object
|
|
||||||
{
|
|
||||||
return Db::getInstance()->ofetchAll(
|
|
||||||
'SELECT
|
|
||||||
dressed_slot
|
|
||||||
FROM
|
|
||||||
inventory
|
|
||||||
WHERE
|
|
||||||
dressed_slot != 0 AND item_type = ? AND owner_id = ?',
|
|
||||||
[$itemType, $userId]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function countDressed(int $itemType, int $userId): object
|
|
||||||
{
|
|
||||||
return Db::getInstance()->ofetchAll(
|
|
||||||
'SELECT
|
|
||||||
count(dressed_slot)
|
|
||||||
FROM
|
|
||||||
inventory
|
|
||||||
WHERE
|
|
||||||
dressed_slot != 0 AND item_type = ? AND owner_id = ?',
|
|
||||||
[$itemType, $userId]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function undressOne(int $slot, int $userId)
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute(
|
|
||||||
'UPDATE
|
|
||||||
inventory
|
|
||||||
SET
|
|
||||||
dressed_slot = 0
|
|
||||||
WHERE
|
|
||||||
dressed_slot = ? AND owner_id = ?',
|
|
||||||
[$slot, $userId]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function dressOne(int $itemId, int $userId)
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute(
|
|
||||||
'UPDATE
|
|
||||||
inventory
|
|
||||||
SET
|
|
||||||
dressed_slot = item_type
|
|
||||||
WHERE
|
|
||||||
item_id = ? AND owner_id = ?',
|
|
||||||
[$itemId, $userId]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function dressOneToSlot(int $itemId, int $slot)
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute('UPDATE inventory SET dressed_slot = ? WHERE item_id = ?', [$slot, $itemId]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function destroyItem(int $itemId, int $userId)
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute(
|
|
||||||
'delete
|
|
||||||
from
|
|
||||||
inventory
|
|
||||||
where
|
|
||||||
dressed_slot = 0 and owner_id = ? and item_id = ?',
|
|
||||||
[$userId, $itemId]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
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 = 11 WHERE item_id = ?', $itemId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function isWeared(int $itemId): bool
|
|
||||||
{
|
|
||||||
return Db::getInstance()->fetchColumn('select count(*) from inventory where item_id = ? and dressed_slot > 0', $itemId) > 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Author: lopiu
|
|
||||||
* Date: 04.07.2020
|
|
||||||
* Time: 13:17
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Battles\Models;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
|
|
||||||
class Presents
|
|
||||||
{
|
|
||||||
public function getAll($userId = null)
|
|
||||||
{
|
|
||||||
if (is_null($userId)) {
|
|
||||||
$userId = User::getInstance()->getId();
|
|
||||||
}
|
|
||||||
return Db::getInstance()->execute('SELECT sender_id, image FROM `users_presents` WHERE owner_id = ?', $userId);
|
|
||||||
}
|
|
||||||
}
|
|
26
classes/Battles/Models/PresentsModel.php
Normal file
26
classes/Battles/Models/PresentsModel.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Author: lopiu
|
||||||
|
* Date: 04.07.2020
|
||||||
|
* Time: 13:17
|
||||||
|
*/
|
||||||
|
namespace Battles\Models;
|
||||||
|
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
|
class PresentsModel
|
||||||
|
{
|
||||||
|
protected $DB;
|
||||||
|
|
||||||
|
public function __construct(int $user_id)
|
||||||
|
{
|
||||||
|
if (!$this->DB) {
|
||||||
|
$this->DB = DBPDO::INIT()->execute('SELECT sender_id, image FROM `users_presents` WHERE owner_id = ?', $user_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAllPresents()
|
||||||
|
{
|
||||||
|
return $this->DB;
|
||||||
|
}
|
||||||
|
}
|
@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
# Date: 23.02.2022 (3:02)
|
|
||||||
namespace Battles\Models\User;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class Effects
|
|
||||||
{
|
|
||||||
public static function getStatMods(int $userId)
|
|
||||||
{
|
|
||||||
return Db::getInstance()->ofetch(
|
|
||||||
"select
|
|
||||||
sum(mod_strength) as effect_strength,
|
|
||||||
sum(mod_dexterity) as effect_dexterity,
|
|
||||||
sum(mod_intuition) as effect_intuition,
|
|
||||||
sum(mod_endurance) as effect_endurance,
|
|
||||||
sum(mod_intelligence) as effect_intelligence,
|
|
||||||
sum(mod_wisdom) as effect_wisdom
|
|
||||||
from
|
|
||||||
users_effects
|
|
||||||
where
|
|
||||||
owner_id = ?",
|
|
||||||
$userId
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getAll(int $userId): object
|
|
||||||
{
|
|
||||||
return Db::getInstance()->ofetchAll('SELECT * FROM users_effects WHERE owner_id = ?', $userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function count(int $userId, int $type)
|
|
||||||
{
|
|
||||||
return Db::getInstance()->fetchColumn('select count(*) from users_effects where type = ? and owner_id = ?', [$type, $userId]);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
<?php
|
|
||||||
# Date: 23.02.2022 (2:32)
|
|
||||||
namespace Battles\Models\User;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class Stats
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param int|string $user
|
|
||||||
*/
|
|
||||||
public static function getAll($user)
|
|
||||||
{
|
|
||||||
$col = ctype_digit(strval($user)) ? 'id' : 'login';
|
|
||||||
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 $userId)
|
|
||||||
{
|
|
||||||
|
|
||||||
Db::getInstance()->execute(
|
|
||||||
"UPDATE
|
|
||||||
users
|
|
||||||
SET
|
|
||||||
$stat = $stat + 1,
|
|
||||||
free_stat_points = free_stat_points - 1
|
|
||||||
WHERE
|
|
||||||
id = ?",
|
|
||||||
$userId
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function save(array $vars)
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute(
|
|
||||||
'update
|
|
||||||
users
|
|
||||||
set
|
|
||||||
strength = ?,
|
|
||||||
dexterity = ?,
|
|
||||||
intuition = ?,
|
|
||||||
endurance = ?,
|
|
||||||
intelligence = ?,
|
|
||||||
wisdom = ?,
|
|
||||||
health = ?,
|
|
||||||
mana = ?,
|
|
||||||
free_stat_points = ?,
|
|
||||||
level = ?
|
|
||||||
where
|
|
||||||
id = ?',
|
|
||||||
$vars
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class Moderation
|
class Moderation
|
||||||
{
|
{
|
||||||
@ -17,50 +17,50 @@ class Moderation
|
|||||||
|
|
||||||
public static function muteChat(int $target, int $time)
|
public static function muteChat(int $target, int $time)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, UserEffect::$effectName[2]);
|
self::addEffectStatusToUserLog($target, UserEffects::$effectName[2]);
|
||||||
UserEffect::add($target, 2, UserEffect::$effectName[2], $time);
|
User::addUserEffect($target, 2, UserEffects::$effectName[2], $time);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function unmuteChat(int $target)
|
public static function unmuteChat(int $target)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, UserEffect::$effectName[2] . self::STATUS_OFF);
|
self::addEffectStatusToUserLog($target, UserEffects::$effectName[2] . self::STATUS_OFF);
|
||||||
UserEffect::remove($target, 2);
|
User::removeUserEffect($target, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function muteForum(int $target, int $time)
|
public static function muteForum(int $target, int $time)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, UserEffect::$effectName[3]);
|
self::addEffectStatusToUserLog($target, UserEffects::$effectName[3]);
|
||||||
UserEffect::add($target, 3, UserEffect::$effectName[3], $time);
|
User::addUserEffect($target, 3, UserEffects::$effectName[3], $time);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function unmuteForum(int $target)
|
public static function unmuteForum(int $target)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, UserEffect::$effectName[3] . self::STATUS_OFF);
|
self::addEffectStatusToUserLog($target, UserEffects::$effectName[3] . self::STATUS_OFF);
|
||||||
UserEffect::remove($target, 3);
|
User::removeUserEffect($target, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function hideUserInfo(int $target, int $time)
|
public static function hideUserInfo(int $target, int $time)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, UserEffect::$effectName[5]);
|
self::addEffectStatusToUserLog($target, UserEffects::$effectName[5]);
|
||||||
UserEffect::add($target, 5, UserEffect::$effectName[5], $time);
|
User::addUserEffect($target, 5, UserEffects::$effectName[5], $time);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function unHideUserInfo(int $target)
|
public static function unHideUserInfo(int $target)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, UserEffect::$effectName[5] . self::STATUS_OFF);
|
self::addEffectStatusToUserLog($target, UserEffects::$effectName[5] . self::STATUS_OFF);
|
||||||
UserEffect::remove($target, 5);
|
User::removeUserEffect($target, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function blockUser(int $target)
|
public static function blockUser(int $target)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, "Блокировка");
|
self::addEffectStatusToUserLog($target, "Блокировка");
|
||||||
Db::getInstance()->execute('UPDATE users SET block = 1 WHERE id = ?', $target);
|
DBPDO::INIT()->execute('UPDATE battles.users SET block = 1 WHERE id = ?', $target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function unblockUser(int $target)
|
public static function unBlockUser(int $target)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, "Блокировка" . self::STATUS_OFF);
|
self::addEffectStatusToUserLog($target, "Блокировка" . self::STATUS_OFF);
|
||||||
Db::getInstance()->execute('UPDATE users SET block = 0 WHERE block = 1 AND id = ?', $target);
|
DBPDO::INIT()->execute('UPDATE battles.users SET block = 0 WHERE block = 1 AND id = ?', $target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function addToUserLog(int $target, string $message, int $senderId)
|
public static function addToUserLog(int $target, string $message, int $senderId)
|
||||||
@ -70,17 +70,17 @@ class Moderation
|
|||||||
|
|
||||||
public static function setAlign(int $target, int $align)
|
public static function setAlign(int $target, int $align)
|
||||||
{
|
{
|
||||||
Db::getInstance()->execute('UPDATE users SET align = ? WHERE id = ?', [$align, $target]);
|
DBPDO::INIT()->execute('UPDATE users SET align = ? WHERE id = ?', [$align, $target]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function addChatSysMsg(string $message)
|
public static function addChatSysMsg(string $message)
|
||||||
{
|
{
|
||||||
Db::getInstance()->execute('INSERT INTO chat (user_id,msg,type) VALUES (-1,?,?)', [$message, 'sys']);
|
DBPDO::INIT()->execute('INSERT INTO chat (user_id,msg,type) VALUES (-1,?,?)', [$message, 'sys']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function addUserCheck(int $target)
|
public static function addUserCheck(int $target)
|
||||||
{
|
{
|
||||||
self::addEffectStatusToUserLog($target, UserEffect::$effectName[20]);
|
self::addEffectStatusToUserLog($target, UserEffects::$effectName[20]);
|
||||||
UserEffect::add($target, 20, UserEffect::$effectName[20], strtotime('3days'));
|
User::addUserEffect($target, 20, UserEffects::$effectName[20], strtotime('3days'));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,66 +1,49 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Разные способы отображения строки с логином персонажа.
|
* Разные способы отображения строки с логином персонажа.
|
||||||
*/
|
*/
|
||||||
const INVIS = '<i>невидимка</i>';
|
const INVIS = '<i>невидимка</i>';
|
||||||
class Nick
|
class Nick extends User
|
||||||
{
|
{
|
||||||
private User $user;
|
private function getInvisibilityStatus()
|
||||||
|
|
||||||
private function __construct(int $userid)
|
|
||||||
{
|
{
|
||||||
$this->user = User::getInstance($userid);
|
return self::$db->fetch('SELECT 1 FROM users_effects WHERE type = 1022 AND owner_id = ?', $this->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображение иконки склонности.
|
* Отображение иконки склонности.
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function getAlignImage(): ?string
|
private function getAlignToNickname():?string
|
||||||
{
|
{
|
||||||
return $this->getImage($this->user->getAlign(), '/i/align_');
|
if ($this->align) {
|
||||||
|
return sprintf('<img src="i/align_%s.gif">', $this->align);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображение иконки клана.
|
* Отображение иконки клана.
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function getClanImage(): string
|
private function getClanToNickname():?string
|
||||||
{
|
{
|
||||||
return $this->getImage($this->user->getClan(), '/i/clan/');
|
if ($this->clan) {
|
||||||
}
|
return sprintf('<img src="i/clan/%s.png">', $this->clan);
|
||||||
|
} else {
|
||||||
private function getImage($name, $path): string
|
return null;
|
||||||
{
|
|
||||||
if (empty($name)) {
|
|
||||||
return '';
|
|
||||||
}
|
}
|
||||||
$file = $path . $name . '.png';
|
|
||||||
$alt = '';
|
|
||||||
if (strpos($path, 'align')) {
|
|
||||||
$alt = '{a:' . $name . '}';
|
|
||||||
} elseif (strpos($path, 'clan')) {
|
|
||||||
$alt = '{c:' . $name . '}';
|
|
||||||
}
|
|
||||||
return file_exists($file) ? "<img src='$file' alt='$alt'>" : $alt;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getInfolinkImage(): string
|
|
||||||
{
|
|
||||||
return "<a href='inf.php?" . $this->user->getLogin() . "' target='_blank'><img src='i/inf.gif' alt='Ссылка на профиль'></a>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вызов класса из самого себя. Читать про обратное связывание и пытаться что-то понять.
|
* Вызов класса из самого себя. Читать про обратное связывание и пытаться что-то понять.
|
||||||
*
|
|
||||||
* @param $playerId
|
* @param $playerId
|
||||||
*
|
*
|
||||||
* @return Nick
|
* @return Nick
|
||||||
*/
|
*/
|
||||||
public static function id($playerId): self
|
public static function id($playerId): Nick
|
||||||
{
|
{
|
||||||
return new self($playerId);
|
return new self($playerId);
|
||||||
}
|
}
|
||||||
@ -72,30 +55,50 @@ class Nick
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function full(int $showInvisibility = 0): string
|
public function full($showInvisibility = 0):string
|
||||||
{
|
{
|
||||||
if ($showInvisibility === 0 && UserEffect::isInvisible($this->user->getId())) {
|
if (!$showInvisibility && $this->getInvisibilityStatus()) {
|
||||||
return INVIS;
|
return INVIS;
|
||||||
}
|
}
|
||||||
return $this->getAlignImage() . ' ' . $this->getClanImage() . ' ' . $this->user->getLogin() . " [" . $this->user->getLevel() . "] " . $this->getInfolinkImage();
|
return $this->getAlignToNickname().$this->getClanToNickname().sprintf('<b>%s</b> [%s] <a href="inf.php?%s" target="_blank"><img src="i/inf.gif" style="width:12px;height:11px"></a>', $this->login, $this->level, $this->login);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает строку с логином.
|
* Возвращает строку с логином или невидимым статусом.
|
||||||
* Избавиться от этого! Оставлено для совместимости.
|
* @param int $showInvisibility отображать логин даже если персонаж невидимка.
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function short(): string
|
public function short($showInvisibility = 0):string
|
||||||
{
|
{
|
||||||
return $this->user->getLogin();
|
if (!$showInvisibility && $this->getInvisibilityStatus()) {
|
||||||
|
return INVIS;
|
||||||
|
} else {
|
||||||
|
return htmlspecialchars($this->login);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль, здоровьем.
|
* Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль, здоровьем.
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function battle(): string
|
public function battle():string
|
||||||
{
|
{
|
||||||
return $this->full() . "<img src='i/herz.gif' alt='HP'> [" . $this->user->stats()->getHealth() . "/" . $this->user->stats()->getMaxHealth() . "]";
|
return $this->getAlign().$this->getClan().sprintf('<b>%s</b> [%s] <a href="inf.php?%s" target="_blank"><img src="i/inf.gif" style="width:12px;height:11px"></a> <img src="i/herz.gif" alt="HP"> _hp_/_maxhp_', $this->login, $this->level, $this->login);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Возвращает строку с логином и здоровьем, выделяя строку определённым стилем.
|
||||||
|
* @param $textstyle - Название стиля отображения логина персонажа (main.css) для цветового разделения команд.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function battleShort($textstyle):string
|
||||||
|
{
|
||||||
|
if ($this->getInvisibilityStatus()) {
|
||||||
|
return INVIS;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return sprintf('<span style="%s">%s</span> [_hp_/_maxhp_]', $textstyle, $this->login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,74 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Battles;
|
|
||||||
|
|
||||||
use tidy, Battles\Database\Db;
|
|
||||||
|
|
||||||
class RememberPassword
|
|
||||||
{
|
|
||||||
const OK_MAIL_SENT = 'Письмо отправлено!';
|
|
||||||
const OK_PASSWORD_CHANGED = 'Пароль изменён!';
|
|
||||||
const ERROR_MAIL_NOT_SENT = 'Письмо не отправлено!';
|
|
||||||
const ERROR_WRONG_LOGIN = 'Такого пользователя не существует!';
|
|
||||||
const ERROR_TOO_MANY_TRIES = 'Вы уже отправляли себе письмо сегодня!';
|
|
||||||
const ERROR_OLD_HASH = 'Ссылка устарела!';
|
|
||||||
const ERROR_WRONG_HASH = 'Неверная ссылка!';
|
|
||||||
|
|
||||||
private function mailSend(string $to, string $message): bool
|
|
||||||
{
|
|
||||||
$from = "=?UTF-8?B?" . base64_encode('Noreply') . "?= <noreply@" . GAMEDOMAIN . ">";
|
|
||||||
$subject = "=?UTF-8?B?" . base64_encode('Восстановление забытого пароля') . "?=";
|
|
||||||
$headers = [
|
|
||||||
'From' => $from,
|
|
||||||
'MIME-Version' => '1.0',
|
|
||||||
'Content-type' => 'text/html; charset=UTF-8',
|
|
||||||
];
|
|
||||||
|
|
||||||
if (extension_loaded('tidy')) {
|
|
||||||
$cleaner = new tidy();
|
|
||||||
$message = $cleaner->repairString($message, ['show-errors' => 0, 'show-warnings' => false], 'utf8');
|
|
||||||
}
|
|
||||||
return mail($to, $subject, $message, $headers);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function sendRecoveryMail(string $to): string
|
|
||||||
{
|
|
||||||
$check = Db::getInstance()->ofetch('SELECT email FROM users WHERE login = ?', $to);
|
|
||||||
if (!empty(Db::getInstance()->fetchColumn('select email from users where login = ?', $to))) {
|
|
||||||
return self::ERROR_WRONG_LOGIN;
|
|
||||||
}
|
|
||||||
if (!empty(Db::getInstance()->ofetch('SELECT 1 FROM users_recovery WHERE login = ?', $to))) {
|
|
||||||
return self::ERROR_TOO_MANY_TRIES;
|
|
||||||
}
|
|
||||||
|
|
||||||
$hash = uniqid();
|
|
||||||
$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']]);
|
|
||||||
$message = sprintf(
|
|
||||||
'Здравствуйте!<br><br>Кто-то запросил восстановление пароля к вашему персонажу %s <br><br>
|
|
||||||
Для смены пароля пройдите по <a href="//%s/rememberpassword.php?change=%s">данной ссылке</a>.<br><br>
|
|
||||||
Ссылка будет действовать до <em>%s</em>',
|
|
||||||
$to,
|
|
||||||
GAMEDOMAIN,
|
|
||||||
$hash,
|
|
||||||
$tomorrow
|
|
||||||
);
|
|
||||||
return self::mailSend($check->email, $message) ? self::OK_MAIL_SENT : self::ERROR_MAIL_NOT_SENT;
|
|
||||||
}
|
|
||||||
public function isAllowed($hash)
|
|
||||||
{
|
|
||||||
return Db::getInstance()->execute('SELECT count(*) FROM users_recovery WHERE hash = ? AND date < ?', [$hash, date('d-M-Y')])->fetchColumn() ? true : self::ERROR_OLD_HASH;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setNewPassword(string $newPassword, string $hash):string
|
|
||||||
{
|
|
||||||
$login = Db::getInstance()->execute('select login from users_recovery where hash = ?', $hash)->fetchColumn();
|
|
||||||
if (empty($login)) {
|
|
||||||
return self::ERROR_WRONG_HASH;
|
|
||||||
}
|
|
||||||
$newPassword = password_hash($newPassword, PASSWORD_DEFAULT);
|
|
||||||
Db::getInstance()->execute('UPDATE users SET pass = ? WHERE login = ?', [$newPassword, $login]);
|
|
||||||
Db::getInstance()->execute('DELETE FROM users_recovery WHERE hash = ?', $hash);
|
|
||||||
return self::OK_PASSWORD_CHANGED;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Список наименований игровых комнат.
|
* Список наименований игровых комнат.
|
||||||
*/
|
*/
|
||||||
trait Rooms
|
trait Rooms
|
||||||
{
|
{
|
||||||
public static array $roomNames = [
|
public static $roomNames = [
|
||||||
0 => "Секретная Комната",
|
0 => "Секретная Комната",
|
||||||
1 => "Дом поединков",
|
1 => "Дом поединков",
|
||||||
20 => "Центральная площадь",
|
20 => "Центральная площадь",
|
||||||
@ -187,4 +186,4 @@ trait Rooms
|
|||||||
2601 => "Замковая Площадь",
|
2601 => "Замковая Площадь",
|
||||||
2702 => "Центральная площадь (мираж)",
|
2702 => "Центральная площадь (мираж)",
|
||||||
];
|
];
|
||||||
}
|
}
|
@ -2,34 +2,29 @@
|
|||||||
# Date: 29.08.2021 (21:34)
|
# Date: 29.08.2021 (21:34)
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class Shop
|
class Shop
|
||||||
{
|
{
|
||||||
public const GENERAL_SHOP = 1;
|
public const GENERAL_SHOP = 1;
|
||||||
public const BARTER_SHOP = 2;
|
public const BARTER_SHOP = 2;
|
||||||
public const CATEGORY_SALE_ITEMS = -1;
|
public const CATEGORY_SALE_ITEMS = -1;
|
||||||
|
public static Shop $current;
|
||||||
public int $categoryType = 0;
|
public int $categoryType = 0;
|
||||||
private int $shopId;
|
private int $shopId;
|
||||||
|
|
||||||
private function __construct($shopId)
|
public function __construct($shop_id) {
|
||||||
{
|
$this->shopId = $shop_id;
|
||||||
$this->shopId = $shopId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function id($shopid): self
|
|
||||||
{
|
|
||||||
return new self($shopid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function showGoods(): string
|
private function showGoods(): string
|
||||||
{
|
{
|
||||||
if ($this->categoryType) {
|
if ($this->categoryType) {
|
||||||
$stmt = Db::getInstance()->ofetchAll('select * from items inner join trade_offers on id = shop_item_id where shop_id = ? and shop_item_quantity !=0 and item_type = ?', [$this->shopId, $this->categoryType]);
|
$stmt = DBPDO::$db->ofetchAll('select * from items inner join trade_offers on id = shop_item_id where shop_id = ? and shop_item_quantity !=0 and item_type = ?', [$this->shopId, $this->categoryType]);
|
||||||
$stmt2 = Db::getInstance()->ofetchAll('select * from inventory where on_sale != 0 and present is null and item_type = ?', $this->categoryType);
|
$stmt2 = DBPDO::$db->ofetchAll('select * from inventory where on_sale != 0 and present is null and item_type = ?', $this->categoryType);
|
||||||
} else {
|
} else {
|
||||||
$stmt = Db::getInstance()->ofetchAll('select * from items inner join trade_offers on id = shop_item_id where shop_id = ? and shop_item_quantity !=0', $this->shopId);
|
$stmt = DBPDO::$db->ofetchAll('select * from items inner join trade_offers on id = shop_item_id where shop_id = ? and shop_item_quantity !=0', $this->shopId);
|
||||||
$stmt2 = Db::getInstance()->ofetchAll('select * from inventory where on_sale != 0 and present is null');
|
$stmt2 = DBPDO::$db->ofetchAll('select * from inventory where on_sale != 0 and present is null');
|
||||||
}
|
}
|
||||||
|
|
||||||
$iteminfo = [];
|
$iteminfo = [];
|
||||||
@ -44,7 +39,7 @@ class Shop
|
|||||||
|
|
||||||
private function showUserSellItems(): string
|
private function showUserSellItems(): string
|
||||||
{
|
{
|
||||||
$stmt = Db::getInstance()->ofetchall('select * from inventory where on_sale = 0 and dressed_slot = 0 and durability > 0 and owner_id = ?', User::getInstance()->getId());
|
$stmt = DBPDO::$db->ofetchall('select * from inventory where on_sale = 0 and dressed_slot = 0 and durability > 0 and owner_id = ?', User::$current->getId());
|
||||||
|
|
||||||
$iteminfo = [];
|
$iteminfo = [];
|
||||||
$operationType = 'sellshop';
|
$operationType = 'sellshop';
|
||||||
@ -70,18 +65,18 @@ class Shop
|
|||||||
public function getCategoryName(): string
|
public function getCategoryName(): string
|
||||||
{
|
{
|
||||||
$names = [
|
$names = [
|
||||||
Item::TYPE_HELMET => 'Шлемы',
|
Item::ITEM_TYPE_HELMET => 'Шлемы',
|
||||||
Item::TYPE_ARMOR => 'Броня',
|
Item::ITEM_TYPE_ARMOR => 'Броня',
|
||||||
Item::TYPE_LEGS => 'Поножи',
|
Item::ITEM_TYPE_LEGS => 'Поножи',
|
||||||
Item::TYPE_BOOTS => 'Сапоги',
|
Item::ITEM_TYPE_BOOTS => 'Сапоги',
|
||||||
Item::TYPE_GLOVES => 'Перчатки',
|
Item::ITEM_TYPE_GLOVES => 'Перчатки',
|
||||||
Item::TYPE_WEAPON => 'Оружие',
|
Item::ITEM_TYPE_WEAPON => 'Оружие',
|
||||||
Item::TYPE_SHIELD => 'Щиты',
|
Item::ITEM_TYPE_SHIELD => 'Щиты',
|
||||||
Item::TYPE_BELT => 'Пояса',
|
Item::ITEM_TYPE_BELT => 'Пояса',
|
||||||
Item::TYPE_RING => 'Кольца',
|
Item::ITEM_TYPE_RING => 'Кольца',
|
||||||
Item::TYPE_AMULET => 'Амулеты',
|
Item::ITEM_TYPE_AMULET => 'Амулеты',
|
||||||
Item::TYPE_CONSUMABLE => 'Расходники',
|
Item::ITEM_TYPE_CONSUMABLE => 'Расходники',
|
||||||
Item::TYPE_OTHER => 'Разное',
|
Item::ITEM_TYPE_OTHER => 'Разное',
|
||||||
self::CATEGORY_SALE_ITEMS => 'Предметы в инвентаре',
|
self::CATEGORY_SALE_ITEMS => 'Предметы в инвентаре',
|
||||||
0 => 'Все товары',
|
0 => 'Все товары',
|
||||||
];
|
];
|
||||||
@ -92,4 +87,4 @@ class Shop
|
|||||||
{
|
{
|
||||||
return $this->categoryType !== self::CATEGORY_SALE_ITEMS || $this->categoryType !== self::BARTER_SHOP ? $this->showGoods() : $this->showUserSellItems();
|
return $this->categoryType !== self::CATEGORY_SALE_ITEMS || $this->categoryType !== self::BARTER_SHOP ? $this->showGoods() : $this->showUserSellItems();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,11 +2,14 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
|
use Battles\Models\PresentsModel;
|
||||||
|
use Exceptions\GameException;
|
||||||
|
|
||||||
class ShopItem extends Item
|
class ShopItem extends Item
|
||||||
{
|
{
|
||||||
private const NO_ITEMS_IN_STOCK = "Товара нет в наличии!";
|
private const NO_ITEMS_IN_STOCK = "Товара нет в наличии!";
|
||||||
|
private const NO_MONEY = "У вас нет денег!";
|
||||||
private const NO_BARTER_ITEMS = 'У вас нет требуемых предметов!';
|
private const NO_BARTER_ITEMS = 'У вас нет требуемых предметов!';
|
||||||
private const BUTTON = [
|
private const BUTTON = [
|
||||||
'setmarket' => 'Сдать в магазин',
|
'setmarket' => 'Сдать в магазин',
|
||||||
@ -20,32 +23,32 @@ insert into inventory (
|
|||||||
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, price)
|
image, weight, price)
|
||||||
select
|
select
|
||||||
?, 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, greatest(
|
image, weight, greatest(
|
||||||
(
|
(
|
||||||
(add_strength + add_dexterity + add_intuition + add_endurance + add_intelligence + add_wisdom) *
|
(add_strength + add_dexterity + add_intuition + add_endurance + add_intelligence + add_wisdom) *
|
||||||
(5 + floor((add_strength + add_dexterity + add_intuition + add_endurance + add_intelligence + add_wisdom) / 10))
|
(5 + floor((add_strength + add_dexterity + add_intuition + add_endurance + add_intelligence + add_wisdom) / 10))
|
||||||
) +
|
) +
|
||||||
(
|
(
|
||||||
(add_accuracy + add_criticals + add_evasion) *
|
(add_accuracy + add_criticals + add_evasion) *
|
||||||
(2 + floor((add_accuracy + add_criticals + add_evasion) / 50))
|
(2 + floor((add_accuracy + add_criticals + add_evasion) / 50))
|
||||||
) +
|
) +
|
||||||
(
|
(
|
||||||
(add_min_physical_damage + add_max_physical_damage) *
|
(add_min_physical_damage + add_max_physical_damage) *
|
||||||
(1 + floor((add_min_physical_damage + add_max_physical_damage) / 100))
|
(1 + floor((add_min_physical_damage + add_max_physical_damage) / 100))
|
||||||
)
|
)
|
||||||
,1)
|
,1)
|
||||||
from items where id = ?
|
from items where id = ?
|
||||||
SQL;
|
SQL;
|
||||||
|
|
||||||
// Тип операции в магазине. Для отображения разных блоков в разных случаях.
|
// Тип операции в магазине. Для отображения разных блоков в разных случаях.
|
||||||
private $optype;
|
private $optype;
|
||||||
private ?int $shopItemQuantity;
|
private ?int $shop_item_quantity;
|
||||||
private ?int $price;
|
private ?int $price;
|
||||||
public static string $status = '';
|
public static string $status = '';
|
||||||
private ?string $jsonBarterList;
|
private ?string $jsonBarterList;
|
||||||
@ -59,8 +62,8 @@ SQL;
|
|||||||
$this->optype = $operationType;
|
$this->optype = $operationType;
|
||||||
}
|
}
|
||||||
$this->price = $row->price ?? null;
|
$this->price = $row->price ?? null;
|
||||||
$this->shopItemQuantity = $row->shop_item_quantity ?? null;
|
$this->shop_item_quantity = $row->shop_item_quantity ?? null;
|
||||||
$this->id = $row->item_id ?? $row->id;
|
$this->item_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 +105,10 @@ SQL;
|
|||||||
|
|
||||||
private function getLowItemQuantityNote(): string
|
private function getLowItemQuantityNote(): string
|
||||||
{
|
{
|
||||||
if ($this->shopItemQuantity < 1 || $this->shopItemQuantity > 19) {
|
if ($this->shop_item_quantity < 1 || $this->shop_item_quantity > 19) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
return "<div style='margin-top: 9px; font-style: italic;'>На складе осталось $this->shopItemQuantity единиц товара!</div>";
|
return "<div style='margin-top: 9px; font-style: italic;'>На складе осталось $this->shop_item_quantity единиц товара!</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getTextBasedOnPrice(): string
|
private function getTextBasedOnPrice(): string
|
||||||
@ -132,34 +135,34 @@ SQL;
|
|||||||
return "<img src='/i/sh/$this->image' class='item-wrap-normal' alt=''>";
|
return "<img src='/i/sh/$this->image' class='item-wrap-normal' alt=''>";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function buyItem($id)
|
public static function buyItem($id, User $buyer)
|
||||||
{
|
{
|
||||||
$check = Db::getInstance()->ofetch("select * from trade_offers where offer_id = ?", $id);
|
$check = DBPDO::$db->ofetch("select * from trade_offers where offer_id = ?", $id);
|
||||||
$item = new Item(Db::getInstance()->fetch('select * from items where id = ?', $check->shop_item_id));
|
$item = new Item(DBPDO::$db->fetch('select * from items where id = ?', $check->shop_item_id));
|
||||||
$price = $item->calculateItemCost();
|
$price = $item->calculateItemCost();
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!self::checkAndRemoveBarteredItems($check->barter_items_list_json, User::getInstance()->getId()) ||
|
!self::checkAndRemoveBarteredItems($check->barter_items_list_json, $buyer->getId()) ||
|
||||||
!self::checkAndPayTheBills($price) ||
|
!self::checkAndPayTheBills($price, $buyer) ||
|
||||||
!self::checkAndChangeRemainingItems($check->shop_item_quantity, $check->shop_item_id)
|
!self::checkAndChangeRemainingItems($check->shop_item_quantity, $check->shop_item_id)
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Db::getInstance()->execute(self::BUY_QUERY, [User::getInstance()->getId(), $check->shop_item_id]);
|
DBPDO::$db->execute(self::BUY_QUERY, [$buyer->getId(), $check->shop_item_id]);
|
||||||
$deloText = User::getInstance()->getLogin() . " купил товар «" . $item->name . "» id:(" . $check->shop_item_id . ") в магазине за " . $price . ".";
|
$deloText = $buyer->getLogin() . " купил товар «" . $item->name . "» id:(" . $check->shop_item_id . ") в магазине за " . $price . ".";
|
||||||
GameLogs::addUserLog(User::getInstance()->getId(), $deloText);
|
GameLogs::addUserLog($buyer->getId(), $deloText);
|
||||||
self::$status = "Предмет " . $item->name . " куплен за " . $price . ".";
|
self::$status = "Предмет " . $item->name . " куплен за " . $price . ".";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function checkAndRemoveBarteredItems(?string $jsonList, int $userId): bool
|
private static function checkAndRemoveBarteredItems(?string $json_list, int $user_id): bool
|
||||||
{
|
{
|
||||||
if (empty($jsonList)) {
|
if (empty($json_list)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
$allowItemRemove = true;
|
$allowItemRemove = true;
|
||||||
foreach (json_decode($jsonList) as $item) {
|
foreach (json_decode($json_list) as $item) {
|
||||||
$row = Db::getInstance()->ofetch('select sum(1) as s from inventory where name = ? and owner_id = ?', [Item::getItemById($item->item_id)->name, $userId]);
|
$row = DBPDO::$db->ofetch('select sum(1) as s from inventory where name = ? and owner_id = ?', [Item::getItemById($item->item_id)->name, $user_id]);
|
||||||
if ($row->s < $item->quantity) {
|
if ($row->s < $item->quantity) {
|
||||||
$allowItemRemove = false;
|
$allowItemRemove = false;
|
||||||
}
|
}
|
||||||
@ -168,50 +171,61 @@ SQL;
|
|||||||
self::$status = self::NO_BARTER_ITEMS;
|
self::$status = self::NO_BARTER_ITEMS;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
foreach (json_decode($jsonList) as $item) {
|
foreach (json_decode($json_list) 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, $userId]);
|
DBPDO::$db->execute($query, [Item::getItemById($item->item_id)->name, $user_id]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function checkAndPayTheBills(int $price): bool
|
private static function checkAndPayTheBills(int $price, User $user): bool
|
||||||
{
|
{
|
||||||
if (User::getInstance()->money()->spend($price)) {
|
if ($user->getMoney() > $price) {
|
||||||
|
$user->setMoney($user->getMoney() - $price);
|
||||||
|
$user->saveMoney();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
(new Bank())->withdrawMoney($price);
|
try {
|
||||||
return true;
|
$bank = new Bank($user->getId());
|
||||||
|
$bank->withdrawMoney($price);
|
||||||
|
return true;
|
||||||
|
} catch (GameException $e) {
|
||||||
|
self::$status = 'Банковская ошибка! ' . self::NO_MONEY;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function checkAndChangeRemainingItems(int $currentQuantity, $itemId): bool
|
private static function checkAndChangeRemainingItems(int $current_quantity, $item_id): bool
|
||||||
{
|
{
|
||||||
if (empty($currentQuantity)) {
|
if (empty($current_quantity)) {
|
||||||
self::$status = self::NO_ITEMS_IN_STOCK;
|
self::$status = self::NO_ITEMS_IN_STOCK;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ($currentQuantity === -1) {
|
if ($current_quantity === -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 = ? ", $itemId);
|
DBPDO::$db->execute("update trade_offers set shop_item_quantity = shop_item_quantity -1 where shop_item_quantity != -1 and shop_item_id = ? ", $item_id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function sellItem($id, $bankTrade = 0)
|
public static function sellItem($id, User $seller, $bankTrade = 0)
|
||||||
{
|
{
|
||||||
$item = Db::getInstance()->ofetch('select * from inventory where item_id = ?', $id);
|
$db = new DBPDO();
|
||||||
|
$item = $db->ofetch('select * from inventory where item_id = ?', $id);
|
||||||
$sellingItemName = $item->name;
|
$sellingItemName = $item->name;
|
||||||
// Продажа за цену от нуля до половины стоимости.
|
// Продажа за цену от нуля до половины стоимости.
|
||||||
$sellingPrice = $item->price > 1 ? mt_rand(0, $item->price / 2) : mt_rand(0, 1);
|
$sellingPrice = $item->price > 1 ? mt_rand(0, $item->price / 2) : mt_rand(0, 1);
|
||||||
Db::getInstance()->execute('delete from inventory where item_id = ?', $id);
|
$db->execute('delete from inventory where item_id = ?', $id);
|
||||||
if ($bankTrade) {
|
if ($bankTrade) {
|
||||||
User::getInstance()->money()->modifyBank($sellingPrice, 'sellShop');
|
$bank = new Bank($seller->getId());
|
||||||
|
$bank->setMoney($bank->getMoney() + $sellingPrice);
|
||||||
|
Bank::setBankMoney($bank->getMoney(), $seller->getId(), 'sellShop');
|
||||||
} else {
|
} else {
|
||||||
User::getInstance()->money()->earn($sellingPrice);
|
$db->execute('update users set money = money - ? where id = ?', [$sellingPrice, $_SESSION['uid']]);
|
||||||
}
|
}
|
||||||
$deloText = User::getInstance()->getLogin() . " продал товар «{$sellingItemName}» id:($id) в магазине за $sellingPrice кр.";
|
$deloText = "{$seller->getLogin()} продал товар «{$sellingItemName}» id:($id) в магазине за $sellingPrice кр.";
|
||||||
GameLogs::addUserLog(User::getInstance()->getId(), $deloText);
|
GameLogs::addUserLog($seller->getId(), $deloText);
|
||||||
if ($sellingPrice == 0) {
|
if ($sellingPrice == 0) {
|
||||||
self::$status = "После длительных и изнурительных торгов вы плюнули на всё и просто подарили ваш «{$sellingItemName}» торговцу.";
|
self::$status = "После длительных и изнурительных торгов вы плюнули на всё и просто подарили ваш «{$sellingItemName}» торговцу.";
|
||||||
} else {
|
} else {
|
||||||
@ -241,12 +255,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->id;
|
$hiddenValue = $this->optype === 'buyshop' ? $this->offerId : $this->item_id;
|
||||||
$buttonName = self::BUTTON[$this->optype];
|
$button_name = 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="$buttonName">
|
<br><input type="submit" name="$this->optype" value="$button_name">
|
||||||
</form>
|
</form>
|
||||||
FORM;
|
FORM;
|
||||||
}
|
}
|
||||||
@ -256,28 +270,27 @@ FORM;
|
|||||||
*/
|
*/
|
||||||
public function getItemType(): int
|
public function getItemType(): int
|
||||||
{
|
{
|
||||||
return $this->type;
|
return $this->item_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Выдача магазинных предметов по запросу.
|
/** Выдача магазинных предметов по запросу.
|
||||||
* Ввелась чтобы перебить takeshopitem() в functions с идентичным функционалом.
|
* Ввелась чтобы перебить takeshopitem() в functions с идентичным функционалом.
|
||||||
*
|
* @param int $item_id ИД предмета.
|
||||||
* @param int $itemId ИД предмета.
|
* @param int $to ИД пперсонажа-получателя.
|
||||||
* @param int $to ИД пперсонажа-получателя.
|
|
||||||
*/
|
*/
|
||||||
public static function giveNewItem(int $itemId, int $to): array
|
public static function giveNewItem(int $item_id, int $to): array
|
||||||
{
|
{
|
||||||
$check = Db::getInstance()->ofetch('select 1 from items where id = ?', $itemId);
|
$check = DBPDO::$db->ofetch('select 1 from items where id = ?', $item_id);
|
||||||
if (!$check) {
|
if (!$check) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
Db::getInstance()->execute(self::BUY_QUERY, [$to, $itemId]);
|
DBPDO::$db->execute(self::BUY_QUERY, [$to, $item_id]);
|
||||||
$return = Db::getInstance()->ofetch('select image, name from inventory where item_id = ?', Db::getInstance()->lastInsertId());
|
$return = DBPDO::$db->ofetch('select image, name from inventory where item_id = ?', DBPDO::$db->lastInsertId());
|
||||||
return [
|
return [
|
||||||
'img' => $return->image,
|
'img' => $return->image,
|
||||||
'name' => $return->name,
|
'name' => $return->name,
|
||||||
'id' => $itemId,
|
'id' => $item_id,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
# Date: 30.09.2020 (09:42)
|
# Date: 30.09.2020 (09:42)
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
class Template
|
class Template
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -48,4 +47,4 @@ HTML_HEADER;
|
|||||||
<h1>$buildingName</h1>
|
<h1>$buildingName</h1>
|
||||||
HTML;
|
HTML;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,15 +2,15 @@
|
|||||||
# Date: 26.10.2020 (16:08)
|
# Date: 26.10.2020 (16:08)
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class Travel
|
class Travel
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Соответствие ID комнаты игровому файлу.
|
* Соответствие ID комнаты игровому файлу.
|
||||||
* @var array
|
* @var string[]
|
||||||
*/
|
*/
|
||||||
public static array $roomFileName = [
|
public static $roomFileName = [
|
||||||
1 => 'main.php',
|
1 => 'main.php',
|
||||||
20 => 'city.php',
|
20 => 'city.php',
|
||||||
21 => 'city.php',
|
21 => 'city.php',
|
||||||
@ -55,58 +55,24 @@ class Travel
|
|||||||
2702 => 'city.php'
|
2702 => 'city.php'
|
||||||
];
|
];
|
||||||
|
|
||||||
private static array $fbattleCheckFiles = [
|
|
||||||
'c_haos_in.php',
|
|
||||||
'c_haos.php',
|
|
||||||
'c_park.php',
|
|
||||||
'city.php',
|
|
||||||
'clan_castle.php',
|
|
||||||
'enter_cave.php',
|
|
||||||
'library.php',
|
|
||||||
'atk.php',
|
|
||||||
'podzem_dialog.php',
|
|
||||||
'post.php',
|
|
||||||
'shop.php',
|
|
||||||
'tournament.php',
|
|
||||||
'vxod.php',
|
|
||||||
'bank.php',
|
|
||||||
'canalizaciya,php',
|
|
||||||
'forest.php',
|
|
||||||
'main.php',
|
|
||||||
'repair.php',
|
|
||||||
'towerstamp.php',
|
|
||||||
'hell.php',
|
|
||||||
'ul_clans.php',
|
|
||||||
'labirint.php',
|
|
||||||
'akadem.php',
|
|
||||||
'towerin.php',
|
|
||||||
'user_anketa.php',
|
|
||||||
'zayavka.php',
|
|
||||||
];
|
|
||||||
private static array $towerinCheckFiles = [
|
|
||||||
'main.php',
|
|
||||||
'city.php',
|
|
||||||
'tower.php'
|
|
||||||
];
|
|
||||||
private static array $roomsCheck = [22, 23, 27, 29, 30, 31, 37, 38, 39, 40, 41, 45, 53, 61, 401, 402, 600, 601, 602, 621, 650, 1051, 1052];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Перемещение по комнатам. Header:Location уже включён.
|
* Перемещение по комнатам.
|
||||||
*
|
* @param int $roomId ID куда идём.
|
||||||
* @param int $roomId ID куда идём.
|
|
||||||
* @param int $roomIdCurrent ID откуда идём.
|
* @param int $roomIdCurrent ID откуда идём.
|
||||||
*/
|
*/
|
||||||
public static function toRoom(int $roomId, int $roomIdCurrent): void
|
public static function toRoom(int $roomId, int $roomIdCurrent): void
|
||||||
{
|
{
|
||||||
$eff = Db::getInstance()->fetchColumn('SELECT type FROM users_effects WHERE owner_id = ? AND (`type` = 10 OR `type` = 13 OR `type` = 14)', $_SESSION['uid']);
|
$db = DBPDO::INIT();
|
||||||
|
$itemsWeight = $db->fetch('SELECT SUM(weight) - (select strength * 5 from users where id = ?) AS weight_overflow FROM inventory WHERE owner_id = ? AND on_sale = 0', [$_SESSION['uid'], $_SESSION['uid']]);
|
||||||
|
$eff = $db->fetch('SELECT type FROM users_effects WHERE owner_id = ? AND (`type` = 10 OR `type` = 13 OR `type` = 14)', $_SESSION['uid']);
|
||||||
$errors = [];
|
$errors = [];
|
||||||
if (UserEffect::isOverEncumbered($_SESSION['uid'])) {
|
if ($itemsWeight['weight_overflow'] > 0) {
|
||||||
$errors[0] = 'У вас переполнен рюкзак, вы не можете передвигаться...';
|
$errors[0] = 'У вас переполнен рюкзак, вы не можете передвигаться...';
|
||||||
}
|
}
|
||||||
if ($eff == 10) {
|
if ($eff['type'] == 10) {
|
||||||
$errors[1] = 'Вы парализованы и не можете передвигаться...';
|
$errors[1] = 'Вы парализованы и не можете передвигаться...';
|
||||||
}
|
}
|
||||||
if ($eff == 13 || $eff == 14) {
|
if ($eff['type'] == 13 || $eff['type'] == 14) {
|
||||||
$errors[2] = 'У вас тяжелая травма, вы не можете передвигаться...';
|
$errors[2] = 'У вас тяжелая травма, вы не можете передвигаться...';
|
||||||
}
|
}
|
||||||
if ($errors) {
|
if ($errors) {
|
||||||
@ -114,7 +80,7 @@ class Travel
|
|||||||
echo sprintf('<span class="error">%s</span>', $error);
|
echo sprintf('<span class="error">%s</span>', $error);
|
||||||
}
|
}
|
||||||
} elseif (in_array($roomId, self::allowedRoomMoves($roomIdCurrent))) {
|
} elseif (in_array($roomId, self::allowedRoomMoves($roomIdCurrent))) {
|
||||||
Db::getInstance()->execute('UPDATE users, online SET users.room = ?, online.room = ? WHERE `online`.`user_id` = `users`.`id` AND `online`.`user_id` = ?', [$roomId, $roomId, $_SESSION['uid']]);
|
$db->execute('UPDATE users, online SET users.room = ?, online.room = ? WHERE `online`.`user_id` = `users`.`id` AND `online`.`user_id` = ?', [$roomId, $roomId, $_SESSION['uid']]);
|
||||||
header('location: ' . self::$roomFileName[$roomId]);
|
header('location: ' . self::$roomFileName[$roomId]);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
@ -122,9 +88,7 @@ class Travel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка можно ли перейти из комнаты в комнату.
|
* Проверка можно ли перейти из комнаты в комнату.
|
||||||
*
|
|
||||||
* @param int $roomId ID комнаты
|
* @param int $roomId ID комнаты
|
||||||
*
|
|
||||||
* @return array|int[]
|
* @return array|int[]
|
||||||
*/
|
*/
|
||||||
private static function allowedRoomMoves(int $roomId): array
|
private static function allowedRoomMoves(int $roomId): array
|
||||||
@ -153,8 +117,8 @@ class Travel
|
|||||||
$room[21] = [20, 29, 30, 31, 34, 650, 2111];
|
$room[21] = [20, 29, 30, 31, 34, 650, 2111];
|
||||||
$room[29] = $room[30] = $room[31] = $room[34] = [21];
|
$room[29] = $room[30] = $room[31] = $room[34] = [21];
|
||||||
|
|
||||||
$room[26] = [20, 401, 660, 661, 777, 2601];
|
$room[26] = [20, 401, 660, 777, 2601];
|
||||||
$room[401] = $room[660] = $room[661] = $room[777] = [26];
|
$room[401] = $room[660] = $room[777] = [26];
|
||||||
|
|
||||||
$room[2601] = [26, 37, 404, 1051, 2655];
|
$room[2601] = [26, 37, 404, 1051, 2655];
|
||||||
|
|
||||||
@ -177,32 +141,4 @@ class Travel
|
|||||||
}
|
}
|
||||||
return $room[$roomId];
|
return $room[$roomId];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/** Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам.
|
|
||||||
* @param int $inRoom
|
|
||||||
* @param int $inBattle
|
|
||||||
* @param int $inTower
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public static function roomRedirects(int $inRoom, int $inBattle, int $inTower = 0)
|
|
||||||
{
|
|
||||||
if ($inBattle && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], self::$fbattleCheckFiles)) {
|
|
||||||
header('location: fbattle.php');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
if ($inTower && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], self::$towerinCheckFiles)) {
|
|
||||||
header('location: towerin.php');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
// Если я в одной из этих комнат,
|
|
||||||
// [И] Имя файла который инклюдит файл с проверкой не совпадает с именем файла локации в которой я нахожусь
|
|
||||||
// [И] Номер комнаты который я пытаюсь открыть есть в списке проверяемых
|
|
||||||
if (in_array($inRoom, self::$roomsCheck)
|
|
||||||
&& pathinfo(debug_backtrace()[0]['file'])['basename'] != self::$roomFileName[$inRoom]
|
|
||||||
&& in_array(array_search(pathinfo(debug_backtrace()[0]['file'])['basename'], self::$roomFileName), self::$roomsCheck)) {
|
|
||||||
header('location: main.php');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,103 +2,79 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
class User
|
class User
|
||||||
{
|
{
|
||||||
use Users;
|
protected int $id = 0;
|
||||||
private static ?self $instance = null;
|
protected string $login = '';
|
||||||
private ?UserProfile $profile = null;
|
protected ?string $pass = null;
|
||||||
private ?UserEffect $effect = null;
|
protected ?string $email = null;
|
||||||
private ?UserStats $stats = null;
|
protected ?string $realname = null;
|
||||||
private ?UserInfo $userInfo = null;
|
protected ?string $borndate = null;
|
||||||
private ?UserMoney $userMoney = null;
|
protected ?string $info = null;
|
||||||
|
protected int $level = 0;
|
||||||
|
protected ?int $align = null;
|
||||||
|
protected ?string $clan = null;
|
||||||
|
protected ?int $money = null;
|
||||||
|
protected ?string $ip = null;
|
||||||
|
|
||||||
|
protected ?int $admin = null;
|
||||||
|
protected int $room = 0;
|
||||||
|
protected int $block = 0;
|
||||||
|
protected string $shadow = '';
|
||||||
|
|
||||||
// Пока несуществующие, для совместимости.
|
// Пока несуществующие, для совместимости.
|
||||||
protected int $experience = 0;
|
protected int $experience = 0;
|
||||||
protected int $battle = 0;
|
protected int $battle = 0;
|
||||||
|
protected int $in_tower = 0; // Скорее башню похороним чем запустим...
|
||||||
protected int $zayavka = 0;
|
protected int $zayavka = 0;
|
||||||
private object $profileData;
|
protected static DBPDO $db;
|
||||||
|
|
||||||
protected function __construct($user = null)
|
public const INFO_CHAR_LIMIT = 1500;
|
||||||
|
/**
|
||||||
|
* @var User Переменная инициализируемая при запуске, хранящая объект текущего пользователя.
|
||||||
|
*/
|
||||||
|
public static User $current;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int|string $user
|
||||||
|
*/
|
||||||
|
public function __construct($user)
|
||||||
{
|
{
|
||||||
if (is_null($user)) {
|
self::$db = DBPDO::INIT();
|
||||||
$user = $_SESSION['uid'];
|
$query = 'select * from users where login = ?';
|
||||||
|
if (is_numeric($user)) {
|
||||||
|
$query = 'select * from users where id = ?';
|
||||||
|
$user = (int)$user;
|
||||||
}
|
}
|
||||||
// Отсекаем 2.0000~
|
$user_query = self::$db->fetch($query, $user);
|
||||||
$col = ctype_digit(strval($user)) ? 'id' : 'login';
|
|
||||||
$query = "select * from users where $col = ?";
|
|
||||||
$userQuery = Db::getInstance()->fetch($query, $user);
|
|
||||||
foreach ($this as $key => $value) {
|
foreach ($this as $key => $value) {
|
||||||
if (isset($userQuery[$key])) {
|
if (isset($user_query[$key])) {
|
||||||
$this->$key = $userQuery[$key];
|
$this->$key = $user_query[$key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->profileData = (object)[
|
|
||||||
$this->id,
|
|
||||||
$this->pass,
|
|
||||||
$this->email,
|
|
||||||
$this->realname,
|
|
||||||
$this->borndate,
|
|
||||||
$this->info,
|
|
||||||
$this->ip,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getInstance($user = null): self
|
/**
|
||||||
|
* @param int $userId
|
||||||
|
* @param int $type
|
||||||
|
* @param string $name
|
||||||
|
* @param int $time
|
||||||
|
* @param string|null $json_modifiers_list (str, dex, int, end, intel, wis).
|
||||||
|
*/
|
||||||
|
public static function addUserEffect(int $userId, int $type, string $name, int $time, string $json_modifiers_list = null)
|
||||||
{
|
{
|
||||||
if (is_null(self::$instance)) {
|
$mods = json_decode($json_modifiers_list);
|
||||||
self::$instance = new self($user);
|
self::$db->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]);
|
||||||
}
|
|
||||||
return self::$instance;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function profile(): UserProfile
|
public static function removeUserEffect(int $userId, int $type): bool
|
||||||
{
|
{
|
||||||
if (is_null($this->profile)) {
|
if (self::$db->fetch('SELECT 1 FROM users_effects WHERE owner_id = ? AND type = ?', [$userId, $type])) {
|
||||||
$this->profile = new UserProfile(
|
self::$db->execute('DELETE FROM users_effects WHERE owner_id = ? AND type = ?', [$userId, $type]);
|
||||||
$this->id,
|
|
||||||
$this->pass,
|
|
||||||
$this->email,
|
|
||||||
$this->realname,
|
|
||||||
$this->borndate,
|
|
||||||
$this->info,
|
|
||||||
$this->ip,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return $this->profile;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
public function effect(): UserEffect
|
|
||||||
{
|
|
||||||
if (is_null($this->effect)) {
|
|
||||||
$this->effect = new UserEffect();
|
|
||||||
}
|
|
||||||
return $this->effect;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function stats(): UserStats
|
|
||||||
{
|
|
||||||
if (is_null($this->stats)) {
|
|
||||||
$this->stats = new UserStats($this->id);
|
|
||||||
}
|
|
||||||
return $this->stats;
|
|
||||||
}
|
|
||||||
public function userInfo(): UserInfo
|
|
||||||
{
|
|
||||||
if (is_null($this->userInfo)) {
|
|
||||||
$this->userInfo = new UserInfo($this->id);
|
|
||||||
}
|
|
||||||
return $this->userInfo;
|
|
||||||
}
|
|
||||||
public function money(): UserMoney
|
|
||||||
{
|
|
||||||
if (is_null($this->userMoney)) {
|
|
||||||
$this->userMoney = new UserMoney($this->id, $this->money);
|
|
||||||
}
|
|
||||||
return $this->userMoney;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId(): int
|
public function getId(): int
|
||||||
@ -111,6 +87,44 @@ class User
|
|||||||
return $this->login;
|
return $this->login;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPass(): string
|
||||||
|
{
|
||||||
|
return $this->pass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $pass
|
||||||
|
*/
|
||||||
|
public function setPass($pass): void
|
||||||
|
{
|
||||||
|
$this->pass = $pass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRealname(): string
|
||||||
|
{
|
||||||
|
return $this->realname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $realname
|
||||||
|
*/
|
||||||
|
public function setRealname($realname): void
|
||||||
|
{
|
||||||
|
$this->realname = $realname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getInfo(): string
|
||||||
|
{
|
||||||
|
return $this->info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $info
|
||||||
|
*/
|
||||||
|
public function setInfo($info)
|
||||||
|
{
|
||||||
|
$this->info = $info;
|
||||||
|
}
|
||||||
|
|
||||||
public function getLevel(): int
|
public function getLevel(): int
|
||||||
{
|
{
|
||||||
@ -128,14 +142,29 @@ class User
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string|null $shortName Короткое название клана. Передать null для очистки.
|
* @param string|null $short_name Короткое название клана. Передать null для очистки.
|
||||||
*/
|
*/
|
||||||
public function setClan(?string $shortName)
|
public function setClan(?string $short_name)
|
||||||
{
|
{
|
||||||
$this->clan = is_null($shortName) ? null : $shortName;
|
$this->clan = is_null($short_name) ? null : $short_name;
|
||||||
$this->saveUser();
|
$this->saveUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getMoney(): int
|
||||||
|
{
|
||||||
|
return $this->money;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMoney(int $money)
|
||||||
|
{
|
||||||
|
$this->money = $money < 0 ? 0 : $money;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function saveMoney()
|
||||||
|
{
|
||||||
|
self::$db->execute('update users set money = ? where id = ?', [$this->money, $this->id]);
|
||||||
|
}
|
||||||
|
|
||||||
public function getAdmin(): int
|
public function getAdmin(): int
|
||||||
{
|
{
|
||||||
return $this->admin;
|
return $this->admin;
|
||||||
@ -173,7 +202,7 @@ class User
|
|||||||
'm01', 'm02', 'm03', 'm04', 'm05', 'm06', 'm07', 'm08', 'm09', 'm10',
|
'm01', 'm02', 'm03', 'm04', 'm05', 'm06', 'm07', 'm08', 'm09', 'm10',
|
||||||
'f01', 'f02', 'f03', 'f04', 'f05', 'f06', 'f07', 'f08', 'f09', 'f10',
|
'f01', 'f02', 'f03', 'f04', 'f05', 'f06', 'f07', 'f08', 'f09', 'f10',
|
||||||
];
|
];
|
||||||
if (in_array($shadow, $shadows) && $this->getShadow() === '0.png') {
|
if (in_array($shadow, $shadows) && $this->getShadow() == '0.png') {
|
||||||
$this->shadow = $shadow . '.png';
|
$this->shadow = $shadow . '.png';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -183,20 +212,16 @@ class User
|
|||||||
return $this->experience;
|
return $this->experience;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param int $experience
|
|
||||||
*/
|
|
||||||
public function addExperience(int $experience): void
|
|
||||||
{
|
|
||||||
$this->experience += $experience;
|
|
||||||
Db::getInstance()->execute('update users set experience = ? where id = ?', [$experience, $this->id]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getBattle(): int
|
public function getBattle(): int
|
||||||
{
|
{
|
||||||
return $this->battle;
|
return $this->battle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getInTower(): int
|
||||||
|
{
|
||||||
|
return $this->in_tower;
|
||||||
|
}
|
||||||
|
|
||||||
public function getZayavka(): int
|
public function getZayavka(): int
|
||||||
{
|
{
|
||||||
return $this->zayavka;
|
return $this->zayavka;
|
||||||
@ -204,7 +229,41 @@ class User
|
|||||||
|
|
||||||
public function setOnline()
|
public function setOnline()
|
||||||
{
|
{
|
||||||
Db::getInstance()->execute('update online set real_time = ? where user_id = ?', [time(), $this->getId()]);
|
self::$db->execute('update online set real_time = ? where user_id = ?', [time(), $this->getId()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setInjury(int $type): bool
|
||||||
|
{
|
||||||
|
if (!in_array($type, [11, 12, 13, 14])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$names1 = ['разбитый нос', 'сотрясение первой степени', 'потрепанные уши', 'прикушенный язык', 'перелом переносицы', 'растяжение ноги', 'растяжение руки', 'подбитый глаз', 'синяк под глазом', 'кровоточащее рассечение', 'отбитая «пятая точка»', 'заклинившая челюсть', 'выбитый зуб «мудрости»', 'косоглазие'];
|
||||||
|
$names2 = ['отбитые почки', 'вывих «вырезано цензурой»', 'сотрясение второй степени', 'оторванное ухо', 'вывих руки', 'оторванные уши', 'поврежденный позвоночник', 'поврежденный копчик', 'разрыв сухожилия', 'перелом ребра', 'перелом двух ребер', 'вывих ноги', 'сломанная челюсть'];
|
||||||
|
$names3 = ['пробитый череп', 'разрыв селезенки', 'смещение позвонков', 'открытый перелом руки', 'открытый перелом «вырезано цензурой»', 'излом носоглотки', 'непонятные, но множественные травмы', 'сильное внутреннее кровотечение', 'раздробленная коленная чашечка', 'перелом шеи', 'смещение позвонков', 'открытый перелом ключицы', 'перелом позвоночника', 'вывих позвоночника', 'сотрясение третьей степени'];
|
||||||
|
$param_names = ['str', 'dex', 'int', 'end', 'intel', 'wis',];
|
||||||
|
shuffle($param_names);
|
||||||
|
switch ($type) {
|
||||||
|
case 11:
|
||||||
|
shuffle($names1);
|
||||||
|
$name = UserEffects::$effectName[$type] . ': ' . $names1(0);
|
||||||
|
self::addUserEffect($this->id, $type, $name, strtotime('30min'), json_encode([$param_names(0) => -1]));
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
shuffle($names2);
|
||||||
|
$name = UserEffects::$effectName[$type] . ': ' . $names2(0);
|
||||||
|
self::addUserEffect($this->id, $type, $name, strtotime('3hours'), json_encode([$param_names(0) => mt_rand(-3, -1), $param_names(1) => mt_rand(-3, -1)]));
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
shuffle($names3);
|
||||||
|
$name = UserEffects::$effectName[$type] . ': ' . $names3(0);
|
||||||
|
self::addUserEffect($this->id, $type, $name, strtotime('12hours'), json_encode([$param_names(0) => mt_rand(-5, -1), $param_names(1) => mt_rand(-5, -1), $param_names(2) => mt_rand(-5, -1)]));
|
||||||
|
break;
|
||||||
|
default: //type 14
|
||||||
|
self::addUserEffect($this->id, $type, UserEffects::$effectName[$type], strtotime('1day'), json_encode([$param_names(0) => -10]));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Сохраняет в базу актуальные логин, пароль, email, имя, дату рождения, текст инфы, склонность, клан, образ, права админа.
|
/** Сохраняет в базу актуальные логин, пароль, email, имя, дату рождения, текст инфы, склонность, клан, образ, права админа.
|
||||||
@ -212,16 +271,20 @@ class User
|
|||||||
*/
|
*/
|
||||||
public function saveUser()
|
public function saveUser()
|
||||||
{
|
{
|
||||||
$query = 'update users set login = ?, align = ?, clan = ?, shadow = ?, admin = ? where id = ?';
|
$query = 'update users set login = ?, pass = ?, email = ?, realname = ?, borndate = ?, info = ?, align = ?, clan = ?, shadow = ?, admin = ? where id = ?';
|
||||||
$vals = [
|
$vals = [
|
||||||
$this->login, //set
|
$this->login, //set
|
||||||
|
$this->pass,
|
||||||
|
$this->email,
|
||||||
|
$this->realname,
|
||||||
|
$this->borndate,
|
||||||
|
$this->info,
|
||||||
$this->align,
|
$this->align,
|
||||||
$this->clan,
|
$this->clan,
|
||||||
$this->shadow,
|
$this->shadow,
|
||||||
$this->admin,
|
$this->admin,
|
||||||
$this->id //where
|
$this->id //where
|
||||||
];
|
];
|
||||||
Db::getInstance()->execute($query, $vals);
|
DBPDO::$db->execute($query, $vals);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
@ -1,17 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
# Date: 16.02.2022 (23:01)
|
# Date: 16.09.2020 (08:28)
|
||||||
|
# Названия эффектов, налагаемых на персонажа.
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
trait UserEffects
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class UserEffect
|
|
||||||
{
|
{
|
||||||
public static array $effectName = [
|
public static $effectName = [
|
||||||
2 => 'Заклинание молчания',
|
2 => 'Заклинание молчания',
|
||||||
3 => 'Заклятие форумного молчания',
|
3 => 'Заклятие форумного молчания',
|
||||||
4 => 'Заклятие хаоса',
|
4 => 'Заклятие хаоса',
|
||||||
5 => 'Заклятие обезличивания',
|
5 => 'Заклятие обезличивания',
|
||||||
8 => 'Сон',
|
|
||||||
10 => 'паралич',
|
10 => 'паралич',
|
||||||
11 => 'Легкая травма',
|
11 => 'Легкая травма',
|
||||||
12 => 'Средняя травма',
|
12 => 'Средняя травма',
|
||||||
@ -53,7 +50,7 @@ class UserEffect
|
|||||||
9994 => 'Антидот/Путы (Эликсир?)',
|
9994 => 'Антидот/Путы (Эликсир?)',
|
||||||
];
|
];
|
||||||
|
|
||||||
public static array $effectImage = [
|
public static $effectImage = [
|
||||||
1 => 'travma.gif',
|
1 => 'travma.gif',
|
||||||
2 => 'magic/sleep.gif',
|
2 => 'magic/sleep.gif',
|
||||||
3 => 'magic/sleepf.gif',
|
3 => 'magic/sleepf.gif',
|
||||||
@ -88,75 +85,4 @@ class UserEffect
|
|||||||
227 => 'magic/attack_defence.gif',
|
227 => 'magic/attack_defence.gif',
|
||||||
1022 => 'sh/hidden.gif',
|
1022 => 'sh/hidden.gif',
|
||||||
];
|
];
|
||||||
|
}
|
||||||
/**
|
|
||||||
* @param int $userId
|
|
||||||
* @param int $type
|
|
||||||
* @param string $name
|
|
||||||
* @param int $time
|
|
||||||
* @param string|null $jsonModifiersList (str, dex, int, end, intel, wis).
|
|
||||||
*/
|
|
||||||
public static function add(int $userId, int $type, string $name, int $time, string $jsonModifiersList = null)
|
|
||||||
{
|
|
||||||
$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]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function updateTime(int $userId, int $type, int $time)
|
|
||||||
{
|
|
||||||
if (self::hasEffect($userId, $type)) {
|
|
||||||
Db::getInstance()->execute('update users_effects set remaining_time = remaining_time + ? where owner_id = ? and type = ?', [$time, $userId, $type]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function remove(int $userId, int $type): bool
|
|
||||||
{
|
|
||||||
if (self::hasEffect($userId, $type)) {
|
|
||||||
Db::getInstance()->execute('DELETE FROM users_effects WHERE owner_id = ? AND type = ?', [$userId, $type]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function massRemove(int $userId, array $type): bool
|
|
||||||
{
|
|
||||||
if (Db::getInstance()->fetchColumn('SELECT count(*) FROM users_effects WHERE owner_id = ? AND type in (?)', [$userId, $type])) {
|
|
||||||
Db::getInstance()->execute('DELETE FROM users_effects WHERE owner_id = ? AND type in (?)', [$userId, $type]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function hasEffect(int $userId, int $type): bool
|
|
||||||
{
|
|
||||||
return Db::getInstance()->fetchColumn('select count(*) from users_effects where owner_id = ? and type = ?', [$userId, $type]) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getRemainingEffectTime(int $userId, int $type): int
|
|
||||||
{
|
|
||||||
return Db::getInstance()->fetchColumn('select remaining_time from users_effects where owner_id = ? and type = ?', [$userId, $type]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function isInvisible(int $userId): bool
|
|
||||||
{
|
|
||||||
return self::hasEffect($userId, 1022);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function hasHiddenProfile(int $userId): string
|
|
||||||
{
|
|
||||||
$time = self::getRemainingEffectTime($userId, 5);
|
|
||||||
if (empty($time)) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
if ($time === -1) {
|
|
||||||
return 'навсегда';
|
|
||||||
}
|
|
||||||
return 'до' . date('d.m.Y', strtotime($time));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function isOverEncumbered(int $userid, int $addWeight = 0): bool
|
|
||||||
{
|
|
||||||
$query = 'select strength * 5 + ' . $addWeight . ' as max from inventory left join users u on owner_id = id where owner_id = ? having sum(weight) > max';
|
|
||||||
return Db::getInstance()->fetchColumn($query, $userid) > 0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,34 +2,24 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Models\User\Effects;
|
use Battles\Database\DBPDO;
|
||||||
use Exceptions\GameException;
|
use Battles\Models\EffectsModel;
|
||||||
|
|
||||||
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_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;
|
||||||
|
|
||||||
|
private int $bankMoney;
|
||||||
|
//Тот, кто смотрит на информацию.
|
||||||
|
private User $watcher;
|
||||||
|
|
||||||
|
public function __construct($user)
|
||||||
|
{
|
||||||
|
parent::__construct($user);
|
||||||
|
$bank = new Bank($this->id);
|
||||||
|
$this->bankMoney = $bank->getMoney();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображает куклу персонажа (образ и слоты).
|
* Отображает куклу персонажа (образ и слоты).
|
||||||
*
|
*
|
||||||
@ -37,219 +27,237 @@ class UserInfo extends UserStats
|
|||||||
* на образ).
|
* на образ).
|
||||||
* @param int $isMain установить 1, если куклу надо показать на странице игрока (по клику на предмет снимает
|
* @param int $isMain установить 1, если куклу надо показать на странице игрока (по клику на предмет снимает
|
||||||
* его).
|
* его).
|
||||||
*
|
|
||||||
* @throws GameException
|
|
||||||
*/
|
*/
|
||||||
private function userInfoDoll(int $isBattle = 0, int $isMain = 0): string
|
private function UserInfoDoll(int $isBattle = 0, int $isMain = 0)
|
||||||
{
|
{
|
||||||
$di = new DressedItems($this->id);
|
$di = new DressedItems($this->id);
|
||||||
$stats = new UserStats($this->id);
|
|
||||||
$dressedItems = $di->getItemsInSlots();
|
$dressedItems = $di->getItemsInSlots();
|
||||||
$str = null;
|
|
||||||
for ($i = 1; $i <= 12; $i++) {
|
for ($i = 1; $i <= 12; $i++) {
|
||||||
$str .= sprintf('<div class="slot-%s">', $i);
|
echo sprintf('<div class="slot-%s">', $i);
|
||||||
if (!empty($dressedItems->$i)) {
|
if (!empty($dressedItems->$i)) {
|
||||||
if (!$isBattle && $isMain) {
|
if (!$isBattle && $isMain) {
|
||||||
$str .= sprintf(
|
echo sprintf('<a href="?edit=%s&drop=%s"><img src="/i/sh/%s" class="item-wrap-normal" alt="%s" title="%s"></a>',
|
||||||
'<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);
|
||||||
mt_rand(),
|
|
||||||
$i,
|
|
||||||
$dressedItems->$i->image,
|
|
||||||
$dressedItems->$i->name,
|
|
||||||
$dressedItems->$i->name
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
$str .= sprintf(
|
echo sprintf('<img src="/i/sh/%s" class="item-wrap-normal tip" alt="%s"><span class="tiptext"><strong>%s</strong></span>',
|
||||||
'<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);
|
||||||
$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);
|
echo sprintf('<img src="/i/sh/noitem.png" class="item-wrap-normal" title="Пустой слот [%s]" alt="Пустой слот [%s]">', $i, $i);
|
||||||
}
|
}
|
||||||
$str .= sprintf('</div><!-- slot-%s -->', $i);
|
echo sprintf('</div><!-- slot-%s -->', $i);
|
||||||
}
|
}
|
||||||
$str .= '<div class="slot-image">';
|
echo '<div class="slot-image">';
|
||||||
$str .= '<img src="/i/shadow/' . $this->shadow . '" alt="' . $this->login;
|
|
||||||
if ($isBattle) {
|
if ($isBattle) {
|
||||||
$str .= '" class = "tip">';
|
echo 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 .= '<span class="tiptext"><b>' . $stats->getLogin() . '</b>';
|
$this->shadow, $this->login, $this->login, $this->level, $this->strength, $this->dexterity, $this->intuition, $this->endurance, $this->intelligence, $this->wisdom);
|
||||||
$str .= self::LEVEL . ': ' . $stats->getLevel();
|
unset($sh);
|
||||||
$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 .= '">';
|
echo '<img src="/i/shadow/' . $this->shadow . '" alt="' . $this->login . '">';
|
||||||
}
|
}
|
||||||
$str .= '</div><!-- slot-image -->';
|
echo '</div><!-- slot-image -->';
|
||||||
return $str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Вызов из inf.php */
|
private function ttz()
|
||||||
private function ttz(): string
|
|
||||||
{
|
{
|
||||||
$stat = $this->getFullStats();
|
$stat = $this->getFullStats();
|
||||||
$arr = [
|
$arr = [
|
||||||
self::LEVEL => $this->level,
|
'Уровень' => $this->level,
|
||||||
self::STRENGTH => $this->strength,
|
'Сила' => $this->printStat('strength'),
|
||||||
self::DEXTERITY => $this->dexterity,
|
'Ловкость' => $this->printStat('dexterity'),
|
||||||
self::INTUITION => $this->intuition,
|
'Интуиция' => $this->printStat('intuition'),
|
||||||
self::ENDURANCE => $this->endurance,
|
'Выносливость' => $this->printStat('endurance'),
|
||||||
self::INTELLIGENCE => $this->intelligence,
|
'Интеллект' => $this->printStat('intelligence'),
|
||||||
self::WISDOM => $this->wisdom,
|
'Мудрость' => $this->printStat('wisdom'),
|
||||||
self::EVASION => $stat->evasion,
|
'Уворот' => $stat->evasion,
|
||||||
self::ACCURACY => $stat->accuracy,
|
'Точность' => $stat->accuracy,
|
||||||
self::CRITICALS => $stat->criticals,
|
'Шанс крита' => $stat->criticals,
|
||||||
self::DAMAGE => $stat->min_physical_damage . ' - ' . $stat->max_physical_damage,
|
'Урон' => $stat->min_physical_damage . ' - ' . $stat->max_physical_damage,
|
||||||
self::LOCATION => Rooms::$roomNames[$this->room],
|
'Локация' => Rooms::$roomNames[$this->room],
|
||||||
|
|
||||||
];
|
];
|
||||||
$str = null;
|
$str = null;
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($arr as $item => $value) {
|
foreach ($arr as $item => $value) {
|
||||||
$str .= "<div class='column' style='text-align: right; margin-right: 10px;'>$item</div><div class='column' style='width: max-content;'>$value</div>";
|
$str .= "<div class='column' style='text-align: right; margin-right: 10px;'>$item</div><div class='column'>$value</div>";
|
||||||
if (in_array($i, [6, 9])) {
|
if (in_array($i,[6,9])) {
|
||||||
$str .= "<div style='margin-top: 10px;'></div><div></div>";
|
$str .= "<div style='margin-top: 10px;'></div><div></div>";
|
||||||
}
|
}
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
return sprintf(
|
$nameString = $this->align ? "<img src='/i/align_$this->align.png' alt='Склонность'>" : "";
|
||||||
"<div class='info'>%s</div><!-- info --><div class='stats-container' style='display: grid; grid-template-columns: 150px 100px; font-size: 1.2em;'>%s</div>",
|
$nameString .= $this->block ? "<span class='private' style='text-decoration: line-through;'>$this->login</span>" : "<b>$this->login</b>";
|
||||||
Nick::id($this->id)->full(1),
|
$nameString .= $this->clan ? "<img src='/i/clan/$this->clan.png' alt='Клан'>" : "";
|
||||||
$str
|
echo "<div class='info'><b>$nameString</b></div><!-- info -->";
|
||||||
);
|
echo "<div class='stats-container' style='display: grid; grid-template-columns: 150px 100px; font-size: 1.2em;'>$str</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
private function showProgressBar(int $value, int $maxValue)
|
private function printStat($statName): string
|
||||||
{
|
|
||||||
$values = [
|
|
||||||
'%20%' => (int)round(self::PERCENT_20 * $maxValue),
|
|
||||||
'%80%' => (int)round(self::PERCENT_80 * $maxValue),
|
|
||||||
'%value' => $value,
|
|
||||||
'%max' => $maxValue
|
|
||||||
];
|
|
||||||
$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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Для вызова из main.php
|
|
||||||
* @throws GameException
|
|
||||||
*/
|
|
||||||
private function userInfoStats(): string
|
|
||||||
{
|
|
||||||
$data = [
|
|
||||||
self::LEVEL => $this->level,
|
|
||||||
self::HEALTH => $this->showProgressBar($this->health, $this->maxHealth),
|
|
||||||
self::MANA => $this->showProgressBar($this->mana, $this->maxMana),
|
|
||||||
self::STRENGTH => parent::getStat('strength', 1),
|
|
||||||
self::DEXTERITY => parent::getStat('dexterity', 1),
|
|
||||||
self::INTUITION => parent::getStat('intuition', 1),
|
|
||||||
self::ENDURANCE => parent::getStat('endurance', 1),
|
|
||||||
self::INTELLIGENCE => parent::getStat('intelligence', 1),
|
|
||||||
self::WISDOM => parent::getStat('wisdom', 1),
|
|
||||||
self::EXPERIENCE => $this->experience,
|
|
||||||
self::FREE_STAT_POINTS => $this->freeStatPoints,
|
|
||||||
self::MONEY => User::getInstance()->money()->get(),
|
|
||||||
self::MONEY_IN_BANK => User::getInstance()->money()->getBank(),
|
|
||||||
];
|
|
||||||
|
|
||||||
$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 $str;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function userInfoStatsTest(): array
|
|
||||||
{
|
{
|
||||||
$stat = $this->getFullStats();
|
$stat = $this->getFullStats();
|
||||||
return [
|
return $this->getFreeStatPoints() ? $this->getStat($statName, 1) . '(' . $stat->$statName . ')' : $stat->$statName;
|
||||||
self::STRENGTH => $this->strength,
|
|
||||||
self::DEXTERITY => $this->dexterity,
|
|
||||||
self::INTUITION => $this->intuition,
|
|
||||||
self::ENDURANCE => $this->endurance,
|
|
||||||
self::INTELLIGENCE => $this->intelligence,
|
|
||||||
self::WISDOM => $this->wisdom,
|
|
||||||
'<br>' . self::HEALTH => $this->health . ' / ' . $this->maxHealth,
|
|
||||||
self::MANA => $this->mana . ' / ' . $this->maxMana,
|
|
||||||
self::EVASION => $stat->evasion,
|
|
||||||
self::ACCURACY => $stat->accuracy,
|
|
||||||
self::CRITICALS => $stat->criticals,
|
|
||||||
self::DAMAGE => $stat->min_physical_damage . ' - ' . $stat->max_physical_damage,
|
|
||||||
'<br>' . self::LEVEL => $this->level,
|
|
||||||
self::EXPERIENCE => $this->experience,
|
|
||||||
self::MONEY => $this->money()->get(),
|
|
||||||
'<br>' . self::LOCATION => Rooms::$roomNames[$this->room],
|
|
||||||
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Для вызова из inf.php
|
//TODO вызывать из main.php
|
||||||
* @throws GameException
|
private function UserInfoStats($isMainWindow = 0)
|
||||||
|
{
|
||||||
|
$stat = $this->getFullStats();
|
||||||
|
$captions = 'Уровень:<br>Сила:<br>Ловкость:<br>Интуиция:<br>Выносливость:<br>Интеллект:<br>Мудрость:<br>Местонахождение:';
|
||||||
|
$variables =
|
||||||
|
$this->level . '<br>' .
|
||||||
|
$stat->strength . '<br>' .
|
||||||
|
$stat->dexterity . '<br>' .
|
||||||
|
$stat->intuition . '<br>' .
|
||||||
|
$stat->endurance . '<br>' .
|
||||||
|
$stat->intelligence . '<br>' .
|
||||||
|
$stat->wisdom . '<br>' .
|
||||||
|
Rooms::$roomNames[$this->room];
|
||||||
|
if ($isMainWindow) {
|
||||||
|
$captions = 'Уровень:<br>Здоровье:<br>Сила:<br>Ловкость:<br>Интуиция:<br>Выносливость:<br>Интеллект:<br>Мудрость:<br>Опыт:<br>Очки характеристик:<br>Деньги:<br>Деньги в банке:';
|
||||||
|
$variables =
|
||||||
|
$this->level . '<br>' .
|
||||||
|
$this->health . '<br>' .
|
||||||
|
parent::getStat('strength', 1) . '<br>' .
|
||||||
|
parent::getStat('dexterity', 1) . '<br>' .
|
||||||
|
parent::getStat('intuition', 1) . '<br>' .
|
||||||
|
parent::getStat('endurance', 1) . '<br>' .
|
||||||
|
parent::getStat('intelligence', 1) . '<br>' .
|
||||||
|
parent::getStat('wisdom', 1) . '<br>' .
|
||||||
|
$this->experience . '<br>' .
|
||||||
|
$this->free_stat_points . '<br>' .
|
||||||
|
$this->money . '<br>' .
|
||||||
|
$this->bankMoney;
|
||||||
|
}
|
||||||
|
$nameString = null;
|
||||||
|
if ($this->align) {
|
||||||
|
if (file_exists("/i/align_$this->align.png")) {
|
||||||
|
$nameString .= "<img src='/i/align_$this->align.png' alt='Склонность'>";
|
||||||
|
} else {
|
||||||
|
$nameString .= "<svg width=16 height=16><circle cx=8 cy=8 r=6 stroke=darkorange stroke-width=1 fill=orange></circle></svg>";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$nameString .= "";
|
||||||
|
}
|
||||||
|
$nameString .= $this->block ? "<span class='private' style='text-decoration: line-through;'>$this->login</span>" : "<b>$this->login</b>";
|
||||||
|
if ($this->clan) {
|
||||||
|
if (file_exists("/i/clan/$this->clan.png")) {
|
||||||
|
$nameString .= "<img src='/i/clan/$this->clan.png' alt='Клан'>";
|
||||||
|
} else {
|
||||||
|
$nameString .= "<svg width=16 height=16><circle cx=8 cy=8 r=6 stroke=darkred stroke-width=1 fill=red></circle></svg>";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$nameString .= "";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo <<<HTML
|
||||||
|
<div class="user-info">
|
||||||
|
<div class="info"><b>$nameString</b></div><!-- info -->
|
||||||
|
<div class="stats-container">
|
||||||
|
<div class="column">$captions</div><!-- column -->
|
||||||
|
<div class="column">$variables</div><!-- column -->
|
||||||
|
</div><!-- stats-container -->
|
||||||
|
</div><!-- user-info -->
|
||||||
|
HTML;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* О персонаже для модераторов.
|
||||||
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
|
private function showPrivateData(): ?string
|
||||||
|
{
|
||||||
|
$birthday = date('d.m.Y', strtotime($this->borndate));
|
||||||
|
$userLogs = GameLogs::getUserLogs($this->id);
|
||||||
|
$log = null;
|
||||||
|
while ($userLogRow = $userLogs->fetchArray(SQLITE3_ASSOC)) {
|
||||||
|
$log .= sprintf('<code>%s</code><br>', date('d.m.Y H:i ', strtotime($userLogRow['date'])) . $userLogRow['text']);
|
||||||
|
}
|
||||||
|
$adminData = $this->watcher->getAdmin() ? $this->showAdminOnlyData() : null;
|
||||||
|
return <<<INFO
|
||||||
|
<div class="secret-info">
|
||||||
|
E-Mail: $this->email<br>
|
||||||
|
ДР Игрока: $birthday<br>
|
||||||
|
IP Регистрации: $this->ip<br>
|
||||||
|
$adminData<br>
|
||||||
|
<div class="secret-info-user-log"><b>Личное дело</b><br>
|
||||||
|
$log
|
||||||
|
</div><!-- secret-info-user-log -->
|
||||||
|
</div><!-- secret-info -->
|
||||||
|
INFO;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* О персонаже для администраторов.
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
private function showAdminOnlyData(): ?string
|
||||||
|
{
|
||||||
|
return <<<INFO
|
||||||
|
⁑ ИД Игрока: $this->id<br>
|
||||||
|
⁑ ИД Комнаты: $this->room<br>
|
||||||
|
⁑ Деньги: $this->money<br>
|
||||||
|
⁑ Деньги в банке: $this->bankMoney<br>
|
||||||
|
⁑ Опыт: $this->experience<br>
|
||||||
|
⁑ Нераспределённые очки: $this->free_stat_points<br>
|
||||||
|
INFO;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function Info()
|
||||||
|
{
|
||||||
|
echo '<div class="user-info-container">';
|
||||||
|
$this->UserInfoDoll();
|
||||||
|
$this->ttz();
|
||||||
|
echo '<div class="slot-lower"> <!-- statuses! --></div>';
|
||||||
|
echo '</div><!-- u-i-c -->';
|
||||||
|
echo '<hr><!-- Нижняя часть -->';
|
||||||
|
echo '<div class="user-info-container-lower">';
|
||||||
|
echo '<h2>Об игроке</h2>';
|
||||||
|
echo $this->realname ? "Имя: $this->realname" : "";
|
||||||
|
echo $this->info ? "<br>" . nl2br($this->info) : "";
|
||||||
|
echo '</div><!-- u-i-c-l -->';
|
||||||
|
if ($this->watcher->getAdmin() || $this->watcher->getAlign() == 1) {
|
||||||
|
echo $this->showPrivateData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function showUserInfo()
|
public function showUserInfo()
|
||||||
{
|
{
|
||||||
$str = null;
|
$effects = new EffectsModel($this->id);
|
||||||
$hidden = UserEffect::hasHiddenProfile($this->id);
|
|
||||||
if ($this->block && !User::getInstance()->getAdmin()) {
|
if ($this->block && (!$this->watcher->getAdmin() || !$this->watcher->getAlign() == 1)) {
|
||||||
$str .= "<span class='error'>Персонаж $this->login заблокирован!</span>";
|
echo "<span class='error'>Персонаж $this->login заблокирован!</span>";
|
||||||
} elseif (!empty($hidden) && !User::getInstance()->getAdmin()) {
|
} elseif ($effects->getHideUserInfoStatus() && (!$this->watcher->getAdmin() || !$this->watcher->getAlign() == 1)) {
|
||||||
$str .= "<span class='error'>Персонаж $this->login обезличен $hidden.</span>";
|
if ($effects->getHideUserInfoStatus() == -1) {
|
||||||
} else {
|
$date = 'навсегда';
|
||||||
$str .= '<div class="user-info-container">';
|
} else {
|
||||||
$str .= $this->userInfoDoll();
|
$date = 'до' . date('d.m.Y', strtotime($effects->getHideUserInfoStatus()));
|
||||||
$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><!-- u-i-c -->';
|
|
||||||
$str .= '<hr><!-- Нижняя часть -->';
|
|
||||||
$str .= '<div class="user-info-container-lower">';
|
|
||||||
$str .= '<h2>Об игроке</h2>';
|
|
||||||
$str .= $this->profile()->getRealname() ? "Имя: {$this->profile()->getRealname()}" : '';
|
|
||||||
$str .= $this->profile()->getInfo() ? '<br>' . nl2br($this->profile()->getInfo()) : '';
|
|
||||||
$str .= '</div><!-- u-i-c-l -->';
|
|
||||||
if (User::getInstance()->getAdmin()) {
|
|
||||||
$str .= UserPrivateInfo::get(User::getInstance());
|
|
||||||
}
|
}
|
||||||
}
|
echo "<span class='error'>Персонаж $this->login обезличен $date.</span>";
|
||||||
echo $str;
|
} else {
|
||||||
}
|
$this->Info();
|
||||||
|
|
||||||
public function showUserDoll($isBattle = 0, $isMain = 0): string
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
return '<div class="user-info-container">' . $this->userInfoDoll($isBattle, $isMain) . '</div><!-- u-i-c -->';
|
|
||||||
} catch (GameException $e) {
|
|
||||||
return $e;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Отображение на main.php
|
public function showUserDoll($isBattle = 0, $isMain = 0)
|
||||||
*/
|
|
||||||
public function showUserInfoMain(): string
|
|
||||||
{
|
{
|
||||||
try {
|
echo '<div class="user-info-container">';
|
||||||
return '<div class="user-doll-container">' . $this->userInfoDoll() . '</div><!-- user-doll-container -->' . $this->userInfoStats();
|
$this->UserInfoDoll($isBattle, $isMain);
|
||||||
} catch (GameException $e) {
|
echo '</div><!-- user-info-container -->';
|
||||||
return $e;
|
}
|
||||||
}
|
|
||||||
|
public function showUserInfoMain()
|
||||||
|
{
|
||||||
|
echo '<div class="user-info-container">';
|
||||||
|
$this->UserInfoDoll();
|
||||||
|
$this->userInfoStats(1);
|
||||||
|
echo '</div><!-- user-info-container -->';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function showUserEffects(): string
|
public function showUserEffects(): string
|
||||||
{
|
{
|
||||||
$effs = Effects::getAll($this->id);
|
$effs = DBPDO::INIT()->ofetchAll('SELECT * FROM users_effects WHERE owner_id = ?', $this->id);
|
||||||
$img = UserEffect::$effectImage;
|
$img = UserEffects::$effectImage;
|
||||||
$r = '';
|
$r = '';
|
||||||
foreach ($effs as $effect) {
|
foreach ($effs as $effect) {
|
||||||
$timeleft = timeOut($effect->remaining_time - time());
|
$timeleft = timeOut($effect->remaining_time - time());
|
||||||
@ -263,4 +271,14 @@ class UserInfo extends UserStats
|
|||||||
}
|
}
|
||||||
return $r;
|
return $r;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* @param mixed $watcher_id
|
||||||
|
*/
|
||||||
|
public function setWatcher(int $watcher_id): void
|
||||||
|
{
|
||||||
|
$this->watcher = new User($watcher_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,71 +0,0 @@
|
|||||||
<?php
|
|
||||||
# Date: 19.02.2022 (18:54)
|
|
||||||
namespace Battles;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class UserMoney
|
|
||||||
{
|
|
||||||
private int $uid;
|
|
||||||
private int $walletMoney;
|
|
||||||
private Bank $bank;
|
|
||||||
|
|
||||||
public function __construct(int $uid, int $money)
|
|
||||||
{
|
|
||||||
$this->uid = $uid;
|
|
||||||
$this->walletMoney = $money;
|
|
||||||
$this->initBank();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function initBank()
|
|
||||||
{
|
|
||||||
$this->bank = new Bank($this->uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get(): int
|
|
||||||
{
|
|
||||||
return $this->walletMoney;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function set(int $money)
|
|
||||||
{
|
|
||||||
$this->walletMoney = max($money, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getBank(): int
|
|
||||||
{
|
|
||||||
return $this->bank->getMoney();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function modifyBank(int $money, string $logType = '')
|
|
||||||
{
|
|
||||||
$this->bank->modify($money, $logType);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function save()
|
|
||||||
{
|
|
||||||
Db::getInstance()->execute('update users set money = ? where id = ?', [$this->walletMoney, $this->uid]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Тратим деньги */
|
|
||||||
public function spend(int $value): bool
|
|
||||||
{
|
|
||||||
if ($this->walletMoney > $value && $value > 0) {
|
|
||||||
$this->walletMoney -= $value;
|
|
||||||
$this->save();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Получаем деньги */
|
|
||||||
public function earn(int $value): bool
|
|
||||||
{
|
|
||||||
if ($value <= 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$this->walletMoney += $value;
|
|
||||||
$this->save();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
<?php
|
|
||||||
# Date: 17.02.2022 (22:27)
|
|
||||||
namespace Battles;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class UserPrivateInfo
|
|
||||||
{
|
|
||||||
/** Блок информации для модераторов. */
|
|
||||||
public static function get(User $user)
|
|
||||||
{
|
|
||||||
$log = '';
|
|
||||||
$userLogs = GameLogs::getUserLogs($user->getId());
|
|
||||||
foreach ($userLogs as $row) {
|
|
||||||
$log .= sprintf('<code>%s</code><br>', date('d.m.Y H:i ', strtotime($row['date'])) . $row['text']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = [
|
|
||||||
'%email' => $user->profile()->getEmail(),
|
|
||||||
'%bday' => date('d.m.Y', strtotime($user->profile()->getBorndate())),
|
|
||||||
'%regip' => $user->profile()->getIp(),
|
|
||||||
'%uid' => $user->getId(),
|
|
||||||
'%room' => $user->getRoom(),
|
|
||||||
'%wallet' => $user->money()->get(),
|
|
||||||
'%bank' => Db::getInstance()->fetchColumn('select money from bank where user_id = ?', $user->getId()),
|
|
||||||
'%exp' => $user->getExperience(),
|
|
||||||
'%fp' => Db::getInstance()->fetchColumn('select free_stat_points from users where id = ?', $user->getId()),
|
|
||||||
'%log' => $log ?? 'Журнал пуст.',
|
|
||||||
];
|
|
||||||
$string = '<div class="secret-info">E-Mail: %email<br>ДР Игрока: %bday<br>IP Регистрации: %regip<br>
|
|
||||||
⁑ ИД Игрока: %uid<br> ⁑ ИД Комнаты: %room<br> ⁑ Деньги: %wallet<br> ⁑ Деньги в банке: %bank<br>
|
|
||||||
⁑ Опыт: %exp<br> ⁑ Нераспределённые очки: %fp<br><br>
|
|
||||||
<div class="secret-info-user-log"><b>Личное дело</b><br>%log</div><!-- secret-info-user-log -->
|
|
||||||
</div><!-- secret-info -->';
|
|
||||||
return str_replace(array_keys($data), array_values($data), $string);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,163 +0,0 @@
|
|||||||
<?php
|
|
||||||
# Date: 16.02.2022 (21:22)
|
|
||||||
namespace Battles;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class UserProfile
|
|
||||||
{
|
|
||||||
|
|
||||||
private int $id;
|
|
||||||
private string $pass;
|
|
||||||
private string $email;
|
|
||||||
private string $realname;
|
|
||||||
private string $borndate;
|
|
||||||
private string $info;
|
|
||||||
private string $ip;
|
|
||||||
private const INFO_CHAR_LIMIT = 1500;
|
|
||||||
private string $status = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param int $id
|
|
||||||
* @param string $pass
|
|
||||||
* @param string $email
|
|
||||||
* @param string $realname
|
|
||||||
* @param string $borndate
|
|
||||||
* @param string $info
|
|
||||||
* @param string $ip
|
|
||||||
*/
|
|
||||||
public function __construct(
|
|
||||||
int $id,
|
|
||||||
string $pass,
|
|
||||||
string $email,
|
|
||||||
string $realname,
|
|
||||||
string $borndate,
|
|
||||||
string $info,
|
|
||||||
string $ip
|
|
||||||
)
|
|
||||||
{
|
|
||||||
$this->id = $id;
|
|
||||||
$this->pass = $pass;
|
|
||||||
$this->email = $email;
|
|
||||||
$this->realname = $realname;
|
|
||||||
$this->borndate = $borndate;
|
|
||||||
$this->info = $info;
|
|
||||||
$this->ip = $ip;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function changePassword($oldPassword, $newPassword)
|
|
||||||
{
|
|
||||||
if (password_verify($oldPassword, $this->pass)) {
|
|
||||||
$this->pass = password_hash($newPassword, PASSWORD_DEFAULT);
|
|
||||||
} else {
|
|
||||||
$this->status .= 'Неверный пароль!';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getEmail(): string
|
|
||||||
{
|
|
||||||
return $this->email;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $email
|
|
||||||
*/
|
|
||||||
public function setEmail(string $email): void
|
|
||||||
{
|
|
||||||
$this->email = $email;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getRealname(): string
|
|
||||||
{
|
|
||||||
return $this->realname;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $realname
|
|
||||||
*/
|
|
||||||
public function setRealname(string $realname): void
|
|
||||||
{
|
|
||||||
$this->realname = htmlspecialchars($realname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getBorndate(): string
|
|
||||||
{
|
|
||||||
return $this->borndate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $borndate
|
|
||||||
*/
|
|
||||||
public function setBorndate(string $borndate): void
|
|
||||||
{
|
|
||||||
$this->borndate = $borndate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getInfo(): string
|
|
||||||
{
|
|
||||||
return $this->info;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $info
|
|
||||||
*/
|
|
||||||
public function setInfo(string $info): void
|
|
||||||
{
|
|
||||||
if (strlen($info) > self::INFO_CHAR_LIMIT) {
|
|
||||||
$this->status .= 'Максимальная длинна поля Хобби: ' . self::INFO_CHAR_LIMIT . ' символов!';
|
|
||||||
} else {
|
|
||||||
$info = htmlspecialchars($info);
|
|
||||||
$info = str_replace("\\n", '<br />', $info);
|
|
||||||
$info = str_replace("\\r", '', $info);
|
|
||||||
$info = str_replace('<br />', '<br />', $info);
|
|
||||||
$this->info = $info;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getIp(): string
|
|
||||||
{
|
|
||||||
return $this->ip;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Сохраняет в базу актуальные имя, пароль, email, дату рождения, текст инфы.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function save(): string
|
|
||||||
{
|
|
||||||
if ($this->status) {
|
|
||||||
return $this->status;
|
|
||||||
}
|
|
||||||
|
|
||||||
$query = 'update users set pass = ?, email = ?, realname = ?, borndate = ?, info = ? where id = ?';
|
|
||||||
$vals = [
|
|
||||||
//set
|
|
||||||
$this->pass,
|
|
||||||
$this->email,
|
|
||||||
$this->realname,
|
|
||||||
$this->borndate,
|
|
||||||
$this->info,
|
|
||||||
// where
|
|
||||||
$this->id
|
|
||||||
];
|
|
||||||
Db::getInstance()->execute($query, $vals);
|
|
||||||
return 'Успешно!';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -3,35 +3,33 @@
|
|||||||
|
|
||||||
namespace Battles;
|
namespace Battles;
|
||||||
|
|
||||||
use Battles\Models\Inventory;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Models\User\Effects;
|
|
||||||
use Battles\Models\User\Stats;
|
|
||||||
use Exceptions\GameException;
|
use Exceptions\GameException;
|
||||||
|
|
||||||
class UserStats extends User
|
class UserStats extends User
|
||||||
{
|
{
|
||||||
protected int $id;
|
protected $strength;
|
||||||
protected int $strength;
|
protected $dexterity;
|
||||||
protected int $dexterity;
|
protected $intuition;
|
||||||
protected int $intuition;
|
protected $endurance;
|
||||||
protected int $endurance;
|
protected $intelligence;
|
||||||
protected int $intelligence;
|
protected $wisdom;
|
||||||
protected int $wisdom;
|
protected $health;
|
||||||
protected int $health;
|
protected $mana;
|
||||||
protected int $mana;
|
protected $free_stat_points;
|
||||||
protected int $freeStatPoints = 0;
|
|
||||||
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 = 'Ошибка: Параметр достиг своего лимита!';
|
||||||
private const ERROR_STAT_UNKNOWN = 'Ошибка: Неизвестный параметр!';
|
private const ERROR_STAT_UNKNOWN = 'Ошибка: Неизвестный параметр!';
|
||||||
private const STAT_NAMES_ARRAY = ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'];
|
|
||||||
|
|
||||||
//// Неизменяемые для игрока(!) переменные.
|
//// Неизменяемые для игрока(!) переменные.
|
||||||
// Удар кулаком всегда 1-2.
|
// Удар кулаком всегда 1-2.
|
||||||
protected int $minDamage = 1;
|
protected int $minDamage = 1;
|
||||||
protected int $maxDamage = 2;
|
protected int $maxDamage = 2;
|
||||||
// Природная броня всегда 0.
|
// Природная броня всегда 0.
|
||||||
|
// Зачем их три, если во всех формулах она одна?
|
||||||
|
protected int $headArmor = 0;
|
||||||
|
protected int $chestArmor = 0;
|
||||||
|
protected int $legArmor = 0;
|
||||||
// Динамически рассчитываемые
|
// Динамически рассчитываемые
|
||||||
protected int $maxHealth;
|
protected int $maxHealth;
|
||||||
protected int $maxMana;
|
protected int $maxMana;
|
||||||
@ -43,19 +41,6 @@ class UserStats extends User
|
|||||||
*/
|
*/
|
||||||
public function __construct($user)
|
public function __construct($user)
|
||||||
{
|
{
|
||||||
|
|
||||||
$data = Stats::getAll($user);
|
|
||||||
$this->id = $data->id;
|
|
||||||
$this->strength = $data->strength;
|
|
||||||
$this->dexterity = $data->dexterity;
|
|
||||||
$this->intuition = $data->intuition;
|
|
||||||
$this->endurance = $data->endurance;
|
|
||||||
$this->intelligence = $data->intelligence;
|
|
||||||
$this->wisdom = $data->wisdom;
|
|
||||||
$this->health = $data->health;
|
|
||||||
$this->mana = $data->mana;
|
|
||||||
$this->freeStatPoints = $data->free_stat_points;
|
|
||||||
$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));
|
||||||
$this->maxMana = round(($this->wisdom * 3) + ($this->wisdom / 2) * ($this->level - 1) + ($this->wisdom / 5) * (($this->level - 1) * ($this->level - 2) / 2));
|
$this->maxMana = round(($this->wisdom * 3) + ($this->wisdom / 2) * ($this->level - 1) + ($this->wisdom / 5) * (($this->level - 1) * ($this->level - 2) / 2));
|
||||||
@ -64,51 +49,50 @@ class UserStats extends User
|
|||||||
/**
|
/**
|
||||||
* Отдаёт информацию о базовом(!) стате.
|
* Отдаёт информацию о базовом(!) стате.
|
||||||
*
|
*
|
||||||
* @param string $statName - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition',
|
* @param $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition',
|
||||||
* 'endurance', 'intelligence', 'wisdom'.
|
* 'endurance', 'intelligence', 'wisdom'.
|
||||||
* @param int $isMainWindow - переключатель "главного окна". Если включить, дополнительно будет показывать ссылку
|
* @param int $isMainWindow - переключатель "главного окна". Если включить, дополнительно будет показывать ссылку
|
||||||
* на повышение стата на 1, при условии наличия свободных очков статов.
|
* на повышение стата на 1, при условии наличия свободных очков статов.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
* @throws GameException
|
|
||||||
*/
|
*/
|
||||||
public function getStat(string $statName, int $isMainWindow = 0): string
|
public function getStat($stat_name, int $isMainWindow = 0): string
|
||||||
{
|
{
|
||||||
if (!in_array($statName, self::STAT_NAMES_ARRAY)) {
|
if (!in_array($stat_name, ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'])) {
|
||||||
throw new GameException(self::ERROR_STAT_UNKNOWN);
|
return self::ERROR_STAT_UNKNOWN;
|
||||||
}
|
}
|
||||||
$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) {
|
$this->$stat_name .= " <a href='/main.php?edit=" . mt_rand() . "&ups=$stat_name'>[+]</a>";
|
||||||
$rand = strval(mt_rand());
|
|
||||||
$stat .= " <a href='/main.php?edit=$rand&ups=$statName'>[+]</a>";
|
|
||||||
}
|
}
|
||||||
return $stat;
|
return $this->$stat_name;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков
|
* Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков
|
||||||
* статов.
|
* статов.
|
||||||
*
|
*
|
||||||
* @param string $statName - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition',
|
* @param string $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition',
|
||||||
* 'endurance', 'intelligence', 'wisdom'.
|
* 'endurance', 'intelligence', 'wisdom'.
|
||||||
*
|
*
|
||||||
* @throws GameException
|
* @throws GameException
|
||||||
*/
|
*/
|
||||||
public function addOnePointToStat(string $statName)
|
public function addOnePointToStat(string $stat_name)
|
||||||
{
|
{
|
||||||
if (!in_array($statName, self::STAT_NAMES_ARRAY)) {
|
if (!in_array($stat_name, ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'])) {
|
||||||
throw new GameException(self::ERROR_STAT_UNKNOWN);
|
throw new GameException(self::ERROR_STAT_UNKNOWN);
|
||||||
}
|
}
|
||||||
if ($this->freeStatPoints <= 0 || $this->$statName >= self::STAT_MAXIMUM_AMOUNT) {
|
if ($this->free_stat_points <= 0 || $this->$stat_name >= self::STAT_MAXIMUM_AMOUNT) {
|
||||||
throw new GameException(self::ERROR_STAT_IS_MAXIMUM);
|
throw new GameException(self::ERROR_STAT_IS_MAXIMUM);
|
||||||
} else {
|
} else {
|
||||||
Stats::addOne($statName, $this->id);
|
$query = "UPDATE users SET {$stat_name} = {$stat_name} + 1, free_stat_points = free_stat_points - 1 WHERE id = ?";
|
||||||
|
self::$db->execute($query, $this->id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMaxWeight(): int
|
public function getMaxWeight(): int
|
||||||
{
|
{
|
||||||
return max($this->strength * 5, 50);
|
return $this->strength * 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -132,7 +116,7 @@ class UserStats extends User
|
|||||||
*/
|
*/
|
||||||
public function getFreeStatPoints()
|
public function getFreeStatPoints()
|
||||||
{
|
{
|
||||||
return $this->freeStatPoints;
|
return $this->free_stat_points;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,15 +135,71 @@ class UserStats extends User
|
|||||||
return $this->maxMana;
|
return $this->maxMana;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getHeadArmor(): int
|
||||||
|
{
|
||||||
|
return $this->headArmor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getChestArmor(): int
|
||||||
|
{
|
||||||
|
return $this->chestArmor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getLegArmor(): int
|
||||||
|
{
|
||||||
|
return $this->legArmor;
|
||||||
|
}
|
||||||
|
|
||||||
public function getFullStats(): object
|
public function getFullStats(): object
|
||||||
{
|
{
|
||||||
$stats = Stats::getAll($this->id);
|
$stats = self::$db->ofetch("
|
||||||
$itemBonuses = Inventory::getBonuses($this->id);
|
select
|
||||||
$effectBonuses = Effects::getStatMods($this->id);
|
strength,
|
||||||
|
dexterity,
|
||||||
|
intuition,
|
||||||
|
endurance,
|
||||||
|
intelligence,
|
||||||
|
wisdom
|
||||||
|
from users where id = $this->id");
|
||||||
|
$itemBonuses = self::$db->ofetch("
|
||||||
|
select
|
||||||
|
sum(add_strength) as item_strength,
|
||||||
|
sum(add_dexterity) as item_dexterity,
|
||||||
|
sum(add_intuition) as item_intuition,
|
||||||
|
sum(add_endurance) as item_endurance,
|
||||||
|
sum(add_intelligence) as item_intelligence,
|
||||||
|
sum(add_wisdom) as item_wisdom,
|
||||||
|
sum(add_accuracy) as item_accuracy,
|
||||||
|
sum(add_evasion) as item_evasion,
|
||||||
|
sum(add_criticals) as item_criticals,
|
||||||
|
sum(add_min_physical_damage) as item_min_physical_damage,
|
||||||
|
sum(add_max_physical_damage) as item_max_physical_damage
|
||||||
|
from inventory where dressed_slot != 0 and owner_id = $this->id");
|
||||||
|
$effectBonuses = self::$db->ofetch("
|
||||||
|
select
|
||||||
|
sum(mod_strength) as effect_strength,
|
||||||
|
sum(mod_dexterity) as effect_dexterity,
|
||||||
|
sum(mod_intuition) as effect_intuition,
|
||||||
|
sum(mod_endurance) as effect_endurance,
|
||||||
|
sum(mod_intelligence) as effect_intelligence,
|
||||||
|
sum(mod_wisdom) as effect_wisdom
|
||||||
|
from users_effects where owner_id = $this->id");
|
||||||
$obj = (object)[];
|
$obj = (object)[];
|
||||||
foreach (self::STAT_NAMES_ARRAY as $stat) {
|
$obj->strength = max(0,$stats->strength + $itemBonuses->item_strength + $effectBonuses->effect_strength);
|
||||||
$obj->$stat = max(0, $stats->$stat + $itemBonuses->{'item_' . $stat} + $effectBonuses->{'effect_' . $stat});
|
$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);
|
||||||
@ -171,18 +211,21 @@ class UserStats extends User
|
|||||||
public function levelUp(): string
|
public function levelUp(): string
|
||||||
{
|
{
|
||||||
$this->level += 1;
|
$this->level += 1;
|
||||||
$this->freeStatPoints += 2;
|
$this->free_stat_points += 2;
|
||||||
$this->save();
|
$this->saveStats();
|
||||||
Chat::sendSys('Внимание, вы получили ' . $this->level . 'уровень. Доступны очки распределения параметров.');
|
Chat::addSYSMessage('Внимание, вы получили ' . $this->level . 'уровень. Доступны очки распределения параметров.');
|
||||||
return 'Персонаж перешёл на ' . $this->level . 'уровень.';
|
return 'Персонаж перешёл на ' . $this->level . 'уровень.';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Сохраняет в базу актуальные статы, здоровье, ману, свободные очки статов и уровень.
|
/** Сохраняет в базу актуальные статы, здоровье, ману, свободные очки статов и уровень.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private function save()
|
private function saveStats()
|
||||||
{
|
{
|
||||||
Stats::save([
|
$query = 'update users set strength = ?, dexterity = ?, intuition = ?, endurance = ?,
|
||||||
|
intelligence = ?, wisdom = ?, health = ?, mana = ?, free_stat_points = ?,
|
||||||
|
level = ? where id = ?';
|
||||||
|
$vals = [
|
||||||
$this->strength, //set
|
$this->strength, //set
|
||||||
$this->dexterity,
|
$this->dexterity,
|
||||||
$this->intuition,
|
$this->intuition,
|
||||||
@ -191,9 +234,10 @@ class UserStats extends User
|
|||||||
$this->wisdom,
|
$this->wisdom,
|
||||||
$this->health,
|
$this->health,
|
||||||
$this->mana,
|
$this->mana,
|
||||||
$this->freeStatPoints,
|
$this->free_stat_points,
|
||||||
$this->level,
|
$this->level,
|
||||||
$this->id //where
|
$this->id //where
|
||||||
]);
|
];
|
||||||
|
DBPDO::$db->execute($query, $vals);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,29 +0,0 @@
|
|||||||
<?php
|
|
||||||
# Date: 23.02.2022 (1:49)
|
|
||||||
namespace Battles;
|
|
||||||
|
|
||||||
trait Users
|
|
||||||
{
|
|
||||||
protected int $id = 0;
|
|
||||||
protected string $login = '';
|
|
||||||
protected int $level = 0;
|
|
||||||
protected ?int $align = null;
|
|
||||||
protected ?string $clan = null;
|
|
||||||
protected ?int $admin = null;
|
|
||||||
protected int $room = 0;
|
|
||||||
protected int $block = 0;
|
|
||||||
protected string $shadow = '';
|
|
||||||
//userprofile
|
|
||||||
private string $pass = '';
|
|
||||||
private string $email = '';
|
|
||||||
private string $realname = '';
|
|
||||||
private string $borndate = '';
|
|
||||||
private string $info = '';
|
|
||||||
private string $ip = '';
|
|
||||||
|
|
||||||
private ?int $money = null;
|
|
||||||
|
|
||||||
private bool $fuk;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -12,7 +12,7 @@
|
|||||||
* маркеры - т.н. "заполнители", а сами данные передаются "позже", в качестве последующих аргументов основного метода,
|
* маркеры - т.н. "заполнители", а сами данные передаются "позже", в качестве последующих аргументов основного метода,
|
||||||
* выполняющего SQL-запрос - Mysql::query($sql [, $arg, $...]):
|
* выполняющего SQL-запрос - Mysql::query($sql [, $arg, $...]):
|
||||||
*
|
*
|
||||||
* $getInstance->query('SELECT * FROM `table` WHERE `name` = "?s" AND `age` = ?i', $_POST['name'], $_POST['age']);
|
* $db->query('SELECT * FROM `table` WHERE `name` = "?s" AND `age` = ?i', $_POST['name'], $_POST['age']);
|
||||||
*
|
*
|
||||||
* Аргументы SQL-запроса, прошедшие через систему placeholders данного класса, экранируются специальными функциями
|
* Аргументы SQL-запроса, прошедшие через систему placeholders данного класса, экранируются специальными функциями
|
||||||
* экранирования, в зависимости от типа заполнителей. Т.е. вам теперь нет необходимости заключать переменные в функции
|
* экранирования, в зависимости от типа заполнителей. Т.е. вам теперь нет необходимости заключать переменные в функции
|
||||||
@ -45,8 +45,8 @@
|
|||||||
* Например, попытка передать в качестве аргумента значение 55.5 или '55.5' для заполнителя целочисленного типа ?i
|
* Например, попытка передать в качестве аргумента значение 55.5 или '55.5' для заполнителя целочисленного типа ?i
|
||||||
* приведет к выбросу исключения:
|
* приведет к выбросу исключения:
|
||||||
*
|
*
|
||||||
* $getInstance->setTypeMode(Mysql::MODE_STRICT); // устанавливаем строгий режим работы
|
* $db->setTypeMode(Mysql::MODE_STRICT); // устанавливаем строгий режим работы
|
||||||
* $getInstance->query('SELECT ?i', 55.5); // Попытка указать для заполнителя типа int значение типа double в шаблоне запроса SELECT ?i
|
* $db->query('SELECT ?i', 55.5); // Попытка указать для заполнителя типа int значение типа double в шаблоне запроса SELECT ?i
|
||||||
*
|
*
|
||||||
* Это утверждение не относится к числам (целым и с плавающей точкой), заключенным в строки.
|
* Это утверждение не относится к числам (целым и с плавающей точкой), заключенным в строки.
|
||||||
* С точки зрения библиотеки, строка '123' и значение 123 являются типом int.
|
* С точки зрения библиотеки, строка '123' и значение 123 являются типом int.
|
||||||
@ -140,7 +140,7 @@
|
|||||||
* заполнителей скалярного типа, таких как ?i, ?d и ?s. Это сделано по идеологическим соображениям,
|
* заполнителей скалярного типа, таких как ?i, ?d и ?s. Это сделано по идеологическим соображениям,
|
||||||
* автоподстановка кавычек может стать ограничением для возможностей SQL.
|
* автоподстановка кавычек может стать ограничением для возможностей SQL.
|
||||||
* Например, выражение
|
* Например, выражение
|
||||||
* $getInstance->query('SELECT "Total: ?s"', '200');
|
* $db->query('SELECT "Total: ?s"', '200');
|
||||||
* вернёт строку
|
* вернёт строку
|
||||||
* 'Total: 200'
|
* 'Total: 200'
|
||||||
* Если бы кавычки, ограничивающие строковой литерал, ставились бы автоматически,
|
* Если бы кавычки, ограничивающие строковой литерал, ставились бы автоматически,
|
||||||
@ -151,23 +151,20 @@
|
|||||||
* Тем не менее, для перечислений ?as, ?ai, ?ap, ?As, ?Ai и ?Ap ограничивающие кавычки ставятся принудительно, т.к.
|
* Тем не менее, для перечислений ?as, ?ai, ?ap, ?As, ?Ai и ?Ap ограничивающие кавычки ставятся принудительно, т.к.
|
||||||
* перечисления всегда используются в запросах, где наличие кавчек обязательно или не играет роли (а так ли это?):
|
* перечисления всегда используются в запросах, где наличие кавчек обязательно или не играет роли (а так ли это?):
|
||||||
*
|
*
|
||||||
* $getInstance->query('INSERT INTO `test` SET ?As', array('name' => 'Маша', 'age' => '23', 'adress' => 'Москва'));
|
* $db->query('INSERT INTO `test` SET ?As', array('name' => 'Маша', 'age' => '23', 'adress' => 'Москва'));
|
||||||
* -> INSERT INTO test SET `name` = "Маша", `age` = "23", `adress` = "Москва"
|
* -> INSERT INTO test SET `name` = "Маша", `age` = "23", `adress` = "Москва"
|
||||||
*
|
*
|
||||||
* $getInstance->query('SELECT * FROM table WHERE field IN (?as)', array('55', '12', '132'));
|
* $db->query('SELECT * FROM table WHERE field IN (?as)', array('55', '12', '132'));
|
||||||
* -> SELECT * FROM table WHERE field IN ("55", "12", "132")
|
* -> SELECT * FROM table WHERE field IN ("55", "12", "132")
|
||||||
*
|
*
|
||||||
* Также исключения составляют заполнители типа ?f, предназначенные для передачи в запрос имен таблиц и полей.
|
* Также исключения составляют заполнители типа ?f, предназначенные для передачи в запрос имен таблиц и полей.
|
||||||
* Аргумент заполнителя ?f всегда обрамляется обратными кавычками (`):
|
* Аргумент заполнителя ?f всегда обрамляется обратными кавычками (`):
|
||||||
*
|
*
|
||||||
* $getInstance->query('SELECT ?f FROM ?f', 'my_field', 'my_table');
|
* $db->query('SELECT ?f FROM ?f', 'my_field', 'my_table');
|
||||||
* -> SELECT `my_field` FROM `my_table`
|
* -> SELECT `my_field` FROM `my_table`
|
||||||
*/
|
*/
|
||||||
namespace Krugozor\Database\Mysql;
|
namespace Krugozor\Database\Mysql;
|
||||||
|
|
||||||
use mysqli;
|
|
||||||
use mysqli_result;
|
|
||||||
|
|
||||||
class Mysql
|
class Mysql
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -175,7 +172,7 @@ class Mysql
|
|||||||
* Если тип заполнителя не совпадает с типом аргумента, то будет выброшено исключение.
|
* Если тип заполнителя не совпадает с типом аргумента, то будет выброшено исключение.
|
||||||
* Пример такой ситуации:
|
* Пример такой ситуации:
|
||||||
*
|
*
|
||||||
* $getInstance->query('SELECT * FROM `table` WHERE `id` = ?i', '2+мусор');
|
* $db->query('SELECT * FROM `table` WHERE `id` = ?i', '2+мусор');
|
||||||
*
|
*
|
||||||
* - в данной ситуации тип заполнителя ?i - число или числовая строка,
|
* - в данной ситуации тип заполнителя ?i - число или числовая строка,
|
||||||
* а в качестве аргумента передаётся строка '2+мусор' не являющаяся ни числом, ни числовой строкой.
|
* а в качестве аргумента передаётся строка '2+мусор' не являющаяся ни числом, ни числовой строкой.
|
||||||
@ -190,7 +187,7 @@ class Mysql
|
|||||||
* к нужному типу - к типу заполнителя.
|
* к нужному типу - к типу заполнителя.
|
||||||
* Пример такой ситуации:
|
* Пример такой ситуации:
|
||||||
*
|
*
|
||||||
* $getInstance->query('SELECT * FROM `table` WHERE `id` = ?i', '2+мусор');
|
* $db->query('SELECT * FROM `table` WHERE `id` = ?i', '2+мусор');
|
||||||
*
|
*
|
||||||
* - в данной ситуации тип заполнителя ?i - число или числовая строка,
|
* - в данной ситуации тип заполнителя ?i - число или числовая строка,
|
||||||
* а в качестве аргумента передаётся строка '2+мусор' не являющаяся ни числом, ни числовой строкой.
|
* а в качестве аргумента передаётся строка '2+мусор' не являющаяся ни числом, ни числовой строкой.
|
||||||
@ -400,7 +397,7 @@ class Mysql
|
|||||||
throw new Exception(__METHOD__ . ': ' . $this->mysqli->error . '; SQL: ' . $this->query);
|
throw new Exception(__METHOD__ . ': ' . $this->mysqli->error . '; SQL: ' . $this->query);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_object($result) && $result instanceof mysqli_result) {
|
if (is_object($result) && $result instanceof \mysqli_result) {
|
||||||
return new Statement($result);
|
return new Statement($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -428,7 +425,7 @@ class Mysql
|
|||||||
* Применяется для случаев, когда SQL-запрос формируется частями.
|
* Применяется для случаев, когда SQL-запрос формируется частями.
|
||||||
*
|
*
|
||||||
* Пример:
|
* Пример:
|
||||||
* $getInstance->prepare('WHERE `name` = "?s" OR `id` IN(?ai)', 'Василий', array(1, 2));
|
* $db->prepare('WHERE `name` = "?s" OR `id` IN(?ai)', 'Василий', array(1, 2));
|
||||||
* Результат:
|
* Результат:
|
||||||
* WHERE `name` = "Василий" OR `id` IN(1, 2)
|
* WHERE `name` = "Василий" OR `id` IN(1, 2)
|
||||||
*
|
*
|
||||||
@ -551,7 +548,7 @@ class Mysql
|
|||||||
private function connect()
|
private function connect()
|
||||||
{
|
{
|
||||||
if (!is_object($this->mysqli) || !$this->mysqli instanceof mysqli) {
|
if (!is_object($this->mysqli) || !$this->mysqli instanceof mysqli) {
|
||||||
$this->mysqli = @new mysqli($this->server, $this->user, $this->password, null, $this->port, $this->socket);
|
$this->mysqli = @new \mysqli($this->server, $this->user, $this->password, null, $this->port, $this->socket);
|
||||||
|
|
||||||
if ($this->mysqli->connect_error) {
|
if ($this->mysqli->connect_error) {
|
||||||
throw new Exception(__METHOD__ . ': ' . $this->mysqli->connect_error);
|
throw new Exception(__METHOD__ . ': ' . $this->mysqli->connect_error);
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
# Date: 28.10.2020 (17:41)
|
# Date: 28.10.2020 (17:41)
|
||||||
|
|
||||||
namespace Exceptions;
|
namespace Exceptions;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
class GameException extends Exception //custom exception
|
class GameException extends Exception { }
|
||||||
{}
|
|
@ -1,29 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
//namespace /;
|
|
||||||
|
|
||||||
use Battles\Database\Db;
|
|
||||||
|
|
||||||
class Register
|
|
||||||
{
|
|
||||||
public static function addUser(string $login, string $password, string $email, string $birthday): int
|
|
||||||
{
|
|
||||||
$password = password_hash($password, PASSWORD_DEFAULT);
|
|
||||||
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
|
|
||||||
|
|
||||||
if (
|
|
||||||
!$email ||
|
|
||||||
Db::getInstance()->execute('select count(*) from users where login = ? or email = ?', [$login, $email])->fetchColumn()
|
|
||||||
) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Db::getInstance()->execute(
|
|
||||||
'insert into users (login,pass,email,borndate,ip,session_id) values (?,?,?,?,?,?)',
|
|
||||||
[$login, $password, $email, $birthday, $_SERVER['REMOTE_ADDR'], session_id()]
|
|
||||||
);
|
|
||||||
$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 bank (user_id) values ?', $userId);
|
|
||||||
return $userId;
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
use Battles\GameLogs;
|
use Battles\GameLogs;
|
||||||
use Battles\Nick;
|
use Battles\Nick;
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
class Tournament
|
class Tournament
|
||||||
{
|
{
|
||||||
@ -161,8 +160,8 @@ class Tournament
|
|||||||
// кидаем в бой
|
// кидаем в бой
|
||||||
mysql_query("UPDATE `users` SET `battle` = {$id} WHERE `id` = " . $user1 . " OR `id` = " . $user2);
|
mysql_query("UPDATE `users` SET `battle` = {$id} WHERE `id` = " . $user1 . " OR `id` = " . $user2);
|
||||||
// создаем лог
|
// создаем лог
|
||||||
$rr = "<b>" . Nick::id(User::getInstance()->getId())->full(1) . "</b> и <b>" . Nick::id($jert['id'])->full(1) . "</b>";
|
$rr = "<b>" . Nick::id($user['id'])->full(1) . "</b> и <b>" . Nick::id($jert['id'])->full(1) . "</b>";
|
||||||
addch("<a href=logs.php?log=" . $id . " target=_blank>Бой</a> между <B><b>" . Nick::id(User::getInstance()->getId())->short() . "</b> и <b>" . Nick::id($jert['id'])->short() . "</b> начался. ", User::getInstance()->getRoom());
|
addch("<a href=logs.php?log=" . $id . " target=_blank>Бой</a> между <B><b>" . Nick::id($user['id'])->short() . "</b> и <b>" . Nick::id($jert['id'])->short() . "</b> начался. ", $user->getRoom());
|
||||||
GameLogs::addBattleLog($id, "Часы показывали <span class=date>" . date("Y.m.d H.i") . "</span>, когда " . $rr . " решили выяснить кто из них сильнее. <i>(турнир)</i><BR>");
|
GameLogs::addBattleLog($id, "Часы показывали <span class=date>" . date("Y.m.d H.i") . "</span>, когда " . $rr . " решили выяснить кто из них сильнее. <i>(турнир)</i><BR>");
|
||||||
return $id;
|
return $id;
|
||||||
}
|
}
|
@ -1612,9 +1612,9 @@ class fbattle
|
|||||||
addchp('<font color=red>Внимание!</font> Победа! Бой окончен. Всего вами нанесено урона : ' . $this->damage[$v] . ' HP. Получено опыта : ' . $this->exp[$v] . ' (' . $dop_exp . '%)' . $ads . ' ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
addchp('<font color=red>Внимание!</font> Победа! Бой окончен. Всего вами нанесено урона : ' . $this->damage[$v] . ' HP. Получено опыта : ' . $this->exp[$v] . ' (' . $dop_exp . '%)' . $ads . ' ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
||||||
|
|
||||||
mysql_query('UPDATE `users` SET `win` = (`win` +1), `fullhptime` = ' . time() . ' WHERE `id` = "' . $v . '"');
|
mysql_query('UPDATE `users` SET `win` = (`win` +1), `fullhptime` = ' . time() . ' WHERE `id` = "' . $v . '"');
|
||||||
\Battles\User::getInstance($v)->addExperience($this->exp[$v]);
|
GiveExp($v, $this->exp[$v]);
|
||||||
if ($user['caveleader'] > 0 || $user['laba'] > 0) {
|
if ($user['caveleader'] > 0 || $user['laba'] > 0) {
|
||||||
\Battles\User::getInstance($v)->addExperience($rep);
|
GiveRep($v, $rep);
|
||||||
}
|
}
|
||||||
if ($user['klan']) {
|
if ($user['klan']) {
|
||||||
mysql_query('UPDATE `clans` SET `clanexp` = (`clanexp`+' . (int)$this->exp[$user['id']] . ') WHERE `id` = "' . $v[$user['klan']] . '" LIMIT 1');
|
mysql_query('UPDATE `clans` SET `clanexp` = (`clanexp`+' . (int)$this->exp[$user['id']] . ') WHERE `id` = "' . $v[$user['klan']] . '" LIMIT 1');
|
||||||
@ -1628,7 +1628,7 @@ class fbattle
|
|||||||
$flag = 2;
|
$flag = 2;
|
||||||
foreach ($this->t2 as $k => $v) {
|
foreach ($this->t2 as $k => $v) {
|
||||||
mysql_query('UPDATE `battle` SET `win` = 2 WHERE `id` = "' . $this->user['battle'] . '" LIMIT 1');
|
mysql_query('UPDATE `battle` SET `win` = 2 WHERE `id` = "' . $this->user['battle'] . '" LIMIT 1');
|
||||||
$this->t2[$k] = \Battles\Nick::id($v)->short();
|
$this->t2[$k] = Nick::id($v)->short();
|
||||||
|
|
||||||
if ($this->battle_data['aren_of'] == 1 && $this->t2[$k] && $v < _BOTSEPARATOR_) {
|
if ($this->battle_data['aren_of'] == 1 && $this->t2[$k] && $v < _BOTSEPARATOR_) {
|
||||||
mysql_query('INSERT INTO `logs_arena` (`battle`, `user`, `uid`, `damage`, `team`) VALUES ("' . $this->user['battle'] . '", "' . $this->t1[$k] . '", "' . $v . '", "' . $this->damage[$v] . '", "2")');
|
mysql_query('INSERT INTO `logs_arena` (`battle`, `user`, `uid`, `damage`, `team`) VALUES ("' . $this->user['battle'] . '", "' . $this->t1[$k] . '", "' . $v . '", "' . $this->damage[$v] . '", "2")');
|
||||||
@ -1668,9 +1668,9 @@ class fbattle
|
|||||||
echo "<script>console.log('Win fiz 1');</script>";
|
echo "<script>console.log('Win fiz 1');</script>";
|
||||||
}
|
}
|
||||||
mysql_query('UPDATE `users` SET `win` = (`win` +1), `fullhptime` = ' . time() . ' WHERE `id` = "' . $v . '"');
|
mysql_query('UPDATE `users` SET `win` = (`win` +1), `fullhptime` = ' . time() . ' WHERE `id` = "' . $v . '"');
|
||||||
\Battles\User::getInstance($v)->addExperience($this->exp[$v]);
|
GiveExp($v, $this->exp[$v]);
|
||||||
if ($user['caveleader'] > 0 || $user['laba'] > 0) {
|
if ($user['caveleader'] > 0 || $user['laba'] > 0) {
|
||||||
\Battles\User::getInstance($v)->addExperience($rep);
|
GiveRep($v, $rep);
|
||||||
}
|
}
|
||||||
if ($user['klan']) {
|
if ($user['klan']) {
|
||||||
mysql_query('UPDATE `clans` SET `clanexp` = (`clanexp`+' . (int)$this->exp[$user['id']] . ') WHERE `id` = "' . $v[$user['klan']] . '" LIMIT 1');
|
mysql_query('UPDATE `clans` SET `clanexp` = (`clanexp`+' . (int)$this->exp[$user['id']] . ') WHERE `id` = "' . $v[$user['klan']] . '" LIMIT 1');
|
@ -1,7 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
class Quests
|
class Quests
|
||||||
{
|
{
|
||||||
public $free_x = 28, $data = [], $error = '';
|
public $free_x = 28, $data = [], $error = '';
|
||||||
@ -419,7 +417,7 @@ TASK;
|
|||||||
return $ins;
|
return $ins;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function timeOut($ttm): string
|
public function timeOut($ttm)
|
||||||
{
|
{
|
||||||
$out = '';
|
$out = '';
|
||||||
$time_still = $ttm;
|
$time_still = $ttm;
|
||||||
@ -571,7 +569,7 @@ TASK;
|
|||||||
mysql_query('UPDATE `users` SET `money` = "' . $user['money'] . '", `exp` = "' . $user['exp'] . '", `doblest` = "' . $user['doblest'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
|
mysql_query('UPDATE `users` SET `money` = "' . $user['money'] . '", `exp` = "' . $user['exp'] . '", `doblest` = "' . $user['doblest'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
|
||||||
$this->error = 'Вы успешно сдали задание!';
|
$this->error = 'Вы успешно сдали задание!';
|
||||||
$text = '<font style="color: Red;">Внимание!</font> За успешно выполненное задание Вы получили : ' . $c;
|
$text = '<font style="color: Red;">Внимание!</font> За успешно выполненное задание Вы получили : ' . $c;
|
||||||
$this->msg($text, '{[]}' . $user['login'] . '{[]}', User::getInstance()->getRoom());
|
$this->msg($text, '{[]}' . $user['login'] . '{[]}', $user->getRoom());
|
||||||
} else {
|
} else {
|
||||||
$this->error = 'Не все условия задания были выполнены ...';
|
$this->error = 'Не все условия задания были выполнены ...';
|
||||||
}
|
}
|
||||||
@ -590,3 +588,5 @@ TASK;
|
|||||||
fclose($fp);
|
fclose($fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$q = new Quests;
|
44
classes/showpers.php
Normal file
44
classes/showpers.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2018.
|
||||||
|
* Author: Igor Barkov <lopar.4ever@gmail.com>
|
||||||
|
* Project name: Battles-Game
|
||||||
|
*/
|
||||||
|
|
||||||
|
class showpers
|
||||||
|
{
|
||||||
|
private $pers_data;
|
||||||
|
private $weared_items;
|
||||||
|
|
||||||
|
private function __construct($id)
|
||||||
|
{
|
||||||
|
if (!$this->pers_data) {
|
||||||
|
$query = db::c()->query('SELECT * FROM `users` WHERE `id` = ?i', $id)->fetch_assoc();
|
||||||
|
$this->pers_data = $query;
|
||||||
|
}
|
||||||
|
if (!$this->weared_items) {
|
||||||
|
$query = db::c()->query('SELECT `name`, `img`, `type` FROM `inventory` WHERE `owner` = ?i AND `dressed` = 1', $id);
|
||||||
|
$this->weared_items = $query;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function dgfs()
|
||||||
|
{
|
||||||
|
$w_items['sergi'] = $this->pers_data['sergi'];
|
||||||
|
$w_items['kulon'] = $this->pers_data['kulon'];
|
||||||
|
$w_items['weap'] = $this->pers_data['weap'];
|
||||||
|
$w_items['bron'] = $this->pers_data['bron'];
|
||||||
|
$w_items['r1'] = $this->pers_data['r1'];
|
||||||
|
$w_items['r2'] = $this->pers_data['r2'];
|
||||||
|
$w_items['r3'] = $this->pers_data['r3'];
|
||||||
|
$w_items['helm'] = $this->pers_data['helm'];
|
||||||
|
$w_items['perchi'] = $this->pers_data['perchi'];
|
||||||
|
$w_items['shit'] = $this->pers_data['shit'];
|
||||||
|
$w_items['boots'] = $this->pers_data['boots'];
|
||||||
|
$w_items['rubax'] = $this->pers_data['rubax'];
|
||||||
|
$w_items['plaw'] = $this->pers_data['plaw'];
|
||||||
|
$w_items['rune1'] = $this->pers_data['rune1'];
|
||||||
|
$w_items['rune2'] = $this->pers_data['rune2'];
|
||||||
|
$w_items['rune3'] = $this->pers_data['rune3'];
|
||||||
|
}
|
||||||
|
}
|
16
config.php
16
config.php
@ -6,6 +6,9 @@
|
|||||||
* Project name: Battles-Game
|
* Project name: Battles-Game
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
use Battles\User;
|
||||||
|
|
||||||
include_once 'classes/Database/db.php';
|
include_once 'classes/Database/db.php';
|
||||||
include_once 'classes/Database/Mysql.php';
|
include_once 'classes/Database/Mysql.php';
|
||||||
include_once 'classes/Database/Statement.php';
|
include_once 'classes/Database/Statement.php';
|
||||||
@ -30,12 +33,23 @@ header("Cache-Control: post-check=0, pre-check=0", false);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
spl_autoload_register(function ($className) {
|
spl_autoload_register(function ($className) {
|
||||||
$fileName = __DIR__ . '/classes/' . str_replace('\\', DIRECTORY_SEPARATOR, $className . '.php');
|
$fileName = __DIR__ . '/classes/' . str_replace('\\', '/', $className . '.php');
|
||||||
if (file_exists($fileName)) {
|
if (file_exists($fileName)) {
|
||||||
require_once $fileName;
|
require_once $fileName;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Глобальные переменные. Промежуточное решение для совместимости.
|
||||||
|
*/
|
||||||
|
if (empty(DBPDO::$db)) {
|
||||||
|
DBPDO::$db = new DBPDO();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty(User::$current) && $_SESSION['uid']) {
|
||||||
|
User::$current = new User($_SESSION['uid']);
|
||||||
|
}
|
||||||
|
|
||||||
// Для нападалок. Сперва комнаты в которых нельзя напасть, потом персонажи на которых нельзя напасть.
|
// Для нападалок. Сперва комнаты в которых нельзя напасть, потом персонажи на которых нельзя напасть.
|
||||||
const UNKILABLE = [
|
const UNKILABLE = [
|
||||||
'rooms' => [620, 621, 1051, 1052],
|
'rooms' => [620, 621, 1051, 1052],
|
||||||
|
@ -372,9 +372,9 @@ class fbattle
|
|||||||
addchp('<font color=red>Внимание!</font> Победа! Бой окончен. Всего вами нанесено урона : ' . $this->damage[$v] . ' HP. Получено опыта : ' . $this->exp[$v] . ' (' . $dop_exp . '%)' . $ads . ' ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
addchp('<font color=red>Внимание!</font> Победа! Бой окончен. Всего вами нанесено урона : ' . $this->damage[$v] . ' HP. Получено опыта : ' . $this->exp[$v] . ' (' . $dop_exp . '%)' . $ads . ' ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
||||||
|
|
||||||
mysql_query('UPDATE `users` SET `win` = (`win` +1), `fullhptime` = ' . time() . ' WHERE `id` = "' . $v . '"');
|
mysql_query('UPDATE `users` SET `win` = (`win` +1), `fullhptime` = ' . time() . ' WHERE `id` = "' . $v . '"');
|
||||||
\Battles\User::getInstance($v)->addExperience($this->exp[$v]);
|
GiveExp($v, $this->exp[$v]);
|
||||||
if ($user['caveleader'] > 0 || $user['laba'] > 0) {
|
if ($user['caveleader'] > 0 || $user['laba'] > 0) {
|
||||||
\Battles\User::getInstance($v)->addExperience($rep);
|
GiveRep($v, $rep);
|
||||||
}
|
}
|
||||||
if ($user['klan']) {
|
if ($user['klan']) {
|
||||||
mysql_query('UPDATE `clans` SET `clanexp` = (`clanexp`+' . (int)$this->exp[$user['id']] . ') WHERE `id` = "' . $v[$user['klan']] . '" LIMIT 1');
|
mysql_query('UPDATE `clans` SET `clanexp` = (`clanexp`+' . (int)$this->exp[$user['id']] . ') WHERE `id` = "' . $v[$user['klan']] . '" LIMIT 1');
|
||||||
@ -449,7 +449,7 @@ class fbattle
|
|||||||
addchp('<font color=red>Внимание!</font> Победа! Бой окончен. Всего вами нанесено урона : ' . (int)$this->damage[$v] . ' HP. Получено опыта ' . $this->exp[$v] . ' (' . $dop_exp . '%). ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
addchp('<font color=red>Внимание!</font> Победа! Бой окончен. Всего вами нанесено урона : ' . (int)$this->damage[$v] . ' HP. Получено опыта ' . $this->exp[$v] . ' (' . $dop_exp . '%). ', '{[]}' . Nick::id($v)->short() . '{[]}');
|
||||||
|
|
||||||
mysql_query('UPDATE `users` SET `win` = (`win`+1), `fullhptime` = ' . time() . ' WHERE `id` = "' . $v . '"');
|
mysql_query('UPDATE `users` SET `win` = (`win`+1), `fullhptime` = ' . time() . ' WHERE `id` = "' . $v . '"');
|
||||||
\Battles\User::getInstance($v)->addExperience($this->exp[$v]);
|
GiveExp($v, $this->exp[$v]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$winers .= implode("</B>, <B>", $this->t2);
|
$winers .= implode("</B>, <B>", $this->t2);
|
||||||
@ -552,10 +552,10 @@ class fbattle
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($arr_battle['win'] == 1) {
|
if ($arr_battle['win'] == 1) {
|
||||||
Chat::sendSys('Внимание! Тьма одержала победу благодаря великим воинам: <b>' . $uss . '</b>');
|
Chat::addSYSMessage('Внимание! Тьма одержала победу благодаря великим воинам: <b>' . $uss . '</b>');
|
||||||
$this->AddToLog('<span class=date>' . date("H:i") . '</span> ' . 'Бой закончен, победа за <B>Силами Тьмы</B><BR>');
|
$this->AddToLog('<span class=date>' . date("H:i") . '</span> ' . 'Бой закончен, победа за <B>Силами Тьмы</B><BR>');
|
||||||
} else {
|
} else {
|
||||||
Chat::sendSys('Внимание! Свет одержал победу благодаря великим воинам: <b>' . $uss . '</b>');
|
Chat::addSYSMessage('Внимание! Свет одержал победу благодаря великим воинам: <b>' . $uss . '</b>');
|
||||||
$this->AddToLog('<span class=date>' . date("H:i") . '</span> ' . 'Бой закончен, победа за <B>Силами Света</B><BR>');
|
$this->AddToLog('<span class=date>' . date("H:i") . '</span> ' . 'Бой закончен, победа за <B>Силами Света</B><BR>');
|
||||||
}
|
}
|
||||||
mysql_query('UPDATE `variables` SET `value` = "' . $arr_battle['win'] . '" WHERE `var` = "arena_win" LIMIT 1');
|
mysql_query('UPDATE `variables` SET `value` = "' . $arr_battle['win'] . '" WHERE `var` = "arena_win" LIMIT 1');
|
||||||
@ -586,7 +586,7 @@ class fbattle
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($this->battle_data['aren_of'] == 1) {
|
if ($this->battle_data['aren_of'] == 1) {
|
||||||
Chat::sendSys('Внимание! Бой на Арене Ангелов завершился ничьей, на этой недели силы тьмы и света равны.');
|
Chat::addSYSMessage('Внимание! Бой на Арене Ангелов завершился ничьей, на этой недели силы тьмы и света равны.');
|
||||||
mysql_query('UPDATE `variables` SET `value` = 3 WHERE `var` = "arena_win" LIMIT 1');
|
mysql_query('UPDATE `variables` SET `value` = 3 WHERE `var` = "arena_win" LIMIT 1');
|
||||||
mysql_query('UPDATE `battle` SET `aren_of` = 0 WHERE `id` = "' . $arr_battle['id'] . '" AND `aren_of` = 1 LIMIT 1');
|
mysql_query('UPDATE `battle` SET `aren_of` = 0 WHERE `id` = "' . $arr_battle['id'] . '" AND `aren_of` = 1 LIMIT 1');
|
||||||
}
|
}
|
||||||
|
@ -187,32 +187,11 @@ if ($tur_data['endtime'] < time() && $tur_data['id']) {
|
|||||||
mysql_query("UPDATE `users` SET `sila` = (`sila`-'" . $eff['sila'] . "'), `lovk` = (`lovk`-'" . $eff['lovk'] . "'), `inta` = (`inta`-'" . $eff['inta'] . "'), `maxhp` = (`maxhp`-'" . $eff['hp'] . "') WHERE `id` = '" . $eff['owner'] . "' LIMIT 1");
|
mysql_query("UPDATE `users` SET `sila` = (`sila`-'" . $eff['sila'] . "'), `lovk` = (`lovk`-'" . $eff['lovk'] . "'), `inta` = (`inta`-'" . $eff['inta'] . "'), `maxhp` = (`maxhp`-'" . $eff['hp'] . "') WHERE `id` = '" . $eff['owner'] . "' LIMIT 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
$pers = db::c()->query('SELECT * FROM users WHERE id = ?i', $u['id'])->fetch_assoc_array();
|
if ($u['id'] != 233 && $u['id'] != 234 && $u['id'] != 235) {
|
||||||
DressedItems::undressAllItems($pers['id']);
|
settravma($u['id'], 100, 86400, 1);
|
||||||
db::c()->query('UPDATE inventory SET owner = ?i WHERE owner = ?i', $pers['id'], $pers['id'] + _BOTSEPARATOR_);
|
}
|
||||||
###
|
get_out($u['id']);
|
||||||
$row = db::c()->query('SELECT * FROM `effects` WHERE `owner` = ?i', $pers['id'] + _BOTSEPARATOR_);
|
mysql_query("UPDATE `users` SET `in_tower` = 0, `room` = '31' WHERE `id` = '" . $u['id'] . "' LIMIT 1");
|
||||||
$travm = [11, 12, 13, 14];
|
|
||||||
while ($efs = $row->fetch_assoc()) {
|
|
||||||
if (in_array($efs['type'], $travm)) {
|
|
||||||
$pers['sila'] -= $efs['sila'];
|
|
||||||
$pers['lovk'] -= $efs['lovk'];
|
|
||||||
$pers['inta'] -= $efs['inta'];
|
|
||||||
$pers['vinos'] -= $efs['vinos'];
|
|
||||||
} else {
|
|
||||||
$pers['sila'] += $efs['sila'];
|
|
||||||
$pers['lovk'] += $efs['lovk'];
|
|
||||||
$pers['inta'] += $efs['inta'];
|
|
||||||
$pers['vinos'] += $efs['vinos'];
|
|
||||||
$pers['maxhp'] += $efs['hp'];
|
|
||||||
}
|
|
||||||
$efs['owner'] = $_SESSION['uid'];
|
|
||||||
mysql_query('UPDATE `effects` SET `owner` = "' . $efs['owner'] . '" WHERE `id` = "' . $efs['id'] . '" LIMIT 1');
|
|
||||||
mysql_query('UPDATE `users` SET `sila` = "' . $pers['sila'] . '", `lovk` = "' . $pers['lovk'] . '", `inta` = "' . $pers['inta'] . '", `vinos` = "' . $pers['vinos'] . '", `maxhp` = "' . $pers['maxhp'] . '" WHERE `id` = "' . $pers['id'] . '" LIMIT 1');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mysql_query("UPDATE `users` SET `in_tower` = 0, `room` = '31' WHERE `id` = '" . $u['id'] . "' LIMIT 1");
|
|
||||||
mysql_query("UPDATE `online` SET `room` = '31' WHERE `id` = '" . $u['id'] . "' LIMIT 1");
|
mysql_query("UPDATE `online` SET `room` = '31' WHERE `id` = '" . $u['id'] . "' LIMIT 1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
69
css/main.css
69
css/main.css
@ -319,7 +319,7 @@ img.tip:hover + span.tiptext {
|
|||||||
/* Отображение информации о персонаже в inf.php (класс User.php) */
|
/* Отображение информации о персонаже в inf.php (класс User.php) */
|
||||||
div.user-info-container {
|
div.user-info-container {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(4, 75px) auto;
|
grid-template-columns: repeat(4, 75px) auto 100px;
|
||||||
grid-template-rows: repeat(5, 75px) auto;
|
grid-template-rows: repeat(5, 75px) auto;
|
||||||
grid-gap: 10px;
|
grid-gap: 10px;
|
||||||
}
|
}
|
||||||
@ -409,68 +409,11 @@ div.user-info-container > div.user-info > div.stats-container > div.column {
|
|||||||
div.user-info-container > div.user-info > div.stats-container > div.column + div.column {
|
div.user-info-container > div.user-info > div.stats-container > div.column + div.column {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
/*--DOLL-----------------------*/
|
|
||||||
div.user-doll-container {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(4, 75px);
|
|
||||||
grid-template-rows: repeat(5, 75px);
|
|
||||||
grid-gap: 10px;
|
|
||||||
float: left;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.user-doll-container > div.slot-1,
|
div.user-info-container > div.user-signs {
|
||||||
div.user-doll-container > div.slot-2,
|
grid-column: 6;
|
||||||
div.user-doll-container > div.slot-3,
|
grid-row: 1 / 6;
|
||||||
div.user-doll-container > div.slot-4 {
|
|
||||||
grid-column: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div.user-doll-container > div.slot-5,
|
|
||||||
div.user-doll-container > div.slot-6,
|
|
||||||
div.user-doll-container > div.slot-7,
|
|
||||||
div.user-doll-container > div.slot-8 {
|
|
||||||
grid-column: 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.user-doll-container > div.slot-1,
|
|
||||||
div.user-doll-container > div.slot-5 {
|
|
||||||
grid-row: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.user-doll-container > div.slot-2,
|
|
||||||
div.user-doll-container > div.slot-6 {
|
|
||||||
grid-row: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.user-doll-container > div.slot-3,
|
|
||||||
div.user-doll-container > div.slot-7 {
|
|
||||||
grid-row: 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.user-doll-container > div.slot-4,
|
|
||||||
div.user-doll-container > div.slot-8 {
|
|
||||||
grid-row: 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.user-doll-container > div.slot-9,
|
|
||||||
div.user-doll-container > div.slot-10,
|
|
||||||
div.user-doll-container > div.slot-11,
|
|
||||||
div.user-doll-container > div.slot-12 {
|
|
||||||
grid-row: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.user-doll-container > div.slot-image {
|
|
||||||
grid-column: 2 / 4;
|
|
||||||
grid-row: 1 / 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.user-doll-container > div.slot-image > img {
|
|
||||||
width: 160px;
|
|
||||||
height: 330px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-----------------------------*/
|
/*-----------------------------*/
|
||||||
div.debug {
|
div.debug {
|
||||||
background:#fef;
|
background:#fef;
|
||||||
@ -479,14 +422,14 @@ div.debug {
|
|||||||
padding:5px;
|
padding:5px;
|
||||||
margin: 3px;
|
margin: 3px;
|
||||||
}
|
}
|
||||||
.secret-info {
|
div.secret-info {
|
||||||
background:#fee;
|
background:#fee;
|
||||||
border:1px dashed #faa;
|
border:1px dashed #faa;
|
||||||
border-radius:5px;
|
border-radius:5px;
|
||||||
padding:5px;
|
padding:5px;
|
||||||
margin: 3px;
|
margin: 3px;
|
||||||
}
|
}
|
||||||
.secret-info > span {
|
div.secret-info > span {
|
||||||
color: #966;
|
color: #966;
|
||||||
}
|
}
|
||||||
/* for classes/City.php included in /city.php */
|
/* for classes/City.php included in /city.php */
|
||||||
|
12
enter.php
12
enter.php
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\GameLogs;
|
use Battles\GameLogs;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ $battle = $_COOKIE['battle'] ?? '';
|
|||||||
$error = "";
|
$error = "";
|
||||||
|
|
||||||
if ($username && $password) {
|
if ($username && $password) {
|
||||||
$user_query = Db::getInstance()->ofetch('SELECT id, login, pass, room, block, session_id FROM users WHERE login = ?', $username);
|
$user_query = DBPDO::$db->ofetch('SELECT id, login, pass, room, block, session_id FROM users WHERE login = ?', $username);
|
||||||
|
|
||||||
if (!$user_query->id) {
|
if (!$user_query->id) {
|
||||||
$error = ERROR_NO_SUCH_USER;
|
$error = ERROR_NO_SUCH_USER;
|
||||||
@ -43,14 +43,14 @@ if ($username && $password) {
|
|||||||
setcookie("uid", $user_query->id, time() + 43200, "/", GAMEDOMAIN);
|
setcookie("uid", $user_query->id, time() + 43200, "/", GAMEDOMAIN);
|
||||||
setcookie("hashcode", md5($user_query->id . $user_query->pass . $username), time() + 43200, "/", GAMEDOMAIN);
|
setcookie("hashcode", md5($user_query->id . $user_query->pass . $username), time() + 43200, "/", GAMEDOMAIN);
|
||||||
|
|
||||||
$onl = Db::getInstance()->ofetch('SELECT 1 FROM online WHERE user_id = ?', $user_query->id);
|
$onl = DBPDO::$db->ofetch('SELECT 1 FROM online WHERE user_id = ?', $user_query->id);
|
||||||
if ($onl) {
|
if ($onl) {
|
||||||
Db::getInstance()->execute('UPDATE online SET login_time = ? WHERE user_id = ?', [time(), $user_query->id]);
|
DBPDO::$db->execute('UPDATE online SET login_time = ? WHERE user_id = ?', [time(), $user_query->id]);
|
||||||
} else {
|
} else {
|
||||||
Db::getInstance()->execute('INSERT INTO online (user_id, login_time, room, real_time) VALUES (?,?,?,?)', [$user_query->id, time(), $user_query->room, time()]);
|
DBPDO::$db->execute('INSERT INTO online (user_id, login_time, room, real_time) VALUES (?,?,?,?)', [$user_query->id, time(), $user_query->room, time()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Db::getInstance()->execute('UPDATE users SET session_id = ?, enter_game = 1 WHERE id = ?', [session_id(), $user_query->id]);
|
DBPDO::$db->execute('UPDATE users SET session_id = ?, enter_game = 1 WHERE id = ?', [session_id(), $user_query->id]);
|
||||||
|
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
|
|
||||||
@ -63,8 +62,8 @@ if ($_GET['ext'] == 1) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (in_array(User::getInstance()->getRoom(), CANAL_ENTERS)) {
|
if (in_array($user->getRoom(), CANAL_ENTERS)) {
|
||||||
$podzemroom = User::getInstance()->getRoom() + 1;
|
$podzemroom = $user->getRoom() + 1;
|
||||||
$cavedata = [620 => ['x1' => 3, 'y1' => 2, 'dir1' => 2]];
|
$cavedata = [620 => ['x1' => 3, 'y1' => 2, 'dir1' => 2]];
|
||||||
$podzemdata = [621 => ['name1' => 'Проклятый Рудник', 'name2' => 'Проклятого Рудника']];
|
$podzemdata = [621 => ['name1' => 'Проклятый Рудник', 'name2' => 'Проклятого Рудника']];
|
||||||
$warning = $_GET["warning"] ?? '';
|
$warning = $_GET["warning"] ?? '';
|
||||||
@ -90,7 +89,7 @@ if (in_array(User::getInstance()->getRoom(), CANAL_ENTERS)) {
|
|||||||
|
|
||||||
if (($user['align'] == '2.99') && $wait_sec > $new_t) {
|
if (($user['align'] == '2.99') && $wait_sec > $new_t) {
|
||||||
$wait_sec = 1;
|
$wait_sec = 1;
|
||||||
mysql_query("UPDATE `visit_podzem` SET `time` = 1 WHERE `login` = '$user[login]' AND `time` > 0 AND `room` = 'User::getInstance()->getRoom()' LIMIT 1");
|
mysql_query("UPDATE `visit_podzem` SET `time` = 1 WHERE `login` = '$user[login]' AND `time` > 0 AND `room` = '$user->getRoom()' LIMIT 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($wait_sec > $new_t && $_GET['donate']) {
|
if ($wait_sec > $new_t && $_GET['donate']) {
|
||||||
@ -200,7 +199,7 @@ if (in_array(User::getInstance()->getRoom(), CANAL_ENTERS)) {
|
|||||||
return $i;
|
return $i;
|
||||||
}
|
}
|
||||||
|
|
||||||
$Q = mysql_query("SELECT * FROM `vxod` WHERE `room` = 'User::getInstance()->getRoom()'");
|
$Q = mysql_query("SELECT * FROM `vxod` WHERE `room` = '$user->getRoom()'");
|
||||||
while ($DATA = mysql_fetch_array($Q)) {
|
while ($DATA = mysql_fetch_array($Q)) {
|
||||||
$cr = $DATA['glav_id'];
|
$cr = $DATA['glav_id'];
|
||||||
$z_login[$i] = $DATA['login'];
|
$z_login[$i] = $DATA['login'];
|
||||||
@ -276,7 +275,7 @@ if (in_array(User::getInstance()->getRoom(), CANAL_ENTERS)) {
|
|||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
$time = date("H:i");
|
$time = date("H:i");
|
||||||
$SQL2 = mysql_query("INSERT INTO `vxod` (`date`, `login`, `glav_id`, `comment`, `pass`, `room`) VALUES('$time', '$login', '$user_id', '" . mysql_real_escape_string($_GET['cmt']) . "', '" . mysql_real_escape_string($_GET['pass']) . "', 'User::getInstance()->getRoom()')");
|
$SQL2 = mysql_query("INSERT INTO `vxod` (`date`, `login`, `glav_id`, `comment`, `pass`, `room`) VALUES('$time', '$login', '$user_id', '" . mysql_real_escape_string($_GET['cmt']) . "', '" . mysql_real_escape_string($_GET['pass']) . "', '$user->getRoom()')");
|
||||||
$SQL2 = mysql_query("INSERT INTO `vxodd` (`login`, `glav_id`, `lvl`) VALUES('$login', '$user_id', '$user_lvl')");
|
$SQL2 = mysql_query("INSERT INTO `vxodd` (`login`, `glav_id`, `lvl`) VALUES('$login', '$user_id', '$user_lvl')");
|
||||||
if ($SQL2) {
|
if ($SQL2) {
|
||||||
echo "<script>location.href='main.php?act=none'</script>";
|
echo "<script>location.href='main.php?act=none'</script>";
|
||||||
@ -306,7 +305,7 @@ if (in_array(User::getInstance()->getRoom(), CANAL_ENTERS)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$den = mysql_query("SELECT `id` FROM `vxodd` WHERE `glav_id` = '" . $_GET['naw_id'] . "'");
|
$den = mysql_query("SELECT `id` FROM `vxodd` WHERE `glav_id` = '" . $_GET['naw_id'] . "'");
|
||||||
if (mysql_num_rows($den) >= (in_array(User::getInstance()->getRoom() + 1, CAVE_ROOMS) ? 5 : 4)) {
|
if (mysql_num_rows($den) >= (in_array($user->getRoom() + 1, CAVE_ROOMS) ? 5 : 4)) {
|
||||||
echo "<script>location.href='?warning=5'</script>";
|
echo "<script>location.href='?warning=5'</script>";
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
@ -354,7 +353,7 @@ if (in_array(User::getInstance()->getRoom(), CANAL_ENTERS)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($_GET['start']) {
|
if ($_GET['start']) {
|
||||||
if (in_array(User::getInstance()->getRoom() + 1, CAVE_ROOMS)) {
|
if (in_array($user->getRoom() + 1, CAVE_ROOMS)) {
|
||||||
$nc = 1;
|
$nc = 1;
|
||||||
$locs = [];
|
$locs = [];
|
||||||
}
|
}
|
||||||
@ -376,8 +375,8 @@ if (in_array(User::getInstance()->getRoom(), CANAL_ENTERS)) {
|
|||||||
mysql_query("update `users` SET `money` = (`money-$nana[fee]) WHERE `id` = '$esth[id]' LIMIT 1");
|
mysql_query("update `users` SET `money` = (`money-$nana[fee]) WHERE `id` = '$esth[id]' LIMIT 1");
|
||||||
$user['money'] += $nana['fee'];
|
$user['money'] += $nana['fee'];
|
||||||
$esth['money'] -= $nana['fee'];
|
$esth['money'] -= $nana['fee'];
|
||||||
adddelo($user['id'], "Персонаж $user[login] получил $nana[fee] кр. за поход по локации \"" . $rooms[User::getInstance()->getRoom() + 1] . "\" от персонажа $esth[login] ($user[money]).", 1);
|
adddelo($user['id'], "Персонаж $user[login] получил $nana[fee] кр. за поход по локации \"" . $rooms[$user->getRoom() + 1] . "\" от персонажа $esth[login] ($user[money]).", 1);
|
||||||
adddelo($esth['id'], "Персонаж $esth[login] заплатил $nana[fee] кр. за поход по локации \"" . $rooms[User::getInstance()->getRoom() + 1] . "\" персонажу $user[login] ($esth[money]).", 1);
|
adddelo($esth['id'], "Персонаж $esth[login] заплатил $nana[fee] кр. за поход по локации \"" . $rooms[$user->getRoom() + 1] . "\" персонажу $user[login] ($esth[money]).", 1);
|
||||||
}
|
}
|
||||||
if ($esth['level'] > $level) {
|
if ($esth['level'] > $level) {
|
||||||
$level = $esth['level'];
|
$level = $esth['level'];
|
||||||
@ -390,12 +389,12 @@ if (in_array(User::getInstance()->getRoom(), CANAL_ENTERS)) {
|
|||||||
$vrem = 30 * 60 + time();
|
$vrem = 30 * 60 + time();
|
||||||
|
|
||||||
$cavedata = CAVE_DATA ?? [];
|
$cavedata = CAVE_DATA ?? [];
|
||||||
mysql_query("INSERT INTO `caveparties` SET `user` = '$esth[id]', `leader` = '$user[id]', `login` = '$esth[login]', `shadow` = '0.png', `x` = '" . $cavedata[User::getInstance()->getRoom() + 1]['x1'] . "', `y` = '" . $cavedata[User::getInstance()->getRoom() + 1]['y1'] . "', `dir` = '" . $cavedata[User::getInstance()->getRoom() + 1]['dir1'] . "', `floor` = 1");
|
mysql_query("INSERT INTO `caveparties` SET `user` = '$esth[id]', `leader` = '$user[id]', `login` = '$esth[login]', `shadow` = '0.png', `x` = '" . $cavedata[$user->getRoom() + 1]['x1'] . "', `y` = '" . $cavedata[$user->getRoom() + 1]['y1'] . "', `dir` = '" . $cavedata[$user->getRoom() + 1]['dir1'] . "', `floor` = 1");
|
||||||
mysql_query("UPDATE `users`, `online` SET " . ($nc ? "`users`.`caveleader` = '$user[id]', " : "") . " `users`.`room` = '" . (User::getInstance()->getRoom() + 1) . "', `online`.`room` = '" . (User::getInstance()->getRoom() + 1) . "' WHERE `online`.`id` = `users`.`id` AND `online`.`id` = '" . $esth['id'] . "'");
|
mysql_query("UPDATE `users`, `online` SET " . ($nc ? "`users`.`caveleader` = '$user[id]', " : "") . " `users`.`room` = '" . ($user->getRoom() + 1) . "', `online`.`room` = '" . ($user->getRoom() + 1) . "' WHERE `online`.`id` = `users`.`id` AND `online`.`id` = '" . $esth['id'] . "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($nc) {
|
if ($nc) {
|
||||||
$r = mysql_query("SELECT * FROM `cavemaps` WHERE `room` = 'User::getInstance()->getRoom()'");
|
$r = mysql_query("SELECT * FROM `cavemaps` WHERE `room` = '$user->getRoom()'");
|
||||||
while ($rec = mysql_fetch_assoc($r)) {
|
while ($rec = mysql_fetch_assoc($r)) {
|
||||||
$map = unserialize($rec['map']);
|
$map = unserialize($rec['map']);
|
||||||
foreach ($map as $k => $v) {
|
foreach ($map as $k => $v) {
|
||||||
|
19
fbattle.php
19
fbattle.php
@ -1,9 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\DressedItems;
|
|
||||||
use Battles\Template;
|
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
if (isset($_POST['end'])) {
|
if (isset($_POST['end'])) {
|
||||||
header("Location: main.php");
|
header("Location: main.php");
|
||||||
exit;
|
exit;
|
||||||
@ -20,7 +15,7 @@ if (isset($user['id'])) {
|
|||||||
include('./classes/battle_new.class.php');
|
include('./classes/battle_new.class.php');
|
||||||
|
|
||||||
$fbattle = new fbattle($user['battle']);
|
$fbattle = new fbattle($user['battle']);
|
||||||
Template::header('fbattle');
|
\Battles\Template::header('fbattle');
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript" src="js/sl2.js"></script>
|
<script type="text/javascript" src="js/sl2.js"></script>
|
||||||
<script type="text/javascript" src="js/ch.js"></script>
|
<script type="text/javascript" src="js/ch.js"></script>
|
||||||
@ -137,7 +132,10 @@ Template::header('fbattle');
|
|||||||
<table width=250 cellspacing=0 cellpadding=0>
|
<table width=250 cellspacing=0 cellpadding=0>
|
||||||
<tr>
|
<tr>
|
||||||
<td valign=top width=250 nowrap>
|
<td valign=top width=250 nowrap>
|
||||||
<?= \Battles\User::getInstance()->userInfo()->showUserDoll(1) ?>
|
<?php
|
||||||
|
$myinfo = new \Battles\User($_SESSION['uid']);
|
||||||
|
$myinfo->showUserDoll(1);
|
||||||
|
?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -162,7 +160,7 @@ Template::header('fbattle');
|
|||||||
$dressed = db::c()->query('SELECT `id` FROM `inventory` WHERE `id` = ?i AND `dressed` = 1', $_GET['use'])->fetch_row();
|
$dressed = db::c()->query('SELECT `id` FROM `inventory` WHERE `id` = ?i AND `dressed` = 1', $_GET['use'])->fetch_row();
|
||||||
if ((int)$dressed[0] > 0) {
|
if ((int)$dressed[0] > 0) {
|
||||||
$my_class = $fbattle->my_class;
|
$my_class = $fbattle->my_class;
|
||||||
|
usemagic($_GET['use'], "" . $_POST['target']);
|
||||||
$bb = explode("<!--", ob_get_clean());
|
$bb = explode("<!--", ob_get_clean());
|
||||||
$bb = str_replace('"', """, (strip_tags($bb[0])));
|
$bb = str_replace('"', """, (strip_tags($bb[0])));
|
||||||
header("Location: " . $_SERVER['PHP_SELF'] . "?buf=" . $bb);
|
header("Location: " . $_SERVER['PHP_SELF'] . "?buf=" . $bb);
|
||||||
@ -292,7 +290,7 @@ Template::header('fbattle');
|
|||||||
if (($user['hp'] > 0) && $fbattle->battle) {
|
if (($user['hp'] > 0) && $fbattle->battle) {
|
||||||
echo '<center><FONT COLOR=red><b>Ожидаем хода противника...</b></FONT><BR><INPUT TYPE=submit value="Обновить" name=' . (($user['battle'] > 0) ? "battle" : "end") . '><BR></CENTER>';
|
echo '<center><FONT COLOR=red><b>Ожидаем хода противника...</b></FONT><BR><INPUT TYPE=submit value="Обновить" name=' . (($user['battle'] > 0) ? "battle" : "end") . '><BR></CENTER>';
|
||||||
} elseif ($user['hp'] <= 0 && $fbattle->battle) {
|
} elseif ($user['hp'] <= 0 && $fbattle->battle) {
|
||||||
(new DressedItems(User::getInstance()->getId()))->checkRequirements();
|
ref_drop();
|
||||||
echo '<center><FONT COLOR=red><b>Ожидаем, пока бой закончат другие игроки...</b></FONT><BR><INPUT TYPE=submit value="Обновить" name=' . (($user['battle'] > 0) ? "battle" : "end") . '><BR></CENTER>';
|
echo '<center><FONT COLOR=red><b>Ожидаем, пока бой закончат другие игроки...</b></FONT><BR><INPUT TYPE=submit value="Обновить" name=' . (($user['battle'] > 0) ? "battle" : "end") . '><BR></CENTER>';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -470,7 +468,8 @@ Template::header('fbattle');
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
if ($fbattle->return == 1) {
|
if ($fbattle->return == 1) {
|
||||||
echo \Battles\User::getInstance($fbattle->enemy)->userInfo()->showUserDoll(1);
|
$enemyInfo = new \Battles\User($fbattle->enemy);
|
||||||
|
$enemyInfo->showUserDoll(1);
|
||||||
} else {
|
} else {
|
||||||
if ($fbattle->battle_data['type'] == 4 || $fbattle->battle_data['type'] == 5) {
|
if ($fbattle->battle_data['type'] == 4 || $fbattle->battle_data['type'] == 5) {
|
||||||
$a = [6, 16];
|
$a = [6, 16];
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
|
|
||||||
require_once 'config.php';
|
require_once 'config.php';
|
||||||
$userLoginStatus = Db::getInstance()->ofetch('select enter_game from users where id = ?', $_SESSION['uid']);
|
$userLoginStatus = DBPDO::$db->ofetch('select enter_game from users where id = ?', $_SESSION['uid']);
|
||||||
if (!empty($userLoginStatus->enter_game)) {
|
if (!empty($userLoginStatus->enter_game)) {
|
||||||
Db::getInstance()->execute('update users set enter_game = 0 where enter_game = 1 and id = ?', $_SESSION['uid']);
|
DBPDO::$db->execute('update users set enter_game = 0 where enter_game = 1 and id = ?', $_SESSION['uid']);
|
||||||
}
|
}
|
||||||
|
|
||||||
Template::header('Окно игры');
|
Template::header('Окно игры');
|
||||||
|
@ -3,10 +3,9 @@
|
|||||||
use Battles\GameLogs;
|
use Battles\GameLogs;
|
||||||
use Battles\Nick;
|
use Battles\Nick;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User
|
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
if (User::getInstance()->getRoom() == 51) {
|
if ($user->getRoom() == 51) {
|
||||||
header('location: city.php');
|
header('location: city.php');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
56
forum.php
56
forum.php
@ -1,11 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Nick;
|
|
||||||
use Battles\Template;
|
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
require_once 'config.php';
|
require_once 'config.php';
|
||||||
$sleep = db::c()->query('SELECT `id` FROM `effects` WHERE `owner` = ?i AND `time` > ?i AND `type` = 3', User::getInstance()->getId(), time())->fetch_assoc();
|
$user = \Battles\User::$current;
|
||||||
|
$sleep = db::c()->query('SELECT `id` FROM `effects` WHERE `owner` = ?i AND `time` > ?i AND `type` = 3', $user['id'], time())->fetch_assoc();
|
||||||
$ps = $_GET['page'] ?? 0;
|
$ps = $_GET['page'] ?? 0;
|
||||||
$isModerator = false;
|
$isModerator = false;
|
||||||
$isAdmin = false;
|
$isAdmin = false;
|
||||||
@ -76,7 +72,7 @@ function close_dangling_tags($html)
|
|||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['add']) && User::getInstance()->getId()) {
|
if (isset($_POST['add']) && isset($user['id'])) {
|
||||||
|
|
||||||
$icon = htmlentities($_POST['icon'], ENT_NOQUOTES, 'utf8');
|
$icon = htmlentities($_POST['icon'], ENT_NOQUOTES, 'utf8');
|
||||||
$text2 = htmlspecialchars($_POST['title'], ENT_NOQUOTES, 'utf8');
|
$text2 = htmlspecialchars($_POST['title'], ENT_NOQUOTES, 'utf8');
|
||||||
@ -90,8 +86,12 @@ if (isset($_POST['add']) && User::getInstance()->getId()) {
|
|||||||
rtrim($_POST['text']);
|
rtrim($_POST['text']);
|
||||||
if (empty($_POST['text']) || empty($_POST['title'])) {
|
if (empty($_POST['text']) || empty($_POST['title'])) {
|
||||||
$error = "Заголовок или текст не могут быть пустыми!";
|
$error = "Заголовок или текст не могут быть пустыми!";
|
||||||
} elseif (($minmax['min_align'] == 0 && $minmax['max_align'] == 0) || (User::getInstance()->getAlign() >= $minmax['min_align'] && User::getInstance()->getAlign() <= $minmax['max_align']) || $isAdmin) {
|
} elseif (($minmax['min_align'] == 0 && $minmax['max_align'] == 0) || ($user['align'] >= $minmax['min_align'] && $user['align'] <= $minmax['max_align']) || $isAdmin) {
|
||||||
$userPost = Nick::id(User::getInstance()->getId())->full();
|
if ($user['invis'] == 1) {
|
||||||
|
$userPost = '<b>Невидимка</b>';
|
||||||
|
} else {
|
||||||
|
$userPost = Nick::id($user['id'])->full(1);
|
||||||
|
}
|
||||||
if ($isModerator == false) $text1 = strip_tags($text1, '<b><i><u><code><a><br><img><div>');
|
if ($isModerator == false) $text1 = strip_tags($text1, '<b><i><u><code><a><br><img><div>');
|
||||||
|
|
||||||
db::c()->query('INSERT INTO `forum` (`type`, `topic`, `text`, `parent`, `author`, `date`, `min_align`, `max_align`, `icon`) VALUES (2,"?s","?s",?i,"?s","?s","?s","?s","?s")', $text2, $text1, $_GET['conf'], $userPost, date('d.m.y H:i:s'), $min_align, $max_align, $icon);
|
db::c()->query('INSERT INTO `forum` (`type`, `topic`, `text`, `parent`, `author`, `date`, `min_align`, `max_align`, `icon`) VALUES (2,"?s","?s",?i,"?s","?s","?s","?s","?s")', $text2, $text1, $_GET['conf'], $userPost, date('d.m.y H:i:s'), $min_align, $max_align, $icon);
|
||||||
@ -105,7 +105,7 @@ if (isset($_POST['add']) && User::getInstance()->getId()) {
|
|||||||
unset($_POST['add']);
|
unset($_POST['add']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['add2']) && User::getInstance()->getId()) {
|
if (isset($_POST['add2']) && isset($user['id'])) {
|
||||||
$text2 = htmlspecialchars($_POST['title'], ENT_NOQUOTES, 'utf8');
|
$text2 = htmlspecialchars($_POST['title'], ENT_NOQUOTES, 'utf8');
|
||||||
$text1 = parse_bb_code(preg_replace("/\n/", "<br />", $_POST['text']));
|
$text1 = parse_bb_code(preg_replace("/\n/", "<br />", $_POST['text']));
|
||||||
|
|
||||||
@ -120,8 +120,12 @@ if (isset($_POST['add2']) && User::getInstance()->getId()) {
|
|||||||
$error = "Не надо так делать";
|
$error = "Не надо так делать";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($minmax['min_align'] == 0 && $minmax['max_align'] == 0) || (User::getInstance()->getAlign() >= $minmax['min_align'] && User::getInstance()->getAlign() <= $minmax['max_align']) && $minmax['close'] == "0" || $isAdmin) {
|
if (($minmax['min_align'] == 0 && $minmax['max_align'] == 0) || ($user['align'] >= $minmax['min_align'] && $user['align'] <= $minmax['max_align']) && $minmax['close'] == "0" || $isAdmin) {
|
||||||
$userPost = Nick::id(User::getInstance()->getId())->full();
|
if ($user['invis'] == 1) {
|
||||||
|
$userPost = '<b>Невидимка</b>';
|
||||||
|
} else {
|
||||||
|
$userPost = Nick::id($user['id'])->full(1);
|
||||||
|
}
|
||||||
|
|
||||||
if ($isModerator == false) {
|
if ($isModerator == false) {
|
||||||
$text1 = strip_tags($text1, '<b><i><u><code><a><br><img><div>');
|
$text1 = strip_tags($text1, '<b><i><u><code><a><br><img><div>');
|
||||||
@ -161,7 +165,11 @@ if (isset($_GET['dt']) && $isModerator == true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET['com']) && isset($_GET['cpr']) && $isModerator == true) {
|
if (isset($_GET['com']) && isset($_GET['cpr']) && $isModerator == true) {
|
||||||
$addText = Nick::id(User::getInstance()->getId())->full() . ": " . $_GET['cpr'];
|
if ($user['invis'] == 1) {
|
||||||
|
$addText = "<br /><b>Невидимка</b>: " . $_GET['cpr'];
|
||||||
|
} else {
|
||||||
|
$addText = Nick::id($user['id'])->full(1) . ": " . $_GET['cpr'];
|
||||||
|
}
|
||||||
db::c()->query('UPDATE `forum` SET `text` = CONCAT(`text`,"?s") WHERE `id` = ?i', $addText, $_GET['com']);
|
db::c()->query('UPDATE `forum` SET `text` = CONCAT(`text`,"?s") WHERE `id` = ?i', $addText, $_GET['com']);
|
||||||
echo "<script>window.location='?topic=" . $_GET['topic'] . "&rnd'</script>";
|
echo "<script>window.location='?topic=" . $_GET['topic'] . "&rnd'</script>";
|
||||||
exit();
|
exit();
|
||||||
@ -175,7 +183,7 @@ if (isset($_GET['do']) && $isModerator == true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($_GET['do'] == "close") {
|
if ($_GET['do'] == "close") {
|
||||||
$closeComment = "Обсуждение закрыл " . ($isAdmin) ? "<b>Администратор</b>" : Nick::id(User::getInstance()->getId())->full(1);
|
$closeComment = "Обсуждение закрыл " . ($isAdmin) ? "<b>Администратор</b>" : Nick::id($user['id'])->full(1);
|
||||||
db::c()->query('UPDATE `forum` SET `close` = 1, `closepal` = "?s" WHERE `id` = "?s"', $closeComment, $_GET['topic']);
|
db::c()->query('UPDATE `forum` SET `close` = 1, `closepal` = "?s" WHERE `id` = "?s"', $closeComment, $_GET['topic']);
|
||||||
echo "<script>window.location='?topic=" . $_GET['topic'] . "&rnd'</script>";
|
echo "<script>window.location='?topic=" . $_GET['topic'] . "&rnd'</script>";
|
||||||
exit();
|
exit();
|
||||||
@ -193,7 +201,7 @@ if (isset($_GET['do']) && $isModerator == true) {
|
|||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Template::header('Форум');
|
\Battles\Template::header('Форум');
|
||||||
?>
|
?>
|
||||||
<link rel="stylesheet" href="css/wysibb/theme/default/wbbtheme.css"/>
|
<link rel="stylesheet" href="css/wysibb/theme/default/wbbtheme.css"/>
|
||||||
<script type="text/javascript" language="JavaScript" src='js/forum.js'></script>
|
<script type="text/javascript" language="JavaScript" src='js/forum.js'></script>
|
||||||
@ -201,17 +209,17 @@ Template::header('Форум');
|
|||||||
<tr valign="top">
|
<tr valign="top">
|
||||||
<td width="200">
|
<td width="200">
|
||||||
<br/>
|
<br/>
|
||||||
<?php if (User::getInstance()->getId()) { echo "Игрок : " . Nick::id(User::getInstance()->getId())->full(1) . "<br>"; } ?>
|
<?php if (isset($user['id'])) echo "Игрок : " . Nick::id($user['id'])->full(1) . "<br />"; ?>
|
||||||
<h4>Конференции</h4>
|
<h4>Конференции</h4>
|
||||||
<?php
|
<?php
|
||||||
if ((isset($_GET['conf']) && is_numeric($_GET['conf'])) || (isset($_GET['konftop']) && is_numeric($_GET['konftop'])) || $Movemess == 1) {
|
if ((isset($_GET['conf']) && is_numeric($_GET['conf'])) || (isset($_GET['konftop']) && is_numeric($_GET['konftop'])) || $Movemess == 1) {
|
||||||
$data = db::c()->query('SELECT * FROM `forum` WHERE `parent` = 0 AND `type` = 1 ORDER BY `id` ASC');
|
$data = db::c()->query('SELECT * FROM `forum` WHERE `parent` = 0 AND `type` = 1 ORDER BY `id` ASC');
|
||||||
while ($row = $data->fetch_assoc()) {
|
while ($row = $data->fetch_assoc()) {
|
||||||
if (($row['min_align'] == 0 && $row['max_align'] == 0) || (User::getInstance()->getAlign() >= $row['min_align'] && User::getInstance()->getAlign() <= $row['max_align']) || $isAdmin) {
|
if (($row['min_align'] == 0 && $row['max_align'] == 0) || ($user['align'] >= $row['min_align'] && $user['align'] <= $row['max_align']) || $isAdmin) {
|
||||||
$min = $row['min_align'] == 0;
|
$min = $row['min_align'] == 0;
|
||||||
$max = $row['max_align'] == 0;
|
$max = $row['max_align'] == 0;
|
||||||
|
|
||||||
if (!User::getInstance()->getId() || ((User::getInstance()->getAlign() < $row['min_align']) || (User::getInstance()->getAlign() > $row['max_align']) && !$min && !$max)) {
|
if (!isset($user['id']) || (($user['align'] < $row['min_align']) || ($user['align'] > $row['max_align']) && !$min && !$max)) {
|
||||||
echo '<nobr><b> 📕';
|
echo '<nobr><b> 📕';
|
||||||
} else {
|
} else {
|
||||||
echo '<nobr><b> 📖 ';
|
echo '<nobr><b> 📖 ';
|
||||||
@ -226,7 +234,7 @@ Template::header('Форум');
|
|||||||
<?php
|
<?php
|
||||||
if (!isset($_GET['conf'])) {
|
if (!isset($_GET['conf'])) {
|
||||||
$row = db::c()->query('SELECT * FROM `forum` WHERE `id` = "?s"', $_GET['topic'])->fetch_assoc();
|
$row = db::c()->query('SELECT * FROM `forum` WHERE `id` = "?s"', $_GET['topic'])->fetch_assoc();
|
||||||
if (($row['min_align'] == 0 && $row['max_align'] == 0) || (User::getInstance()->getAlign() >= $row['min_align'] && User::getInstance()->getAlign() <= $row['max_align']) || $isAdmin) {
|
if (($row['min_align'] == 0 && $row['max_align'] == 0) || ($user['align'] >= $row['min_align'] && $user['align'] <= $row['max_align']) || $isAdmin) {
|
||||||
$top = $row['parent'];
|
$top = $row['parent'];
|
||||||
$parentCat = db::c()->query('SELECT * FROM `forum` WHERE `id` = ?i', $top)->fetch_assoc();
|
$parentCat = db::c()->query('SELECT * FROM `forum` WHERE `id` = ?i', $top)->fetch_assoc();
|
||||||
$icons = $row['icon'];
|
$icons = $row['icon'];
|
||||||
@ -363,9 +371,9 @@ Template::header('Форум');
|
|||||||
if ($closed == 1) {
|
if ($closed == 1) {
|
||||||
echo "<br /><div align=center>" . $closepal . "</div><br /><br />";
|
echo "<br /><div align=center>" . $closepal . "</div><br /><br />";
|
||||||
} else {
|
} else {
|
||||||
if (User::getInstance()->getBlock()) {
|
if (!empty($user['block'])) {
|
||||||
$error = "Вы заблокированы!";
|
$error = "Вы заблокированы!";
|
||||||
} elseif (User::getInstance()->getLevel() < 2) {
|
} elseif ($user['level'] < 2) {
|
||||||
$error = "Персонажам до 2-го уровня запрещено писать на форуме!";
|
$error = "Персонажам до 2-го уровня запрещено писать на форуме!";
|
||||||
} elseif (isset($sleep['id'])) {
|
} elseif (isset($sleep['id'])) {
|
||||||
$error = "Вы молчите!";
|
$error = "Вы молчите!";
|
||||||
@ -415,7 +423,7 @@ Template::header('Форум');
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (is_numeric($_GET['conf']) && $row = db::c()->query('SELECT * FROM `forum` WHERE `id` = ?i', $_GET['conf'])->fetch_assoc()) {
|
if (is_numeric($_GET['conf']) && $row = db::c()->query('SELECT * FROM `forum` WHERE `id` = ?i', $_GET['conf'])->fetch_assoc()) {
|
||||||
if (($row['min_align'] == 0 && $row['max_align'] == 0) || (User::getInstance()->getAlign() >= $row['min_align'] && User::getInstance()->getAlign() <= $row['max_align']) || $isAdmin) {
|
if (($row['min_align'] == 0 && $row['max_align'] == 0) || ($user['align'] >= $row['min_align'] && $user['align'] <= $row['max_align']) || $isAdmin) {
|
||||||
$confname = 'Конференция «' . $row['topic'] . '»';
|
$confname = 'Конференция «' . $row['topic'] . '»';
|
||||||
$pgs = db::c()->query('SELECT count(`id`) FROM `forum` WHERE `parent` = ?i ORDER BY `fix` DESC, `updated` DESC', $_GET['conf'])->fetch_row();
|
$pgs = db::c()->query('SELECT count(`id`) FROM `forum` WHERE `parent` = ?i ORDER BY `fix` DESC, `updated` DESC', $_GET['conf'])->fetch_row();
|
||||||
$pgs = $pgs[0] / 20;
|
$pgs = $pgs[0] / 20;
|
||||||
@ -498,9 +506,9 @@ Template::header('Форум');
|
|||||||
|
|
||||||
echo $pages_str . "</p>";
|
echo $pages_str . "</p>";
|
||||||
|
|
||||||
if (User::getInstance()->getBlock()) {
|
if (!empty($user['block'])) {
|
||||||
$error = "Вы заблокированы!";
|
$error = "Вы заблокированы!";
|
||||||
} elseif (User::getInstance()->getLevel() < 2) {
|
} elseif ($user['level'] < 2) {
|
||||||
$error = "Персонажам до 2-го уровня запрещено писать на форуме!";
|
$error = "Персонажам до 2-го уровня запрещено писать на форуме!";
|
||||||
} elseif (isset($sleep['id'])) {
|
} elseif (isset($sleep['id'])) {
|
||||||
$error = "Вы молчите!";
|
$error = "Вы молчите!";
|
||||||
|
490
functions.php
490
functions.php
@ -5,8 +5,9 @@
|
|||||||
* Project name: Battles-Game
|
* Project name: Battles-Game
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Battles\Chat;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\Database\Db;
|
use Battles\DressedItems;
|
||||||
|
use Battles\InventoryItem;
|
||||||
use Battles\Travel;
|
use Battles\Travel;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
use Battles\UserStats;
|
use Battles\UserStats;
|
||||||
@ -16,39 +17,86 @@ require_once 'config.php';
|
|||||||
if (empty($_SESSION['uid'])) {
|
if (empty($_SESSION['uid'])) {
|
||||||
header("Location: index.php");
|
header("Location: index.php");
|
||||||
exit;
|
exit;
|
||||||
|
} elseif (empty($user)) {
|
||||||
|
$user = new User($_SESSION['uid']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (User::getInstance()->getBlock()) {
|
if (User::$current->getBlock()) {
|
||||||
exit('user blocked!');
|
exit('user blocked!');
|
||||||
}
|
}
|
||||||
|
|
||||||
//Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам.
|
/*
|
||||||
Travel::roomRedirects(User::getInstance()->getRoom(), User::getInstance()->getBattle());
|
* Проверки на соответствие скрипта и комнаты, которые были натыканы по всем файлам.
|
||||||
|
*/
|
||||||
if (
|
$fbattleCheckFiles = [
|
||||||
!empty($_GET['goto']) &&
|
'c_haos_in.php',
|
||||||
!empty($_GET['tStamp']) &&
|
'c_haos.php',
|
||||||
!empty($_GET['vcode']) &&
|
'c_park.php',
|
||||||
$_GET['vcode'] == md5(sha1($_GET['goto'] . $_GET['tStamp']))
|
'city.php',
|
||||||
) {
|
'clan_castle.php',
|
||||||
$query = 'update users u, online o set u.room = ?, o.room = ? where user_id = id and user_id = ?';
|
'enter_cave.php',
|
||||||
Db::getInstance()->execute($query, [$_GET['goto'], $_GET['goto'], User::getInstance()->getId()]);
|
'library.php',
|
||||||
User::getInstance()->setRoom(intval($_GET['goto']));
|
'atk.php',
|
||||||
|
'podzem_dialog.php',
|
||||||
|
'post.php',
|
||||||
|
'shop.php',
|
||||||
|
'tournament.php',
|
||||||
|
'vxod.php',
|
||||||
|
'bank.php',
|
||||||
|
'canalizaciya,php',
|
||||||
|
'forest.php',
|
||||||
|
'main.php',
|
||||||
|
'repair.php',
|
||||||
|
'towerstamp.php',
|
||||||
|
'hell.php',
|
||||||
|
'ul_clans.php',
|
||||||
|
'labirint.php',
|
||||||
|
'akadem.php',
|
||||||
|
'towerin.php',
|
||||||
|
'user_anketa.php',
|
||||||
|
'zayavka.php',
|
||||||
|
];
|
||||||
|
//Может просто отовсюду? О_о
|
||||||
|
if (User::$current->getBattle() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $fbattleCheckFiles)) {
|
||||||
|
header('location: fbattle.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
$towerinCheckFiles = ['main.php', 'city.php', 'tower.php'];
|
||||||
|
if (User::$current->getInTower() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $towerinCheckFiles)) {
|
||||||
|
header('location: towerin.php');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
$roomsCheck = [22, 23, 25, 27, 29, 30, 31, 37, 38, 39, 40, 41, 45, 53, 61, 401, 402, 600, 601, 602, 621, 650, 1051, 1052];
|
||||||
|
// Если я в одной из этих комнат,
|
||||||
|
// [И] Имя файла который инклюдит файл с проверкой не совпадает с именем файла локации в которой я нахожусь
|
||||||
|
// [И] Номер комнаты который я пытаюсь открыть есть в списке проверяемых
|
||||||
|
if (in_array(User::$current->getRoom(), $roomsCheck)
|
||||||
|
&& pathinfo(debug_backtrace()[0]['file'])['basename'] != Travel::$roomFileName[User::$current->getRoom()]
|
||||||
|
&& in_array(array_search(pathinfo(debug_backtrace()[0]['file'])['basename'], Travel::$roomFileName), $roomsCheck)) {
|
||||||
|
header('location: main.php');
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createbot($bot, $login = null): array
|
if (!empty($_GET['goto']) && !empty($_GET['tStamp']) && !empty($_GET['vcode']) && $_GET['vcode'] == md5(sha1($_GET['goto'] . $_GET['tStamp']))) {
|
||||||
|
$query = 'update users u, online o set u.room = ?, o.room = ? where user_id = id and user_id = ?';
|
||||||
|
DBPDO::$db->execute($query, [$_GET['goto'], $_GET['goto'], User::$current->getId()]);
|
||||||
|
User::$current->setRoom(intval($_GET['goto']));
|
||||||
|
}
|
||||||
|
|
||||||
|
function createbot($bot, $login = "")
|
||||||
{
|
{
|
||||||
if (empty($login)) {
|
$rec = db::c()->query('SELECT `id`, `login`, `maxhp` FROM `users` WHERE `id` = "?s" LIMIT 1', $bot)->fetch_assoc();
|
||||||
$login = Db::getInstance()->fetchColumn('select login from users where id = ?', $bot);
|
if (isset($rec['id'])) {
|
||||||
|
if ($login) {
|
||||||
|
$rec['login'] = $login;
|
||||||
|
}
|
||||||
|
$botname = $rec['login'];
|
||||||
|
db::c()->query('INSERT INTO `bots` (`name`, `prototype`, `hp`) VALUES ("?s", "?s", "?s")', $botname, $bot, $rec['maxhp']);
|
||||||
|
$nid = db::c()->getLastInsertId();
|
||||||
|
return ["id" => $nid, "login" => $botname];
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (empty($login)) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
Db::getInstance()->execute('insert into bots (name, prototype) values (?,?)', [$login, $bot]);
|
|
||||||
return [
|
|
||||||
'id' => Db::getInstance()->lastInsertId(),
|
|
||||||
'login' => $login,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$var_map = [
|
$var_map = [
|
||||||
@ -61,6 +109,34 @@ $var_map = [
|
|||||||
'cell_25' => 'Полесье',
|
'cell_25' => 'Полесье',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
function get_out($u)
|
||||||
|
{
|
||||||
|
$pers = db::c()->query('SELECT * FROM users WHERE id = ?i', $u)->fetch_assoc_array();
|
||||||
|
DressedItems::undressAllItems($pers['id']);
|
||||||
|
db::c()->query('UPDATE inventory SET owner = ?i WHERE owner = ?i', $pers['id'], $pers['id'] + _BOTSEPARATOR_);
|
||||||
|
###
|
||||||
|
$row = db::c()->query('SELECT * FROM `effects` WHERE `owner` = ?i', $pers['id'] + _BOTSEPARATOR_);
|
||||||
|
$travm = [11, 12, 13, 14];
|
||||||
|
while ($efs = $row->fetch_assoc()) {
|
||||||
|
if (in_array($efs['type'], $travm)) {
|
||||||
|
$pers['sila'] -= $efs['sila'];
|
||||||
|
$pers['lovk'] -= $efs['lovk'];
|
||||||
|
$pers['inta'] -= $efs['inta'];
|
||||||
|
$pers['vinos'] -= $efs['vinos'];
|
||||||
|
} else {
|
||||||
|
$pers['sila'] += $efs['sila'];
|
||||||
|
$pers['lovk'] += $efs['lovk'];
|
||||||
|
$pers['inta'] += $efs['inta'];
|
||||||
|
$pers['vinos'] += $efs['vinos'];
|
||||||
|
$pers['maxhp'] += $efs['hp'];
|
||||||
|
}
|
||||||
|
$efs['owner'] = $_SESSION['uid'];
|
||||||
|
//mysql_query('UPDATE `effects` SET `owner` = "' . $efs['owner'] . '" WHERE `id` = "' . $efs['id'] . '" LIMIT 1');
|
||||||
|
//mysql_query('UPDATE `users` SET `sila` = "' . $pers['sila'] . '", `lovk` = "' . $pers['lovk'] . '", `inta` = "' . $pers['inta'] . '", `vinos` = "' . $pers['vinos'] . '", `maxhp` = "' . $pers['maxhp'] . '" WHERE `id` = "' . $pers['id'] . '" LIMIT 1');
|
||||||
|
}
|
||||||
|
###
|
||||||
|
}
|
||||||
|
|
||||||
const _BOTSEPARATOR_ = 10000000;
|
const _BOTSEPARATOR_ = 10000000;
|
||||||
|
|
||||||
function savecavedata($cavedata, $caveleader, $floor)
|
function savecavedata($cavedata, $caveleader, $floor)
|
||||||
@ -72,25 +148,27 @@ function savecavedata($cavedata, $caveleader, $floor)
|
|||||||
fclose($f1);
|
fclose($f1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function GiveExp($id, $exp)
|
||||||
|
{
|
||||||
|
db::c()->query('UPDATE users SET exp = exp + ?i WHERE id = ?i', $exp, $id);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генератор прогрессбара.
|
* Генератор прогрессбара.
|
||||||
*
|
|
||||||
* @param $current - Текущее значение.
|
* @param $current - Текущее значение.
|
||||||
* @param $maximum - Максимальное значение.
|
* @param $maximum - Максимальное значение.
|
||||||
* @param string $lineColor - Цвет полоски прогрессбара.
|
* @param string $line_color - Цвет полоски прогрессбара.
|
||||||
* @param string $bgColor - Фон прогрессбара.
|
* @param string $bg_color - Фон прогрессбара.
|
||||||
*
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function showProgressBar($current, $maximum, string $lineColor = 'limegreen', string $bgColor = 'silver'): string
|
function showProgressBar($current, $maximum, string $line_color = 'limegreen', string $bg_color = 'silver'): string
|
||||||
{
|
{
|
||||||
$bar = round($current / $maximum * 100);
|
$bar = round($current / $maximum * 100);
|
||||||
return <<<HTML
|
return <<<HTML
|
||||||
<div style="width: 100%; height: 16px; background: $bgColor; overflow: hidden; border-radius: 3px;">
|
<div style="width: 100%; height: 16px; background: $bg_color; overflow: hidden; border-radius: 3px;">
|
||||||
<div style="height: 16px; background: $lineColor; border-radius: 3px; width: $bar%;"></div>
|
<div style="height: 16px; background: $line_color; 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; margin-top: -16px;">
|
||||||
n-top: -16px;">
|
|
||||||
$current / $maximum
|
$current / $maximum
|
||||||
</div>
|
</div>
|
||||||
HTML;
|
HTML;
|
||||||
@ -102,55 +180,119 @@ HTML;
|
|||||||
*
|
*
|
||||||
* @param $slot
|
* @param $slot
|
||||||
*
|
*
|
||||||
* @return string
|
* @throws \Krugozor\Database\Mysql\Exception
|
||||||
*/
|
*/
|
||||||
function echoscroll($slot): string
|
function echoscroll($slot)
|
||||||
{
|
{
|
||||||
$allMagic = 0;
|
$all_magic = 0;
|
||||||
if (User::getInstance()->getBattle()) {
|
if (User::$current->getBattle()) {
|
||||||
$script = 'fbattle';
|
$script = 'fbattle';
|
||||||
$allMagic = Db::getInstance()->fetchColumn('select magic from battle where id = ?', User::getInstance()->getBattle());
|
$bat = db::c()->query('SELECT `magic` FROM `battle` WHERE `id` = ?i', User::$current->getBattle())->fetch_assoc();
|
||||||
$allMagic = unserialize($allMagic);
|
$all_magic = unserialize($bat['magic']);
|
||||||
} else {
|
} else {
|
||||||
$script = 'main';
|
$script = 'main';
|
||||||
}
|
}
|
||||||
$dress = Db::getInstance()->fetch('select magic, name, image, durability from inventory where item_id = ?', User::getInstance()->$slot);
|
|
||||||
$needCharge = Db::getInstance()->fetchColumn('select needcharge from magic where id = ?', $dress['magic']);
|
$dress = db::c()->query('SELECT `id`, `magic`, `name`, `img`, `duration`, `maxdur` FROM `inventory` WHERE `id` = ?i', User::$current->$slot)->fetch_assoc();
|
||||||
$str = null;
|
$need_charge = db::c()->query('SELECT `needcharge` FROM `magic` WHERE `id` = ?i', $dress['magic'])->fetch_assoc();
|
||||||
if ((User::getInstance()->$slot > 0) && ($allMagic[User::getInstance()->getId()] < 1 || empty($needCharge))) {
|
|
||||||
$row['id'] = User::getInstance()->$slot;
|
if ((User::$current->$slot > 0) && ($all_magic[User::$current->getId()] < 1 || empty($need_charge['needcharge']))) {
|
||||||
|
$row['id'] = User::$current->$slot;
|
||||||
if ($dress['magic']) {
|
if ($dress['magic']) {
|
||||||
$magicTargeted = Db::getInstance()->fetchColumn('select targeted from magic where id = ?', $dress['magic']);
|
$magic = db::c()->query('SELECT targeted FROM `magic` WHERE `id` = ?i', $dress['magic'])->fetch_assoc();
|
||||||
$str .= "<a onclick=\"";
|
echo "<a onclick=\"";
|
||||||
if ($magicTargeted === 1) {
|
if ($magic['targeted'] == 1) {
|
||||||
$str .= "okno('Введите название предмета', '" . $script . ".php?use={$row['id']}', 'target'); ";
|
echo "okno('Введите название предмета', '" . $script . ".php?use={$row['id']}', 'target'); ";
|
||||||
} elseif ($magicTargeted === 2) {
|
} else
|
||||||
$str .= "findlogin('Введите имя персонажа', '" . $script . ".php?use={$row['id']}', 'target'); ";
|
if ($magic['targeted'] == 2) {
|
||||||
|
echo "findlogin('Введите имя персонажа', '" . $script . ".php?use={$row['id']}', 'target'); ";
|
||||||
} else {
|
} else {
|
||||||
$str .= "if(confirm('Использовать сейчас?')) { window.location='" . $script . ".php?use=" . $row['id'] . "';}";
|
echo "if(confirm('Использовать сейчас?')) { window.location='" . $script . ".php?use=" . $row['id'] . "';}";
|
||||||
}
|
}
|
||||||
$str .= "\"href='#'>";
|
echo "\"href='#'>";
|
||||||
}
|
}
|
||||||
$str .= <<<ACTIVE_SCROLL
|
echo <<<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) && ($allMagic[User::getInstance()->getId()] >= 1) && $needCharge['needcharge'] > 0) {
|
} elseif ((User::$current->$slot > 0) && ($all_magic[User::$current->getId()] >= 1) && $need_charge['needcharge'] > 0) {
|
||||||
$str .= <<<INACTIVE_SCROLL
|
echo <<<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;
|
||||||
} else {
|
} else {
|
||||||
$str .= <<<EMPTY_SLOT
|
echo <<<EMPTY_SLOT
|
||||||
<img class="tooltip" src="i/w13.gif" width="40" height="25" title='<b>Пустой слот магия</b>' alt="Слот для свитка">
|
<img class="tooltip" src="i/w13.gif" width="40" height="25" title='<b>Пустой слот магия</b>' alt="Слот для свитка">
|
||||||
EMPTY_SLOT;
|
EMPTY_SLOT;
|
||||||
}
|
}
|
||||||
return $str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function timeOut($ttm): string
|
// ссылка на магию
|
||||||
|
function showhrefmagic($dress)
|
||||||
{
|
{
|
||||||
require_once 'classes/quests_class.php';
|
$user = db::c()->query('SELECT `battle` FROM `users` WHERE `id` = ?i', $_SESSION['uid'])->fetch_assoc();
|
||||||
$q = new Quests();
|
$magic = db::c()->query('SELECT * FROM `magic` WHERE `id` = ?i', $dress['includemagic'])->fetch_assoc();
|
||||||
return $q->timeOut($ttm);
|
|
||||||
|
$r = '';
|
||||||
|
$script = 'main';
|
||||||
|
if ($user['battle']) {
|
||||||
|
$script = 'fbattle';
|
||||||
|
}
|
||||||
|
|
||||||
|
$r .= "<a onclick=\"";
|
||||||
|
if ($magic['targeted'] == 1) {
|
||||||
|
$r .= "okno('Введите название предмета', '{$script}.php?use={$dress['id']}', 'target')";
|
||||||
|
} elseif ($magic['targeted'] == 2) {
|
||||||
|
$r .= "findlogin('" . $magic['name'] . "', '{$script}.php?use={$dress['id']}', 'target')";
|
||||||
|
} else {
|
||||||
|
$r .= "if (confirm('Использовать сейчас?')) window.location='" . $script . ".php?use=" . $dress['id'] . "';";
|
||||||
|
}
|
||||||
|
$r .= "\"href='#'>";
|
||||||
|
$r .= "<img src=\"i/sh/{$dress['img']}\" style=\"filter:shadow(color=red, direction=90, strength=3);\" title=\"" . $dress['name'] . (($dress['text'] != null) ? "<br />На оружии выгравировано '{$dress['text']}'" : "") . "\"><br>";
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
function timeOut($ttm)
|
||||||
|
{
|
||||||
|
$out = '';
|
||||||
|
$time_still = $ttm;
|
||||||
|
$tmp = floor($time_still / 2592000);
|
||||||
|
$id = 0;
|
||||||
|
if ($tmp > 0) {
|
||||||
|
$id++;
|
||||||
|
if ($id < 3) {
|
||||||
|
$out .= $tmp . " мес. ";
|
||||||
|
}
|
||||||
|
$time_still = $time_still - $tmp * 2592000;
|
||||||
|
}
|
||||||
|
$tmp = floor($time_still / 86400);
|
||||||
|
if ($tmp > 0) {
|
||||||
|
$id++;
|
||||||
|
if ($id < 3) {
|
||||||
|
$out .= $tmp . " дн. ";
|
||||||
|
}
|
||||||
|
$time_still = $time_still - $tmp * 86400;
|
||||||
|
}
|
||||||
|
$tmp = floor($time_still / 3600);
|
||||||
|
if ($tmp > 0) {
|
||||||
|
$id++;
|
||||||
|
if ($id < 3) {
|
||||||
|
$out .= $tmp . " ч. ";
|
||||||
|
}
|
||||||
|
$time_still = $time_still - $tmp * 3600;
|
||||||
|
}
|
||||||
|
$tmp = floor($time_still / 60);
|
||||||
|
if ($tmp > 0) {
|
||||||
|
$id++;
|
||||||
|
if ($id < 3) {
|
||||||
|
$out .= $tmp . " мин. ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($out == '') {
|
||||||
|
if ($time_still < 0) {
|
||||||
|
$time_still = 0;
|
||||||
|
}
|
||||||
|
$out = $time_still . ' сек.';
|
||||||
|
}
|
||||||
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -158,47 +300,191 @@ function timeOut($ttm): string
|
|||||||
* @param $vars
|
* @param $vars
|
||||||
* @param $vls
|
* @param $vls
|
||||||
* @param $uid
|
* @param $uid
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function addActions($time, $vars, $vls, $uid)
|
function addActions($time, $vars, $vls, $uid)
|
||||||
{
|
{
|
||||||
$query = 'insert into actions (uid, time, city, room, vars, ip, vals) values (?,?,?,?,?,?,?)';
|
db::c()->query('LOCK TABLES `actions` WRITE');
|
||||||
$values = [$uid, $time, 'capitalcity', 0, $vars, $_SERVER['REMOTE_ADDR'], $vls];
|
$ins = db::c()->query('INSERT INTO `actions` (`uid`,`time`,`city`,`room`,`vars`,`ip`,`vals`) VALUES (?i, ?i, "?s", ?i, "?s", "?s", "?s")', $uid, $time, "capitalcity", 0, $vars, $_SERVER['REMOTE_ADDR'], $vls);
|
||||||
Db::getInstance()->execute('lock tables actions write');
|
db::c()->query('UNLOCK TABLES');
|
||||||
Db::getInstance()->execute($query, $values);
|
return $ins;
|
||||||
Db::getInstance()->execute('unlock tables');
|
}
|
||||||
|
|
||||||
|
#15
|
||||||
|
function ref_drop()
|
||||||
|
{
|
||||||
|
//сможет держать
|
||||||
|
function derj($id)
|
||||||
|
{
|
||||||
|
$user = db::c()->query('SELECT `id`, `align` FROM `users` WHERE `id` = ?i', $_SESSION['uid'])->fetch_assoc();
|
||||||
|
$ts = db::c()->query('SELECT `id`, `nalign` FROM `inventory` WHERE `id` = ?i', $id)->fetch_assoc();
|
||||||
|
$al = '(1 = 1)';
|
||||||
|
if ($ts['nalign'] == 1.1) {
|
||||||
|
$al = '(1 = 2)';
|
||||||
|
}
|
||||||
|
$dd = db::c()->query('SELECT `i`.`id` FROM `users` AS `u`, `inventory` AS `i`
|
||||||
|
WHERE
|
||||||
|
`i`.`needident` = 0 AND
|
||||||
|
`i`.`id` = ?i AND
|
||||||
|
`i`.`duration` < `i`.`maxdur` AND
|
||||||
|
`i`.`owner` = ?i AND
|
||||||
|
`u`.`sila` >= `i`.`nsila` AND
|
||||||
|
`u`.`lovk` >= `i`.`nlovk` AND
|
||||||
|
`u`.`inta` >= `i`.`ninta` AND
|
||||||
|
`u`.`vinos` >= `i`.`nvinos` AND
|
||||||
|
`u`.`intel` >= `i`.`nintel` AND
|
||||||
|
`u`.`mudra` >= `i`.`nmudra` AND
|
||||||
|
`u`.`level` >= `i`.`nlevel` AND
|
||||||
|
("?s" OR (?i = `i`.`nalign`) or (`i`.`nalign` = 0)) AND
|
||||||
|
`u`.`noj` >= `i`.`nnoj` AND
|
||||||
|
`u`.`topor` >= `i`.`ntopor` AND
|
||||||
|
`u`.`dubina` >= `i`.`ndubina` AND
|
||||||
|
`u`.`mec` >= `i`.`nmech` AND
|
||||||
|
`u`.`mfire` >= `i`.`nfire` AND
|
||||||
|
`u`.`mwater` >= `i`.`nwater` AND
|
||||||
|
`u`.`mair` >= `i`.`nair` AND
|
||||||
|
`u`.`mearth` >= `i`.`nearth` AND
|
||||||
|
`u`.`mlight` >= `i`.`nlight` AND
|
||||||
|
`u`.`mgray` >= `i`.`ngray` AND
|
||||||
|
`u`.`mdark` >= `i`.`ndark` AND
|
||||||
|
`i`.`setsale` = 0 AND
|
||||||
|
`u`.`id` = ?i', $id, $user['id'], $al, $user['align'], $user['id']);
|
||||||
|
return $dd->getNumRows() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$slot = ['sergi', 'kulon', 'weap', 'bron', 'r1', 'r2', 'r3', 'helm', 'perchi', 'shit', 'boots', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7', 'm8', 'm9', 'm10'];
|
||||||
|
$user = db::c()->query('SELECT `sergi`,`kulon`,`weap`,`bron`,`r1`,`r2`,`r3`,`helm`,`perchi`,`shit`,`boots`,`m1`,`m2`,`m3`,`m4`,`m5`,`m6`,`m7`,`m8`,`m9`,`m10` FROM `users` WHERE id = ?i', $_SESSION['uid'])->fetch_assoc();
|
||||||
|
for ($i = 0; $i <= 20; $i++) {
|
||||||
|
if ($user[$slot[$i]] && !derj($user[$slot[$i]])) {
|
||||||
|
$item = new DressedItems($_SESSION['uid']);
|
||||||
|
$item->undressItem($i + 1);
|
||||||
|
$user[$slot[$i]] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// использовать магию
|
||||||
|
function usemagic($id, $target)
|
||||||
|
{
|
||||||
|
$row = db::c()->query('SELECT * FROM `inventory` WHERE `owner` = ?i AND id = ?i', User::$current->getId(), $id)->fetch_assoc_array();
|
||||||
|
$bat = db::c()->query('SELECT * FROM `battle` WHERE `id` = ?i', User::$current->getBattle())->fetch_assoc_array();
|
||||||
|
$all_magic = unserialize($bat['magic']);
|
||||||
|
$charge = 0;
|
||||||
|
$magic = db::c()->query('SELECT * FROM `magic` WHERE `id` = ?i', $row['magic'])->fetch_assoc_array();
|
||||||
|
|
||||||
|
if ($magic['needcharge'] > 0) {
|
||||||
|
$charge = $magic['needcharge'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$incmagic = db::c()->query('SELECT * FROM `magic` WHERE `id` = ?i', $row['includemagic'])->fetch_assoc_array();
|
||||||
|
if ($incmagic['needcharge'] > 0) {
|
||||||
|
$charge = $incmagic['needcharge'];
|
||||||
|
}
|
||||||
|
//Переделать под новую базу
|
||||||
|
if (($all_magic[User::$current->getId()] < 1 || $charge == 0) &&
|
||||||
|
($user['sila'] >= $row['nsila'] &&
|
||||||
|
$user['lovk'] >= $row['nlovk'] &&
|
||||||
|
$user['inta'] >= $row['ninta'] &&
|
||||||
|
$user['vinos'] >= $row['nvinos'] &&
|
||||||
|
$user['intel'] >= $row['nintel'] &&
|
||||||
|
$user['level'] >= $row['nlevel'] &&
|
||||||
|
(($user['align'] > 7 && $user['align'] < 8) || ((int)$user['align'] == (int)$row['nalign']) || ($row['nalign'] == 0)) &&
|
||||||
|
$user['noj'] >= $row['nnoj'] &&
|
||||||
|
$user['topor'] >= $row['ntopor'] &&
|
||||||
|
$user['dubina'] >= $row['ndubina'] &&
|
||||||
|
$user['mec'] >= $row['nmech'] &&
|
||||||
|
($row['type'] < 13 || $row['type'] == 50) && ($user['mfire'] >= $row['nfire']) &&
|
||||||
|
$user['mwater'] >= $row['nwater'] &&
|
||||||
|
$user['mair'] >= $row['nair'] &&
|
||||||
|
$user['mearth'] >= $row['nearth'] &&
|
||||||
|
$user['mlight'] >= $row['nlight'] &&
|
||||||
|
$user['mgray'] >= $row['ngray'] &&
|
||||||
|
$user['mdark'] >= $row['ndark'] &&
|
||||||
|
$row['needident'] == 0
|
||||||
|
) || $row['magic'] == 48 || $row['magic'] == 50) {
|
||||||
|
|
||||||
|
|
||||||
|
if (!$row['magic']) {
|
||||||
|
$incmagic['name'] = $row['includemagicname'];
|
||||||
|
$incmagic['cur'] = $row['includemagicdex'];
|
||||||
|
$incmagic['max'] = $row['includemagicmax'];
|
||||||
|
if ($incmagic['cur'] <= 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$magic['targeted'] = $incmagic['targeted'];
|
||||||
|
echo "<span class='error'>";
|
||||||
|
include("magic/" . $incmagic['file']);
|
||||||
|
echo "</span>";
|
||||||
|
} else {
|
||||||
|
echo "<span class='error'>";
|
||||||
|
include("magic/" . $magic['file']);
|
||||||
|
echo "</span>";
|
||||||
|
}
|
||||||
|
if ($bat) {
|
||||||
|
if ($row['maxdur'] <= ($row['duration'] + 1)) {
|
||||||
|
InventoryItem::destroyItem($row['id']);
|
||||||
|
} else {
|
||||||
|
if (!$row['magic']) {
|
||||||
|
$query = 'update inventory set includemagicdex = includemagicdex - ? where item_id = ?';
|
||||||
|
} else {
|
||||||
|
$query = 'update inventory set durability = durability + ? where item_id = ?';
|
||||||
|
}
|
||||||
|
DBPDO::$db->execute($query, [$bat, $row['id']]);
|
||||||
|
}
|
||||||
|
if (!$charge) {
|
||||||
|
$charge = 0;
|
||||||
|
}
|
||||||
|
//ограничение по кол-ву за ход
|
||||||
|
if (User::$current->getBattle()) {
|
||||||
|
$bat = DBPDO::$db->fetch('select * from battle where battle_id = ?', User::$current->getBattle());
|
||||||
|
}
|
||||||
|
if ($bat['magic'] == '') {
|
||||||
|
$all_magic = [];
|
||||||
|
} else {
|
||||||
|
$all_magic = unserialize($bat['magic']);
|
||||||
|
}
|
||||||
|
$all_magic[User::$current->getId()] += $charge;
|
||||||
|
DBPDO::$db->execute('update battle set magic = ? where battle_id = ?', [serialize($all_magic), User::$current->getBattle()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ВАЖНО! (#44)
|
/* ВАЖНО! (#44)
|
||||||
* addch() и addchp() заменяются на Chat::class->sendSys($message, [optional]$receiver);
|
* addch() и addchp() заменяются на Chat::class->addSYSMessage($message, [optional]$receiver);
|
||||||
* Для addchp() используется второй опциональный ключ.
|
* Для addchp() используется второй опциональный ключ.
|
||||||
* Это 150+ вхождений в куче файлов, где надо менять структуру вызова функции из-за их несовместимости.
|
* Это 150+ вхождений в куче файлов, где надо менять структуру вызова функции из-за их несовместимости.
|
||||||
* Возможно, приоритетом стоит сделать унификацию свитков нападения, которых самих около 20 и которые
|
* Возможно, приоритетом стоит сделать унификацию свитков нападения, которых самих около 20 и которые
|
||||||
* по нескольку раз вызывают эти функции.
|
* по нескольку раз вызывают эти функции.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
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);
|
if ($room == 0) {
|
||||||
|
$room = User::$current->getRoom();
|
||||||
|
}
|
||||||
|
if ($fp = @fopen("tmp/chat.txt", "a")) { //открытие
|
||||||
|
flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА
|
||||||
|
fputs($fp, ":[" . time() . "]:[!sys!!]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом
|
||||||
|
fflush($fp); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ
|
||||||
|
flock($fp, LOCK_UN); //СНЯТИЕ БЛОКИРОВКИ
|
||||||
|
fclose($fp); //закрытие
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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);
|
if ($room == 0) {
|
||||||
|
$room = User::$current->getRoom();
|
||||||
|
}
|
||||||
|
$fp = fopen("tmp/chat.txt", "a"); //открытие
|
||||||
|
flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА
|
||||||
|
fputs($fp, ":[" . time() . "]:[{$who}]:[" . ($text) . "]:[" . $room . "]\r\n"); //работа с файлом
|
||||||
|
fflush($fp); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ
|
||||||
|
flock($fp, LOCK_UN); //СНЯТИЕ БЛОКИРОВКИ
|
||||||
|
fclose($fp); //закрытие
|
||||||
}
|
}
|
||||||
|
|
||||||
function err($t)
|
function err($t)
|
||||||
@ -208,14 +494,14 @@ function err($t)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $userId
|
* @param int $userId
|
||||||
* @param string $text
|
* @param string $text
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function telegraph(int $userId, string $text)
|
function telegraph(int $userId, string $text)
|
||||||
{
|
{
|
||||||
if (User::getInstance($userId)->getId() > 0) {
|
if (DBPDO::$db->ofetch('SELECT 1 FROM users WHERE id = ?', $userId)) {
|
||||||
Chat::sendTelegraf($text, $userId);
|
DBPDO::$db->execute('INSERT INTO chat (user_id,receiver_id,msg,type) VALUES (-1,?,?,?)', [$userId, $text, 'sms']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +512,7 @@ function SolveExp($at_id, $def_id, $damage): float
|
|||||||
'btl_1' => 1,
|
'btl_1' => 1,
|
||||||
'btl_2' => 0.5,
|
'btl_2' => 0.5,
|
||||||
'btl_3' => 0.05,
|
'btl_3' => 0.05,
|
||||||
];
|
];
|
||||||
$baseexp = [
|
$baseexp = [
|
||||||
"0" => "2",
|
"0" => "2",
|
||||||
"1" => "5",
|
"1" => "5",
|
||||||
@ -256,31 +542,33 @@ function SolveExp($at_id, $def_id, $damage): float
|
|||||||
$bot_def = false;
|
$bot_def = false;
|
||||||
|
|
||||||
if ($at_id > _BOTSEPARATOR_) {
|
if ($at_id > _BOTSEPARATOR_) {
|
||||||
$at_id = Db::getInstance()->fetchColumn('select prototype from bots where bot_id = ?', $at_id);
|
$bots = DBPDO::$db->fetch('select * from bots where bot_id = ?', $at_id);
|
||||||
|
$at_id = $bots['prototype'];
|
||||||
$bot_active = true;
|
$bot_active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = 'select greatest(1, sum(price)) as allprice from users left join inventory on users.id = inventory.owner_id where id = ?';
|
$query = 'select greatest(1, sum(price)) as allprice from users left join inventory on users.id = inventory.owner_id where id = ?';
|
||||||
$atAllPrice = Db::getInstance()->fetchColumn($query, $at_id);
|
$at = DBPDO::$db->fetch($query, $at_id);
|
||||||
$defAllPrice = Db::getInstance()->fetchColumn($query, $def_id);
|
$def = DBPDO::$db->fetch($query, $def_id);
|
||||||
|
|
||||||
$atInfo = new UserStats($at_id);
|
$atInfo = new UserStats($at_id);
|
||||||
$defInfo = new UserStats($def_id);
|
$defInfo = new UserStats($def_id);
|
||||||
|
|
||||||
$table_name = $at_id > _BOTSEPARATOR_ ? 'bots' : 'users';
|
$table_name = $at_id > _BOTSEPARATOR_ ? 'bots' : 'users';
|
||||||
$bt = Db::getInstance()->ofetch('select blood, type, t1, t2 from battle where battle_id = (select battle from ? where id = ?)', [$table_name, $at_id]);
|
$bt = DBPDO::$db->fetch('select blood, type, t1, t2 from battle where battle_id = (select battle from ? where id = ?)', [$table_name, $at_id]);
|
||||||
|
|
||||||
if ($def_id > _BOTSEPARATOR_) {
|
if ($def_id > _BOTSEPARATOR_) {
|
||||||
$def_id = Db::getInstance()->fetchColumn('select prototype from bots where bot_id = ?', $def_id);
|
$bots = DBPDO::$db->fetch('select * from bots where bot_id = ?', $def_id);
|
||||||
|
$def_id = $bots['prototype'];
|
||||||
$bot_def = true;
|
$bot_def = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($bt->blood) {
|
if ($bt['blood']) {
|
||||||
$expmf = $mods['bloodb'];
|
$expmf = $mods['bloodb'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$filebtl = '/tmp/' . $at_id . '.btl';
|
$filebtl = '/tmp/' . $at_id . '.btl';
|
||||||
if ($bt->type == 1 && file_exists($filebtl)) {
|
if ($bt['type'] == 1 && file_exists($filebtl)) {
|
||||||
$btfl = fopen($filebtl, 'r');
|
$btfl = fopen($filebtl, 'r');
|
||||||
$contents = fread($btfl, filesize($filebtl));
|
$contents = fread($btfl, filesize($filebtl));
|
||||||
fclose($btfl);
|
fclose($btfl);
|
||||||
@ -326,7 +614,7 @@ function SolveExp($at_id, $def_id, $damage): float
|
|||||||
"25" => 919
|
"25" => 919
|
||||||
];
|
];
|
||||||
|
|
||||||
$mfit = ($atAllPrice / ($standart[$atInfo->getLevel()] / 3));
|
$mfit = ($at['allprice'] / ($standart[$atInfo->getLevel()] / 3));
|
||||||
if ($mfit < 0.8) {
|
if ($mfit < 0.8) {
|
||||||
$mfit = 0.8;
|
$mfit = 0.8;
|
||||||
}
|
}
|
||||||
@ -334,7 +622,7 @@ function SolveExp($at_id, $def_id, $damage): float
|
|||||||
$mfit = 1.5;
|
$mfit = 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
$pls = count(explode(";", $bt->t1)) + count(explode(";", $bt->t2));
|
$pls = count(explode(";", $bt['t1'])) + count(explode(";", $bt['t2']));
|
||||||
if ($pls > 2) {
|
if ($pls > 2) {
|
||||||
$mfbot = $bot_active ? 0.3 : 1;
|
$mfbot = $bot_active ? 0.3 : 1;
|
||||||
$mfbot2 = $bot_def ? 0.7 : 1;
|
$mfbot2 = $bot_def ? 0.7 : 1;
|
||||||
@ -346,5 +634,5 @@ function SolveExp($at_id, $def_id, $damage): float
|
|||||||
$expmf = 1;
|
$expmf = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return round((($baseexp[$defInfo->getLevel()]) * ($defAllPrice / (($atAllPrice + $defAllPrice) / 2)) * ($damage / $defInfo->getMaxHealth()) * $expmf * $mfit * $mfbot * $mfbot2) / 3);
|
return round((($baseexp[$defInfo->getLevel()]) * ($def['allprice'] / (($at['allprice'] + $def['allprice']) / 2)) * ($damage / $defInfo->getMaxHealth()) * $expmf * $mfit * $mfbot * $mfbot2) / 3);
|
||||||
}
|
}
|
74
gotzamok.php
74
gotzamok.php
@ -1,9 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Разрушенный замок на замковой улице. */
|
/* Разрушенный замок на замковой улице. */
|
||||||
|
|
||||||
use Battles\Template;
|
|
||||||
use Battles\User, Battles\Database\Db;
|
|
||||||
|
|
||||||
const CASTLE_MAX_LEVEL = 10;
|
const CASTLE_MAX_LEVEL = 10;
|
||||||
require_once 'functions.php';
|
require_once 'functions.php';
|
||||||
$castleOwners = db::c()->query('SELECT * FROM `clans` WHERE `short` = (SELECT * FROM `variables` WHERE `var` = "?s")', 'gotzamok');
|
$castleOwners = db::c()->query('SELECT * FROM `clans` WHERE `short` = (SELECT * FROM `variables` WHERE `var` = "?s")', 'gotzamok');
|
||||||
@ -11,36 +7,38 @@ $castleOwners = db::c()->query('SELECT * FROM `clans` WHERE `short` = (SELECT *
|
|||||||
if ($castleOwners['id'] == $user['klan']) {
|
if ($castleOwners['id'] == $user['klan']) {
|
||||||
// если мой клан
|
// если мой клан
|
||||||
if ($_GET['goto'] == 'arsenal') {
|
if ($_GET['goto'] == 'arsenal') {
|
||||||
User::getInstance()->setRoom(38);
|
$user->setRoom(38);
|
||||||
}
|
}
|
||||||
if ($_GET['goto'] == 'home') {
|
if ($_GET['goto'] == 'home') {
|
||||||
User::getInstance()->setRoom(37);
|
$user->setRoom(37);
|
||||||
}
|
}
|
||||||
if ($_GET['goto'] == 'dvor') {
|
if ($_GET['goto'] == 'dvor') {
|
||||||
User::getInstance()->setRoom(39);
|
$user->setRoom(39);
|
||||||
}
|
}
|
||||||
if ($_GET['goto'] == 'master') {
|
if ($_GET['goto'] == 'master') {
|
||||||
User::getInstance()->setRoom(40);
|
$user->setRoom(40);
|
||||||
}
|
}
|
||||||
if ($_GET['goto'] == 'rest') {
|
if ($_GET['goto'] == 'rest') {
|
||||||
User::getInstance()->setRoom(41);
|
$user->setRoom(41);
|
||||||
}
|
}
|
||||||
if (in_array($_GET['goto'], ['arsenal', 'home', 'dvor', 'master', 'rest'])) {
|
if (in_array($_GET['goto'], ['arsenal', 'home', 'dvor', 'master', 'rest'])) {
|
||||||
db::c()->query('UPDATE `users`,`online` SET `users`.`room` = ?i,`online`.`room` = ?i WHERE `online`.`id` = `users`.`id` AND `online`.`id` = ?i', User::getInstance()->getRoom(), User::getInstance()->getRoom(), User::getInstance()->getId());
|
db::c()->query('UPDATE `users`,`online` SET `users`.`room` = ?i,`online`.`room` = ?i WHERE `online`.`id` = `users`.`id` AND `online`.`id` = ?i', $user->getRoom(), $user->getRoom(), $user->getId());
|
||||||
header('location: gotzamok.php');
|
header('location: gotzamok.php');
|
||||||
} else {
|
} else {
|
||||||
$status = 'В этом замке нет такого места!';
|
$status = 'В этом замке нет такого места!';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$i = User::getInstance()->getRoom();
|
switch ($user->getRoom()) {
|
||||||
if ($i == '37') {
|
case '37' :
|
||||||
$backgroundImage = '689_small_550.jpg';
|
$backgroundImage = '689_small_550.jpg';
|
||||||
} elseif ($i == '41') {
|
break;
|
||||||
$backgroundImage = 'ko.jpg';
|
case '41' :
|
||||||
|
$backgroundImage = 'ko.jpg';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (User::getInstance()->getRoom() == 38) {
|
if ($user->getRoom() == 38) {
|
||||||
$glava = db::c()->query('SELECT owner_id FROM `clans` WHERE `short` = "?s"', $user['klan'])->fetch_assoc();
|
$glava = db::c()->query('SELECT owner_id FROM `clans` WHERE `short` = "?s"', $user['klan'])->fetch_assoc();
|
||||||
// возврат шмотки
|
// возврат шмотки
|
||||||
if ($_GET['back']) {
|
if ($_GET['back']) {
|
||||||
@ -64,36 +62,28 @@ if (User::getInstance()->getRoom() == 38) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (User::getInstance()->getRoom() == 40) {
|
if ($user->getRoom() == 40) {
|
||||||
$at = db::c()->query('SELECT * FROM `variables` WHERE `var` = "?s"', 'gotzam_att')->fetch_assoc();
|
$at = db::c()->query('SELECT * FROM `variables` WHERE `var` = "?s"', 'gotzam_att')->fetch_assoc();
|
||||||
$def = db::c()->query('SELECT * FROM `variables` WHERE `var` = "?s"', 'gotzam_def')->fetch_assoc();
|
$def = db::c()->query('SELECT * FROM `variables` WHERE `var` = "?s"', 'gotzam_def')->fetch_assoc();
|
||||||
|
|
||||||
if ($_GET['up'] == 'at') {
|
if ($_GET['up'] == 'at') {
|
||||||
if ($at[1] >= CASTLE_MAX_LEVEL) {
|
if ($at[1] >= CASTLE_MAX_LEVEL) $status = 'Укрепление достигло максимального уровня!';
|
||||||
$status = 'Укрепление достигло максимального уровня!';
|
|
||||||
}
|
|
||||||
elseif ((pow(52, $at[1] + 1)) <= $user['money']) {
|
elseif ((pow(52, $at[1] + 1)) <= $user['money']) {
|
||||||
db::c()->query('UPDATE `users` SET `money` = `money` - ?i WHERE `id` = ?i', pow(52, $at[1] + 1), $_SESSION['uid']);
|
db::c()->query('UPDATE `users` SET `money` = `money` - ?i WHERE `id` = ?i', pow(52, $at[1] + 1), $_SESSION['uid']);
|
||||||
db::c()->query('UPDATE `variables` SET `value` = `value` + 1 WHERE `var` = "?s"', 'gotzam_att');
|
db::c()->query('UPDATE `variables` SET `value` = `value` + 1 WHERE `var` = "?s"', 'gotzam_att');
|
||||||
$at += 1;
|
$at += 1;
|
||||||
} else {
|
} else $status = 'Не хватает денег!';
|
||||||
$status = 'Не хватает денег!';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ($_GET['up'] == 'def') {
|
if ($_GET['up'] == 'def') {
|
||||||
if ($def[1] >= CASTLE_MAX_LEVEL) {
|
if ($def[1] >= CASTLE_MAX_LEVEL) $status = 'Укрепление достигло максимального уровня!';
|
||||||
$status = 'Укрепление достигло максимального уровня!';
|
|
||||||
}
|
|
||||||
elseif ((pow(32, $def[1] + 1)) <= $user['money']) {
|
elseif ((pow(32, $def[1] + 1)) <= $user['money']) {
|
||||||
db::c()->query('UPDATE `users` SET `money` = `money` - ?i WHERE `id` = ?i', pow(52, $def[1] + 1), $_SESSION['uid']);
|
db::c()->query('UPDATE `users` SET `money` = `money` - ?i WHERE `id` = ?i', pow(52, $def[1] + 1), $_SESSION['uid']);
|
||||||
db::c()->query('UPDATE `variables` SET `value` = `value` + 1 WHERE `var` = "?s"', 'gotzam_def');
|
db::c()->query('UPDATE `variables` SET `value` = `value` + 1 WHERE `var` = "?s"', 'gotzam_def');
|
||||||
$def += 1;
|
$def += 1;
|
||||||
} else {
|
} else $status = 'Не хватает денег!';
|
||||||
$status = 'Не хватает денег!';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Template::header('Клановый замок');
|
\Battles\Template::header('Клановый замок');
|
||||||
?>
|
?>
|
||||||
<script src="js/main.js"></script>
|
<script src="js/main.js"></script>
|
||||||
<style>
|
<style>
|
||||||
@ -106,9 +96,7 @@ Template::header('Клановый замок');
|
|||||||
<div style="text-align: right;">
|
<div style="text-align: right;">
|
||||||
<button onClick="hrefToFrame('city.php?bps')">Вернуться</button>
|
<button onClick="hrefToFrame('city.php?bps')">Вернуться</button>
|
||||||
</div>
|
</div>
|
||||||
<div><?php if (!empty($status)) {
|
<div><?php if (!empty($status)) err($status); ?></div>
|
||||||
err($status);
|
|
||||||
} ?></div>
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
if ($castleOwners['id'] == $user['klan']) { ?>
|
if ($castleOwners['id'] == $user['klan']) { ?>
|
||||||
@ -118,32 +106,32 @@ if ($castleOwners['id'] == $user['klan']) { ?>
|
|||||||
<TD valign=top style="width:250px;">
|
<TD valign=top style="width:250px;">
|
||||||
<INPUT TYPE=button style="width:200px;" value="Перейти в приемную"
|
<INPUT TYPE=button style="width:200px;" value="Перейти в приемную"
|
||||||
onClick="hrefToFrame('gotzamok.php?goto=home')">
|
onClick="hrefToFrame('gotzamok.php?goto=home')">
|
||||||
<? if (User::getInstance()->getRoom() == 37): ?>
|
<? if ($user->getRoom() == 37): ?>
|
||||||
<img src='i/flag.gif'>
|
<img src='i/flag.gif'>
|
||||||
<?php endif; ?><BR>
|
<?php endif; ?><BR>
|
||||||
<INPUT TYPE=button style="width:200px;" value="Перейти в арсенал"
|
<INPUT TYPE=button style="width:200px;" value="Перейти в арсенал"
|
||||||
onClick="hrefToFrame('gotzamok.php?goto=arsenal')">
|
onClick="hrefToFrame('gotzamok.php?goto=arsenal')">
|
||||||
<? if (User::getInstance()->getRoom() == 38): ?>
|
<? if ($user->getRoom() == 38): ?>
|
||||||
<img src='i/flag.gif'>
|
<img src='i/flag.gif'>
|
||||||
<?php endif; ?><BR>
|
<?php endif; ?><BR>
|
||||||
<INPUT TYPE=button style="width:200px;" value="Перейти во внутренний двор"
|
<INPUT TYPE=button style="width:200px;" value="Перейти во внутренний двор"
|
||||||
onClick="hrefToFrame('gotzamok.php?goto=dvor')">
|
onClick="hrefToFrame('gotzamok.php?goto=dvor')">
|
||||||
<? if (User::getInstance()->getRoom() == 39): ?>
|
<? if ($user->getRoom() == 39): ?>
|
||||||
<img src='i/flag.gif'>
|
<img src='i/flag.gif'>
|
||||||
<?php endif; ?><BR>
|
<?php endif; ?><BR>
|
||||||
<INPUT TYPE=button style="width:200px;" value="Перейти в мастерские"
|
<INPUT TYPE=button style="width:200px;" value="Перейти в мастерские"
|
||||||
onClick="hrefToFrame('gotzamok.php?goto=master')">
|
onClick="hrefToFrame('gotzamok.php?goto=master')">
|
||||||
<? if (User::getInstance()->getRoom() == 40): ?>
|
<? if ($user->getRoom() == 40): ?>
|
||||||
<img src='i/flag.gif'>
|
<img src='i/flag.gif'>
|
||||||
<?php endif; ?><BR>
|
<?php endif; ?><BR>
|
||||||
<INPUT TYPE=button style="width:200px;" value="Перейти в опочивальни"
|
<INPUT TYPE=button style="width:200px;" value="Перейти в опочивальни"
|
||||||
onClick="hrefToFrame('gotzamok.php?goto=rest')">
|
onClick="hrefToFrame('gotzamok.php?goto=rest')">
|
||||||
<? if (User::getInstance()->getRoom() == 41): ?>
|
<? if ($user->getRoom() == 41): ?>
|
||||||
<img src='i/flag.gif'>
|
<img src='i/flag.gif'>
|
||||||
<?php endif; ?><BR>
|
<?php endif; ?><BR>
|
||||||
</td>
|
</td>
|
||||||
<td valign=top>
|
<td valign=top>
|
||||||
<?php if (User::getInstance()->getRoom() == 38): ?>
|
<?php if ($user->getRoom() == 38): ?>
|
||||||
<h4>Арсенал</h4>
|
<h4>Арсенал</h4>
|
||||||
<button onClick="hrefToFrame('gotzamok.php?do=zdat')">Сдать в арсенал</button>
|
<button onClick="hrefToFrame('gotzamok.php?do=zdat')">Сдать в арсенал</button>
|
||||||
<div style="background: silver; border: 1px solid dimgray;">
|
<div style="background: silver; border: 1px solid dimgray;">
|
||||||
@ -186,7 +174,7 @@ if ($castleOwners['id'] == $user['klan']) { ?>
|
|||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
endif;
|
endif;
|
||||||
if (User::getInstance()->getRoom() == 40): ?>
|
if ($user->getRoom() == 40): ?>
|
||||||
<h4>Мастерские</h4>
|
<h4>Мастерские</h4>
|
||||||
<div style="background: silver; border: 1px solid dimgray;">
|
<div style="background: silver; border: 1px solid dimgray;">
|
||||||
Здесь вы можете улучшить оборонные способности вашего замка.
|
Здесь вы можете улучшить оборонные способности вашего замка.
|
||||||
@ -203,7 +191,7 @@ if ($castleOwners['id'] == $user['klan']) { ?>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php endif;
|
<?php endif;
|
||||||
if (User::getInstance()->getRoom() == 41): ?>
|
if ($user->getRoom() == 41): ?>
|
||||||
<h4>Комнаты отдыха</h4>
|
<h4>Комнаты отдыха</h4>
|
||||||
<div style="background: silver; border: 1px solid dimgray;">
|
<div style="background: silver; border: 1px solid dimgray;">
|
||||||
Посиди в тишине, внутри стен. Тут нет врагов. Тут спокойно.
|
Посиди в тишине, внутри стен. Тут нет врагов. Тут спокойно.
|
||||||
@ -212,6 +200,4 @@ if ($castleOwners['id'] == $user['klan']) { ?>
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<? } else {
|
<? } else $status = 'Ворота замка закрыты, привратник отказывается даже разговаривать с тобой...'; ?>
|
||||||
$status = 'Ворота замка закрыты, привратник отказывается даже разговаривать с тобой...';
|
|
||||||
} ?>
|
|
@ -1,9 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Nick;
|
|
||||||
use Battles\ShopItem;
|
use Battles\ShopItem;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
require_once 'functions.php';
|
require_once 'functions.php';
|
||||||
|
|
||||||
@ -11,7 +9,20 @@ $error = '';
|
|||||||
|
|
||||||
function login($uid)
|
function login($uid)
|
||||||
{
|
{
|
||||||
return User::getInstance($uid)->getId() ? Nick::id(User::getInstance()->getId())->full() : 'Место свободно';
|
$user = mysql_fetch_array(mysql_query('SELECT `id`, `login`, `align`, `level`, `klan` FROM `users` WHERE `id` = "' . mysql_real_escape_string($uid) . '" LIMIT 1'));
|
||||||
|
if (isset($user['id'])) {
|
||||||
|
$align_img = '<img src="i/align_' . ($user['align'] ? $user['align'] : 0) . '.gif" /> ';
|
||||||
|
if ($user['klan'] != '') {
|
||||||
|
$clan = mysql_fetch_array(mysql_query('SELECT `id`, `name` FROM `clans` WHERE `id` = "' . $user['klan'] . '" LIMIT 1'));
|
||||||
|
$clan_img = '<img title="' . $clan['name'] . '" src="i/clan/' . $clan['name'] . '.png" /> ';
|
||||||
|
} else {
|
||||||
|
$clan_img = '';
|
||||||
|
}
|
||||||
|
$r = $align_img . $clan_img . ' <b>' . $user['login'] . ' [' . $user['level'] . ']</b><a href="/inf.php?' . $user['id'] . '" target="_blank"><img src="/i/inf.gif" /></a>';
|
||||||
|
} else {
|
||||||
|
$r = 'Место свободно';
|
||||||
|
}
|
||||||
|
return $r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
336
hostel.php
336
hostel.php
@ -1,60 +1,324 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\{Database\Db, Hostel, Travel, User, UserEffect};
|
use Battles\Template;
|
||||||
|
use Battles\User;
|
||||||
|
|
||||||
require_once 'config.php';
|
require_once 'config.php';
|
||||||
|
$user = User::$current;
|
||||||
|
$hostel = mysql_fetch_array(mysql_query('SELECT `id`, `uid`, `type`, `time` FROM `hostel` WHERE `uid` = "' . $user['id'] . '" LIMIT 1'));
|
||||||
|
$error = '';
|
||||||
|
$rs = '';
|
||||||
|
$base = [1 => ['type' => 'Сумка'], 2 => ['type' => 'Сундук'], 3 => ['type' => 'Комната'], 4 => ['type' => 'Амбар']];
|
||||||
|
$times = [1 => 7, 2 => 14, 3 => 21, 4 => 28];
|
||||||
|
$cost = [1 => [8, 16, 24, 32], 2 => [15, 30, 45, 60], 3 => [25, 50, 75, 100], 4 => [40, 80, 120, 160]];
|
||||||
|
|
||||||
$host = new Hostel();
|
function remove_hostel_items($u)
|
||||||
|
{
|
||||||
if (!empty($_GET['exit'])) {
|
$itms = mysql_query('SELECT `id`, `owner` FROM `inventory` WHERE `owner` = "-101' . $u . '"');
|
||||||
Travel::toRoom(26, 661);
|
while ($pl = mysql_fetch_array($itms)) {
|
||||||
}
|
mysql_query('UPDATE `inventory` SET `owner` = "' . $u . '" WHERE `id` = "' . $pl['id'] . '" AND `owner` = "-101' . $u . '"');
|
||||||
|
|
||||||
if (!empty($_GET['to_room'])) {
|
|
||||||
if (empty($host->getHid())) {
|
|
||||||
$host->setError('У Вас, нету комнаты!');
|
|
||||||
}
|
|
||||||
if ($host->getTime() <= time()) {
|
|
||||||
$host->setError('У Вас просрочена аренда. Оплатите что-бы продолжить пользоваться нашими услугами!');
|
|
||||||
}
|
|
||||||
if ($host->getStatus()['type'] !== 'error') {
|
|
||||||
Travel::toRoom(661, 26);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_GET['pays'])) {
|
function select_arenda($u, $type, $redirect = false)
|
||||||
$host->changeTime($_GET['pays']);
|
{
|
||||||
|
$hostel = mysql_fetch_array(mysql_query('SELECT `id` FROM `hostel` WHERE `uid` = "' . $u['id'] . '" LIMIT 1'));
|
||||||
|
$price = [1 => 8, 2 => 15, 3 => 25, 4 => 40];
|
||||||
|
if (!isset($u['id'])) {
|
||||||
|
$r = 'Персонаж не найден ...';
|
||||||
|
} else {
|
||||||
|
if ($type > 0 && $type <= 4) {
|
||||||
|
if (isset($hostel['id'])) {
|
||||||
|
$r = 'Не более 1 арендованного места ...';
|
||||||
|
} else {
|
||||||
|
if ($u['money'] >= $price[$type]) {
|
||||||
|
$u['money'] -= $price[$type];
|
||||||
|
mysql_query('UPDATE `users` SET `money` = "' . $u['money'] . '" WHERE `id` = "' . $u['id'] . '" LIMIT 1');
|
||||||
|
mysql_query('INSERT INTO `hostel` (`uid`, `type`, `time`) VALUES ("' . $u['id'] . '", "' . $type . '", "' . (time() + 60 * 60 * 24 * 7) . '")');
|
||||||
|
$r = 'Поздравляем с успешной арендой ...';
|
||||||
|
} else {
|
||||||
|
$r = 'Недостаточно денег ...';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$r = 'Неверный тип аренды ...';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($redirect) {
|
||||||
|
header('Location: main.php');
|
||||||
|
}
|
||||||
|
return $r;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_POST['select']) && !empty($_POST['tariff'])) {
|
if ($_GET['exit'] == 1) {
|
||||||
$host->newRent((int)$_POST['tariff']);
|
if ($user['sleep'] == 0) {
|
||||||
|
mysql_query('UPDATE `users`,`online` SET `users`.`room` = 26, `online`.`room` = 26 WHERE `users`.`id` = "' . $user['id'] . '" AND `online`.`id` = "' . $user['id'] . '"');
|
||||||
|
header('Location: city.php');
|
||||||
|
} else {
|
||||||
|
$error = 'Вы спите ...';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_GET['del'])) {
|
if ($_GET['to_room'] == 1) {
|
||||||
$host->remove();
|
if (isset($hostel['id'])) {
|
||||||
|
if ($hostel['time'] > time()) {
|
||||||
|
mysql_query('UPDATE `users`,`online` SET `users`.`room` = 661, `online`.`room` = 661 WHERE `users`.`id` = "' . $user['id'] . '" AND `online`.`id` = "' . $user['id'] . '"');
|
||||||
|
header('Location: hostel_room.php');
|
||||||
|
} else {
|
||||||
|
$error = 'У Вас просрочена аренда. Оплатите что-бы продолжить пользоваться нашими услугами ...';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$error = 'У Вас, нету комнаты ...';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_POST['deselect']) && !empty($_POST['retariff'])) {
|
if ($_GET['pays'] && (int)$_GET['pays'] >= 1 && (int)$_GET['pays'] <= 4) {
|
||||||
$host->changeType((int)$_POST['retariff']);
|
if (isset($hostel['id'])) {
|
||||||
header('Location: main.php');
|
if ($user['money'] >= $cost[$hostel['type']][(int)$_GET['pays']]) {
|
||||||
|
$time = $hostel['time'] + 60 * 60 * 24 * $times[(int)$_GET['pays']];
|
||||||
|
$user['money'] -= $cost[$hostel['type']][(int)$_GET['pays']];
|
||||||
|
$hostel['time'] = $time;
|
||||||
|
mysql_query('UPDATE `users` SET `money` = "' . $user['money'] . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
|
||||||
|
mysql_query('UPDATE `hostel` SET `time` = "' . $time . '" WHERE `uid` = "' . $user['id'] . '" AND `id` = "' . $hostel['id'] . '" LIMIT 1');
|
||||||
|
$error = 'Всё прошло успешно ...';
|
||||||
|
} else {
|
||||||
|
$error = 'Недостаточно денег ...';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$error = 'Ошибка #1';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_GET['sleep'])) {
|
if (isset($_POST['select']) && isset($_POST['tariff'])) {
|
||||||
if (UserEffect::getRemainingEffectTime(User::getInstance()->getId(), 8) <= time()) {
|
if ($_POST['tariff'] == 0) {
|
||||||
//Разморозка таймеров эффектов??!
|
$error = 'Выберите тариф ...';
|
||||||
UserEffect::add(User::getInstance()->getId(), 8, UserEffect::$effectName[8], time() + 60 * 60 * 2);
|
} else {
|
||||||
Db::getInstance()->execute('update users_effects set remaining_time = remaining_time - ? where owner_id = ? and type not in (11,12,13,14,5,4,3,2,8)', [time(), User::getInstance()->getId()]);
|
$error = select_arenda($user, (int)$_POST['tariff']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_GET['del'] == 1) {
|
||||||
|
if (isset($hostel['id']) && $hostel['time'] > time()) {
|
||||||
|
mysql_query('DELETE FROM `hostel` WHERE `uid` = "' . $user['id'] . '" AND `id` = "' . $hostel['id'] . '" LIMIT 1');
|
||||||
|
remove_hostel_items($user['id']);
|
||||||
|
$error = 'Вы успешно отказались от аренды ...';
|
||||||
|
unset($hostel);
|
||||||
|
} elseif (isset($hostel['id']) && $hostel['time'] < time()) {
|
||||||
|
$error = 'Нельзя отказаться от услуг если имеется задолежнность ...';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['deselect']) && isset($_POST['retariff'])) {
|
||||||
|
if (isset($hostel['id']) && $hostel['time'] > time()) {
|
||||||
|
mysql_query('DELETE FROM `hostel` WHERE `uid` = "' . $user['id'] . '" AND `id` = "' . $hostel['id'] . '" LIMIT 1');
|
||||||
|
remove_hostel_items($user['id']);
|
||||||
|
select_arenda($user, (int)$_POST['retariff'], true);
|
||||||
|
} elseif (isset($hostel['id']) && $hostel['time'] < time()) {
|
||||||
|
$error = 'Нельзя сменить услугу если имеется задолежнность ...';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_GET['sleep'] && $user['sleep'] == 0) {
|
||||||
|
if ($user['sleep_time'] <= time()) {
|
||||||
|
if ($user['vip'] == 1) {
|
||||||
|
$sl = 8;
|
||||||
|
} elseif ($user['vip'] == 2) {
|
||||||
|
$sl = 12;
|
||||||
|
} elseif ($user['vip'] == 3) {
|
||||||
|
$sl = 18;
|
||||||
|
} else {
|
||||||
|
$sl = 2;
|
||||||
|
}
|
||||||
|
mysql_query('UPDATE `users` SET `sleep` = "' . (time() + 60 * 60 * $sl) . '", `sleep_time` = "' . (time() + 60 * 60 * 8) . '" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
|
||||||
|
mysql_query('INSERT INTO `effects` (`type`, `name`, `time`, `owner`) VALUES ("8", "Сон", "' . (time() + 60 * 60 * $sl) . '", "' . $user['id'] . '")');
|
||||||
|
$ef = mysql_query('SELECT `id`, `time`, `type` FROM `effects` WHERE `owner` = "' . $user['id'] . '" AND `type` != 11 AND `type` != 12 AND `type` != 13 AND `type` != 14 AND `type` != 5 AND `type` != 4 AND `type` != 2 AND `type` != 3 AND `type` != 8');
|
||||||
|
while ($pl = mysql_fetch_array($ef)) {
|
||||||
|
$tm = $pl['time'] - time();
|
||||||
|
mysql_query('UPDATE `effects` SET `sleep` = "' . $tm . '" WHERE `id` = "' . $pl['id'] . '" AND `owner` = "' . $user['id'] . '"');
|
||||||
|
}
|
||||||
header('Location: hostel.php');
|
header('Location: hostel.php');
|
||||||
} else {
|
} else {
|
||||||
$host->setError('Нельзя спать! Приходите через: ' . timeOut($user['sleep_time'] - time()));
|
$error = 'Нельзя спать ... Приходите через : ' . timeOut($user['sleep_time'] - time());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_GET['unsleep'])) {
|
if ($_GET['unsleep'] && $user['sleep'] > 0) {
|
||||||
//Заморозка таймеров эффектов??!
|
mysql_query('UPDATE `users` SET `sleep` = "0" WHERE `id` = "' . $user['id'] . '" LIMIT 1');
|
||||||
UserEffect::remove(User::getInstance()->getId(), 8);
|
mysql_query('DELETE FROM `effects` WHERE `owner` = "' . $user['id'] . '" AND `type` = "8" LIMIT 1');
|
||||||
Db::getInstance()->execute('update users_effects set remaining_time = remaining_time + ? where owner_id = ? and type not in (11,12,13,14,5,4,3,2,8)', [time(), User::getInstance()->getId()]);
|
$ef = mysql_query('SELECT `id`, `time`, `sleep` FROM `effects` WHERE `owner` = "' . $user['id'] . '" AND `sleep` != 0');
|
||||||
|
while ($pl = mysql_fetch_array($ef)) {
|
||||||
|
$tm = time() + $pl['sleep'];
|
||||||
|
mysql_query('UPDATE `effects` SET `time` = "' . $tm . '", `sleep` = "0" WHERE `id` = "' . $pl['id'] . '" AND `owner` = "' . $user['id'] . '"');
|
||||||
|
}
|
||||||
header('Location: hostel.php');
|
header('Location: hostel.php');
|
||||||
}
|
}
|
||||||
|
Template::header('Хостел');
|
||||||
|
?>
|
||||||
|
<script src="js/ajaxLoad.js"></script>
|
||||||
|
<? if (isset($hostel['id'])) { ?>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function () {
|
||||||
|
$("#retariff option[value='<?=$hostel['type']; ?>']").remove();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<? } ?>
|
||||||
|
<link rel="stylesheet" href="css/hostel.css"/>
|
||||||
|
<div class="contentContainer">
|
||||||
|
<div style="text-align: center;"><span class="hs">Гостиница, Холл</span></div>
|
||||||
|
<div class="buttonContainer">
|
||||||
|
<? if ($user['sleep'] == 0) { ?>
|
||||||
|
<input type="button" class="btns button-route" value="Уснуть" onclick="location.href='?sleep=1';"/>
|
||||||
|
<? } else { ?>
|
||||||
|
<input type="button" class="btns button-route" value="Пробудиться" onclick="location.href='?unsleep=1';"/>
|
||||||
|
<? } ?>
|
||||||
|
<input type="button" class="btns" value="Обновить" onclick="location.href='main.php';"/>
|
||||||
|
<input type="button" class="btns button-route" value="На улицу" onclick="location.href='?exit=1';"/>
|
||||||
|
<input type="button" class="btns button-route" value="Комната" onclick="location.href='?to_room=1';"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
require_once 'views/hostel.php';
|
<div id="hostelLeft">
|
||||||
|
<div id="hostelInteractive">
|
||||||
|
<? if (!isset($hostel['id'])) { ?>
|
||||||
|
<fieldset class="hostelClientState">
|
||||||
|
<legend>Станьте нашим клиентом</legend>
|
||||||
|
<form method="post" style="text-align: center; width: 100%;">
|
||||||
|
<input type="hidden" name="act" value="settariff"/>
|
||||||
|
<p>Выберите подходящий для Вас вариант обслуживания:</p>
|
||||||
|
<div style="text-align: center; width: 100%;">
|
||||||
|
<select name="tariff" class="tariff">
|
||||||
|
<option value="0">Выбор ...</option>
|
||||||
|
<option value="1">Сумка</option>
|
||||||
|
<option value="2">Сундук</option>
|
||||||
|
<option value="3">Комната</option>
|
||||||
|
<option value="4">Амбар</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" class="button" value="Выбрал" name="select"/>
|
||||||
|
<? if ($error != '') {
|
||||||
|
echo '<br /><b style="color: Red;">' . $error . '</b><br />';
|
||||||
|
} ?>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</fieldset>
|
||||||
|
<? } else { ?>
|
||||||
|
<fieldset class="hostelClientState">
|
||||||
|
<legend>Добро пожаловать!</legend>
|
||||||
|
<form method="post" style="text-align: center; width: 100%;">
|
||||||
|
<p>Вы выбрали вариант предоставления жилья : <b><?= $base[$hostel['type']]['type']; ?></b></p>
|
||||||
|
<p>Аренда оплачена по: <? echo date('h:i d.m.y', $hostel['time']); ?>
|
||||||
|
(<small><? echo timeOut($hostel['time'] - time()); ?></small>)</p>
|
||||||
|
<div style="text-align: center; width: 100%;">
|
||||||
|
Сменить вариант аренды <select name="retariff" id="retariff">
|
||||||
|
<option value="0">Выбор ...</option>
|
||||||
|
<option value="1">Сумка</option>
|
||||||
|
<option value="2">Сундук</option>
|
||||||
|
<option value="3">Комната</option>
|
||||||
|
<option value="4">Амбар</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" class="button" value="Сменить" name="deselect"/>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<a href="javascript: void(0);" style="float: left; margin-left: 3px;"
|
||||||
|
onclick="if(confirm('Вы уверены?')) { location.href='?del=1'; }">Расторгнуть договор</a> <a
|
||||||
|
href="javascript: void(0);"
|
||||||
|
onclick="ajaxLoad('/hostel_checkpoint.php', 'hostelInteractive', {act:'pay'})"
|
||||||
|
style="float: right; margin-right: 3px;">Внести предоплату</a>
|
||||||
|
<? if ($error != '') {
|
||||||
|
echo '<br /><center><b style="color: Red;">' . $error . '</b></center><br />';
|
||||||
|
} ?>
|
||||||
|
</fieldset>
|
||||||
|
<? } ?>
|
||||||
|
</div>
|
||||||
|
<fieldset class="hostelRules" style="overflow: hidden;">
|
||||||
|
<legend>Правила проживания</legend>
|
||||||
|
<div style="overflow: auto; height: 168px !important; margin: 0; padding: 0;">
|
||||||
|
<div style="margin: 0; padding: 0; height: 100%;">
|
||||||
|
<h2>И что я получу за свои кровные?</h2>
|
||||||
|
У нас ты можешь:
|
||||||
|
<br/>- хранить свое барахло и прочий хлам.
|
||||||
|
<h2>Охрана у вас есть? Не воруют?</h2>
|
||||||
|
Самые любопытные могут получить в сурло прямо здесь - в холле.
|
||||||
|
<br/>- Устраивать беспорядки в комнатах не позволено.
|
||||||
|
<br/>- Прислуга у нас проверенная - пожитки твои не тронут.
|
||||||
|
<h2>И сколько стоит всё это удовольствие?</h2>
|
||||||
|
- Комнаты есть разные, для людей разного достатка. Смотри справа расценки.
|
||||||
|
<br/>- Платить нужно каждый день. Пока не заплатишь - на лестницу не ногой.
|
||||||
|
<br/>- Вместимость - это сколько твоих вещей влезет в комнату, имеется ввиду общая масса инвентаря.
|
||||||
|
|
||||||
|
<h2>Как всем этим пользоваться?</h2>
|
||||||
|
Всё просто. Плати и живи.
|
||||||
|
<br/>Приходишь, платишь по долгам, проходишь в аппартаменты. В сундуке есть секции для каждого вида
|
||||||
|
вещей, фильтр поможет разобраться.
|
||||||
|
<h2>Что ещё мне нужно знать?</h2>
|
||||||
|
- При смене размера комнаты, ты теряешь оставшееся оплаченное время.
|
||||||
|
<br/>- При просрочке платы более 60 суток, мы оставляем за собой право сдать вещи на аукцион для
|
||||||
|
погашения задолжености.
|
||||||
|
<br/>- Если долг будет разумный, то подарки забирать с полки не будем.
|
||||||
|
<br/>- Быстро сориентироваться с шмотом поможет фильтр предметов.
|
||||||
|
<br/>- Если что потеряешь - твои проблемы.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="hostelRight">
|
||||||
|
<fieldset>
|
||||||
|
<legend>Тарифы и услуги</legend>
|
||||||
|
<br/>
|
||||||
|
<table class="tarifsList" cellpadding="0" cellspacing="0">
|
||||||
|
<caption>Сумка</caption>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tarifListLabel">Вместимость</td>
|
||||||
|
<td class="tarifListValue">15 ед.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tarifListLabel">Стоимость (7 сут.)</td>
|
||||||
|
<td class="tarifListValue">8.00 кр.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
<table class="tarifsList" cellpadding="0" cellspacing="0">
|
||||||
|
<caption>Сундук</caption>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tarifListLabel">Вместимость</td>
|
||||||
|
<td class="tarifListValue">30 ед.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tarifListLabel">Стоимость (7 сут.)</td>
|
||||||
|
<td class="tarifListValue">15.00 кр.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
<table class="tarifsList" cellpadding="0" cellspacing="0">
|
||||||
|
<caption>Комната</caption>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tarifListLabel">Вместимость</td>
|
||||||
|
<td class="tarifListValue">50 ед.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tarifListLabel">Стоимость (7 сут.)</td>
|
||||||
|
<td class="tarifListValue">25.00 кр.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
<table class="tarifsList" cellpadding="0" cellspacing="0">
|
||||||
|
<caption>Амбар</caption>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tarifListLabel">Вместимость</td>
|
||||||
|
<td class="tarifListValue">100 ед.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tarifListLabel">Стоимость (7 сут.)</td>
|
||||||
|
<td class="tarifListValue">40.00 кр.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -1,9 +1,19 @@
|
|||||||
<?php
|
<?php
|
||||||
|
require_once "functions.php";
|
||||||
|
$hostel = \Battles\Database\DBPDO::$db->fetch('select * from hostel where uid = ?', \Battles\User::$current->getId());
|
||||||
|
$base = [1 => [8, 16, 24, 32], 2 => [15, 30, 45, 60], 3 => [25, 50, 75, 100], 4 => [40, 80, 120, 160]];
|
||||||
|
|
||||||
use Battles\Hostel;
|
if (isset($_POST['act']) && $_POST['act'] == 'pay' && isset($user['id']) && isset($hostel['id'])) {
|
||||||
|
echo '<fieldset class="hostelClientState">';
|
||||||
|
echo '<legend>Предварительная оплата</legend>';
|
||||||
|
echo '<div style="text-align: center;"><p class="NORMAL" style="margin: 5px 0">';
|
||||||
|
echo 'Аренда оплачена по: <b>' . date('h:i d.m.y', $hostel['time']) . '</b> <small>(' . timeOut($hostel['time'] - time()) . ')</small></p></div>';
|
||||||
|
|
||||||
require_once 'config.php';
|
echo '<table align="center" class="periods"><caption style="text-align: left;">Выберите срок предоплаты.</caption>
|
||||||
|
<tbody>
|
||||||
$host = new Hostel();
|
<tr class="caption"><th>Сутки</th><td title="7 дн.">7</td><td title="14 дн.">14</td><td title="21 дн.">21</td><td title="28 дн.">28</td></tr>
|
||||||
|
<tr class="value"><th>Сумма</th><td title="7 дн."><a href="?pays=1">' . $base[$hostel['type']][0] . '</a></td><td title="14 дн."><a href="?pays=2">' . $base[$hostel['type']][1] . '</a></td><td title="21 дн."><a href="?pays=3">' . $base[$hostel['type']][2] . '</a></td><td title="28 дн."><a href="?pays=4">' . $base[$hostel['type']][3] . '</a></td></tr>
|
||||||
require_once 'views/hostel-checkpoint.php';
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div style="color: red; font-size: 9px; padding-top: 3px;"><b>Внимание!</b> При расторжении договора или смене тарифа, внесенная плата не возвращается</div></fieldset></div>';
|
||||||
|
}
|
@ -1,8 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Database\Db;
|
use Battles\Database\DBPDO;
|
||||||
use Battles\InventoryItem;
|
use Battles\InventoryItem;
|
||||||
use Battles\Models\Inventory;
|
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
use Battles\User;
|
||||||
use Battles\UserInfo;
|
use Battles\UserInfo;
|
||||||
@ -18,8 +17,8 @@ $vips = [1 => 0.15, 2 => 0.30, 3 => 0.45];
|
|||||||
|
|
||||||
function get_meshok(): object
|
function get_meshok(): object
|
||||||
{
|
{
|
||||||
$allweight = Db::getInstance()->ofetch('select sum(weight) as items_weight_sum from inventory where on_sale = 0 and owner_id = ?', User::getInstance()->getId());
|
$allweight = DBPDO::$db->ofetch('select sum(weight) as items_weight_sum from inventory where on_sale = 0 and owner_id = ?', User::$current->getId());
|
||||||
$stat = new UserInfo(User::getInstance()->getId());
|
$stat = new UserInfo(User::$current->getId());
|
||||||
return (object)[
|
return (object)[
|
||||||
'currentweight' => $allweight->items_weight_sum,
|
'currentweight' => $allweight->items_weight_sum,
|
||||||
'maxweight' => $stat->getMaxWeight() + $allweight->items_weight_sum,
|
'maxweight' => $stat->getMaxWeight() + $allweight->items_weight_sum,
|
||||||
@ -30,7 +29,7 @@ function get_meshok(): object
|
|||||||
function show_item($row, $txt, $place)
|
function show_item($row, $txt, $place)
|
||||||
{
|
{
|
||||||
if (($row['maxdur'] <= $row['duration']) || ($row['dategoden'] && $row['dategoden'] <= time())) {
|
if (($row['maxdur'] <= $row['duration']) || ($row['dategoden'] && $row['dategoden'] <= time())) {
|
||||||
Inventory::destroyItem($row['id'], User::getInstance()->getId());
|
InventoryItem::destroyItem($row['id']);
|
||||||
}
|
}
|
||||||
$r = '';
|
$r = '';
|
||||||
|
|
||||||
|
27
index.php
27
index.php
@ -6,4 +6,29 @@ if ($_SESSION['uid']) {
|
|||||||
header('Location: fight.php');
|
header('Location: fight.php');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
require_once 'views/index.html';
|
?>
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="ru">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link href="/css/main.css" rel="stylesheet">
|
||||||
|
<link href="/css/btn.css" rel="stylesheet">
|
||||||
|
<title>Игра</title>
|
||||||
|
<h1>Демонстрационная версия</h1>
|
||||||
|
<div>
|
||||||
|
<p>Ребята, давайте сперва сделаем чтобы работало, а потом будем делать красиво. Идёт?</p>
|
||||||
|
<p>Пол персонажа выбирать нельзя. Это не ошибка. Все ограничения только для мальчиков или только для девочек
|
||||||
|
постепенно будут удалены.<br>
|
||||||
|
Любой человек может играть любым персонажем. Только его образ сможет показать кто перед вами. Мы живём в эпоху
|
||||||
|
толерантности, знаете ли! 😉</p>
|
||||||
|
<form method='post' action="enter.php">
|
||||||
|
Авторизация<br>
|
||||||
|
<input name='username' placeholder='Логин'>
|
||||||
|
<input name='password' placeholder='Пароль' type="password">
|
||||||
|
<br>
|
||||||
|
<input type=submit value='Войти в игру' class="button big">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="button-group minor-group">
|
||||||
|
<a class="button" href="register.php">Зарегистрироваться</a>
|
||||||
|
<a class="button" href="rememberpassword.php">Восстановить пароль</a>
|
||||||
|
</div>
|
19
inf.php
19
inf.php
@ -1,15 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\{Template, User};
|
use Battles\Models\PresentsModel;
|
||||||
use Battles\Models\Presents;
|
use Battles\Template;
|
||||||
|
use Battles\UserInfo;
|
||||||
|
|
||||||
include_once 'config.php';
|
include_once 'config.php';
|
||||||
$presentsList = (new Presents())->getAll(User::getInstance($_SERVER['QUERY_STRING'])->getId());
|
$userInfo = new UserInfo(urldecode($_SERVER['QUERY_STRING']));
|
||||||
Template::header('Информация о ' . User::getInstance($_SERVER['QUERY_STRING'])->getLogin());
|
$presentsModel = new PresentsModel($userInfo->getId());
|
||||||
if (!User::getInstance($_SERVER['QUERY_STRING'])->getId()) {
|
$presentsList = $presentsModel->getAllPresents();
|
||||||
|
$userInfo->setWatcher($_SESSION['uid']);
|
||||||
|
Template::header('Информация о ' . $userInfo->getLogin());
|
||||||
|
if (!$userInfo->getId()) {
|
||||||
echo sprintf('Ошибка: персонаж <em>%s</em> не найден...<p><a style="color: #99f;" href="javascript:window.history.go(-1);">←назад</a></p>', urldecode($_SERVER['QUERY_STRING']));
|
echo sprintf('Ошибка: персонаж <em>%s</em> не найден...<p><a style="color: #99f;" href="javascript:window.history.go(-1);">←назад</a></p>', urldecode($_SERVER['QUERY_STRING']));
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
User::getInstance($_SERVER['QUERY_STRING'])->userInfo()->showUserInfo();
|
$userInfo->showUserInfo();
|
||||||
|
include_once 'views/presents-list.php';
|
||||||
include_once 'views/inf-presents.php';
|
|
38
js/chat.js
38
js/chat.js
@ -94,51 +94,51 @@ var chat = {
|
|||||||
},
|
},
|
||||||
lookSmiles:function()
|
lookSmiles:function()
|
||||||
{
|
{
|
||||||
if($('#chbtn8').attr('class')=='getInstance cp chatBtn8_1')
|
if($('#chbtn8').attr('class')=='db cp chatBtn8_1')
|
||||||
{
|
{
|
||||||
$('#ttSmiles').css('display','');
|
$('#ttSmiles').css('display','');
|
||||||
$('#chbtn8').attr('class','getInstance cp chatBtn8_2');
|
$('#chbtn8').attr('class','db cp chatBtn8_2');
|
||||||
}else{
|
}else{
|
||||||
$('#ttSmiles').css('display','none');
|
$('#ttSmiles').css('display','none');
|
||||||
$('#chbtn8').attr('class','getInstance cp chatBtn8_1');
|
$('#chbtn8').attr('class','db cp chatBtn8_1');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
filterMsg:function()
|
filterMsg:function()
|
||||||
{
|
{
|
||||||
if($('#chbtn1').attr('class')=='getInstance cp chatBtn1_1')
|
if($('#chbtn1').attr('class')=='db cp chatBtn1_1')
|
||||||
{
|
{
|
||||||
$('#chbtn1').attr('class','getInstance cp chatBtn1_2'); this.filter = 1;
|
$('#chbtn1').attr('class','db cp chatBtn1_2'); this.filter = 1;
|
||||||
}else{
|
}else{
|
||||||
$('#chbtn1').attr('class','getInstance cp chatBtn1_1'); this.filter = 0;
|
$('#chbtn1').attr('class','db cp chatBtn1_1'); this.filter = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
systemMsg:function()
|
systemMsg:function()
|
||||||
{
|
{
|
||||||
if($('#chbtn4').attr('class')=='getInstance cp chatBtn4_1')
|
if($('#chbtn4').attr('class')=='db cp chatBtn4_1')
|
||||||
{
|
{
|
||||||
$('#chbtn4').attr('class','getInstance cp chatBtn4_2'); this.citySys = 1; $.cookie('citySys',1);
|
$('#chbtn4').attr('class','db cp chatBtn4_2'); this.citySys = 1; $.cookie('citySys',1);
|
||||||
}else{
|
}else{
|
||||||
$('#chbtn4').attr('class','getInstance cp chatBtn4_1'); this.citySys = 0; $.cookie('citySys',0);
|
$('#chbtn4').attr('class','db cp chatBtn4_1'); this.citySys = 0; $.cookie('citySys',0);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
soundChat:function()
|
soundChat:function()
|
||||||
{
|
{
|
||||||
if($('#chbtn7').attr('class')=='getInstance cp chatBtn7_1')
|
if($('#chbtn7').attr('class')=='db cp chatBtn7_1')
|
||||||
{
|
{
|
||||||
$('#chbtn7').attr('class','getInstance cp chatBtn7_2'); this.sound = 1;
|
$('#chbtn7').attr('class','db cp chatBtn7_2'); this.sound = 1;
|
||||||
}else if($('#chbtn7').attr('class')=='getInstance cp chatBtn7_2'){
|
}else if($('#chbtn7').attr('class')=='db cp chatBtn7_2'){
|
||||||
$('#chbtn7').attr('class','getInstance cp chatBtn7_3'); this.sound = 2;
|
$('#chbtn7').attr('class','db cp chatBtn7_3'); this.sound = 2;
|
||||||
}else{
|
}else{
|
||||||
$('#chbtn7').attr('class','getInstance cp chatBtn7_1'); this.sound = 0;
|
$('#chbtn7').attr('class','db cp chatBtn7_1'); this.sound = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
translitChat:function()
|
translitChat:function()
|
||||||
{
|
{
|
||||||
if($('#chbtn6').attr('class')=='getInstance cp chatBtn6_1')
|
if($('#chbtn6').attr('class')=='db cp chatBtn6_1')
|
||||||
{
|
{
|
||||||
$('#chbtn6').attr('class','getInstance cp chatBtn6_2'); this.translit = 1;
|
$('#chbtn6').attr('class','db cp chatBtn6_2'); this.translit = 1;
|
||||||
}else{
|
}else{
|
||||||
$('#chbtn6').attr('class','getInstance cp chatBtn6_1'); this.translit = 0;
|
$('#chbtn6').attr('class','db cp chatBtn6_1'); this.translit = 0;
|
||||||
}
|
}
|
||||||
},subValSend:'',
|
},subValSend:'',
|
||||||
subSend:function()
|
subSend:function()
|
||||||
@ -409,7 +409,7 @@ var chat = {
|
|||||||
if(top.cb_date[top.cb_select] == 4 || top.cb_date[top.cb_select] == 5) {
|
if(top.cb_date[top.cb_select] == 4 || top.cb_date[top.cb_select] == 5) {
|
||||||
$('#canal'+top.cb_date[top.cb_select]).html('');
|
$('#canal'+top.cb_date[top.cb_select]).html('');
|
||||||
$('#textmsg').focus();
|
$('#textmsg').focus();
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
$('#textmsg').val('');
|
$('#textmsg').val('');
|
||||||
@ -692,7 +692,7 @@ var chat = {
|
|||||||
},
|
},
|
||||||
convert2:function(txt)
|
convert2:function(txt)
|
||||||
{
|
{
|
||||||
var trn = [];
|
var trn = new Array();
|
||||||
trn = txt.split(' ');
|
trn = txt.split(' ');
|
||||||
for(var i=0;i<trn.length;i++) {
|
for(var i=0;i<trn.length;i++) {
|
||||||
if(trn[i].indexOf("//") < 0 && trn[i].indexOf('@') < 0 && trn[i].indexOf("www.") < 0 && !(trn[i].charAt(0)==":" && trn[i].charAt(trn[i].length-1)==":")) {
|
if(trn[i].indexOf("//") < 0 && trn[i].indexOf('@') < 0 && trn[i].indexOf("www.") < 0 && !(trn[i].charAt(0)==":" && trn[i].charAt(trn[i].length-1)==":")) {
|
||||||
|
47
lab.php
47
lab.php
@ -1,7 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Template;
|
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
if ($user['lab'] == 0) {
|
if ($user['lab'] == 0) {
|
||||||
header("Location: index.php");
|
header("Location: index.php");
|
||||||
@ -20,7 +17,7 @@ $u_res = mysql_fetch_array(mysql_query("select * from `lab_user` where `id_user`
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
$room = mysql_fetch_array(mysql_query("SELECT * FROM `lab_rooms` WHERE `id` = '" . mysql_real_escape_string(User::getInstance()->getRoom()) . "';"));
|
$room = mysql_fetch_array(mysql_query("SELECT * FROM `lab_rooms` WHERE `id` = '" . mysql_real_escape_string($user->getRoom()) . "';"));
|
||||||
|
|
||||||
if ($_GET['healall'] == 1) {
|
if ($_GET['healall'] == 1) {
|
||||||
$cost = $_GET['cost'];
|
$cost = $_GET['cost'];
|
||||||
@ -126,7 +123,7 @@ if ($_GET['mobkill'] == 1) {
|
|||||||
}
|
}
|
||||||
$rand_hp1 = rand(1, 10);
|
$rand_hp1 = rand(1, 10);
|
||||||
$rand_hp = $rand_hp1 * $user['level'];
|
$rand_hp = $rand_hp1 * $user['level'];
|
||||||
$bot = mysql_fetch_array(mysql_query("select * from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . User::getInstance()->getRoom() . "' LIMIT 1"));
|
$bot = mysql_fetch_array(mysql_query("select * from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . $user->getRoom() . "' LIMIT 1"));
|
||||||
$hels = $bot['bot_hp'] - $rand_hp;
|
$hels = $bot['bot_hp'] - $rand_hp;
|
||||||
if ($hels < 0) {
|
if ($hels < 0) {
|
||||||
echo "<b>Вы убили моба!</b><br>";
|
echo "<b>Вы убили моба!</b><br>";
|
||||||
@ -137,11 +134,11 @@ if ($_GET['mobkill'] == 1) {
|
|||||||
echo "Вы получили 1 записку!<br>";
|
echo "Вы получили 1 записку!<br>";
|
||||||
Mysql_query("update `lab_user` set `zad" . $u_res['zadanie'] . "_kol`=`zad" . $u_res['zadanie'] . "_kol`+'1' where `id_user`='" . $user['id'] . "'");
|
Mysql_query("update `lab_user` set `zad" . $u_res['zadanie'] . "_kol`=`zad" . $u_res['zadanie'] . "_kol`+'1' where `id_user`='" . $user['id'] . "'");
|
||||||
}
|
}
|
||||||
mysql_query("delete from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . User::getInstance()->getRoom() . "' LIMIT 1");
|
mysql_query("delete from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . $user->getRoom() . "' LIMIT 1");
|
||||||
//если просто убивалка
|
//если просто убивалка
|
||||||
} else {
|
} else {
|
||||||
Mysql_query("update `lab_user` set `zad" . $u_res['zadanie'] . "_kol`=`zad" . $u_res['zadanie'] . "_kol`+'1' where `id_user`='" . $user['id'] . "'");
|
Mysql_query("update `lab_user` set `zad" . $u_res['zadanie'] . "_kol`=`zad" . $u_res['zadanie'] . "_kol`+'1' where `id_user`='" . $user['id'] . "'");
|
||||||
mysql_query("delete from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . User::getInstance()->getRoom() . "' LIMIT 1");
|
mysql_query("delete from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . $user->getRoom() . "' LIMIT 1");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo "Вы отняли у моба -<b>" . $rand_hp . "</b> HP!<br>";
|
echo "Вы отняли у моба -<b>" . $rand_hp . "</b> HP!<br>";
|
||||||
@ -179,7 +176,7 @@ if ($_GET['exit'] && $room['exit'] == 1) {
|
|||||||
|
|
||||||
if ($_GET['get']) {
|
if ($_GET['get']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_inv` WHERE `id` = '" . mysql_real_escape_string($_GET['get']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_inv` WHERE `id` = '" . mysql_real_escape_string($_GET['get']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
|
|
||||||
switch ($data['type']) {
|
switch ($data['type']) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -243,13 +240,13 @@ if ($_GET['get']) {
|
|||||||
if ($_GET['drop']) {
|
if ($_GET['drop']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_tmp` WHERE `id` = '" . mysql_real_escape_string($_GET['drop']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_tmp` WHERE `id` = '" . mysql_real_escape_string($_GET['drop']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id` = '" . mysql_real_escape_string($data['id']) . "' AND `id_user`='" . $user['id'] . "' LIMIT 1;");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id` = '" . mysql_real_escape_string($data['id']) . "' AND `id_user`='" . $user['id'] . "' LIMIT 1;");
|
||||||
mysql_query("INSERT INTO `lab_inv` (`id_room`,`type`,`value`,`id_user`) values ('" . mysql_real_escape_string(User::getInstance()->getRoom()) . "','" . mysql_real_escape_string($data['type']) . "','" . mysql_real_escape_string($data['value']) . "','" . mysql_real_escape_string($user['id']) . "');");
|
mysql_query("INSERT INTO `lab_inv` (`id_room`,`type`,`value`,`id_user`) values ('" . mysql_real_escape_string($user->getRoom()) . "','" . mysql_real_escape_string($data['type']) . "','" . mysql_real_escape_string($data['value']) . "','" . mysql_real_escape_string($user['id']) . "');");
|
||||||
unset($data);
|
unset($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($_GET['nal1']) {
|
if ($_GET['nal1']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal1']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal1']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='1';"));
|
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='1';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='1';");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='1';");
|
||||||
mysql_query("UPDATE `users` SET `money` = `money`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `money` = `money`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
@ -261,7 +258,7 @@ if ($_GET['nal1']) {
|
|||||||
|
|
||||||
if ($_GET['nal2']) {
|
if ($_GET['nal2']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal2']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal2']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='3';"));
|
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='3';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='3';");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='3';");
|
||||||
mysql_query("UPDATE `users` SET `doblest` = `doblest`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `doblest` = `doblest`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
@ -273,7 +270,7 @@ if ($_GET['nal2']) {
|
|||||||
|
|
||||||
if ($_GET['nal3']) {
|
if ($_GET['nal3']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal3']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal3']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='8';"));
|
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='8';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='8';");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='8';");
|
||||||
mysql_query("UPDATE `bank` SET `ekr` = `ekr`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `bank` SET `ekr` = `ekr`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
@ -285,7 +282,7 @@ if ($_GET['nal3']) {
|
|||||||
|
|
||||||
if ($_GET['nal4']) {
|
if ($_GET['nal4']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal4']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal4']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='9';"));
|
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='9';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='9';");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='9';");
|
||||||
mysql_query("UPDATE `users` SET `exp` = `exp`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `exp` = `exp`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
@ -301,28 +298,28 @@ if ($_GET['go']) {
|
|||||||
switch ($_GET['go']) {
|
switch ($_GET['go']) {
|
||||||
case "p1":
|
case "p1":
|
||||||
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p1']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p1']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
User::getInstance()->setRoom($room['p1']);
|
$user->setRoom($room['p1']);
|
||||||
$_SESSION['time'] = time();
|
$_SESSION['time'] = time();
|
||||||
break;
|
break;
|
||||||
case "p2":
|
case "p2":
|
||||||
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p2']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p2']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
User::getInstance()->setRoom($room['p2']);
|
$user->setRoom($room['p2']);
|
||||||
$_SESSION['time'] = time();
|
$_SESSION['time'] = time();
|
||||||
break;
|
break;
|
||||||
case "p3":
|
case "p3":
|
||||||
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p3']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p3']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
User::getInstance()->setRoom($room['p3']);
|
$user->setRoom($room['p3']);
|
||||||
$_SESSION['time'] = time();
|
$_SESSION['time'] = time();
|
||||||
break;
|
break;
|
||||||
case "p4":
|
case "p4":
|
||||||
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p4']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p4']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
User::getInstance()->setRoom($room['p4']);
|
$user->setRoom($room['p4']);
|
||||||
$_SESSION['time'] = time();
|
$_SESSION['time'] = time();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$room = mysql_fetch_array(mysql_query("SELECT * FROM `lab_rooms` WHERE `id` = '" . mysql_real_escape_string(User::getInstance()->getRoom()) . "';"));
|
$room = mysql_fetch_array(mysql_query("SELECT * FROM `lab_rooms` WHERE `id` = '" . mysql_real_escape_string($user->getRoom()) . "';"));
|
||||||
|
|
||||||
if ($user['hp'] <= 0) {
|
if ($user['hp'] <= 0) {
|
||||||
mysql_query("DELETE FROM `lab_trap` WHERE `id_user` = '" . $user['id'] . "'");
|
mysql_query("DELETE FROM `lab_trap` WHERE `id_user` = '" . $user['id'] . "'");
|
||||||
@ -337,12 +334,12 @@ if ($user['hp'] <= 0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$data = mysql_query("SELECT * FROM `lab_inv` WHERE `id_room` = '" . mysql_real_escape_string(User::getInstance()->getRoom()) . "' AND `id_user`='" . $user['id'] . "';");
|
$data = mysql_query("SELECT * FROM `lab_inv` WHERE `id_room` = '" . mysql_real_escape_string($user->getRoom()) . "' AND `id_user`='" . $user['id'] . "';");
|
||||||
$data2 = mysql_query("SELECT * FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "';");
|
$data2 = mysql_query("SELECT * FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
$data3 = mysql_query("SELECT * FROM `users` WHERE `lab` = 1 AND `room` = '" . mysql_real_escape_string($room['id']) . "';");
|
$data3 = mysql_query("SELECT * FROM `users` WHERE `lab` = 1 AND `room` = '" . mysql_real_escape_string($room['id']) . "';");
|
||||||
$data4 = mysql_query("SELECT * FROM `lab_bots` WHERE `id_room` = '" . mysql_real_escape_string($room['id']) . "' AND `id_user`='" . $user['id'] . "';");
|
$data4 = mysql_query("SELECT * FROM `lab_bots` WHERE `id_room` = '" . mysql_real_escape_string($room['id']) . "' AND `id_user`='" . $user['id'] . "';");
|
||||||
|
|
||||||
$roow = mysql_fetch_array(mysql_query("SELECT * FROM `lab_trap` WHERE `id_room` = '" . mysql_real_escape_string(User::getInstance()->getRoom()) . "' AND `id_user`='" . $user['id'] . "';"));
|
$roow = mysql_fetch_array(mysql_query("SELECT * FROM `lab_trap` WHERE `id_room` = '" . mysql_real_escape_string($user->getRoom()) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
|
|
||||||
if ($roow[0]) {
|
if ($roow[0]) {
|
||||||
$msg .= 'В комнате была установлена ловушка...<br>';
|
$msg .= 'В комнате была установлена ловушка...<br>';
|
||||||
@ -369,19 +366,19 @@ if ((time() - $_SESSION['time']) > 3) {
|
|||||||
} else {
|
} else {
|
||||||
$tt = (time() - $_SESSION['time']);
|
$tt = (time() - $_SESSION['time']);
|
||||||
}
|
}
|
||||||
Template::header('lab');
|
\Battles\Template::header('lab');
|
||||||
|
|
||||||
echo Nick::id($user)->battle();
|
echo Nick::id($user)->battle();
|
||||||
echo " <a href=\\";
|
echo " <a href=\"#\" onclick=\"javascript:if (confirm('Желаете выбраться из квестового лабиринта? Теряете все, что здесь нашли.')){ location.href='lab.php?eexit=1';}\">Выйти?</a>";
|
||||||
echo "<table border=0 width=100%><tr><td colspan=4><font color=red>" . $msg;
|
echo "<table border=0 width=100%><tr><td colspan=4><font color=red>" . $msg;
|
||||||
echo "</font>";
|
echo "</font>";
|
||||||
if ($room['exit'] == 1) {
|
if ($room['exit'] == 1) {
|
||||||
echo "<font color=green><b>В комнате есть выход.</b></font> •<a href='?exit=1'>ВЫЙТИ!</a>•<br>";
|
echo "<font color=green><b>В комнате есть выход.</b></font> •<a href='?exit=1'>ВЫЙТИ!</a>•<br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo " <a href=\\" . $u_res['exit_teleport'] . "</b></a> | <a href=\\" . $u_res['svitok_heal'] . "</b></a><br>";
|
echo " <a href=\"#\" onclick=\"javascript:if (confirm('Использовать свиток возрата?')){ location.href='lab.php?svitexit=1';}\">Свиток возрата: <b>" . $u_res['exit_teleport'] . "</b></a> | <a href=\"#\" onclick=\"javascript:if (confirm('Использовать свиток оздоровления?')){ location.href='lab.php?svitheal=1';}\">Свиток оздоровления: <b>" . $u_res['svitok_heal'] . "</b></a><br>";
|
||||||
|
|
||||||
echo " <b>+</b> Бот-атаки: <b>" . $u_res['svitok_kill'] . "</b> <small><a href=\\";
|
echo " <b>+</b> Бот-атаки: <b>" . $u_res['svitok_kill'] . "</b> <small><a href=\"#\" onclick=\"javascript:if (confirm('Купить 1 Бот-атаку за 0.15 кредит?')){ location.href='lab.php?buykill=1';}\">[купить]</a></small>";
|
||||||
echo "<p>";
|
echo "<p>";
|
||||||
|
|
||||||
$log = mysql_query("select * from `lab_heal_log` order by `id` desc LIMIT 1");
|
$log = mysql_query("select * from `lab_heal_log` order by `id` desc LIMIT 1");
|
||||||
@ -392,7 +389,7 @@ for ($i = 0; $i < mysql_num_rows($log); $i++) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "" . $room['name'] . " (" . User::getInstance()->getRoom() . ")</tr>";
|
echo "" . $room['name'] . " (" . $user->getRoom() . ")</tr>";
|
||||||
echo "<tr><td><td><button style='width:50px; height:50px;' class='INPUT' disabled id=b1 onclick='location.href=\"lab.php?go=p1\";'>СЕВЕР</button><td><td rowspan=3 style='height:100px;'> <td rowspan=4 width=30% valign=top style='height:100px;'>";
|
echo "<tr><td><td><button style='width:50px; height:50px;' class='INPUT' disabled id=b1 onclick='location.href=\"lab.php?go=p1\";'>СЕВЕР</button><td><td rowspan=3 style='height:100px;'> <td rowspan=4 width=30% valign=top style='height:100px;'>";
|
||||||
$u_lab = mysql_query("select `login` from `users` where `lab`='1' and `bot`!='1'");
|
$u_lab = mysql_query("select `login` from `users` where `lab`='1' and `bot`!='1'");
|
||||||
$u_lab_kol = mysql_num_rows($u_lab);
|
$u_lab_kol = mysql_num_rows($u_lab);
|
||||||
|
47
lab2.php
47
lab2.php
@ -1,7 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Template;
|
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
if ($user['lab'] == 0) {
|
if ($user['lab'] == 0) {
|
||||||
header("Location: index.php");
|
header("Location: index.php");
|
||||||
@ -18,7 +15,7 @@ $u_res = mysql_fetch_array(mysql_query("select * from `lab_user` where `id_user`
|
|||||||
setTimeout("document.all['b1'].disabled=false;document.all['b2'].disabled=false;document.all['b3'].disabled=false;document.all['b4'].disabled=false;", <?=(3 - $tt)?>000);
|
setTimeout("document.all['b1'].disabled=false;document.all['b2'].disabled=false;document.all['b3'].disabled=false;document.all['b4'].disabled=false;", <?=(3 - $tt)?>000);
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
$room = mysql_fetch_array(mysql_query("SELECT * FROM `lab_rooms` WHERE `id` = '" . mysql_real_escape_string(User::getInstance()->getRoom()) . "';"));
|
$room = mysql_fetch_array(mysql_query("SELECT * FROM `lab_rooms` WHERE `id` = '" . mysql_real_escape_string($user->getRoom()) . "';"));
|
||||||
|
|
||||||
if ($_GET['healall'] == 1) {
|
if ($_GET['healall'] == 1) {
|
||||||
$cost = $_GET['cost'];
|
$cost = $_GET['cost'];
|
||||||
@ -124,7 +121,7 @@ if ($_GET['mobkill'] == 1) {
|
|||||||
}
|
}
|
||||||
$rand_hp1 = rand(1, 10);
|
$rand_hp1 = rand(1, 10);
|
||||||
$rand_hp = $rand_hp1 * $user['level'];
|
$rand_hp = $rand_hp1 * $user['level'];
|
||||||
$bot = mysql_fetch_array(mysql_query("select * from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . User::getInstance()->getRoom() . "' LIMIT 1"));
|
$bot = mysql_fetch_array(mysql_query("select * from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . $user->getRoom() . "' LIMIT 1"));
|
||||||
$hels = $bot['bot_hp'] - $rand_hp;
|
$hels = $bot['bot_hp'] - $rand_hp;
|
||||||
if ($hels < 0) {
|
if ($hels < 0) {
|
||||||
echo "<b>Вы убили моба!</b><br>";
|
echo "<b>Вы убили моба!</b><br>";
|
||||||
@ -135,11 +132,11 @@ if ($_GET['mobkill'] == 1) {
|
|||||||
echo "Вы получили 1 записку!<br>";
|
echo "Вы получили 1 записку!<br>";
|
||||||
Mysql_query("update `lab_user` set `zad" . $u_res['zadanie'] . "_kol`=`zad" . $u_res['zadanie'] . "_kol`+'1' where `id_user`='" . $user['id'] . "'");
|
Mysql_query("update `lab_user` set `zad" . $u_res['zadanie'] . "_kol`=`zad" . $u_res['zadanie'] . "_kol`+'1' where `id_user`='" . $user['id'] . "'");
|
||||||
}
|
}
|
||||||
mysql_query("delete from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . User::getInstance()->getRoom() . "' LIMIT 1");
|
mysql_query("delete from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . $user->getRoom() . "' LIMIT 1");
|
||||||
//если просто убивалка
|
//если просто убивалка
|
||||||
} else {
|
} else {
|
||||||
Mysql_query("update `lab_user` set `zad" . $u_res['zadanie'] . "_kol`=`zad" . $u_res['zadanie'] . "_kol`+'1' where `id_user`='" . $user['id'] . "'");
|
Mysql_query("update `lab_user` set `zad" . $u_res['zadanie'] . "_kol`=`zad" . $u_res['zadanie'] . "_kol`+'1' where `id_user`='" . $user['id'] . "'");
|
||||||
mysql_query("delete from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . User::getInstance()->getRoom() . "' LIMIT 1");
|
mysql_query("delete from `lab_bots` where `id_bot`='" . $id . "' AND `id_user`='" . $user['id'] . "' AND `id_room`='" . $user->getRoom() . "' LIMIT 1");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo "Вы отняли у моба -<b>" . $rand_hp . "</b> HP!<br>";
|
echo "Вы отняли у моба -<b>" . $rand_hp . "</b> HP!<br>";
|
||||||
@ -177,7 +174,7 @@ if ($_GET['exit'] && $room['exit'] == 1) {
|
|||||||
|
|
||||||
if ($_GET['get']) {
|
if ($_GET['get']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_inv` WHERE `id` = '" . mysql_real_escape_string($_GET['get']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_inv` WHERE `id` = '" . mysql_real_escape_string($_GET['get']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
|
|
||||||
switch ($data['type']) {
|
switch ($data['type']) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -241,13 +238,13 @@ if ($_GET['get']) {
|
|||||||
if ($_GET['drop']) {
|
if ($_GET['drop']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_tmp` WHERE `id` = '" . mysql_real_escape_string($_GET['drop']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_tmp` WHERE `id` = '" . mysql_real_escape_string($_GET['drop']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id` = '" . mysql_real_escape_string($data['id']) . "' AND `id_user`='" . $user['id'] . "' LIMIT 1;");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id` = '" . mysql_real_escape_string($data['id']) . "' AND `id_user`='" . $user['id'] . "' LIMIT 1;");
|
||||||
mysql_query("INSERT INTO `lab_inv` (`id_room`,`type`,`value`,`id_user`) values ('" . mysql_real_escape_string(User::getInstance()->getRoom()) . "','" . mysql_real_escape_string($data['type']) . "','" . mysql_real_escape_string($data['value']) . "','" . mysql_real_escape_string($user['id']) . "');");
|
mysql_query("INSERT INTO `lab_inv` (`id_room`,`type`,`value`,`id_user`) values ('" . mysql_real_escape_string($user->getRoom()) . "','" . mysql_real_escape_string($data['type']) . "','" . mysql_real_escape_string($data['value']) . "','" . mysql_real_escape_string($user['id']) . "');");
|
||||||
unset($data);
|
unset($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($_GET['nal1']) {
|
if ($_GET['nal1']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal1']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal1']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='1';"));
|
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='1';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='1';");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='1';");
|
||||||
mysql_query("UPDATE `users` SET `money` = `money`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `money` = `money`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
@ -259,7 +256,7 @@ if ($_GET['nal1']) {
|
|||||||
|
|
||||||
if ($_GET['nal2']) {
|
if ($_GET['nal2']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal2']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal2']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='3';"));
|
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='3';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='3';");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='3';");
|
||||||
mysql_query("UPDATE `users` SET `patriotizm` = `patriotizm`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `patriotizm` = `patriotizm`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
@ -271,7 +268,7 @@ if ($_GET['nal2']) {
|
|||||||
|
|
||||||
if ($_GET['nal3']) {
|
if ($_GET['nal3']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal3']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal3']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='8';"));
|
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='8';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='8';");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='8';");
|
||||||
mysql_query("UPDATE `bank` SET `ekr` = `ekr`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `bank` SET `ekr` = `ekr`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
@ -283,7 +280,7 @@ if ($_GET['nal3']) {
|
|||||||
|
|
||||||
if ($_GET['nal4']) {
|
if ($_GET['nal4']) {
|
||||||
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal4']) . "' AND `id_user`='" . $user['id'] . "';"));
|
$data = mysql_fetch_array(mysql_query("SELECT * FROM `lab_bots` WHERE `id` = '" . mysql_real_escape_string($_GET['nal4']) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
if ($data['id_room'] == User::getInstance()->getRoom()) {
|
if ($data['id_room'] == $user->getRoom()) {
|
||||||
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='9';"));
|
$sum = mysql_fetch_array(mysql_query("SELECT SUM(`value`) FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='9';"));
|
||||||
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='9';");
|
mysql_query("DELETE FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "' AND `type`='9';");
|
||||||
mysql_query("UPDATE `users` SET `exp` = `exp`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `exp` = `exp`+'" . mysql_real_escape_string($sum[0]) . "' WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
@ -299,28 +296,28 @@ if ($_GET['go']) {
|
|||||||
switch ($_GET['go']) {
|
switch ($_GET['go']) {
|
||||||
case "p1":
|
case "p1":
|
||||||
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p1']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p1']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
User::getInstance()->setRoom($room['p1']);
|
$user->setRoom($room['p1']);
|
||||||
$_SESSION['time'] = time();
|
$_SESSION['time'] = time();
|
||||||
break;
|
break;
|
||||||
case "p2":
|
case "p2":
|
||||||
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p2']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p2']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
User::getInstance()->setRoom($room['p2']);
|
$user->setRoom($room['p2']);
|
||||||
$_SESSION['time'] = time();
|
$_SESSION['time'] = time();
|
||||||
break;
|
break;
|
||||||
case "p3":
|
case "p3":
|
||||||
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p3']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p3']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
User::getInstance()->setRoom($room['p3']);
|
$user->setRoom($room['p3']);
|
||||||
$_SESSION['time'] = time();
|
$_SESSION['time'] = time();
|
||||||
break;
|
break;
|
||||||
case "p4":
|
case "p4":
|
||||||
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p4']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
mysql_query("UPDATE `users` SET `room` = '" . mysql_real_escape_string($room['p4']) . "', `fullhptime` = " . time() . " WHERE `id` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
User::getInstance()->setRoom($room['p4']);
|
$user->setRoom($room['p4']);
|
||||||
$_SESSION['time'] = time();
|
$_SESSION['time'] = time();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$room = mysql_fetch_array(mysql_query("SELECT * FROM `lab_rooms` WHERE `id` = '" . mysql_real_escape_string(User::getInstance()->getRoom()) . "';"));
|
$room = mysql_fetch_array(mysql_query("SELECT * FROM `lab_rooms` WHERE `id` = '" . mysql_real_escape_string($user->getRoom()) . "';"));
|
||||||
|
|
||||||
if ($user['hp'] <= 0) {
|
if ($user['hp'] <= 0) {
|
||||||
mysql_query("DELETE FROM `lab_trap` WHERE `id_user` = '" . $user['id'] . "'");
|
mysql_query("DELETE FROM `lab_trap` WHERE `id_user` = '" . $user['id'] . "'");
|
||||||
@ -335,12 +332,12 @@ if ($user['hp'] <= 0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$data = mysql_query("SELECT * FROM `lab_inv` WHERE `id_room` = '" . mysql_real_escape_string(User::getInstance()->getRoom()) . "' AND `id_user`='" . $user['id'] . "';");
|
$data = mysql_query("SELECT * FROM `lab_inv` WHERE `id_room` = '" . mysql_real_escape_string($user->getRoom()) . "' AND `id_user`='" . $user['id'] . "';");
|
||||||
$data2 = mysql_query("SELECT * FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "';");
|
$data2 = mysql_query("SELECT * FROM `lab_tmp` WHERE `id_user` = '" . mysql_real_escape_string($user['id']) . "';");
|
||||||
$data3 = mysql_query("SELECT * FROM `users` WHERE `lab` = 1 AND `room` = '" . mysql_real_escape_string($room['id']) . "';");
|
$data3 = mysql_query("SELECT * FROM `users` WHERE `lab` = 1 AND `room` = '" . mysql_real_escape_string($room['id']) . "';");
|
||||||
$data4 = mysql_query("SELECT * FROM `lab_bots` WHERE `id_room` = '" . mysql_real_escape_string($room['id']) . "' AND `id_user`='" . $user['id'] . "';");
|
$data4 = mysql_query("SELECT * FROM `lab_bots` WHERE `id_room` = '" . mysql_real_escape_string($room['id']) . "' AND `id_user`='" . $user['id'] . "';");
|
||||||
|
|
||||||
$roow = mysql_fetch_array(mysql_query("SELECT * FROM `lab_trap` WHERE `id_room` = '" . mysql_real_escape_string(User::getInstance()->getRoom()) . "' AND `id_user`='" . $user['id'] . "';"));
|
$roow = mysql_fetch_array(mysql_query("SELECT * FROM `lab_trap` WHERE `id_room` = '" . mysql_real_escape_string($user->getRoom()) . "' AND `id_user`='" . $user['id'] . "';"));
|
||||||
|
|
||||||
if ($roow[0]) {
|
if ($roow[0]) {
|
||||||
$msg .= 'В комнате была установлена ловушка...<br>';
|
$msg .= 'В комнате была установлена ловушка...<br>';
|
||||||
@ -367,19 +364,19 @@ if ((time() - $_SESSION['time']) > 3) {
|
|||||||
} else {
|
} else {
|
||||||
$tt = (time() - $_SESSION['time']);
|
$tt = (time() - $_SESSION['time']);
|
||||||
}
|
}
|
||||||
Template::header('lab2');
|
\Battles\Template::header('lab2');
|
||||||
|
|
||||||
echo Nick::id($user)->battle();
|
echo Nick::id($user)->battle();
|
||||||
echo " <a href=\\";
|
echo " <a href=\"#\" onclick=\"javascript:if (confirm('Желаете выбраться из лабиринта? Теряете все что здесь нашли.')){ location.href='lab.php?eexit=1';}\">Выйти?</a>";
|
||||||
echo "<table border=0 width=100%><tr><td colspan=4><font color=red>" . $msg;
|
echo "<table border=0 width=100%><tr><td colspan=4><font color=red>" . $msg;
|
||||||
echo "</font>";
|
echo "</font>";
|
||||||
if ($room['exit'] == 1) {
|
if ($room['exit'] == 1) {
|
||||||
echo "<font color=green><b>В комнате есть выход.</b></font> •<a href='?exit=1'>ВЫЙТИ!</a>•<br>";
|
echo "<font color=green><b>В комнате есть выход.</b></font> •<a href='?exit=1'>ВЫЙТИ!</a>•<br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo " <a href=\\" . $u_res['exit_teleport'] . "</b></a> | <a href=\\" . $u_res['svitok_heal'] . "</b></a><br>";
|
echo " <a href=\"#\" onclick=\"javascript:if (confirm('Использовать свиток возрата?')){ location.href='lab.php?svitexit=1';}\">Св. возрата: <b>" . $u_res['exit_teleport'] . "</b></a> | <a href=\"#\" onclick=\"javascript:if (confirm('Использовать свиток оздоровления?')){ location.href='lab.php?svitheal=1';}\">Св. оздоровления: <b>" . $u_res['svitok_heal'] . "</b></a><br>";
|
||||||
echo "Игровые атаки: <b>" . $u_res['svitok_kill_user'] . "</b>";
|
echo "Игровые атаки: <b>" . $u_res['svitok_kill_user'] . "</b>";
|
||||||
echo " <b>+</b> Бот-атаки: <b>" . $u_res['svitok_kill'] . "</b> <small><a href=\\";
|
echo " <b>+</b> Бот-атаки: <b>" . $u_res['svitok_kill'] . "</b> <small><a href=\"#\" onclick=\"javascript:if (confirm('Купить 1 Бот-атаку за 0.15 кредит?')){ location.href='lab.php?buykill=1';}\">[купить]</a></small>";
|
||||||
echo "<p>";
|
echo "<p>";
|
||||||
|
|
||||||
$log = mysql_query("select * from `lab_heal_log` order by `id` desc LIMIT 1");
|
$log = mysql_query("select * from `lab_heal_log` order by `id` desc LIMIT 1");
|
||||||
@ -390,7 +387,7 @@ for ($i = 0; $i < mysql_num_rows($log); $i++) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "" . $room['name'] . " (" . User::getInstance()->getRoom() . ")</tr>";
|
echo "" . $room['name'] . " (" . $user->getRoom() . ")</tr>";
|
||||||
echo "<tr><td><td><button style='width:50px; height:50px;' class='INPUT' disabled id=b1 onclick='location.href=\"lab.php?go=p1\";'>СЕВЕР</button><td><td rowspan=3 style='height:100px;'> <td rowspan=4 width=30% valign=top style='height:100px;'>";
|
echo "<tr><td><td><button style='width:50px; height:50px;' class='INPUT' disabled id=b1 onclick='location.href=\"lab.php?go=p1\";'>СЕВЕР</button><td><td rowspan=3 style='height:100px;'> <td rowspan=4 width=30% valign=top style='height:100px;'>";
|
||||||
$u_lab = mysql_query("select `login` from `users` where `lab`='1' and `bot`!='1'");
|
$u_lab = mysql_query("select `login` from `users` where `lab`='1' and `bot`!='1'");
|
||||||
$u_lab_kol = mysql_num_rows($u_lab);
|
$u_lab_kol = mysql_num_rows($u_lab);
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
require_once "functions.php";
|
require_once "functions.php";
|
||||||
$errkom = '';
|
$errkom = '';
|
||||||
@ -307,7 +306,7 @@ Template::header('Вход в Лабиринты');
|
|||||||
</div>
|
</div>
|
||||||
<?
|
<?
|
||||||
if (isset($_GET['del_com'])) {
|
if (isset($_GET['del_com'])) {
|
||||||
if (User::getInstance()->getAdmin()) {
|
if ($user->getAdmin()) {
|
||||||
mysql_query('UPDATE `laba_zv` SET `com` = "" WHERE `id` = "' . (int)$_GET['del_com'] . '" LIMIT 1');
|
mysql_query('UPDATE `laba_zv` SET `com` = "" WHERE `id` = "' . (int)$_GET['del_com'] . '" LIMIT 1');
|
||||||
$re = 'Комментарий удалён';
|
$re = 'Комментарий удалён';
|
||||||
} else {
|
} else {
|
||||||
@ -399,7 +398,7 @@ while ($pl = mysql_fetch_array($sp)) {
|
|||||||
}
|
}
|
||||||
$userszv = ltrim($userszv, ', ');
|
$userszv = ltrim($userszv, ', ');
|
||||||
if ($pl['com'] != '') {
|
if ($pl['com'] != '') {
|
||||||
if (User::getInstance()->getAdmin()) {
|
if ($user->getAdmin()) {
|
||||||
$del = ' <a href=\'lab_enter.php?del_com=' . $pl['id'] . '\'>Удалить комментарий</a>';
|
$del = ' <a href=\'lab_enter.php?del_com=' . $pl['id'] . '\'>Удалить комментарий</a>';
|
||||||
} else {
|
} else {
|
||||||
$del = '';
|
$del = '';
|
||||||
|
@ -34,6 +34,8 @@ if ($user['battle'] > 0) {
|
|||||||
echo "Персонаж под защитой от нападений ...";
|
echo "Персонаж под защитой от нападений ...";
|
||||||
} elseif(isset($effect['id'])) {
|
} elseif(isset($effect['id'])) {
|
||||||
echo "Персонаж под защитой от нападений ...";
|
echo "Персонаж под защитой от нападений ...";
|
||||||
|
} elseif ($us['align']==2.99) {
|
||||||
|
echo "Не атакуйте Администратора!";
|
||||||
} elseif ($owntravma['id'] && !$us['battle']) {
|
} elseif ($owntravma['id'] && !$us['battle']) {
|
||||||
echo "Персонаж тяжело травмирован...";
|
echo "Персонаж тяжело травмирован...";
|
||||||
} elseif ($user['klan'] != '' && ($user['klan'] == $us['klan'])) {
|
} elseif ($user['klan'] != '' && ($user['klan'] == $us['klan'])) {
|
||||||
@ -42,6 +44,10 @@ if ($user['battle'] > 0) {
|
|||||||
echo "Персонаж в другой комнате!";
|
echo "Персонаж в другой комнате!";
|
||||||
} elseif ($us['room'] == 31 || $us['room'] == 46 || $us['room'] == 47 || $us['room'] == 48 || $us['room'] == 49 ||$us['room'] == 600 || $us['room'] == 601 || $us['room'] == 45 || $us['room'] ==603 || $us['room'] == 602 || $us['room'] == 43 || $us['room'] ==45) {
|
} elseif ($us['room'] == 31 || $us['room'] == 46 || $us['room'] == 47 || $us['room'] == 48 || $us['room'] == 49 ||$us['room'] == 600 || $us['room'] == 601 || $us['room'] == 45 || $us['room'] ==603 || $us['room'] == 602 || $us['room'] == 43 || $us['room'] ==45) {
|
||||||
echo "Нападения в этой локации запрещены!";
|
echo "Нападения в этой локации запрещены!";
|
||||||
|
} elseif ($us['align'] == 2.9) {
|
||||||
|
echo "Нападение на Ангела строго запрещено!";
|
||||||
|
} elseif ($us['align'] == 4.99) {
|
||||||
|
echo "Нападение на Комментатора запрещено!";
|
||||||
} elseif ($us['level'] < 1) {
|
} elseif ($us['level'] < 1) {
|
||||||
echo "Новички находятся под защитой Мироздателя!";
|
echo "Новички находятся под защитой Мироздателя!";
|
||||||
} elseif ($us['hp'] < $us['maxhp']*0.33 && !$us['battle']) {
|
} elseif ($us['hp'] < $us['maxhp']*0.33 && !$us['battle']) {
|
||||||
|
@ -43,7 +43,7 @@ if ($user['battle'] > 0) {
|
|||||||
echo "<font color=red><b>Этот свиток нельзя встраивать в предметы!<b></font>";
|
echo "<font color=red><b>Этот свиток нельзя встраивать в предметы!<b></font>";
|
||||||
} else {
|
} else {
|
||||||
// встраиваем
|
// встраиваем
|
||||||
\Battles\Models\Inventory::destroyItem($svitok['id'], \Battles\User::getInstance()->getId());
|
\Battles\InventoryItem::destroyItem($svitok['id']);
|
||||||
echo "<font color=red><b>Свиток \"" . $svitok['name'] . "\" удачно встроен в \"" . $dress['name'] . "\"<b></font>";
|
echo "<font color=red><b>Свиток \"" . $svitok['name'] . "\" удачно встроен в \"" . $dress['name'] . "\"<b></font>";
|
||||||
mysql_query("UPDATE `inventory` SET
|
mysql_query("UPDATE `inventory` SET
|
||||||
" . ($dress['nintel'] < $svitok['nintel'] ? "`nintel`='" . $svitok['nintel'] . "'," : "") . "
|
" . ($dress['nintel'] < $svitok['nintel'] ? "`nintel`='" . $svitok['nintel'] . "'," : "") . "
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user