Решил набросать пару мыслей о возможных реализациях рейтинговой системы для возрожденного ммдока.
Необходимость ее достаточно очевидна: с одной стороны она даст дополнительную мотивацию играть сильным игрокам, а с другой стороны позволит новичкам возится в своей песочнице и получать удовольствие от простой игры до тех пор, пока они не вырастут настолько, чтобы бросить вызов громовержцам, сидящим на вершине рейтинга. Однако, когда доходит дело до конкретной реализации все становится не так просто. Итак давайте рассмотрим воозможные реализации рейтинговой системы с их плюсами и недостатками.
1) Накопительная система. За победу получаешь +1, за ничью 0.5, за поражение 0. Самый примитив в худшем смысле этого слова. В этом случае турнирная таблица превратится в ужасный гринд, кто больше играет, того и тапки. Простой Вася, который уволился с работы и теперь круглые сутки режется в ммдок может даже с отрицательным винрейтом получить столько очков, сколько играющим по вечерам в жизни не набить. Такое нам точно не нужно. Из недостатков также стоит отметить ориентированность такого рейтинга на раш, так как быстрые игры обеспечат гораздо больше очков, чем гарантированная победа на медленной колоде. Из плюсов - отсутствие депрессии от потерянных очков, т.к. ты можешь только расти, а твои старание и время в любом случае поднимают тебя в рейтинге, что в целом должно мотивировать новичка играть еще, несмотря на поражения.
2) Балансная система. За победу +1, за ничью 0, за поражение -1. Из плюсов отмечу отсутствие инфляции рейтинга. В сумме по всем игрокам он будет нулевой. Однако минусы гораздо существеннее, даже чем в первом случае. С одной стороны гринд никуда не исчез: Вася из прошлого пункта, поднявший винрейт на креге до 55%, уедет далеко ото всех остальных, играющих по вечерам и на дамире с винрейтом 90%. То есть для верхушки рейтинга этот вариант не подойдет. С другой стороны, за каждое поражения ты получаешь леща и солидный минус в рейтинг. Самое страшное, если ты ушел глубоко в минуса сильно ниже стартового рейтинга. Играть после этого совершенно не хочется. Ты или идешь регать твинка с нулевым рейтингом (а вот и инфляция подъехала), или просто забиваешь на игру, что более вероятно. В общем, такая система плоха для всех. С другой стороны, она может быть применена в случаях, если у игроков есть какая-то внешняя мотивация играть, и надо занять их и задержать в игре на продолжительное время. В таком случае большинство игроков будет долго болтаться +/- на одном месте.
3) Рейтинг Эло. За победу над сильным игроком получаем больше, чем над слабым. За поражение наоборот. Идеально для сильных игроков, которые регулярно играют друг с другом на одной и той же колоде. У противника есть возможность быстро догнать и перегнать, вырвавшегося вперед противника. Не нужно много гринда, чтобы это сделать. С другой стороны есть ряд минусов: Для слабых игроков так и остается проблема отрицательного рейтинга. Она очень демотивирующая и ведет к быстрому оттоку игроков (чтобы тут РАК не говорил, если бы у него за поражения от "профи" еще и отнимались очки, он бы горел гораздо сильнее).
С другой стороны, для топа есть проблема бездействующего лидера: если ты поймал вин-стрик и резко поднялся над всеми остальными, то ради сохранения топа, ты просто перестаешь играть ранкед и никто к тебе не может близко подобраться (ммдок это проходил, когда ally-of-justice набил кучу эло и забил на игру. В итоге висел на троне несколько патчей, пока рейтинговую систему не подкрутили так, чтобы трон был на 200 эло выше его старой позиции).
Другая проблема, разнородность колод ммдока. Система мотивирует играть на одной и той же колоде, что сильно сокращает радость от игры для бойцов за рейтинг. И с каждым новым матчем, становится все хуже, ибо ты поднимаешь скилл на этой конкретной колоде, и утрачиваешь навыки игры на других, поэтому пересесть на другое лицо становится сложнее. В результате все надоедает, и ты уходишь из игры.
Формула расчета рейтинга Эло для шахмат из википедии:
Кстати, относительно самого рейтинга, тут есть всего два коэффициента для подкрутки: количество очков получаемое за одну партию, и типичное расстояние по эло, которое различает игроков по уровню игры. Вопрос подбора этих коэффициентов - отдельная тема.
4) Если осмотреть все широким взглядом, то четко видно, что вариант 1 подходит для новичков, а на основе третьего варианта можно строить рейтинг для топа. Так например сделано в ХС, где система 1 сделана вначале игры (раньше было 5 рангов, но как видно песочница оказалась слишком короткой и теперь новичковых уровней уже 30), система подобная второй для промежуточного звена игроков, а для топа введен скрытый рейтинг Эло. При этом промежуточный этап введен для поедания времени игрока, а постепенный прогресс там реализован за счет малых поправок от винстриков (до 5-ого ранга) и за счет несгораемых участков (от 1-ого до 5-ого). Таким образом, дизайнеры ХС определяют сколько времени в среднем нужно потратить игроку для достижения легенды. Однако в нашем случае,пример из ХС малоприменим в связи с тем, что игроков мало и все будут играть со всеми (почти), а значит система должна быть более однородная (и желательно без такого количества гринда).
5) Тогда подсмотрим идею из гвинта. Давайте сделаем нормальный рейтинг Эло (дальше просто x), дадим каждому условно по 1000 стартовых очков и будем считать все честно.
Однако отображать будем модифицированный рейтинг y, который при регистрации равен нулю. Этот рейтинг y будет вычисляться следующим образом: y = kappa * x, где каппа зависит от количества побед на вашем аккаунте и растет линейно от 0 до 1, скажем, в течении 100 побед. То есть с каждой победой коэффициент растет на 1%, а значит и рейтинг существенно подрастает. При поражении же коэффициент не уменьшается (хотя потери будут за счет величины x, но они будут небольшими). Таким образом, рейтинг новичка в целом будет расти, создавая у него чувство прогресса (а прогресс по мере игры так или иначе будет в связи с набором опыта). То есть небольшую порцию очков y при поражении новичок будет терять, но за победу вначале он будет получать гораздо больше, что даст искомую положительную динамику даже с отрицательным винрейтом. Тут идеально сделать так, чтобы на максимальный уровень коэффициента игрок выходил ровно в тот момент, когда он более-менее научился играть, а его реальный эло уже устаканился и болтался вокруг своей равновесной отметки.
При этом противники будут получать рейтинг, исходя из твоего реального эло (а матчмейкинг отправлять сражаться с ними.)
Возможно на стартовом отрезке игры стоит увеличить коэффициент получения/потери очков в формуле эло, чтобы быстрей вывести рейтинг эло на равновесное значение.
6) Проблему инактива топовых игроков можно решить по аналогии с рейтингом из Призматы. Там это сделано так: если ты не играешь долгое время, то твой коэффициент каппа1 начинает уменьшаться, о чем тебе явно пишут. То есть твой фактический рейтинг остается таким же, но в таблицу рекордов он входит с поправкой на инактивность. Чтобы ее вернуть надо сыграть несколько матчей.
7) Ок, теперь подумаем над вопросом разнообразия колод для игры, чтобы не стимулировать игроков играть исключительно на одной колоде. Тут тоже можно почерпнуть опыт гвинта, и ввести отдельную шкалу эло для каждой фракции (для каждого героя наверно уже чересчур). В этом случае, при игре за определенную колоду мы влияем только на рейтинг этой фракции и больше ни на что. При этом изменения рейтинга фракции должны учитывать именно рейтинг оппонента по фракции, на которой он играл. Суммарный же рейтинг может рассчитываться, как среднее от рейтингов за все фракции.
Однако, поскольку у всех есть любимые герои и фракции, то честно будет дать им больше влияния в общем рейтинге, чем нелюбимым. В этом случае стоит дать фракциям веса: например, фракция с наибольшим рейтингом входит в усредненный рейтинг с коэффициентом 2, вторая по успешности с коэф 1.5, третья и четвертая с единичками, пятая с 0.5, а шестая не входит вообще. В таком случае будет и интересно играть за разные фракции,и у игроков будет больше возможностей посоревноваться за первенство не только в общем рейтинге, но и во фракционном. (тут конечно надо сортировку по разными типам рейтинга сделать).
Конечно, фракционный рейтинг стоит демонстрировать только в тот момент, когда человек выбирается из песочницы и его коэф. роста достигает единицы, а общий усредненный рейтинг уже будет болтаться на равновесном значении. Возможно в этот момент и стоит присвоить для всех фракций равновесную величину, если общий рейтинг ниже стартового.
Итог:
Таким образом, получилось предложение системы рейтинга, которая дает рост для новичков и разнообразие для топов. Может что-то из этого и подойдет для физической реализации в в возро;денном ммдоке. По крайней мне самому в теории такая система нравится. Заодно она не требует обнуления, ибо вопрос инактива решается сам собой.
a1. Параллельно общему рейтингу можно добавить ежедневный обнуляемый рейтинг, типа как был в джекпоте. Его стоит сделать простым рейтингом эло, и включать по очереди для стд и опена режима, при этом учитывать все рейтинговые игры из этих режимов. Это добавит градуса соревнований и никак не ухудшит игровую практику.
а2. С точки зрения дизайна мне кажется уместным отображать цветом разницу эло с хостом в ранкед играх (который отображается как ???). Например, если эло противника сильно ниже, чем у вас, то строка залита нежно салатовым, если противник одинаковый по силе, то желтым, а если он сильно выше по рейтингу - то бледно красным. А уж в совсем предельных случаях добавить в строчку череп с костями.
При этом возможно стоит запретить заходить топам к новичкам (скрыть игры из рассмотрения) при какой-то разнице по эло вверх. Но не наоборот, пусть новички сами могут заходить на красный индикатор. То есть сделать все для удобства песочницы, чтобы новым игрокам было хорошо, тепло и удобно.
Upd. Я тут подумал, что новичкам из песочницы стоит разрешить заходить только в нерейтинговые игры сильных игроков. В противном случае, возможен абуз рейтинговый игры, то что сильный игрок регистрирует смурфа с маленьким эло, чтобы сталкерить своих конкурентов и опускать их рейтинг. Такой возможности лучше избежать.
P.S. Все это исключительно мое личное мнение, но, надеюсь, какие-то из этих идей помогут при разработке функционала рейтинга.