diff --git a/_incl_data/class/User/Stats.php b/_incl_data/class/User/Stats.php
index b358dc7f..aa8911b6 100644
--- a/_incl_data/class/User/Stats.php
+++ b/_incl_data/class/User/Stats.php
@@ -4,13 +4,18 @@ namespace User;
 
 use Core\Config;
 use Core\Db;
+use Helper\Comparsion;
 use Helper\Conversion;
 use User;
 
 class Stats
 {
     private User $u;
-    private array $sysNames = [];
+
+    /** Список разрешённых для бонусов системных названий статов
+     * @var array
+     */
+    private array $sysNames;
 
     public function __construct(User $user)
     {
@@ -48,7 +53,7 @@ class Stats
                         $complects[$v] = 1;
                     }
                 }
-                if (strpos($k, 'add_') === false) {
+                if (!str_contains($k, 'add_')) {
                     continue;
                 }
                 $k = str_replace('add_', '', $k);
@@ -56,12 +61,10 @@ class Stats
             }
         }
 
-        $params = self::addComplectsBonuses($complects, $params);
-
-        return $params;
+        return self::addComplectsBonuses($complects, $params);
     }
 
-    private static function setBonusValue(array &$array, $key, $value)
+    private static function setBonusValue(array &$array, $key, $value): void
     {
         if (isset($array[$key])) {
             $array[$key] += $value;
@@ -134,10 +137,12 @@ class Stats
             return [];
         }
 
+        // Как? Нахуя 4 переменные разные для одного и того же?
         $st = array_fill_keys($this->sysNames, 0);
+        $sti = $st;
+        $s_v = $st;
+        $s_vi = $st;
 
-        $s_vi = [];
-        $s_v = [];
         $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')]);
@@ -194,11 +199,428 @@ class Stats
 
         }
 
+        [$hnd1, $hnd2, $sht1, $oza, $ozm, $dom, $coms] = $this->addWearedItemsBonuses($u['id'], $st, $s_v, $baseStats);
+
+
+        $this->addMedalsBonuses($u['id'], $st);
+
+        $noeffectbattle = false;
+        if ($u['battle'] > 0) {
+            $noeffectbattle = (bool)Db::getValue("select 1 from battle_actions where uid = ? and vars = 'noeffectbattle1' and btl = ? limit 1", [$u['id'], $u['battle']]);
+        }
+
+        //Характеристики от эффектов
+        $h = 0;
+        $nbs = array_fill_keys(range(4899, 4909), 0);
+        $prsu = [];
+
+        if (!$noeffectbattle) {
+            $efs = Db::getRows("select * from eff_users left join eff_main on id2 = id_eff where uid = ? and deactiveTime < unix_timestamp() and v1 != 'priem' order by id desc", [$u['id']]);
+            foreach ($efs as $e) {
+                if ($u['dnow'] == 0) {
+                    if ($u['battle'] == 0) {
+                        Db::sql('delete from eff_users where id_eff = ? and uid = ? and id != ?', [$e['id_eff'], $u['id'], $e['id']]);
+
+                        //Переводим в заряды
+                        if ($e['hod'] != -1) {
+                            Db::sql('update eff_users set hod = -1, timeUse = unix_timestamp() + ? where id = ?', [$e['hod'] * Config::get('effz') - $e['actionTime'], $e['id']]);
+                        }
+
+                    } elseif (Config::get('effz') > 0 && $e['hod'] == -1) {
+                        $efzz = round(($e['timeUse'] + $e['actionTime'] + $e['timeAce']) - time());
+                        if ($efzz > 0) {
+                            Db::sql('update eff_users set hod = ? where id = ?', [$efzz / Config::get('effz'), $e['id']]);
+                        }
+                    }
+                }
+
+                if ($e['timeUse'] + $e['timeAce'] + $e['actionTime'] > time() || $e['timeUse'] == 77) {
+                    if ($e['v1'] == 'priem') {
+                        $prsu[$e['v2']] = 0 + $prsu['x'];
+                    }
+                    $st['effects'][$h] = $e;
+                    $h++;
+                    $sts = Conversion::dataStringToArray($e['data']);
+                    if (isset($sts['itempl']) && $sts['itempl'] > 0) {
+                        $nbs[$sts['itempl']] += 1;
+                    }
+                    if (isset($sts['puti'])) {
+                        $st['puti'] = $sts['puti'];
+                    }
+                    if (isset($sts['add_silver'])) {
+                        $st['slvtm'] = $e['timeUse'] + $e['actionTime'];
+                    }
+
+                    $this->addValuesToAllArrays($sts, $st, $sti, $s_v, $s_vi);
+
+                } else {
+                    //удаляем эффект
+                    if (
+                        $e['img2'] != 'tz.gif' ||
+                        $u['id'] == $this->u->info['id']
+                    ) {
+                        if ($e['sleeptime'] == 0) {
+                            $this->u->endEffect($e['id'], $u);
+                        }
+                        $st['act'] = 1;
+                    }
+                }
+            }
+
+        } else {
+            $st['noeffectbattle1'] = 1;
+        }
+
+        $this->addWearedItemsIllusion($nbs, $st);
+
+        $this->addInBattlePriemsBonuses($u, $st, $prsu, $sti, $s_v, $s_vi);
+
+        //Характеристики от статов
+        $st['hpAll'] += $st['s4'] * 5;
+        $st['mpAll'] += $st['s6'] * 10;
+
+        //Турнир
+        $st['m1'] += $st['s3'] * 5;
+
+        // мф.анти-крит = 2.5
+        $st['m2'] += $st['s3'] * 5;
+
+        // мф.уворот = 2.5
+        $st['m4'] += $st['s2'] * 5;
+
+        // мф.анти-уворот = 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);
+
+        //Мощности
+        //Мощность против "Мощность крит. урона". Гамс
+        $st['antm3'] += $st['s5'] * 0.5;
+
+        //Бонусы комплектов
+        if (is_iterable($coms['new'])) {
+            foreach ($coms['new'] as $complect) {
+                $com = Db::getValue('select data from complects where com = ? and x <= ? order by x desc limit 1',
+                    [
+                        (int)$complect,
+                        (int)$coms['com'][$complect], // кол-во предметов данного комплекта
+                    ]);
+
+                if (!$com) {
+                    continue;
+                }
+
+                $sti = Conversion::dataStringToArray($com);
+                foreach ($this->sysNames as $stat) {
+                    if (!isset($sti[$stat])) {
+                        continue;
+                    }
+                    $st[$stat] += $sti[$stat];
+                }
+            }
+        }
+
+        //Замена свитков
+        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']]);
+                }
+            }
+        }
+
+        //Бонусы статов
+        $this->addStatBonuses($st);
+
+        //если второе оружие одето
+        if ($hnd2 == 1 && $hnd1 == 1) {
+            $st['zona']++;
+        }
+        if ($sht1 == 1) {
+            $st['zonb']++;
+        }/* Владения */
+
+        //mib1-mib4, mab1-mab4 armor??
+
+        if (isset($st['s5'])) {
+            $st['pm1'] += $st['s5'] * 0.5;
+            $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;
+        }
+
+        if (isset($st['m11a'])) {
+            $st['pm1'] += $st['m11a'] * 0.5;
+            $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;
+        }
+
+        if (isset($st['aall'])) {
+            $st['a1'] += $st['aall'];
+            $st['a2'] += $st['aall'];
+            $st['a3'] += $st['aall'];
+            $st['a4'] += $st['aall'];
+            $st['a5'] += $st['aall'];
+            $st['a6'] += $st['aall'];
+            $st['a7'] += $st['aall'];
+        }
+
+        if (isset($st['m2all'])) {
+            $st['mg1'] += $st['m2all'];
+            $st['mg2'] += $st['m2all'];
+            $st['mg3'] += $st['m2all'];
+            $st['mg4'] += $st['m2all'];
+            $st['mg5'] += $st['m2all'];
+            $st['mg6'] += $st['m2all'];
+            $st['mg7'] += $st['m2all'];
+        }
+
+        if (isset($st['zm'])) {
+            $st['zm1'] += $st['zm'];
+            $st['zm2'] += $st['zm'];
+            $st['zm3'] += $st['zm'];
+            $st['zm4'] += $st['zm'];
+            $st['zm5'] += $st['zm'];
+            $st['zm6'] += $st['zm'];
+            $st['zm7'] += $st['zm'];
+        }
+
+        if (isset($st['zma'])) {
+            $st['zm1'] += $st['zma'];
+            $st['zm2'] += $st['zma'];
+            $st['zm3'] += $st['zma'];
+            $st['zm4'] += $st['zma'];
+            $st['zm5'] += $st['zma'];
+            $st['zm6'] += $st['zma'];
+            $st['zm7'] += $st['zma'];
+        }
+
+        if (isset($st['mall'])) {
+            $st['mg1'] += $st['mall'];
+            $st['mg2'] += $st['mall'];
+            $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'];
+            $st['za3'] += $st['za'];
+            $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']);
+        }
+        if (!empty($st['mpVinos'])) {
+            $st['mpAll'] += round($st['mpVinos'] * $st['s6']);
+        }
+        if (!empty($st['hpProc'])) {
+            $st['hpAll'] += round($st['hpAll'] / 100 * $st['hpProc']);
+        }
+        if (!empty($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']);
+
+        //зоны блока и удара
+        if ($st['zona'] < 1) {
+            $st['zona'] = 1;
+        }
+        if ($st['zona'] > 5) {
+            $st['zona'] = 5;
+        }
+        if ($st['zonb'] < 1) {
+            $st['zonb'] = 1;
+        }
+        if ($st['zonb'] > 3) {
+            $st['zonb'] = 3;
+        }
+
+        $st['ozash'] = $oza;
+        $st['ozmsh'] = $ozm;
+        $st['weapon1'] = $hnd1;
+        $st['weapon2'] = $hnd2;
+        $st['sheld1'] = $sht1;
+        $st['sv_'] = $s_v;
+        $st['sv_i'] = $s_vi;
+        $st['dom'] = $dom;
+        $st['prsu'] = $prsu;
+
+        $st['x'] = $u['x'];
+        $st['y'] = $u['y'];
+        $st['s'] = $u['s'];
+
+        $this->addDungeonsBonuses($u['id'], $st);
+
+        //Добавочный подьем для игроков
+        $st['maxves'] += 100;
+
+        $this->addAdminBonuses($u, $st);
+
+
+        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']) {
+            $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['mpAll'] < 0) {
+            $st['mpAll'] = 0;
+        }
+
+        if (stristr($u['login'], '(зверь ') || (stristr($u['login'], 'Каменный страж') && $u['ip'] == '0')) {
+            $st['this_animal'] = 1;
+        } else {
+            $st['this_animal'] = 0;
+        }
+
+        $rt = [];
+        if ($i1 == 1) {
+            $rt[0] = $st;
+            $rt[1] = $baseStats; //родные статы
+        } 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 ($btl_cache) {
+            $dataca = [
+                'st' => $st,
+                'st2' => $baseStats,
+            ];
+            $dataca = json_encode($dataca);
+            Db::sql('insert into battle_cache (battle, uid, time, data) values (?,?,unix_timestamp(),?)', [$u['battle'], $u['id'], $dataca]);
+        }
+
+
+        return $rt;
+    }
+
+    private function addWearedItemsBonuses(int $uid, array &$st, array &$s_v, array $baseStats): array
+    {
         //Характеристики от предметов //ТУТ tr_lvl
         // Вся вторая строчка - спасибо Users.
         $wearedItems = Db::getRows('select type, data, inOdet,
        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']]);
+        from items_users left join items_main on items_main.id = item_id where inOdet != 0 and uid = ?', [$uid]);
 
         $h = 0;
         $hnd1 = 0;
@@ -228,10 +650,18 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
 
             $st['items'][$h] = $wearedItem;
             $h++;
-            if ($wearedItem['inOdet'] == 3 && (($wearedItem['type'] >= 18 && $wearedItem['type'] <= 24) || $wearedItem['type'] == 26 || $wearedItem['type'] == 27 || $wearedItem['type'] == 28)) {
+            if ($wearedItem['inOdet'] == 3 &&
+                (($wearedItem['type'] >= 18 && $wearedItem['type'] <= 24) ||
+                    $wearedItem['type'] == 26 ||
+                    $wearedItem['type'] == 27 ||
+                    $wearedItem['type'] == 28)) {
                 $hnd1 = 1;
             }
-            if ($wearedItem['inOdet'] == 14 && (($wearedItem['type'] >= 18 && $wearedItem['type'] <= 24) || $wearedItem['type'] == 26 || $wearedItem['type'] == 27 || $wearedItem['type'] == 28)) {
+            if ($wearedItem['inOdet'] == 14 &&
+                (($wearedItem['type'] >= 18 && $wearedItem['type'] <= 24) ||
+                    $wearedItem['type'] == 26 ||
+                    $wearedItem['type'] == 27 ||
+                    $wearedItem['type'] == 28)) {
                 $hnd2 = 1;
             } elseif ($wearedItem['inOdet'] == 14 && $wearedItem['type'] == 13) {
                 $sht1 = 1;
@@ -368,6 +798,7 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
                 }
                 $coms['com'][$sti['complect']]++;
             }
+
             if (isset($sti['complect2'])) {
                 $coms[count($coms)]['id'] = $sti['complect2'];
                 if (!isset($coms['com'][$sti['complect2']])) {
@@ -394,43 +825,24 @@ 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($this->sysNames)) {
-                    //Действует на (Действует на)
-                    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 {
-                            $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]];
-                        }
+                foreach ($this->sysNames as $stat) {
+                    if (!isset($sti['add_' . $stat])) {
+                        continue;
                     }
-                    $i++;
+                    $st[$stat] += (int)$sti['add_' . $stat];
                 }
             } else {
                 $reitm[] = $sti;
             }
 
-            $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[$this->sysNames[$i]] += intval($sti['sv_' . $this->sysNames[$i]]);
-                    $s_v['z'][$wearedItem['inOdet']][$this->sysNames[$i]] += intval($sti['sv_' . $this->sysNames[$i]]);
+            foreach ($this->sysNames as $stat) {
+                if (!isset($sti['sv_' . $stat])) {
+                    continue;
                 }
-                $i++;
+                $s_v[$stat] += (int)$sti['sv_' . $stat];
             }
-
         }
 
         //Сохраненные хар-ки и умения
@@ -457,163 +869,54 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
                     }
                 } elseif (isset($reitm[$i]['sm_skill2']) && $i39[2] == 0) {
                     //навыки
-
                     $i39[2] = 1;
                 }
                 $i++;
             }
         }
-        $st = $this->addMedalsBonuses($u['id'], $st);
+        return [$hnd1, $hnd2, $sht1, $oza, $ozm, $dom, $coms];
+    }
 
-        $noeffectbattle = false;
-        if ($u['battle'] > 0) {
-            $noeffectbattle = (bool)Db::getValue("select 1 from battle_actions where uid = ? and vars = 'noeffectbattle1' and btl = ? limit 1", [$u['id'], $u['battle']]);
-        }
+    private function addMedalsBonuses(int $uid, array &$st): void
+    {
+        //Харки от иконок
 
-        //Характеристики от эффектов
-        $h = 0;
-        $nbs = [
-            4899 => 0,
-            4900 => 0,
-            4901 => 0,
-            4902 => 0,
-            4903 => 0,
-            4904 => 0,
-            4905 => 0,
-            4906 => 0,
-            4907 => 0,
-            4908 => 0,
-            4909 => 0,
-        ];
-        $prsu = [];
-        if (!$noeffectbattle) {
-            $efs = mysql_query(
-                'SELECT 
-				`eu`.`id`,
-`eu`.`id_eff`,
-`eu`.`tr_life_user`,
-`eu`.`uid`,
-`eu`.`name`,
-`eu`.`data`,
-`eu`.`overType`,
-`eu`.`timeUse`,
-`eu`.`timeAce`,
-`eu`.`user_use`,
-`eu`.`delete`,
-`eu`.`v1`,
-`eu`.`v2`,
-`eu`.`img2`,
-`eu`.`x`,
-`eu`.`hod`,
-`eu`.`bj`,
-`eu`.`sleeptime`,
-`eu`.`no_Ace`,
-				`em`.`id2`,`em`.`mname`,`em`.`type1`,`em`.`img`,`em`.`mdata`,`em`.`actionTime`,`em`.`type2`,`em`.`type3`,`em`.`onlyOne`,`em`.`oneType`,`em`.`noAce`,`em`.`see`,`em`.`info`,`em`.`overch`,`em`.`bp`,`em`.`noch` FROM `eff_users` AS `eu` LEFT JOIN `eff_main` AS `em` ON (`eu`.`id_eff` = `em`.`id2`) WHERE `eu`.`uid`="' . mysql_real_escape_string(
-                    $u['id']
-                ) . '" AND `eu`.`delete`="0" AND `eu`.`deactiveTime` < "' . time() . '" AND `eu`.`v1`!="priem" ORDER BY `eu`.`id` DESC LIMIT 50'
-            );
-            while ($e = mysql_fetch_array($efs)) {
-                if ($u['dnow'] == 0) {
-                    if ($u['battle'] == 0) {
-                        mysql_query(
-                            'DELETE FROM `eff_users` WHERE `id_eff` = "' . $e['id_eff'] . '" AND `uid` = "' . $u['id'] . '" AND `id` != "' . $e['id'] . '" ORDER BY `id` ASC'
-                        );
-                        //Переводим в заряды
-                        if ($e['v1'] != 'priem' && $e['hod'] != -1) {
-                            mysql_query(
-                                'UPDATE `eff_users` SET `hod` = "-1",`timeUse` = "' . (time() + ($e['hod'] * Config::get(
-                                            'effz'
-                                        )) - $e['actionTime']) . '" WHERE `id` = "' . $e['id'] . '" LIMIT 1'
-                            );
-                        }
-                    } else {
-                        if ($e['v1'] != 'priem' && Config::get('effz') > 0 && $e['hod'] == -1) {
-                            $efzz = round(($e['timeUse'] + $e['actionTime'] + $e['timeAce']) - time());
-                            if ($efzz > 0) {
-                                mysql_query(
-                                    'UPDATE `eff_users` SET `hod` = "' . ($efzz / Config::get(
-                                            'effz'
-                                        )) . '" WHERE `id` = "' . $e['id'] . '" LIMIT 1'
-                                );
-                            }
-                        }
-                    }
+        $efs = Db::getColumn('select bonus from users_ico where uid = ? and (endTime > unix_timestamp() or endTime = 0)', [$uid]);
+        foreach ($efs as $data) {
+            $sts = Conversion::dataStringToArray($data);
+            foreach ($sts as $paramName => $value) {
+                //todo убедиться, что не могут прилететь параметры, которых нет в словарей бонусов предметов
+                if (!str_contains(implode(',', $this->sysNames), 'add_' . $paramName)) { // есть ли параметр в разрешенных?
+                    continue;
                 }
-                if ($e['timeUse'] + $e['timeAce'] + $e['actionTime'] > time() || $e['timeUse'] == 77) {
-                    if ($e['v1'] == 'priem') {
-                        $prsu[$e['v2']] = 0 + $prsu['x'];
-                    }
-                    $st['effects'][$h] = $e;
-                    $h++;
-                    $sts = Conversion::dataStringToArray($e['data']);
-                    if (isset($sts['itempl']) && $sts['itempl'] > 0) {
-                        $nbs[$sts['itempl']] += 1;
-                    }
-                    if (isset($sts['puti'])) {
-                        $st['puti'] = $sts['puti'];
-                    }
-                    if (isset($sts['add_silver'])) {
-                        $st['slvtm'] = $e['timeUse'] + $e['actionTime'];
-                    }
-
-                    $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[$this->sysNames[$i]] += intval($sts['add_' . $this->sysNames[$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 {
-                                    $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($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[$this->sysNames[$i]] += intval($sts['sv_' . $this->sysNames[$i]]);
-                            }
-                            if (isset($sts['sv_' . $this->sysNames[$i]])) {
-                                if (!isset($s_v[$this->sysNames[$i]])) {
-                                    $s_v[$this->sysNames[$i]] = 0;
-                                }
-                                $s_v[$this->sysNames[$i]] += intval($sts['sv_' . $this->sysNames[$i]]);
-                            }
-                        }
-                        $i++;
-                    }
-                } else {
-                    //удаляем эффект
-                    if ($e['img2'] != 'tz.gif' || $u['id'] == $this->u->info['id']) {
-                        if ($e['sleeptime'] == 0) {
-                            $this->u->endEffect($e['id'], $u);
-                        }
-                        $st['act'] = 1;
-                    }
+                if (empty($st['add_' . $paramName])) {
+                    $st['add_' . $paramName] = 0;
                 }
+                $st['add_' . $paramName] += (int)$value;
             }
-        } else {
-            $st['noeffectbattle1'] = 1;
-        }//Заглушки от эффектов
+        }
+    }
+
+    private function addValuesToAllArrays(array $sts, array &$st, array &$sti, array &$s_v, array &$s_vi): void
+    {
+        foreach ($this->sysNames as $stat) {
+            if (!isset($sts['add_' . $stat])) {
+                continue;
+            }
+            $st[$stat] += intval($sts['add_' . $stat]);
+            $sti[$stat] += intval($sts['add_' . $stat]);
+
+            if (!isset($sts['sv_' . $stat])) {
+                continue;
+            }
+            $s_v[$stat] += intval($sts['sv_' . $stat]);
+            $s_vi[$stat] += intval($sts['sv_' . $stat]);
+        }
+    }
+
+    private function addWearedItemsIllusion(array $nbs, array &$st): void
+    {
+        //Заглушки от эффектов
         if ($nbs[4899] > 0) {
             //Зеленый комплект
             $st['items_img'][8] = 'robe_illusion4.gif';
@@ -676,438 +979,69 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
             $st['items_img'][14] = 'amulet_illusion1.gif';
             $st['items_img'][15] = 'earrings_illusion1.gif';
         }
+    }
 
-        if ($u['battle'] > 0) {
-            //Характеристики от приемов
-            $efs = mysql_query(
-                'SELECT `eu`.`id`,
-`eu`.`id_eff`,
-`eu`.`uid`,
-`eu`.`name`,
-`eu`.`data`,
-`eu`.`overType`,
-`eu`.`timeUse`,
-`eu`.`timeAce`,
-`eu`.`user_use`,
-`eu`.`tr_life_user`,
-`eu`.`delete`,
-`eu`.`v1`,
-`eu`.`v2`,
-`eu`.`img2`,
-`eu`.`x`,
-`eu`.`hod`,
-`eu`.`bj`,
-`eu`.`sleeptime`,
-`eu`.`no_Ace` FROM `eff_users` AS `eu` WHERE `eu`.`uid`="' . mysql_real_escape_string(
-                    $u['id']
-                ) . '" AND `eu`.`delete`="0" AND `eu`.`deactiveTime` < "' . time() . '" AND `eu`.`v1` = "priem" ORDER BY `eu`.`id` ASC'
-            );
-            $st['set_pog'] = [];
-            $st['set_pog2'] = [];
-            while ($e = mysql_fetch_array($efs)) {
-                $e['type1'] = 14;
-                $e['img'] = $e['img2'];
-                if ($e['tr_life_user'] > 0) {
-                    $trlu = mysql_fetch_array(
-                        mysql_query('SELECT `hpNow` FROM `stats` WHERE `id` = "' . $e['tr_life_user'] . '" LIMIT 1')
-                    );
-                    if (floor($trlu['hpNow']) < 1) {
-                        $this->u->endEffect($e['id'], $u);
-                        $st['act'] = 1;
-                    }
-                }
-                if ($e['timeUse'] + $e['timeAce'] + $e['actionTime'] > time() || $e['timeUse'] == 77) {
-                    if ($e['v1'] == 'priem') {
-                        $prsu[$e['v2']] = 0 + $prsu['x'];
-                    }
-                    $st['effects'][$h] = $e;
-                    $h++;
-                    $sts = Conversion::dataStringToArray($e['data']);
-                    if ($e['v2'] == 217) {
-                        $st['raztac'] = 1;
-                    }
-                    if (isset($sts['add_pog'])) {
-                        $ctt = count($st['set_pog']);
-                        $st['set_pog'][$ctt]['id'] = $h;
-                        $st['set_pog'][$ctt]['y'] = $sts['add_pog'];
-                        unset($ctt);
-                    }
-                    if (isset($sts['natoe'])) {
-                        $st['set_natoe']['id'] = $h;
-                        $st['set_natoe']['a'] = 0 + $sts['natoe_end'];
-                        $st['set_natoe']['b'] = 0 + $sts['natoe'];
-                        $st['set_natoe']['eff_id'] = $e['id'];
-                        $st['set_natoe']['t'] = 0 + $sts['natoe_type'];
-                        $st['set_natoe']['user_id'] = $e['tr_life_user'];
-                    }
-                    if (isset($sts['add_pog2'])) {
-                        $ctt = count($st['set_pog2']);
-                        $st['set_pog2'][$ctt]['id'] = $h;
-                        $st['set_pog2'][$ctt]['y'] = $sts['add_pog2'];
-                        $st['set_pog2'][$ctt]['p'] = $sts['add_pog2p'];
-                        $st['set_pog2'][$ctt]['m'] = $sts['add_pog2mp'];
-                        unset($ctt);
-                    }
-
-                    $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($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[$this->sysNames[$i]] += intval($sts['sv_' . $this->sysNames[$i]]);
-                            if (!isset($s_v[$this->sysNames[$i]])) {
-                                $s_v[$this->sysNames[$i]] = 0;
-                            }
-                            $s_v[$this->sysNames[$i]] += intval($sts['sv_' . $this->sysNames[$i]]);
-                        }
-                        $i++;
-                    }
-                } else {
-                    //удаляем эффект
+    private function addInBattlePriemsBonuses(array $u, array &$st, array &$prsu, array &$sti, array &$s_v, array &$s_vi): void
+    {
+        if ($u['battle'] <= 0) {
+            return;
+        }
+        //Характеристики от приемов
+        $st['set_pog'] = [];
+        $st['set_pog2'] = [];
+        $efs = Db::getRows("select * from eff_users where uid = ? and deactiveTime < unix_timestamp() and v1 = 'priem' order by id", [$u['id']]);
+        $h = 0;
+        foreach ($efs as $e) {
+            $e['type1'] = 14;
+            $e['img'] = $e['img2'];
+            if ($e['tr_life_user'] > 0) {
+                $trlu = Db::getValue('select hpNow from stats where id = ?', [$e['tr_life_user']]);
+                if (!$trlu || $trlu < 1) {
                     $this->u->endEffect($e['id'], $u);
                     $st['act'] = 1;
                 }
             }
-        }
-
-
-        //Характеристики от статов
-        $st['hpAll'] += $st['s4'] * 5;
-        $st['mpAll'] += $st['s6'] * 10;
-
-        //Турнир
-        $st['m1'] += $st['s3'] * 5;
-
-        // мф.анти-крит = 2.5
-        $st['m2'] += $st['s3'] * 5;
-
-        // мф.уворот = 2.5
-        $st['m4'] += $st['s2'] * 5;
-
-        // мф.анти-уворот = 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);
-
-        //Мощности
-        //Мощность против "Мощность крит. урона". Гамс
-        $st['antm3'] += $st['s5'] * 0.5;
-
-        //Бонусы комплектов
-        $i = 0;
-        if (!empty($coms['new']) && is_array($coms['new'])) {
-            while ($i <= count($coms['new'])) {
-                if (isset($coms['new'][$i])) {
-                    //$coms[$i]['id'] - id комплекта, $j - кол-во предметов данного комплекта
-                    $j = $coms['com'][$coms['new'][$i]];
-                    $com = mysql_fetch_array(
-                        mysql_query(
-                            'SELECT `id`,`com`,`name`,`x`,`data` FROM `complects` WHERE `com` = "' . ((int)$coms['new'][$i]) . '" AND `x` <= ' . ((int)$j) . ' ORDER BY  `x` DESC  LIMIT 1'
-                        )
-                    );
-                    if (isset($com['id'])) {
-                        //добавляем действия комплекта
-                        $ij = 0;
-                        $sti = Conversion::dataStringToArray($com['data']);
-                        while ($ij < count($this->sysNames)) {
-                            if (isset($this->sysNames[$ij]) && isset($sti[$this->sysNames[$ij]])) {
-                                $st[$this->sysNames[$ij]] += $sti[$this->sysNames[$ij]];
-                            }
-                            $ij++;
-                        }
-                    }
+            if ($e['timeUse'] + $e['timeAce'] + $e['actionTime'] > time() || $e['timeUse'] == 77) {
+                if ($e['v1'] == 'priem') {
+                    $prsu[$e['v2']] = 0 + $prsu['x'];
                 }
-                $i++;
-            }
-        }
-
-        //Замена свитков
-        if ($u['autospell'] != 0 && $u['battle'] == 0) {
-            //проверяем свитки
-            $splink = '';
-            $spi = mysql_query(
-                'SELECT `id`,`item_id`,`inOdet` FROM `items_users` WHERE `inOdet` >= 40 AND `inOdet` <= 50 AND `uid` = "' . $u['id'] . '" AND `delete` = 0 ORDER BY `item_id` DESC LIMIT 20'
-            );
-            while ($pli = mysql_fetch_array($spi)) {
-                $splink .= $pli['item_id'] . '-' . $pli['inOdet'] . ',';
-            }
-            $splink = rtrim($splink, ',');
-
-            //Запоминаем новый комплект свитков
-            if ($u['autospell'] == 1) {
-                $u['autospell'] = $splink;
-                mysql_query(
-                    'UPDATE `users` SET `autospell` = "' . $splink . '" WHERE `id` = "' . $u['id'] . '" LIMIT 1'
-                );
-            }
-
-            //Выдаем нужный свиток, если он есть в инвентаре
-            if ($u['autospell'] != $splink) {
-                $spe1 = explode(',', $splink);
-                $spe2 = explode(',', $u['autospell']);
-                $i = 0;
-                while ($i <= 20) {
-                    //
-                    $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];
-                    }
-                    //
-                    $i++;
+                $st['effects'][$h] = $e;
+                $h++;
+                $sts = Conversion::dataStringToArray($e['data']);
+                if ($e['v2'] == 217) {
+                    $st['raztac'] = 1;
+                }
+                if (isset($sts['add_pog'])) {
+                    $ctt = count($st['set_pog']);
+                    $st['set_pog'][$ctt]['id'] = $h;
+                    $st['set_pog'][$ctt]['y'] = $sts['add_pog'];
+                    unset($ctt);
+                }
+                if (isset($sts['natoe'])) {
+                    $st['set_natoe']['id'] = $h;
+                    $st['set_natoe']['a'] = 0 + $sts['natoe_end'];
+                    $st['set_natoe']['b'] = 0 + $sts['natoe'];
+                    $st['set_natoe']['eff_id'] = $e['id'];
+                    $st['set_natoe']['t'] = 0 + $sts['natoe_type'];
+                    $st['set_natoe']['user_id'] = $e['tr_life_user'];
+                }
+                if (isset($sts['add_pog2'])) {
+                    $ctt = count($st['set_pog2']);
+                    $st['set_pog2'][$ctt]['id'] = $h;
+                    $st['set_pog2'][$ctt]['y'] = $sts['add_pog2'];
+                    $st['set_pog2'][$ctt]['p'] = $sts['add_pog2p'];
+                    $st['set_pog2'][$ctt]['m'] = $sts['add_pog2mp'];
+                    unset($ctt);
                 }
 
-                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']]);
-                }
+                $this->addValuesToAllArrays($sts, $st, $sti, $s_v, $s_vi);
+
+            } else {
+                //удаляем эффект
+                $this->u->endEffect($e['id'], $u);
+                $st['act'] = 1;
             }
         }
-
-        //Бонусы статов
-        $this->addStatBonuses($st);
-
-        //если второе оружие одето
-        if ($hnd2 == 1 && $hnd1 == 1) {
-            $st['zona']++;
-        }
-        if ($sht1 == 1) {
-            $st['zonb']++;
-        }/* Владения */
-
-        //mib1-mib4, mab1-mab4 armor??
-
-        $i = 1;
-        while ($i <= 7) {
-            if (isset($st['s5'])) {
-                $st['pm' . $i] += $st['s5'] * 0.5;
-            }
-            if (isset($st['m11a'])) {
-                $st['pm' . $i] += $st['m11a'];
-            }
-            if (isset($st['aall'])) {
-                $st['a' . $i] += $st['aall'];
-            }
-            if (isset($st['m2all'])) {
-                $st['mg' . $i] += $st['m2all'];
-            }
-            if (isset($st['zm'])) {
-                $st['zm' . $i] += $st['zm'];
-            }
-            if (isset($st['zma'])) {
-                $st['zm' . $i] += $st['zma'];
-            }
-            if ($i <= 4) {
-                if (isset($st['mall'])) {
-                    $st['mg' . $i] += $st['mall'];
-                }
-                if (isset($st['m11'])) {
-                    $st['pm' . $i] += $st['m11'];
-                }
-                if (isset($st['m10'])) {
-                    $st['pa' . $i] += $st['m10'];
-                }
-                if (isset($st['za'])) {
-                    $st['za' . $i] += $st['za'];
-                }
-            }
-            $i++;
-        }
-
-        //Уязвимость оружие и магиям
-        $i = 1;
-        while ($i <= 7) {
-            $st['yzm' . $i] += $st['yzma'];
-            if ($i <= 4) {
-                $st['yzm' . $i] += $st['yzm'];//стихийный урон только
-                $st['yza' . $i] += $st['yza']; //урон оружия
-            }
-            //Отнимает от защиты от урона
-            if (isset($st['yza' . $i]) && $i <= 4) {
-                $st['za' . $i] = ($st['za' . $i] / 100 * (100 + ($st['yza' . $i])));
-                if ($st['za' . $i] < 0) {
-                    $st['za' . $i] = 0;
-                }
-            }
-            //Отнимает от защиты от магии
-            if (isset($st['yzm' . $i])) {
-                $st['zm' . $i] = ($st['zm' . $i] / 100 * (100 + ($st['yzm' . $i])));
-                if ($st['zm' . $i] < 0) {
-                    $st['zm' . $i] = 0;
-                }
-            }
-            $i++;
-        }
-        if (isset($st['hpVinos']) && $st['hpVinos'] != 0) {
-            $st['hpAll'] += round($st['hpVinos'] * $st['s4']);
-        }
-        if (isset($st['mpVinos']) && $st['mpVinos'] != 0) {
-            $st['mpAll'] += round($st['mpVinos'] * $st['s6']);
-        }
-        if (isset($st['hpProc']) && $st['hpProc'] != 0) {
-            $st['hpAll'] += round($st['hpAll'] / 100 * $st['hpProc']);
-        }
-        if (isset($st['mpProc']) && $st['mpProc'] != 0) {
-            $st['mpAll'] += round($st['mpAll'] / 100 * $st['mpProc']);
-        }//Реген. - 250 ед.
-        //конец бонусов
-        if ($st['hpNow'] < 0) {
-            $st['hpNow'] = 0;
-        } elseif ($st['hpNow'] > $st['hpAll']) {
-            $st['hpNow'] = $st['hpAll'];
-        }
-        if ($st['mpNow'] < 0) {
-            $st['mpNow'] = 0;
-        } elseif ($st['mpNow'] > $st['mpAll']) {
-            $st['mpNow'] = $st['mpAll'];
-        }
-
-        //зоны блока и удара
-        if ($st['zona'] < 1) {
-            $st['zona'] = 1;
-        }
-        if ($st['zona'] > 5) {
-            $st['zona'] = 5;
-        }
-        if ($st['zonb'] < 1) {
-            $st['zonb'] = 1;
-        }
-        if ($st['zonb'] > 3) {
-            $st['zonb'] = 3;
-        }
-
-        $st['ozash'] = $oza;
-        $st['ozmsh'] = $ozm;
-        $st['weapon1'] = $hnd1;
-        $st['weapon2'] = $hnd2;
-        $st['sheld1'] = $sht1;
-        $st['sv_'] = $s_v;
-        $st['sv_i'] = $s_vi;
-        $st['dom'] = $dom;
-        $st['prsu'] = $prsu;
-
-        $st['x'] = $u['x'];
-        $st['y'] = $u['y'];
-        $st['s'] = $u['s'];
-
-        $this->addDungeonsBonuses($u['id'], $st);
-
-        //Добавочный подьем для игроков
-        $st['maxves'] += 100;
-
-        if ($u['admin'] > 0) { // ускоренная регенерация и пробег по подземелью
-            $st['speed_dungeon'] = 500;
-            $st['speedhp'] = 500;
-            if ($u['battle']) {
-                Db::sql("update stats set
-                 tactic1 = tactic2 = tactic3 = tactic4 = tactic5 = tactic6 = tactic7 = 25,
-                 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']]);
-            }
-        }
-
-        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']) {
-            $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['mpAll'] < 0) {
-            $st['mpAll'] = 0;
-        }
-
-        if (stristr($u['login'], '(зверь ') || (stristr($u['login'], 'Каменный страж') && $u['ip'] == '0')) {
-            $st['this_animal'] = 1;
-        } else {
-            $st['this_animal'] = 0;
-        }
-
-        $rt = [];
-        if ($i1 == 1) {
-            $rt[0] = $st;
-            $rt[1] = $baseStats; //родные статы
-        } 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 ($btl_cache) {
-            $dataca = [
-                'st' => $st,
-                'st2' => $baseStats,
-            ];
-            $dataca = json_encode($dataca);
-            Db::sql('insert into battle_cache (battle, uid, time, data) values (?,?,unix_timestamp(),?)', [$u['battle'], $u['id'], $dataca]);
-        }
-
-        return $rt;
-    }
-
-    private function addMedalsBonuses(int $uid, array &$st): array
-    {
-        //Харки от иконок
-
-        $efs = Db::getColumn('select bonus from users_ico where uid = ? and (endTime > unix_timestamp() or endTime = 0)', [$uid]);
-        foreach ($efs as $data) {
-            $sts = Conversion::dataStringToArray($data);
-            foreach ($sts as $paramName => $value) {
-                //todo убедиться, что не могут прилететь параметры, которых нет в словарей бонусов предметов
-                if (!str_contains(implode(',', $this->sysNames), 'add_' . $paramName)) { // есть ли параметр в разрешенных?
-                    continue;
-                }
-                if (empty($st['add_' . $paramName])) {
-                    $st['add_' . $paramName] = 0;
-                }
-                $st['add_' . $paramName] += (int)$value;
-            }
-        }
-        return $st;
     }
 
     private function addStatBonuses(array &$st): void
@@ -1205,56 +1139,48 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
 
     private function addIntuitionBonuses(array &$st): void
     {
-        //интуиция
-        if ($st['s3'] > 24 && $st['s3'] < 50) {
-            $st['pa4'] += 2;
-            $st['m3'] += 2;
-            $st['m1'] += 25;
-        }
-        if ($st['s3'] > 49 && $st['s3'] < 75) {
-            $st['pa4'] += 5;
-            $st['m3'] += 5;
-            $st['m1'] += 55;
-        }
-        if ($st['s3'] > 74 && $st['s3'] < 100) {
-            $st['pa4'] += 8;
-            $st['m3'] += 10;
-            $st['m1'] += 75;
-            $st['m5'] += 25;
-        }
-        if ($st['s3'] > 99 && $st['s3'] < 125) {
-            $st['pa4'] += 12;
-            $st['m3'] += 15;
-            $st['m1'] += 105;
-            $st['m5'] += 35;
-        }
-        if ($st['s3'] > 124 && $st['s3'] < 150) {
-            $st['pa4'] += 17;
-            $st['m3'] += 20;
-            $st['m1'] += 125;
-            $st['m5'] += 45;
-            $st['m14'] += 1;
-        }
-        if ($st['s3'] > 149 && $st['s3'] < 175) {
-            $st['pa4'] += 20;
-            $st['m3'] += 30;
-            $st['m1'] += 145;
-            $st['m5'] += 50;
-            $st['m14'] += 2;
-        }
-        if ($st['s3'] > 174 && $st['s3'] < 200) {
-            $st['pa4'] += 23;
-            $st['m3'] += 35;
-            $st['m1'] += 165;
-            $st['m5'] += 55;
-            $st['m14'] += 3;
-        }
-        if ($st['s3'] > 199) {
-            $st['pa4'] += 30;
-            $st['m3'] += 40;
+        if ($st['s3'] >= 200) {
             $st['m1'] += 185;
+            $st['m3'] += 40;
             $st['m5'] += 65;
             $st['m14'] += 5;
+            $st['pa4'] += 30;
+        } elseif ($st['s3'] >= 175) {
+            $st['m1'] += 165;
+            $st['m3'] += 35;
+            $st['m5'] += 55;
+            $st['m14'] += 3;
+            $st['pa4'] += 23;
+        } elseif ($st['s3'] >= 150) {
+            $st['m1'] += 145;
+            $st['m3'] += 30;
+            $st['m5'] += 50;
+            $st['m14'] += 2;
+            $st['pa4'] += 20;
+        } elseif ($st['s3'] >= 125) {
+            $st['m1'] += 125;
+            $st['m3'] += 20;
+            $st['m5'] += 45;
+            $st['m14'] += 1;
+            $st['pa4'] += 17;
+        } elseif ($st['s3'] >= 100) {
+            $st['m1'] += 105;
+            $st['m3'] += 15;
+            $st['m5'] += 35;
+            $st['pa4'] += 12;
+        } elseif ($st['s3'] >= 75) {
+            $st['m1'] += 75;
+            $st['m3'] += 10;
+            $st['m5'] += 25;
+            $st['pa4'] += 8;
+        } elseif ($st['s3'] >= 50) {
+            $st['m1'] += 55;
+            $st['m3'] += 5;
+            $st['pa4'] += 5;
+        } elseif ($st['s3'] >= 25) {
+            $st['m1'] += 25;
+            $st['m3'] += 2;
+            $st['pa4'] += 2;
         }
     }
 
@@ -1389,4 +1315,23 @@ from items_users left join items_main on items_main.id = item_id where inOdet !=
         $st['m10'] += 10 * $finishedDungeons;
         $st['pzm'] += $finishedDungeons;
     }
+
+    private function addAdminBonuses(array $u, array &$st): void
+    {
+        if (!$u['admin']) {
+            return;
+        }
+
+        $st['speed_dungeon'] = 500;
+        $st['speedhp'] = 500;
+
+        if (!$u['battle']) {
+            return;
+        }
+
+        Db::sql("update stats set
+             tactic1 = tactic2 = tactic3 = tactic4 = tactic5 = tactic6 = tactic7 = 25,
+             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']]);
+    }
 }