2021-08-23 20:23:38 +00:00
< ? 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 ;
2021-08-25 01:44:36 +00:00
public function __construct ()
2021-08-23 20:23:38 +00:00
{
2021-08-25 01:44:36 +00:00
$this -> db = DBPDO :: $db ;
$this -> user = User :: $current ;
2021-08-23 20:23:38 +00:00
$this -> clan = $this -> db -> ofetch ( 'select * from clans where owner_id = ?' , $this -> user -> getId ());
}
public function addMember ( string $login ) : string
{
2021-08-25 01:44:36 +00:00
$target = new User ( $login );
2021-08-23 20:23:38 +00:00
$error = null ;
2021-08-25 01:44:36 +00:00
if ( ! $this -> getProverka ( $target -> getId ())) {
2021-08-23 20:23:38 +00:00
$error .= '<br>Нет проверки!' ;
}
2021-08-25 01:44:36 +00:00
if ( $target -> getClan ()) {
2021-08-23 20:23:38 +00:00
$error .= '<br>Персонаж уже состоит в клане!' ;
}
2021-08-25 01:44:36 +00:00
if ( $target -> getLevel () < 1 ) {
2021-08-23 20:23:38 +00:00
$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 ();
2021-08-25 01:44:36 +00:00
$target -> setClan ( $this -> user -> getClan ());
2021-08-23 20:23:38 +00:00
return " Персонаж « { $login } » успешно принят в клан. " ;
}
public function removeMember ( string $login ) : string
{
2021-08-25 01:44:36 +00:00
$target = new User ( $login );
2021-08-23 20:23:38 +00:00
$error = null ;
if ( $this -> user -> getMoney () < GameConfigs :: CLAN [ 'remove_member_cost' ]) {
$error .= '<br>Недостаточно денег!' ;
}
2021-08-25 01:44:36 +00:00
if ( $target -> getId () === $this -> user -> getId ()) {
2021-08-23 20:23:38 +00:00
$error .= '<br>Себя выгонять нельзя!' ;
}
2021-08-25 01:44:36 +00:00
if ( $target -> getClan () !== $this -> user -> getClan ()) {
2021-08-23 20:23:38 +00:00
$error .= '<br>Персонаж не состоит в этом клане!' ;
}
if ( $error ) {
return $error ;
}
$this -> user -> setMoney ( $this -> user -> getMoney () - GameConfigs :: CLAN [ 'remove_member_cost' ]);
$this -> user -> saveMoney ();
2021-08-25 01:44:36 +00:00
$target -> setClan ( null );
2021-08-23 20:23:38 +00:00
return " Персонаж « { $login } » покинул клан. " ;
}
public function changeOwner ( string $login ) : string
{
2021-08-25 01:44:36 +00:00
$target = new User ( $login );
2021-08-23 20:23:38 +00:00
$error = null ;
2021-08-25 01:44:36 +00:00
if ( $target -> getId () === $this -> user -> getId ()) {
2021-08-23 20:23:38 +00:00
$error .= '<br>Самоудовлетворяетесь? ;)' ;
}
2021-08-25 01:44:36 +00:00
if ( $target -> getClan () !== $this -> user -> getClan ()) {
2021-08-23 20:23:38 +00:00
$error .= '<br>Персонаж не состоит в этом клане!' ;
}
if ( $error ) {
return $error ;
}
2021-08-25 01:44:36 +00:00
$this -> db -> execute ( 'update clans set owner_id = ? where owner_id = ?' , [ $target -> getId (), $this -> user -> getId ()]);
2021-08-23 20:23:38 +00:00
return 'Вы передали управление кланом персонажу «' . $login . '».' ;
}
2021-08-25 01:44:36 +00:00
public function setClanInfo ( string $text ) : string
2021-08-23 20:23:38 +00:00
{
$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
{
2021-08-25 01:44:36 +00:00
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 ());
2021-08-23 20:23:38 +00:00
}
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 ;
}
}