Арена - Space-Lords-TG/docs GitHub Wiki
Общее описание
Арена -- место, режим игры, где игроки сражаются друг против друга за награды.
Флоу игрока следующий:
- переход через нижнее меню на вкладку "Арены";
- подтверждение входа в очередь подбора;
- ожидание поиска противника (пока игрок не вышел из очереди, он ничего не может делать);
как только найден противник, сервер сразу просчитывает результаты боя, начисляет награды, обновляет статистику игроков и характеристики (здоровье) кораблей;
- просмотр характеристик корабля найденного противника;
- просмотр результатов боя;
- выход из меню арены или переход к п. 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 кристаллов и металлов.