Внимение! Имеющих аллергию на стену текста просим срочно покинуть сие опасное место!
В одном из топиков раздела достаточно случайно разговор зашел о проблеме дисбаланса количества игроков на БГ. В ответ на мой упрек близзам, что 3 года не могут решить простейшую проблему, меня попросили предложить ее решение. Понимая, что объяснение потребует большого количества текста, а так же желая просветить побольше народу, я делаю отдельную тему.
Итак, с чего все начиналось, история и суть проблемы. Она родилась в тот же день, как близы выпустили в свет батлграунды, тогда их было всего два, WSG и AV. Никто бы никогда так и не узнал, что такая проблема существует, если бы разработчики сразу сделали все как следует. Но что-то у них не срослось, и перед нами предстала…
Версия решения через жопу номер один. Работало оно следующим образом. Ставиться в очередь можно было только на один батлграунд (и только в определенном месте мира, хотя это и не так важно). Как только у каждой фракции в очереди на БГ набиралось определенное минимальное количество игроков (для WSG – 3, для AV – 10) запускался батлгрунд и туда приглашалось столько народу, чтобы заполнить все свободные места. При том не имело значения, есть ли у противоположной фракции в очереди достаточное количество. Последнему дураку понятно, что если при такой системе на одной стороне стоит в очереди 30 игроков, а на другой 3, то в БГ будет приглашено 10 против 3.
Проблема усугублялась тем, что не все стоящие в очереди действительно входили в игру (кто-то засыпал в ожидании, у кого то оплата кончалась, а кто то и просто физически не доживал), так что элементарно могло запускаться БГ 10 против 0. Даже такая простейшая вещь, как оценка возможностей противоположной фракции наполнить игру, сделана не была. Прошло примерно пол года, форумы ныли про длинные очереди и дисбаланс сторон на БГ и близы родили…
Версию решения через жопу номер два. Собственно это было усовершенствование первой версии и заключалось оно в том, что в момент запуска БГ близзы таки сделали проверку длины очереди каждой из сторон и приглашали на игру только ограниченное количество. После запуска БГ (буквально каждые 45 секунд) близы проверяли, а нет ли кого-нибудь там еще в очереди, и если кто-то был, то они снова приглашали одинаковое количество. Но как вы, конечно, понимаете, без жопы тут никак обойтись не могло, и заключалась она в том, что система приглашения игроков на БГ абсолютно игнорировала текущее количество уже играющих. То есть в случае, если игроки одной из команд не входили в игру или из нее выходили, то система не желала это видеть и как только в очереди появлялась еще пара игроков, она звала обоих. Учитывая психологию людей, которые не хотели играть в меньшинстве, и отсутствие на тот момент дебафа дезертира, сторона, которая стартовала в меньшинстве, просто выходила из БГ и вставала в очередь снова в надежде на более справедливую игру. И система звала их вновь… вместе с еще таким же количеством противоположной стороны. Как следствие игры 10 на 3 совершенно никуда не исчезли и версия номер два оказалась ровно таким же фейлом как и первая.
Снова нытья на форуме, снова близы чешут репу. Как так, мы сделали такое клеевое изменение, а оно не помогло. Где же проблема. Тут у них нашелся гений, который сказал что-то типа "Так проблема в том, что людей мало играет, вот было бы много людей в очередях, и все было бы замечательно". Все дружно захлопали и принялись строчить…
Версию решения через жопу номер 3. Данная версия не меняла алгоритм приглашения на БГ, но сами БГ стали кроссерверными, то есть количество игроков с каждой стороны возросло. Это решило проблему на тех БГ, где активного альянса и орды было примерно одинаково, но совершенно ничего не изменило на БГ, в которых был дисбаланс, суть проблемы осталась та же, что была и раньше.
Сколько прошло времени перед следующим мозговым штурмом у близов я уже не помню, но следующей их попыткой было решить проблему… путем ее усугубления. Итак.
Версия решения через жопу номер 4. Агааа, подумали близы, все-таки увеличение числа игроков решило кое-где проблему, значит верной дорогой идем. А давайте-ка мы позволим игрокам вставать в очередь сразу на несколько БГ! Ведь как гениально, очереди сразу станут намного длиннее и нам будет хватать игроков чтобы заполнить любое БГ! Таким образом нарисовав в уме еще приличное количество желающих играть на БГ близы значительно увеличили частоту запускаемых новых игр и при этом… усугубили проблему с дисбалансом. Виртуальные игроки никак не могли быть сразу на все БГ, поэтому процент реально входящих в игру резко упал, что вкупе с общей дебильностью системы привело к клиническим последствиям. Дисбаланс стал появляться даже в тех батлгруппах, где о нем раньше и не слышали. Просто потому что в очередь записывались все, а играли на тех БГ, на которых им нравилось больше, и как правило у альянса и орды были свои любимые.
После этой версии близы похоже окончательно растерялись и запаниковали, потому что логически объяснить дальнейшие действия уже не удается. Потому что под навалом форумного воя они таки были вынуждены не просто что то делать, а даже публично объявить, мол радуйтесь, мы делали, делали и таки решили эту проблему! Вот вам наша…
Версия решения через жопу номер 5. О решении было объявлено аж в патчноутах. Возрадуйтесь, мол, теперь БГ будут запускаться, только когда они заполняются полностью. Дураки тут же поверили, что их осчастливили навеки. Они как манны небесной ждали патча… который вообще ничего не изменил. И только отдельные умные личности поняли, что под коварными патчноутами подразумевалась простая и ни на что не влияющая вещь. Вместо того, чтобы запускать WSG, когда длина очереди достигла 3, они теперь ждут пока очередь составит 10 человек, и после этого запускают. Проблема нарисованных игроков вкупе со всеми проблемами первых версий никуда не делась и не было даже никакой попытки ее решить. Близы просто увеличили одну числовую константу, которая и так ни на что не влияла. В общем, над этим даже смеяться не получается, слезы наворачиваются смотреть на их потуги.
Я уверен, что
версию решения через жопу номер 6 мы скоро увидим, и никакого решения она конечно же не принесет, это уже давно стало клиникой. А теперь я опишу то, как система должна работать, чтобы свести дисбаланс к миниумуму.
Еще раз сформулируем главные причины, из-за которой вообще происходит создание несбалансированных игр:
1. Разное количество желающих играть от каждой фракции, при том соотношение меняется в зависимости от БГ
2. Далеко не все входят в игру получив приглашение
3. Кое-кто выходит из игры в середине.
Теперь система, которая решает эти проблемы. Во первых, сервер постоянно ведет статистику по каждой БГ на тему какой именно процент игроков из получивших приглашение реально входит в игру. Учитывая этот процент, сервер вычисляет размер очереди, необходимый для заполнения нужного кол-ва слотов. Дальше сервер создает игру ограниченную не длиной очереди, а длиной очереди с учетом процента входящих. То есть если в очереди 10, а вероятность 50%, то сервер должен планировать старт игры 5 на 5 и не звать игроков сверх этого лимита пока у фракции с пустой очередью не появятся новые игроки.
Теперь, допустим, у нас есть некоторое количество в игре, пусть пока равное. Следующий шаг, сервер может постараться увеличить количество игроков на некий X, где X зависит от величины БГ, на WSG это может быть 1-2 человека, на AV 4-5. Если в очереди обоих сторон есть такое количество, то сервер шлет им приглашения. Если нет, никому приглашений не приходит. Сервер ни в коем случае не должен пытаться призвать у более активной стороны количество игроков, которому нет необходимой длины очереди соперников, при том с учетом процента реального входа в игру.
Теперь, допустим, у нас со старта БГ не сбалансировано, вошло, например, 2 против 5. Сервер старается заполнить только меньшую сторону и большая сторона не получает приглашений пока меньшая не догонит (как это не смешно, но такай простой вещи сейчас у близзов нет, приглашения рассылаются не зависимо от текущего баланса на БГ, хоть там 5 против 1, все равно команда с 5 будет увеличиваться).
И все. Собственно система решает две вещи, которые близы отказываются видеть в упор. Во первых, что на текущей БГ уже не равное количество и потому нельзя приглашать игроков той стороны, которой больше. Во вторых, что из реально приглашенных входит только часть.
PS: Кто не понял, я не виноват.