Перейти к содержимому
EvilBlades Community
  • Объявления

    • Sergey

      EvilBlades.ru x20. Reborn. Поехали!   11/07/17

      Друзья! EvilBlades.ru x20 - Reborn - сервер запущен! Вы можете ознакомиться с описанием сервера в соответствующей теме. Приятной игры!
    • Sergey

      Что делать, если у вас не запускается клиент   11/10/17

      Сообщаем, что возможен сбой запуска в случае, если вы использовали уже имеющийся клиент и обновляли его апдейтером. В этом случае рекомендуем вам следующие действия: Закройте апдейтер; В папке с игрой переименуйте директорию system в system.backup; Вновь запустите апдейтер, дождитесь загрузки файлов; Запустите клиент. Если ошибка сохранилась, то: Удалите папку system; Загрузите папку system (приложение к сообщению: system.zip); Запустите апдейтер и клиент. Если ошибка по-прежнему сохраняется, то сделайте, пожалуйста, следующее: Нажмите "Пуск", введите "cmd", запустите консоль В консоли введите cd \  Перейдите в директорию с игрой, например: cd Games\L2 Находясь в директории с игрой, выполните команду dir /a-d /b /s > files.txt Перейдите в директорию с игрой в проводнике, найдите файл files.txt Выложите файл в теме или отправьте нам в личном сообщении ссылку Результат вызова команды должен быть как на скриншоте: Если у вас по-прежнему сохраняется проблема - пожалуйста, напишите нам. Приятной игры! system.zip
    • Shad

      Техническое обслуживание.   10/09/18

      Сегодня (10.10.2018) состоится техническое обслуживание игрового сервера Erica. Время начала работ 21:30 (UTC+3) Планируемая продолжительность - 30 минут.

EvilBlades

  • записи
    3
  • комментариев
    0
  • просмотра
    15044

Об этом блоге

Блог команды EvilBlades.

Записи в этом блоге

Sergey

В обновлении от 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. Однако, на этот момент игрок уже вышел из игрового мира. В такой ситуации игрок, позднее вновь войдя в игровой мир, не смог бы понять почему его чат заблокирован и, что важнее, когда и за что его чат был заблокирован гейм-мастером.

Как это работало до текущего момента: в случае, если по отношению к игроку применялась та или иная санкция в момент, когда игрок отсутствовал в игровом мире, то позднее при входе в игровой мир игрок не получал какого-либо уведомления, он лишь только видел, что, например, его чат заблокирован, но в то же время почему он заблокирован он понять не мог.

Что делать?

Очевидно, искать решение, которое сможет помочь справиться с описанными выше трудностями. Нашей команде пришлось потратить прилично много времени на то, чтобы выработать принципиально новую концепцию фиксации правонарушений. При этом задача эта оказалась сложной как идейно, так и технически.

Очевидно, что классический подход в виде "гейм-мастер зашел в игру, нашел игрока, заблокировал чат" уже совсем не подходил из-за обозначенных выше проблем. Пришло понимание того, что реализация желаемого функционала потребует и серьезной технической работы. Но прежде всего требовалось проработать саму концепцию всей системы целиком.

Перебрав ряд вариантов, мы пришли к идее, которая позже и была воплощена в виде новой системы. Но обо всем по порядку. 

Как делать?

Первым шагом решения данной проблемы стала проработка новых правил игрового сервера. При этом стандартные, привычные всем правила, никак не соответствовали нашим требованиям (в том числе из-за желаемой автоматизации применения санкций по отношению к игрокам). Поэтому все заготовки были выкинуты в урну и начался кропотливый процесс написания правил "с нуля". 

Помимо самих формулировок основных положений правил, потребовалось также подумать и о продолжительности применяемых по отношению к игрокам санкций, а также их зависимости от типа нарушения. Опять же, все классические подходы отправились в урну. И снова работа с чистого листа. В итоге мы пришли к тому, что стоит ввести некоторые единицы, которая будет отображать степень тяжести совершенных нарушений. Ими стали штрафные баллы.  Идея заключается в том, что любое нарушение имеет установленное количество баллов, которые будут выданы игроку, и неважно какое нарушение он совершил - оскорбил другого игрока или попытался украсть учетные данные других пользователей. Система измерения одна - штрафные баллы. В зависимости от их количества изменяется тип применяемой санкции. 

1SuJ905Z5AaRvlTyJ97L560GoxOFJR.png

Принцип довольно простой. Есть несколько отрезков на нашей оси координат. В зависимости от того, в какой отрезок "попадает" игрок, выбираются применяемые санкции.

  • 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 часов. 

 

Что получилось?

Технически система оказалась не менее сложной, чем идейно. Однако, результат все же получен. Итак, сначала рассмотрим систему с точки зрения гейм-мастера. Мы получили удобный и гибкий инструмент для фиксации нарушений. Каждый гейм-мастер видит историю последних выданных нарушений.

3uE1kc6mDt1YQxVCKYMAa5c8S0d5C1.png

Также каждый гейм-мастер может получить историю выданных ранее штрафных баллов по каждому игроку независимо от того онлайн он или оффлайн:

v4wNoDY7aHKRtPMzm5dRwnHoOE7ix7.png

 

Таким образом, все выданные ранее нарушения не будут утеряны. Но это не самое главное. Важнее, что система сама вычислит сколько баллов нужно выдать игроку, при этом будет проверено не является ли нарушение рецидивом и нужно ли увеличивать количество выдаваемых баллов ,если это все же рецидив. Таким образом, гейм-мастер никаким образом не управляет количеством выдаваемых баллов, что максимально минимизирует вероятность ошибки. 

А что же со стороны игрока? Игрок получил не менее информативный инструментарий. Прежде всего, в случае выдачи игроку штрафных баллов создается уведомление, которое доставляется сразу (если игрок онлайн) или же при следующем входе в игру (если игрок оффлайн). 

YUfctTUy7z9YYr2bc8e43TqXYdw239.png

Кроме этого, игрок может посмотреть всю историю выданных ему ранее штрафных баллов с указанием срока их действия, для этого предусмотрен отдельный раздел "Правила" в Community Board. Также для игрока отображается уровень риска, иными словами, показывается в какой категории штрафных баллов он находится. 

pZ3w9wrMHxv6Zfc5NrqIyRqeREaS3k.png

А примеры?

Конечно! Без примеров сложно описать работу системы от и до.

Пример 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 имеющегося кода, выпито.. неизвестно сколько чашек кофе. Ну, вы понимаете о чем мы. 

Соблюдайте Правила сервера и проводите время в игре с удовольствием! Желаем вам никогда не встречаться со строгими гейм-мастерами!

download?id=yIyZTGaflS7G8mFKrkrSfONYkXNe

 

В фильме снимались:

[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!

 

Sergey

Что такое форум? Это, в своем роде, некоторая площадка для общения некоторого сообщества людей, объединенных какими-либо интересами. Важен ли он? Безусловно, да. Причем как для посетителей, так и для организаторов этого форума. Для посетителей это некоторая база знаний, которая накапливается сама собой с течением времени (и, безусловно, требует работы над ней), для организаторов это один из каналов взаимодействия с посетителями для донесения важной информации. По сути, это довольно простая истина, которая не меняется уже в течение более десяти лет, меняется лишь технология, но не сам принцип. Стоит ли гнаться за новизной и есть ли она? Об этом мы и поговорим в приложении к нашему опыту.

1. Точка старта

Уже более года назад, в марте 2014 года, мы озадачились вопросом поиска решения для организации форума. Признаться, мы не уделяли этому много внимания, поэтому выбор был сделан по довольно простым критериям:

  • Доступность, свободная распространяемость
  • Стабильность
  • Наличие минимально необходимой экосистемы

При этом мы не задумывались о функционале, т.к., по сути, не считали это важным аспектом в принятии решения. Поэтому выбор был довольно оперативно сделан в пользу Simple Machines Forums (SMF) версии 2.х. По сути, довольно простой, в меру функциональный и удобный форум, который и по сей день сохранился на нашем ресурсе как элемент истории. Со временем стала ощущаться некоторая нехватка расширений и экосистемы, в то же время, некоторые вещи все же доставляли ряд проблем, тот же редактор WYSIWYG, который мы до этого обновили. Несмотря на это, форум, в целом, был очень стабильным и в этом плане вопросов не вызывал. Нам удалось найти довольно удачную тему (стоит отметить, платную) и сделать UI форума весьма приятным. Но все же хотелось привнести некоторую интерактивную жилку в процесс общения - добавить модуль репутации с расширенными параметрами и прочее-порчее. Здесь SMF и начал немного сдавать позиции. 

В какой-то момент в "техногиковскую" голову закралась мысль о поиске чего-то принципиально нового, не похожего на десятки типовых форумных решений, которые, если откинуть все расширения и особенности пользовательского интерфейса, равны как на подбор. И после некоторых скитаний по просторам интернета такое решение нашлось. Точнее, даже два. Ими стали Vanilla Forums и NodeBB. Vanilla Forums на тот момент не очень понравился, хотя, допускаем, это могло быть и весьма субъективным ощущением. NodeBB же выглядел как нечто, не идущее по стопам большинства, что весьма привлекало. Написан на NodeJS, все взаимодействие на WebSocket'ах с вытекающими отсюда интересными UI/UX особенностями. Приходящие ПМ-сообщения и новые темы без обновления страницы как push-уведомления и ряд других особенностей - все это казалось весьма привлекательным решением. Тут же нашелся и конвертор из SMF в NodeBB и сомнений не осталось - мы перешли на новую платформу. 

2. В погоне за новизной и технологиями

И вот мы на новой платформе версии 0.4.х. Необычной, в новом обличии, не похожим ни на один другой форум. Был ли этот переход на NodeBB верным решением? Трудно однозначно ответить, но, вероятно, большая часть посетителей ответит "нет" нежели чем "да".  И это довольно легко объяснимо как минимум весьма необычной главной страницей, которая сразу же вызвала ряд нареканий.

nodebb.thumb.png.ed3102c65667a4f1c3c63e8

И, пожалуй, трудно не согласиться с доводами наших посетителей. По сути, большинство посетителей стало ориентироваться по блоку "последние сообщения". Что удивительно - отсутствовали маркеры непрочтенных разделов, что, наверно, являлось одной из самых больших проблем. Также ряд проблем доставляли некоторые текущие недоработки. Но время шло, сначала мы перешли на версию 0.5.х, затем добрались до 0.6.х. По сути, добавлялся некоторый функционал, но принципиально ничего не менялось и главная страница по-прежнему оставалась весьма сложной для восприятия для большинства игроков. Добавляла масла в огонь и разметка Markdown при написании постов - здесь не было привычных WYSIWYG-редактора и BB-кодов, приходилось осваивать базовые вещи новой разметки.  В то же время, нельзя не отметить и плюсы - так, например, чат (ПМ) оказался весьма удобным и оперативным, он не был похож на привычную концепцию ПМ-сообщений других форумов, а, скорее, напоминал инструмент обмена микро-сообщениями - быстро и удобно. 

В какой-то момент мы сами включились в разработку этого решения и, помогая команде NodeBB некоторыми pull request'ами и баг-рапортами, немного продвинулись вперед. Как минимум, удалось хотя бы немного преобразить главную страницу.

nodebb-v2.thumb.png.44d40999ddcb42749e47

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

Тем временем подкралась версия 0.7.х и мы вновь принялись готовиться к обновлению и опять столкнулись с проблемами. Судя по всему, в текущей экосистеме не было сообществ с количеством пользователей в несколько тысяч, а у нас их было весьма много. И с очередным обновлением мы получили новый ряд проблем. Вооружившись инструментами отладки, мы начали бороться с проблемами. Найдя все проблемы, мы сообщили их решения команде разработчиков NodeBB, но, увидев версию 0.7.х в деле с новой темой, вновь разочаровались. Все же количество недоработок вкупе с нестандартной концепцией заметно затрудняли процесс взаимодействия на таком форуме.Новая тема Persona выглядела уже куда лучше, чем стандартная Lavernar в версии 0.6.х, но переход на новую версию означал изменение API и несовместимость нашей темы с обновленным форумом. 

nodebb-v3.thumb.png.8ddb827f7b1283dc3360

Этот момент, пожалуй, стал последним доводом в пользу очередного перехода на новую платформу. 

3. Исправление ошибок

Стоит отметить, ошибки в каком-то плане тоже хороши - они позволяют получить новый опыт. Но в этот раз мы уже не хотели их повторять. И наступила нудная аналитическая работа по поиску подходящего решения из всех возможных и доступных на данный момент. Выбор на этот раз был куда более тщательным и критериев стало больше:

  • Стабильность
  • "Правильный" пользовательский интерфейс 
  • Наличие необходимых расширений
  • Максимально развитая экосистема
  • Наличие большой команды поддержки
  • Развитая поддержка

Из более двух десятков форумов, в том числе модульных (например, компоненты для WordPress и прочие подобные решения) выбор довольно быстро был ограничен тремя вариантами:

  • IPS Community Suite 4.x (он же IPB в новом обличии)
  • XenForo
  • vBulletin 4, vBulletin 5

Благо, каждый из вариантов оказался доступен в виде демо-стенда, предоставляемому по запросу, чем мы и воспользовались. Внимательно проанализировав все решения,  было принято решение исключить  vBulltin из рассматриваемых вариантов. Решение показалось громоздким, неповоротливым, собранным из разного качества компонентов. И сразу же оттолкнул UI. Внимательно прочитав все отзывы пользователей, мы убедились в том, что наше ощущение не было ложным. Многие по-прежнему считают оптимальной версию 3.х. Но оставаться на уже довольно старом (хоть и поддерживаемом) решении нам тоже не хотелось. После этого мы перешли к XenForo, но и он не приглянулся. Не увидев в нем изюминки, мы решили остановиться на IPS как на наиболее оптимальном, простом и в то же время функциональном решении. И, казалось бы, оставалось решить всего одну задачу - перенести контент. Но ожидания о легком и быстром процессе миграции, увы, оказались ложными.

4. Скользкая тропа миграции с NodeBB на IPS

Проблемы начались сразу же. Оказалось, что для NodeBB не существует обратных миграторов. Разработчики позаботились о реализации миграторов для большинства существующих форумов (в том числе и IPB), но вот в обратную сторону решений не было, никаких. Немного проанализировав ситуацию, мы нашли два возможных варианта:

  • Прямая миграция из базы в базу
  • Использование NodeBB API для выгрузки контента и его последующего импорта в IPS

Второй вариант казался более привлекательным, но, к сожалению, не позволял получить весь возможный контент. Так, например, можно было выгрузить посты, топики, но уже с пользователями начинались проблемы, ряд важных параметров уже не был доступен. Поэтому оставалось только взяться за разбор базы. 

Прежде всего стоит отметить одну важную особенность - NodeBB не использует.. реляционные СУБД. Да-да, как бы странно это ни звучало, но здесь вы не увидите классических "таблиц". Либо Redis, либо MongoDB. Поэтому пришлось вооружиться "напильником" покрупнее и взяться за дело. А напильником в данном случае стала.. Java. Да-да, получился весьма интересный набор технологий. PHP, NodeJS для форумов и Java для инструмента миграции. 

Сначала были смигрированы базовые сущности - форумы, темы, посты, пользователи. Казалось, ничего сложного. Но самое любопытное было впереди. Как выяснилось, NodeBB приготовил ряд сюрпризов, вероятно, обусловленных нашей "долгоиграющей" базой, которая пережила миграции с версии 0.4.х до 0.7.х, накопив изрядно мусора. Пришлось вооружиться исходными кодами NodeBB и разобрать все спорные моменты. Но и IPS был не так прост. Так, например, ключи некотрых сущностей формировались как.. MD5-хэш. Что это значит? В целом, ничего сложного, если только знать, от чего взять MD5. И вновь потребовались исходные коды, но уже от IPS. Такой увлекательный процесс растянулся на несколько дней. Если вспомнить все трудности, то можно выделить наиболее интересные:

  • Нереляционная СУБД NodeBB таила весьма много неоднозначных данных, потребовавших нормировки;
  • NodeBB позволяет использовать ссылки для аватарок, IPS - нет (что привело к написанию загрузчика аватарок из интернета и их конвертации под IPS);
  • IPS в ряде таблиц использует MD5-хэши при генерации ключей, при этом параметры неизвестны;
  • Раздел "последние активности" в профиле пользователя не использует таблицу постов, а основан на дополнительной индекс-таблице (что странно и приводит к ощутимой избыточности);
  • IPS крайне нетривиально хранит маркеры непрочитанных сообщений (даже отметка всех тем как прочитанные оказалась не так проста).

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

5. Что же в итоге?

Да, нам полностью удалось перейти на IPS 4.x собственными силами. Не без труда, но работа была сделана. При этом любопытно, что даже сам IPS не предоставляет инструментов миграции сразу на версию 4.х с других форумов, предлагая сначала перейти на 3.х, а затем уже обновиться до 4.х. Но мы решили задачу в один проход. Стоило ли оно того? Полагаем, да. По крайней мере, теперь под рукой заметно больший запас функционала, а решение, в целом, выглядит значительно более стабильным.

Стоит отметить, что мы не используем взломанные версии форума, не требующие лицензии, как это происходит в более ем 90% случаев при создании сообществ. Почему так? Есть ряд важных причин, прежде всего доступ к самым актуальным обновлениям, поддержка разработчиков и включение в закрытую экосистему клиентов IPS. Также немаловажным являются соображения профессиональной этики. Будучи разработчиками ПО, мы хорошо пониманием ценность интеллектуального труда других разработчиков. 

Жаль ли покидать NodeBB? В какой-то мере да, безусловно, этот проект заслуживает уважения, как минимум потому, что он является OpenSource-проектом и, по сути, продвигается вперед командой из 2-3 разработчиков. Концепция, на наш взгляд, весьма хороша, но требует еще долгой и кропотливой работы. Для нашего сообщества в конечном итоге мы все же отдали предпочтение IPS и, думаю, наши посетители этому рады!

Ссылки по данной теме:

 

 

 

Stay tuned!

Sergey

Для чего этот блог?

Здравствуй, уважаемый читатель!

Наш проект существует уже более года, за это время мы прошли многое, но главное, что стоит отметить - мы все же по-прежнему в строю. Но речь немного о другом. Если обратиться к нашей пусть пока и непродолжительной истории, то за это время сложилось своего рода сообщество игроков, пусть и не столь большое. Некоторые заглядывают к нам просто пообщаться, что весьма приятно. В конце концов, изначально целью номер один создания ресурса не являлась игра как таковая, нам всегда хотелось объединить людей, увлеченных игрой, но не ограничиваться разговорами лишь только об этом. В конце концов, игра - это лишь только один из вариантов времяпрепровождения, в основе которого лежит опять же общение, но он далеко не единственный. 

В свою очередь, мы бы хотели поделиться с вами некоторыми мыслями и идеями, накопленными за это время. Для чего? Возможно, ряд рассуждений окажется просто интересными для некоторых из вас, возможно, кто-то планирует создать подобный игровой ресурс или же просто интересуется как на самом деле все работает "изнутри". 

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

Stay tuned!

×