120 lines
4.4 KiB
PHP
120 lines
4.4 KiB
PHP
|
<?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;
|
||
|
}
|
||
|
}
|