battles/classes/Battles/User.php

463 lines
9.1 KiB
PHP

<?php
namespace Battles;
use Battles\Database\DBPDO;
class User
{
protected $id = 0;
protected $login = '<em>Некто</em>';
protected $pass;
protected $email = '<em>неизвестно</em>';
protected $realname;
protected $borndate;
protected $info;
protected $level;
protected $align;
protected $clan;
protected $money;
protected $ip = 0;
protected $admin = 0;
protected $enter_game;
protected $room;
protected $block;
protected $shadow;
// Пока несуществующие, для совместимости.
protected $experience = 200;
protected $battle = 0;
protected $in_tower = 0; // Скорее башню похороним чем запустим...
protected $zayavka = 0;
protected static $db;
public const INFO_CHAR_LIMIT = 1500;
public function __construct($user)
{
self::$db = DBPDO::INIT();
$user_query = self::$db->fetch('SELECT * FROM users WHERE id = ? OR login = ?', [$user, $user]);
foreach ($this as $key => $value) {
if (isset($user_query[$key])) {
$this->$key = $user_query[$key];
}
}
}
protected function showStarSign(): ?string
{
/*
* 1 aries
* 2 taurus
* 3 gemini
* 4 cancer
* 5 leo
* 6 virgo
* 7 libra
* 8 scorpio
* 9 sagittarios
* 10 capricorn
* 11 aquarius
* 12 pisches
*/
$zodiac = [
356 => "10",
326 => "09",
296 => "08",
266 => "07",
235 => "06",
203 => "05",
172 => "04",
140 => "03",
111 => "02",
78 => "01",
51 => "12",
20 => "11",
0 => "10",
];
$dayOfYear = date("z", strtotime($this->borndate));
$isLeapYear = date("L", strtotime($this->borndate)); //Высокосный?
if ($isLeapYear && $dayOfYear > 59) {
--$dayOfYear;
}
foreach ($zodiac as $day => $sign) {
if ($dayOfYear > $day) {
break;
}
}
return $sign ?? null;
}
/**
* @param int $userId
* @param int $type
* @param string $name
* @param int $time
* @param string|null $json_modifiers_list (str, dex, int, end, intel, wis).
* @return bool
*/
public static function setUserEffect(int $userId, int $type, string $name, int $time, string $json_modifiers_list = null): bool
{
$mods = json_decode($json_modifiers_list);
return self::$db->execute('INSERT INTO users_effects (owner_id, type, name, remaining_time, mod_strength, mod_dexterity, mod_intuition, mod_endurance, mod_intellect, 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 removeUserEffect(int $userId, int $type): bool
{
if (self::$db->fetch('SELECT 1 FROM users_effects WHERE owner_id = ? AND type = ?', [$userId, $type])) {
self::$db->execute('DELETE FROM users_effects WHERE owner_id = ? AND type = ?', [$userId, $type]);
}
return false;
}
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @return string
*/
public function getLogin(): string
{
return $this->login;
}
/**
* @param string $login
*/
public function setLogin(string $login): void
{
$this->login = $login;
}
/**
* @return mixed
*/
public function getPass()
{
return $this->pass;
}
/**
* @param mixed $pass
*/
public function setPass($pass): void
{
$this->pass = $pass;
}
public function savePass()
{
self::$db->execute('UPDATE users SET pass = ? WHERE id = ?', [$this->pass, $this->id]);
}
/**
* @return string
*/
public function getEmail(): string
{
return $this->email;
}
/**
* @param string $email
*/
public function setEmail(string $email): void
{
$this->email = $email;
}
/**
* @return mixed
*/
public function getRealname()
{
return $this->realname;
}
/**
* @param mixed $realname
*/
public function setRealname($realname): void
{
$this->realname = $realname;
}
/**
* @return mixed
*/
public function getBorndate()
{
return $this->borndate;
}
/**
* @param mixed $borndate
*/
public function setBorndate($borndate): void
{
$this->borndate = $borndate;
}
/**
* @return mixed
*/
public function getInfo()
{
return $this->info;
}
/**
* @param mixed $info
*/
public function setInfo($info): void
{
$this->info = $info;
}
/**
* @return int
*/
public function getLevel(): int
{
return $this->level;
}
/**
* @param int $level
*/
public function setLevel(int $level): void
{
$this->level = $level;
}
/**
* @return int
*/
public function getAlign(): int
{
return $this->align;
}
/**
* @param int $align
*/
public function setAlign(int $align): void
{
$this->align = $align;
}
/**
* @return string
*/
public function getClan(): string
{
return $this->clan;
}
/**
* @param int $clan
*/
public function setClan(string $clan): void
{
$this->clan = $clan;
}
/**
* @return int
*/
public function getMoney(): int
{
return $this->money;
}
/**
* @param int $money
*/
public function setMoney(int $money): void
{
$this->money = $money;
}
/**
* @return mixed
*/
public function getIp()
{
return $this->ip;
}
/**
* @param mixed $ip
*/
public function setIp($ip): void
{
$this->ip = $ip;
}
/**
* @return int
*/
public function getAdmin(): int
{
return $this->admin;
}
/**
* @return mixed
*/
public function getEnterGame()
{
return $this->enter_game;
}
/**
* @param mixed $enter_game
*/
public function setEnterGame($enter_game): void
{
$this->enter_game = $enter_game;
}
/**
* @return mixed
*/
public function getRoom()
{
return $this->room;
}
/**
* @param mixed $room
*/
public function setRoom($room): void
{
$this->room = $room;
}
/**
* @return mixed
*/
public function getBlock()
{
return $this->block;
}
/**
* @param mixed $block
*/
public function setBlock($block): void
{
$this->block = $block;
}
/**
* @return mixed
*/
public function getShadow()
{
return $this->shadow;
}
/**
* @param mixed $shadow
*/
public function setShadow($shadow): void
{
$shadows = [
'm01', 'm02', 'm03', 'm04', 'm05', 'm06', 'm07', 'm08', 'm09', 'm10',
'f01', 'f02', 'f03', 'f04', 'f05', 'f06', 'f07', 'f08', 'f09', 'f10',
];
if (in_array($shadow, $shadows) && $this->getShadow() == '0.png') {
$this->shadow = $shadow . '.png';
}
}
public function saveShadow()
{
self::$db->execute('UPDATE users SET shadow = ? WHERE id = ?', [$this->getShadow(), $this->getId()]);
}
/**
* @return int
*/
public function getExperience(): int
{
return $this->experience;
}
/**
* @param int $experience
*/
public function setExperience(int $experience): void
{
$this->experience = $experience;
}
/**
* @return int
*/
public function getBattle(): int
{
return $this->battle;
}
/**
* @param int $battle
*/
public function setBattle(int $battle): void
{
$this->battle = $battle;
}
/**
* @return int
*/
public function getInTower(): int
{
return $this->in_tower;
}
/**
* @param int $in_tower
*/
public function setInTower(int $in_tower): void
{
$this->in_tower = $in_tower;
}
/**
* @return int
*/
public function getZayavka(): int
{
return $this->zayavka;
}
/**
* @param int $zayavka
*/
public function setZayavka(int $zayavka): void
{
$this->zayavka = $zayavka;
}
public function saveAnketa()
{
self::$db->execute('UPDATE users SET realname = ?, info = ? WHERE id = ?', [$this->realname, $this->info, $this->id]);
}
public function setOnline()
{
self::$db->execute('update online set real_time = ? where user_id = ?', [time(), $this->getId()]);
}
}