Клан уехал в класс. НАКОНЕЦ понятно, что хотел от меня линтер с инициализацией переменніх внутри класса.
This commit is contained in:
parent
49c2e7c6d6
commit
cbbbb8a3c6
276
clan.php
276
clan.php
@ -1,227 +1,115 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Battles\Bank;
|
use Battles\Clan;
|
||||||
use Battles\Database\DBPDO;
|
use Battles\GameConfigs;
|
||||||
use Battles\Nick;
|
use Battles\Nick;
|
||||||
use Battles\Rooms;
|
use Battles\Rooms;
|
||||||
use Battles\Template;
|
use Battles\Template;
|
||||||
use Battles\User;
|
|
||||||
|
|
||||||
ob_start("ob_gzhandler");
|
|
||||||
session_start();
|
session_start();
|
||||||
require_once 'functions.php';
|
require_once 'functions.php';
|
||||||
$user = $user ?? new User($_SESSION['uid']);
|
|
||||||
$db = new DBPDO();
|
|
||||||
$clanRow = [];
|
|
||||||
if (!$user->getClan()) {
|
if (!$user->getClan()) {
|
||||||
exit(err('Вы не состоите в клане!'));
|
exit('Ошибка! Вы не состоите в клане!');
|
||||||
}
|
|
||||||
try {
|
|
||||||
$clanRow = $db->fetch('SELECT * FROM `clans` WHERE short_name = ?', $user->getClan());
|
|
||||||
} catch (Exception $e) {
|
|
||||||
echo "<div>MYSQL_ERROR: Таблица clans сломана!</div>";
|
|
||||||
}
|
|
||||||
define('COST_ADD_MEMBER', 100);
|
|
||||||
define('COST_REMOVE_MEMBER', 30);
|
|
||||||
define('CASTLE_REPUTATION_NEEDED', 1000000);
|
|
||||||
define('CASTLE_COST', 25000);
|
|
||||||
$status = null;
|
|
||||||
$action = $_POST['action'] ?? 0;
|
|
||||||
$login = $_POST['login'] ?? 0;
|
|
||||||
$zamok = $_POST['zamok'] ?? null;
|
|
||||||
$kr = $_POST['kr'] ?? null;
|
|
||||||
$kolv = $_POST['kolv'] ?? null;
|
|
||||||
$newClanStatus = $_POST['new_status'] ?? null;
|
|
||||||
$vin = $_POST['vin'] ?? null;
|
|
||||||
$tus = $_POST['tus'] ?? null;
|
|
||||||
$lock = true; // блокировка функций
|
|
||||||
|
|
||||||
if ($zamok && !$lock) {
|
|
||||||
$db->execute('UPDATE `clans` SET `zamok` = 1 WHERE `glava` = ?', $user->getId());
|
|
||||||
$status = "Начат сбор средств на строительство Кланового Замка.";
|
|
||||||
header("Location: clan.php");
|
|
||||||
}
|
|
||||||
if ($kr && $kolv > 0 && !$lock) {
|
|
||||||
if ($user->getMoney() >= $kolv) {
|
|
||||||
$db->execute('UPDATE clans SET zbor = zbor + ? WHERE id = ?', [$kolv, $user->getClan()]);
|
|
||||||
Bank::setWalletMoney($user->setMoney($user->getMoney() - $kolv), $user->getId());
|
|
||||||
header("Location: clan.php");
|
|
||||||
} else {
|
|
||||||
$status = 'Не хватает денег!';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($login && $action == 'add_member') {
|
|
||||||
$sok = $db->fetch('SELECT id, level, clan FROM users WHERE align = 0 AND login = ?', $login);
|
|
||||||
$proverka = $db->fetch('SELECT 1 FROM users_effects WHERE type = 20 AND owner_id = ?', $sok['id']);
|
|
||||||
if (!$proverka) {
|
|
||||||
echo "Нет проверки!";
|
|
||||||
} elseif ($sok['clan']) {
|
|
||||||
echo 'Персонаж уже состоит в клане!';
|
|
||||||
} elseif ($sok['level'] > 0 && $user->getMoney() >= COST_ADD_MEMBER) {
|
|
||||||
Bank::setWalletMoney($user->setMoney($user->getMoney() - COST_ADD_MEMBER), $user->getId());
|
|
||||||
$db->execute('UPDATE users SET clan = ?, align = ? WHERE id = ?', [$clanRow['id'], $clanRow['align'], $sok['id']]);
|
|
||||||
$status = "Персонаж «{$login}» успешно принят в клан.";
|
|
||||||
} else {
|
|
||||||
$status = 'Не хватает денег, или персонажа не существует.';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($login) {
|
Clan::$current = new Clan($user, $db);
|
||||||
$sok = $db->fetch('SELECT id FROM users WHERE clan = ? AND login = ?', [$clanRow['id'], $login]);
|
if ($user->getClan() != Clan::$current->getClanShortName()) {
|
||||||
if ($action == 'remove_member' && $sok['id'] != $clanRow['owner_id'] && $user->getMoney() >= COST_REMOVE_MEMBER) {
|
exit('Ошибка! Клана ' . $user->getClan() . ' не существует!');
|
||||||
Bank::setWalletMoney($user->setMoney($user->getMoney() - COST_REMOVE_MEMBER), $user->getId());
|
|
||||||
$db->execute('UPDATE users SET clan = null, align = 0 WHERE id = ?', $sok['id']);
|
|
||||||
$status = "Персонаж «{$login}» покинул клан.";
|
|
||||||
}
|
|
||||||
if ($action == 'change_owner' && $clanRow['owner_id'] == $user->getId()) {
|
|
||||||
$db->execute('UPDATE clans SET owner_id = ? WHERE id = ?', [$sok['id'], $clanRow['id']]);
|
|
||||||
$clanRow['owner_id'] = $sok['id'];
|
|
||||||
}
|
|
||||||
if ($action == 'edit_status' && !$lock) {
|
|
||||||
if ($sok['id'] != $clanRow['owner_id']) {
|
|
||||||
if ($newClanStatus) {
|
|
||||||
$st = strip_tags(str_replace("<", "<", str_replace(">", ">", $newClanStatus)), "<B><I><U>");
|
|
||||||
$db->execute('UPDATE users SET status = ? WHERE id = ?', [$st, $sok['id']]);
|
|
||||||
$sok['status'] = $st;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$status = 'Главу клана редактировать запрещено!';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$clan_memberlist = $db->fetchAll('SELECT id, login, level, align, (SELECT id FROM online WHERE date >= ? AND id = users.id) AS online FROM users WHERE clan = ? ORDER BY online DESC, login', [time() - 60, $clanRow['short_name']]);
|
|
||||||
Template::header('clan');
|
Template::header('clan');
|
||||||
$clanRow['zamok'] = null; //Замков нет!
|
|
||||||
$clanRow['rating'] = null; //рейтов тоже!
|
|
||||||
$clanRow['zbor'] = null; // И копилки.
|
|
||||||
?>
|
?>
|
||||||
|
<style>
|
||||||
|
.row {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.column {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
width: 60%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
width: 30%;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row:after {
|
||||||
|
content: "";
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<div>
|
<div>
|
||||||
<button onclick="location.href='main.php'">Вернуться</button>
|
<button onclick="location.href='main.php'">Вернуться</button>
|
||||||
<?php if (!empty($status)) {
|
<?php if (!empty($_POST['login']) && !empty($_POST['action'])): ?>
|
||||||
err($status);
|
<span class="error">
|
||||||
} ?>
|
<?php if ($_POST['action'] == 'add_member'): ?>
|
||||||
|
<?= Clan::$current->addMember($_POST['login']) ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($_POST['action'] == 'remove_member'): ?>
|
||||||
|
<?= Clan::$current->removeMember($_POST['login']) ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($_POST['action'] == 'change_owner'): ?>
|
||||||
|
<?= Clan::$current->changeOwner($_POST['login']) ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</span>
|
||||||
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<table style="width: 100%">
|
<div class="row">
|
||||||
<tr>
|
<div class="column left">
|
||||||
<td>
|
<h3><img src="./i/clan/<?= Clan::$current->getClanShortName() ?>.png"
|
||||||
<p style="width: 50%; vertical-align: top;" rowspan=2>
|
alt="<?= Clan::$current->getClanShortName() ?>"><?= Clan::$current->getClanName() ?></h3>
|
||||||
<h3><img src="./i/clan/<?= $clanRow['short_name'] ?>.png"><?= $clanRow['full_name'] ?></h3>
|
|
||||||
|
|
||||||
<?php if ($clanRow['owner_id'] == $user->getId()): ?>
|
<?php if (Clan::$current->getClanOwnerId() === $user->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="Принять в клан">
|
||||||
</span>
|
</span>
|
||||||
(стоимость услуги: <B><?= COST_ADD_MEMBER ?></B> кр.)
|
[стоимость: <?= GameConfigs::CLAN['add_member_cost'] ?>]
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span id="remove_member">
|
<span id="remove_member">
|
||||||
<input type="submit" onclick="use('remove_member')" value="Выгнать из клана">
|
<input type="submit" onclick="use('remove_member')" value="Выгнать из клана">
|
||||||
</span>
|
</span>
|
||||||
(стоимость услуги: <B><?= COST_REMOVE_MEMBER ?></B> кр.)
|
[стоимость: <?= GameConfigs::CLAN['remove_member_cost'] ?>]
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<div>
|
||||||
|
|
||||||
<?php if ($clanRow['owner_id'] == $user->getId()): ?>
|
|
||||||
<?php if ($login && $action == 'edit_status' && $sok['id'] != $clanRow['owner_id']): ?>
|
|
||||||
<form method='post'>
|
|
||||||
<input placeholder='Статус' name='new_status'>
|
|
||||||
<input type="hidden" name="login" value="<?= $login ?>">
|
|
||||||
<?php if ($clanRow['glava'] == $user->getId()): ?>
|
|
||||||
<?php if ($clanRow['owner_id'] == $user->getId()): ?>
|
|
||||||
<br><input type=checkbox name=vin checked> Может принимать/выгонять членов клана
|
|
||||||
<?php else: ?>
|
|
||||||
<br><input type=checkbox name=vin> Может принимать/выгонять членов клана
|
|
||||||
<?php endif; ?>
|
|
||||||
<?php if ($clanRow['owner_id'] == $user->getId()): ?>
|
|
||||||
<br><input type=checkbox name=tus checked> Может менять статус членов клана
|
|
||||||
<?php else: ?>
|
|
||||||
<br><input type=checkbox name=tus> Может менять статус членов клана
|
|
||||||
<?php endif; ?>
|
|
||||||
<?php endif; ?>
|
|
||||||
<button name='action' value='edit_status' type='submit'>Ок</button>
|
|
||||||
<button>×</button>
|
|
||||||
</form>
|
|
||||||
<?php else: ?>
|
|
||||||
<div>
|
|
||||||
<span id="edit_status">
|
|
||||||
<input type="submit" onclick="use('edit_status')" value="Редактировать статус">
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<?php endif; ?>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<?php if ($clanRow['owner_id'] == $user->getId()): ?>
|
|
||||||
<div>
|
|
||||||
<span id="change_owner">
|
<span id="change_owner">
|
||||||
<input type="submit" onclick="use('change_owner')" value="Сменить главу клана">
|
<input type="submit" onclick="use('change_owner')" value="Сменить главу клана">
|
||||||
</span>
|
</span>
|
||||||
(сложить с себя полномочия, назначив <b style="color: teal;">Главой Клана</b> другого персонажа)
|
(сложить с себя полномочия, назначив <strong style="color: teal;">Главой Клана</strong> другого
|
||||||
</div>
|
персонажа)
|
||||||
<?php if (empty($clanRow['zamok'])): ?>
|
</div>
|
||||||
<?php if ($clanRow['rating'] < CASTLE_REPUTATION_NEEDED): ?>
|
<?php endif; ?>
|
||||||
Недостаточно рейтинга для постройки замка. <?= showProgressBar($clanRow['rating'], CASTLE_REPUTATION_NEEDED) ?>
|
</div>
|
||||||
<?php else: ?>
|
<div class="column right">
|
||||||
<form method="post">
|
<table class='zebra' style='width: 100%;'>
|
||||||
<button type="submit" name="zamok" value="zamok">Построить Замок</button>
|
<caption><h3>Соклановцы</h3></caption>
|
||||||
(собрать силами всего клана <?= CASTLE_COST ?> кр.)<BR>
|
<tr>
|
||||||
</form>
|
<th id='c1'>Имя</th>
|
||||||
<?php endif; ?>
|
<th id='c2'>Местонахождение</th>
|
||||||
<?php endif; ?>
|
</tr>
|
||||||
<?php endif; ?>
|
<?php foreach (Clan::$current->getMemberlist() as $member): ?>
|
||||||
|
|
||||||
<?php if ($clanRow['zamok'] == 1): ?>
|
|
||||||
<p>
|
|
||||||
<?php if ($clanRow['zbor'] < CASTLE_COST): ?>
|
|
||||||
Сбор средств на постройку кланового замка:
|
|
||||||
<?= showProgressBar($clanRow['zbor'], CASTLE_COST) ?>
|
|
||||||
<form method="post">
|
|
||||||
<input name="kolv" size="10">
|
|
||||||
<button type="submit" name="kr" value="kr">Пожертвовать</button>
|
|
||||||
</form>
|
|
||||||
<?php else: ?>
|
|
||||||
Средства на постройку кланового замка собраны!
|
|
||||||
<?= showProgressBar(CASTLE_COST, CASTLE_COST) ?>
|
|
||||||
<?php endif; ?>
|
|
||||||
<?php endif; ?>
|
|
||||||
</td>
|
|
||||||
<td style="vertical-align: top;">
|
|
||||||
<h3>Соклановцы</h3>
|
|
||||||
<table class="zebra" style="width: 100%;">
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>Имя</th>
|
<td>
|
||||||
<th>Статус</th>
|
<?php if ($member->clan_owner): ?>
|
||||||
<th>Местонахождение</th>
|
👑
|
||||||
|
<?php endif; ?>
|
||||||
|
<?= Nick::id($member->id)->full() ?>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<em style='font-size: smaller;'><?= $member->room ? Rooms::$roomNames[$member->room] : 'Персонаж не в игре' ?></em>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php endforeach; ?>
|
||||||
$i = 0;
|
</table>
|
||||||
while ($i < count($clan_memberlist)):
|
</div>
|
||||||
if ($clan_memberlist[$i]['id'] == $clanRow['owner_id']) {
|
</div>
|
||||||
$clan_memberlist[$i]['status'] = '<b style="color: #008080;">Глава клана</b>';
|
|
||||||
}
|
|
||||||
if (empty($clan_memberlist[$i]['status'])) {
|
|
||||||
$clan_memberlist[$i]['status'] = 'Боец';
|
|
||||||
}
|
|
||||||
if (empty($clan_memberlist[$i]['online'])) {
|
|
||||||
$rrm = 'Персонаж не в игре';
|
|
||||||
} elseif ($clan_memberlist[$i]['room'] > 500 && $clan_memberlist[$i]['room'] < 561) {
|
|
||||||
$rrm = 'Башня смерти';
|
|
||||||
} else {
|
|
||||||
$rrm = Rooms::$roomNames[$clan_memberlist[$i]['room']];
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<tr>
|
|
||||||
<td><?= Nick::id($clan_memberlist[$i]['id'])->full() ?></td>
|
|
||||||
<td><?= $clan_memberlist[$i]['status'] ?></td>
|
|
||||||
<td><i style="font-size: smaller;"><?= $rrm ?></i></td>
|
|
||||||
</tr>
|
|
||||||
<?php $i++; ?>
|
|
||||||
<?php endwhile; ?>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function use(option) {
|
function use(option) {
|
||||||
document.getElementById(option).innerHTML = "<form method='post'><input placeholder='Имя персонажа' name='login'><button name='action' value='" + option + "' type='submit'>Ок</button><button>×</button></form>";
|
document.getElementById(option).innerHTML = "<form method='post'><input placeholder='Имя персонажа' name='login'><button name='action' value='" + option + "' type='submit'>Ок</button><button>×</button></form>";
|
||||||
|
120
classes/Battles/Clan.php
Normal file
120
classes/Battles/Clan.php
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
# Date: 23.08.2021 (23:05)
|
||||||
|
namespace Battles;
|
||||||
|
|
||||||
|
use Battles\Database\DBPDO;
|
||||||
|
|
||||||
|
class Clan
|
||||||
|
{
|
||||||
|
private DBPDO $db;
|
||||||
|
private User $user;
|
||||||
|
private $clan;
|
||||||
|
public static Clan $current;
|
||||||
|
|
||||||
|
public function __construct(User $user, DBPDO $db)
|
||||||
|
{
|
||||||
|
$this->db = $db;
|
||||||
|
$this->user = $user;
|
||||||
|
$this->clan = $this->db->ofetch('select * from clans where owner_id = ?', $this->user->getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addMember(string $login): string
|
||||||
|
{
|
||||||
|
$error = null;
|
||||||
|
$check = $this->db->ofetch('select id, level, clan from users where login = ?', $login);
|
||||||
|
if (!$this->getProverka($check->id)) {
|
||||||
|
$error .= '<br>Нет проверки!';
|
||||||
|
}
|
||||||
|
if ($check->clan) {
|
||||||
|
$error .= '<br>Персонаж уже состоит в клане!';
|
||||||
|
}
|
||||||
|
if ($check->level < 1) {
|
||||||
|
$error .= '<br>Персонаж 0 уровня не может быть принят!';
|
||||||
|
}
|
||||||
|
if ($this->user->getMoney() < GameConfigs::CLAN['add_member_cost']) {
|
||||||
|
$error .= '<br>Недостаточно денег!';
|
||||||
|
}
|
||||||
|
if ($error) {
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
$this->user->setMoney($this->user->getMoney() - GameConfigs::CLAN['add_member_cost']);
|
||||||
|
$this->user->saveMoney();
|
||||||
|
$this->db->execute('update users set clan = ? where id = ?', [$this->user->getClan(), $check->id]);
|
||||||
|
return "Персонаж «{$login}» успешно принят в клан.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeMember(string $login): string
|
||||||
|
{
|
||||||
|
$error = null;
|
||||||
|
$check = $this->db->ofetch('select id, clan from users where login = ?', $login);
|
||||||
|
if ($this->user->getMoney() < GameConfigs::CLAN['remove_member_cost']) {
|
||||||
|
$error .= '<br>Недостаточно денег!';
|
||||||
|
}
|
||||||
|
if ($check->id === $this->user->getId()) {
|
||||||
|
$error .= '<br>Себя выгонять нельзя!';
|
||||||
|
}
|
||||||
|
if ($check->clan !== $this->user->getClan()) {
|
||||||
|
$error .= '<br>Персонаж не состоит в этом клане!';
|
||||||
|
}
|
||||||
|
if ($error) {
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
$this->user->setMoney($this->user->getMoney() - GameConfigs::CLAN['remove_member_cost']);
|
||||||
|
$this->user->saveMoney();
|
||||||
|
$this->db->execute('update users set clan = null where id = ?', $check->id);
|
||||||
|
return "Персонаж «{$login}» покинул клан.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function changeOwner(string $login): string
|
||||||
|
{
|
||||||
|
$error = null;
|
||||||
|
$check = $this->db->ofetch('select id, clan from users where login = ?', $login);
|
||||||
|
if ($check->id === $this->user->getId()) {
|
||||||
|
$error .= '<br>Самоудовлетворяетесь? ;)';
|
||||||
|
}
|
||||||
|
if ($check->clan !== $this->user->getClan()) {
|
||||||
|
$error .= '<br>Персонаж не состоит в этом клане!';
|
||||||
|
}
|
||||||
|
if ($error) {
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
$this->db->execute('update clans set owner_id = ? where owner_id = ?', [$check->id, $this->user->getId()]);
|
||||||
|
return 'Вы передали управление кланом персонажу «' . $login . '».';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setClanInfo(string $text)
|
||||||
|
{
|
||||||
|
$check = $this->db->ofetch('select id from users where clan = (select short_name from clans where owner_id = ?)', $this->user->getId());
|
||||||
|
if ($check->id !== $this->user->getId()) {
|
||||||
|
return 'Ошибка доступа!';
|
||||||
|
}
|
||||||
|
$this->db->execute('update clans set info = ? where owner_id = ?', [$text, $check->id]);
|
||||||
|
return 'Описание клана изменено!';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMemberlist(): array
|
||||||
|
{
|
||||||
|
$query = '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';
|
||||||
|
return $this->db->ofetchAll($query, $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
|
||||||
|
{
|
||||||
|
return $this->clan->owner_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClanName(): ?string
|
||||||
|
{
|
||||||
|
return $this->clan->full_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClanShortName(): ?string
|
||||||
|
{
|
||||||
|
return $this->clan->short_name;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user