Функция используемая один раз объединена с конструктором

This commit is contained in:
lopar 2020-09-16 09:29:43 +03:00
parent 5936fd1d28
commit bdf74b0beb

View File

@ -1,13 +1,9 @@
<?php <?php
// Магия исцеления // Магия восстагновления здоровья
// Все их соберём, вместе соберём...
class Healing class Healing extends Magic
{ {
private $target;
private $magicPower; private $magicPower;
private $status;
private $isPercentage;
/** /**
* Магия лечения. * Магия лечения.
@ -18,11 +14,20 @@ class Healing
public function __construct($target, $power, $isPercentage = null) public function __construct($target, $power, $isPercentage = null)
{ {
$this->magicPower = $power; $this->magicPower = $power;
$this->isPercentage = $isPercentage;
if ($target && $this->isUsable()) { if ($target && $this->isUsable()) {
//TODO: Проверка на то, что магу хватает навыка владения школой магии. //TODO: Проверка на то, что магу хватает навыка владения школой магии.
//IDEA: Можно добавить проверку на интеллект, где при определённом интеллекте шанс на успех становится 95-100%. //IDEA: Можно добавить проверку на интеллект, где при определённом интеллекте шанс на успех становится 95-100%.
return $this->useSpell($isPercentage); if ($isPercentage) {
$healHealthAmount = $this->target->health + $this->target->maxHealth / 100 * $this->magicPower;
} else {
$healHealthAmount = $this->target->health + $this->magicPower;
}
if ($healHealthAmount > $this->target->maxHealth) {
$healHealthAmount = $this->target->maxHealth;
}
db::c()->query('UPDATE users SET health = ?i WHERE id = ?i', $healHealthAmount, $this->target->id);
$targetName = $this->target->login;
return "Вы восстановили ${healHealthAmount} здоровья персонажу ${targetName}.";
} else { } else {
return $this->status; return $this->status;
} }
@ -35,37 +40,11 @@ class Healing
private function isUsable() private function isUsable()
{ {
$caster = new User($_SESSION['uid']); $caster = new User($_SESSION['uid']);
$this->target = new User($this->target); if ($this->target == $_SESSION['uid']) {
if ($caster->battle != $this->target->battle || $caster->room != $this->target->room) { $this->target = $caster;
$this->status = 'Вы не видите цель!';
} elseif ($caster->health < 1) {
$this->status = 'Вы мертвы!';
} elseif ($caster->mana < 1) {
$this->status = 'Недостаточно пыли!';
}
if ($this->status) {
return false;
}
return true;
}
/**
* Применение заклинания.
* @return string
* @throws \Krugozor\Database\Mysql\Exception
*/
private function useSpell()
{
if ($this->isPercentage) {
$healHealthAmount = $this->target->health + $this->target->maxHealth / 100 * $this->magicPower;
} else { } else {
$healHealthAmount = $this->target->health + $this->magicPower; $this->target = new User($this->target);
} }
if ($healHealthAmount > $this->target->maxHealth) { return ($this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster));
$healHealthAmount = $this->target->maxHealth;
}
db::c()->query('UPDATE users SET health = ?i WHERE id = ?i', $healHealthAmount, $this->target->id);
$targetName = $this->target->login;
return "Вы восстановили ${healHealthAmount} здоровья персонажу ${targetName}.";
} }
} }