diff --git a/classes/Battles/User.php b/classes/Battles/User.php index bb5a208..9f7f34c 100644 --- a/classes/Battles/User.php +++ b/classes/Battles/User.php @@ -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 [+]', $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]); } } \ No newline at end of file diff --git a/classes/Battles/UserInfo.php b/classes/Battles/UserInfo.php index 4892f7e..53229a9 100644 --- a/classes/Battles/UserInfo.php +++ b/classes/Battles/UserInfo.php @@ -3,7 +3,7 @@ namespace Battles; use Battles\Models\EffectsModel; use Exceptions\GameException; -class UserInfo extends User +class UserInfo extends UserStats { use Rooms; //Статусы того, кто смотрит на информацию. diff --git a/classes/Battles/UserStats.php b/classes/Battles/UserStats.php new file mode 100644 index 0000000..3c1079c --- /dev/null +++ b/classes/Battles/UserStats.php @@ -0,0 +1,221 @@ +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 + */ + public function getStat($stat_name, $isMainWindow = 0): string + { + if (!in_array($stat_name, ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'])) { + return self::ERROR_STAT_UNKNOWN; + } + if ($this->free_stat_points && $isMainWindow && $this->$stat_name < self::STAT_MAXIMUM_AMOUNT) { + $this->$stat_name .= " [+]"; + } + return $this->$stat_name; + + } + + /** + * Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков + * статов. + * + * @param string $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', + * 'endurance', 'intelligence', 'wisdom'. + * + * @throws GameException + */ + public function addOnePointToStat(string $stat_name) + { + if (!in_array($stat_name, ['strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'])) { + throw new GameException(self::ERROR_STAT_UNKNOWN); + } + if ($this->free_stat_points <= 0 || $this->$stat_name >= self::STAT_MAXIMUM_AMOUNT) { + throw new GameException(self::ERROR_STAT_IS_MAXIMUM); + } else { + $query = "UPDATE users SET {$stat_name} = {$stat_name} + 1, free_stat_points = free_stat_points - 1 WHERE id = ?"; + self::$db->execute($query, $this->id); + } + } + + /** + * @return mixed + */ + public function getStrength() + { + return $this->strength; + } + + /** + * @return mixed + */ + public function getDexterity() + { + return $this->dexterity; + } + + /** + * @return mixed + */ + public function getIntuition() + { + return $this->intuition; + } + + /** + * @return mixed + */ + public function getEndurance() + { + return $this->endurance; + } + + /** + * @return mixed + */ + public function getIntelligence() + { + return $this->intelligence; + } + + /** + * @return mixed + */ + public function getWisdom() + { + return $this->wisdom; + } + + /** + * @return mixed + */ + public function getHealth() + { + return $this->health; + } + + /** + * @return mixed + */ + public function getMana() + { + return $this->mana; + } + + /** + * @return mixed + */ + public function getFreeStatPoints() + { + return $this->free_stat_points; + } + + /** + * @return float + */ + public function getMaxHealth(): float + { + return $this->maxHealth; + } + + /** + * @return float + */ + public function getMaxMana(): float + { + return $this->maxMana; + } + + /** + * @return int + */ + public function getMinDamage(): int + { + return $this->minDamage; + } + + /** + * @return int + */ + public function getMaxDamage(): int + { + return $this->maxDamage; + } + + /** + * @return int + */ + public function getHeadArmor(): int + { + return $this->headArmor; + } + + /** + * @return int + */ + public function getChestArmor(): int + { + return $this->chestArmor; + } + + /** + * @return int + */ + public function getLegArmor(): int + { + return $this->legArmor; + } + + +} \ No newline at end of file diff --git a/inf.php b/inf.php index 05509f6..2f92f1b 100644 --- a/inf.php +++ b/inf.php @@ -1,21 +1,14 @@ id); +$userInfo = new \Battles\UserInfo(urldecode($_SERVER['QUERY_STRING'])); +$presentsModel = new \Battles\Models\PresentsModel($userInfo->getId()); $presentsList = $presentsModel->getAllPresents(); $userInfo->watcher_id = $_SESSION['uid'] ?? null; -\Battles\Template::header('Информация о ' . $userInfo->login); -if (!$userInfo->id) { - echo sprintf('Ошибка: персонаж %s не найден...
', $login); +\Battles\Template::header('Информация о ' . $userInfo->getLogin()); +if (!$userInfo->getId()) { + echo sprintf('Ошибка: персонаж %s не найден...', urldecode($_SERVER['QUERY_STRING'])); exit; } -try { - $userInfo->showUserInfo(); - -} catch (Exception $e_showUserInfo) { - echo "