check_members($userLevel); } } /** * Проверяем есть ли ещё участники турнира. Если есть, отправляем драться. Если остался последний - значит он * победитель. * todo Обработать ничью! * * @param int $tournament_id * * @return void */ private function check_members($tournament_id) { $active_fighters = TournamentModel::getFreeFighters($tournament_id); if (count($active_fighters) > 1) { $this->start_battle($active_fighters); } else { TournamentModel::removeFighter($active_fighters[0]); // выбиваем победителя $this->victory($tournament_id); } } /** * Получаем пары бойцов и начинаем их поединки. * * @param array $fighters_list * * @return void */ private function start_battle(array $fighters_list) { $teams = TournamentModel::getFightersTeams($fighters_list); foreach ($teams as $team) { if (count($team) === 2) { TournamentModel::startBattle($team[0], $team[1]); } } } /** * Вызывается при проигрыше боя или при уходе в оффлайн. * * @param int $user_id * * @return void */ public function kick_user($user_id) { if (empty($user_id)) { return; } TournamentModel::removeFighter($user_id); $this->check_members(TournamentModel::getTournamentIdByUserId($user_id)); //перезапуск выбора противника для поединка } /** * Награждаем победителей турнира, чистим базу. * * @param int $tournament_id * * @return void */ private function victory($tournament_id) { $winners = TournamentModel::getWinners($tournament_id); TournamentModel::destroyTournament($tournament_id); TournamentModel::givePrizeItems($winners[1], 25); TournamentModel::givePrizeItems($winners[2], 10); TournamentModel::givePrizeItems($winners[3], 5); } }