История Создания Карты Мира Для Игры «C&C Tiberium Alliances». Посмертное

Всем привет! В этом посте я хотел бы поделиться своим опытом создания и развития сервиса для одной известной онлайн-игры.



История создания карты мира для игры «C&C Tiberium Alliances».
</p><p>
 Посмертное

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

Об этой игре я узнал задолго до ее выхода и смог стать одним из первых бета-тестеров.

Я не ожидал многого от браузерной игры, но интерес взял свое.

Довольно быстро я нашел адекватное русскоязычное сообщество и присоединился к одному из кланов.

Первый вопрос, который возник, был: «Где яЭ» Следуя канонам жанра, я предположил, что мне нужно построить радар.

Но его почему-то там не было.

Далее я с удивлением обнаружил, что в игре вообще нет мини-карты.

Что было довольно странно, учитывая гигантское игровое пространство.

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

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

За пару часов я написал парсер на PHP. Трудности возникли только с авторизацией.

Он был двухуровневым, с хешами и собственными заголовками, но тоже поддался.

Я сделал на коленке страничку, где просто расставил имена игроков в абсолютном позиционировании, и залил ее на бесплатный хостинг.

Поиск по карте осуществлялся с помощью браузера «ctrl+f», так же, как и масштабирование карты с помощью «ctrl+колесо мыши».

Я поделился этим творением со своим кланом.

Оказалось, что я не единственный, у кого не хватает карты.

Увидев это, клановцы очень обрадовались, а руководство клана «приказало» не говорить о карте за пределами клана.

На следующий день я разместил информацию о карте на общем игровом форуме.

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

Вдохновленный этой реакцией, я решил развивать карту дальше.

Сначала я попробовал заменить имена игроков маркерами из html-тегов, но при масштабировании все это выглядело ужасно.

Вторая попытка была использовать svg, но производительность оставляла желать лучшего.

Остался только холст, а тут все зашуршало гораздо быстрее.

Первый релиз на холсте выглядел так:

История создания карты мира для игры «C&C Tiberium Alliances».
</p><p>
 Посмертное

После внедрения еще пары функций количество посещений моего ресурса достигло десяти тысяч в день.

Вместе с ростом количества пользователей в игре открывалось все больше игровых серверов.

В тот момент один сервер (игровой мир) парсился около часа.

Оказалось, что по мере роста их количества карта каждого отдельного сервера обновлялась всё реже и реже.

Актуальность данных быстро упала, и пользователи начали жаловаться.

Внедрение мультисокета Curl хоть и сократило время парсинга одного мира вдвое, но полностью решить проблему не смогло.

На мое счастье, мне в личное сообщение написал один из разработчиков.

Указываем функции в коде, которые отвечали за работу с протоколом передачи данных, создание запросов и парсинг информации для отрисовки внутриигрового ландшафта.

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

Добавлена возможность рисовать на карте тактические маневры и делиться ими, полностью менять цветовую схему и настраивать значки.

И снова все сводилось к парсеру, когда количество миров приближалось к отметке 100.

История создания карты мира для игры «C&C Tiberium Alliances».
</p><p>
 Посмертное

Было решено полностью переписать бэкенд. За основу был взят ZeroMQ, появились менеджеры авторизации, парсинга, загрузки, соответственно набор воркеров для них + система мониторинга для этой радости.

Остается только вопрос, где все это разместить.

При нормальной работе проекта затраты на хостинг были бы просто астрономическими.

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

Я решил вопрос покупкой нового оборудования для дома с аппаратной поддержкой виртуализации.

Более того, мне давно хотелось покопаться в этом вопросе.

Я сделал себе одну виртуальную машину, пробросив туда видеокарту и несколько USB-портов.

На остальных я установил систему, часть виртуальных машин была Linux, часть Windows. В связи с особенностями реализации 0mq. Также были проблемы с аптаймом сервиса, все равно не тир 4 :), но после смены провайдера все стабилизировалось.

Горячий парсер с новым оборудованием мог обработать сотни миров за пару минут. Карта выглядела так:

История создания карты мира для игры «C&C Tiberium Alliances».
</p><p>
 Посмертное

Параллельно с этим я начал разработку клиента под Android. Я взял свой PHP API, портировал его на Java, расширил и реализовал базовый функционал.

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

На его плечи легла задача реализовать уведомление игрока по электронной почте об атаке или разрушении его базы.

Коллега на C# написал подписчика для парсера, который отслеживал все базы всех игроков во всех мирах.

Но все прекратилось в один миг.

Мой «инсайдер» сообщил, что EA посчитала проект убыточным.

Их команда была расформирована и разбросана по другим проектам.

Разработка игры была заморожена.

Соответственно, развитие клиента и сервиса тоже перестало быть уместным для мертвого проекта, и я поставил на них крест. На данный момент трафик по моей карте составляет 2,5 тысячи человек.

Доход от рекламы с июля 2012 года составил 5 тысяч баксов.

Донат менее 200. P.S. Во время написания статьи Хетцнер вдруг обиделся, что я делаю по 100к пост-запросов в день с одного IP и заливаю 5ТБ трафика в месяц.

Библиотеку, которую я написал для работы с 0mq, можно посмотреть здесь: https://github.com/limitium/0MQ .

Если кому интересно, подготовлю ридми и сделаю пакет для композитора.

Ничего не течет, пашет 24/7 уже 2 года.

Дизайн проекта можно посмотреть здесь: github.com/limitium/C-CTA-map-frontend Теги: #php #zeromq #zeromq #html5 Canvas #igori #Разработка сайтов #php #Разработка игр

Вместе с данным постом часто просматривают: