2019-01-11 16:02:57 +00:00
|
|
|
|
<?php
|
2020-10-28 20:21:08 +00:00
|
|
|
|
namespace Battles;
|
2019-01-11 19:16:39 +00:00
|
|
|
|
abstract class Item
|
2019-01-11 16:02:57 +00:00
|
|
|
|
{
|
2020-07-22 14:04:15 +00:00
|
|
|
|
protected $item_id;
|
|
|
|
|
protected $name;
|
|
|
|
|
protected $item_type;
|
|
|
|
|
protected $durability;
|
|
|
|
|
protected $price;
|
|
|
|
|
protected $need_strength;
|
|
|
|
|
protected $need_dexterity;
|
|
|
|
|
protected $need_intuition;
|
|
|
|
|
protected $need_endurance;
|
|
|
|
|
protected $need_intelligence;
|
|
|
|
|
protected $need_wisdom;
|
|
|
|
|
protected $add_strength;
|
|
|
|
|
protected $add_dexterity;
|
|
|
|
|
protected $add_intuition;
|
|
|
|
|
protected $add_endurance;
|
|
|
|
|
protected $add_intelligence;
|
|
|
|
|
protected $add_wisdom;
|
|
|
|
|
protected $add_accuracy;
|
|
|
|
|
protected $add_evasion;
|
|
|
|
|
protected $add_criticals;
|
|
|
|
|
protected $add_min_physical_damage;
|
|
|
|
|
protected $add_max_physical_damage;
|
|
|
|
|
protected $weight;
|
|
|
|
|
protected $image;
|
|
|
|
|
public const ITEM_TYPES_ALLOWED_IN_SLOTS = [1,2,3,4,5,6,7,8,9,10,11,12];
|
|
|
|
|
public const ITEM_TYPE_HELMET = 1;
|
|
|
|
|
public const ITEM_TYPE_ARMOR = 2;
|
2021-01-25 18:02:23 +00:00
|
|
|
|
public const ITEM_TYPE_LEGS = 3;
|
|
|
|
|
public const ITEM_TYPE_BOOTS = 4;
|
|
|
|
|
public const ITEM_TYPE_GLOVES = 5;
|
|
|
|
|
public const ITEM_TYPE_WEAPON = 6;
|
|
|
|
|
public const ITEM_TYPE_SHIELD = 7;
|
|
|
|
|
public const ITEM_TYPE_BELT = 8;
|
2020-07-22 14:04:15 +00:00
|
|
|
|
public const ITEM_TYPE_RING = 9;
|
2021-01-25 18:02:23 +00:00
|
|
|
|
public const ITEM_TYPE_AMULET = 10;
|
|
|
|
|
public const ITEM_TYPE_CONSUMABLE = 20;
|
2021-01-28 21:05:34 +00:00
|
|
|
|
public const ITEM_TYPE_OTHER = 50;
|
|
|
|
|
public const ITEM_TYPE_TRASH = 100;
|
|
|
|
|
private $typename;
|
2019-01-14 21:54:20 +00:00
|
|
|
|
|
2019-01-11 16:26:33 +00:00
|
|
|
|
/**
|
|
|
|
|
* Item constructor.
|
2019-02-15 11:38:30 +00:00
|
|
|
|
*
|
2019-01-11 16:26:33 +00:00
|
|
|
|
* @param $row
|
|
|
|
|
*/
|
2019-01-11 16:02:57 +00:00
|
|
|
|
public function __construct($row)
|
|
|
|
|
{
|
2021-03-10 21:20:56 +00:00
|
|
|
|
if (is_array($row)) {
|
|
|
|
|
foreach ($this as $key => $value) {
|
|
|
|
|
if (isset($row[$key])) {
|
|
|
|
|
$this->$key = $row[$key];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} elseif (is_object($row)) {
|
|
|
|
|
foreach ($this as $name => $value) {
|
|
|
|
|
if (isset($row->$name)) {
|
|
|
|
|
$this->$name = $row->$name;
|
|
|
|
|
}
|
2019-01-14 21:31:59 +00:00
|
|
|
|
}
|
2019-01-14 13:46:20 +00:00
|
|
|
|
}
|
2019-01-14 14:18:04 +00:00
|
|
|
|
|
2020-07-21 15:03:46 +00:00
|
|
|
|
switch ($this->item_type) {
|
2020-07-22 14:04:15 +00:00
|
|
|
|
case self::ITEM_TYPE_HELMET:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Шлем';
|
2019-01-12 21:35:48 +00:00
|
|
|
|
break;
|
2020-07-22 14:04:15 +00:00
|
|
|
|
case self::ITEM_TYPE_ARMOR:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Броня';
|
2019-01-12 21:35:48 +00:00
|
|
|
|
break;
|
2020-07-22 14:04:15 +00:00
|
|
|
|
case self::ITEM_TYPE_LEGS:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Поножи';
|
2019-01-12 21:35:48 +00:00
|
|
|
|
break;
|
2020-07-22 14:04:15 +00:00
|
|
|
|
case self::ITEM_TYPE_BOOTS:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Сапоги';
|
2019-01-12 21:35:48 +00:00
|
|
|
|
break;
|
2020-07-22 14:04:15 +00:00
|
|
|
|
case self::ITEM_TYPE_GLOVES:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Перчатки';
|
|
|
|
|
break;
|
2020-07-22 14:04:15 +00:00
|
|
|
|
case self::ITEM_TYPE_WEAPON:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Оружие';
|
|
|
|
|
break;
|
2020-07-22 14:04:15 +00:00
|
|
|
|
case self::ITEM_TYPE_SHIELD:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Щит';
|
2019-01-12 21:35:48 +00:00
|
|
|
|
break;
|
2020-07-22 14:04:15 +00:00
|
|
|
|
case self::ITEM_TYPE_BELT:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Пояс';
|
2019-01-12 21:35:48 +00:00
|
|
|
|
break;
|
2020-08-29 12:42:08 +00:00
|
|
|
|
case self::ITEM_TYPE_RING:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Кольцо';
|
2019-01-12 21:35:48 +00:00
|
|
|
|
break;
|
2020-08-29 12:42:08 +00:00
|
|
|
|
case self::ITEM_TYPE_AMULET:
|
2020-07-21 15:03:46 +00:00
|
|
|
|
$this->typename = 'Амулет';
|
2019-01-12 21:35:48 +00:00
|
|
|
|
break;
|
2020-08-29 12:42:08 +00:00
|
|
|
|
case self::ITEM_TYPE_CONSUMABLE:
|
|
|
|
|
$this->typename = 'Расходуемый предмет';
|
|
|
|
|
break;
|
2019-01-12 21:35:48 +00:00
|
|
|
|
default:
|
|
|
|
|
$this->typename = 'Хлам';
|
2019-01-11 22:50:10 +00:00
|
|
|
|
}
|
2019-01-11 16:02:57 +00:00
|
|
|
|
}
|
2019-01-11 19:39:37 +00:00
|
|
|
|
|
2019-01-12 10:17:20 +00:00
|
|
|
|
abstract public function printInfo();
|
|
|
|
|
|
2019-01-12 20:02:08 +00:00
|
|
|
|
public function printImage()
|
2019-01-11 19:39:37 +00:00
|
|
|
|
{
|
2019-01-12 19:51:08 +00:00
|
|
|
|
echo <<<IMG
|
2020-07-22 14:04:15 +00:00
|
|
|
|
<img src="/i/sh/{$this->image}" class="item-wrap-normal" alt="">
|
2019-01-12 19:51:08 +00:00
|
|
|
|
IMG;
|
2019-01-11 19:39:37 +00:00
|
|
|
|
}
|
2019-01-11 19:49:00 +00:00
|
|
|
|
|
2021-01-28 21:05:34 +00:00
|
|
|
|
protected function wrap(int $number):string
|
2019-01-11 20:05:09 +00:00
|
|
|
|
{
|
2020-07-21 15:03:46 +00:00
|
|
|
|
if ($number > 0) {
|
|
|
|
|
return ": <b>" . $number . "</b>";
|
|
|
|
|
} else {
|
|
|
|
|
return ": <b style='color: maroon;'>" . $number . "</b>";
|
|
|
|
|
}
|
2019-01-11 20:05:09 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-07-21 15:03:46 +00:00
|
|
|
|
protected function printAllInfo()
|
2019-01-11 20:05:09 +00:00
|
|
|
|
{
|
2021-01-28 23:58:07 +00:00
|
|
|
|
$needsLines = [
|
|
|
|
|
"сила" => $this->need_strength,
|
|
|
|
|
"ловкость" =>$this->need_dexterity,
|
|
|
|
|
"интуиция" =>$this->need_intuition,
|
|
|
|
|
"выносливость" =>$this->need_endurance,
|
|
|
|
|
"интеллект" =>$this->need_intelligence,
|
|
|
|
|
"мудрость" =>$this->need_wisdom,
|
|
|
|
|
];
|
|
|
|
|
$addsLines = [
|
|
|
|
|
"Сила" => $this->add_strength,
|
|
|
|
|
"Ловкость" => $this->add_dexterity,
|
|
|
|
|
"Интуиция" => $this->add_intuition,
|
|
|
|
|
"Выносливость" => $this->add_endurance,
|
|
|
|
|
"Интеллект" => $this->add_intelligence,
|
|
|
|
|
"Мудрость" => $this->add_wisdom,
|
|
|
|
|
"Точность" => $this->add_accuracy,
|
|
|
|
|
"Увёртливость" => $this->add_evasion,
|
|
|
|
|
"Шанс крита" => $this->add_criticals,
|
2021-01-28 21:05:34 +00:00
|
|
|
|
];
|
2020-07-21 15:03:46 +00:00
|
|
|
|
echo "<b>" . $this->name . "</b> (Масса: " . $this->weight . ")";
|
2021-01-28 23:58:07 +00:00
|
|
|
|
echo "<br> Долговечность: " . $this->durability;
|
|
|
|
|
|
2020-07-21 15:03:46 +00:00
|
|
|
|
echo "<br><em>{$this->typename}</em><br>";
|
2021-01-28 23:58:07 +00:00
|
|
|
|
foreach ($needsLines as $stat => $value) {
|
|
|
|
|
if ($value > 0) {
|
|
|
|
|
echo "<br>Требуется $stat" . $this->wrap($value);
|
|
|
|
|
}
|
2020-07-21 15:03:46 +00:00
|
|
|
|
}
|
2021-01-28 23:58:07 +00:00
|
|
|
|
foreach ($addsLines as $stat => $value) {
|
|
|
|
|
if ($value) {
|
|
|
|
|
echo "<br>$stat" . $this->wrap($value);
|
|
|
|
|
}
|
2020-07-21 15:03:46 +00:00
|
|
|
|
}
|
|
|
|
|
if ($this->add_min_physical_damage && !$this->add_max_physical_damage) {
|
|
|
|
|
$damage = $this->add_min_physical_damage . " - " . $this->add_min_physical_damage;
|
|
|
|
|
} elseif (!$this->add_min_physical_damage && $this->add_max_physical_damage) {
|
|
|
|
|
$damage = $this->add_max_physical_damage . " - " . $this->add_max_physical_damage;
|
|
|
|
|
} elseif ($this->add_min_physical_damage && $this->add_max_physical_damage) {
|
|
|
|
|
$damage = $this->add_min_physical_damage . " - " . $this->add_max_physical_damage;
|
|
|
|
|
}
|
2020-07-22 09:50:14 +00:00
|
|
|
|
if (isset($damage)) {
|
2020-07-22 10:15:26 +00:00
|
|
|
|
echo "<br>Урон: " . $damage;
|
2019-01-14 13:46:20 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2019-01-11 16:02:57 +00:00
|
|
|
|
}
|