1203 lines
41 KiB
PHP
1203 lines
41 KiB
PHP
<?php
|
||
|
||
namespace User;
|
||
|
||
use Core\Config;
|
||
use Core\Db;
|
||
use Helper\Comparsion;
|
||
use Helper\Conversion;
|
||
use Model\Constant\Stat;
|
||
use User;
|
||
|
||
class Stats
|
||
{
|
||
private User $u;
|
||
|
||
/** Список разрешённых для бонусов системных названий статов
|
||
* @var array
|
||
*/
|
||
private array $sysNames;
|
||
|
||
private array $statsKeys = [];
|
||
|
||
public function __construct(User $user)
|
||
{
|
||
$this->u = $user;
|
||
$this->sysNames = (new Stat())->getBonusNames();
|
||
|
||
}
|
||
|
||
/**
|
||
* Собирает суммы всех бонусов с одетых предметов, комплектов предметов, активных эфектов.
|
||
* @param int $userId
|
||
* @return array
|
||
*/
|
||
public static function getAllBonuses(int $userId): array
|
||
{
|
||
$iData = [];
|
||
$im = ItemsModel::getWearedItems($userId);
|
||
foreach ($im as $item) {
|
||
$iData[] = $item['data'];
|
||
}
|
||
$iData[] = Db::getValue('select data from eff_users where uid = ? and `delete` = 0', [$userId]);
|
||
|
||
$params = [];
|
||
$complects = [];
|
||
|
||
foreach ($iData as $datum) {
|
||
$arr = Conversion::dataStringToArray($datum);
|
||
foreach ($arr as $k => $v) {
|
||
if ($k === 'complect') {
|
||
if (isset($complects[$v])) {
|
||
$complects[$v]++;
|
||
} else {
|
||
$complects[$v] = 1;
|
||
}
|
||
}
|
||
if (!str_contains($k, 'add_')) {
|
||
continue;
|
||
}
|
||
$k = str_replace('add_', '', $k);
|
||
self::setBonusValue($params, $k, $v);
|
||
}
|
||
}
|
||
|
||
return self::addComplectsBonuses($complects, $params);
|
||
}
|
||
|
||
private static function setBonusValue(array &$array, $key, $value): void
|
||
{
|
||
if (isset($array[$key])) {
|
||
$array[$key] += $value;
|
||
} else {
|
||
$array[$key] = $value;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @param array $complects
|
||
* @param array $params
|
||
* @return array
|
||
*/
|
||
private static function addComplectsBonuses(array $complects, array $params): array
|
||
{
|
||
$cdata = [];
|
||
if (!empty($complects)) {
|
||
foreach ($complects as $complectId => $wearedItemsQuantity) {
|
||
$cdata[] = Db::getValue('select data from complects where com = ? and x <= ? order by x desc limit 1', [$complectId, $wearedItemsQuantity]);
|
||
}
|
||
foreach ($cdata as $datum) {
|
||
$arr = Conversion::dataStringToArray($datum);
|
||
foreach ($arr as $k => $v) {
|
||
self::setBonusValue($params, $k, $v);
|
||
}
|
||
}
|
||
}
|
||
return $params;
|
||
}
|
||
|
||
/** Данные для отрисовки логина и полосок жизни\маны.
|
||
* @param User $u
|
||
* @return object
|
||
*/
|
||
public static function getLoginHpManaBars(User $u): object
|
||
{
|
||
$hpNow = floor($u->stats['hpNow']);
|
||
$hpAll = $u->stats['hpAll'];
|
||
$mpNow = floor($u->stats['mpNow']);
|
||
$mpAll = $u->stats['mpAll'];
|
||
|
||
//floor(120 / 100 * ($hpNow / $hpAll * 100)); // ??????
|
||
$ph = ($hpAll > 0 && $hpNow > 0) ? floor(120 / $hpNow / $hpAll) : 0;
|
||
$pm = ($mpAll > 0 && $mpNow > 0) ? floor(120 / $mpNow / $mpAll) : 0;
|
||
|
||
return (object)[
|
||
'uid' => $u->info['id'],
|
||
'login' => User::getLogin($u->info['id']),
|
||
'hpbarwidth' => $ph,
|
||
'mpbarwidth' => $pm,
|
||
'hpbartext' => ' ' . $hpNow . '/' . $hpAll,
|
||
'mpbartext' => ' ' . $mpNow . '/' . $mpAll,
|
||
'divstyle' => $pm === 0 ? ' margin-top:13px;' : '',
|
||
'hasmana' => $mpAll > 0,
|
||
];
|
||
}
|
||
|
||
public function getStats(int|array|null $uid = null, $i1 = 0, $res = 0, $reimg = false, $btl_cache = false): array
|
||
{
|
||
if (empty($uid) || $uid == $this->u->info['id'] && $res != 1) {
|
||
//$u = $this->u->info;
|
||
$u = User::getInfo($uid);
|
||
} elseif (is_array($uid)) {
|
||
$u = $uid;
|
||
} else {
|
||
$u = User::getInfo($uid);
|
||
}
|
||
|
||
if (!isset($u['id'])) {
|
||
return [];
|
||
}
|
||
|
||
// Как? Нахуя 4 переменные разные для одного и того же?
|
||
$st = array_fill_keys($this->sysNames, 0);
|
||
$sti = $st;
|
||
$s_v = $st;
|
||
$s_vi = $st;
|
||
|
||
$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 ($r1) {
|
||
$this->addKeyIfNotExist('clanpos', $r1, $st);
|
||
}
|
||
}
|
||
$lvl = Db::getRow('select * from levels where upLevel = ?', [$u['upLevel']]);
|
||
|
||
if (isset($lvl['upLevel'])) {
|
||
$st['levels'] = $lvl;
|
||
} else {
|
||
$st['levels'] = 'undefined';
|
||
}
|
||
|
||
$st['id'] = $u['id'];
|
||
$st['login'] = $u['login'];
|
||
$st['level'] = $u['level'];
|
||
$st['hpNow'] = $u['hpNow'];
|
||
|
||
$st['mpNow'] = $u['mpNow'];
|
||
|
||
$st['zona'] = 1;
|
||
$st['zonb'] = 2;
|
||
$st['items'] = [];
|
||
$st['effects'] = [];
|
||
|
||
$st['vip'] = $u['vip'];
|
||
|
||
foreach (Conversion::dataStringToArray($u['stats']) as $stat => $value) {
|
||
$this->addKeyIfNotExist($stat, (int)$value, $st);
|
||
}
|
||
|
||
$baseStats = $st;
|
||
|
||
//Шаблонные картинки
|
||
if ($this->u->info['id'] === $u['id'] || $reimg) {
|
||
$itemsImages = Db::getRows('select * from items_img where uid = ? and img_id != 0', [$u['id']]);
|
||
|
||
foreach ($itemsImages as $itemsImage) {
|
||
$reimage = Db::getRow('select * from reimage where ((uid = ? and clan = 0) or clan = ?) and good > 0 and bad = 0 and id = ?', [$u['id'], $u['clan'], $itemsImage['img_id']]);
|
||
if (isset($reimage['id'])) {
|
||
$st['items_img'][$itemsImage['type']] = $reimage['id'] . '.' . $reimage['format'];
|
||
} else {
|
||
Db::sql('update items_img set img_id = 0 where id = ?', [$itemsImage['id']]);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
[$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'])) {
|
||
$this->addKeyIfNotExist('puti', $sts['puti'], $st);
|
||
}
|
||
if (isset($sts['add_silver'])) {
|
||
$this->addKeyIfNotExist('slvtm', $e['timeUse'] + $e['actionTime'], $st);
|
||
}
|
||
|
||
$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['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];
|
||
}
|
||
}
|
||
}
|
||
|
||
//Что за нахер?
|
||
WearedScrolls::ScrollsChange($u);
|
||
|
||
//Бонусы статов
|
||
$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['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['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'];
|
||
}
|
||
|
||
if (isset($st['m2all'])) {
|
||
$st['mg1'] += $st['m2all'];
|
||
$st['mg2'] += $st['m2all'];
|
||
$st['mg3'] += $st['m2all'];
|
||
$st['mg4'] += $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'];
|
||
}
|
||
|
||
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);
|
||
|
||
//Добавочный подьем для игроков
|
||
$this->addKeyIfNotExist('maxves', 100, $st);
|
||
|
||
$this->addAdminBonuses($u, $st);
|
||
|
||
if (date('H') >= 22 && date('H') <= 10) {
|
||
$this->addKeyIfNotExist('exp', 25, $st);
|
||
}
|
||
|
||
|
||
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;
|
||
}
|
||
|
||
$this->renameArrayKeys($st);
|
||
|
||
$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;
|
||
}
|
||
|
||
/** Собираем динамически создаваемые параметры. Если ключа нет - создаём.
|
||
* @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
|
||
// Вся вторая строчка - спасибо 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 = ?', [$uid]);
|
||
|
||
$h = 0;
|
||
$hnd1 = 0;
|
||
$hnd2 = 0;
|
||
$sht1 = 0;
|
||
$reitm = [];
|
||
$coms = []; // комплекты
|
||
$dom = [];
|
||
|
||
$oza = [
|
||
1 => [0, 0],
|
||
2 => [0, 0],
|
||
3 => [0, 0],
|
||
4 => [0, 0],
|
||
]; //особенности защиты
|
||
$ozm = [
|
||
1 => [0, 0],
|
||
2 => [0, 0],
|
||
3 => [0, 0],
|
||
4 => [0, 0],
|
||
]; //особенности магии
|
||
|
||
$ozaozmtypes = [
|
||
1 => [1, 9,],//Слабая
|
||
2 => [20, 39,],//Нормальная
|
||
3 => [40, 69,],//Хорошая
|
||
4 => [10, 19,],//Посредственная
|
||
5 => [70, 89,],//Великолепная
|
||
];
|
||
|
||
foreach ($wearedItems as $wearedItem) {
|
||
$this->addKeyIfNotExist('wp' . $wearedItem['inOdet'] . 'id', $h, $st);
|
||
|
||
$st['items'][$h] = $wearedItem;
|
||
$h++;
|
||
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)) {
|
||
$hnd2 = 1;
|
||
} elseif ($wearedItem['inOdet'] == 14 && $wearedItem['type'] == 13) {
|
||
$sht1 = 1;
|
||
}
|
||
|
||
$data = Conversion::dataStringToArray($wearedItem['data']);
|
||
if ($wearedItem['inOdet'] <= 18 && $wearedItem['inOdet'] > 0) {
|
||
$this->addKeyIfNotExist('reting', 1, $st);
|
||
}
|
||
|
||
if (isset($data['add_oza'])) {
|
||
$oza = array_fill_keys($oza, $ozaozmtypes[$data['add_oza']]);
|
||
}
|
||
|
||
if (isset($data['add_ozm'])) {
|
||
$ozm = array_fill_keys($ozm, $ozaozmtypes[$data['add_ozm']]);
|
||
} else {
|
||
$ozm = array_fill_keys($ozm, $ozaozmtypes[1]);
|
||
}
|
||
|
||
if (in_array($data['add_oza1'], range(1, 5))) {
|
||
$oza[1] = $ozaozmtypes[$data['add_oza1']];
|
||
}
|
||
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'])] = $data['complect'];
|
||
}
|
||
$coms['com'][$data['complect']]++;
|
||
}
|
||
|
||
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'])] = $data['complect2'];
|
||
}
|
||
$coms['com'][$data['complect2']]++;
|
||
}
|
||
|
||
if (!empty($data['zonb'])) {
|
||
$this->addKeyIfNotExist('zonb', $data['zonb'], $st);
|
||
}
|
||
|
||
if (!empty($data['zona'])) {
|
||
$this->addKeyIfNotExist('zona', $data['zona'], $st);
|
||
}
|
||
|
||
//Добавляем статы от данного предмета
|
||
if (!isset($data['restart_stats'])) {
|
||
foreach ($this->sysNames as $stat) {
|
||
if (!isset($data['add_' . $stat])) {
|
||
continue;
|
||
}
|
||
$st[$stat] += (int)$data['add_' . $stat];
|
||
}
|
||
} else {
|
||
$reitm[] = $data;
|
||
}
|
||
|
||
foreach ($this->sysNames as $stat) {
|
||
if (!isset($data['sv_' . $stat])) {
|
||
continue;
|
||
}
|
||
$s_v[$stat] += (int)$data['sv_' . $stat];
|
||
}
|
||
}
|
||
|
||
//Сохраненные хар-ки и умения
|
||
if (!empty($reitm) && is_iterable($reitm)) {
|
||
$i39 = [];
|
||
|
||
foreach ($reitm as $item) {
|
||
if (isset($item['sm_skill']) && $i39[0] == 0) {
|
||
//умения
|
||
$i39[0] = 1;
|
||
$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) {
|
||
//статы
|
||
$i39[1] = 1;
|
||
$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;
|
||
}
|
||
}
|
||
}
|
||
return [$hnd1, $hnd2, $sht1, $oza, $ozm, $dom, $coms];
|
||
}
|
||
|
||
private function addMedalsBonuses(int $uid, array &$st): void
|
||
{
|
||
//Харки от иконок
|
||
|
||
$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) {
|
||
if (!in_array($paramName, $this->sysNames, true)) { // есть ли параметр в разрешенных?
|
||
continue;
|
||
}
|
||
$st[$paramName] += $value;
|
||
}
|
||
}
|
||
}
|
||
|
||
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';
|
||
$st['items_img'][11] = 'leg_illusion4.gif';
|
||
} elseif ($nbs[4900] > 0) {
|
||
//Золото комплект
|
||
$st['items_img'][8] = 'robe_illusion5.gif';
|
||
$st['items_img'][11] = 'leg_illusion5.gif';
|
||
} elseif ($nbs[4901] > 0) {
|
||
//Голубой комплект
|
||
$st['items_img'][8] = 'robe_illusion3.gif';
|
||
$st['items_img'][11] = 'leg_illusion3.gif';
|
||
} elseif ($nbs[4902] > 0) {
|
||
//Синий комплект
|
||
$st['items_img'][8] = 'robe_illusion6.gif';
|
||
$st['items_img'][11] = 'leg_illusion6.gif';
|
||
} elseif ($nbs[4903] > 0) {
|
||
//Желтый комплект
|
||
$st['items_img'][8] = 'robe_illusion8.gif';
|
||
$st['items_img'][11] = 'leg_illusion8.gif';
|
||
} elseif ($nbs[4904] > 0) {
|
||
//Сиреневое платье
|
||
$st['items_img'][8] = 'robe_illusion7.gif';
|
||
$st['items_img'][11] = 'leg_illusion7.gif';
|
||
} elseif ($nbs[4905] > 0) {
|
||
//Оранжевое платье
|
||
$st['items_img'][8] = 'robe_illusion9.gif';
|
||
$st['items_img'][11] = 'leg_illusion9.gif';
|
||
} elseif ($nbs[4908] > 0) {
|
||
//Набор Темной Одежды
|
||
$st['items_img'][8] = 'robe_illusion2.gif';
|
||
$st['items_img'][11] = 'leg_illusion2.gif';
|
||
$st['items_img'][10] = 'boots_illusion2.gif';
|
||
$st['items_img'][9] = 'belt_illusion2.gif';
|
||
$st['items_img'][5] = 'naruchi_illusion2.gif';
|
||
$st['items_img'][4] = 'helmet_illusion2.gif';
|
||
$st['items_img'][12] = 'perchi_illusion2.gif';
|
||
} elseif ($nbs[4906] > 0) {
|
||
//Набор Бриллиантовой Одежды
|
||
$st['items_img'][8] = 'robe_illusion1.gif';
|
||
$st['items_img'][11] = 'leg_illusion1.gif';
|
||
$st['items_img'][10] = 'boots_illusion1.gif';
|
||
$st['items_img'][9] = 'belt_illusion1.gif';
|
||
$st['items_img'][5] = 'naruchi_illusion1.gif';
|
||
$st['items_img'][4] = 'helmet_illusion1.gif';
|
||
$st['items_img'][12] = 'perchi_illusion1.gif';
|
||
}
|
||
if ($nbs[4909] > 0) {
|
||
//Набор Золотых украшений
|
||
$st['items_img'][13] = 'ring_illusion2.gif';
|
||
$st['items_img'][17] = 'ring_illusion2.gif';
|
||
$st['items_img'][18] = 'ring_illusion2.gif';
|
||
$st['items_img'][14] = 'amulet_illusion2.gif';
|
||
$st['items_img'][15] = 'earrings_illusion2.gif';
|
||
} elseif ($nbs[4907] > 0) {
|
||
//Набор Золотых украшений
|
||
$st['items_img'][13] = 'ring_illusion1.gif';
|
||
$st['items_img'][17] = 'ring_illusion1.gif';
|
||
$st['items_img'][18] = 'ring_illusion1.gif';
|
||
$st['items_img'][14] = 'amulet_illusion1.gif';
|
||
$st['items_img'][15] = 'earrings_illusion1.gif';
|
||
}
|
||
}
|
||
|
||
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;
|
||
}
|
||
}
|
||
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);
|
||
}
|
||
|
||
$this->addValuesToAllArrays($sts, $st, $sti, $s_v, $s_vi);
|
||
|
||
} else {
|
||
//удаляем эффект
|
||
$this->u->endEffect($e['id'], $u);
|
||
$st['act'] = 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
private function addStatBonuses(array &$st): void
|
||
{
|
||
$this->addStrengthBonuses($st);
|
||
$this->addDexterityBonuses($st);
|
||
$this->addIntuitionBonuses($st);
|
||
$this->addEnduranceBonuses($st);
|
||
$this->addIntelligenceBonuses($st);
|
||
$this->addWisdomBonuses($st);
|
||
}
|
||
|
||
private function addStrengthBonuses(array &$st): void
|
||
{
|
||
if ($st['s1'] > 24 && $st['s1'] < 50) {
|
||
$st['m2'] += 15;
|
||
}
|
||
if ($st['s1'] > 49 && $st['s1'] < 75) {
|
||
$st['pa2'] += 2;
|
||
$st['m2'] += 35;
|
||
}
|
||
if ($st['s1'] > 74 && $st['s1'] < 100) {
|
||
$st['pa2'] += 5;
|
||
$st['m2'] += 50;
|
||
}
|
||
if ($st['s1'] > 99 && $st['s1'] < 125) {
|
||
$st['pa2'] += 8;
|
||
$st['m2'] += 80;
|
||
}
|
||
if ($st['s1'] > 124 && $st['s1'] < 150) {
|
||
$st['pa2'] += 12;
|
||
$st['m2'] += 105;
|
||
}
|
||
if ($st['s1'] > 149 && $st['s1'] < 175) {
|
||
$st['pa2'] += 17;
|
||
$st['m7'] += 2;
|
||
}
|
||
if ($st['s1'] > 174 && $st['s1'] < 200) {
|
||
$st['pa2'] += 23;
|
||
$st['m7'] += 5;
|
||
}
|
||
if ($st['s1'] > 199) {
|
||
$st['pa2'] += 30;
|
||
$st['m7'] += 7;
|
||
}
|
||
}
|
||
|
||
private function addDexterityBonuses(array &$st): void
|
||
{
|
||
if ($st['s2'] > 24 && $st['s2'] < 50) {
|
||
$st['pa1'] += 2;
|
||
$st['m4'] += 35;
|
||
}
|
||
if ($st['s2'] > 49 && $st['s2'] < 75) {
|
||
$st['pa1'] += 5;
|
||
$st['m2'] += 40;
|
||
$st['m4'] += 75;
|
||
}
|
||
if ($st['s2'] > 74 && $st['s2'] < 100) {
|
||
$st['pa1'] += 8;
|
||
$st['m2'] += 65;
|
||
$st['m4'] += 90;
|
||
}
|
||
if ($st['s2'] > 99 && $st['s2'] < 125) {
|
||
$st['pa1'] += 12;
|
||
$st['m2'] += 75;
|
||
$st['m4'] += 105;
|
||
}
|
||
if ($st['s2'] > 124 && $st['s2'] < 150) {
|
||
$st['pa1'] += 17;
|
||
$st['m2'] += 85;
|
||
$st['m4'] += 105;
|
||
$st['m15'] += 1;
|
||
}
|
||
if ($st['s2'] > 149 && $st['s2'] < 175) {
|
||
$st['pa1'] += 20;
|
||
$st['m2'] += 110;
|
||
$st['m4'] += 115;
|
||
$st['m15'] += 2;
|
||
}
|
||
if ($st['s2'] > 174 && $st['s2'] < 200) {
|
||
$st['pa1'] += 23;
|
||
$st['m2'] += 145;
|
||
$st['m4'] += 145;
|
||
$st['m15'] += 3;
|
||
}
|
||
if ($st['s2'] > 199) {
|
||
$st['pa1'] += 30;
|
||
$st['m2'] += 165;
|
||
$st['m4'] += 165;
|
||
$st['m15'] += 5;
|
||
|
||
}
|
||
}
|
||
|
||
private function addIntuitionBonuses(array &$st): void
|
||
{
|
||
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;
|
||
}
|
||
}
|
||
|
||
private function addEnduranceBonuses(array &$st): void
|
||
{
|
||
//выносливость
|
||
if ($st['s4'] > 0) {
|
||
$st['hpall'] += 30;
|
||
}
|
||
if ($st['s4'] > 24 && $st['s4'] < 50) {
|
||
$st['hpall'] += 50;
|
||
}
|
||
if ($st['s4'] > 49 && $st['s4'] < 75) {
|
||
$st['hpall'] += 100;
|
||
}
|
||
if ($st['s4'] > 74 && $st['s4'] < 100) {
|
||
$st['hpall'] += 175;
|
||
$st['m19'] += 2;
|
||
}
|
||
if ($st['s4'] > 99 && $st['s4'] < 125) {
|
||
$st['hpall'] += 250;
|
||
$st['m19'] += 4;
|
||
}
|
||
if ($st['s4'] > 124 && $st['s4'] < 150) {
|
||
$st['hpall'] += 400;
|
||
$st['za'] += 25;
|
||
$st['zm'] += 25;
|
||
}
|
||
if ($st['s4'] > 149 && $st['s4'] < 175) {
|
||
$st['hpall'] += 450;
|
||
$st['za'] += 50;
|
||
$st['zm'] += 50;
|
||
}
|
||
if ($st['s4'] > 174 && $st['s4'] < 200) {
|
||
$st['hpall'] += 600;
|
||
$st['za'] += 100;
|
||
$st['zm'] += 100;
|
||
}
|
||
if ($st['s4'] > 199) {
|
||
$st['hpall'] += 850;
|
||
$st['za'] += 125;
|
||
$st['zm'] += 125;
|
||
}
|
||
}
|
||
|
||
private function addIntelligenceBonuses(array &$st): void
|
||
{
|
||
//интелект
|
||
if ($st['s5'] > 24 && $st['s5'] < 50) {
|
||
$st['m11'] += 10;
|
||
}
|
||
if ($st['s5'] > 49 && $st['s5'] < 75) {
|
||
$st['m11'] += 15;
|
||
}
|
||
if ($st['s5'] > 74 && $st['s5'] < 100) {
|
||
$st['m11'] += 20;
|
||
}
|
||
if ($st['s5'] > 99 && $st['s5'] < 125) {
|
||
$st['m11'] += 25;
|
||
}
|
||
if ($st['s5'] > 124 && $st['s5'] < 150) {
|
||
$st['m11'] += 35;
|
||
}
|
||
if ($st['s5'] > 149 && $st['s5'] < 175) {
|
||
$st['m11'] += 50;
|
||
}
|
||
if ($st['s5'] > 174) {
|
||
$st['m11'] += 65;
|
||
$st['pzm'] += 2;
|
||
}
|
||
if ($st['s5'] > 199) {
|
||
$st['pzm'] += 5;
|
||
}
|
||
}
|
||
|
||
private function addWisdomBonuses(array &$st): void
|
||
{
|
||
//мудрость
|
||
if ($st['s6'] > 24 && $st['s6'] < 50) {
|
||
$st['mpall'] += 150;
|
||
$st['speedmp'] += 100;
|
||
}
|
||
if ($st['s6'] > 49 && $st['s6'] < 75) {
|
||
$st['mpall'] += 200;
|
||
$st['speedmp'] += 200;
|
||
}
|
||
if ($st['s6'] > 74 && $st['s6'] < 100) {
|
||
$st['mpall'] += 250;
|
||
$st['speedmp'] += 350;
|
||
}
|
||
if ($st['s6'] > 99 && $st['s6'] < 125) {
|
||
$st['mpall'] += 350;
|
||
$st['speedmp'] += 500;
|
||
}
|
||
if ($st['s6'] > 124 && $st['s6'] < 150) {
|
||
$st['mpall'] += 500;
|
||
$st['speedmp'] += 500;
|
||
$st['pzm'] += 2;
|
||
}
|
||
if ($st['s6'] > 149 && $st['s6'] < 175) {
|
||
$st['mpall'] += 700;
|
||
$st['speedmp'] += 600;
|
||
$st['pzm'] += 3;
|
||
}
|
||
if ($st['s6'] > 174 && $st['s6'] < 200) {
|
||
$st['mpall'] += 900;
|
||
$st['speedmp'] += 700;
|
||
$st['pzm'] += 5;
|
||
}
|
||
if ($st['s6'] > 199) {
|
||
$st['mpall'] += 900;
|
||
$st['speedmp'] += 700;
|
||
$st['pzm'] += 7;
|
||
}
|
||
}
|
||
|
||
private function addDungeonsBonuses(int $id, array &$st): void
|
||
{
|
||
$finishedDungeons = Db::getValue('select
|
||
if(repcapitalcity > 24999, 1, 0) +
|
||
if(repdemonscity > 24999, 1, 0) +
|
||
if(repangelscity > 24999, 1, 0) +
|
||
if(repdevilscity > 24999, 1, 0) +
|
||
if(repmooncity > 24999, 1, 0) +
|
||
if(repsuncity > 24999, 1, 0) +
|
||
if(repsandcity > 24999, 1, 0) +
|
||
if(repemeraldscity > 24999, 1, 0) +
|
||
if(repizlom > 24999, 1, 0) +
|
||
0 as finished from rep where id = ?', [$id]);
|
||
|
||
//Бонус за количество полностью вырытых пещер.
|
||
$st['m10'] += 10 * $finishedDungeons;
|
||
}
|
||
|
||
private function addAdminBonuses(array $u, array &$st): void
|
||
{
|
||
if (!$u['admin']) {
|
||
return;
|
||
}
|
||
|
||
$this->addKeyIfNotExist('speed_dungeon', 500, $st);
|
||
$this->addKeyIfNotExist('speedhp', 500, $st);
|
||
|
||
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']]);
|
||
}
|
||
|
||
/** Переименовывает элементы массива с несовпадающими с остальным скриптом именами полей.
|
||
* @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']);
|
||
}
|
||
|
||
}
|