История создания карты мира для игры “C&C Tiberium Alliances”. Постмортем

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

    Жизнь в нем еще пока теплится, но, думаю, уже можно подвести окончательные итоги.

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

    Первый вопрос, который встал “где я?”. Следуя канонам жанра, я предположил, что мне надо построить радар. Но его почему-то не было. Далее я с удивлением обнаружил, что в игре вообще не предусмотрена миникарта. Что было весьма странно, учитывая гигантское игровое пространство. К тому же, как потом выяснилось, в ближайшие планы разработчиков ее создание не входило.

    Немного поизучав серверное API, нашел откуда брать нужные мне данные — списки пользователей с их базами. За пару часов я написал парсер на php. Затруднения возникли только с авторизацией. Она была двухуровневая, с хешами и своими заголовками, но и она поддалась. Слепил на коленке страничку, где просто расставил имена игроков абсолютным позиционированием, залил на бесплатный хостинг. Поиск по карте осуществлялся средствами браузера “ctrl+f”, ровно как и масштабирование карты через “ctrl+mousewheel”. Этим творением я поделился со своим кланом. Оказалось, что карты не хватало не только мне. Увидев ее, соклановцы очень обрадовались, а руководство клана “приказало” не распространяться о карте за пределами клана.

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

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

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



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

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

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


    Решено было переписать backend полностью. За основу был взят ZeroMQ, появились менеджеры авторизации, парсинга, аплоада, соответственно набор воркеров для них + система мониторинга этой радости. Остался вопрос где это все захостить. Для нормальной производительности проекта, затраты на хостинг были бы просто космическими. Поиск сервера в игровом комьюнити не дал желаемых результатов. Решил вопрос купив домой новое железо с аппаратной поддержкой виртуализации. Тем более давно хотел с этим поковыряться. Одну виртуалку сделал себе, пробросив туда видюху и часть юсб портов. На остальных поднял систему, причем часть виртуалок была linux, часть windows. В связи с особенностями реализации биндинга 0mq. Также были проблемы аптайма сервиса, все же не tier 4 :), но сменив провайдера все стабилизировалось. Разогретый парсер с новым железом справлялся с сотней миров за пару минут.

    Карта приняла такой вид:



    Параллельно с этим я начал разработку клиента под андроид. Взял свое php API, портировал на джаву и расширил его, реализовал базовый функционал. Примерно в это же время к разработке захотел подключиться кодер из Чикаго, чему я был немало удивлен. На его плечи легла задача реализовать е-mail уведомление игрока об атаке или уничтожении его базы. Коллега на C# написал сабскрайбер к парсеру, который отслеживал все базы всех игроков на всех мирах.

    Но все в один миг прекратилось. Мой “инсайдер” рассказал, что ЕА посчитало проект убыточным. Их команду расформировали и раскидали по другим проектам. Разработку игры заморозили. Соответственно развитие клиента и сервиса также перестало быть целесообразным для мертвого проекта, и я поставил на них точку.

    В данный момент посещаемость моей карты 2.5 тысячи человек. Доходы от рекламы с июля 2012 года составили 5 тысяч баксов. Донат меньше 200.

    P.S. Пока писал статью hetzner вдруг обиделся, что я им с одного IP делаю 100кк пост запросов в сутки и заливаю 5тб трафа в месяц.

    Либу, которую написал для работы с 0mq, можно посмотреть тут: https://github.com/limitium/0MQ. Если кого-то заинтересует, то оформлю ридми и сделаю пакет для композера. Ничего не течет, пашет 24/7 уже 2 года.

    Морду проекта можно посмотреть тут: github.com/limitium/C-CTA-map-frontend
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 11

    • UFO just landed and posted this here
        0
        И как hetzner обиделся?
          +2
          Заблочил IP, с которого идут запросы на обновление данных, попросил перейти на выделенный сервер. На мой вопрос по поводу анлим трафика на тарифе, начал юлить и сказал, что я мешаю другим.
          • UFO just landed and posted this here
          0
          А генерации ландшафта больше нет?
            0
            Ее и не было. Это была фоновая картинка из меню выбора сектора в игре. Но она мало коррелировала с реальностью, поэтому ее больше нет.
            0
            Спасибо за карту. Пользовался ею с удовольствием!!!
            • UFO just landed and posted this here
                0
                Да и сейчас она есть эдсенс.
                0
                Повезло вам с разработчиком, который помог, обычно они совсем не рады внешним сервисам-паразитам(особенно платным). У меня есть аналогичный сервис для другой не сильно известной игры, о рекламе сервиса на офф-форуме или через личные сообщения даже не мечтаю — трут и банят сразу.
                  0
                  Да, но стоит учесть, что официалы обещали, как серверное апи, так и клиентское предоставить стороним разработчикам + Всячески саппортить тулзы и плагинчики, кроме совсем читерских. Но это только на словах.
                  А так я тоже попадал под репрессии и за «ботоводство» банили и просто темы терли на форме.

                Only users with full accounts can post comments. Log in, please.