Новый класс UserStats для параметров персонажа. Перенос некоторых проверок в геттеры. Удаление неиспользуемых сеттеров.

This commit is contained in:
lopar
2021-03-10 23:38:14 +02:00
parent eacde76543
commit 0a07d53be7
6 changed files with 285 additions and 405 deletions
+26 -317
View File
@@ -14,45 +14,23 @@ class User
protected $realname;
protected $borndate;
protected $info;
protected $level = 0;
protected $align = 0;
protected $level;
protected $align;
protected $clan;
protected $money = 0;
protected $strength = 0;
protected $dexterity = 0;
protected $intuition = 0;
protected $endurance = 0;
protected $intelligence = 0;
protected $wisdom = 0;
protected $health;
protected $mana;
protected $ip;
protected $session_id;
protected $money;
protected $ip = 0;
protected $admin = 0;
protected $enter_game;
protected $room;
protected $block;
protected $shadow;
// Удар кулаком всегда 1-2.
protected $minDamage = 1;
protected $maxDamage = 2;
//Броня без предметов не существует.
protected $headArmor = 0;
protected $chestArmor = 0;
protected $legArmor = 0;
protected $free_stat_points = 0;
private const STAT_MAXIMUM_AMOUNT = 40;
private const ERROR_STAT_IS_MAXIMUM = 'Ошибка: Параметр достиг своего лимита!';
private const ERROR_STAT_UNKNOWN = 'Ошибка: Неизвестный параметр!';
// Пока несуществующие, для совместимости.
protected $married = 'Someone или нет.';
protected $experience = 200;
protected $battle = 0;
protected $in_tower = 0; // Скорее башню похороним чем запустим...
protected $zayavka = 0;
// Динамически рассчитываемые
protected $maxHealth = 5;
protected $maxMana = 5;
protected static $db;
public const INFO_CHAR_LIMIT = 1500;
@@ -66,51 +44,8 @@ class User
$this->$key = $user_query[$key];
}
}
$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));
}
/**
* Отдаёт информацию о базовом(!) стате.
* @param $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'.
* @param int $isMainWindow - переключатель "главного окна". Если включить, дополнительно будет показывать ссылку на повышение стата на 1, при условии наличия свободных очков статов.
* @return string
* @throws GameException
*/
public function getStat($stat_name, $isMainWindow = 0):string
{
$allowed = ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'];
if (in_array($stat_name, $allowed)) {
if ($this->free_stat_points && $isMainWindow && $this->$stat_name < self::STAT_MAXIMUM_AMOUNT) {
return sprintf('%s <a href="/main.php?edit=%s&ups=%s">[+]</a>', $this->$stat_name, mt_rand(), $stat_name);
} else {
return $this->$stat_name;
}
} else {
throw new GameException(self::ERROR_STAT_UNKNOWN);
}
}
/**
* Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков статов.
* @param string $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'.
* @throws GameException
*/
public function addOnePointToStat(string $stat_name)
{
$allowed = ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'];
if (in_array($stat_name, $allowed)) {
if ($this->free_stat_points > 0 && $this->$stat_name <= self::STAT_MAXIMUM_AMOUNT) {
$query = "UPDATE users SET {$stat_name} = {$stat_name} + 1, free_stat_points = free_stat_points - 1 WHERE id = ?";
self::$db->execute($query,$this->id);
} else {
throw new GameException(self::ERROR_STAT_IS_MAXIMUM);
}
} else {
throw new GameException(self::ERROR_STAT_UNKNOWN);
}
}
protected function showStarSign(): ?string
{
@@ -156,22 +91,13 @@ class User
return $sign ?? null;
}
public function getHealth(): string
public static function setUserEffect(int $userId, int $type, string $name, int $time): bool
{
return $this->health . '/' . $this->maxHealth;
return self::$db->execute('INSERT INTO users_effects (owner_id, type, name, remaining_time) VALUES (?,?,?,?)', [$userId, $type, $name, $time]);
}
public function getMana(): string
{
return $this->mana . '/' . $this->maxMana;
}
public static function setUserEffect(int $userId, int $type, string $name, int $time):bool
{
return self::$db->execute('INSERT INTO users_effects (owner_id, type, name, remaining_time) VALUES (?,?,?,?)',[$userId, $type, $name, $time]);
}
public static function removeUserEffect(int $userId, int $type):bool
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]);
@@ -187,14 +113,6 @@ class User
return $this->id;
}
/**
* @param int $id
*/
public function setId(int $id): void
{
$this->id = $id;
}
/**
* @return string
*/
@@ -227,6 +145,11 @@ class User
$this->pass = $pass;
}
public function savePass()
{
self::$db->execute('UPDATE users SET pass = ? WHERE id = ?', [$this->pass, $this->id]);
}
/**
* @return string
*/
@@ -355,101 +278,6 @@ class User
$this->money = $money;
}
/**
* @return int
*/
public function getStrength(): int
{
return $this->strength;
}
/**
* @param int $strength
*/
public function setStrength(int $strength): void
{
$this->strength = $strength;
}
/**
* @return int
*/
public function getDexterity(): int
{
return $this->dexterity;
}
/**
* @param int $dexterity
*/
public function setDexterity(int $dexterity): void
{
$this->dexterity = $dexterity;
}
/**
* @return int
*/
public function getIntuition(): int
{
return $this->intuition;
}
/**
* @param int $intuition
*/
public function setIntuition(int $intuition): void
{
$this->intuition = $intuition;
}
/**
* @return int
*/
public function getEndurance(): int
{
return $this->endurance;
}
/**
* @param int $endurance
*/
public function setEndurance(int $endurance): void
{
$this->endurance = $endurance;
}
/**
* @return int
*/
public function getIntelligence(): int
{
return $this->intelligence;
}
/**
* @param int $intelligence
*/
public function setIntelligence(int $intelligence): void
{
$this->intelligence = $intelligence;
}
/**
* @return int
*/
public function getWisdom(): int
{
return $this->wisdom;
}
/**
* @param int $wisdom
*/
public function setWisdom(int $wisdom): void
{
$this->wisdom = $wisdom;
}
/**
* @return mixed
@@ -467,21 +295,6 @@ class User
$this->ip = $ip;
}
/**
* @return mixed
*/
public function getSessionId()
{
return $this->session_id;
}
/**
* @param mixed $session_id
*/
public function setSessionId($session_id): void
{
$this->session_id = $session_id;
}
/**
* @return int
@@ -491,14 +304,6 @@ class User
return $this->admin;
}
/**
* @param int $admin
*/
public function setAdmin(int $admin): void
{
$this->admin = $admin;
}
/**
* @return mixed
*/
@@ -560,103 +365,18 @@ class User
*/
public function setShadow($shadow): void
{
$this->shadow = $shadow;
$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';
}
}
/**
* @return int
*/
public function getMinDamage(): int
public function saveShadow()
{
return $this->minDamage;
}
/**
* @return int
*/
public function getMaxDamage(): int
{
return $this->maxDamage;
}
/**
* @return int
*/
public function getHeadArmor(): int
{
return $this->headArmor;
}
/**
* @param int $headArmor
*/
public function setHeadArmor(int $headArmor): void
{
$this->headArmor = $headArmor;
}
/**
* @return int
*/
public function getChestArmor(): int
{
return $this->chestArmor;
}
/**
* @param int $chestArmor
*/
public function setChestArmor(int $chestArmor): void
{
$this->chestArmor = $chestArmor;
}
/**
* @return int
*/
public function getLegArmor(): int
{
return $this->legArmor;
}
/**
* @param int $legArmor
*/
public function setLegArmor(int $legArmor): void
{
$this->legArmor = $legArmor;
}
/**
* @return int
*/
public function getFreeStatPoints(): int
{
return $this->free_stat_points;
}
/**
* @param int $free_stat_points
*/
public function setFreeStatPoints(int $free_stat_points): void
{
$this->free_stat_points = $free_stat_points;
}
/**
* @return string
*/
public function getMarried(): string
{
return $this->married;
}
/**
* @param string $married
*/
public function setMarried(string $married): void
{
$this->married = $married;
self::$db->execute('UPDATE users SET shadow = ? WHERE id = ?', [$this->getShadow(), $this->getId()]);
}
/**
@@ -723,20 +443,9 @@ class User
$this->zayavka = $zayavka;
}
/**
* @return float|int
*/
public function getMaxHealth()
public function saveAnketa()
{
return $this->maxHealth;
}
/**
* @return float|int
*/
public function getMaxMana()
{
return $this->maxMana;
self::$db->execute('UPDATE users SET realname = ?, info = ? WHERE id = ?', [$this->realname, $this->info, $this->id]);
}
}