refactor
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace Enum;
|
||||
|
||||
enum ShopId: int
|
||||
{
|
||||
case MAIN = 1;
|
||||
case BEREZKA = 2;
|
||||
case LUKA = 5; // ïåùåðà òûñÿ÷è ïðîêëÿòèé
|
||||
case FLOWER = 6;
|
||||
case BOOKS = 7;
|
||||
case ANIMALS = 8; // ìàãàçèí íîâè÷êà
|
||||
case TAVERN = 9; // íàêîâàëüíÿ
|
||||
case IZLOM = 10;
|
||||
case BLOOD_ALTAR = 11; //àëòàðü êðîâè
|
||||
case TEMPLE = 14;
|
||||
case MUSHROOMS = 17; // îáùèé ðûöàðñêèé
|
||||
case REFERALS = 27;
|
||||
case RULF_HRUNT = 33; // áåçäíà
|
||||
case SHOP_KAT = 44; // ìàãàçèí ðóëüôà õðóíòà, à òû ÷òî òàêîå?
|
||||
case LABORATORY = 45;
|
||||
case NEWBIE = 106; // ïåùåðà ìãëû
|
||||
case KNIGHTS_MAIN = 400; //ìàãàçèí ðåôåðàëîâ
|
||||
case SHOP_PRIZ = 404; // êàìîðêà Ëóêè
|
||||
case SHOP_2 = 609; // ìàãàçèí ãðèáîåäà??
|
||||
case ANVIL = 700; // êàòàêîìáû
|
||||
case ARTEFACTS = 777; //ìàãàçèí ñàìîöâåòîâ
|
||||
case DUNGEON_BEZDNA = 801; // õðàì?!
|
||||
case DUNGEON_PTP = 802; // èçëîì?!
|
||||
case DUNGEON_CATACOMBS = 803; //ëàáîðàòîðèÿ?!?!
|
||||
case DUNGEON_MISTY = 804;
|
||||
case CRYSTALS = 1050;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Enum;
|
||||
|
||||
enum StatFilterCellName: string
|
||||
{
|
||||
case Bonus = 'is_bonus';
|
||||
case Requirement = 'is_requirement';
|
||||
case Percentage = 'is_percentage';
|
||||
}
|
||||
@@ -1,228 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
use Helper\Conversion;
|
||||
|
||||
class Item
|
||||
{
|
||||
public static array $parameterName = [
|
||||
'sex' => 'Пол',
|
||||
'align' => 'Склонность',
|
||||
'lvl' => 'Уровень',
|
||||
|
||||
'antm3' => 'Мф. против мощности крита',
|
||||
'spasenie' => 'Спасение после смерти',
|
||||
'exp' => 'Получаемый опыт (%)',
|
||||
'gold' => 'Благодать Ангела',
|
||||
'repair_discount' => 'Скидка на ремонт вещей',
|
||||
'repair_z' => 'Бесплатное извлечение заточек',
|
||||
'repair_r' => 'Бесплатное извлечение рун',
|
||||
'speed_dungeon' => 'Скорость передвижения по подземельям',
|
||||
|
||||
's1' => 'Сила',
|
||||
's2' => 'Ловкость',
|
||||
's3' => 'Интуиция',
|
||||
's4' => 'Выносливость',
|
||||
's5' => 'Интеллект',
|
||||
's6' => 'Мудрость',
|
||||
's7' => 'Духовность',
|
||||
|
||||
'a1' => 'Мастерство владения ножами, кинжалами',
|
||||
'a2' => 'Мастерство владения топорами, секирами',
|
||||
'a3' => 'Мастерство владения дубинами, молотами',
|
||||
'a4' => 'Мастерство владения мечами',
|
||||
'a5' => 'Мастерство владения магическими посохами',
|
||||
'aall' => 'Мастерство владения оружием',
|
||||
|
||||
'mg1' => 'Мастерство владения магией огня',
|
||||
'mg2' => 'Мастерство владения магией воздуха',
|
||||
'mg3' => 'Мастерство владения магией воды',
|
||||
'mg4' => 'Мастерство владения магией земли',
|
||||
'mg7' => 'Мастерство владения серой магией',
|
||||
'mall' => 'Мастерство владения магией стихий',
|
||||
|
||||
'hpAll' => "Уровень жизни (HP)",
|
||||
'mpAll' => "Уровень маны (МP)",
|
||||
|
||||
'pa1' => 'Мф. мощности колющего урона',
|
||||
'pa2' => 'Мф. мощности рубящего урона',
|
||||
'pa3' => 'Мф. мощности дробящего урона',
|
||||
'pa4' => 'Мф. мощности режущего урона',
|
||||
'pm1' => 'Мф. мощности магии огня',
|
||||
'pm2' => 'Мф. мощности магии воздуха',
|
||||
'pm3' => 'Мф. мощности магии воды',
|
||||
'pm4' => 'Мф. мощности магии земли',
|
||||
|
||||
'zona' => 'Дополнительная зона атаки',
|
||||
'zonb' => '???',
|
||||
|
||||
'speedhp' => 'Регенерация здоровья (%)',
|
||||
'speedmp' => 'Регенерация маны (%)',
|
||||
|
||||
'za' => 'Защита от урона',
|
||||
'zm' => 'Защита от магии стихий',
|
||||
'magic_cast' => 'Дополнительный каст за ход',
|
||||
|
||||
'm1' => 'Мф. критического удара (%)',
|
||||
'm2' => 'Мф. против критического удара (%)',
|
||||
'm3' => 'Мф. мощности крит. удара (%)',
|
||||
'm4' => 'Мф. увертывания (%)',
|
||||
'm5' => 'Мф. против увертывания (%)',
|
||||
'm6' => 'Мф. контрудара (%)',
|
||||
'm7' => 'Мф. парирования (%)',
|
||||
'm8' => 'Мф. блока щитом (%)',
|
||||
'm9' => 'Мф. удара сквозь броню (%)',
|
||||
'm10' => 'Мф. мощности урона',
|
||||
'm11' => 'Мф. мощности магии стихий',
|
||||
'm14' => 'Мф. абс. критического удара (%)',
|
||||
'm15' => 'Мф. абс. увертывания (%)',
|
||||
'm18' => 'Мф. абс. блока щитом (%)',
|
||||
|
||||
'mib1' => 'Броня головы минимум',
|
||||
'mab1' => 'Броня головы максимум',
|
||||
'mib2' => 'Броня груди и живота минимум',
|
||||
'mab2' => 'Броня груди и живота максимум',
|
||||
'mib3' => 'Броня пояса минимум',
|
||||
'mab3' => 'Броня пояса максимум',
|
||||
'mib4' => 'Броня ног минимум',
|
||||
'mab4' => 'Броня ног максимум',
|
||||
];
|
||||
|
||||
public static array $parameterNameDeprecated = [
|
||||
'acestar' => 'Следующий каст будет критическим',
|
||||
'more_awards' => 'Повышеная награда %',
|
||||
'align_bs' => 'Служитель закона',
|
||||
'nopryh' => 'Прямое поподание',
|
||||
'puti' => 'Запрет перемещения',
|
||||
'enAll' => 'Уровень энергии',
|
||||
'm21' => 'Мф. абс. попадания (%)',
|
||||
'm16' => 'Мф. абс. парирования (%)',
|
||||
'm17' => 'Мф. абс. контрудара (%)',
|
||||
'm19' => 'Мф. абс. магический промах (%)',
|
||||
'm20' => 'Мф. удача (%)',
|
||||
'a6' => 'Мастерство владения луками',
|
||||
'a7' => 'Мастерство владения арбалетами',
|
||||
'm2all' => 'Мастерство владения магией',
|
||||
'mg5' => 'Мастерство владения магией Света',
|
||||
'mg6' => 'Мастерство владения магией Тьмы',
|
||||
'tj' => 'Тяжелая броня',
|
||||
'lh' => 'Легкая броня',
|
||||
'minAtack' => 'Минимальный урон',
|
||||
'maxAtack' => 'Максимальный урон',
|
||||
'm11a' => 'Мф. мощности магии',
|
||||
'pm5' => 'Мф. мощности магии Света',
|
||||
'pm6' => 'Мф. мощности магии Тьмы',
|
||||
'zma' => 'Защита от магии',
|
||||
'za1' => 'Защита от колющего урона',
|
||||
'za2' => 'Защита от рубящего урона',
|
||||
'za3' => 'Защита от дробящего урона',
|
||||
'za4' => 'Защита от режущего урона',
|
||||
'zm1' => 'Защита от магии огня',
|
||||
'zm2' => 'Защита от магии воздуха',
|
||||
'zm3' => 'Защита от магии воды',
|
||||
'zm4' => 'Защита от магии земли',
|
||||
'zm5' => 'Защита от магии Света',
|
||||
'zm6' => 'Защита от магии Тьмы',
|
||||
'zm7' => 'Защита от серой магии',
|
||||
'pza' => 'Понижение защиты от урона',
|
||||
'pzm' => 'Понижение защиты от магии',
|
||||
'pza1' => 'Понижение защиты от колющего урона',
|
||||
'min_heal_proc' => 'Эффект лечения (%)',
|
||||
'notravma' => 'Защита от травм',
|
||||
'yron_min' => 'Минимальный урон',
|
||||
'yron_max' => 'Максимальный урон',
|
||||
'zaproc' => 'Блокировка Физического Урона (%)',
|
||||
'zmproc' => 'Блокировка Магического Урона (%)',
|
||||
'zm2proc' => 'Защита от магии Воздуха (%)',
|
||||
'pza2' => 'Понижение защиты от рубящего урона',
|
||||
'pza3' => 'Понижение защиты от дробящего урона',
|
||||
'pza4' => 'Понижение защиты от режущего урона',
|
||||
'pzm1' => 'Понижение защиты от магии огня',
|
||||
'pzm2' => 'Понижение защиты от магии воздуха',
|
||||
'pzm3' => 'Понижение защиты от магии воды',
|
||||
'pzm4' => 'Понижение защиты от магии земли',
|
||||
'pzm5' => 'Понижение защиты от магии Света',
|
||||
'pzm6' => 'Понижение защиты от магии Тьмы',
|
||||
'pzm7' => 'Понижение защиты от серой магии',
|
||||
'tya1' => 'Колющие атаки',
|
||||
'tya2' => 'Рубящие атаки',
|
||||
'tya3' => 'Дробящие атаки',
|
||||
'tya4' => 'Режущие атаки',
|
||||
'tym1' => 'Огненные атаки',
|
||||
'mg2static_points' => 'Уровень заряда (Воздух)',
|
||||
'tym2' => 'Электрические атаки',
|
||||
'tym3' => 'Ледяные атаки',
|
||||
'tym4' => 'Земляные атаки',
|
||||
'hpProc' => 'Уровень жизни (%)',
|
||||
'mpProc' => 'Уровень маны (%)',
|
||||
'tym5' => 'Атаки Света',
|
||||
'tym6' => 'Атаки Тьмы',
|
||||
'tym7' => 'Серые атаки',
|
||||
'min_use_mp' => 'Уменьшает расход маны',
|
||||
'pog' => 'Поглощение урона',
|
||||
'pog2' => 'Поглощение урона',
|
||||
'pog2p' => 'Процент поглощение урона',
|
||||
'pog2mp' => 'Цена поглощение урона',
|
||||
'maxves' => 'Увеличивает рюкзак',
|
||||
'bonusexp' => 'Увеличивает получаемый опыт',
|
||||
'speeden' => 'Регенерация энергии (%)',
|
||||
'yza' => 'Уязвимость физическому урона (%)',
|
||||
'yzm' => 'Уязвимость магии стихий (%)',
|
||||
'yzma' => 'Уязвимость магии (%)',
|
||||
'yza1' => 'Уязвимость колющему урона (%)',
|
||||
'yza2' => 'Уязвимость рубящему урона (%)',
|
||||
'yza3' => 'Уязвимость дробящему урона (%)',
|
||||
'yza4' => 'Уязвимость режущему урона (%)',
|
||||
'yzm1' => 'Уязвимость магии огня (%)',
|
||||
'yzm2' => 'Уязвимость магии воздуха (%)',
|
||||
'yzm3' => 'Уязвимость магии воды (%)',
|
||||
'yzm4' => 'Уязвимость магии земли (%)',
|
||||
'yzm5' => 'Уязвимость магии (%)',
|
||||
'yzm6' => 'Уязвимость магии (%)',
|
||||
'yzm7' => 'Уязвимость магии (%)',
|
||||
'rep' => 'Репутация Рыцаря',
|
||||
'hpVinos' => 'Бонус жизни',
|
||||
'bronze' => 'Bronze Premium Account',
|
||||
'silvers' => 'Silver Premium Account',
|
||||
];
|
||||
|
||||
public static function test(string $data)
|
||||
{
|
||||
$t = self::parseDataString($data);
|
||||
$r = [];
|
||||
$b = [];
|
||||
foreach ($t['tr'] as $k => $v) {
|
||||
if (isset(self::$parameterName[explode('_', $k)[1]])) {
|
||||
$k = "($k) " . self::$parameterName[explode('_', $k)[1]];
|
||||
}
|
||||
$r[$k] = $v;
|
||||
}
|
||||
foreach ($t['add'] as $k2 => $v2) {
|
||||
if (isset(self::$parameterName[explode('_', $k2)[1]])) {
|
||||
$k2 = "($k2) " . self::$parameterName[explode('_', $k2)[1]];
|
||||
}
|
||||
$b[$k2] = $v2;
|
||||
}
|
||||
return ['tr' => $r, 'add' => $b,];
|
||||
}
|
||||
|
||||
public static function parseDataString(string $data)
|
||||
{
|
||||
$a = Conversion::dataStringToArray($data);
|
||||
$sex = ['Мужской', 'Женский'];
|
||||
$requirements = [];
|
||||
$bonuses = [];
|
||||
foreach ($a as $k => $v) {
|
||||
if (str_starts_with($k, 'tr_')) {
|
||||
$requirements[$k] = $v;
|
||||
}
|
||||
if (str_starts_with($k, 'add_')) {
|
||||
$bonuses[$k] = $v;
|
||||
}
|
||||
if (isset($requirements['tr_sex'])) {
|
||||
$requirements['tr_sex'] = $sex[$requirements['tr_sex']];
|
||||
}
|
||||
}
|
||||
return ['tr' => $requirements, 'add' => $bonuses,];
|
||||
}
|
||||
}
|
||||
@@ -2,77 +2,23 @@
|
||||
|
||||
namespace Item\Data;
|
||||
|
||||
use Model\Constant\Stat;
|
||||
|
||||
class Bonuses
|
||||
{
|
||||
public static array $names = [
|
||||
'hpAll' => 'Уровень жизни (HP)',
|
||||
'mpAll' => 'Уровень маны',
|
||||
's1' => 'Сила',
|
||||
's2' => 'Ловкость',
|
||||
's3' => 'Интуиция',
|
||||
's4' => 'Выносливость',
|
||||
's5' => 'Интелект',
|
||||
's6' => 'Мудрость',
|
||||
'm1' => 'Мф. критического удара (%)',
|
||||
'm2' => 'Мф. против критического удара (%)',
|
||||
'm3' => 'Мф. мощности критического удара (%)',
|
||||
'm4' => 'Мф. увертывания (%)',
|
||||
'm5' => 'Мф. против увертывания (%)',
|
||||
'm6' => 'Мф. контрудара (%)',
|
||||
'm7' => 'Мф. парирования (%)',
|
||||
'm8' => 'Мф. блока щитом (%)',
|
||||
'm9' => 'Мф. пробоя брони (%)',
|
||||
'm10' => 'Мф. мощности урона',
|
||||
'm11' => 'Мф. мощности магии стихий',
|
||||
'm14' => 'Мф. абс. критического удара (%)',
|
||||
'm15' => 'Мф. абс. увертывания (%)',
|
||||
'm18' => 'Мф. абс. блока щитом (%)',
|
||||
'a1' => 'Мастерство владения ножами, кинжалами',
|
||||
'a2' => 'Мастерство владения топорами, секирами',
|
||||
'a3' => 'Мастерство владения дубинами, молотами',
|
||||
'a4' => 'Мастерство владения мечами',
|
||||
'a5' => 'Мастерство владения магическими посохами',
|
||||
'aall' => 'Мастерство владения оружием',
|
||||
'mall' => 'Мастерство владения магией стихий',
|
||||
'mg1' => 'Мастерство владения магией огня',
|
||||
'mg2' => 'Мастерство владения магией воздуха',
|
||||
'mg3' => 'Мастерство владения магией воды',
|
||||
'mg4' => 'Мастерство владения магией земли',
|
||||
'mg7' => 'Мастерство владения серой магией',
|
||||
'pa1' => 'Мф. мощности колющего урона',
|
||||
'pa2' => 'Мф. мощности рубящего урона',
|
||||
'pa3' => 'Мф. мощности дробящий урона',
|
||||
'pa4' => 'Мф. мощности режущий урона',
|
||||
'pm1' => 'Мф. мощности магии огня',
|
||||
'pm2' => 'Мф. мощности магии воздуха',
|
||||
'pm3' => 'Мф. мощности магии воды',
|
||||
'pm4' => 'Мф. мощности магии земли',
|
||||
'za' => 'Защита от урона',
|
||||
'zm' => 'Защита от магии стихий',
|
||||
'speedhp' => 'Регенерация здоровья (НР)',
|
||||
'speedmp' => 'Регенерация маны (МР)',
|
||||
'zona' => 'Дополнительная зона атаки',
|
||||
'zonb' => 'Дополнительная зона блока',
|
||||
'speed_dungeon' => 'Скорость перемещения по пещерам',
|
||||
'antm3' => 'Мф. против мощности крит. удара',
|
||||
'spasenie' => 'Спасение после смерти',
|
||||
'exp' => 'Получаемый опыт (%)',
|
||||
'repair_z' => 'Бесплатное извлечение заточек',
|
||||
'repair_r' => 'Бесплатное извлечение рун',
|
||||
'repair_discount' => 'Скидка на ремонт вещей',
|
||||
'gold' => 'Благодать Ангела',
|
||||
'magic_cast' => 'Дополнительное заклинание за ход',
|
||||
];
|
||||
|
||||
private Stat $stat;
|
||||
private array $result = [];
|
||||
|
||||
public function __construct(array $data)
|
||||
{
|
||||
$this->stat = new Stat();
|
||||
|
||||
foreach ($data as $bonusName => $value) {
|
||||
if (!self::$names[$bonusName]) {
|
||||
continue;
|
||||
if (!$this->stat->getBonusNames()[$bonusName]) {
|
||||
$this->result[$bonusName] = $value; //fixme на период отладки для отлова забытых
|
||||
//continue;
|
||||
}
|
||||
$this->result[self::$names[$bonusName]] = $value;
|
||||
$this->result[$this->stat->getBonusNames()[$bonusName]] = $value;
|
||||
}
|
||||
$this->armor($data);
|
||||
}
|
||||
@@ -112,16 +58,10 @@ class Bonuses
|
||||
|
||||
public function addZonb(): void
|
||||
{
|
||||
if (isset($this->result[self::$names['zonb']])) {
|
||||
$this->result[self::$names['zonb']]++;
|
||||
if (isset($this->result[$this->stat->getBonusNames()['zonb']])) {
|
||||
$this->result[$this->stat->getBonusNames()['zonb']]++;
|
||||
} else {
|
||||
$this->result[self::$names['zonb']] = 1;
|
||||
$this->result[$this->stat->getBonusNames()['zonb']] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
public static function getBonusSystemNames(): array
|
||||
{
|
||||
return array_keys(self::$names);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,29 +2,10 @@
|
||||
|
||||
namespace Item\Data;
|
||||
|
||||
use Model\Constant\Stat;
|
||||
|
||||
class Requirements
|
||||
{
|
||||
public static array $names = [
|
||||
'sex' => 'Пол',
|
||||
'lvl' => 'Уровень',
|
||||
's1' => 'Сила',
|
||||
's2' => 'Ловкость',
|
||||
's3' => 'Интуиция',
|
||||
's4' => 'Выносливость',
|
||||
's5' => 'Интелект',
|
||||
's6' => 'Мудрость',
|
||||
'a1' => 'Мастерство владения ножами, кинжалами',
|
||||
'a2' => 'Мастерство владения топорами, секирами',
|
||||
'a3' => 'Мастерство владения дубинами, молотами',
|
||||
'a4' => 'Мастерство владения мечами',
|
||||
'a5' => 'Мастерство владения магическими посохами',
|
||||
'mg1' => 'Мастерство владения магией огня',
|
||||
'mg2' => 'Мастерство владения магией воздуха',
|
||||
'mg3' => 'Мастерство владения магией воды',
|
||||
'mg4' => 'Мастерство владения магией земли',
|
||||
'mg7' => 'Мастерство владения серой магией',
|
||||
'align' => 'Склонность',
|
||||
];
|
||||
private static array $sex = [
|
||||
0 => 'Мужской',
|
||||
1 => 'Женский',
|
||||
@@ -39,12 +20,15 @@ class Requirements
|
||||
private int $alignValue = 0;
|
||||
|
||||
private array $result = [];
|
||||
private Stat $stat;
|
||||
|
||||
public function __construct(array $data)
|
||||
{
|
||||
$this->stat = new Stat();
|
||||
foreach ($data as $requirementName => $value) {
|
||||
if (!self::$names[$requirementName]) {
|
||||
continue;
|
||||
if (!$this->stat->getRequirementNames()[$requirementName]) {
|
||||
$this->result[$requirementName] = $value; //fixme на период отладки для отлова забытых
|
||||
//continue;
|
||||
}
|
||||
if ($requirementName === 'sex') {
|
||||
if (self::$sex[$value]) {
|
||||
@@ -56,16 +40,20 @@ class Requirements
|
||||
if ($requirementName === 'align') {
|
||||
if (self::$align[$value]) {
|
||||
$this->alignValue = $value;
|
||||
$this->result[$requirementName]['sysvalue'] = $value;
|
||||
$value = self::$align[$value];
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
//$this->result[$this->stat->getRequirementNames()[$requirementName]] = $value;
|
||||
|
||||
$this->result[$requirementName] = [
|
||||
'name' => self::$names[$requirementName],
|
||||
'name' => $this->stat->getRequirementNames()[$requirementName],
|
||||
'value' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function get(): array
|
||||
|
||||
@@ -32,18 +32,13 @@ class DataModel
|
||||
{
|
||||
$result = [];
|
||||
foreach ($this->data as $k => $v) {
|
||||
if ($this->searchByPrefix($prefix, $k)) {
|
||||
if (str_starts_with($k, $prefix)) {
|
||||
$result[str_replace($prefix, '', $k)] = $v;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function searchByPrefix(string $prefix, string $string): bool
|
||||
{
|
||||
return substr($string, 0, strlen($prefix)) === $prefix;
|
||||
}
|
||||
|
||||
public function getBonuses(): array
|
||||
{
|
||||
return $this->getPrefixed('add_');
|
||||
|
||||
@@ -5,107 +5,34 @@ namespace Location;
|
||||
use Core\Config;
|
||||
use Core\Db;
|
||||
use Delo;
|
||||
use Enum\ShopId;
|
||||
use Helper\Conversion;
|
||||
use Item\Data\Bonuses;
|
||||
use Item\Data\Properties;
|
||||
use Item\Data\Requirements;
|
||||
use Item\DataModel;
|
||||
use Model\Constant\ShopOtdel;
|
||||
use User;
|
||||
|
||||
class Shop
|
||||
{
|
||||
private const ITEM_GENERATION_CURRENT = 2;
|
||||
public const MAIN = 1;
|
||||
public const BEREZKA = 2;
|
||||
public const CRYSTALS = 1050;
|
||||
public const REFERALS = 27;
|
||||
public const TEMPLE = 14;
|
||||
public const IZLOM = 10;
|
||||
public const LABORATORY = 45;
|
||||
public const ARTEFACTS = 777; //магазин самоцветов
|
||||
public const KNIGHTS_MAIN = 400; //магазин рефералов
|
||||
public const DUNGEON_BEZDNA = 801; // храм?!
|
||||
public const DUNGEON_PTP = 802; // излом?!
|
||||
public const DUNGEON_CATACOMBS = 803; //лаборатория?!?!
|
||||
public const DUNGEON_MISTY = 804;
|
||||
//public const BOOKS = 7;
|
||||
public const MUSHROOMS = 17; // общий рыцарский
|
||||
public const RULF_HRUNT = 33; // бездна
|
||||
public const LUKA = 5; // пещера тысячи проклятий
|
||||
public const ANVIL = 700; // катакомбы
|
||||
public const NEWBIE = 106; // пещера мглы
|
||||
//public const FLOWER = 6;
|
||||
public const SHOP_2 = 609; // магазин грибоеда??
|
||||
public const SHOP_KAT = 44; // магазин рульфа хрунта, а ты что такое?
|
||||
public const SHOP_PRIZ = 404; // каморка Луки
|
||||
//public const BLOOD_ALTAR = 11; //алтарь крови
|
||||
public const TAVERN = 9; // наковальня
|
||||
public const ANIMALS = 8; // магазин новичка
|
||||
public const OTDEL_NAME = [
|
||||
1 => 'Кастеты,ножи',
|
||||
2 => 'Топоры',
|
||||
3 => 'Дубины,булавы',
|
||||
4 => 'Мечи',
|
||||
5 => 'Магические посохи',
|
||||
6 => 'Сапоги',
|
||||
7 => 'Перчатки',
|
||||
8 => 'Рубахи',
|
||||
9 => 'Легкая броня',
|
||||
10 => 'Тяжелая броня',
|
||||
11 => 'Шлемы',
|
||||
12 => 'Наручи',
|
||||
13 => 'Пояса',
|
||||
14 => 'Поножи',
|
||||
15 => 'Щиты',
|
||||
16 => 'Серьги',
|
||||
17 => 'Ожерелья',
|
||||
18 => 'Кольца',
|
||||
19 => 'Заклинания: нейтральные',
|
||||
20 => 'Заклинания: боевые и защитные',
|
||||
21 => 'Заклинания: карманные',
|
||||
22 => 'Заклинания: исцеляющие',
|
||||
23 => 'Заклинания: манящие',
|
||||
24 => 'Заклинания: стратегические',
|
||||
25 => 'Заклинания: тактические',
|
||||
26 => 'Заклинания: сервисные',
|
||||
27 => 'Амуниция',
|
||||
28 => 'Эликсиры',
|
||||
29 => 'Еда',
|
||||
30 => 'Подарки',
|
||||
31 => 'Подарки: недобрые',
|
||||
32 => 'Подарки: упаковка',
|
||||
33 => 'Подарки: открытки',
|
||||
34 => 'Подарки: фейерверки',
|
||||
35 => 'Усиление оружия: Заточки',
|
||||
36 => 'Плащи и Накидки:',
|
||||
37 => 'Готовые Комплекты:',
|
||||
];
|
||||
public const OTDEL_GROUP_NAME = [
|
||||
1 => 'Оружие',
|
||||
6 => 'Одежда',
|
||||
15 => 'Щиты',
|
||||
16 => 'Ювелирные товары',
|
||||
19 => 'Заклинания',
|
||||
27 => 'Амуниция',
|
||||
28 => 'Эликсиры',
|
||||
30 => 'Подарки',
|
||||
35 => 'Прочее',
|
||||
];
|
||||
private int $shopId;
|
||||
public ShopOtdel $shopOtdel;
|
||||
private ShopId $shopId;
|
||||
private array $wares;
|
||||
private int $otdel;
|
||||
private int $itemId;
|
||||
private $buyer;
|
||||
|
||||
public function __construct(int $shopId, int $otdel = 1)
|
||||
public function __construct(ShopId $shopId, int $otdel = 1)
|
||||
{
|
||||
$this->shopOtdel = new ShopOtdel();
|
||||
$this->otdel = $otdel;
|
||||
$this->itemId = intval($_GET['itmid']);
|
||||
$this->shopId = $shopId;
|
||||
$this->wares = Db::getRows('select * from
|
||||
items_shop
|
||||
left join items_main on items_shop.item_id = items_main.id
|
||||
where sid = ? and r = ? and kolvo > 0 order by pos', [$shopId, $otdel]);
|
||||
where sid = ? and r = ? and kolvo > 0 order by pos', [$shopId->value, $otdel]);
|
||||
|
||||
$this->buyer = new class {
|
||||
public function getId(): int
|
||||
@@ -178,23 +105,23 @@ class Shop
|
||||
}
|
||||
}
|
||||
|
||||
private function itemUp()
|
||||
private function itemUp(): void
|
||||
{
|
||||
$this->changeItemPositionByInt(-1);
|
||||
}
|
||||
|
||||
private function changeItemPositionByInt(int $modificator)
|
||||
private function changeItemPositionByInt(int $modificator): void
|
||||
{
|
||||
Db::sql('update items_shop set pos = pos + ? where sid = ? and r = ? and item_id = ? and kolvo > 0',
|
||||
[$modificator, $this->shopId, $this->otdel, $this->itemId]);
|
||||
[$modificator, $this->shopId->value, $this->otdel, $this->itemId]);
|
||||
}
|
||||
|
||||
private function itemDown()
|
||||
private function itemDown(): void
|
||||
{
|
||||
$this->changeItemPositionByInt(1);
|
||||
}
|
||||
|
||||
public function printWares()
|
||||
public function printWares(): void
|
||||
{
|
||||
foreach ($this->wares as $pl) {
|
||||
$data = new DataModel($pl['item_id']);
|
||||
@@ -229,7 +156,7 @@ class Shop
|
||||
if ($pl['iznos'] > 0) {
|
||||
$pl['iznosMAXi'] = $pl['iznos'];
|
||||
}
|
||||
if ($pl['iznosMAXi'] > 0 && $pl['iznosMAXi'] !== 999999999) {
|
||||
if ($pl['iznosMAXi'] > 0 && $pl['iznosMAXi'] < 1000) {
|
||||
$is2 .= 'Долговечность: 0/' . $pl['iznosMAXi'] . '<br>';
|
||||
}
|
||||
|
||||
@@ -264,11 +191,14 @@ class Shop
|
||||
$is2 .= '<ul style="margin: 0; padding: 0 30px;">';
|
||||
foreach ($itemRequirements->get() as $dataName => $dataInfo) {
|
||||
if ($dataName === 'align' || $dataName === 'sex') {
|
||||
$is2 .= $this->buyer->hasExactly($dataName, intval($dataInfo['value'])) ? '<li>' : '<li style="color: crimson; list-style-type: \'× \';">';
|
||||
$value = $dataName === 'align' ? intval($dataInfo['sysvalue']) : intval($dataInfo['value']);
|
||||
$is2 .= $this->buyer->hasExactly($dataName, $value) ? '<li>' : '<li style="color: crimson; list-style-type: \'× \';">';
|
||||
} else {
|
||||
$is2 .= $this->buyer->hasEnough($dataName, intval($dataInfo['value'])) ? '<li>' : '<li style="color: crimson; list-style-type: \'× \';">';
|
||||
}
|
||||
$is2 .= $dataInfo['name'] . ': ' . $dataInfo['value'];
|
||||
$name = empty($dataInfo['name']) ? $dataName : $dataInfo['name'];
|
||||
$is2 .= $name . ': ' . $dataInfo['value'];
|
||||
//$is2 .= $dataName . ': ' . $dataInfo;
|
||||
$is2 .= '</li>';
|
||||
}
|
||||
$is2 .= '</ul>';
|
||||
@@ -391,7 +321,7 @@ HTML;
|
||||
private function name(string $name, ?string $defaultName, int $itemid): string
|
||||
{
|
||||
$styleSuffix = '';
|
||||
if ($this->shopId == self::SHOP_2) {
|
||||
if ($this->shopId === ShopId::SHOP_2) {
|
||||
$styleSuffix = 'WL';
|
||||
}
|
||||
if (!empty($defaultName)) {
|
||||
@@ -437,10 +367,10 @@ HTML;
|
||||
private function price(int $credits, int $eurocredits, int $voinstvennost): string
|
||||
{
|
||||
$result = 'Цена: ';
|
||||
if ($this->shopId === self::SHOP_2) {
|
||||
if ($this->shopId === ShopId::SHOP_2) {
|
||||
$result .= $this->printColoredValue($this->buyer->getVoinstvennost() >= $voinstvennost, $voinstvennost);
|
||||
$result .= ' Воинственности ';
|
||||
} elseif ($this->shopId === self::BEREZKA || $this->shopId === self::ARTEFACTS) {
|
||||
} elseif ($this->shopId === ShopId::BEREZKA || $this->shopId === ShopId::ARTEFACTS) {
|
||||
$result .= '<span style="color: cornflowerblue;">';
|
||||
$result .= $this->printColoredValue($this->buyer->getEuroCredits() >= $eurocredits, $eurocredits);
|
||||
$result .= ' екр.</span> ';
|
||||
@@ -524,14 +454,23 @@ HTML;
|
||||
} else {
|
||||
$result = '<img src="' . Config::img() . '/i/items/' . $image . '" alt="' . $name . '"><br>';
|
||||
}
|
||||
if ($this->shopId == self::SHOP_2) {
|
||||
$result .= '<a href="javascript:void(' . $id . ');" onClick="top.buyShopNow(' . $id . ',\'?' . 'otdel=' . $this->otdel . '&buyVn=' . $id . '&sd4=' . $this->buyer->getNextAct() . '\',\'' . $name . '\',\'??\',\' ??.\');">купить</a>';
|
||||
} elseif (($this->shopId == self::BEREZKA || $this->shopId == self::ARTEFACTS) && $this->buyer->hasEnoughEuroCredits($eurocredits)) {
|
||||
$result .= '<a href="javascript:void(' . $id . ');" onClick="top.buyShopNow(' . $id . ',\'?' . 'otdel=' . $this->otdel . '&buyEkr=' . $id . '&sd4=' . $this->buyer->getNextAct() . '\',\'' . $name . '\',\'' . $eurocredits . '\',\' екр.\');">купить</a>';
|
||||
if ($this->shopId == ShopId::SHOP_2) {
|
||||
$js = <<<JS
|
||||
<button onClick="top.buyShopNow($id,'?otdel=$this->otdel&buyVn=$id&sd4={$this->buyer->getNextAct()}','$name')">Купить</button>
|
||||
JS;
|
||||
} elseif (($this->shopId == ShopId::BEREZKA || $this->shopId == ShopId::ARTEFACTS) && $this->buyer->hasEnoughEuroCredits($eurocredits)) {
|
||||
$js = <<<JS
|
||||
<button onClick="top.buyShopNow($id,'?otdel=$this->otdel&buyEkr=$id&sd4={$this->buyer->getNextAct()}','$name',$eurocredits,'екр.')">Купить</button>
|
||||
JS;
|
||||
} elseif ($this->buyer->hasEnoughCredits($credits)) {
|
||||
$result .= '<a href="javascript:void(' . $id . ');" onClick="top.buyShopNow(' . $id . ',\'?' . 'otdel=' . $this->otdel . '&buy=' . $id . '&sd4=' . $this->buyer->getNextAct() . '\',\'' . $name . '\',\'' . $credits . '\',\' кр.\');">купить</a>';
|
||||
$js = <<<JS
|
||||
<button onClick="top.buyShopNow($id,'?otdel=$this->otdel&buy=$id&sd4={$this->buyer->getNextAct()}','$name',$credits,'кр.')">Купить</button>
|
||||
JS;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
return $result;
|
||||
|
||||
return $result . $js;
|
||||
}
|
||||
|
||||
private function adminOptions(int $itemId, int $itemPosition): string
|
||||
@@ -556,7 +495,7 @@ HTML;
|
||||
public function buy(int $itemid): string
|
||||
{
|
||||
$sql = 'select sid, items_shop.price_1, name from items_shop left join items_main on item_id = id where item_id = ? and sid = ?';
|
||||
$item = Db::getRow($sql, [$itemid, $this->shopId]);
|
||||
$item = Db::getRow($sql, [$itemid, $this->shopId->value]);
|
||||
if (!$this->buyer->hasEnoughCredits($item['price_1'])) {
|
||||
return 'Покупка не удалась.';
|
||||
}
|
||||
@@ -572,7 +511,7 @@ HTML;
|
||||
public function buyEkr(int $itemid): string
|
||||
{
|
||||
$sql = 'select sid, items_shop.price_2, name from items_shop left join items_main on item_id = id where item_id = ? and sid = ?';
|
||||
$item = Db::getRow($sql, [$itemid, $this->shopId]);
|
||||
$item = Db::getRow($sql, [$itemid, $this->shopId->value]);
|
||||
if (!$this->buyer->hasEnoughEuroCredits($item['price_2'])) {
|
||||
return 'Покупка не удалась.';
|
||||
}
|
||||
@@ -588,7 +527,7 @@ HTML;
|
||||
public function buyVn(int $itemid): string
|
||||
{
|
||||
$sql = 'select sid, items_shop.price_4, name from items_shop left join items_main on item_id = id where item_id = ? and sid = ?';
|
||||
$item = Db::getRow($sql, [$itemid, $this->shopId]);
|
||||
$item = Db::getRow($sql, [$itemid, $this->shopId->value]);
|
||||
if (!$this->buyer->hasEnoughVoinstvennost($item['price_4'])) {
|
||||
return 'Покупка не удалась.';
|
||||
}
|
||||
@@ -604,9 +543,8 @@ HTML;
|
||||
public function getUsedOtdels(): array
|
||||
{
|
||||
$result = [];
|
||||
$o = Db::getColumn('select r from items_shop where sid = ? group by r', [$this->shopId]);
|
||||
foreach ($o as $v) {
|
||||
$result[$v] = self::OTDEL_NAME[$v];
|
||||
foreach (Db::getColumn('select r from items_shop where sid = ? group by r', [$this->shopId->value]) as $v) {
|
||||
$result[$v] = $this->shopOtdel->getName($v);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
@@ -614,11 +552,11 @@ HTML;
|
||||
public function getUserWallet(): string
|
||||
{
|
||||
$result = '';
|
||||
if ($this->shopId === self::MAIN) {
|
||||
if ($this->shopId === ShopId::MAIN) {
|
||||
$result = $this->buyer->getCredits() . ' кр.';
|
||||
} elseif (in_array($this->shopId, [self::BEREZKA, self::ARTEFACTS])) {
|
||||
} elseif (in_array($this->shopId, [ShopId::BEREZKA, ShopId::ARTEFACTS])) {
|
||||
$result = $this->buyer->getEuroCredits() . ' екр.';
|
||||
} elseif ($this->shopId === self::SHOP_2) {
|
||||
} elseif ($this->shopId === ShopId::SHOP_2) {
|
||||
$result = $this->buyer->getVoinstvennost() . ' воинственности.';
|
||||
}
|
||||
return $result;
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Model\Constant;
|
||||
|
||||
use Core\Db;
|
||||
|
||||
class Constant
|
||||
{
|
||||
protected static string $tableName = '';
|
||||
protected array $rows = [];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->rows = Db::getRows('select * from ' . self::$tableName);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace Model\Constant;
|
||||
|
||||
class ShopOtdel extends Constant
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
self::$tableName = 'const_shop_otdels';
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function getName(int $id): string
|
||||
{
|
||||
foreach ($this->rows as $row) {
|
||||
if ($row['id'] === $id) {
|
||||
return $row['name'];
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Âîçâðàùàåò ñïèñîê ãðóïï òîâàðîâ, ãäå id áåð¸òñÿ èç ïåðâîãî òîâàðà â ãðóïïå.
|
||||
* Ëîãèêà ñòðàííàÿ èç çà legacy-ðåøåíèÿ.
|
||||
* @return array
|
||||
*/
|
||||
public function getGroups(): array
|
||||
{
|
||||
$groups = [];
|
||||
foreach ($this->getGrouped() as $name => $arr) {
|
||||
$groups[$name] = array_keys($arr)[0];
|
||||
}
|
||||
return array_flip($groups);
|
||||
}
|
||||
|
||||
public function getGrouped(): array
|
||||
{
|
||||
$result = [];
|
||||
foreach ($this->rows as $row) {
|
||||
//$result[$row['id']] = [$row['name'], $row['group_name']];
|
||||
$result[$row['group_name']][$row['id']] = $row['name'];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Model\Constant;
|
||||
|
||||
|
||||
use Enum\StatFilterCellName;
|
||||
|
||||
class Stat extends Constant
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
self::$tableName = 'const_stats';
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function getBonusNames(): array
|
||||
{
|
||||
return $this->filterByCell(StatFilterCellName::Bonus);
|
||||
}
|
||||
|
||||
private function filterByCell(StatFilterCellName $cellName): array
|
||||
{
|
||||
$result = [];
|
||||
foreach ($this->rows as $row) {
|
||||
if (!$row[$cellName->value]) {
|
||||
continue;
|
||||
}
|
||||
if ($row['sys_name'] === 'level') {
|
||||
$row['sys_name'] = 'lvl';
|
||||
}
|
||||
$result[$row['sys_name']] = $row['name'];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getRequirementNames(): array
|
||||
{
|
||||
return $this->filterByCell(StatFilterCellName::Requirement);
|
||||
}
|
||||
}
|
||||
+96
-98
@@ -11,6 +11,8 @@ use User\InfoBox;
|
||||
use User\ItemsModel;
|
||||
use User\Reputation;
|
||||
use User\Stats;
|
||||
use User\UserCalculatedStats;
|
||||
use User\UserStats;
|
||||
|
||||
class User
|
||||
{
|
||||
@@ -1099,12 +1101,8 @@ class User
|
||||
where users.' . $cell . ' = ?';
|
||||
$result = Db::getRow($query, [$user]);
|
||||
|
||||
$temp = Conversion::dataStringToArray($result['stats']);
|
||||
|
||||
$result['testStats'] = new User\UserStats(
|
||||
$temp
|
||||
);
|
||||
$result['testStats2'] = new \User\UserCalculatedStats($result['testStats']);
|
||||
$result['testStats2'] = new UserCalculatedStats(new UserStats(Conversion::dataStringToArray($result['stats'])));
|
||||
|
||||
return $result ?: [];
|
||||
}
|
||||
@@ -5174,103 +5172,103 @@ class User
|
||||
[$u['id']]);
|
||||
|
||||
|
||||
$t = $this->items['tr'];
|
||||
$x = 0;
|
||||
$notr = 0;
|
||||
$t = $this->items['tr'];
|
||||
$x = 0;
|
||||
$notr = 0;
|
||||
|
||||
if (empty($itm['data'])) {
|
||||
if ($this->info['twink'] > 0) {
|
||||
//Не дороже 100 екр.
|
||||
if ($itm['price2'] > 1 || $itm['2price'] > 1) {
|
||||
$notr++;
|
||||
}
|
||||
}
|
||||
if ($itm['iznosNOW'] >= ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999) {
|
||||
if (empty($itm['data'])) {
|
||||
if ($this->info['twink'] > 0) {
|
||||
//Не дороже 100 екр.
|
||||
if ($itm['price2'] > 1 || $itm['2price'] > 1) {
|
||||
$notr++;
|
||||
}
|
||||
if ($notr > 0 && $itm['inOdet'] != 0) {
|
||||
//снимаем предмет
|
||||
$this->snatItem($itm['id'], $u['id']);
|
||||
$snIt++;
|
||||
}
|
||||
} else {
|
||||
|
||||
$po = Conversion::dataStringToArray($itm['data']);
|
||||
$po['lvl'] = $u['level'];
|
||||
//проверяем требования
|
||||
$j = 1;
|
||||
while ($j <= 4) {
|
||||
if (!isset($po['tr_s' . $j]) && $itm['type'] != 26) {
|
||||
$po['tr_s' . $j] = 0;
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
while ($x < count($t)) {
|
||||
$n = $t[$x];
|
||||
if (isset($po['tr_' . $n]) && $n == 'sex') {
|
||||
if ($po['tr_' . $n] != $this->info['sex']) {
|
||||
$notr++;
|
||||
}
|
||||
} elseif (isset($po['tr_' . $n])) {
|
||||
if ($po['tr_' . $n] > $this->stats[$n] && $n != 'align' && $n != 'align_bs') {
|
||||
$notr++;
|
||||
}
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
if ($this->info['twink'] > 0) {
|
||||
//Не дороже 100 екр.
|
||||
if ($itm['price2'] > 1 || $itm['2price'] > 1) {
|
||||
$notr++;
|
||||
}
|
||||
//Нельзя руны + чарки
|
||||
if (isset($po['rune']) && $po['rune'] > 0) {
|
||||
$notr++;
|
||||
}
|
||||
if (isset($po['spell_id']) && $po['spell_id'] > 0) {
|
||||
$notr++;
|
||||
}
|
||||
}
|
||||
if (isset($po['sudba']) && $po['sudba'] == 1) {
|
||||
$po['sudba'] = $u['login'];
|
||||
Db::sql('update items_users set data = ? where id = ? and uid = ?', [Conversion::arrayToDataString($po), $itm['iduid'], $u['id']]);
|
||||
}
|
||||
|
||||
if (isset($po['srok']) && $po['srok'] > 0) {
|
||||
$itm['srok'] = $po['srok'];
|
||||
}
|
||||
if (isset($po['vip_sale']) && $sn['silver'] < 2 && ($itm['time_create'] - time()) < 0) {
|
||||
if ($itm['item_id'] == 4704) {
|
||||
$po['musor2'] = 4708;
|
||||
}
|
||||
ItemsModel::itemDecay($itm['id'], $itm['overType'], $u['id'], (int)$po['musor2'], $itm['type'], $itm['name']);
|
||||
$notr++;
|
||||
}
|
||||
if ($itm['iznosNOW'] >= ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999) {
|
||||
$notr++;
|
||||
}
|
||||
if ($notr > 0 && $itm['inOdet'] != 0) {
|
||||
//снимаем предмет
|
||||
$this->snatItem($itm['id'], $u['id']);
|
||||
$snIt++;
|
||||
}
|
||||
//проверяем срок годности
|
||||
if ($itm['iznosNOW'] >= ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999 && isset($po['musor']) && $po['musor'] > 0) {
|
||||
//предмет сломался
|
||||
$this->itemDestroy($itm['id'], $u['id'], (int)$po['musor']);
|
||||
}
|
||||
if ($itm['time_create'] + $itm['srok'] <= time() && $itm['srok'] > 0 && $itm['time_sleep'] == 0) {
|
||||
if ($itm['inOdet'] != 0) {
|
||||
$this->snatItem($itm['id'], $u['id']);
|
||||
$snIt++;
|
||||
}
|
||||
//удаляем предмет
|
||||
if ($itm['item_id'] == 4704) {
|
||||
$po['musor2'] = 4708;
|
||||
}
|
||||
ItemsModel::itemDecay($itm['id'], $itm['overType'], $u['id'], (int)$po['musor2'], $itm['type'], $itm['name']);
|
||||
}
|
||||
}
|
||||
if ($itm['iznosNOW'] >= ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999) {
|
||||
$notr++;
|
||||
}
|
||||
if ($notr > 0 && $itm['inOdet'] != 0) {
|
||||
//снимаем предмет
|
||||
$this->snatItem($itm['id'], $u['id']);
|
||||
$snIt++;
|
||||
}
|
||||
} else {
|
||||
|
||||
$po = Conversion::dataStringToArray($itm['data']);
|
||||
$po['lvl'] = $u['level'];
|
||||
//проверяем требования
|
||||
$j = 1;
|
||||
while ($j <= 4) {
|
||||
if (!isset($po['tr_s' . $j]) && $itm['type'] != 26) {
|
||||
$po['tr_s' . $j] = 0;
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
while ($x < count($t)) {
|
||||
$n = $t[$x];
|
||||
if (isset($po['tr_' . $n]) && $n == 'sex') {
|
||||
if ($po['tr_' . $n] != $this->info['sex']) {
|
||||
$notr++;
|
||||
}
|
||||
} elseif (isset($po['tr_' . $n])) {
|
||||
if ($po['tr_' . $n] > $this->stats[$n] && $n != 'align' && $n != 'align_bs') {
|
||||
$notr++;
|
||||
}
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
if ($this->info['twink'] > 0) {
|
||||
//Не дороже 100 екр.
|
||||
if ($itm['price2'] > 1 || $itm['2price'] > 1) {
|
||||
$notr++;
|
||||
}
|
||||
//Нельзя руны + чарки
|
||||
if (isset($po['rune']) && $po['rune'] > 0) {
|
||||
$notr++;
|
||||
}
|
||||
if (isset($po['spell_id']) && $po['spell_id'] > 0) {
|
||||
$notr++;
|
||||
}
|
||||
}
|
||||
if (isset($po['sudba']) && $po['sudba'] == 1) {
|
||||
$po['sudba'] = $u['login'];
|
||||
Db::sql('update items_users set data = ? where id = ? and uid = ?', [Conversion::arrayToDataString($po), $itm['iduid'], $u['id']]);
|
||||
}
|
||||
|
||||
if (isset($po['srok']) && $po['srok'] > 0) {
|
||||
$itm['srok'] = $po['srok'];
|
||||
}
|
||||
if (isset($po['vip_sale']) && $sn['silver'] < 2 && ($itm['time_create'] - time()) < 0) {
|
||||
if ($itm['item_id'] == 4704) {
|
||||
$po['musor2'] = 4708;
|
||||
}
|
||||
ItemsModel::itemDecay($itm['id'], $itm['overType'], $u['id'], (int)$po['musor2'], $itm['type'], $itm['name']);
|
||||
$notr++;
|
||||
}
|
||||
if ($itm['iznosNOW'] >= ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999) {
|
||||
$notr++;
|
||||
}
|
||||
if ($notr > 0 && $itm['inOdet'] != 0) {
|
||||
//снимаем предмет
|
||||
$this->snatItem($itm['id'], $u['id']);
|
||||
$snIt++;
|
||||
}
|
||||
//проверяем срок годности
|
||||
if ($itm['iznosNOW'] >= ceil($itm['iznosMAX']) && $itm['iznosMAXi'] != 999999999 && isset($po['musor']) && $po['musor'] > 0) {
|
||||
//предмет сломался
|
||||
$this->itemDestroy($itm['id'], $u['id'], (int)$po['musor']);
|
||||
}
|
||||
if ($itm['time_create'] + $itm['srok'] <= time() && $itm['srok'] > 0 && $itm['time_sleep'] == 0) {
|
||||
if ($itm['inOdet'] != 0) {
|
||||
$this->snatItem($itm['id'], $u['id']);
|
||||
$snIt++;
|
||||
}
|
||||
//удаляем предмет
|
||||
if ($itm['item_id'] == 4704) {
|
||||
$po['musor2'] = 4708;
|
||||
}
|
||||
ItemsModel::itemDecay($itm['id'], $itm['overType'], $u['id'], (int)$po['musor2'], $itm['type'], $itm['name']);
|
||||
}
|
||||
}
|
||||
if ($snIt > 0) {
|
||||
$this->testItems($uid, $sn, 1);
|
||||
} elseif ($dt == 0) {
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace User;
|
||||
|
||||
class Parameters
|
||||
{
|
||||
public static array $parameterName = [
|
||||
'spasenie' => 'Спасение после смерти',
|
||||
'puti' => 'Запрет перемещения',
|
||||
'align' => 'Склонность',
|
||||
'hpAll' => 'Уровень жизни (HP)',
|
||||
'mpAll' => 'Уровень маны (МP)',
|
||||
'sex' => 'Пол',
|
||||
'lvl' => 'Уровень',
|
||||
's1' => 'Сила',
|
||||
's2' => 'Ловкость',
|
||||
's3' => 'Интуиция',
|
||||
's4' => 'Выносливость',
|
||||
's5' => 'Интеллект',
|
||||
's6' => 'Мудрость',
|
||||
's7' => 'Духовность',
|
||||
'm1' => 'Мф. критического удара (%)',
|
||||
'm2' => 'Мф. против критического удара (%)',
|
||||
'm3' => 'Мф. мощности крит. удара (%)',
|
||||
'm4' => 'Мф. увертывания (%)',
|
||||
'm5' => 'Мф. против увертывания (%)',
|
||||
'm6' => 'Мф. контрудара (%)',
|
||||
'm7' => 'Мф. парирования (%)',
|
||||
'm8' => 'Мф. блока щитом (%)',
|
||||
'm9' => 'Мф. удара сквозь броню (%)',
|
||||
'm14' => 'Мф. абс. критического удара (%)',
|
||||
'm15' => 'Мф. абс. увертывания (%)',
|
||||
'm18' => 'Мф. абс. блока щитом (%)',
|
||||
'm19' => 'Мф. абс. магический промах (%)',
|
||||
'a1' => 'Мастерство владения ножами, кинжалами',
|
||||
'a2' => 'Мастерство владения топорами, секирами',
|
||||
'a3' => 'Мастерство владения дубинами, молотами',
|
||||
'a4' => 'Мастерство владения мечами',
|
||||
'a5' => 'Мастерство владения магическими посохами',
|
||||
'aall' => 'Мастерство владения оружием',
|
||||
'mall' => 'Мастерство владения магией стихий',
|
||||
'mg1' => 'Мастерство владения магией огня',
|
||||
'mg2' => 'Мастерство владения магией воздуха',
|
||||
'mg3' => 'Мастерство владения магией воды',
|
||||
'mg4' => 'Мастерство владения магией земли',
|
||||
'mg7' => 'Мастерство владения серой магией',
|
||||
'minAtack' => 'Минимальный урон бота в пещере',
|
||||
'maxAtack' => 'Максимальный урон бота в пещере',
|
||||
'm10' => 'Мф. мощности урона',
|
||||
'm11' => 'Мф. мощности магии стихий',
|
||||
'pa1' => 'Мф. мощности колющего урона',
|
||||
'pa2' => 'Мф. мощности рубящего урона',
|
||||
'pa3' => 'Мф. мощности дробящего урона',
|
||||
'pa4' => 'Мф. мощности режущего урона',
|
||||
'pm1' => 'Мф. мощности магии огня',
|
||||
'pm2' => 'Мф. мощности магии воздуха',
|
||||
'pm3' => 'Мф. мощности магии воды',
|
||||
'pm4' => 'Мф. мощности магии земли',
|
||||
'pm7' => 'Мф. мощности серой магии',
|
||||
'za' => 'Защита от урона',
|
||||
'zm' => 'Защита от магии стихий',
|
||||
'magic_cast' => 'Дополнительный каст за ход',
|
||||
'min_heal_proc' => 'Эффект лечения (%)',
|
||||
'notravma' => 'Защита от травм',
|
||||
'yron_min' => 'Минимальный урон',
|
||||
'yron_max' => 'Максимальный урон',
|
||||
'speedhp' => 'Регенерация здоровья (%)',
|
||||
'speedmp' => 'Регенерация маны (%)',
|
||||
'tya1' => 'Колющие атаки',
|
||||
'tya2' => 'Рубящие атаки',
|
||||
'tya3' => 'Дробящие атаки',
|
||||
'tya4' => 'Режущие атаки',
|
||||
'tym1' => 'Огненные атаки',
|
||||
'mg2static_points' => 'Уровень заряда (Воздух)',
|
||||
'tym2' => 'Электрические атаки',
|
||||
'tym3' => 'Ледяные атаки',
|
||||
'tym4' => 'Земляные атаки',
|
||||
'tym7' => 'Серые атаки',
|
||||
'min_use_mp' => 'Уменьшает расход маны',
|
||||
'pog' => 'Поглощение урона (прием)',
|
||||
'pog2' => 'Поглощение урона (прием)',
|
||||
'pog2p' => 'Процент поглощение урона (прием)',
|
||||
'pog2mp' => 'Цена поглощение урона (прием)',
|
||||
'maxves' => 'Увеличивает рюкзак',
|
||||
'antm3' => 'Мф. против мощности крита',
|
||||
'repair_z' => 'Бесплатное извлечение заточек',
|
||||
'repair_r' => 'Бесплатное извлечение рун',
|
||||
'rep' => 'Репутация Рыцаря',
|
||||
'repair_discount' => 'Скидка на ремонт вещей',
|
||||
'hpVinos' => 'Бонус жизни',
|
||||
'gold' => 'Благодать Ангела',
|
||||
'speed_dungeon' => 'Скорость передвижения по подземельям',
|
||||
'zona' => 'Дополнительная зона атаки',
|
||||
];
|
||||
|
||||
public static array $parameterNameDeprecated = [];
|
||||
}
|
||||
+106
-235
@@ -5,16 +5,20 @@ namespace User;
|
||||
use Core\Config;
|
||||
use Core\Db;
|
||||
use Helper\Conversion;
|
||||
use Item\Data\Bonuses;
|
||||
use User;
|
||||
|
||||
class Stats
|
||||
{
|
||||
private User $u;
|
||||
private array $sysNames = [];
|
||||
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->u = $user;
|
||||
$this->sysNames = Db::getColumn('select sys_name from const_stats where is_bonus = true');
|
||||
$this->sysNames['hpAll'] = $this->sysNames['hpall'];
|
||||
$this->sysNames['mpAll'] = $this->sysNames['mpall'];
|
||||
unset($this->sysNames['hpall'], $this->sysNames['mpall']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -115,17 +119,6 @@ class Stats
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Присваиваем только разрешенные значения.
|
||||
*/
|
||||
private static function a(&$array, string $key, $value): void
|
||||
{
|
||||
if (!in_array($key, array_keys(Bonuses::getBonusSystemNames()))) {
|
||||
return;
|
||||
}
|
||||
$array[$key] = $value;
|
||||
}
|
||||
|
||||
public function getStats(int|array|null $uid = null, $i1 = 0, $res = 0, $reimg = false, $btl_cache = false): array
|
||||
{
|
||||
if (empty($uid) || $uid == $this->u->info['id'] && $res != 1) {
|
||||
@@ -141,30 +134,8 @@ class Stats
|
||||
return [];
|
||||
}
|
||||
|
||||
$st = [
|
||||
'maxves' => 0,
|
||||
'pzm' => 0,
|
||||
'yza' => 0,
|
||||
'yza1' => 0,
|
||||
'yza2' => 0,
|
||||
'yza3' => 0,
|
||||
'yza4' => 0,
|
||||
'yza5' => 0,
|
||||
'yza6' => 0,
|
||||
'yza7' => 0,
|
||||
'yzm' => 0,
|
||||
'yzm1' => 0,
|
||||
'yzm2' => 0,
|
||||
'yzm3' => 0,
|
||||
'yzm4' => 0,
|
||||
'yzm5' => 0,
|
||||
'yzm6' => 0,
|
||||
'yzm7' => 0,
|
||||
'yzma' => 0,
|
||||
'pbe' => 0,
|
||||
'os7' => 0,
|
||||
'' => 0,
|
||||
];
|
||||
$st = array_fill_keys($this->sysNames, 0);
|
||||
|
||||
$s_vi = [];
|
||||
$s_v = [];
|
||||
$u['clanpos'] = 0;
|
||||
@@ -229,7 +200,6 @@ class Stats
|
||||
item_id, inslot, useInBattle, btl_zd, iznosNOW, iznosMAX, magic_inci, name, items_users.id, img, `2h`
|
||||
from items_users left join items_main on items_main.id = item_id where inOdet != 0 and uid = ?', [$u['id']]);
|
||||
|
||||
$ia = Bonuses::getBonusSystemNames();
|
||||
$h = 0;
|
||||
$hnd1 = 0;
|
||||
$hnd2 = 0;
|
||||
@@ -266,20 +236,8 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
} elseif ($wearedItem['inOdet'] == 14 && $wearedItem['type'] == 13) {
|
||||
$sht1 = 1;
|
||||
}
|
||||
$sts = explode('|', $wearedItem['data']);
|
||||
$i = 0;
|
||||
$sti = [];
|
||||
while ($i < count($sts)) {
|
||||
$ste = explode('=', $sts[$i]);
|
||||
if (isset($ste[1])) {
|
||||
if (!isset($sti[$ste[0]])) {
|
||||
$sti[$ste[0]] = 0;
|
||||
}
|
||||
$sti[$ste[0]] += intval($ste[1]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
$sti = Conversion::dataStringToArray($wearedItem['data']);
|
||||
if ($wearedItem['inOdet'] <= 18 && $wearedItem['inOdet'] > 0) {
|
||||
$st['reting'] += 1;
|
||||
}
|
||||
@@ -436,24 +394,22 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
$st['zona'] += $sti['zona'];
|
||||
}
|
||||
|
||||
|
||||
//Добавляем статы от данного предмета
|
||||
if (!isset($sti['restart_stats'])) {
|
||||
$i = 0;
|
||||
while ($i < count($ia)) {
|
||||
while ($i < count($this->sysNames)) {
|
||||
//Действует на (Действует на)
|
||||
if (isset($ia[$i]) && isset($sti['add_' . $ia[$i]])) {
|
||||
if ($ia[$i] != 'zmproc' && $ia[$i] != 'zaproc') {
|
||||
if (!isset($st[$ia[$i]])) {
|
||||
$st[$ia[$i]] = 0;
|
||||
}
|
||||
$st[$ia[$i]] += intval($sti['add_' . $ia[$i]]);
|
||||
if (isset($this->sysNames[$i]) && isset($sti['add_' . $this->sysNames[$i]])) {
|
||||
if (!isset($st[$this->sysNames[$i]])) {
|
||||
$st[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
if ($this->sysNames[$i] != 'zmproc' && $this->sysNames[$i] != 'zaproc') {
|
||||
$st[$this->sysNames[$i]] += intval($sti['add_' . $this->sysNames[$i]]);
|
||||
} else {
|
||||
if (!isset($st[$ia[$i]])) {
|
||||
$st[$ia[$i]] = 0;
|
||||
}
|
||||
$st[$ia[$i]] = 100 - $st[$ia[$i]];
|
||||
$st[$ia[$i]] = $st[$ia[$i]] - $st[$ia[$i]] / 100 * intval($sti['add_' . $ia[$i]]);
|
||||
$st[$ia[$i]] = 100 - $st[$ia[$i]];
|
||||
$st[$this->sysNames[$i]] = 100 - $st[$this->sysNames[$i]];
|
||||
$st[$this->sysNames[$i]] = $st[$this->sysNames[$i]] - $st[$this->sysNames[$i]] / 100 * intval($sti['add_' . $this->sysNames[$i]]);
|
||||
$st[$this->sysNames[$i]] = 100 - $st[$this->sysNames[$i]];
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
@@ -461,15 +417,16 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
} else {
|
||||
$reitm[] = $sti;
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
while ($i < count($ia)) {
|
||||
if (isset($ia[$i]) && isset($sti['sv_' . $ia[$i]])) {
|
||||
if (!isset($s_v[$ia[$i]])) {
|
||||
$s_v[$ia[$i]] = 0;
|
||||
$s_v['z'][$wearedItem['inOdet']][$ia[$i]] = 0;
|
||||
while ($i < count($this->sysNames)) {
|
||||
if (isset($this->sysNames[$i]) && isset($sti['sv_' . $this->sysNames[$i]])) {
|
||||
if (!isset($s_v[$this->sysNames[$i]])) {
|
||||
$s_v[$this->sysNames[$i]] = 0;
|
||||
$s_v['z'][$wearedItem['inOdet']][$this->sysNames[$i]] = 0;
|
||||
}
|
||||
$s_v[$ia[$i]] += intval($sti['sv_' . $ia[$i]]);
|
||||
$s_v['z'][$wearedItem['inOdet']][$ia[$i]] += intval($sti['sv_' . $ia[$i]]);
|
||||
$s_v[$this->sysNames[$i]] += intval($sti['sv_' . $this->sysNames[$i]]);
|
||||
$s_v['z'][$wearedItem['inOdet']][$this->sysNames[$i]] += intval($sti['sv_' . $this->sysNames[$i]]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
@@ -598,49 +555,48 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
if (isset($sts['add_silver'])) {
|
||||
$st['slvtm'] = $e['timeUse'] + $e['actionTime'];
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
while ($i < count($ia)) {
|
||||
if (isset($ia[$i])) {
|
||||
if (isset($sts['add_' . $ia[$i]])) {
|
||||
if (!isset($sti[$ia[$i]])) {
|
||||
$sti[$ia[$i]] = 0;
|
||||
while ($i < count($this->sysNames)) {
|
||||
if (isset($this->sysNames[$i])) {
|
||||
if (isset($sts['add_' . $this->sysNames[$i]])) {
|
||||
if (!isset($sti[$this->sysNames[$i]])) {
|
||||
$sti[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
$sti[$ia[$i]] += intval($sts['add_' . $ia[$i]]);
|
||||
$sti[$this->sysNames[$i]] += intval($sts['add_' . $this->sysNames[$i]]);
|
||||
}
|
||||
if (isset($sts['add_' . $ia[$i]])) {
|
||||
if ($ia[$i] != 'zaproc' && $ia[$i] != 'zmproc') {
|
||||
if (!isset($st[$ia[$i]])) {
|
||||
$st[$ia[$i]] = 0;
|
||||
}
|
||||
$st[$ia[$i]] += intval($sts['add_' . $ia[$i]]);
|
||||
if (isset($sts['add_' . $this->sysNames[$i]])) {
|
||||
if (!isset($st[$this->sysNames[$i]])) {
|
||||
$st[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
if ($this->sysNames[$i] != 'zaproc' && $this->sysNames[$i] != 'zmproc') {
|
||||
$st[$this->sysNames[$i]] += intval($sts['add_' . $this->sysNames[$i]]);
|
||||
} else {
|
||||
if (!isset($st[$ia[$i]])) {
|
||||
$st[$ia[$i]] = 0;
|
||||
}
|
||||
$st[$ia[$i]] = 100 - $st[$ia[$i]];
|
||||
$st[$ia[$i]] = $st[$ia[$i]] - $st[$ia[$i]] / 100 * intval(
|
||||
$sts['add_' . $ia[$i]]
|
||||
$st[$this->sysNames[$i]] = 100 - $st[$this->sysNames[$i]];
|
||||
$st[$this->sysNames[$i]] = $st[$this->sysNames[$i]] - $st[$this->sysNames[$i]] / 100 * intval(
|
||||
$sts['add_' . $this->sysNames[$i]]
|
||||
);
|
||||
$st[$ia[$i]] = 100 - $st[$ia[$i]];
|
||||
$st[$this->sysNames[$i]] = 100 - $st[$this->sysNames[$i]];
|
||||
}
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
while ($i < count($ia)) {
|
||||
if (isset($ia[$i])) {
|
||||
if (isset($sts['sv_' . $ia[$i]])) {
|
||||
if (!isset($s_vi[$ia[$i]])) {
|
||||
$s_vi[$ia[$i]] = 0;
|
||||
while ($i < count($this->sysNames)) {
|
||||
if (isset($this->sysNames[$i])) {
|
||||
if (isset($sts['sv_' . $this->sysNames[$i]])) {
|
||||
if (!isset($s_vi[$this->sysNames[$i]])) {
|
||||
$s_vi[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
$s_vi[$ia[$i]] += intval($sts['sv_' . $ia[$i]]);
|
||||
$s_vi[$this->sysNames[$i]] += intval($sts['sv_' . $this->sysNames[$i]]);
|
||||
}
|
||||
if (isset($sts['sv_' . $ia[$i]])) {
|
||||
if (!isset($s_v[$ia[$i]])) {
|
||||
$s_v[$ia[$i]] = 0;
|
||||
if (isset($sts['sv_' . $this->sysNames[$i]])) {
|
||||
if (!isset($s_v[$this->sysNames[$i]])) {
|
||||
$s_v[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
$s_v[$ia[$i]] += intval($sts['sv_' . $ia[$i]]);
|
||||
$s_v[$this->sysNames[$i]] += intval($sts['sv_' . $this->sysNames[$i]]);
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
@@ -792,43 +748,45 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
$st['set_pog2'][$ctt]['m'] = $sts['add_pog2mp'];
|
||||
unset($ctt);
|
||||
}
|
||||
$i = 0;
|
||||
while ($i < count($ia)) {
|
||||
if (isset($ia[$i]) && isset($sts['add_' . $ia[$i]])) {
|
||||
if ($ia[$i] != 'zaproc' && $ia[$i] != 'zmproc') {
|
||||
if (!isset($sti[$ia[$i]])) {
|
||||
$sti[$ia[$i]] = 0;
|
||||
}
|
||||
$sti[$ia[$i]] += intval($sts['add_' . $ia[$i]]);
|
||||
if (!isset($st[$ia[$i]])) {
|
||||
$st[$ia[$i]] = 0;
|
||||
}
|
||||
$st[$ia[$i]] += intval($sts['add_' . $ia[$i]]);
|
||||
} else {
|
||||
$sti[$ia[$i]] = 100 - $sti[$ia[$i]];
|
||||
$sti[$ia[$i]] = $sti[$ia[$i]] - $sti[$ia[$i]] / 100 * intval(
|
||||
$sts['add_' . $ia[$i]]
|
||||
);
|
||||
$sti[$ia[$i]] = 100 - $sti[$ia[$i]];
|
||||
|
||||
$st[$ia[$i]] = 100 - $st[$ia[$i]];
|
||||
$st[$ia[$i]] = $st[$ia[$i]] - $st[$ia[$i]] / 100 * intval($sts['add_' . $ia[$i]]);
|
||||
$st[$ia[$i]] = 100 - $st[$ia[$i]];
|
||||
$i = 0;
|
||||
while ($i < count($this->sysNames)) {
|
||||
if (isset($this->sysNames[$i]) && isset($sts['add_' . $this->sysNames[$i]])) {
|
||||
if ($this->sysNames[$i] != 'zaproc' && $this->sysNames[$i] != 'zmproc') {
|
||||
if (!isset($sti[$this->sysNames[$i]])) {
|
||||
$sti[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
$sti[$this->sysNames[$i]] += intval($sts['add_' . $this->sysNames[$i]]);
|
||||
if (!isset($st[$this->sysNames[$i]])) {
|
||||
$st[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
$st[$this->sysNames[$i]] += intval($sts['add_' . $this->sysNames[$i]]);
|
||||
} else {
|
||||
$sti[$this->sysNames[$i]] = 100 - $sti[$this->sysNames[$i]];
|
||||
$sti[$this->sysNames[$i]] = $sti[$this->sysNames[$i]] - $sti[$this->sysNames[$i]] / 100 * intval(
|
||||
$sts['add_' . $this->sysNames[$i]]
|
||||
);
|
||||
$sti[$this->sysNames[$i]] = 100 - $sti[$this->sysNames[$i]];
|
||||
|
||||
$st[$this->sysNames[$i]] = 100 - $st[$this->sysNames[$i]];
|
||||
$st[$this->sysNames[$i]] = $st[$this->sysNames[$i]] - $st[$this->sysNames[$i]] / 100 * intval($sts['add_' . $this->sysNames[$i]]);
|
||||
$st[$this->sysNames[$i]] = 100 - $st[$this->sysNames[$i]];
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
while ($i < count($ia)) {
|
||||
if (isset($ia[$i]) && isset($sts['add_' . $ia[$i]])) {
|
||||
if (!isset($s_vi[$ia[$i]])) {
|
||||
$s_vi[$ia[$i]] = 0;
|
||||
while ($i < count($this->sysNames)) {
|
||||
if (isset($this->sysNames[$i]) && isset($sts['add_' . $this->sysNames[$i]])) {
|
||||
if (!isset($s_vi[$this->sysNames[$i]])) {
|
||||
$s_vi[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
$s_vi[$ia[$i]] += intval($sts['sv_' . $ia[$i]]);
|
||||
if (!isset($s_v[$ia[$i]])) {
|
||||
$s_v[$ia[$i]] = 0;
|
||||
$s_vi[$this->sysNames[$i]] += intval($sts['sv_' . $this->sysNames[$i]]);
|
||||
if (!isset($s_v[$this->sysNames[$i]])) {
|
||||
$s_v[$this->sysNames[$i]] = 0;
|
||||
}
|
||||
$s_v[$ia[$i]] += intval($sts['sv_' . $ia[$i]]);
|
||||
$s_v[$this->sysNames[$i]] += intval($sts['sv_' . $this->sysNames[$i]]);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
@@ -842,90 +800,29 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
|
||||
|
||||
//Характеристики от статов
|
||||
if (!isset($st['hpAll'])) {
|
||||
$st['hpAll'] = 0;
|
||||
}
|
||||
$st['hpAll'] += $st['s4'] * 5;
|
||||
|
||||
if (!isset($st['mpAll'])) {
|
||||
$st['mpAll'] = 0;
|
||||
}
|
||||
$st['mpAll'] += $st['s6'] * 10;
|
||||
|
||||
//Турнир
|
||||
if (!isset($st['m1'])) {
|
||||
$st['m1'] = 0;
|
||||
}
|
||||
$st['m1'] += $st['s3'] * 5;
|
||||
|
||||
|
||||
// мф.анти-крит = 2.5
|
||||
if (!isset($st['m2'])) {
|
||||
$st['m2'] = 0;
|
||||
}
|
||||
$st['m2'] += $st['s3'] * 5;
|
||||
|
||||
// мф.уворот = 2.5
|
||||
if (!isset($st['m4'])) {
|
||||
$st['m4'] = 0;
|
||||
}
|
||||
$st['m4'] += $st['s2'] * 5;
|
||||
|
||||
// мф.анти-уворот = 2.5
|
||||
if (!isset($st['m5'])) {
|
||||
$st['m5'] = 0;
|
||||
}
|
||||
$st['m5'] += $st['s2'] * 5;
|
||||
|
||||
if (!isset($st['za'])) {
|
||||
$st['za'] = 0;
|
||||
}
|
||||
$st['za'] += $st['s4'] * 1.0;
|
||||
|
||||
if (!isset($st['zm'])) {
|
||||
$st['zm'] = 0;
|
||||
}
|
||||
$st['zm'] += $st['s4'] * 0.0;
|
||||
|
||||
if (!isset($st['zaproc'])) { //Тут зм 'zaproc'=>'Защита от урона (%)','zmproc'=>'Защита от магии стихий (%)
|
||||
$st['zaproc'] = 0;
|
||||
}
|
||||
$st['zaproc'] += round($st['s5'] * 0);
|
||||
|
||||
if (!isset($st['m19'])) {
|
||||
$st['m19'] = 0;
|
||||
}
|
||||
$st['m19'] += round($st['s3'] * 0.03);
|
||||
|
||||
//Мощности
|
||||
//Мощность против "Мощность крит. урона". Гамс
|
||||
if (!isset($st['antm3'])) {
|
||||
$st['antm3'] = 0;
|
||||
}
|
||||
$st['antm3'] += $st['s5'] * 0.5;
|
||||
|
||||
|
||||
if (!isset($st['m10'])) {
|
||||
$st['m10'] = 0;
|
||||
}
|
||||
$st['m10'] += 0;
|
||||
|
||||
if (!isset($st['m11'])) {
|
||||
$st['m11'] = 0;
|
||||
}
|
||||
$st['m11'] += 0;
|
||||
|
||||
if (!isset($st['m11a'])) {
|
||||
$st['m11a'] = 0;
|
||||
}
|
||||
$st['m11a'] += 0;
|
||||
|
||||
|
||||
if (!isset($st['m8'])) {
|
||||
$st['m8'] = 0;
|
||||
}
|
||||
$st['m8'] += 0;
|
||||
|
||||
//Бонусы комплектов
|
||||
$i = 0;
|
||||
if (!empty($coms['new']) && is_array($coms['new'])) {
|
||||
@@ -942,9 +839,9 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
//добавляем действия комплекта
|
||||
$ij = 0;
|
||||
$sti = Conversion::dataStringToArray($com['data']);
|
||||
while ($ij < count($ia)) {
|
||||
if (isset($ia[$ij]) && isset($sti[$ia[$ij]])) {
|
||||
$st[$ia[$ij]] += $sti[$ia[$ij]];
|
||||
while ($ij < count($this->sysNames)) {
|
||||
if (isset($this->sysNames[$ij]) && isset($sti[$this->sysNames[$ij]])) {
|
||||
$st[$this->sysNames[$ij]] += $sti[$this->sysNames[$ij]];
|
||||
}
|
||||
$ij++;
|
||||
}
|
||||
@@ -1014,20 +911,11 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
if ($sht1 == 1) {
|
||||
$st['zonb']++;
|
||||
}/* Владения */
|
||||
|
||||
//mib1-mib4, mab1-mab4 armor??
|
||||
|
||||
$i = 1;
|
||||
while ($i <= 7) {
|
||||
if (!isset($st['pm' . $i])) {
|
||||
$st['pm' . $i] = 0;
|
||||
}
|
||||
if (!isset($st['a' . $i])) {
|
||||
$st['a' . $i] = 0;
|
||||
}
|
||||
if (!isset($st['mg' . $i])) {
|
||||
$st['mg' . $i] = 0;
|
||||
}
|
||||
if (!isset($st['zm' . $i])) {
|
||||
$st['zm' . $i] = 0;
|
||||
}
|
||||
if (isset($st['s5'])) {
|
||||
$st['pm' . $i] += $st['s5'] * 0.5;
|
||||
}
|
||||
@@ -1047,26 +935,6 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
$st['zm' . $i] += $st['zma'];
|
||||
}
|
||||
if ($i <= 4) {
|
||||
if (!isset($st['mib' . $i])) {
|
||||
$st['mib' . $i] = 0;
|
||||
}
|
||||
if (!isset($st['mab' . $i])) {
|
||||
$st['mab' . $i] = 0;
|
||||
}
|
||||
if (!isset($st['mg' . $i])) {
|
||||
$st['mg' . $i] = 0;
|
||||
}
|
||||
if (!isset($st['pm' . $i])) {
|
||||
$st['pm' . $i] = 0;
|
||||
}
|
||||
if (!isset($st['pa' . $i])) {
|
||||
$st['pa' . $i] = 0;
|
||||
}
|
||||
if (!isset($st['za' . $i])) {
|
||||
$st['za' . $i] = 0;
|
||||
}
|
||||
$st['mib' . $i] += 0;
|
||||
$st['mab' . $i] += 0;
|
||||
if (isset($st['mall'])) {
|
||||
$st['mg' . $i] += $st['mall'];
|
||||
}
|
||||
@@ -1081,7 +949,9 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}//Уязвимость оружие и магиям
|
||||
}
|
||||
|
||||
//Уязвимость оружие и магиям
|
||||
$i = 1;
|
||||
while ($i <= 7) {
|
||||
$st['yzm' . $i] += $st['yzma'];
|
||||
@@ -1127,7 +997,9 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
$st['mpNow'] = 0;
|
||||
} elseif ($st['mpNow'] > $st['mpAll']) {
|
||||
$st['mpNow'] = $st['mpAll'];
|
||||
}//зоны блока и удара
|
||||
}
|
||||
|
||||
//зоны блока и удара
|
||||
if ($st['zona'] < 1) {
|
||||
$st['zona'] = 1;
|
||||
}
|
||||
@@ -1140,6 +1012,7 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
if ($st['zonb'] > 3) {
|
||||
$st['zonb'] = 3;
|
||||
}
|
||||
|
||||
$st['ozash'] = $oza;
|
||||
$st['ozmsh'] = $ozm;
|
||||
$st['weapon1'] = $hnd1;
|
||||
@@ -1154,18 +1027,14 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
$st['y'] = $u['y'];
|
||||
$st['s'] = $u['s'];
|
||||
|
||||
$st['reting'] = 1 + ceil($st['reting']);
|
||||
|
||||
|
||||
$this->addDungeonsBonuses($u['id'], $st);
|
||||
|
||||
|
||||
//Добавочный подьем для игроков
|
||||
$st['maxves'] += 500;
|
||||
$st['maxves'] += 100;
|
||||
|
||||
if ($u['admin'] > 0) { // ускоренная регенерация и пробег по подземелью
|
||||
$st['speed_dungeon'] = 1000;
|
||||
$st['speedhp'] = 1000;
|
||||
$st['speed_dungeon'] = 500;
|
||||
$st['speedhp'] = 500;
|
||||
if ($u['battle']) {
|
||||
Db::sql("update stats set
|
||||
tactic1 = tactic2 = tactic3 = tactic4 = tactic5 = tactic6 = tactic7 = 25,
|
||||
@@ -1176,7 +1045,9 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
|
||||
if (date('H') >= 22 && date('H') <= 10) {
|
||||
$st['exp'] += 25;
|
||||
}//Сохраняем рейтинг игрока
|
||||
}
|
||||
|
||||
//Сохраняем рейтинг игрока
|
||||
$st['reting'] = floor($st['reting']);
|
||||
|
||||
if (isset($st['btl_cof'], $st['prckr']) && $st['btl_cof'] != $st['prckr']) {
|
||||
@@ -1227,7 +1098,7 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
|
||||
$sts = Conversion::dataStringToArray($data);
|
||||
foreach ($sts as $paramName => $value) {
|
||||
//todo убедиться, что не могут прилететь параметры, которых нет в словарей бонусов предметов
|
||||
if (!str_contains(implode(',', Bonuses::getBonusSystemNames()), 'add_' . $paramName)) { // есть ли параметр в разрешенных?
|
||||
if (!str_contains(implode(',', $this->sysNames), 'add_' . $paramName)) { // есть ли параметр в разрешенных?
|
||||
continue;
|
||||
}
|
||||
if (empty($st['add_' . $paramName])) {
|
||||
|
||||
@@ -4,53 +4,59 @@ namespace User;
|
||||
|
||||
class UserCalculatedStats
|
||||
{
|
||||
private UserStats $userStats;
|
||||
private UserStats $baseUserStats;
|
||||
public int $hpAll;
|
||||
public int $mpAll;
|
||||
|
||||
public function __construct(
|
||||
private readonly UserStats $us
|
||||
) {
|
||||
UserStats $userStats
|
||||
)
|
||||
{
|
||||
$this->userStats = $userStats;
|
||||
$this->baseUserStats = $userStats;
|
||||
$this->hpAll = $this->hpAll();
|
||||
$this->mpAll = $this->mpAll();
|
||||
}
|
||||
|
||||
private function hpAll(): int
|
||||
{
|
||||
$hpAll = $this->us->s4 * 5;
|
||||
$hpAll += match (true){
|
||||
$this->us->s4 >= 200 => 850,
|
||||
$this->us->s4 >= 175 => 600,
|
||||
$this->us->s4 >= 150 => 450,
|
||||
$this->us->s4 >= 125 => 400,
|
||||
$this->us->s4 >= 100 => 250,
|
||||
$this->us->s4 >= 75 => 175,
|
||||
$this->us->s4 >= 50 => 100,
|
||||
$this->us->s4 >= 25 => 50,
|
||||
$hpAll = $this->userStats->s4 * 5;
|
||||
$hpAll += match (true) {
|
||||
$this->userStats->s4 >= 200 => 850,
|
||||
$this->userStats->s4 >= 175 => 600,
|
||||
$this->userStats->s4 >= 150 => 450,
|
||||
$this->userStats->s4 >= 125 => 400,
|
||||
$this->userStats->s4 >= 100 => 250,
|
||||
$this->userStats->s4 >= 75 => 175,
|
||||
$this->userStats->s4 >= 50 => 100,
|
||||
$this->userStats->s4 >= 25 => 50,
|
||||
default => 0
|
||||
};
|
||||
return $hpAll;
|
||||
}
|
||||
|
||||
private function mpAll():int
|
||||
private function mpAll(): int
|
||||
{
|
||||
$mpAll = $this->us->s6 * 10;
|
||||
$mpAll = $this->userStats->s6 * 10;
|
||||
$mpAll += match (true) {
|
||||
$this->us->s6 >= 200 => 1500,
|
||||
$this->us->s6 >= 175 => 900,
|
||||
$this->us->s6 >= 150 => 700,
|
||||
$this->us->s6 >= 125 => 500,
|
||||
$this->us->s6 >= 100 => 350,
|
||||
$this->us->s6 >= 75 => 250,
|
||||
$this->us->s6 >= 50 => 150,
|
||||
$this->us->s6 >= 25 => 50,
|
||||
$this->userStats->s6 >= 200 => 1500,
|
||||
$this->userStats->s6 >= 175 => 900,
|
||||
$this->userStats->s6 >= 150 => 700,
|
||||
$this->userStats->s6 >= 125 => 500,
|
||||
$this->userStats->s6 >= 100 => 350,
|
||||
$this->userStats->s6 >= 75 => 250,
|
||||
$this->userStats->s6 >= 50 => 150,
|
||||
$this->userStats->s6 >= 25 => 50,
|
||||
default => 0
|
||||
};
|
||||
return $mpAll;
|
||||
}
|
||||
|
||||
public function __toString():string
|
||||
public function __toString(): string
|
||||
{
|
||||
$arr = [];
|
||||
foreach ($this as $k=>$v) {
|
||||
foreach ($this as $k => $v) {
|
||||
if (empty($v) || $k === 'us') {
|
||||
continue;
|
||||
}
|
||||
@@ -62,7 +68,7 @@ class UserCalculatedStats
|
||||
public function __debugInfo()
|
||||
{
|
||||
$arr = [];
|
||||
foreach ($this as $k=>$v) {
|
||||
foreach ($this as $k => $v) {
|
||||
if ($k === 'us') {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -21,12 +21,8 @@ readonly class UserStats
|
||||
public int $mg3;
|
||||
public int $mg4;
|
||||
public int $mg7;
|
||||
//public int $hpAll;
|
||||
//public int $mpAll;
|
||||
|
||||
public function __construct(
|
||||
array $a
|
||||
)
|
||||
public function __construct(array $a)
|
||||
{
|
||||
$this->s1 = $a['s1'] ?? 0;
|
||||
$this->s2 = $a['s2'] ?? 0;
|
||||
@@ -45,53 +41,6 @@ readonly class UserStats
|
||||
$this->mg3 = max($a['mg3'] ?? 0, $a['mall'] ?? 0);
|
||||
$this->mg4 = max($a['mg4'] ?? 0, $a['mall'] ?? 0);
|
||||
$this->mg7 = $a['mg7'] ?? 0;
|
||||
//$this->hpAll = $this->hpAll();
|
||||
//$this->mpAll = $this->mpAll();
|
||||
}
|
||||
|
||||
/*private function hpAll(): int
|
||||
{
|
||||
$hpAll = $this->s4 * 5;
|
||||
$hpAll += match (true){
|
||||
$this->s4 >= 200 => 850,
|
||||
$this->s4 >= 175 => 600,
|
||||
$this->s4 >= 150 => 450,
|
||||
$this->s4 >= 125 => 400,
|
||||
$this->s4 >= 100 => 250,
|
||||
$this->s4 >= 75 => 175,
|
||||
$this->s4 >= 50 => 100,
|
||||
$this->s4 >= 25 => 50,
|
||||
default => 0
|
||||
};
|
||||
return $hpAll;
|
||||
}
|
||||
|
||||
private function mpAll():int
|
||||
{
|
||||
$mpAll = $this->s6 * 10;
|
||||
$mpAll += match (true) {
|
||||
$this->s6 >= 200 => 1500,
|
||||
$this->s6 >= 175 => 900,
|
||||
$this->s6 >= 150 => 700,
|
||||
$this->s6 >= 125 => 500,
|
||||
$this->s6 >= 100 => 350,
|
||||
$this->s6 >= 75 => 250,
|
||||
$this->s6 >= 50 => 150,
|
||||
$this->s6 >= 25 => 50,
|
||||
default => 0
|
||||
};
|
||||
return $mpAll;
|
||||
}*/
|
||||
public function __toString():string
|
||||
{
|
||||
$arr = [];
|
||||
foreach ($this as $k=>$v) {
|
||||
if (empty($v)) {
|
||||
continue;
|
||||
}
|
||||
$arr[$k] = $v;
|
||||
}
|
||||
return json_encode($arr);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user