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']]); + } }