Init.
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
/** todo
|
||||
* В каком-то месте проверять по крону не протух ли турнир!
|
||||
*/
|
||||
|
||||
namespace Insallah;
|
||||
|
||||
class Tournament
|
||||
{
|
||||
/**
|
||||
* Проверяем может ли игрок учавствовать в турнире и либо присоединяем его, либо обламываем.
|
||||
*
|
||||
* @param int $user_id
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function join($user_id)
|
||||
{
|
||||
/** Возвращает level, или 0 если провалены проверки. */
|
||||
$userLevel = TournamentModel::getUserLevel($user_id);
|
||||
if ($userLevel === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$mq = TournamentModel::getWaitingMembersQuantity($userLevel);
|
||||
if (empty($mq)) {
|
||||
TournamentModel::createTournament($userLevel);
|
||||
}
|
||||
|
||||
TournamentModel::joinTournament($user_id, $userLevel);
|
||||
|
||||
/** На третьем участнике пишем уведомление в чат. */
|
||||
if ($mq === 2) {
|
||||
TournamentModel::sysMessage("Внимание! Идёт набор бойцов на турнир " . $userLevel . " уровня! Поспешите!");
|
||||
}
|
||||
|
||||
/** На двенадцатом участнике начинаем турнир. */
|
||||
if ($mq === 11) {
|
||||
TournamentModel::startTournament($userLevel);
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user