Как мы свой областной WoW сервер запускали (да, на них ещё играют)
Шёл март 2015 года. Было много свободного времени , а в голову постоянно приходили разные мысли запустить какой-нибудь проект в интернете. Не ради денег, а именно ради самого проекта. Чтобы было.
Раньше у нас был городской пиратский сервер любимой миллионами игры World of Warcraft. Сервер был популярный, я и сам там играл. Но из-за разных обстоятельств (жадные скотины у руля) проект закрылся. Было несколько слабых попыток подняться снова. Но всё впустую.
Заметив, что сейчас каждый третий запускает свой игровой сервер, мы решились. Что мы, рыжие что ли? И работа закипела.
Из чего состоит обычный WoW-сервер?
Если грубо, то всего из 4 вещей: ядро, база данных, сайт, хостинг.
И если хостинг можно купить почти где угодно, а платных и бесплатных сайтов в сети полным-полно, то с ядром и базой данных для этого ядра дела обстоят сложнее.
Ядро представляет из себя написанный на языке C++ фреймворк с добавлением готовых скриптов (например, описывающих поведение монстров или тех или иных заклинаний в том или ином случае). Несколько лет назад было много разных групп разработчиков, каждая группа занималась своим ядром, выкладывая свои труды (или их большую часть) в общий доступ. Разработчики сливались вместе, снова дробились на отдельные группы, пробовали использовать разные подходы и даже разные языки программирования.
Сейчас ситуация другая. Большинство разработчиков или ушли в приват (пишут код только за деньги и продают, не выкладывая в общий доступ) или просто забросили это дело. И по сути осталась только одна живая группа, которая продолжает идти вперёд и выкладывать свои исходники (код ядра) в сеть. Называют они себя TrinityCore и имеют самое живое и больше комунити среди всех оставшихся. До сих пор все спорят о качестве ядер от разных разработчиков. Но 100% работоспособностью не может похвастаться ни одно из них.
Ядро сервера содержит в себе описание поведения всего, что есть в игровом мире: обработка всех действий, движения, появления и исчезновения, погоду и тд и тп. Ядро неразрывно связано с базой данных. Если объяснять очень грубо, то в базе данных хранится вся информация об игровых объектах (имя игроков, аккаунты, пароли, имена монстров, их характеристики типа размера и здоровья, сколько чего где и как), то ядро описывает действия, которые нужно совершать с информацией из базы данных, ну, и совершает эти самые действия. Если вы измените информацию в базе данных - сервер отреагирует на это. Если вы измените структуру базы данных - сервер не найдёт нужные данные и не запустится. Поэтому каждая база данных подгоняется и редактируется под определённое ядро.
Пс, на самом деле некоторые данные хранятся ещё в специальных файлах. Но эти файлы генерируются инструментами, которые входят в ядро, так что не будем на этом задерживаться.
Подробнее о создании ядра сервера и его разработке я могу рассказать в другом посте, если вылезу из минусов, полученных за этот. Я уже приготовил несколько фоток котиков.
И да, мы за основу взяли ядро от TrinityCore, и уже целый год не только следим за обновлениями проекта, но и активно вносим свои собственные изменения, чтобы игрокам на нашем сервере игралось максимально комфортно. Некоторые игроки собирают сервер не сами, а ставят чужие репаки (покупают или берут бесплатно на разных форумах), которые избавляют будущих ОдмЕнов от надобности разбираться в работе всей системы. Сразу можно запускать сервер в 3 клика. Но такой подход мне кажется неверным, ведь в готовых репаках вы ничего уже не измените.
Если хотите, можно сравнить сервер с блинами.
Что лучше: бабушкины блины на масленицу, которые она делает с любовью и вручную, или же заморозка из магазина, которые уже готовы - только разогрей? Ваша бабушка сделает блинчики по вашему вкусу. Потому что она сама мешает тесто. И, возможно, любит вас. Готовые блины с завода вы изменить не сможете. Они уже готовы, вы довольствуетесь тем, что уже есть. Потому что на том заводе, скорее всего, никто не любит вас. А жизнь - это боль.
Теперь как это всё собирается. Я опишу вам общую схему. Подробнее о сборке сервера с нуля могу рассказать в других постах по теме. Если это будет кому-то интересно.
Для начала, нужно заиметь в своё распоряжение хост. Некую машину (реальную или виртуальную), на которой наш новый сервер WoW будет крутиться и работать 24 часа в день и 7 дней в неделю.
Тут нужно понимать, что ваш домашний компьютер для этих целей не годится. Какое бы мощное железо у вас там ни стояло, это всё равно не то. Игровой сервер должен быть онлайн всегда. Не тогда, когда вы уходите по делам (на работу, в школу, в универ) и оставляете сервер включённым, а вообще всегда. У вас могут выключить свет в доме, у вас может пропасть интернет (тех. работы провайдера или пьяный бомж-сосед Анатолий с ножницами), у вас могут сесть за компьютер родственники или ваш кот (он всегда сидит в интернете, пока вас нет дома). В конце концов, ваша скорость интернета и ширина канала просто не позволят играть людям из других городов. У специальных фирм, которые занимаются предоставлением услуг хостинга, таких проблем нет. Это их хлеб, они (обычно) его отрабатывают.
Мощность вашего железа зависит от количества игроков. Нагрузка на сервер растёт почти в геометрической прогрессии. Нужно про этом помнить. Но для начала вам хватит 2 ядер средней мощности, 4гб оперативной памяти, около 40-50гб жёсткого диска. Как все знают, чем больше оперативной памяти, тем лучше чувствует себя админ.
Нам с этим повезло. Наш крупнейший областной провайдер интернета щедро предоставил нам мощности для этого небольшого проекта. За что ему дружно говорим спасибо.
На купленный или арендованный хост загружается загружается база данных, к ней подключаются ваш сервер и ваш сайт. При запуске игрового мира, ядро опрашивает базу и считывает данные. Если всё хорошо - ядро стартует. Если плохо - нет. При регистрации на сайте - данные аккаунта попадают в базу. При вашем входе в игру сервер проверяет, есть ли ваши данные в базе (логи и пароль). Если да - вас пускает. Если нет - вас не пускает. Во время игры ядро постоянно что-то читает из базы и записывает в неё обратно.
Уверен, вы и без меня это знали.
Что касается сайта для вашего сервера, то тут всё зависит от вас.
В свободном доступе много не только готовых сайтов-визиток с регистрацией, но и целых cms, заточенных именно под wow. Их действительно много, есть из чего выбрать. Многие люди, когда только открывают свой проект, используют готовый бесплатный сайт (паблик) и потом, если проект начинает развиваться, меняют его на уникальный, написанный специально для них. Ну, или просто меняют тему на новую и уникальную (если мы про cms).
От вашего сайта требуется: понятные ссылки, возможность регистрации в игре, форум, новости проекта. Мы выбрали в качестве сайта FusionCMS, специальная cms для серверов WoW, где не только много разных модулей-дополнений (платных и бесплатных), но и возможность подключать сайт к разным ядрам от разных разработчиков. Мы внесли немного изменений и улучшений, но в целом он готов прямо "из коробки".
Если пост не утонет, в следующий раз напишу про набор команды на проект и про печальное положение игроков пираток. Или про сборку сервера из кода с подробностями (думаю, про команду вам будет интереснее). Оставляйте пожелания в комментариях. И ваши вопросы.