Из блога "EvilBlades"

В обновлении от 15 февраля 2016 года (версия 1.3.0) введена принципиально новая система фиксации нарушений Правил (которые также опубликованы 15 февраля : Правила игрового сервера). Что это и для чего разработана данная система? Введение Причины, по которым была созданная данная система, следующие: Необходимость в максимальной автоматизации калькуляции времени применяемой санкции (например, блокировка чата или блокировка аккаунта) в зависимости от нарушения и  рецидива (если он имеет место быть); Максимальная прозрачность политики выдачи нарушений как для Администрации, так и для игроков. Каждый игрок должен понимать когда, за что и от кого он получил предупреждение и почему по отношению к нему были применены те или иные штрафные санкции; Возможность полностью автоматизированного (без участия Администрации) применения санкций за нарушения, зафиксированных системами защиты сервера (например, медовых горшочков) с учетом пунктов выше. Почему плох "традиционный" (то есть осуществляемый администрацией в ручном режиме) вариант применения санкций по отношению к пользователям? Причин много, но основные из них следующие: Во-первых, с ростом онлайна Администрация неминуемо начинает тратить все больше времени на соблюдение порядка в игровом мире. Но дело не только в том, что становится больше игроков и, соответственно, количество нарушений так или иначе возрастает. Рассмотрим пример общения в игровом чате. Предположим, что в течение дня в игре было 100 уникальных пользователей, также за порядком в игровом чате следил один гейм-мастер. В 10.00 игрок с ником Bublik публикует в глобальном игровом чате нецензурные сообщения. Положим, что в игре присутствует гейм-мастер [GM]Sergey реагирует на совершенное нарушение и блокирует игровой чат персонажа Bublik (обратите внимание, именно персонажа) на 30 минут. Позже, в 15.00 игрок Bublik, получив доступ к чату, вновь публикует оскорбительные сообщения. Но так как прошло уже 5 часов, то [GM]Sergey уже вышел из игрового мира, а вместо него на охрану порядка встал [CM]101ka. Здесь возникает проблема №1 - чтобы учесть рецидив, [CM]101ka должен знать, что ранее, в 10.00 игрок уже получал блокировку чата. Проблема №2 - [CM]101ka должен посчитать насколько заблокировать чат игроку, если это рецидив. А если этот рецидив не первый? Помножим данную картину на количество игроков и поймем, что такие ситуации неминуемо приводят к путанице, причем как со стороны Администрации, так и со стороны игроков (за что я получил блокировку чата на час, если моему другу заблокировали чат за аналогичное нарушение на полчаса?) Как это работало до текущего момента: все члены Администрации вели общий online-чат с целью максимальной синхронизации понимания игровой ситуации каждым. Для того, чтобы учесть описанные выше ситуации, при применении очередной санкции за нарушение правил гейм-мастер публиковал сообщение для всех о применяемой мере пресечения. Если позднее игрок вновь нарушал правила, то гейм-мастеру, зафиксировавшему нарушение, необходимо было либо поднять историю сообщений о выданных ранее блокировках чата, либо спросить других гейм-мастеров нарушал ли пользователь правила ранее. Разумеется, такой сценарий очень сложен, к тому же, риск человеческой ошибки (игрока Bublik спутали с игроком Baranka и из-за этого заблокировали чат на сутки, хотя стоило его заблокировать на час) оказывается весьма высок. Во-вторых, ряд нарушений правил, очевидно, должен повлечь за собой применение санкций не только к конкретному персонажу, но и к его аккаунту. Предположим, игрок, пользуясь персонажем Bublik, написал нецензурное сообщение в чат и получил блокировку чата. Затаив обиду, игрок решил поругаться вновь, используя своего второго игрового персонажа Sushka. В таком сценарии возникает очередная сложность. Как учесть рецидив, если игровой персонаж уже другой? Это весьма непростая операция, особенно в случае, если между нарушениями правил игроком прошло довольно много времени.  Как это работало до текущего момента: в случае особо грубых нарушений правил члены Администрации проводили "ручной разбор" ситуации. Поднималась история действий персонажа Bublik,  затем аналогичная история персонажа Sushka, проводился анализ их учетных данных (IP-адреса, учетные записи, мастер-аккаунты и пр.). В случае, если устанавливались признаки принадлежности игровых персонажей одному игроку, то применялась цепная блокировка аккаунтов (опять же, в ручном режиме, что добавляло еще довольно много трудностей). В-третьих, в случае использования подходов, описанных выше, игрок не получает достаточно информации почему и за что по отношению к нему были применены те или иные санкции. Более того, зачастую могла сложиться ситуация, когда персонажу Bublik блокировался чат на 30 минут, а персонажу Baranka - на 6 часов. Иными словами, не было четкой дифференциации типов нарушений, игрок не мог понять почему примененные к нему санкции отличаются от примененных по отношению к другому игроку. Более того, также могла сложиться ситуация, когда игрок совершил нарушение, но какое-то время оно оставалось незамеченным Администрацией. Например, наш персонаж Bublik написал оскорбительное сообщение в общий чат, но в игре не было гейм-мастеров. Бдительный игрок Baranka сделал скриншот и направил его Администрации с просьбой разобраться в нарушении. Позже Администрация фиксировала нарушение правил и блокировала игровой чат игрока Bublik. Однако, на этот момент игрок уже вышел из игрового мира. В такой ситуации игрок, позднее вновь войдя в игровой мир, не смог бы понять почему его чат заблокирован и, что важнее, когда и за что его чат был заблокирован гейм-мастером. Как это работало до текущего момента: в случае, если по отношению к игроку применялась та или иная санкция в момент, когда игрок отсутствовал в игровом мире, то позднее при входе в игровой мир игрок не получал какого-либо уведомления, он лишь только видел, что, например, его чат заблокирован, но в то же время почему он заблокирован он понять не мог. Что делать? Очевидно, искать решение, которое сможет помочь справиться с описанными выше трудностями. Нашей команде пришлось потратить прилично много времени на то, чтобы выработать принципиально новую концепцию фиксации правонарушений. При этом задача эта оказалась сложной как идейно, так и технически. Очевидно, что классический подход в виде "гейм-мастер зашел в игру, нашел игрока, заблокировал чат" уже совсем не подходил из-за обозначенных выше проблем. Пришло понимание того, что реализация желаемого функционала потребует и серьезной технической работы. Но прежде всего требовалось проработать саму концепцию всей системы целиком. Перебрав ряд вариантов, мы пришли к идее, которая позже и была воплощена в виде новой системы. Но обо всем по порядку.  Как делать? Первым шагом решения данной проблемы стала проработка новых правил игрового сервера. При этом стандартные, привычные всем правила, никак не соответствовали нашим требованиям (в том числе из-за желаемой автоматизации применения санкций по отношению к игрокам). Поэтому все заготовки были выкинуты в урну и начался кропотливый процесс написания правил "с нуля".  Помимо самих формулировок основных положений правил, потребовалось также подумать и о продолжительности применяемых по отношению к игрокам санкций, а также их зависимости от типа нарушения. Опять же, все классические подходы отправились в урну. И снова работа с чистого листа. В итоге мы пришли к тому, что стоит ввести некоторые единицы, которая будет отображать степень тяжести совершенных нарушений. Ими стали штрафные баллы.  Идея заключается в том, что любое нарушение имеет установленное количество баллов, которые будут выданы игроку, и неважно какое нарушение он совершил - оскорбил другого игрока или попытался украсть учетные данные других пользователей. Система измерения одна - штрафные баллы. В зависимости от их количества изменяется тип применяемой санкции.  Принцип довольно простой. Есть несколько отрезков на нашей оси координат. В зависимости от того, в какой отрезок "попадает" игрок, выбираются применяемые санкции. 0 - 599 баллов - блокировка игрового чата; 600 - 2999 баллов - блокировка игрового аккаунта (только одного аккаунта без цепной блокировки); 3000 - 4999 баллов - цепная блокировка всех аккаунтов, принадлежащих игроку; 5000 и более - перманентная (бессрочная) цепная блокировка всех аккаунтов, принадлежащих игроку. Кроме этого, учитываются рецидивы. Если игрок нарушает один и тот же пункт правил повторно, то он получает большее количество баллов. Больше рецидивов - больше баллов. Эта особенность значительным образом должна повлиять на поведение игроков, ведь некоторые нарушения (например, использование кликера) не подразумевает второго шанса. При повторном нарушении такого пункта правил аккаунт будет заблокирован бессрочно.  Также все баллы имеют срок действия. Как устроен этот механизм? Допустим, игрок написал оскорбительное сообщение в чате, нарушив определенный пункт правил. Нарушение не является крайне тяжелым, поэтому игроку выдаются баллы со сроком действия 10 дней. То есть через 10 дней все выданные баллы будут аннулированы. Если же игрок использовал бота или кликер, то такие баллы будут выданы, например, на 90 дней, таким образом, в течение 90 дней игрок не будет иметь второго шанса. Определенные нарушения подразумевают выдачу баллов без срока действия - такие баллы никогда не будут аннулированы, и игрок всегда будет оставаться в зоне риска. При применении санкций временем действия санкции считается количество штрафных баллов, где каждый штрафной балл принимается за одну минуту. Кроме этого, в каждой категории предусмотрен множитель: 0 - 599 - множитель x1; 600 - 2999 баллов - множитель х3; 3000 - 4999 баллов - множитель х5; То есть если игрок "находится" в группе 1, то блокировка его чата будет осуществлена на количество баллов = минут. Если у игрока 100 баллов, то чат будет заблокирован на 100 минут. Если игрок попадает во вторую группу, то его аккаунт будет заблокирован на N x 3 минут, где N - количество баллов. Например, если игрок набрал 2000 баллов, то его аккаунт будет заблокирован на 6000 минут или на 100 часов.    Что получилось? Технически система оказалась не менее сложной, чем идейно. Однако, результат все же получен. Итак, сначала рассмотрим систему с точки зрения гейм-мастера. Мы получили удобный и гибкий инструмент для фиксации нарушений. Каждый гейм-мастер видит историю последних выданных нарушений. Также каждый гейм-мастер может получить историю выданных ранее штрафных баллов по каждому игроку независимо от того онлайн он или оффлайн:   Таким образом, все выданные ранее нарушения не будут утеряны. Но это не самое главное. Важнее, что система сама вычислит сколько баллов нужно выдать игроку, при этом будет проверено не является ли нарушение рецидивом и нужно ли увеличивать количество выдаваемых баллов ,если это все же рецидив. Таким образом, гейм-мастер никаким образом не управляет количеством выдаваемых баллов, что максимально минимизирует вероятность ошибки.  А что же со стороны игрока? Игрок получил не менее информативный инструментарий. Прежде всего, в случае выдачи игроку штрафных баллов создается уведомление, которое доставляется сразу (если игрок онлайн) или же при следующем входе в игру (если игрок оффлайн).  Кроме этого, игрок может посмотреть всю историю выданных ему ранее штрафных баллов с указанием срока их действия, для этого предусмотрен отдельный раздел "Правила" в Community Board. Также для игрока отображается уровень риска, иными словами, показывается в какой категории штрафных баллов он находится.  А примеры? Конечно! Без примеров сложно описать работу системы от и до. Пример 1 - рецидив и оффлайн-работа системы: Игрок Bublik написал нецензурное сообщение в общемировой чат. Согласно текущей версии Правил, игроку будет вменено нарушение п. 1.3, находящийся в игре гейм-мастер [GM]Max введет в системе ник нарушения, пункт правил и система автоматически выдаст игроку 60 баллов, заблокирует чат и отправит уведомление. Предположим, что игрок переждал блокировку чата и вновь оставил нецензурное сообщение в общем чате. Однако, на этот момент гейм-мастера не было онлайн, поэтому игрок Bublik сразу не получил заслуженное наказание . Позднее в игре появляется гейм-мастер [CM]101ka, по журналам сервера обнаруживает нарушение, в системе вводит данные пользователя и вменяет ему нарушение п.1.3. правил. Так как Bublik уже нарушал этот пункт правил, то на этот раз он получит уже 120 баллов, таким образом, в сумме у него будет 180 баллов и система автоматически заблокирует его чат на 180 минут, то есть на 3 часа. Пример 2 - переход в следующую категорию штрафных баллов: игрок Bublik, дважды нарушив пункт правил 1.3, все же продолжает нарушать правила. И в этот раз он разместил рекламное сообщение в общем чате. Гейм-мастер [GM]Sergey, находящийся в этот момент в игре, сразу фиксирует данное нарушение и вменяет игроку нарушение пункта 1.2. Правил. Система добавляет игроку 600 баллов, таким образом, у игрока в сумме 780 баллов и игрок попадает в категорию 2 - блокировка аккаунта. Аккаунт игрока Bublik блокируется на 780 x 3 (множитель группы) = 2340 минут (или 39 часов). Пример 3 - цепная блокировка аккаунтов и использование других персонажей: игрок Bublik, получив блокировку его аккаунта, все же хочет напакостить еще, поэтому регистрирует новый аккаунт и создает персонажа Sushka. На этот раз игрок решает не размещать оскорбительные и рекламные сообщения, а решает попробовать использовать уязвимость игрового сервера и начинает отправку измененных пакетов данных на сервер. Но в это время бдительный член Администрации Sys.Admin ведет наблюдение за сетевой активностью и обнаруживает, что игрок Sushka пытается использовать какие-либо потенциальные уязвимости. Sys.Admin сразу же запускает систему фиксации нарушений правил и вменяет игроку нарушение пункта 3.2. Игрок сразу получает 4000 баллов. Однако, система также определила, что Sushka и Bublik - персонажи одного игрока, хоть они и созданы на этих аккаунтов. Таким образом, баллы объединяются и в сумме у игрока получается 4780 баллов. Игрок попадает в категорию штрафных баллов №3, которая подразумевает цепную блокировку всех аккаунтов и мастер-аккаунтов. Используя множитель х5, вычисляется общее время блокировки: 4780 x 5 = 23900 минут или почти 400 часов. Система производит "веерную" блокировку всех аккаунтов и мастер-аккаунтов, принадлежащих пользователю.   Что в сухом остатке? Пока рано говорить о результатах, ведь система только запущена, но мы верим, что она значительно упростит работу гейм-мастеров и, что важнее, сделает игровой мир более комфортным для всех. Если говорить о технической стороне вопроса, то нам потребовалось более двух недель кропотливой работы, чтобы выработать концепцию, разработать свод правил, продумать штрафные санкции и, в конце концов, реализовать все идеи, изложенные на бумаге, и воплотить их в код. Добавлено более 50 коммитов, написано не менее 5 000 строк нового кода, переработано еще 10 000 имеющегося кода, выпито.. неизвестно сколько чашек кофе. Ну, вы понимаете о чем мы.  Соблюдайте Правила сервера и проводите время в игре с удовольствием! Желаем вам никогда не встречаться со строгими гейм-мастерами!   В фильме снимались: [GM]Sergey - @Sergey - Java Jedi [GM]Max - @Max -  Tech Kung-Fu Master [CM]101ka - @101ka - Community Manager Sys.Admin - @Sys.Admin - Bash Killer Bublik, Sushka, Baranka - вымышленные персонажи, которые, надеемся, никогда не найдут отражение в игровом мире   Приятной игры! Stay tuned!