Разработка браузерной онлайн игры на meteor

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



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


    Оглавление
    1. Предпосылки
    2. Выбор платформы и инструментов взаимодействия
    3. Начало разработки
    4. Баланс ресурсов
    5. Военный баланс
    6. Выгрузка на живые сервера и обновление
    7. Спустя 5 месяцев
    8. Техническая часть
    9. Ответы на вопросы
    10. Итог



    Предпосылки


    После нового года я был в поисках интересного проекта. В свободное время я почитывал joyreactor, и наткнулся на интересную игру, которую проводил с аудиторией всего сайта один парень, под ником AlanWake. Игра представляла из себя комикс с вариантами развития, за которые голосовали посетители + свои варианты в комментариях. Победивший вариант получал развитие. После пары выпусков появились «фанатские» версии этой вселенной, и в итоге всё вышло из-под контроля. К седьмому выпуску уже сам автор запутался в том, что происходит, т.к. не было никакого контроля, а фанаты хотели, чтобы дополнительные истории так же учитывались.
    В восьмом выпуске «Канал связи закрылся».
    За всего пару недель игра собрала больше четырёх тысяч подписчиков. Я написал автору с предложением разработать полноценную игру и посмотреть, что из этого выйдет.


    Выбор платформы и инструментов взаимодействия


    Перед нами стоял выбор: браузер, мобильное приложение, Steam (или любая другая площадка) игра.
    Взвесив все за и против, выбор пал на браузерный вариант: работает на большинстве устройств примерно одинаково, впоследствии игру можно конвертировать в приложение (как мобильное, так и настольное), да и для начала игры требуется минимальное количество действий.
    В качестве инструмента взаимодействия друг с другом выбрали realtimeboard — онлайн доску, на которой можно писать текст, размещать картинки, рисовать и всё это удобно связывать друг с другом. Файлы же синхронизировали через папку в дропбоксе.
    Игра начала обретать структуру.



    Мы довольно быстро определились с требованиями и форматом игры.
    Обсудили массу схожих игр, постаравшись выделить самое лучшее, убрав неприятные моменты.
    Требования:
    • Это PvE игра.
    • Игра циклична (цикл примерно год). За это время игроки либо побеждают, либо проигрывают (все)
    • Игра должна идти размеренно, что бы было время рисовать комиксы между событиями
    • Игра не должна требовать постоянного присутствия и поднятия по будильнику, при этом снабжая контентом тех, кто хочет больше.
    • Пожертвования не должны значительно влиять на геймплей, приоритетно декоративные
    • Дополнительные аккаунты не дают преимуществ
    • Игра должна нравится нам самим



    Начало разработки


    За пару дней был сделан прототип на node с bootstrap’ом, в котором была возможность зарегистрироваться, строить шахты и радоваться притоку ресурсов. Когда стало ясно, что двигаемся в нужном направлении, я решил, что буду разрабатывать всё на новом для меня meteor (как оказалось впоследствии, не зря), аргументировав это тем, что даже если с игрой будут проблемы, то, как минимум, будут хорошие знания новой технологии.
    Развернул рабочее окружение, поставил метеор и начал писать.
    Метеор мне сразу понравился:
    • Развёртка одной командой
    • Множество готовых библиотек, подключаемых легче, чем когда либо (в прочем, на ноду не сильно сложнее)
    • Автоматическое обновление страниц, при изменении контента (даже картинок)
    • Бьютифаер/углифаер кода, в зависимости от окружения
    • Средства для дебага
    • Возможность писать в БД из консоли браузера (отключаемое для продакшена)
    • Разбиение кода на Клиент, Сервер и Общее.
    • «Реактивность». Моментальное отображение изменений в базе у всех клиентов.


    Последнее мне сначала не понравилось, т.к. предпочитаю больший контроль, но, как оказалось, я просто не дочитал документацию, и всё замечательно настраивается.
    Из минусов могу только отметить его невозможность работы с кольцевыми ссылками. Можно, конечно, сказать, что любую задачу можно решить и без них… да, можно. Но это ровно тоже самое как говорить, что goto всегда плох (для большинства программистов плох, т.к. не умеют использовать, да. Было уже в ряде статей тут.).


    Баланс ресурсов


    Спустя какое-то время пришло время просчитать баланс. Со «сроком» игры мы определились сразу, так что именно это время бралось за основу. Максимально через год у пользователя уже должно быть «всё». В принципе капа можно достичь и значительно быстрее, но в целом расчёт был на обычных пользователей.
    Для расчёта стоимости строений они были выписаны в таблицу, им был указан максимальный уровень указаны стоимости «от балды». Написал простенькую экспоненциальную формулу для расчёта добычи. Были пожелания по начальной и конечной (на последнем уровне) добычи — их брали просто из головы, как «комфортные» цифры.



    После того как всё было занесено в таблицу хоть в каком-то виде, начал подбирать коэффициенты для стоимости и добычи, смотря как меняются цены и время строительства (от первого до последнего уровня), подбирая примерно так, чтобы требовали около 4 месяцев вне зависимости от других факторов.
    Как только коэффициенты были подобраны, получился ожидаемый график развития. Ещё немного подкрутили цены, формулу и можно внедрять!
    Я сразу же постарался заложить возможность варьировать баланс, в зависимости от тестов, т.е. увеличивать/уменьшать количество уровней влияя на «плавность» развития, при этом сохраняя начальные и конечные значения.
    У нас есть три основных ресурса (люди, металл, кристалл), и два дополнительных (честь, грязные галактические кредиты). В зависимости от стадии игры ощущается нехватка тех или иных ресурсов (кроме кредитов), но, если грамотно спланировать всё (что удалось некоторым нашим тестерам) можно развиваться практически без простоев.


    Военный баланс


    Битвы у нас разделяются на два типа: наземные и космические.
    В наземных напрямую поучаствовать нельзя — это прямая сюжетная линия. На Землю можно отправлять войска, они присоединяются к объединённой армии всех игроков. Передвижения этой армии контролируются ежедневными опросами всего сервера.
    На текущий момент есть по 10 видов юнитов с каждой стороны. У каждого юнита есть параметры атаки, защиты, приоритеты атаки, а также особые характеристики (атакует/не атакует воздушные цели, триггерные способности и т.п.). Для успешных операций необходима хотя бы минимальная координация игроков сервера, чтобы отсылать необходимые для ближайших боёв подкрепления, в зависимости от типа точки и видов противников.
    Космические же наоборот, индивидуальны для каждого игрока.
    На текущий момент есть по 4 вида кораблей + флагман, а также торговое судно.
    Баланс высчитывался схожим образом. Т.е. за основу брали стоимость, и снабжали её характеристиками, добавляя бонусы.
    Так же в космосе сделали разделение по миссиям. Можно выбрать тип и уровень миссии, посмотреть примерное количество войск (как в третьих героях) и в бой.

    Ах, да. Как решить вопрос со вставанием по будильнику что бы спасти флот? Легко. Сделайте так, чтобы флоту игрока так или иначе был Конец, и, конечно же впишите это в геймплей.


    Выгрузка на живые сервера и обновление


    После создания файла настроек для Meteor Up выгрузка обновления представляет из себя всего 1 команду:
    mup deploy

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


    Спустя 5 месяцев


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



    Первые два дня это пост о новости для ключевой аудитории — «конверсия» 1 к 5. Т.е. каждый 5 посетивший страницу на бумстартере сделал вклад.
    Дальше интересно, но, в принципе, ожидаемо. Публикации на различных новостных ресурсах, в игровых пабликах и т.п. — конверсия близка к нулю. Т.е. основной эффект был от заранее подготовленной аудитории. От остальных — почти нет.
    Всплеск через пять дней — выход очередного комикса на реакторе.



    На текущий день зарегистрировано 365 пользователей. Онлайн, в среднем, держится в районе 75-150 человек.



    Загрузка превышает 5% только в момент обновления. Высокие скачки потребления и времени ответа — обновление игры, равносильно тому что все разом нажали F5 со сбросом кеша. По предварительным подсчетам сервер должен выдерживать до 5 000 человек онлайн без сбоев, при условии, что обновления будут приходится на малый онлайн.
    Буквально вчера в результате сбоя процессы падали в течении секунды и вновь поднимались, загрузка выросла до 50%, но при этом на саму игру это не повлияло никак, за исключением пустого списка участников в чате. Т.е. даже в критической ситуации система достаточно стабильна.

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



    Кстати, вот эта большая часть справа — правки и предложения от пользователей. Хотя, вероятно, не корректно сравнивать, т.к. тексты и описания мы не размещали на доске, но всё же.


    Техническая часть


    В метеоре очень удобно разделение кода: клиентская часть (client), общая часть (lib) и серверная (server). Общая часть доступна в обоих частях проекта равнозначно, что позволяет положить в неё все основные объекты игры, которые требуются и там и там.



    CSS

    Для стилей я использовать Stylus, потому что он мне очень нравится. Во-первых, у него приятный синтаксис, из которого убрано всё лишнее, а во-вторых он собирается в css на ноде, без каких-либо дополнительных языков. Ну и готовый модуль пересобирает и подгружает на страницу стили прямо на лету. Стили разбиты по релевантным файлам, но самый «жирный» main, из него ещё не всё разнесено — время рефакторинга ещё придет.

    HTML

    Все шаблоны пишутся для шаблонизатора Spacebars, встроенного в метеор. Я не очень люблю logicless шаблонизаторы, и пришлось мириться с рядом моментов. Я считаю что должна быть возможность описывать всё, относящееся исключительно к внешнему виду прямо в шаблонах. Для каждого простейшего сравнения необходимо заводить хелпер. Даже для обычного сравнения:
    UI.registerHelper('eq', function (a, b) {
    	return a === b;
    });
    

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

    Роутер

    Для определения путей приложения использовал iron router. Довольно удобный и добротно сделаный роутер, позволяет навесить определённые действия на переход по ссылке, достаточно гибко позволяет описывать пути, даёт возможность передать нужные данные сразу в шаблон, а не только через хелперы.
    Router.route('/logout', function () {
    	Meteor.logout();
    	this.redirect('index');
    });
    


    Контроллеры

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

    Игровые объекты

    Есть класс Item, содержащие совсем базовые данные, которые есть/могут быть у каждого объекта: имя, описание, требования, эффекты. Так же содержит базовые методы, такие как price(), currentLevel(), meetConditions(), has() и т.п.
    От него уже наследуются объекты с дополнительным/изменённым поведением: GlobalItem, Building, Unit, EnemyUnit, Hero, Research, GlobalResearch.
    Объекты с приставкой Global являются общими на весь сервер, и реализуют соответствующие механики общих вложений в исследование/героя.

    Система эффектов

    Мне крайне нравится система эффектов, которую удалось сделать. Каждый объект может обладать одним, или несколькими эффектами. Эффекты разделаются на 4 типа: влияющие на добычу, влияющие на цену (и время), влияющие на боевые характеристики, а также специальные эффекты, которые уникальны.
    Вот пример описания эффекта одного из улучшений:
    new Game.Effect.Military({
    	pretext: '+',
    	aftertext: '% к броне пехоты',
    	condition: {
    		type: 'unit',
    		group: 'ground',
    		special: 'infantry'
    	},
    	priority: 2,
    	affect: 'life',
    	result: function(level) {
    		level = level || this.currentLevel(); 
    		return level * 30;
    	}
    })
    


    Можно описать текст до и после значения, описать объект, к которому применим эффект по ряду критериев (если не указывать ни одного критерия — эффект действует на всё, на что применим). Приоритет — порядок при вычислениях итогового значения: нечетные приоритеты имеют фиксированые значения, четные процентные. Т.е. если у нас есть эффект, который дает +10 брони с приоритетом 1, а потом эффект, который дает 30% с приоритетом 2, и после него ещё один +5 с приоритетом 3, то в итоге получим (базовая броня + 10) * 1.3 + 5.
    Если есть несколько эффектов с одинаковым приоритетом — они сперва суммируются, и уже затем применяются. Например, 2 эффекта по 10% дадут множитель (1 + (0.1 + 0.1)).
    Специальные эффекты могут влиять на уникальные параметры игры, например, снижая время перезарядки гипердвигателей (встречается всего в 1 месте).

    Таким образом мы реализовали гибкую систему взаимодействий строений, улучшений и всего остального.
    Можно получить список эффектов, применимых к объекту, и работать с ними как вздумается. Например, вывести из чего составляется приток населения.
    Задания
    Мы разделили задания на: линейка заданий, тригерное задание, ежедневное задание. Крутейшей особенностью в плане реализации является то, что я могу привязаться абсолютно к любому событию в игре, как-то на выдачу задания так и условия выполнения.
    Достигалось это простым способом — задание имеет функцию, возвращающую true/false, выполнено ли задание. Например:
    isDone: function() {
    	return Game.Buildings.has('residential', 'house');
    }
    

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

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

    Работа с базой

    По умолчанию метеор поставляется с MongoDB. Это очень удобная документо-ориентированная бд. Легко масштабируется, легко писать запросы, легко модифицировать. Хранит все данные в JSON, и, не имея строгой структуры, позволяет добавлять/убирать поля на лету, благодоря чему, по сути, миграции не требуются (за исключением случаев, когда новые поля старых записей надо заполнить значениями).
    Для работы с определённой коллекцией я заводил отдельный класс, и всё что требовалось — гнал через него. Например, для списания ресурсов достаточно вызвать Game.Resources.spend(price);


    Ответы на вопросы


    Почему браузерная? Я думал браузерные игры вымерли.

    1) Я знаю возможности браузера лучше чем других платформ
    2) Работает на большинстве устройств без дополнительной доработки.
    3) Возможность собрать полноценные приложения в будущем без больших трудозатрат

    Вам хватит 200 000 рублей что бы сделать игру?

    Игра уже на стадии бета тестирования. Этих средств нам хватит что бы выпустить все запланированные компоненты.

    Что будет если вы не соберете средства?

    Будем искать инвестора.
    По сути без рекламы мы собрали неплохую стартовую аудиторию, а это уже что-то да стоит.

    Когда полноценный запуск и что там будет?

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


    Итог


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

    Спасибо за внимание.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 84
    • +2
      Поражен вашим упорством. Надеюсь, у вас все получится. Хотя, особо в этом и не сомневаюсь.
      Но, сразу небольшой фидбэк:
      1) Выделите из 200к денюжку на нормальную верстку: шрифты нормальные, убрать треш типа такого https://habrastorage.org/files/277/f71/ebc/277f71ebc6284b5bbd78686f0afda00b.png (для непосвещенных, красная рамку я НЕ дорисовывал)
      2) Сделайте при первом входе некую обучалку (типа, нажмите сюда, затем сюда, и т.д.)
      • 0
        1) Верстку я сам поправлю. Т.к. следить надо было сразу за всеми частями, некоторые моменты сделаны хуже, чем хотелось бы.
        2) К релизу будет, уже в планах

        Спасибо!
      • +1
        К сожалению не нашел ссылку на игру, можно как-то посмотреть?
        • +4
          я не автор, но — consulwar.ru
        • 0
          За ссылку меня в бан уже отправили :-) Еле упросил что бы без ссылок опубликовать после этого.
          Комментатор выше все верно дал, но теперь я беспокоюсь за сохранность его аккаунта.
          • 0
            признаюсь я заботливо статью сразу сохранил в PDF ибо каждый такой материал на вес золота и очень нужен. А уж с остальным разберемся )
          • 0
            За ссылку меня в бан уже отправили :-) Еле упросил что бы без ссылок опубликовать после этого.


            Сталкивался с такой-же ситуацией. Мне пояснили следующее:

            Если хотите разместить ссылку на свой сайт в тексте публикации — то это можно сделать в категории «Я пиарюсь». Если категория другая — делаете публикацию без ссылки и добавляете ссыль в комментарии.

            Так что за комментатора выше можно быть спокойным :)
        • +1
          Крокодил за заставке — копия ренектона из лола практически 1 в 1. Как так получилось?
          • +1
            • 0
              У нас много чего так получилось с отсылкой к другим вселенным :-)
            • +12

              Отношение к пользователям…
              • +5
                Извините если это оскорбило лично вас.
                В целом вся игра в таком стиле, присутствует ненормативная лексика и остальное.
                Так что если пользователю не нравится сначала — экономит время нам обоим :-)
                Спасибо.
                • –4
                  Промахнулся…
                  • –3
                    Да блин, второй раз промахнулся.
                  • –5
                    У них своя тема.
                    • +2
                      Отличное отношение! Сразу видно, что игра делается людьми и для людей, официоз в играх бесит.
                      • +2
                        Тут явно виден стеб над современными лэндингами, какие могут быть обиды?
                        Мне больше понравились «отзывы игроков» :)
                        • 0
                          На странице support разместите «Нам наплевать на вас. Нет, правда.»
                          • +1
                            В техподдержке вас всегда поддержат или дадут ответ (я).
                            Отвечаю 100% всем.
                        • 0
                          Скажите, где вы всему этому научились? Весь проект в одиночку/вдвоём — это очень круто.

                          Картинка со схемой игры — это то что вы держите в онлайне рисовалке через которую синхронизируете работу?
                          • 0
                            10+ лет работы в веб разработке, понимание что делают различные должности, и как следствие возможность выполнять их работу хотя бы на минимальном уровне.

                            Картинка со схемой — да, по ней смотрим основные изменения и проверяем связанность частей.
                            • НЛО прилетело и опубликовало эту надпись здесь
                            • 0
                              Выложи побольше принскринов игры, чтобы людям посмотреть, что получилось.
                              • 0
                                Меня за это забанили как раз :-) Иначально в после были
                                Может отдельный пост в «Я пиарюсь» сделаю. Этот хотел более техническим сделать.
                              • 0
                                Подскажите пожалуйста, какой софт использовали для построения подобных схем?
                                • 0
                                  Я не совсем понял вопрос. В целом я описал в статье набор инструментов.
                                  Meteor на беке и фронте, Mongo в качестве базы данных. Различные плагины для метеора для ряда вещей.
                                  Весь код пишу в Sublime Text 3.

                                  Конкретизируй вопррос, пожалуйста.
                                  • 0
                                    Я спрашивал именно о схеме . Какой-то сервис для построения minndmap-ов?
                                    • 0
                                      В качестве инструмента взаимодействия друг с другом выбрали realtimeboard — онлайн доску, на которой можно писать текст, размещать картинки, рисовать и всё это удобно связывать друг с другом.


                                      Это было в тексте статьи :-)
                                      • 0
                                        Не заметил, спасибо большое.
                                    • 0
                                      del
                              • 0
                                С внедрением героев и альянсов могут быть неочевидные грабли — сложно просчитать все эффекты и удержать баланс игры.
                                Ну и отслеживание всяикх ботоводов — тоже интересное занятие, или вы собираетесь разрешать скрипты?
                                • 0
                                  А мы это сразу заложили.
                                  С ботоводами всё ок. От этого толку почти нуль :-) Плюс будут введены случайные события, на которые грамотно отреагировать только человек может.
                                  С альянсами тоже есть куча крутейших идей, гибридов из разных игр.
                                  В целом мы делаем так, что бы твинки были бесполезны.
                                  Ровно как для приятной игры не было бы смысла сидеть по будильнику.

                                  Хочешь скрипт? Да пожалуйста. Скажи нам — мы постараемся включить этот функционал в проект и так :-) Или изменим механику.
                                  Игра, всё же, для удовольствия, а не для рутины.
                                  • 0
                                    ZPG классная тема тема, ИМХО. Нужно лишь создать условия, в которых и ботоводам и очным игрокам было одинаково интересно.
                                • 0
                                  Meteor! Отлично! Для своего проекта тоже использовал метеор и нисколько не пожалел. Удачи вашему проекту.
                                  • 0
                                    Вы — молодец (-:
                                    Хотелось бы ещё какое-то описание серверной части, железячной стороны
                                    А для шаблонизатора гляньте на handlebar-helpers…
                                    • 0
                                      Spacebars это тот же handlebars, только подкрученный под метеор :-)
                                      По серверной части всё просто — VPS'ка 4 ядра, 4гб оперативы. Я тут не так силён что бы что-то расписать хорошо.
                                      А по серверной части что узнать бы хотели?
                                      • 0
                                        Так и я о том же, просто там уже полно хелперов и не надо свои писать, типа Вашего «eq», я об этом (-:
                                        Собственно это я и хотел узнать — примерные параметры сервера, который должен выдержать 5000 он-лайн (-:
                                        • 0
                                          Когда будет 5000 онлайн я смогу с уверенностью сказать.
                                          Пока же это расчеты в вакууме.
                                          Вероятно большей проблемой будет канал от сервера, и надо будет что-то с этим делать. Посмотрим.
                                    • 0
                                      подскажите, а какой софт используется для мониторинга сессий, CPU, Response time (на скриншоте)?
                                      • +1
                                        kadira.io
                                        Я использую бесплатную версию.
                                        Но, судя по всему, она мне выдает не совсем корректную информацию.
                                        На скриншотах написано 21 session/host — я не совсем понимаю что имеется ввиду.
                                        Приложение запущено на 4 ядрах, т.е. 4 инстанса. На момент снятия скриншота онлайн был около 90 человек.
                                        Вероятно показывает нагрузку только одного ядра, а остальное платно :-(
                                        Выбрал его, т.к. подключался за пару команд.
                                        А так для ноды очень удобен keymetrics.io например. Он круто интегрируется с PM2 и позволяет свои метрики выплевывать в реальном времени.
                                      • –1
                                        Хотел рассмотреть игру поближе, а тем закрытый бета-тест и нужен пригласительный код. Печаль, и скорее всего больше игрой интересоваться не буду. (к моменту публикации статьи стоило делать уже открытый тест)
                                        • 0
                                          Учитывая, что статья не в хабе «Я пиарюсь», всё довольно-таки логично. Описывается ведь не сама игра, а процесс.

                                          Ну, а если появилось желание попробовать — разве жалко отдать 100 рублей для доступа к бета-тесту?
                                          • +1
                                            уже 1000 %(
                                            • 0
                                              Это как же не внимательно нужно читать, чтобы такое не заметить:

                                              • 0
                                                Что-то поменяли. По указанной ссылке предлагали купить акции, 1 за 1000р.

                                                UPD. А, ясно, предлагали купить акции Boomstarter. А переход на страницу описанной браузерной игры был недоступен, что ли.
                                                • +1
                                                  Не путайте акции бумстартера с вложениями в проект игры
                                                  • 0
                                                    Да, так и есть. Почему-то до этого не открывалась страница поддержки описанного проекта(
                                          • 0
                                            В принципе я даже ссылку на игру не оставлял.
                                            Я писал пост как технический, пытаясь рассказать о многообразии решений.
                                          • 0
                                            А texic вам что-то рисовал или просто помогает с рекламой?
                                            • 0
                                              Он размещал информацию о нас у себя и так же играет :-)
                                            • +1
                                              Расскажите, как вы делаете анимацию с метеором? Или вы не исопльзуете реактивность для анимации?
                                              • 0
                                                А в чем проблема?
                                                Я не пытаюсь потролить или ещё что то.
                                                Просто скажите какой-нибудь более конкретный момент, а я отвечу как можно сделать анимации в нем.
                                                • 0
                                                  Я сам не делал, но почитав ru.discovermeteor.com/chapters/animations мне показалось, что анимации достаточно сложны в реализации, если дело касается реактивности. Ну и с spacebar я слабо представляю, как добавлять новый полученый элемент в шаблон с анимацией (если читать только оф доку)
                                                  • 0
                                                    Я такие анимации не использовал.
                                                    На самом деле тут особо не отличается от других подходов — отловил событие — заанимировал :-)
                                                    Просто по умолчанию сразу идет отрисовка. Это, так сказать, отключается.
                                                    • 0
                                                      мм, а как вы отключаете? Или вы в iron-router и before action делаете манипуляции?
                                                      • 0
                                                        Банально можно не писать реактивно, то, что не должно быть реактивно.
                                                        Т.е. если есть часть страницы, которая заполняется с анимациями, в шаблоне мы можем оставить её пустой.
                                                        Далее в коде повесить событие на получение/изменение данных на странице — и уже работать с этим так же как и без метеора.
                                              • 0
                                                Ну теперь я обязан попробовать Meteor...)
                                                • 0
                                                  Расскажите про аппаратную часть, пожалуйста. У вас все на одном сервере размещено? Какая конфигурация сервера? Или может облако? В связи с последними законами, сервера должны быть в России. Какую компанию выбрали, в качестве платформы?
                                                  Это интересно.
                                                  • +1
                                                    Ещё рано по аппаратной говорить.
                                                    Да, на одном.
                                                    FirstVDS, 4 ядра, 4гб оперативы. Там довольно легко тарифы веперед-назад сменять, так что, в принципе, как облако.
                                                    Если нагрузки вырастут что хватать не будет, арендуем сервер у них же, вероятно.
                                                    Но, как говорил, должно хватит на 5 000 онлайн человек, что довольно много. Главное что бы канал не проседал.
                                                    • 0
                                                      Спасибо за ответ!

                                                      У нас был сервер на FirstVDS совсем недавно…
                                                      19 августа сервер был недоступен 37 минут, перешли на vscale.io.
                                                      • 0
                                                        Я раньше размещался у vps.net, бывало несколько раз в год лежали. Даже при том что вроде как «облако».
                                                        Проблемы случаются в любых отказоустойчивых системах :-)
                                                        Ну и пока у нас нет требования 100% аптайма.
                                                        • +1
                                                          В любом случае, желаю вам 100% аптайма и широкого канала)
                                                    • 0
                                                      И еще, на сколько мне известно, тарифный план там изменить нельзя. Только создав новый сервер с новым тарифом.
                                                      • 0
                                                        Если KVM то нельзя.
                                                        А так я уже перезжал, всё быстро и удобно.
                                                        • 0
                                                          Вы используете OpenVZ виртуализацию? Она ведь не гарантирует, что у вас будет проплаченное количество ресурсов системы.
                                                          • 0
                                                            Ну и? :-)
                                                            У меня загрузка сейчас 5%. Если она будет хотя бы 50% в пиках — я задумаюсь.
                                                            • 0
                                                              Мы пишем на Java, и техподдержка FirstVDS сразу нам указана на то, что с Java приложениями либо используйте KVM, либо переезжайте: мол на OpenVZ запрещено размещать Java приложения…

                                                              Трудно представляю почему. А у вас нет проблем на этот счет? (node.js)
                                                              • 0
                                                                Ещё рано по аппаратной говорить.

                                                                Пока проблем нет.
                                                  • 0
                                                    Спасибо за статью, отличная работа! И да, вы псих ещё раз)

                                                    Главная страница тоже на метеоре и на том же инстансе/сервере? Почему спрашиваю: теоритически, если игровой сервер отвалится (и все остальные инстансы, глядишь ддос) или надо срочно выключить сервер, хорошо бы, чтобы в такие моменты до пользователя можно было донести информацию/причину и не только. Нужно ли такое разделение в принципе?
                                                    • 0
                                                      Сейчас да. В целом вы правы — потом что-нибудь такое сделаем.
                                                    • 0
                                                      Zav, а почему был выбран iron-router а не flow-router? Iron уже не поддерживается длительное время, в итоге если возникнут какие-то проблемы с очередным релизом Метеора, то придётся форкать пакет и править самому.

                                                      Ты написал среди плюсов метеора — средство для дебага, можешь как-то расширить описание?

                                                      Ну и вопрос исключительно «о себе». Ты написал что это был первый проект на метеоре, нет ли после запуска ощущения, что многое можно было сделать иначе и лучше? Просто у меня после запуска первого проекта на метеоре было ощущение, что я многое сделал не правильно. И сейчас подправляю многие вещи. Вот и интересно, есть ли такое же впечатление? Просто метеор немного не обычен и думать в разработке на нём надо порой иначе.
                                                      • 0
                                                        Касательно роутера. Я взял первый, который решал задачу хорошо.
                                                        По сути у меня сейчас всего 1 роут: '/game/:menu?/:side?/:item?'
                                                        Дальше, по сути, контроллер решает что делать. Переехать на любой другой роутер не займет много времени, если возникнут проблемы.

                                                        По дебагу — имел ввиду что есть уже готовые решения. Например: github.com/kadirahq/meteor-debug

                                                        нет ли после запуска ощущения, что многое можно было сделать иначе и лучше?

                                                        Лучше можно сделать всегда. Первые две недели разработки я узнавал как делать привычные мне действия на метеоре — принципиально оно не отличается от разработки на чем угодно другом, просто позволяет некоторые моменты отдать на волю движка. Например 2 way data binding довольно хорош. При желании можно получить больше контроля, но если не надо, то метеор берёт на себя задачу полностью.

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

                                                        Выбором я доволен, в целом. Метеор — удобный инструмент.
                                                        • 0
                                                          Кстати, вот еще вопрос о котором сразу не подумал.
                                                          А как сделан механизм постройки зданий? Т.е. вот я пользователь нажал «построить», дальше постройка должна быть готова через Х минут. setTimeout тут может принести множество неожиданностей, например обновили/перезагрузили сервак и таймауты потерялись. Просто timestamp-подобный флаг времени, когда можно начать использовать здание?
                                                          • +2
                                                            Создается новый документ в коллекции query (очередь строительства), в котором указан тип, название, время старта и время окончании строительства.
                                                            Когда клиент запрашивает какое-то действие, проиходит актуализация информации — проверяется очередь, и если вермя прошло, создается запись в коллеции buildings.
                                                      • 0
                                                        Бета-тест когда-нибудь завершится?
                                                        • 0
                                                          Да, активно подготавливаем новую версию с кучей крутейших штук.
                                                          Уже скоро (относительно).
                                                        • 0
                                                          Спасибо за оперативный ответ )
                                                          • 0
                                                            Если вдруг кто подписан на пост — у нас появилась вакансия fullstack javascript разработчика.
                                                            • 0
                                                              В чем высший смысл ввода промокодов на -300 000 металла?
                                                              • 0
                                                                Новая вакансия, качественно лучше предыдущей: https://moikrug.ru/vacancies/1000027249

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