Новый класс UserStats для параметров персонажа. Перенос некоторых проверок в геттеры. Удаление неиспользуемых сеттеров.
This commit is contained in:
+26
-317
@@ -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]);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user