From 8c49088f27aa7f31d4033d070a38efa0a6e9098a Mon Sep 17 00:00:00 2001 From: Ivor Barhansky Date: Sat, 10 Feb 2024 18:18:11 +0200 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D0=B0=20mysql=5F?= =?UTF-8?q?query=20=D0=B8=20=D1=83=D0=BF=D1=80=D0=BE=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _incl_data/class/Battle.php | 157 ++++++++++++------------------ _incl_data/class/Priems.php | 8 +- _incl_data/class/User/Effects.php | 22 +++++ 3 files changed, 90 insertions(+), 97 deletions(-) diff --git a/_incl_data/class/Battle.php b/_incl_data/class/Battle.php index 3c780c79..750c1684 100644 --- a/_incl_data/class/Battle.php +++ b/_incl_data/class/Battle.php @@ -9,6 +9,7 @@ use Clan\ClanInfo; use Core\Config; use Core\Db; use DTO\BattlePriem; +use Helper\Comparsion; use Helper\Conversion; use Model\Constant\Stat; use User\Effects; @@ -246,7 +247,7 @@ class Battle /** * @param int|null $experience - * @param bool $hardcore поединок с гарантированной травмой + * @param bool $hardcore поединок с гарантированной травмой * @return array|int[] */ public static function getType(?int $experience, bool $hardcore = false): array @@ -364,10 +365,10 @@ class Battle Db::sql( 'update stats set last_hp = ?, tactic7 = ? where id = ?', [ - $this->users[$this->uids[$uid]]['last_hp'], - $this->users[$this->uids[$uid]]['tactic7'], - $uid, - ] + $this->users[$this->uids[$uid]]['last_hp'], + $this->users[$this->uids[$uid]]['tactic7'], + $uid, + ] ); return (int)$hp; @@ -1034,12 +1035,14 @@ JS; //конец излома $this->finish->finishBattle($tml, $tmv); mysql_query( - 'INSERT INTO `izlom_rating` (`uid`,`time`,`voln`,`level`,`bots`,`rep`,`obr`,`btl`) VALUES ("' . $u->info['id'] . '","' . time() . '","' . $this->i->izlomroundsee . '","' . $this->i->izlomlvl . '","0","0","' . ($this->i->izlomobr - $this->i->izlomobrnow) . '","' . $this->i->id . '")' + 'INSERT INTO `izlom_rating` (`uid`,`time`,`voln`,`level`,`bots`,`rep`,`obr`,`btl`) VALUES ("' . $u->info['id'] . '","' . time( + ) . '","' . $this->i->izlomroundsee . '","' . $this->i->izlomlvl . '","0","0","' . ($this->i->izlomobr - $this->i->izlomobrnow) . '","' . $this->i->id . '")' ); } else { $this->i->setIzlomround($iz['round']); mysql_query( - 'UPDATE `battle` SET `izlomObrNow` = ' . $obr . ',`izlomObr` = `izlomObr` + ' . $obr . ',`timeout` = (`timeout`+5),`izlomRound` = "' . ($this->i->getIzlomround() + 1) . '",`izlomRoundSee` = `izlomRoundSee`+1 WHERE `id` = "' . $this->i->id . '" LIMIT 1' + 'UPDATE `battle` SET `izlomObrNow` = ' . $obr . ',`izlomObr` = `izlomObr` + ' . $obr . ',`timeout` = (`timeout`+5),`izlomRound` = "' . ($this->i->getIzlomround( + ) + 1) . '",`izlomRoundSee` = `izlomRoundSee`+1 WHERE `id` = "' . $this->i->id . '" LIMIT 1' ); $this->stats[$this->uids[$u->info['id']]]['hpNow'] += $this->stats[$this->uids[$u->info['id']]]['hpAll'] * 0.25; $this->stats[$this->uids[$u->info['id']]]['mpNow'] += $this->stats[$this->uids[$u->info['id']]]['mpAll'] * 0.25; @@ -1144,9 +1147,9 @@ JS; /** * @param array $botLogins - * @param int $counter - * @param int $obr - * @param int $unique для совместимости с непонятным вызовом User->addAction + * @param int $counter + * @param int $obr + * @param int $unique для совместимости с непонятным вызовом User->addAction * при вызове уникального монстра. * @return void */ @@ -1236,14 +1239,14 @@ JS; /** Осторожно! Подключаются файлы!!! * Трогать очень осторожно. Этот шайтан как-то проверяет приёмы на враге * и рассчитывает урон учитывая и эти приёмы тоже. - * @param int $uid1 - * @param int $uid2 - * @param int $priem + * @param int $uid1 + * @param int $uid2 + * @param int $priem * @param $yron - * @param int $profil + * @param int $profil * @param bool $stabil * @param bool $test - * @param int $inlog + * @param int $inlog * @return float|int|mixed */ public function testYronPriem( @@ -1255,8 +1258,7 @@ JS; bool $stabil, bool $test = false, int $inlog = 0 - ): mixed - { + ): mixed { /** * profil = { @@ -2081,35 +2083,21 @@ JS; if (!isset($this->atacks[$id]) || $this->atacks[$id]['lock'] != 0) { return; } + //Прием разгадать тактику $i = 1; $j = 2; while ($i <= 2) { - $untac = mysql_fetch_array( - mysql_query( - 'SELECT `id` FROM `eff_users` WHERE `v1` = "priem" AND `v2` = 217 AND `uid` = "' . $this->atacks[$id]['uid' . $i] . '" AND `delete` = 0 LIMIT 1' - ) - ); - $agrs = mysql_fetch_array( - mysql_query( - 'SELECT `id` FROM `eff_users` WHERE `v1` = "priem" AND `v2` = 211 AND `uid` = "' . $this->atacks[$id]['uid' . $j] . '" AND `delete` = 0 LIMIT 1' - ) - ); - if (isset($untac['id']) && !isset($agrs['id'])) { - $pvr['sp'] = mysql_query( - 'SELECT `a`.* FROM `eff_users` AS `a` WHERE `a`.`uid` = "' . $this->atacks[$id]['uid' . $j] . '" AND `a`.`delete` = 0 AND `a`.`v1` = "priem" - and v2 not in (29, 30, 31, 32, 36, 49, 85, 86, 87, 88, 89, 90, 139, 174, 175, 176, 177, 178, 179, 187, 188, 191, 201, 206, 207, 208, 209, 210, 211, 217, 220, 222, 226, - 227, 228, 229, 233, 236, 238, 245, 248, 249, 256, 258, 261, 262, 263, 269, 270, 276, 277, 284, 285, 324, 332, 333, 334, 335) - AND `name` NOT LIKE "%Иммунитет%" - LIMIT 30' - ); - while ($pvr['pl'] = mysql_fetch_array($pvr['sp'])) { - $pvr['pl']['priem'] = mysql_fetch_array( - mysql_query('SELECT * FROM `priems` WHERE `id` = "' . $pvr['pl']['v2'] . '" LIMIT 1') - ); - if (isset($pvr['pl']['priem']['id']) && $pvr['pl']['priem']['neg'] == 0) { - $this->delPriem($pvr['pl'], $this->users[$this->uids[$this->atacks[$id]['uid' . $j]]], 100); - } + $hasResolveTacticPriem = Db::getValue("select count(id) from eff_users where v1 = 'priem' and v2 = 217 and uid = ?", [$this->atacks[$id]['uid' . $i]]) > 0; + $hasNoAgressiveShield = Db::getValue("select count(id) from eff_users where v1 = 'priem' and v2 = 211 and uid = ?", [$this->atacks[$id]['uid' . $j]]) == 0; + + if ($hasResolveTacticPriem && $hasNoAgressiveShield) { + $activePriems = Db::getRows("select eff_users.* from eff_users inner join priems on eff_users.v2 = priems.id where uid = ? and v1 = 'priem' and + v2 not in (29, 30, 31, 32, 36, 49, 85, 86, 87, 88, 89, 90, 139, 174, 175, 176, 177, 178, 179, 187, 188, 191, 201, 206, 207, 208, 209, 210, 211, 217, 220, 222, 226, + 227, 228, 229, 233, 236, 238, 245, 248, 249, 256, 258, 261, 262, 263, 269, 270, 276, 277, 284, 285, 324, 332, 333, 334, 335) and + eff_users.name not like '%Иммунитет%' and neg = 0", [$this->atacks[$id]['uid' . $j]]); + foreach ($activePriems as $ap) { + $this->delPriem($ap, $this->users[$this->uids[$this->atacks[$id]['uid' . $j]]], 100); } } $j--; @@ -2186,6 +2174,7 @@ JS; // Проверяем приемы // Получаем приемы игроков $at = $this->priemsTestRazmen($id, $at); + // Собираем размен (пересчитываем и расчитываем урон и т.д) $at = $this->priemsRestartRazmen($id, $at); //Повторная проверка приемов (если требуется) @@ -2211,12 +2200,12 @@ JS; //Возращаем зоны блока $this->restZonb($this->atacks[$id]['uid1'], $this->atacks[$id]['uid2']); + //обновляем задержки приемов $zd1 = explode('|', $this->users[$this->uids[$this->atacks[$id]['uid1']]]['priems_z']); $zd2 = explode('|', $this->users[$this->uids[$this->atacks[$id]['uid2']]]['priems_z']); - $prmos = []; - $i5 = 0; + $i5 = 0; while ($i5 < 51) { if (isset($zd1[$i5]) && $zd1[$i5] > 0) { //Если приемы не требуют ход @@ -2232,7 +2221,7 @@ JS; } $i5++; } - unset($prmos); + if ($this->users[$this->uids[$this->atacks[$id]['uid1']]]['enemy'] == $this->users[$this->uids[$this->atacks[$id]['uid2']]]['id']) { $this->users[$this->uids[$this->atacks[$id]['uid1']]]['enemy'] = -$this->users[$this->uids[$this->atacks[$id]['uid1']]]['enemy']; @@ -2249,23 +2238,18 @@ JS; } elseif ($this->atacks[$id]['uid2'] == $u->info['id']) { $u->info['priems_z'] = implode('|', $zd2); } + //Проверяем тактики + $i = 1; while ($i <= 6) { - if ($this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] > 25) { - $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] = 25; - } elseif ($this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] <= 0) { - $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] = 0; - } - if ($this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] > 25) { - $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] = 25; - } elseif ($this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] <= 0) { - $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] = 0; - } + $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] = Comparsion::minimax($this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i], 0, 25); + $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] = Comparsion::minimax($this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i], 0, 25); $i++; } + //Обновляем задержки предметов - Db::sql('update items_users set btl_zd = btl_zd - 1 where (uid = ? or uid = ?) and btl_zd > 0 and inOdet > 0', [$this->atacks[$id]['uid1'], $this->atacks[$id]['uid2']]); + Db::sql('update items_users set btl_zd = btl_zd - 1 where (uid = ? or uid = ?) and btl_zd > 0 and inodet > 0', [$this->atacks[$id]['uid1'], $this->atacks[$id]['uid2']]); Db::sql('update users set notrhod = -1 where id = ? or id = ?', [$this->atacks[$id]['uid1'], $this->atacks[$id]['uid2']]); //Обновляем задержки заклинаний, пирогов, тактик @@ -2355,9 +2339,8 @@ JS; if (isset($eff[$i])) { if ($eff[$i]['timeUse'] == 77 && $eff[$i]['hod'] > -1) { $eff[$i]['hod']--; - $eff[$i]['priem'] = mysql_fetch_array( - mysql_query('SELECT * FROM `priems` WHERE `id` = "' . $eff[$i]['v2'] . '" LIMIT 1') - ); + + $eff[$i]['priem'] = Db::getValue('select * from priems where id = ?', [$eff[$i]['v2']]) ?? 0; if (round($eff[$i]['priem']['minmana'] * $eff[$i]['x']) != 0) { //Отнимаем ману у того кто кастовал $priem->minMana( @@ -2411,20 +2394,17 @@ JS; $pvr['mpSee'] = '+' . $pvr['mp']; $pvr['mpNow'] += $pvr['mp']; } - if ($pvr['mpNow'] > $pvr['mpAll']) { - $pvr['mpNow'] = $pvr['mpAll']; - } elseif ($pvr['mpNow'] < 0) { - $pvr['mpNow'] = 0; - } + + $pvr['mpNow'] = Comparsion::minimax($pvr['mpNow'], 0, $pvr['mpAll']); + if ($pvr['mpSee'] == 0) { $pvr['mpSee'] = '--'; } $this->stats[$this->uids[$pvr['uid']]]['mpNow'] = $pvr['mpNow']; $this->users[$this->uids[$pvr['uid']]]['mpNow'] = $pvr['mpNow']; - mysql_query( - 'UPDATE `stats` SET `mpNow` = "' . $this->stats[$this->uids[$pvr['uid']]]['mpNow'] . '" WHERE `id` = "' . $pvr['uid'] . '" LIMIT 1' - ); + + Db::sql('update stats set mpnow = ? where id = ?', [$this->stats[$this->uids[$pvr['uid']]]['mpNow'], $pvr['uid']]); $pvr['text'] = $this->addlt(1, 21, $this->users[$this->uids[$pvr['uid']]]['sex']); $pvr['text2'] = '{tm1} ' . $pvr['text'] . ' на ' . $pvr['mpSee'] . ' [' . $pvr['mpNow'] . '/' . $pvr['mpAll'] . '] (Мана)'; @@ -2442,9 +2422,8 @@ JS; } if ($eff[$i]['hod'] > 0) { $this->stats[$this->uids[$this->atacks[$id]['uid' . $j]]]['effects']['hod'] = $eff[$i]['hod']; - mysql_query( - 'UPDATE `eff_users` SET `hod` = "' . $eff[$i]['hod'] . '" WHERE `id` = "' . $eff[$i]['id'] . '" LIMIT 1' - ); + Effects::setHod($eff[$i]['id'], $eff[$i]['hod']); + } else { //удаляем прием if ($eff[$i]['v2'] > 0) { @@ -2460,14 +2439,10 @@ JS; } } } elseif ($eff[$i]['timeUse'] == 77 && $eff[$i]['hod'] == -2) { - $eff[$i]['priem'] = mysql_fetch_array( - mysql_query('SELECT * FROM `priems` WHERE `id` = "' . $eff[$i]['v2'] . '" LIMIT 1') - ); - $priem->hodUsePriem($eff[$i], $eff[$i]['priem']); + $eff[$i]['priem'] = Db::getRow('select * from priems where id = ?', [$eff[$i]['v2']]); + $priem->hodUsePriem($this, $eff[$i]); } else { - $eff[$i]['priem'] = mysql_fetch_array( - mysql_query('SELECT * FROM `priems` WHERE `id` = "' . $eff[$i]['v2'] . '" LIMIT 1') - ); + $eff[$i]['priem'] = Db::getRow('select * from priems where id = ?', [$eff[$i]['v2']]); if (isset($eff[$i]['priem']['minmana']) && round( $eff[$i]['priem']['minmana'] * $eff[$i]['x'] ) != 0) { @@ -2501,9 +2476,7 @@ JS; } if ($eff[$i]['hod'] > 0) { $this->stats[$this->uids[$this->atacks[$id]['uid' . $j]]]['effects']['hod'] = $eff[$i]['hod']; - mysql_query( - 'UPDATE `eff_users` SET `hod` = "' . $eff[$i]['hod'] . '" WHERE `id` = "' . $eff[$i]['id'] . '" LIMIT 1' - ); + Effects::setHod($eff[$i]['id'], $eff[$i]['hod']); } else { //удаляем прием if ($eff[$i]['v2'] > 0) { @@ -2549,21 +2522,20 @@ JS; } /** Осторожно! Подключаются файлы!!! - * @param $pl + * @param array $pl * @param $u1 - * @param int $t + * @param int $t * @param int|array $u2 - * @param string $rznm + * @param string $rznm * @return void */ public function delPriem( - $pl, - $u1, - int $t = 1, + array $pl, + $u1, + int $t = 1, int|array $u2 = 0, - string $rznm = 'Очиститься Кровью' - ): void - { + string $rznm = 'Очиститься Кровью' + ): void { global $u, $priem; if (!isset($pl['priem']['id']) || isset($this->del_val['eff'][$pl['priem']['id']])) { return; @@ -4128,8 +4100,7 @@ JS; $hodID, $tm1 = 0, $tm2 = 0 - ): void - { + ): void { $time = time(); if ($tm1 == 0) { $tm1 = isset($this->atacks[$id]) ? $this->atacks[$id]['time'] : $time; @@ -4273,7 +4244,7 @@ JS; '{tm1} Персонаж {u1} был убит из-за большого количества пропусков хода.', $this->hodID ); - Db::sql('update stats set hpNow = 0 where id = ?', [$this->atacks[$id]['uid1']]); + Db::sql('update stats set hpnow = 0 where id = ?', [$this->atacks[$id]['uid1']]); } if ($cn2 > Config::get('propsk_die')) { $this->priemAddLog( @@ -4281,7 +4252,7 @@ JS; '{tm1} Персонаж {u1} был убит из-за большого количества пропусков хода.', $this->hodID ); - Db::sql('update stats set hpNow = 0 where id = ?', [$this->atacks[$id]['uid2']]); + Db::sql('update stats set hpnow = 0 where id = ?', [$this->atacks[$id]['uid2']]); } } diff --git a/_incl_data/class/Priems.php b/_incl_data/class/Priems.php index 03771a71..eb52c84a 100644 --- a/_incl_data/class/Priems.php +++ b/_incl_data/class/Priems.php @@ -107,14 +107,14 @@ class Priems } /** используем прием каждый ход - * @param $eff - * @param $pr + * @param Battle $btl + * @param array $eff * @return bool */ - public function hodUsePriem($eff, $pr) + public function hodUsePriem(Battle $btl, array $eff): bool { - global $btl; $u = $this->u; // Для присоедиянемых файлов. + $pr = $eff['priem']; $return_main = true; $ue = Db::getRow( 'select * from users left join stats on (users.id = stats.id) where users.id = ? and battle = ? and hpnow > 0', diff --git a/_incl_data/class/User/Effects.php b/_incl_data/class/User/Effects.php index ca9ee225..e0952197 100644 --- a/_incl_data/class/User/Effects.php +++ b/_incl_data/class/User/Effects.php @@ -199,6 +199,28 @@ insert into eff_users Db::sql("insert into eff_users (no_Ace, id_eff, overType, uid, name, data, timeUse) values (1,479,112,?,'Защита от нападения','zashitatk=1',unix_timestamp())", [$userId]); } + public static function setHod(int $id, int $hod, int|string $x = 0, string $data = ''): void + { + $args = ['id' => $id, 'hod' => $hod]; + $xsql = ''; + $datasql = ''; + + if ($x === 'x + 1') { + $xsql = ', x = x + 1'; + } elseif (is_numeric($x)) { + $xsql = ', x = :x'; + $args['x'] = $x; + } + + if (!empty($data)) { + $datasql = ', data = :data'; + $args['data'] = $data; + } + + $sql = "update eff_users set hod = :hod$xsql$datasql where id = :id"; + Db::sql($sql, $args); + } + /** * Духовность. Спасение. * Из свитка нападения.