battle = $battle; } public function finishBattle(?array $t = null, ?array $v = null, ?int $nl = null): void { global $u; $injuryName = [1 => 'легкую', 2 => 'среднюю', 3 => 'тяжелую', 4 => 'неизлечимую',]; $dnr = 0; //??? $chat = new Chat(); $test = Db::getRow('select id, team_win, testfinish from battle where id = ? and team_win != -1', [$this->battle->i->id]); if ($test['testfinish'] == -1) { sleep(2); } else { Db::sql('update battle set testfinish = -1 where id = ?', [$this->battle->i->id]); if ($nl != 10 && $this->battle->i->getTeamwin() == -1) { $this->battle->i->setTeamWin(); if (is_array($v) && is_array($t)) { foreach ($v as $vs) { if ($vs < 1 || $t[$vs] <= 0) { continue; } $this->battle->i->setTeamWin($vs); } } } //данные о игроках в бою $t = Db::getRows( "select *, users.id as id, users.level as level, users.align as align, users.sex as sex, users.clan as clan, stats.timeGo as timeGo, users.name as name, stats.lider as lider, if(login2 = '',login,login2) as login2 from users left join stats on users.id = stats.id where battle = ?", [$this->battle->i->id] ); foreach ($t as $userInBattle) { $this->battle->users[] = $userInBattle; end($this->battle->users); $this->battle->uids[$userInBattle['id']] = key($this->battle->users); if ($userInBattle['bot'] > 0) { $this->battle->bots[] = $userInBattle; end($this->battle->bots); $this->battle->setIBotsValue($userInBattle['id'], key($this->battle->bots)); } $this->battle->stats[key($this->battle->users)] = $u->getStats(uid: $userInBattle['id'], minimal: true); } if ($this->battle->i->timeover == 0) { $tststrt = Db::getRow('select * from battle where id = ? and time_over = 0', [$this->battle->i->id]); if (isset($tststrt['id'])) { if ($this->battle->i->inturnir == 0 || $this->battle->i->type == 500) { Db::sql('update battle set time_over = unix_timestamp(), team_win = ? where id = ?', [$this->battle->i->getTeamwin(), $this->battle->i->id]); } //Заносим данные о завершении боя $queryValues = ''; $vtvl = ''; foreach ($this->battle->users as $user) { $inner = implode( "','", [ $user['login'], $user['city'], $this->battle->i->id, $user['id'], $user['team'], $user['level'], $user['align'], $user['clan'], $user['exp'], $user['bot'], $user['money'], $user['money2'], $user['money3'], ] ); $queryValues .= "('$inner',unix_timestamp()),"; if ($user['team'] == $this->battle->i->getTeamwin() && $this->battle->i->getTeamwin() > 0) { $vtvl .= '' . $user['login'] . ', '; } } $this->battle->i->setPlayerC(); Db::sql('update battle set players_c = ? where id = ?', [$this->battle->i->getPlayersC(), $this->battle->i->id]); if (!empty($vtvl)) { $vtvl = rtrim($vtvl, ', '); $vtvl = str_replace('"', '\\\\\"', $vtvl); $logtext = "Бой закончен, победа за $vtvl."; } else { $this->battle->i->setDraw(); $logtext = 'Бой закончен, ничья.'; } $this->battle->hodID++; Log::add( [ 'battle' => $this->battle->i->id, 'id_hod' => $this->battle->hodID, 'text' => $logtext, 'vars' => 'time1=' . time(), 'type' => 1, ] ); unset($logtext); $this->saveLogs(); if ($this->battle->i->type == 99) { $logarray = [ 'battle' => $this->battle->i->id, 'id_hod' => $this->battle->hodID, 'text' => 'И победители стали калечить проигравших...', 'vars' => 'time1=' . time(), 'type' => '1', ]; Log::add($logarray); $vtvl = ''; foreach ($this->battle->users as $userToInjure) { if ($userToInjure['team'] == $this->battle->i->getTeamwin()) { continue; } $injuryCaster = Db::getRow('select id, v1 from eff_users where id_eff = 4 and uid = ? order by v1 desc limit 1'); if (!empty($injuryCaster['id']) && $injuryCaster['v1'] >= 3) { continue; } $a = $userToInjure['sex'] == 1 ? 'а' : ''; $injuryType = $this->battle->i->smert == 1 ? 4 : mt_rand(1, 3); if (!empty($injuryCaster['id'])) { $injuryType = mt_rand($injuryCaster['v1'] + 1, 3); } $vtvl = "{$userToInjure['login']} получил$a повреждение:" . " $injuryName[$injuryType].
$vtvl"; Effects::addInjury($userToInjure['id'], $injuryType, rand(3, 5)); } $logarray['text'] = $vtvl; Log::add($logarray); } if (!empty($queryValues)) { $queryValues = rtrim($queryValues, ','); Db::sql("insert into battle_last (login,city,battle_id,uid,team,lvl,align,clan,exp,bot,money,money2,money3,time) values $queryValues"); } Db::sql( 'insert into battle_end (battle_id, city, time, team_win) values (?,?,?,?)', [$this->battle->i->id, $this->battle->i->city, $this->battle->i->timeStart, $this->battle->i->getTeamwin()] ); } $logarray = [ 'battle' => $this->battle->i->id, 'id_hod' => $this->battle->hodID, 'vars' => 'time1=' . time(), 'type' => '1', ]; $vtvl = ''; foreach ($this->battle->users as $userToInjure) { if ($userToInjure['team'] == $this->battle->i->getTeamwin() || $this->battle->i->getTeamwin() == 0) { continue; } $injuryCaster = Db::getRow("select id, v1, data, user_use from eff_users where v1 = 'priem' and v2 = 292 and uid = ? limit 1"); if (empty($injuryCaster['id']) || mt_rand(0, 100) >= $injuryCaster['data']) { continue; } $a = $userToInjure['sex'] == 1 ? 'а' : ''; $injuryType = mt_rand($injuryCaster['v1'] + 1, 3); $injuryCasterLogin = $this->battle->users[$this->battle->uids[$injuryCaster['user_use']]]['login']; $vtvl = "{$userToInjure['login']} получил$a повреждение" . " (Искалечить, автор: $injuryCasterLogin):" . " $injuryName[$injuryType].
$vtvl"; Effects::addInjury($userToInjure['id'], $injuryType, rand(3, 5)); } if (!empty($vtvl)) { if ($this->battle->i->type != 99) { $logarray['text'] = 'И победители стали калечить проигравших...'; Log::add($logarray); } $logarray['text'] = $vtvl; Log::add($logarray); } //Турнир БС if ($this->battle->i->inturnir > 0 && $this->battle->i->dungeon != 15 && $u->info['room'] != 413) { $bs = mysql_fetch_array( mysql_query('SELECT * FROM `bs_turnirs` WHERE `id` = "' . $this->battle->i->inturnir . '" LIMIT 1') ); $i = 0; $j = 0; while ($i < count($this->battle->users)) { $text = ''; if ($this->battle->stats[$i]['hpNow'] < 1 && $this->battle->users[$i]['clone'] == 0 && $this->battle->stats[$i]['clone'] == 0) { //Добавляем в лог БС if ($this->battle->users[$i]['sex'] == 0) { $text .= '{u1} повержен и выбывает из турнира'; } else { $text .= '{u1} повержена и выбывает из турнира'; } //Выкидываем предметы с персонажа $spik = mysql_query( 'SELECT `id`,`item_id` FROM `items_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" AND `delete` ="0"' ); while ($plik = mysql_fetch_array($spik)) { mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`item_id`,`time`,`x`,`y`) VALUES ( "' . $this->battle->users[$i]['dnow'] . '","' . $plik['item_id'] . '","' . (time( ) - 600) . '","' . $this->battle->users[$i]['x'] . '","' . $this->battle->users[$i]['y'] . '" )' ); } unset($spik, $plik); $usrreal = ''; $usr_real = mysql_fetch_array( mysql_query( 'SELECT `id`,`login`,`align`,`clan`,`battle`,`level` FROM `users` WHERE `login` = "' . $this->battle->users[$i]['login'] . '" AND `inUser` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ) ); if (!isset($usr_real['id'])) { $usr_real = $this->battle->users[$i]; } if (isset($usr_real['id'])) { $login = new User\Login($usr_real['align'], $usr_real['clan'], $usr_real['level'], $usr_real['login']); $usrreal .= $login->fullLogin; unset($login); } $text = str_replace('{u1}', $usrreal, $text); mysql_query( 'INSERT INTO `bs_logs` (`type`,`text`,`time`,`id_bs`,`count_bs`,`city`,`m`,`u`) VALUES ( "1", "' . mysql_real_escape_string($text) . '", "' . time() . '", "' . $bs['id'] . '", "' . $bs['count'] . '", "' . $bs['city'] . '", "' . round($bs['money'] * 0.85, 2) . '","' . $i . '" )' ); // //Удаление клона mysql_query('DELETE FROM `users` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1'); mysql_query('DELETE FROM `stats` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1'); mysql_query('DELETE FROM `actions` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '"'); mysql_query('DELETE FROM `items_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '"'); mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '"'); mysql_query('DELETE FROM `users_delo` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '"'); //Обновление персонажа mysql_query( 'UPDATE `users` SET `inUser` = "0" WHERE `login` = "' . $this->battle->users[$i]['login'] . '" OR `inUser` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); //Обновляем заявку mysql_query( 'UPDATE `bs_zv` SET `off` = "' . time() . '" WHERE `inBot` = "' . $this->battle->users[$i]['id'] . '" AND `off` = "0" LIMIT 1' ); unset($text, $usrreal, $usr_real); if ($this->battle->users[$i]['pass'] != 'bstowerbot') { $bs['users']--; $bs['users_finish']++; } else { $bs['arhiv']--; } $j++; } $i++; } if ($j > 0) { mysql_query( 'UPDATE `bs_turnirs` SET `arhiv` = "' . $bs['arhiv'] . '",`users` = "' . $bs['users'] . '",`users_finish` = "' . $bs['users_finish'] . '" WHERE `id` = "' . $bs['id'] . '" LIMIT 1' ); } unset($bs, $j); } //Награда за события if ($this->battle->i->type == 500 && isset($tststrt['id'])) { //Предметы которые выпадают в центр $i = 0; while ($i < count($this->battle->users)) { $cmsg = new ChatMessage(); $cmsg->setType(6); $cmsg->setIsAlert(true); if ($this->battle->users[$i]['no_ip'] == 'trupojor') { $mon = mysql_fetch_array( mysql_query( 'SELECT * FROM `aaa_monsters` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ) ); if (isset($mon['id'])) { if ($this->battle->i->getTeamwin() == 0) { //Ничья mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->battle->stats[$i]['hpAll'] . '",`mpNow` = "' . $this->battle->stats[$i]['mpAll'] . '" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); $cmsg->setText( str_replace( '{b}', '' . $this->battle->users[$i]['login'] . ' [' . $this->battle->users[$i]['level'] . ']battle->users[$i]['id'] . ' >', $mon['nich_text'] ) ); $chat->sendMsg($cmsg); } elseif ($this->battle->i->getTeamwin() != $this->battle->users[$i]['team']) { //Выиграли $j = 0; $usrwin = ''; while ($j < count($this->battle->users)) { if ($this->battle->users[$j]['no_ip'] != 'trupojor' && $this->battle->users[$j]['bot'] == 0 && $this->battle->stats[$j]['hpNow'] > 0) { $login = new User\Login( $this->battle->users[$j]['align'], $this->battle->users[$j]['clan'], $this->battle->users[$j]['level'], $this->battle->users[$j]['login'] ); $usrwin .= ', ' . $login->fullLogin; unset($login); } $j++; } if ($usrwin != '') { $usrwin = ltrim($usrwin, ', '); } else { $usrwin = 'Команда героев'; } mysql_query( 'UPDATE `users` SET `room` = "303" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); $truptimelast = time() + rand(1800, 3600); mysql_query( 'UPDATE `stats` SET `res_x` = "' . $truptimelast . '" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); $cmsg->setText( str_replace( '{b}', '' . $this->battle->users[$i]['login'] . ' [' . $this->battle->users[$i]['level'] . ']battle->users[$i]['id'] . ' >', str_replace('{u}', $usrwin, $mon['win_text']) ) ); $chat->sendMsg($cmsg); unset($usrwin); } else { //Проиграли if ($mon['win_back'] == 1) { mysql_query( 'UPDATE `users` SET `room` = "303" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); } mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->battle->stats[$i]['hpAll'] . '",`mpNow` = "' . $this->battle->stats[$i]['mpAll'] . '" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); $cmsg->setText( str_replace( '{b}', '' . $this->battle->users[$i]['login'] . ' [' . $this->battle->users[$i]['level'] . ']battle->users[$i]['id'] . ' >', $mon['lose_text'] ) ); $chat->sendMsg($cmsg); } } } $i++; } } } // выкидываем ботов из боя $i = 0; $botsi = 0; if (isset($tststrt['id'])) { while ($i < count($this->battle->users)) { //Тут выкидываем юзеров из Призавого хаота if ($this->battle->i->type == 33) { $plde = mysql_fetch_array( mysql_query('SELECT * FROM `users` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1') ); if (isset($plde['mail']) && $plde['mail'] == "haot@new-combats.com") { $pld = mysql_fetch_array( mysql_query( 'SELECT * FROM `users` WHERE `inUser` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ) ); if (isset($pld['id'])) { if ($this->battle->users[$i]['battle_yron'] >= 500) { mysql_query( 'UPDATE `users_achiv` SET `pg`= `pg`+1 WHERE `id` = "' . $pld['id'] . '" LIMIT 1' ); if ($this->battle->users[$i]['team'] == $this->battle->i->getTeamwin() && rand(1, 100) <= 5) { ItemsModel::addItem(10020, $pld['id'], ''); $pld['battle_text'] .= ' За Героическое Сражение вы получаете Жетон Успеха. '; } } else { $pld['battle_text'] .= ' Вы ничего не получили. Нужно набить больше 500 урона урона .'; } $cmsg = new ChatMessage(); $cmsg->setRoom($pld['room']); $cmsg->setTo($pld['login']); $cmsg->setText($pld['battle_text']); $cmsg->setType(6); $chat->sendMsg($cmsg); mysql_query( 'DELETE FROM `stats` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'DELETE FROM `items_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" LIMIT 100' ); mysql_query( 'DELETE FROM `eff_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" LIMIT 100' ); mysql_query( 'UPDATE `users` SET `inUser` = "0" WHERE `inUser` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'DELETE FROM `users` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); } } unset ($plde, $pld); } if ($this->battle->users[$i]['bot'] == 1) { $botsi++; mysql_query('DELETE FROM `users` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1'); mysql_query('DELETE FROM `stats` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1'); mysql_query( 'DELETE FROM `items_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" LIMIT 100' ); mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" LIMIT 100'); } elseif ($this->battle->users[$i]['bot'] == 2 || $this->battle->users[$i]['bot'] > 0) { $this->battle->users[$i]['battle'] = 0; mysql_query( 'UPDATE `users` SET `battle` = "0" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'UPDATE `stats` SET `zv` = "0",`team` = "0",`exp` = `exp` + `battle_exp`,`battle_exp` = "0",`battle_yron` = "0",`enemy` = "0", `timeGo` = "' . time( ) . '" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" LIMIT 100'); } if ($this->battle->users[$i]['clone'] > 0 && $this->battle->users[$i]['bot'] > 0 && isset($this->battle->users[$this->battle->uids[$this->battle->users[$i]['clone']]]['id']) && $this->battle->users[$this->battle->uids[$this->battle->users[$i]['clone']]]['team'] != $this->battle->users[$i]['team']) { //Добавляем что клон побежден if ($this->battle->users[$this->battle->uids[$this->battle->users[$i]['clone']]]['team'] == $this->battle->i->getTeamwin()) { $u->addAction(time(), 'win_bot_clone', '', $this->battle->users[$i]['clone']); } elseif ($this->battle->i->getTeamwin() == 0) { $u->addAction(time(), 'nich_bot_clone', '', $this->battle->users[$i]['clone']); } else { $u->addAction(time(), 'lose_bot_clone', '', $this->battle->users[$i]['clone']); } } elseif ($this->battle->users[$i]['bot'] > 0 && $this->battle->users[$i]['bot_id'] > 0) { //Добавляем что бота победили $j = 0; while ($j < count($this->battle->users)) { if ($this->battle->users[$j]['bot'] == 0 && $this->battle->users[$j]['team'] != $this->battle->users[$i]['team']) { if ($this->battle->users[$j]['team'] == $this->battle->i->getTeamwin()) { // if($this->battle->users[$j]['team']==$this->battle->i->getTeamwin()){ $u->addAction( time(), 'win_bot_' . $this->battle->users[$i]['bot_id'], '', $this->battle->users[$j]['id'] ); // mysql_query( 'UPDATE `dialog_act` SET `now` = `now` + 1 WHERE `uid` = "' . $this->battle->users[$j]['id'] . '" AND ( `btl_bot` LIKE "' . $this->battle->users[$i]['bot_id'] . '!%" OR `btl_bot` LIKE "%!' . $this->battle->users[$i]['bot_id'] . '!%" ) AND `val` != 1 LIMIT 1' ); // } elseif ($this->battle->i->getTeamwin() == 0) { $u->addAction( time(), 'nich_bot_' . $this->battle->users[$i]['bot_id'], '', $this->battle->users[$j]['id'] ); } else { $u->addAction( time(), 'lose_bot_' . $this->battle->users[$i]['bot_id'], '', $this->battle->users[$j]['id'] ); } } $j++; } } $i++; } } //Из бота падают предметы if ($nl != 10 && $this->battle->i->dungeon > 0) { if ($this->battle->i->getTeamwin() == $u->info['team'] && $this->battle->i->dungeon == 102) { $j1 = mysql_fetch_array( mysql_query( 'SELECT * FROM `laba_obj` WHERE `type` = 2 AND `lib` = "' . $this->battle->i->dnId . '" AND `x` = "' . $this->battle->i->x . '" AND `y` = "' . $this->battle->i->y . '" LIMIT 1' ) ); if (isset($j1['id'])) { mysql_query('DELETE FROM `laba_obj` WHERE `id` = "' . $j1['id'] . '" LIMIT 1'); //Выпадает шмотка mysql_query( 'INSERT INTO `laba_obj` (`use`,`lib`,`time`,`type`,`x`,`y`,`vars`) VALUES ( "0","' . $j1['lib'] . '","' . time() . '","6","' . $j1['x'] . '","' . $j1['y'] . '","' . ($botsi) . '" )' ); } } elseif ($this->battle->i->getTeamwin() == $u->info['team']) { //выйграли люди, выкидываем предметы из мобов $j1 = mysql_query( 'SELECT * FROM `dungeon_bots` WHERE `dn` = "' . $this->battle->i->dnId . '" AND `for_dn` = "0" AND `x` = "' . $this->battle->i->x . '" AND `delete` = "0" AND `y`= "' . $this->battle->i->y . '" LIMIT 100' ); while ($tbot = mysql_fetch_array($j1)) { $cmsg = new ChatMessage(); $cmsg->setDn($this->battle->i->dnId); $cmsg->setRoom($this->battle->users[0]['room']); $cmsg->setType(6); $cmsg->setTypeTime(1); $tbot2 = mysql_fetch_array( mysql_query( 'SELECT * FROM `test_bot` WHERE `id` = "' . $tbot['id_bot'] . '" LIMIT 1' ) ); $j2 = 0; while ($j2 < $tbot['colvo']) { if (isset($tbot['id2'])) { $itms = explode('|', $tbot2['p_items']); $tii = 0; $testdrop = 0; while ($tii < count($itms) && $testdrop == 0) { $itmz = explode('=', $itms[$tii]); if ($itmz[0] > 0) { if (isset($itmz[2]) && $itmz[2] != '') { // $itmz[2] == quest888 $questDrop = mysql_fetch_array( mysql_query( 'SELECT * FROM `actions` WHERE `vars` LIKE "%' . $itmz[2] . '%" AND `vals` = "go" AND `uid` = "' . $u->info['id'] . '" LIMIT 1' ) ); } if (!isset($questDrop['id']) && isset($itmz[2]) && $itmz[2] != '') { $itmz[1] = 0; } // Если предмет квестовый, а квеста у игрока нет, то предмет выпадет с вероятностью 0 //Добавляем этот предмет в зону Х и У if ($itmz[1] * 100000 >= rand(1, 10000000)) { $tou = 0; //какому юзеру предназначено /* выделяем случайного юзера из команды */ $cmsg->setText( 'У ' . $tbot2['login'] . ' был предмет "' . ItemModel::getNameById($itmz[0]) . '" и кто угодно может поднять его' ); $chat->sendMsg($cmsg); mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`) VALUES ( "' . $this->battle->i->dnId . '", "' . $tou . '", "' . $itmz[0] . '", "' . time() . '", "' . $this->battle->i->x . '", "' . $this->battle->i->y . '")' ); if (!isset($questDrop['id'])) { $testdrop = 1; //ТУТ drop-drop //quest } } } $tii++; } } $j2++; } // //Квест 1-15 сентября, if ( date('m') == 9 && date('d') < 15 && !Helper::getChanse(99) && ($this->battle->i->dungeon == 12 || $this->battle->i->dungeon == 101) ) { $tou = 0; //какому юзеру предназначено /* выделяем случайного юзера из команды */ $itmz = [ mt_rand(4745, 4751), 100, ]; $cmsg->setText( 'У ' . $tbot2['login'] . ' был предмет "' . ItemModel::getNameById(mt_rand(4745, 4751)) . '" и кто угодно может поднять его' ); $chat->sendMsg($cmsg); mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`) VALUES ( "' . $this->battle->i->dnId . '", "' . $tou . '", "' . $itmz[0] . '", "' . time() . '", "' . $this->battle->i->x . '", "' . $this->battle->i->y . '")' ); } // //Странички саныча, if (rand(1, 100) > 99) { continue; } if ( $this->battle->i->dungeon == 12 || $this->battle->i->dungeon == 3 || $this->battle->i->dungeon == 101 || $this->battle->i->dungeon == 16 || $this->battle->i->dungeon == 9 || $this->battle->i->dungeon == 10 || $this->battle->i->dungeon == 13 || $this->battle->i->dungeon == 106 ) { $tou = 0; //какому юзеру предназначено // выделяем случайного юзера из команды $itmz = mt_rand(3143, 3192); $cmsg->setText( 'У ' . $tbot2['login'] . ' был предмет "' . ItemModel::getNameById($itmz) . '" и кто угодно может поднять его' ); $chat->sendMsg($cmsg); mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`) VALUES ( "' . $this->battle->i->dnId . '", "' . $tou . '", "' . $itmz . '", "' . time() . '", "' . $this->battle->i->x . '", "' . $this->battle->i->y . '")' ); } } mysql_query( 'UPDATE `dungeon_bots` SET `delete` = "' . time( ) . '" AND `inBattle` = "' . $this->battle->i->id . '" WHERE `dn` = "' . $this->battle->i->dnId . '" AND `for_dn` = "0" AND `delete` = "0" ' ); } else { //выкидываем всех игроков в клетку RESTART $dnr = 1; if ($this->battle->i->dungeon != 102) { mysql_query( 'UPDATE `dungeon_bots` SET `inBattle` = "0" WHERE `dn` = "' . $this->battle->i->dnId . '" AND `for_dn` = "0" AND `x` = "' . $this->battle->i->x . '" AND `y`= "' . $this->battle->i->y . '"' ); } } } $gm = []; $gms = []; $bm = []; $bms = []; //Квестовый раздел //Квестовый раздел //завершаем поединок $i = $this->battle->uids[$u->info['id']]; if ($this->battle->i->getTeamwin() >= 0) { $cmsg = new ChatMessage(); $cmsg->setRoom($this->battle->users[$i]['room']); $cmsg->setType(6); if ($this->battle->stats[$i]['pbe'] > 0) { //Бонус покупателя $this->expCoef += $this->battle->stats[$i]['pbe']; } if ($this->battle->i->razdel == 5 && (Config::get('m') >= 6 && Config::get('m') <= 8 || Config::get('w') == 0 || Config::get('w') == 6)) { $this->expCoef += 5; } $this->battle->stats[$i]['exp'] += $this->expCoef; $this->battle->stats[$i]['exp'] += $this->aBexp * Config::get('exp'); if ($this->battle->stats[$i]['os4'] > 0) { $this->battle->stats[$i]['exp'] += $this->battle->stats[$i]['os4']; } $act01 = 0; $this->battle->users[$i]['battle_exp'] = round( $this->battle->users[$i]['battle_exp'] + ($this->battle->users[$i]['battle_exp'] / 100 * (1 + $this->battle->i->getAddexp() + $this->battle->stats[$i]['exp'])) ); if ($this->battle->i->type == 564) { //Бой с копией $this->battle->users[$i]['battle_exp'] = 0; } if ($this->battle->i->dungeon == 104) { $this->battle->users[$i]['battle_exp'] = ($u->info['level'] * 2) * (count($this->battle->uids) - 1); } elseif ($this->battle->i->dungeon > 0 && $this->battle->users[$i]['dnow'] != 0 && $this->battle->i->dungeon != 1 && $this->battle->users[$i]['team'] == $this->battle->i->getTeamwin()) { $dun_limitForLevel = [ 4 => 750, 5 => 1500, 6 => 3500, 7 => 8000, 8 => 25000, 9 => 50000, 10 => 75000, 11 => 100000, 12 => 100000, 13 => 100000, 14 => 100000, ]; // Максимум для каждого уровня. if ($this->battle->users[$i]['battle_exp'] > 0) { $dun_exp = []; // Текущий лимит опыта игрока в подземельях. $rep = mysql_fetch_array( mysql_query( 'SELECT `dungeonexp`,`id` FROM `rep` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ) ); $rep = explode(',', $rep['dungeonexp']); foreach ($rep as $val) { $val = explode('=', $val); // текущий лимит опыта в подземке if (isset($val[0]) && isset($val[1]) && $val[0] != '' && $val[1] != 0) { $dun_exp[(int)$val[0]] = (int)$val[1]; } } unset($rep); } if (!isset($dun_exp[$this->battle->i->dungeon])) { $dun_exp[$this->battle->i->dungeon] = 0; } if (!isset($dun_limitForLevel[(int)$this->battle->users[$i]['level']])) { // Если лимит не задан, опыт не даем. $this->battle->users[$i]['battle_exp'] = 0; } elseif ( isset($dun_exp[$this->battle->i->dungeon]) && $dun_exp[$this->battle->i->dungeon] >= $dun_limitForLevel[(int)$this->battle->users[$i]['level']] ) { // Если лимит уже достигнут, опыт не даем. $this->battle->users[$i]['battle_exp'] = 0; } elseif ( isset($dun_exp[$this->battle->i->dungeon]) && $dun_limitForLevel[(int)$this->battle->users[$i]['level']] > $dun_exp[$this->battle->i->dungeon] ) { // Если текущая репутация не достигла лимита. if (($dun_exp[$this->battle->i->dungeon] + $this->battle->users[$i]['battle_exp']) > $dun_limitForLevel[(int)$this->battle->users[$i]['level']]) { // Если опыта набрано достаточно, для достижения лимита. $this->battle->users[$i]['battle_exp'] = abs( $this->battle->users[$i]['battle_exp'] - abs( $dun_limitForLevel[(int)$this->battle->users[$i]['level']] - ($this->battle->users[$i]['battle_exp'] + $dun_exp[$this->battle->i->dungeon]) ) ); $dun_exp[$this->battle->i->dungeon] += $this->battle->users[$i]['battle_exp']; } elseif ($dun_limitForLevel[(int)$this->battle->users[$i]['level']] > ($dun_exp[$this->battle->i->dungeon] + $this->battle->users[$i]['battle_exp'])) { // Если опыта недостаточно, для достижения лимита. $dun_exp[$this->battle->i->dungeon] += $this->battle->users[$i]['battle_exp']; } else { $this->battle->users[$i]['battle_exp'] = 0; } } else { // В любой непонятной ситуцаии. $this->battle->users[$i]['battle_exp'] = 0; } if ($this->battle->users[$i]['battle_exp'] > 0 && isset($dun_exp[$this->battle->i->dungeon]) && $dun_exp[$this->battle->i->dungeon] > 0) { $dunexp = []; foreach ($dun_exp as $key => $val) { $dunexp[$key] = $key . '=' . $val; // текущий лимит опыта в подземке } $dun_exp = implode(",", $dunexp); mysql_query( 'UPDATE `rep` SET `dungeonexp` = "' . $dun_exp . '" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); unset($dunexp, $dun_exp); } unset($dun_limitForLevel); } $sinf = ''; if (Config::get('exp_mega')) { $this->battle->users[$i]['battle_exp'] += floor( $this->battle->users[$i]['battle_exp'] / 100 * Config::get('exp_mega_val')[$this->battle->users[$i]['level']] ); } if ($this->battle->i->getTeamwin() == 0 && $this->battle->i->type != 564) { if ($this->battle->users[$i]['level'] <= 1) { $this->battle->users[$i]['battle_exp'] = floor($this->battle->users[$i]['battle_exp'] * 0.50); } else { $this->battle->users[$i]['battle_exp'] = ceil($this->battle->users[$i]['battle_exp'] * 0.10); } $this->battle->users[$i]['nich'] += 1; } elseif ($this->battle->users[$i]['team'] == $this->battle->i->getTeamwin() && $this->battle->i->type != 564) { $gm[$i] = $this->battle->i->money; $gms[$i] = $this->battle->i->money3; $this->battle->users[$i]['win'] += 1; $act01 = 1; } elseif ($this->battle->i->type != 564) { if ($this->battle->users[$i]['level'] <= 1) { $this->battle->users[$i]['battle_exp'] = ceil($this->battle->users[$i]['battle_exp'] * 0.33); } else { $this->battle->users[$i]['battle_exp'] = ceil($this->battle->users[$i]['battle_exp'] * 0.10); } $bm[$i] = $this->battle->i->money; $bms[$i] = $this->battle->i->money3; $this->battle->users[$i]['lose'] += 1; $act01 = 2; } //Рассчитываем кол-во выигрышных сумм и кто сколько получил (для екр.) if ($this->battle->i->money3 > 0 && isset($gms[$i]) && $this->battle->i->type != 564) { $mn = [ 'l' => 0, //сколько проигравших игроков 'w' => 0, //сколько выигрывших игроков 'm' => 0, //сумма выигрыша (общая) ]; if ($act01 == 1) { $mn['l'] = mysql_fetch_array( mysql_query( 'SELECT COUNT(`id`) FROM `battle_users` WHERE `battle` = "' . $this->battle->i->id . '" AND `team` != "' . $this->battle->users[$i]['team'] . '" LIMIT 1' ) ); $mn['l'] = $mn['l'][0]; $mn['w'] = mysql_fetch_array( mysql_query( 'SELECT COUNT(`id`) FROM `battle_users` WHERE `battle` = "' . $this->battle->i->id . '" AND `team` = "' . $this->battle->users[$i]['team'] . '" LIMIT 1' ) ); $mn['w'] = $mn['w'][0]; $mn['m'] = round(($mn['l'] * $this->battle->i->money3) / 100 * 87, 2); $gms[$i] = round(($mn['m'] / $mn['w']), 2); } } //заносим данные в БД //Поломка предметов $lom = 0; if ($act01 == 1) { //победа if ($this->battle->users[$i]['dnow'] == 0 && $this->battle->users[$i]['hpNow'] < 1) { $lom = 0.05; } } elseif ($act01 == 2) { //поражение $lom = 0.55; } else { //ничья $lom = 0.05; } $nlom = [0 => rand(0, 18), 1 => rand(0, 18), 2 => rand(0, 18), 3 => rand(0, 18)]; if ($this->battle->i->type == 564 || $this->battle->stats[$i]['silver']) { $lom = 0; } mysql_query( 'UPDATE `items_users` SET `iznosNOW` = `iznosNOW`+' . $lom . ' WHERE `inOdet` < "18" AND `inOdet` > "0" AND `uid` = "' . $this->battle->users[$i]['id'] . '" AND `inOdet`!="0" AND `inOdet`!=' . $nlom[0] . ' AND `inOdet`!=' . $nlom[1] . ' AND `inOdet`!=' . $nlom[2] . ' AND `inOdet`!=' . $nlom[3] . ' LIMIT 18' ); $prc = ''; if ($this->battle->users[$i]['align'] == 2) { $this->battle->users[$i]['battle_exp'] = floor($this->battle->users[$i]['battle_exp'] / 2); } if ($this->battle->users[$i]['animal'] > 0) { $ulan = $u->testAction( '`uid` = "' . $this->battle->users[$i]['id'] . '" AND `vars` = "animal_use' . $this->battle->i->id . '" LIMIT 1', 1 ); if (isset($ulan['id']) && $this->battle->users[$i]['team'] == $this->battle->i->getTeamwin() && $this->battle->users[$i]['level'] > $ulan['vals']) { $a004 = mysql_fetch_array( mysql_query( 'SELECT `max_exp`,`name` FROM `users_animal` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" AND `id` = "' . $this->battle->users[$i]['animal'] . '" AND `pet_in_cage` = "0" AND `delete` = "0" LIMIT 1' ) ); //33% от опыта переходит зверю, но не более максимума $aexp = (round($this->battle->users[$i]['battle_exp'] / 100 * 33)); if ($aexp > $a004['max_exp']) { $aexp = $a004['max_exp']; } unset($ulan); // $cmsg->setTo($this->battle->users[$i]['login']); $cmsg->setText("Ваш питомец «{$a004['name']}» получил опыт: $aexp"); $chat->sendMsg($cmsg); // $upd = mysql_query( 'UPDATE `users_animal` SET `exp` = `exp` + ' . $aexp . ' WHERE `id` = "' . $this->battle->users[$i]['animal'] . '" AND `level` < ' . $this->battle->users[$i]['level'] . ' LIMIT 1' ); if ($upd) { $this->battle->users[$i]['battle_exp'] = round($this->battle->users[$i]['battle_exp'] / 100 * 67); $this->battle->i->modifyAddExp(-33.333); } } } $prsusers = mysql_fetch_array( mysql_query( 'SELECT SUM(`price1`) FROM `battle_users` WHERE `battle` = "' . $this->battle->i->id . '" LIMIT 1' ) ); $this->btlstatus = Battle::getType($prsusers[0]); if ($this->battle->i->smert == 1) { $this->btlstatus = [150, 150, 'Жесточайшее Сражение', 'Жесточайшее Сражение']; } // unset($r1); //Статусная битва if ($this->btlstatus[0] > 0) { if ($this->battle->i->type == 99) { $this->battle->i->modifyAddExp($this->btlstatus[1]); } else { $this->battle->i->modifyAddExp($this->btlstatus[0]); } } if ($this->battle->users[$i]['align'] == 2 || $this->battle->users[$i]['haos'] > time()) { $this->battle->stats[$i]['exp'] = -($this->battle->i->getAddexp() + 50); } if ($this->battle->i->getAddexp() + $this->battle->stats[$i]['exp'] != 0) { $prc = ' (' . (100 + $this->battle->i->getAddexp() + $this->battle->stats[$i]['exp']) . '%)'; } if ($this->battle->i->money > 0) { if (isset($gm[$i])) { $prc .= ' Вы выйграли ' . $gm[$i] . ' кр. за этот бой.'; Delo::add( 4, 'System.battle', $this->battle->users[$i]['id'], '"System.battle": Персонаж выйграл ' . $gm[$i] . ' кр. (В бою №' . $this->battle->i->id . ').', ); $this->battle->users[$i]['money'] += $gm[$i]; } elseif (isset($bm[$i])) { $prc .= ' Вы заплатили ' . $bm[$i] . ' кр. за этот бой.'; Delo::add( 4, 'System.battle', $this->battle->users[$i]['id'], '"System.battle": Персонаж проиграл ' . $gm[$i] . ' кр. (В бою №' . $this->battle->i->id . ').', ); $this->battle->users[$i]['money'] -= $bm[$i]; } } if (Config::get('money_haot') && $this->battle->users[$i]['exp'] <= 200000000 && $act01 == 1 && $this->battle->i->razdel == 5 && $this->battle->users[$i]['level'] >= 8) { //Сколько нужно опыта набить $trexp = [ 8 => 1200, 9 => 3000, 10 => 4500, 11 => 12000, 12 => 20000, 13 => 30000, 14 => 30000, 15 => 30000, 16 => 30000, 17 => 30000, 18 => 30000, 19 => 30000, 20 => 30000, 21 => 30000, ]; $trexp = $trexp[$this->battle->users[$i]['level']]; //Сколько екр дается $admn = [ 8 => 0.05, //0.05 9 => 0.065, //0.065 10 => 0.075, //0.075 11 => 0.085, //0.085 12 => 0.1, //0.1 13 => 0.1, 14 => 0.1, 15 => 0.1, 16 => 0.1, 17 => 0.1, 18 => 0.1, 19 => 0.1, 20 => 0.1, 21 => 0.1, ]; $admn = $admn[$this->battle->users[$i]['level']]; if (Config::get('m') >= 6 && Config::get('m') <= 8) { //Летний период if (Config::get('w') == 0 || Config::get('w') == 5 || Config::get('w') == 6) { //Выходные дни $admn = $admn * 2; } } elseif (Config::get('w') == 0 || Config::get('w') == 5 || Config::get('w') == 6) { //Выходные дни $admn = $admn * 2; } if ($this->battle->users[$i]['battle_exp'] < $trexp) { $prc .= ', Награда 0 ЕКР за этот бой (Мало опыта набили).'; } elseif ($admn > 0) { if ($this->battle->i->type != 33) { $prc .= ', Награда ' . $admn . ' ЕКР за этот бой.'; } Delo::add( 4, 'System.battle', $this->battle->users[$i]['id'], '"System.battle": Персонаж получил ' . $admn . ' ЕКР (В бою №' . $this->battle->i->id . ').', ); $this->battle->users[$i]['money2'] += $admn; } } if ($this->battle->i->money3 > 0) { if (isset($gms[$i])) { $prc .= ' Вы выйграли ' . $gms[$i] . ' $. за этот бой.'; Delo::add( 4, 'System.battle', $this->battle->users[$i]['id'], '"System.battle": Персонаж выйграл ' . $gms[$i] . ' $. (В бою №' . $this->battle->i->id . ').', ); $this->battle->users[$i]['money3'] += $gms[$i]; mysql_query( 'UPDATE `users` SET `money3` = `money3` + "' . $gms[$i] . '" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); } elseif (isset($bms[$i])) { $prc .= ' Вы заплатили ' . $bms[$i] . ' $. за этот бой.'; Delo::add( 4, 'System.battle', $this->battle->users[$i]['id'], '"System.battle": Персонаж проиграл ' . $gms[$i] . ' $. (В бою №' . $this->battle->i->id . ').', ); $this->battle->users[$i]['money3'] -= $bms[$i]; mysql_query( 'UPDATE `users` SET `money3` = `money3` - "' . $bms[$i] . '" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); } } $lime = [ 8 => 18000, 9 => 28000, 10 => 84000, 11 => 100, 12 => 100, 13 => 100, 14 => 100, 15 => 100, 16 => 100, 17 => 100, 18 => 100, 19 => 100, 20 => 100, 21 => 100, ]; if ($this->battle->users[$i]['level'] < 8) { $lime = 5400; } else { $lime = $lime[$this->battle->users[$i]['level']]; } if ($this->battle->stats[$i]['silver'] >= 5) { $lime += round($lime); } if ($this->battle->users[$i]['stopexp'] == 1) { $lime = 0; $this->battle->users[$i]['battle_exp'] = 0; } if ($lime < $this->battle->users[$i]['battle_exp'] && Config::get('limitedexp')) { $this->battle->users[$i]['battle_exp'] = $lime; } unset($lime); if ($this->btlstatus[0] > 0) { if ($this->battle->i->type == 99) { $prc .= ' (' . $this->btlstatus[3] . ')'; } else { $prc .= ' (' . $this->btlstatus[2] . ')'; } } if ($this->battle->i->dungeon == 1 && $this->battle->users[$i]['team'] == $this->battle->i->getTeamwin()) { //канализация лимит $rep = mysql_fetch_array( mysql_query( 'SELECT `dl1`,`id` FROM `rep` WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ) ); if ($rep['dl' . $this->battle->i->dungeon] > 0) { $this->battle->users[$i]['battle_exp'] += 3 * count($this->battle->users); if ($rep['dl' . $this->battle->i->dungeon] > $this->battle->users[$i]['battle_exp']) { $rep['dl' . $this->battle->i->dungeon] -= $this->battle->users[$i]['battle_exp']; } else { $this->battle->users[$i]['battle_exp'] = $rep['dl' . $this->battle->i->dungeon]; $rep['dl' . $this->battle->i->dungeon] = 0; } mysql_query( 'UPDATE `rep` SET `dl' . $this->battle->i->dungeon . '` = "' . $rep['dl' . $this->battle->i->dungeon] . '" WHERE `id` = "' . $rep['id'] . '" LIMIT 1' ); } else { $this->battle->users[$i]['battle_exp'] = 0; } } if ($this->battle->users[$i]['battle_exp'] < 1) { $this->battle->users[$i]['battle_exp'] = 0; } if ( $this->battle->users[$i]['battle_exp'] < 1 && $this->battle->users[$i]['twink'] == 0 && $this->battle->i->money == 0 && $this->battle->i->money3 == 0 && $this->battle->i->kingfight == 0 && (!isset($admnb) || $admnb == 0) ) { $prc = ''; } if ($this->battle->users[$i]['host_reg'] == 'real_bot_user') { $this->battle->users[$i]['battle_exp'] = round($this->battle->users[$i]['battle_exp'] / 3); } if ($sinf != '') { $sinf = ' ( ' . $sinf . ' )'; } //--------------Лимит 8-9-------------- if ($this->battle->users[$i]['level'] == 8 && $this->battle->users[$i]['battle_exp'] >= 23000) { $this->battle->users[$i]['battle_exp'] = 23000; } if ($this->battle->users[$i]['level'] == 9 && $this->battle->users[$i]['battle_exp'] >= 31000) { $this->battle->users[$i]['battle_exp'] = 31000; } if ($this->battle->users[$i]['level'] == 10 && $this->battle->users[$i]['battle_exp'] >= 52000) { $this->battle->users[$i]['battle_exp'] = 52000; } if ($this->battle->users[$i]['level'] >= 11 && $this->battle->users[$i]['battle_exp'] >= 75000) { $this->battle->users[$i]['battle_exp'] = 75000; } //------------------------------------- if ($this->battle->i->type != 33) { $this->battle->users[$i]['battle_text'] = 'Бой закончен. Всего вами нанесено урона: ' . floor( $this->battle->users[$i]['battle_yron'] ) . ' HP. Получено опыта: ' . (0 + $this->battle->users[$i]['battle_exp']) . '' . $prc . '.' . $sinf; //stats } //Снижение времени Право на подвиг Титул за победу в хаоте if ($this->battle->i->dungeon == 0 && $this->battle->i->razdel == 5 && $this->battle->users[$i]['team'] == $this->battle->i->getTeamwin()) { //ТУТ2 StatsModel::addRepexpById($this->battle->users[$i]['id'], 2); //Репутация за поб в хаоте +2 $check = mysql_fetch_array( mysql_query( 'SELECT * FROM `eff_users` WHERE `id_eff` = 478 AND `uid` = "' . $this->battle->users[$i]['id'] . '" AND `delete` = 0 ORDER BY `overType` DESC LIMIT 1;' ) ); if (isset($check['id'])) { $urcheck = 10000; if ($this->battle->users[$i]['level'] == 8) { $urcheck = 3000; } elseif ($this->battle->users[$i]['level'] == 9) { $urcheck = 7000; } elseif ($this->battle->users[$i]['level'] == 10) { $urcheck = 12000; } elseif ($this->battle->users[$i]['level'] >= 11) { $urcheck = 18000; } if ($this->battle->users[$i]['battle_yron'] >= $urcheck) { mysql_query( 'UPDATE `eff_users` SET `timeUse` = `timeUse` - 300 WHERE `id_eff`=478 AND `delete` = 0 AND `uid` =' . $this->battle->users[$i]['id'] . ' LIMIT 1' ); $this->battle->users[$i]['battle_text'] .= ' За победу в хаоте и нанесение урона в ' . $urcheck . ' и более вы получаете -5 мин. к праву на подвиг!'; } } mysql_query( 'UPDATE `users_achiv` SET `vx`= `vx`+1 WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); // } //Награда за клан вар if ($this->battle->i->dungeon == 0 && $this->battle->i->type == 250 && $this->battle->users[$i]['team'] == $this->battle->i->getTeamwin()) { mysql_query( 'UPDATE `users_achiv` SET `kw`= `kw`+1 WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); if (date('w') == 0 || date('w') == 6 || date('w') == 4) { StatsModel::addRepexpById($this->battle->users[$i]['id'], 25); //Клановые войны(победа) 25 } } //Награда за клан вар if ( $this->battle->i->dungeon == 0 && $this->battle->i->type == 99 && $this->battle->users[$i]['team'] == $this->battle->i->getTeamwin() && (date('w') == 0 || date('w') == 6 || date('w') == 5) ) { StatsModel::addRepexpById($this->battle->users[$i]['id'], 10); //Кровавые войны(победа) 10 } //Новая выдача на трупожора if ($this->battle->i->dungeon == 0 && $this->battle->i->type == 500 && $this->battle->users[$i]['team'] == $this->battle->i->getTeamwin() && $this->battle->users[$i]['no_ip'] != 'trupojor' && $this->battle->users[$i]['bot'] == 0) { if ($this->battle->users[$i]['level'] > 9) { $mid = 903093; } else { $mid = 89489; } $mon = mysql_fetch_array( mysql_query('SELECT * FROM `aaa_monsters` WHERE `uid` = "' . $mid . '" LIMIT 1') ); if ($this->battle->users[$i]['battle_yron'] >= 1500) { $ritem = rand(1, 100); if ($ritem <= 20) { $mon['win_itm'] = '4459@1'; } elseif ($ritem <= 40) { $mon['win_itm'] = '4460@1'; } elseif ($ritem <= 60) { $mon['win_itm'] = '4461@1'; } elseif ($ritem <= 80) { $mon['win_itm'] = '4462@1'; } else { $mon['win_itm'] = '4463@1'; } } elseif ($this->battle->users[$i]['battle_yron'] >= 1000) { $ritem = rand(1, 100); if ($ritem <= 25) { $mon['win_itm'] = '4460@1'; } elseif ($ritem <= 50) { $mon['win_itm'] = '4461@1'; } elseif ($ritem <= 75) { $mon['win_itm'] = '4462@1'; } else { $mon['win_itm'] = '4463@1'; } } else { $mon['win_itm'] = '4392@1'; } if ($this->battle->users[$i]['battle_yron'] > 0) { mysql_query( 'INSERT INTO `eff_users` (`no_Ace`,`id_eff`,`overType`,`uid`,`name`,`data`,`timeUse`) VALUES ("1","478","111","' . $this->battle->users[$i]['id'] . '","Право на подвиг","pravonapodvig=1","' . time( ) . '")' ); } mysql_query( 'INSERT INTO `actions`(`uid`, `time`, `city`, `room`, `vars`, `ip`, `vals`, `val`) VALUES ("' . $this->battle->users[$i]['id'] . '","' . time( ) . '","capitalcity","' . $this->battle->users[$i]['room'] . '","end_trup"," ","","")' ); mysql_query( 'INSERT INTO `eff_users` (`no_Ace`,`id_eff`,`overType`,`uid`,`name`,`data`,`timeUse`) VALUES ("1","479","112","' . $u->info['id'] . '","Защита от нападения","zashitatk=1","' . time( ) . '")' ); $ritem = rand(1, 1000); if ($ritem == 555) { $mon['win_itm'] = $mon['win_itm'] . ',5022@1'; } // $this->addGlobalItems( $mid, $this->battle->users[$i]['id'], $mon['win_itm'], $mon['win_ico'], 1, $mon['win_money1'], $mon['win_money2'] ); } if ( ($this->battle->i->razdel == 5 || $this->battle->i->razdel == 4) && (date('d.m') == '31.10' || (date('m') == 11 && date('d') < 7)) ) { //Хэллоуин 4504 $this->battle->users[$i]['battle_text'] .= ' Вы получаете Тыква (x1).'; ItemsModel::addItem(4504, $this->battle->users[$i]['id'], '|sudba=1'); } //Добавляем воинственность if ( $this->battle->i->dungeon == 0 && $this->battle->i->razdel == 5 && $this->battle->users[$i]['exp'] >= 1500 && $this->battle->users[$i]['battle_exp'] > 100 * $this->battle->users[$i]['level'] ) { $rzbvo = $this->battle->users[$i]['battle_exp'] * 6 / 1000; if ($this->battle->users[$i]['level'] == 8 && $rzbvo >= 100) { $rzbvo = 100; } if ($this->battle->users[$i]['level'] == 9 && $rzbvo >= 150) { $rzbvo = 150; } if ($this->battle->users[$i]['level'] == 10 && $rzbvo >= 200) { $rzbvo = 200; } if ($this->battle->users[$i]['level'] == 11 && $rzbvo >= 250) { $rzbvo = 250; } if ($this->battle->users[$i]['level'] == 12 && $rzbvo >= 250) { $rzbvo = 250; } if ($this->battle->i->type != 33) { $this->battle->users[$i]['battle_text'] .= ' Вы получили ' . $rzbvo . ' воинственности за этот бой.'; } mysql_query( 'UPDATE `rep` SET `rep3` = `rep3` + "' . $rzbvo . '" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'INSERT INTO `actions`(`uid`, `time`, `city`, `room`, `vars`, `ip`, `vals`, `val`) VALUES ("' . $this->battle->users[$i]['id'] . '","' . time( ) . '","capitalcity","' . $this->battle->users[$i]['room'] . '","end_xaot"," ","","")' ); } if ($this->battle->stats[$i]['hpNow'] >= 1) { $this->battle->stats[$i]['test_heal'] = mysql_fetch_array( mysql_query( 'SELECT SUM(`yrn`) FROM `battle_stat` WHERE `uid2` = "' . $this->battle->users[$i]['id'] . '" AND `battle` = "' . $this->battle->i->id . '" LIMIT 1' ) ); $this->battle->stats[$i]['test_heal'] = $this->battle->stats[$i]['test_heal'][0]; $this->battle->stats[$i]['test_start'] = mysql_fetch_array( mysql_query( 'SELECT `hpStart` FROM `battle_users` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" AND `battle` = "' . $this->battle->i->id . '" LIMIT 1' ) ); $this->battle->stats[$i]['test_start'] = $this->battle->stats[$i]['test_start']['hpStart']; // $this->battle->stats[$i]['hpNow'] = ($this->battle->stats[$i]['test_start'] - $this->battle->stats[$i]['test_heal']); if ($this->battle->stats[$i]['hpNow'] < 1) { $this->battle->stats[$i]['hpNow'] = 1; } } else { $this->battle->stats[$i]['hpNow'] = 0; } unset($this->battle->stats[$i]['test_heal']); $this->battle->users[$i]['last_b'] = $this->battle->i->id; //stats $this->battle->users[$i]['last_a'] = $act01; $this->battle->users[$i]['battle'] = -1; //users $this->battle->users[$i]['battle_yron'] = 0; //stats $this->battle->users[$i]['exp'] += $this->battle->users[$i]['battle_exp']; //users //Добавляем клан опыт (Все кроме пещер) if ($this->battle->users[$i]['clan'] > 0) { $cpr = 1; if ($this->battle->i->typebattle == 9) { $cpr = 25; } elseif ($this->battle->i->typebattle == 50) { $cpr = 65; } if ($this->battle->stats[$i]['silver'] >= 5) { $cpr = floor($cpr / 100 * 150); } Clan::addExp( round($this->battle->users[$i]['battle_exp'] / 100 * $cpr), $this->battle->users[$i]['clan'] ); } $this->battle->users[$i]['battle_exp'] = 0; //stats if ($this->battle->users[$i]['team'] == $this->battle->i->getTeamwin()) { $r = new Reputation($this->battle->users[$i]['id']); $r->addRep('n_capitalcity', $this->battle->users[$i]['bn_capitalcity']); $r->addRep('n_demonscity', $this->battle->users[$i]['bn_demonscity']); $r->addRep('n_suncity', $this->battle->users[$i]['bn_suncity']); } //репутация $this->battle->users[$i]['bn_demonscity'] = 0; $this->battle->users[$i]['bn_capitalcity'] = 0; $this->battle->users[$i]['bn_suncity'] = 0; //обновляем данные Effects::removePriems($this->battle->users[$i]['id']); $this->dieInDungeon($dnr, $i, $u, $cmsg, $chat); Db::sql('update users set login2 = default where battle = ?', [$this->battle->i->id]); Db::sql( 'update users set login2 = default, money = ?, money2 = ?, win = ?, lose = ?, nich = ?, battle = -1 where id = ?', [ $this->battle->users[$i]['money'], $this->battle->users[$i]['money2'], $this->battle->users[$i]['win'], $this->battle->users[$i]['lose'], $this->battle->users[$i]['nich'], $this->battle->users[$i]['id'], ] ); if ($u->info['id'] == $this->battle->users[$i]['id']) { $u->info['battle_text'] = $this->battle->users[$i]['battle_text']; } Db::sql( 'update stats set hpNow = ?, mpNow = ?, tactic7 = 10, x = ?, y = ?, exp = ?, battle_exp = ?, battle_text = ?, last_b = ?, regHP = unix_timestamp(), regMP = unix_timestamp() where id = ?', [ $this->battle->stats[$i]['hpNow'], $this->battle->stats[$i]['mpNow'], $this->battle->users[$i]['x'], $this->battle->users[$i]['y'], $this->battle->users[$i]['exp'], $this->battle->users[$i]['battle_exp'], $this->battle->users[$i]['battle_text'], $this->battle->i->id, $this->battle->users[$i]['id'], ] ); if ($this->battle->i->turnir == 0) { //пишем в чат $cmsg->setTo($this->battle->users[$i]['login']); $cmsg->setText($this->battle->users[$i]['battle_text']); $chat->sendMsg($cmsg); } else { Db::sql('update turnirs set winner = ? where id = ?', [$this->battle->i->getTeamwin(), $this->battle->i->turnir]); } //завершаем сам бой Db::sql('update battle set time_over = unix_timestamp(), team_win = ? where id = ?', [$this->battle->i->getTeamwin(), $this->battle->i->id]); // Жрать хочет if ($this->battle->users[$i]['animal'] > 0) { $a = mysql_fetch_array( mysql_query( 'SELECT * FROM `users_animal` WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" AND `id` = "' . $this->battle->users[$i]['animal'] . '" AND `pet_in_cage` = "0" AND `delete` = "0" LIMIT 1' ) ); if (isset($a['id']) && $a['eda'] < 1) { $cmsg = new ChatMessage(); $cmsg->setRoom($this->battle->users[$i]['room']); $cmsg->setTo($this->battle->users[$i]['login']); $cmsg->setText('' . $a['name'] . ' нуждается в еде...'); $cmsg->setType(6); $chat->sendMsg($cmsg); } } mysql_query( 'UPDATE `stats` SET `battle_text` = "",`last_b`="0" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); mysql_query('UPDATE `battle_users` SET `finish` = 1 WHERE `uid` = "' . $this->battle->users[$i]['id'] . '"'); $this->saveLogs(); if ($u->info['battle'] != 0 && !isset($u->info['battle_lsto'])) { echo << document.getElementById('teams').style.display='none'; var battleFinishData = {$u->info['battle_text']} HTML; } } } mysql_query('UPDATE `battle` SET `testfinish` = "0" WHERE `id` = "' . $this->battle->i->id . '" LIMIT 1'); } private function addItemToItemsLocal(int $itemId, int $uid, string $data = ''): void { Db::sql( "insert into items_local (room, time, item_id, data, tr_login, colvo) values (?,unix_timestamp(),?,?,?,1)", [ $this->battle->users[$this->battle->uids[$uid]]['room'], $itemId, $data, $this->battle->users[$this->battle->uids[$uid]]['login'], ] ); } private function addGlobalItems($bid, $uid, $itm, $ico, $exp, $cr, $ecr): void { global $u; $chat = new Chat(); $cmsg = new ChatMessage(); $cmsg->setType(6); $cmsg->setRoom($this->battle->users[$this->battle->uids[$uid]]['room']); $cmsg->setTo($this->battle->users[$this->battle->uids[$uid]]['login']); $cmsg->setColor('#cb0000'); $this->addGlobalItemsDropsOnMainStreet($bid, $uid); if ($exp >= 0) { //added if, was division by zero. 27.08.22, ins. $this->battle->users[$this->battle->uids[$uid]]['battle_exp'] += round( $this->battle->stats[$this->battle->uids[$bid]]['hpAll'] > 0 ? $exp * $this->battle->users[$this->battle->uids[$uid]]['battle_yron'] / $this->battle->stats[$this->battle->uids[$bid]]['hpAll'] : $exp * $this->battle->users[$this->battle->uids[$uid]]['battle_yron'] ); Db::sql( 'update stats set battle_exp = ? where id = ?', [ $this->battle->users[$this->battle->uids[$uid]]['battle_exp'], $uid, ] ); } if (!empty($cr) && $this->battle->stats[$this->battle->uids[$uid]]['hpNow'] > 0) { $this->battle->users[$this->battle->uids[$uid]]['money'] += (int)$cr; $u->addKr((int)$cr, $uid); $cmsg->setText("Вы получили кредиты: $cr кр."); $chat->sendMsg($cmsg); } if (!empty($ecr) && $this->battle->stats[$this->battle->uids[$uid]]['hpNow'] > 0) { $this->battle->users[$this->battle->uids[$uid]]['money2'] += (int)$ecr; $u->addEkr((int)$ecr, $uid); $cmsg->setText("Вы получили еврокредиты: $ecr екр."); $chat->sendMsg($cmsg); Delo::add( 4, 'System.battle', $this->battle->users[$this->battle->uids[$uid]]['id'], '"System.battle": Персонаж получил ' . $ecr . ' ЕКР (В бою трупожор), сейчас: ' . $this->battle->users[$this->battle->uids[$uid]]['money2'] . ' ЕКР', ); } $this->addGlobalItemsIco($ico, $uid, $cmsg, $chat); $this->addGlobalItemItm($itm, $uid, $cmsg, $chat); } /** * Сохраняем лог в архив * @return void */ private function saveLogs(): void { Db::sql( 'insert into battle_logs_save select id, time, battle, id_hod, text, vars, zona1, zonb1, zona2, zonb2, type from battle_logs where battle = ? and id_hod <= ?', [$this->battle->i->id, $this->battle->hodID] ); Db::sql('delete from battle_logs where battle = ?', [$this->battle->i->id]); Db::sql('delete from battle_stat where battle < ?', [$this->battle->i->id - 100]); Db::sql('delete from battle_actions where btl = ?', [$this->battle->i->id]); } private function dieInDungeon(int $dnr, int $i, User $u, ChatMessage $cmsg, Chat $chat): void { if ($dnr != 1) { return; } $vars = $this->battle->users[$i]['room'] == 370 ? 'dielaba' : 'die'; $dies = Actions::countDungeon( $this->battle->users[$i]['dnow'], $this->battle->users[$i]['id'], $vars ); Actions::addDungeon( $this->battle->users[$i]['dnow'], $this->battle->users[$i]['id'], $this->battle->users[$i]['x'], $this->battle->users[$i]['y'], $vars ); $la = $this->battle->users[$i]['sex'] == 1 ? 'ла' : ''; if ($dies < 2 || $this->battle->i->dungeon == 15) { $shaibaItemId = Db::getValue('select id from items_users where uid = ? and item_id = 4910 limit 1', [$this->battle->users[$i]['id']]); if ($shaibaItemId) { //выбрасываем шайбу ItemsModel::delete($shaibaItemId); Db::sql( "insert into dungeon_obj (name, dn, x, y, img, action, w, h, os1, os2, os3, date) values ('Шайба',?,?,?,'shaiba.png','fileact:15/shaiba',120,220,5,8,12,?)", [ $this->battle->i->dnId, $this->battle->users[$i]['x'], $this->battle->users[$i]['y'], "{use:'takeit',rt1:69,rl1:-47,rt2:74,rl2:126,rt3:76,rl3:140,rt4:80,rl4:150}", ] ); } //телепортируем в рестарт (координата 0х0) $this->battle->users[$i]['x'] = $this->battle->users[$i]['res_x']; $this->battle->users[$i]['y'] = $this->battle->users[$i]['res_y']; $this->battle->users[$i]['s'] = $this->battle->users[$i]['res_s']; $roomName = Db::getValue('select name from room where id = ?', [(int)$this->battle->users[$i]['room']]); $reviveRoomName = $this->battle->users[$i]['room'] == 370 ? 'начале лабиринта' : "комнате «{$roomName}»"; $rtxt = "{$this->battle->users[$i]['login']} трагически погиб$la и находится в $reviveRoomName"; } elseif ($this->battle->i->dungeon == 102) { $nld = ''; $lab = Db::getRow('select id, users from laba_now where id = ?', [$this->battle->users[$i]['id']]); if ($lab['users'] < 2) { //Удаляем подземелье Db::sql('delete from laba_now where id = ?', [$lab['id']]); Db::sql('delete from laba_map where id = ?', [$lab['id']]); Db::sql('delete from laba_obj where lib = ?', [$lab['id']]); Db::sql('delete from laba_act where lib = ?', [$lab['id']]); Db::sql('delete from laba_itm where lib = ?', [$lab['id']]); } else { $lab['users']--; mysql_query( 'UPDATE `laba_now` SET `users` = "' . $lab['users'] . '" WHERE `id` = "' . $lab['id'] . '" LIMIT 1' ); } mysql_query( 'UPDATE `stats` SET `dnow` = "0" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'UPDATE `users` SET `room` = "369" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); //удаляем все предметы которые пропадают после выхода из пещеры mysql_query( 'UPDATE `items_users` SET `delete` = "' . time( ) . '" WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" AND `delete` < 1234567890 AND `inShop` = "0" AND (`dn_delete` = "1" OR `data` LIKE "%fromlaba=1%")' ); if ($this->battle->users[$i]['login'] != '') { if ($this->battle->users[$i]['sex'] == 0) { $rtxt = '' . $this->battle->users[$i]['login'] . ' трагически погиб без права на воскрешение и покидает подземелье' . $nld; } else { $rtxt = '' . $this->battle->users[$i]['login'] . ' трагически погибла без права на воскрешение и покидает подземелье' . $nld; } } } else { $tinf = mysql_fetch_array( mysql_query( 'SELECT `uid` FROM `dungeon_now` WHERE `id` = "' . $this->battle->i->dnId . '" LIMIT 1' ) ); $nld = ''; if ($tinf['uid'] == $this->battle->users[$i]['id']) { $tinf = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `stats` WHERE `dnow` = "' . $this->battle->i->dnId . '" AND `hpNow` >= 1 LIMIT 1' ) ); if (isset($tinf['id'])) { $tinf = mysql_fetch_array( mysql_query( 'SELECT `id`,`login` FROM `users` WHERE `id` = "' . $tinf['id'] . '" LIMIT 1' ) ); $nld .= ', новым лидером становится "' . $tinf['login'] . '"'; mysql_query( 'UPDATE `dungeon_now` SET `uid` = "' . $tinf['id'] . '" WHERE `id` = "' . $this->battle->i->dnId . '" LIMIT 1' ); } } mysql_query( 'UPDATE `stats` SET `dnow` = "0" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'UPDATE `users` SET `room` = "321" WHERE `id` = "' . $this->battle->users[$i]['id'] . '" LIMIT 1' ); //удаляем все предметы которые пропадают после выхода из пещеры mysql_query( 'UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . $this->battle->users[$i]['id'] . '" AND `dn_delete` = "1" LIMIT 1000' ); mysql_query( 'UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . $u->info['id'] . '" AND `item_id` = "1189" OR `item_id` = "4447" OR `item_id` = "1174") LIMIT 1000' ); if ($this->battle->users[$i]['sex'] == 0) { $rtxt = '' . $this->battle->users[$i]['login'] . ' трагически погиб без права на воскрешение и покидает подземелье' . $nld; } else { $rtxt = '' . $this->battle->users[$i]['login'] . ' трагически погибла без права на воскрешение и покидает подземелье' . $nld; } } if (!empty($rtxt)) { $cmsg->setDn($this->battle->i->dnId); $cmsg->setText($rtxt); $cmsg->setTypeTime(1); $chat->sendMsg($cmsg); } } private function addGlobalItemsIco(string $ico, int $uid, ChatMessage $cmsg, Chat $chat): void { if (empty($ico)) { return; } /** ** $exploded[]: * 0 (тип, 1 - значок, 2 - подвиг)@ * 1 (время в минутах)@ * 2 (название картинки)@ * 3 (название)@ * 4 (требует остаться в живых 0 или 1, либо игрок умер -1)@ * 5 (требует набить с ботам урона в % Например 0.001)@ * 6 (действия например: add_s1=5|add_hpAll=50)@ * 7 (Требует другой значок, название картинки)@ * 8 (плюсует значок 0 или 1)@ * 9 (удаляем прошлый значок 0 or 1) */ $txt = ''; foreach (explode('#', $ico) as $icon) { $exploded = explode('@', $icon); if (empty($exploded[3])) { continue; } $add = 1; if ($exploded[4] == 1 && floor($this->battle->stats[$this->battle->uids[$uid]]['hpNow']) < 1) { $add = 0; } if ($add != 1) { continue; } $ins = false; if ($exploded[8] == 0) { $ins = true; if ($exploded[9] == 1) { Db::sql('delete from users_ico where uid = ? and img = ?', [$uid, $exploded[2]]); } } else { $oldIcoId = Db::getValue( 'select id from users_ico where uid = ? and img = ? and (endTime > unix_timestamp() or endTime = 0)', [$uid, $exploded[2]] ); if (!$oldIcoId || $oldIcoId < 1) { $ins = true; } else { $txt .= ", «$exploded[3] (Обновление)»"; Db::sql( 'update users_ico set x = x + 1, endTime = unix_timestamp() + ? * 60 where id = ?', [$exploded[1], $oldIcoId] ); } } if (!$ins) { continue; } if ($exploded[9] == 1) { Db::sql('delete from users_ico where uid = ? and img = ?', [$uid, $exploded[2]]); } Db::sql( 'insert into users_ico (uid, time, text, img, endTime, type, bonus) values (?,unix_timestamp(),?,?,unix_timestamp() + ? * 60,?,?)', [ $uid, $exploded[3], $exploded[2], $exploded[1], $exploded[0], $exploded[6], ] ); $txt .= ", «$exploded[3]»"; } if (!empty($txt)) { $txt = ltrim($txt, ', '); $cmsg->setText("Вы совершили подвиг: $txt"); $chat->sendMsg($cmsg); } } private function addGlobalItemItm($itm, $uid, ChatMessage $cmsg, Chat $chat): void { if (empty($itm)) { return; } /** ** $exploded[]: * 0 (id предмета)@ * 1 (количество предметов)@ * 2 (data предмета |add_s1=5|add_hpAll=50)@ */ $txt = ''; foreach (explode(',', $itm) as $item) { $exploded = explode('@', $item); if ($exploded[0] < 1) { continue; } for ($i = 0; $i < $exploded[1]; $i++) { ItemsModel::addItem($exploded[0], $uid, "|$exploded[2]"); } if (empty($this->ainm[$exploded[0]])) { $this->ainm[$exploded[0]] = Db::getRow('select id, name from items_main where id = ?', [$exploded[0]]); } if (empty($this->ainm[$exploded[0]]['id'])) { continue; } $txt .= ", {$this->ainm[$exploded[0]]['name']}"; if ($exploded[1] > 1) { $txt .= ", (x$exploded[1])"; } } if ($txt != '') { $txt = ltrim($txt, ', '); $cmsg->setText("Вы получили предметы: $txt"); $chat->sendMsg($cmsg); } } private function addGlobalItemsDropsOnMainStreet(int $bid, int $uid): void { //Выпадение дропа на ЦП $mf = Db::getValue('select floor(count(id) / 20) as c from users where online > unix_timestamp() - 120'); $mf = mt_rand(1, max($mf, 1)); if ($bid == 1008) { //Старый Новый Год for ($i = 0; $i < $mf; $i++) { if (mt_rand(0, 1) === 1) { continue; } if (mt_rand(0, 86) <= 71) { for ($j = 1; $j <= 7; $j++) { $this->addItemToItemsLocal(1000, $uid, '|nosale=1|srok=259200'); } } else { $customs = [911, 1172, 1173, 1461, 1462, 1463, 2141, 2142, 2143, 2144, 2870, 4037, 4038, 4039, 4040]; $this->addItemToItemsLocal($customs[array_rand($customs)], $uid, '|nosale=1|srok=259200'); } } } elseif ($bid == 1007) { //Хэллоуин, Тыквоголовый CAPITAL CITY for ($i = 0; $i < $mf; $i++) { if (mt_rand(0, 1) === 1) { continue; } $this->addItemToItemsLocal(4504, $uid); } } elseif ($bid == 1006 && mt_rand(1, 10) === 1 || in_array($bid, range(1000, 1004))) { //Трупожор CAPITAL CITY $this->addItemToItemsLocal(4451, $uid, 'srok=2592000'); } } public function getBtlstatus(): array { return $this->btlstatus; } }