Перенос разрозненных файлов в фабрику. Утилизация неиспользуемых функций. #49

This commit is contained in:
2023-12-05 03:01:04 +02:00
committed by Ivor Barhansky
parent c51dbaeae3
commit 8be1c6cd7e
79 changed files with 12178 additions and 12956 deletions
+195 -330
View File
@@ -6,6 +6,7 @@ use Core\Config;
use Core\Db;
use Helper\Comparsion;
use Helper\Conversion;
use Model\Constant\Stat;
use User;
class Stats
@@ -17,13 +18,13 @@ class Stats
*/
private array $sysNames;
private array $statsKeys = [];
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']);
$this->sysNames = (new Stat())->getBonusNames();
}
/**
@@ -112,7 +113,7 @@ class Stats
return (object)[
'uid' => $u->info['id'],
'login' => $u->getLogin(),
'login' => User::getLogin($u->info['id']),
'hpbarwidth' => $ph,
'mpbarwidth' => $pm,
'hpbartext' => ' ' . $hpNow . '/' . $hpAll,
@@ -146,8 +147,8 @@ class Stats
$u['clanpos'] = 0;
if ($u['clan'] > 0) {
$r1 = Db::getValue('select pos from aaa_clan_reting_list where clan = ? and date = ? limit 1', [$u['clan'], date('dmY')]);
if (!empty($r1)) {
$st['clanpos'] = $r1;
if ($r1) {
$this->addKeyIfNotExist('clanpos', $r1, $st);
}
}
$lvl = Db::getRow('select * from levels where upLevel = ?', [$u['upLevel']]);
@@ -160,27 +161,21 @@ class Stats
$st['id'] = $u['id'];
$st['login'] = $u['login'];
$st['lvl'] = $u['level'];
$st['level'] = $u['level'];
$st['hpNow'] = $u['hpNow'];
$st['hpAll'] = 0;
$st['mpNow'] = $u['mpNow'];
$st['mpAll'] = 0;
$st['zona'] = 1;
$st['zonb'] = 2;
$st['items'] = [];
$st['effects'] = [];
$st['reting'] = 0;
$st['vip'] = $u['vip'];
$stats = Conversion::dataStringToArray($u['stats']);
foreach ($stats as $stat => $value) {
if (isset($st[$stat]) && is_numeric($value)) {
$st[$stat] += $value;
} else {
$st[$stat] = $value;
}
foreach (Conversion::dataStringToArray($u['stats']) as $stat => $value) {
$this->addKeyIfNotExist($stat, (int)$value, $st);
}
unset($stats);
$baseStats = $st;
@@ -245,10 +240,10 @@ class Stats
$nbs[$sts['itempl']] += 1;
}
if (isset($sts['puti'])) {
$st['puti'] = $sts['puti'];
$this->addKeyIfNotExist('puti', $sts['puti'], $st);
}
if (isset($sts['add_silver'])) {
$st['slvtm'] = $e['timeUse'] + $e['actionTime'];
$this->addKeyIfNotExist('slvtm', $e['timeUse'] + $e['actionTime'], $st);
}
$this->addValuesToAllArrays($sts, $st, $sti, $s_v, $s_vi);
@@ -276,8 +271,8 @@ class Stats
$this->addInBattlePriemsBonuses($u, $st, $prsu, $sti, $s_v, $s_vi);
//Характеристики от статов
$st['hpAll'] += $st['s4'] * 5;
$st['mpAll'] += $st['s6'] * 10;
$st['hpall'] += $st['s4'] * 5;
$st['mpall'] += $st['s6'] * 10;
//Турнир
$st['m1'] += $st['s3'] * 5;
@@ -291,7 +286,6 @@ class Stats
// мф.анти-уворот = 2.5
$st['m5'] += $st['s2'] * 5;
$st['za'] += $st['s4'] * 1.0;
$st['zm'] += $st['s4'] * 0.0;
$st['m19'] += round($st['s3'] * 0.03);
@@ -322,49 +316,8 @@ class Stats
}
}
//Замена свитков
if ($u['autospell'] != 0 && $u['battle'] == 0) {
//проверяем свитки
$sparr = [];
foreach (Db::getRows('select item_id, inOdet from items_users where inOdet between 40 and 50 and uid = ? order by item_id desc', [$u['id']]) as $scroll) {
$sparr[] = "{$scroll['item_id']} - {$scroll['inOdet']}";
}
$splink = implode(',', $sparr);
//Запоминаем новый комплект свитков
if ($u['autospell'] == 1) {
$u['autospell'] = $splink;
Db::sql('update users set autospell = ? where id = ?', [$splink, $u['id']]);
}
//Выдаем нужный свиток, если он есть в инвентаре
if ($u['autospell'] != $splink) {
$spe1 = explode(',', $splink);
$spe2 = explode(',', $u['autospell']);
$spe1g = [];
$spe2g = [];
for ($i = 0; $i <= 20; $i++) {
$spe1a = explode('-', $spe1[$i]);
$spe2a = explode('-', $spe2[$i]);
if (isset($spe1a[0])) {
$spe1g[$spe1a[1]] = $spe1a[0];
}
if (isset($spe2a[0])) {
$spe2g[$spe2a[1]] = $spe2a[0];
}
}
for ($i = 40; $i <= 50; $i++) {
if ($spe1g[$i] == $spe2g[$i] || $spe1g[$i] != 0) {
continue;
}
Db::sql('update items_users set inOdet = ? where inOdet = 0 and `delete` = 0 and inTransfer = 0 and inShop = 0 and inGroup = 0 and item_id = ? and uid = ?',
[$i, $spe2g[$i], $u['id']]);
}
}
}
//Что за нахер?
WearedScrolls::ScrollsChange($u);
//Бонусы статов
$this->addStatBonuses($st);
@@ -384,8 +337,6 @@ class Stats
$st['pm2'] += $st['s5'] * 0.5;
$st['pm3'] += $st['s5'] * 0.5;
$st['pm4'] += $st['s5'] * 0.5;
$st['pm5'] += $st['s5'] * 0.5;
$st['pm6'] += $st['s5'] * 0.5;
$st['pm7'] += $st['s5'] * 0.5;
}
@@ -394,8 +345,6 @@ class Stats
$st['pm2'] += $st['m11a'] * 0.5;
$st['pm3'] += $st['m11a'] * 0.5;
$st['pm4'] += $st['m11a'] * 0.5;
$st['pm5'] += $st['m11a'] * 0.5;
$st['pm6'] += $st['m11a'] * 0.5;
$st['pm7'] += $st['m11a'] * 0.5;
}
@@ -405,8 +354,6 @@ class Stats
$st['a3'] += $st['aall'];
$st['a4'] += $st['aall'];
$st['a5'] += $st['aall'];
$st['a6'] += $st['aall'];
$st['a7'] += $st['aall'];
}
if (isset($st['m2all'])) {
@@ -414,8 +361,6 @@ class Stats
$st['mg2'] += $st['m2all'];
$st['mg3'] += $st['m2all'];
$st['mg4'] += $st['m2all'];
$st['mg5'] += $st['m2all'];
$st['mg6'] += $st['m2all'];
$st['mg7'] += $st['m2all'];
}
@@ -445,18 +390,21 @@ class Stats
$st['mg3'] += $st['mall'];
$st['mg4'] += $st['mall'];
}
if (isset($st['m11'])) {
$st['pm1'] += $st['m11'];
$st['pm2'] += $st['m11'];
$st['pm3'] += $st['m11'];
$st['pm4'] += $st['m11'];
}
if (isset($st['m10'])) {
$st['pa1'] += $st['m10'];
$st['pa2'] += $st['m10'];
$st['pa3'] += $st['m10'];
$st['pa4'] += $st['m10'];
}
if (isset($st['za'])) {
$st['za1'] += $st['za'];
$st['za2'] += $st['za'];
@@ -464,72 +412,23 @@ class Stats
$st['za4'] += $st['za'];
}
$st['yzm1'] += $st['yzma'];
$st['yzm2'] += $st['yzma'];
$st['yzm3'] += $st['yzma'];
$st['yzm4'] += $st['yzma'];
$st['yzm5'] += $st['yzma'];
$st['yzm6'] += $st['yzma'];
$st['yzm7'] += $st['yzma'];
$st['yzm1'] += $st['yzm'];//стихийный урон только
$st['yzm2'] += $st['yzm'];
$st['yzm3'] += $st['yzm'];
$st['yzm4'] += $st['yzm'];
$st['yza1'] += $st['yza'];//урон оружия
$st['yza2'] += $st['yza'];
$st['yza3'] += $st['yza'];
$st['yza4'] += $st['yza'];
//Отнимает от защиты от урона
if ($st['yza1'] > 0) {
$st['za1'] = max($st['za1'] / 100 * (100 + $st['yza1']), 0);
}
if ($st['yza2'] > 0) {
$st['za2'] = max($st['za2'] / 100 * (100 + $st['yza2']), 0);
}
if ($st['yza3'] > 0) {
$st['za3'] = max($st['za3'] / 100 * (100 + $st['yza3']), 0);
}
if ($st['yza4'] > 0) {
$st['za4'] = max($st['za4'] / 100 * (100 + $st['yza4']), 0);
}
//Отнимает от защиты от магии
if ($st['yzm1'] > 0) {
$st['zm1'] = max($st['zm1'] / 100 * (100 + $st['yzm1']), 0);
}
if ($st['yzm2'] > 0) {
$st['zm2'] = max($st['zm2'] / 100 * (100 + $st['yzm2']), 0);
}
if ($st['yzm3'] > 0) {
$st['zm3'] = max($st['zm3'] / 100 * (100 + $st['yzm3']), 0);
}
if ($st['yzm4'] > 0) {
$st['zm4'] = max($st['zm4'] / 100 * (100 + $st['yzm4']), 0);
}
if ($st['yzm7'] > 0) {
$st['zm7'] = max($st['zm7'] / 100 * (100 + $st['yzm7']), 0);
}
if (!empty($st['hpVinos'])) {
$st['hpAll'] += round($st['hpVinos'] * $st['s4']);
$st['hpall'] += round($st['hpVinos'] * $st['s4']);
}
if (!empty($st['mpVinos'])) {
$st['mpAll'] += round($st['mpVinos'] * $st['s6']);
$st['mpall'] += round($st['mpVinos'] * $st['s6']);
}
if (!empty($st['hpProc'])) {
$st['hpAll'] += round($st['hpAll'] / 100 * $st['hpProc']);
$st['hpall'] += round($st['hpall'] / 100 * $st['hpProc']);
}
if (!empty($st['mpProc'])) {
$st['mpAll'] += round($st['mpAll'] / 100 * $st['mpProc']);
$st['mpall'] += round($st['mpall'] / 100 * $st['mpProc']);
}
//Реген. - 250 ед.
//конец бонусов
$st['hpNow'] = Comparsion::minimax($st['hpNow'], 0, $st['hpAll']);
$st['mpNow'] = Comparsion::minimax($st['mpNow'], 0, $st['mpAll']);
$st['hpNow'] = Comparsion::minimax($st['hpNow'], 0, $st['hpall']);
$st['mpNow'] = Comparsion::minimax($st['mpNow'], 0, $st['mpall']);
//зоны блока и удара
if ($st['zona'] < 1) {
@@ -562,27 +461,24 @@ class Stats
$this->addDungeonsBonuses($u['id'], $st);
//Добавочный подьем для игроков
$st['maxves'] += 100;
$this->addKeyIfNotExist('maxves', 100, $st);
$this->addAdminBonuses($u, $st);
if (date('H') >= 22 && date('H') <= 10) {
$st['exp'] += 25;
$this->addKeyIfNotExist('exp', 25, $st);
}
//Сохраняем рейтинг игрока
$st['reting'] = floor($st['reting']);
if (isset($st['btl_cof'], $st['prckr']) && $st['btl_cof'] != $st['prckr']) {
$st['btl_cof'] = $st['prckr'];
Db::sql('update stats set btl_cof = ? where id = ?', [$st['prckr'], $st['id']]);
}
if ($st['hpAll'] < 1) {
$st['hpAll'] = 1;
if ($st['hpall'] < 1) {
$st['hpall'] = 1;
}
if ($st['mpAll'] < 0) {
$st['mpAll'] = 0;
if ($st['mpall'] < 0) {
$st['mpall'] = 0;
}
if (stristr($u['login'], '(зверь ') || (stristr($u['login'], 'Каменный страж') && $u['ip'] == '0')) {
@@ -591,6 +487,8 @@ class Stats
$st['this_animal'] = 0;
}
$this->renameArrayKeys($st);
$rt = [];
if ($i1 == 1) {
$rt[0] = $st;
@@ -598,8 +496,8 @@ class Stats
} else {
$rt = $st;
}
if ($u['hpAll'] != $st['hpAll'] || $u['mpAll'] != $st['mpAll']) {
Db::sql('update stats set hpAll = ?, mpAll = ? where id = ?', [$st['hpAll'], $st['mpAll'], $u['id']]);
if ($u['hpAll'] != $st['hpall'] || $u['mpAll'] != $st['mpall']) {
Db::sql('update stats set hpAll = ?, mpAll = ? where id = ?', [$st['hpall'], $st['mpall'], $u['id']]);
}
if ($btl_cache) {
$dataca = [
@@ -610,10 +508,24 @@ class Stats
Db::sql('insert into battle_cache (battle, uid, time, data) values (?,?,unix_timestamp(),?)', [$u['battle'], $u['id'], $dataca]);
}
return $rt;
}
/** Собираем динамически создаваемые параметры. Если ключа нет - создаём.
* @param string $key
* @param int $value
* @param array $st
* @return void
*/
private function addKeyIfNotExist(string $key, int $value, array &$st): void
{
if (!isset($st[$key])) {
$st[$key] = 0;
$this->statsKeys[] = $key;
}
$st[$key] += $value;
}
private function addWearedItemsBonuses(int $uid, array &$st, array &$s_v, array $baseStats): array
{
//Характеристики от предметов //ТУТ tr_lvl
@@ -643,10 +555,16 @@ class Stats
4 => [0, 0],
]; //особенности магии
$st['reting'] = 0;
$ozaozmtypes = [
1 => [1, 9,],//Слабая
2 => [20, 39,],//Нормальная
3 => [40, 69,],//Хорошая
4 => [10, 19,],//Посредственная
5 => [70, 89,],//Великолепная
];
foreach ($wearedItems as $wearedItem) {
$st['wp' . $wearedItem['inOdet'] . 'id'] = $h;
$this->addKeyIfNotExist('wp' . $wearedItem['inOdet'] . 'id', $h, $st);
$st['items'][$h] = $wearedItem;
$h++;
@@ -667,211 +585,149 @@ class Stats
$sht1 = 1;
}
$sti = Conversion::dataStringToArray($wearedItem['data']);
$data = Conversion::dataStringToArray($wearedItem['data']);
if ($wearedItem['inOdet'] <= 18 && $wearedItem['inOdet'] > 0) {
$st['reting'] += 1;
$this->addKeyIfNotExist('reting', 1, $st);
}
$ko = 1;
while ($ko <= 4) {
if (isset($sti['add_oza' . $ko])) {
if (isset($sti['add_oza'])) {
if ($sti['add_oza'] == 1) {
//Слабая
$oza[$ko][0] += 1;
$oza[$ko][1] += 9;
} elseif ($sti['add_oza'] == 2) {
//Нормальная
$oza[$ko][0] += 20;
$oza[$ko][1] += 39;
} elseif ($sti['add_oza'] == 3) {
//Хорошая
$oza[$ko][0] += 40;
$oza[$ko][1] += 69;
} elseif ($sti['add_oza'] == 4) {
//Посредственная
$oza[$ko][0] += 10;
$oza[$ko][1] += 19;
} elseif ($sti['add_oza'] == 5) {
//Великолепная
$oza[$ko][0] += 70;
$oza[$ko][1] += 89;
}
}
if (isset($sti['add_ozm'])) {
if ($sti['add_ozm'] == 1) {
//Слабая
$ozm[$ko][0] += 1;
$ozm[$ko][1] += 9;
} elseif ($sti['add_ozm'] == 2) {
//Нормальная
$ozm[$ko][0] += 20;
$ozm[$ko][1] += 39;
} elseif ($sti['add_ozm'] == 3) {
//Хорошая
$ozm[$ko][0] += 40;
$ozm[$ko][1] += 69;
} elseif ($sti['add_ozm'] == 4) {
//Посредственная
$ozm[$ko][0] += 10;
$ozm[$ko][1] += 19;
} elseif ($sti['add_ozm'] == 5) {
//Великолепная
$ozm[$ko][0] += 70;
$ozm[$ko][1] += 89;
}
} else {
$ozm[$ko][0] += 1;
$ozm[$ko][1] += 9;
}
if ($sti['add_oza' . $ko] == 1) {
//Слабая
$oza[$ko][0] += 1;
$oza[$ko][1] += 9;
} elseif ($sti['add_oza' . $ko] == 2) {
//Нормальная
$oza[$ko][0] += 20;
$oza[$ko][1] += 39;
} elseif ($sti['add_oza' . $ko] == 3) {
//Хорошая
$oza[$ko][0] += 40;
$oza[$ko][1] += 69;
} elseif ($sti['add_oza' . $ko] == 4) {
//Посредственная
$oza[$ko][0] += 10;
$oza[$ko][1] += 19;
} elseif ($sti['add_oza' . $ko] == 5) {
//Великолепная
$oza[$ko][0] += 70;
$oza[$ko][1] += 89;
}
if (isset($sti['add_ozm' . $ko])) {
if ($sti['add_ozm' . $ko] == 1) {
//Слабая
$ozm[$ko][0] += 1;
$ozm[$ko][1] += 9;
} elseif ($sti['add_ozm' . $ko] == 2) {
//Нормальная
$ozm[$ko][0] += 20;
$ozm[$ko][1] += 39;
} elseif ($sti['add_ozm' . $ko] == 3) {
//Хорошая
$ozm[$ko][0] += 40;
$ozm[$ko][1] += 69;
} elseif ($sti['add_ozm' . $ko] == 4) {
//Посредственная
$ozm[$ko][0] += 10;
$ozm[$ko][1] += 19;
} elseif ($sti['add_ozm' . $ko] == 5) {
//Великолепная
$ozm[$ko][0] += 70;
$ozm[$ko][1] += 89;
}
} else {
$ozm[$ko][0] += 1;
$ozm[$ko][1] += 9;
}
}
$ko++;
if (isset($data['add_oza'])) {
$oza = array_fill_keys($oza, $ozaozmtypes[$data['add_oza']]);
}
if (isset($sti['art'])) {
if (!isset($st['art'])) {
$st['art'] = 0;
}
$st['art'] += $sti['art'];
if (isset($data['add_ozm'])) {
$ozm = array_fill_keys($ozm, $ozaozmtypes[$data['add_ozm']]);
} else {
$ozm = array_fill_keys($ozm, $ozaozmtypes[1]);
}
if (isset($sti['maks_itm'])) {
if (!isset($st['maks_itm'])) {
$st['maks_itm'] = 0;
}
$st['maks_itm'] += $sti['maks_itm'];
if (in_array($data['add_oza1'], range(1, 5))) {
$oza[1] = $ozaozmtypes[$data['add_oza1']];
}
if (isset($sti['complect'])) {
$coms[count($coms)]['id'] = $sti['complect'];
if (!isset($coms['com'][$sti['complect']])) {
$coms['com'][$sti['complect']] = 0;
if (in_array($data['add_oza2'], range(1, 5))) {
$oza[2] = $ozaozmtypes[$data['add_oza2']];
}
if (in_array($data['add_oza3'], range(1, 5))) {
$oza[3] = $ozaozmtypes[$data['add_oza3']];
}
if (in_array($data['add_oza4'], range(1, 5))) {
$oza[4] = $ozaozmtypes[$data['add_oza4']];
}
if (in_array($data['add_ozm1'], range(1, 5))) {
$ozm[1] = $ozaozmtypes[$data['add_ozm1']];
} else {
$ozm[1] = $ozaozmtypes[1];
}
if (in_array($data['add_ozm2'], range(1, 5))) {
$ozm[2] = $ozaozmtypes[$data['add_ozm2']];
} else {
$ozm[2] = $ozaozmtypes[1];
}
if (in_array($data['add_ozm3'], range(1, 5))) {
$ozm[3] = $ozaozmtypes[$data['add_ozm3']];
} else {
$ozm[3] = $ozaozmtypes[1];
}
if (in_array($data['add_ozm4'], range(1, 5))) {
$ozm[4] = $ozaozmtypes[$data['add_ozm4']];
} else {
$ozm[4] = $ozaozmtypes[1];
}
if (isset($data['art'])) {
$this->addKeyIfNotExist('art', $data['art'], $st);
}
if (isset($data['maks_itm'])) {
$this->addKeyIfNotExist('maks_itm', $data['maks_itm'], $st);
}
if (isset($data['complect'])) {
$coms[count($coms)]['id'] = $data['complect'];
if (!isset($coms['com'][$data['complect']])) {
$coms['com'][$data['complect']] = 0;
if (!isset($coms['new'])) {
$coms['new'] = [];
}
$coms['new'][count($coms['new'])] = $sti['complect'];
$coms['new'][count($coms['new'])] = $data['complect'];
}
$coms['com'][$sti['complect']]++;
$coms['com'][$data['complect']]++;
}
if (isset($sti['complect2'])) {
$coms[count($coms)]['id'] = $sti['complect2'];
if (!isset($coms['com'][$sti['complect2']])) {
$coms['com'][$sti['complect2']] = 0;
if (isset($data['complect2'])) {
$coms[count($coms)]['id'] = $data['complect2'];
if (!isset($coms['com'][$data['complect2']])) {
$coms['com'][$data['complect2']] = 0;
if (!isset($coms['new'])) {
$coms['new'] = [];
}
$coms['new'][count($coms['new'])] = $sti['complect2'];
$coms['new'][count($coms['new'])] = $data['complect2'];
}
$coms['com'][$sti['complect2']]++;
$coms['com'][$data['complect2']]++;
}
if (isset($sti['zonb']) && $sti['zonb'] != 0) {
if (!isset($st['zonb'])) {
$st['zonb'] = 0;
}
$st['zonb'] += $sti['zonb'];
if (!empty($data['zonb'])) {
$this->addKeyIfNotExist('zonb', $data['zonb'], $st);
}
if (isset($sti['zona']) && $sti['zona'] != 0) {
if (!isset($st['zona'])) {
$st['zona'] = 0;
}
$st['zona'] += $sti['zona'];
if (!empty($data['zona'])) {
$this->addKeyIfNotExist('zona', $data['zona'], $st);
}
//Добавляем статы от данного предмета
if (!isset($sti['restart_stats'])) {
if (!isset($data['restart_stats'])) {
foreach ($this->sysNames as $stat) {
if (!isset($sti['add_' . $stat])) {
if (!isset($data['add_' . $stat])) {
continue;
}
$st[$stat] += (int)$sti['add_' . $stat];
$st[$stat] += (int)$data['add_' . $stat];
}
} else {
$reitm[] = $sti;
$reitm[] = $data;
}
foreach ($this->sysNames as $stat) {
if (!isset($sti['sv_' . $stat])) {
if (!isset($data['sv_' . $stat])) {
continue;
}
$s_v[$stat] += (int)$sti['sv_' . $stat];
$s_v[$stat] += (int)$data['sv_' . $stat];
}
}
//Сохраненные хар-ки и умения
if (!empty($reitm)) {
$i39 = [0 => 0, 1 => 0, 2 => 0];
$i = 0;
while ($i < count($reitm)) {
if (isset($reitm[$i]['sm_skill']) && $i39[0] == 0) {
if (!empty($reitm) && is_iterable($reitm)) {
$i39 = [];
foreach ($reitm as $item) {
if (isset($item['sm_skill']) && $i39[0] == 0) {
//умения
$i9 = 1;
$i39[0] = 1;
while ($i9 <= 7) {
$st['a' . $i9] = $st['a' . $i9] - $baseStats['a' . $i9] + $reitm[$i]['add_a' . $i9];
$st['mg' . $i9] = $st['mg' . $i9] - $baseStats['mg' . $i9] + $reitm[$i]['add_mg' . $i9];
$i9++;
}
} elseif (isset($reitm[$i]['sm_abil']) && $i39[1] == 0) {
$st['a1'] -= $baseStats['a1'] + $item['add_a1'];
$st['a2'] -= $baseStats['a2'] + $item['add_a2'];
$st['a3'] -= $baseStats['a3'] + $item['add_a3'];
$st['a4'] -= $baseStats['a4'] + $item['add_a4'];
$st['a5'] -= $baseStats['a5'] + $item['add_a5'];
$st['mg1'] -= $baseStats['mg1'] + $item['add_mg1'];
$st['mg2'] -= $baseStats['mg2'] + $item['add_mg2'];
$st['mg3'] -= $baseStats['mg3'] + $item['add_mg3'];
$st['mg4'] -= $baseStats['mg4'] + $item['add_mg4'];
$st['mg7'] -= $baseStats['mg7'] + $item['add_mg7'];
} elseif (isset($item['sm_abil']) && $i39[1] == 0) {
//статы
$i9 = 1;
$i39[1] = 1;
while ($i9 <= 12) {
$st['s' . $i9] = $st['s' . $i9] - $baseStats['s' . $i9] + $reitm[$i]['add_s' . $i9];
$i9++;
}
} elseif (isset($reitm[$i]['sm_skill2']) && $i39[2] == 0) {
$st['s1'] -= $baseStats['s1'] + $item['add_s1'];
$st['s2'] -= $baseStats['s2'] + $item['add_s2'];
$st['s3'] -= $baseStats['s3'] + $item['add_s3'];
$st['s4'] -= $baseStats['s4'] + $item['add_s4'];
$st['s5'] -= $baseStats['s5'] + $item['add_s5'];
$st['s6'] -= $baseStats['s6'] + $item['add_s6'];
$st['s7'] -= $baseStats['s7'] + $item['add_s7'];
} elseif (isset($item['sm_skill2']) && $i39[2] == 0) {
//навыки
$i39[2] = 1;
}
$i++;
}
}
return [$hnd1, $hnd2, $sht1, $oza, $ozm, $dom, $coms];
@@ -885,14 +741,10 @@ class Stats
foreach ($efs as $data) {
$sts = Conversion::dataStringToArray($data);
foreach ($sts as $paramName => $value) {
//todo убедиться, что не могут прилететь параметры, которых нет в словарей бонусов предметов
if (!str_contains(implode(',', $this->sysNames), 'add_' . $paramName)) { // есть ли параметр в разрешенных?
if (!in_array($paramName, $this->sysNames, true)) { // есть ли параметр в разрешенных?
continue;
}
if (empty($st['add_' . $paramName])) {
$st['add_' . $paramName] = 0;
}
$st['add_' . $paramName] += (int)$value;
$st[$paramName] += $value;
}
}
}
@@ -1188,39 +1040,39 @@ class Stats
{
//выносливость
if ($st['s4'] > 0) {
$st['hpAll'] += 30;
$st['hpall'] += 30;
}
if ($st['s4'] > 24 && $st['s4'] < 50) {
$st['hpAll'] += 50;
$st['hpall'] += 50;
}
if ($st['s4'] > 49 && $st['s4'] < 75) {
$st['hpAll'] += 100;
$st['hpall'] += 100;
}
if ($st['s4'] > 74 && $st['s4'] < 100) {
$st['hpAll'] += 175;
$st['hpall'] += 175;
$st['m19'] += 2;
}
if ($st['s4'] > 99 && $st['s4'] < 125) {
$st['hpAll'] += 250;
$st['hpall'] += 250;
$st['m19'] += 4;
}
if ($st['s4'] > 124 && $st['s4'] < 150) {
$st['hpAll'] += 400;
$st['hpall'] += 400;
$st['za'] += 25;
$st['zm'] += 25;
}
if ($st['s4'] > 149 && $st['s4'] < 175) {
$st['hpAll'] += 450;
$st['hpall'] += 450;
$st['za'] += 50;
$st['zm'] += 50;
}
if ($st['s4'] > 174 && $st['s4'] < 200) {
$st['hpAll'] += 600;
$st['hpall'] += 600;
$st['za'] += 100;
$st['zm'] += 100;
}
if ($st['s4'] > 199) {
$st['hpAll'] += 850;
$st['hpall'] += 850;
$st['za'] += 125;
$st['zm'] += 125;
}
@@ -1260,38 +1112,38 @@ class Stats
{
//мудрость
if ($st['s6'] > 24 && $st['s6'] < 50) {
$st['mpAll'] += 150;
$st['mpall'] += 150;
$st['speedmp'] += 100;
}
if ($st['s6'] > 49 && $st['s6'] < 75) {
$st['mpAll'] += 200;
$st['mpall'] += 200;
$st['speedmp'] += 200;
}
if ($st['s6'] > 74 && $st['s6'] < 100) {
$st['mpAll'] += 250;
$st['mpall'] += 250;
$st['speedmp'] += 350;
}
if ($st['s6'] > 99 && $st['s6'] < 125) {
$st['mpAll'] += 350;
$st['mpall'] += 350;
$st['speedmp'] += 500;
}
if ($st['s6'] > 124 && $st['s6'] < 150) {
$st['mpAll'] += 500;
$st['mpall'] += 500;
$st['speedmp'] += 500;
$st['pzm'] += 2;
}
if ($st['s6'] > 149 && $st['s6'] < 175) {
$st['mpAll'] += 700;
$st['mpall'] += 700;
$st['speedmp'] += 600;
$st['pzm'] += 3;
}
if ($st['s6'] > 174 && $st['s6'] < 200) {
$st['mpAll'] += 900;
$st['mpall'] += 900;
$st['speedmp'] += 700;
$st['pzm'] += 5;
}
if ($st['s6'] > 199) {
$st['mpAll'] += 900;
$st['mpall'] += 900;
$st['speedmp'] += 700;
$st['pzm'] += 7;
}
@@ -1313,7 +1165,6 @@ class Stats
//Бонус за количество полностью вырытых пещер.
$st['m10'] += 10 * $finishedDungeons;
$st['pzm'] += $finishedDungeons;
}
private function addAdminBonuses(array $u, array &$st): void
@@ -1322,8 +1173,8 @@ class Stats
return;
}
$st['speed_dungeon'] = 500;
$st['speedhp'] = 500;
$this->addKeyIfNotExist('speed_dungeon', 500, $st);
$this->addKeyIfNotExist('speedhp', 500, $st);
if (!$u['battle']) {
return;
@@ -1334,4 +1185,18 @@ class Stats
priems_z = '0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|'
where id = ?", [$u['id']]);
}
/** Переименовывает элементы массива с несовпадающими с остальным скриптом именами полей.
* @param array $st
* @return void
*/
private function renameArrayKeys(array &$st): void
{
$st['lvl'] = $st['level'];
$st['hpNow'] = $st['hpnow'];
$st['mpNow'] = $st['mpnow'];
unset($st['level'], $st['hpnow'], $st['mpnow']);
}
}