Арена - Space-Lords-TG/docs GitHub Wiki

Общее описание

Арена -- место, режим игры, где игроки сражаются друг против друга за награды.

Флоу игрока следующий:

  1. переход через нижнее меню на вкладку "Арены";
  2. подтверждение входа в очередь подбора;
  3. ожидание поиска противника (пока игрок не вышел из очереди, он ничего не может делать);

как только найден противник, сервер сразу просчитывает результаты боя, начисляет награды, обновляет статистику игроков и характеристики (здоровье) кораблей;

  1. просмотр характеристик корабля найденного противника;
  2. просмотр результатов боя;
  3. выход из меню арены или переход к п. 2.

Правила подбора

Подбор противника для дуэли проходит на основе мощи корабля. Подробно про мощь модулей и корабль описано здесь.

В MVP допустимым диапазоном разброса мощи является 20% от мощи слабейшего корабля в паре. То есть если в поиске стоят корабли с мощью 400 и 320, то эти 20% считаются от 320, а не от 400. Оба корабля должны входить в диапазоны допустимой мощи друг-друга.

В нашем случае:

  • первый корабль имеет диапазон [320; 480]
  • второй корабль имеет диапазон [256; 384]

Второй входит в диапазон поиска первого, но сам находится за пределами диапазона второго.

Если в диапазон входят сразу несколько кораблей, пара составляется из тех, очки мощи которых ближе друг к другу.

На самом деле, только первый корабль пары будет ждать своего противника. Поскольку как только новый корабль встаёт в очередь, сервер вычисляет, есть ли в очереди подходящие для него противники. И если есть -- сразу же проходит битва. Для улучшения системы подбора можно переделать систему и с течением времени расширять допустимый диапазон "мэтча", но это более трудоёмко и не входит в MVP.

Награды

Формулы

ОМ1 -- очки мощи первого игрока

ОМ2 -- очки мощи второго игрока

K -- коэффициент результата: при победе равен 0.01, при поражении -- 0.003

L -- коэффициент разброса сил: награды больше, чем сильнее противник. По умолчанию равен 1.5.

ОН -- очки награды первого игрока (для просчёта ОН другого игрока достаточно все ОМ1 поменять с ОМ2)

ОН = ОМ1 * K * (1 + [(OМ2 - ОМ1) / ОМ2]) ^ L

В арене каждая половина очков награды переводится в кристаллы и металл.

Примеры

ОМ1 = 15000

ОМ2 = 14000

Первый игрок победил, поэтому K = 0.01

ОН = 15000 * 0.01 * (1 + [14000 - 15000] / 14000) ^ 1.5 = 150 * (1 - 0.0714) ^ 1.5 = 150 * 0.895 = 134.25

Победивший игрок получает по 134.25 / 2 = 67.125 кристаллов и металлов.

Теперь посчитаем награду для второго игрока, тут уже K = 0.003, а ОМ1 и ОМ2 меняются значениями:

ОН = 14000 * 0.003 * (1 + [15000 - 14000] / 15000) ^ 1.5 = 42 * (1 - 0.0667) ^ 1.5 = 42 * 1.1 = 46.2

Проигравший игрок получил по 46.2 / 2 = 23.1 кристаллов и металлов.