Как стать автором
Обновить

Комментарии 60

НЛО прилетело и опубликовало эту надпись здесь
Не совсем понял про АИ, если честно, если речь идёт об artificial intelligence, то его в FOTM попросту нет, бои идут только между игроками. Два клиента противников общаются между собой через socket сервер через socket.emit в пределах игровой комнаты. По поводу второго вопроса: если после определённого действия изменилось только состояние той команды, чей сейчас ход (например, после передвижения), тогда я отправляю на сервер только информацию о ней:

Client:
       mainSocket.emit("updateActiveTeam", $rootScope.currentBattle.room, $scope.myTeam.characters);


Server:
        socket.on('updateActiveTeam', function(room, chars) {
            socket.broadcast.to(room).emit('updateActiveTeamResult', chars);
        });


Если изменилась информация об обоих командах (например, после применения способности):

Client:
       mainSocket.emit("updateTeams", $rootScope.currentBattle.room, $scope.myTeam.characters, $scope.enemyTeam.characters);


Server:
        socket.on('updateTeams', function(room, chars1, chars2) {
            io.sockets.in(room).emit('updateTeamsResult', chars1, chars2);
        });
У вас один игрок может изменять состояние второго игрока?.. А как вы это всё на сервере валидируете?
Не игрока конкретно, а состояние его персонажей во время боя. Персонажи — это фабрики, которые собираются перед началом боя из сущности в БД, где хранится только базовая информация. После боя инстансы естественно удаляются, сохраняется только информация о команде (изменение рейтинга и ресурсов). Сервер в данном случае работает как зеркало и просто кидает информацию о командах обратно игрокам. Со стороны каждого клиента есть хэндлеры на updateTeamsResult.
О, то есть читерство через консоль, получается, неограничено? :)
Валидация на сервере, на самом деле, крайне важная часть архитектуры. В идеале это должно выглядеть как «игрок посылает своё действие, сервер его обрабатывает и рассылает диффы игрокам», причём доступные действия выглядят как «иду налево» или «атакую вверх», самой своей формулировкой отсекая заранее читерские варианты (иду на такую-то клетку, например). Понятно что у вас проект ни на что особое (пока) не претендует, но если вы хотите чтобы в него играли массово, озаботиться валидацией придётся, потому как по закону подлости всегда найдётся какая-нибудь злобная редиска, которая будет портить игру другим.
Да вот как раз проблема, то в том, что можно и на любую клетку ходить (с помощью спелов, например), и урон сильно варьируется. Слишком много условий для валидации. В дальнейшем просто введу uglify на продакшн и gulp'ом сошью всё в одну простыню, чтобы никто ничего не разобрал))
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Хорошо, попробую воспроизвести) Если получиться, тогда придётся все модели и БЛ переносить на backend, боюсь на это уйдёт не один месяц, да и нагрузка на сервер возрастёт в разы(
Лучше webpack, серьёзно :)
Увы, всё что углифицировано, может быть бьютифицировано; это не говоря уж об упомянутом выше перехвате трафика. Поэтому я и описал верную схему, когда игрок посылает не новую диспозицию (которую, действительно, практически невозможно валидировать), а лишь своё действие, результаты которого вычисляются уже на сервере. Реализовать это, на самом деле, вовсе не сложно, особенно учитывая гомогенность приложения (везде js): просто границу клиент/сервер надо перенести, взвалив побольше ответственности на последний.
Дело в том, какое минимальное действие отправлять. Допустим, всем будет заниматься backend, на клиенте мы выбрали способность у персонажа и использовали на вражеском персонаже — минимальные данные (кто, способность уровня X, на кого). Но «X» всё равно можно хакнуть. Эту информацию просто невозможно отделить от клиента. Хоть в этом случае руки у редиски уже связаны посильнее…
НЛО прилетело и опубликовало эту надпись здесь
Да, действительно, это вариант, спасибо за идею!) Будем работать!
НЛО прилетело и опубликовало эту надпись здесь
https://fotm.herokuapp.com/
у меня не работает, в консоль ошибки пишет, вроде с гугл аналитикой что-то
Спасибо за информацию, я проверю)
Проблема была в том, что uBlock блокировал гугл аналитику и еще что то, отключил — все заработало
Как вы её нашли?))
Win 7, Chrome, черный экран…
если есть блокировка рекламы, то попробуй отключить, мне помогло
работает только с отключеным адблоком хотя рекламы там нету
Скорее всего ADBlock'у не нравится url сайта, но за скрины или ошибки в консоли буду благодарен)
http://joxi.ru/a2XVKX6iMDaqrg
пожалуйста)
есть гитхаб? открою issue :)
Github нашёл, issue запостил :)
Да, увидел, посмотрю)
Что-то есть страшное в консоли?
НЛО прилетело и опубликовало эту надпись здесь
Насколько я помню это ошибка при вводе неправильных данных (логина или пароля)…
НЛО прилетело и опубликовало эту надпись здесь
На самом деле я просто игрался с angular.js валидацией, а потом так и оставил)
Согласен, руководство надо ещё полировать. Для тех же, кому лень читать мануалы, я в скором времени кину ссылку на Quick Start Guide по игре)
Хотелось бы больше технических подробностей.
В дальнейшем планирую написать ряд статей по техническим аспектам игры. Как и с помощью чего было реализовано. Здесь всё-таки хотелось рассказать именно о творческой стороне вопроса.
Выглядит хорошо. Хотелось бы посмотреть на кусочки кода, или хотя бы алгоритмы.
Зашел в игру, очень долго ждал соперника, так никто и не появился. Хоть онлайн был 2-3 человека.
Как для одного программиста игра очень даже прикольная.
Интересно, планируется ли переход на Ангуляр 2?
Скорее всего все просто настраивали команды перед боем. На данный момент нет возможности посмотреть игроков в очереди на арену. Переход на Angular 2 пока не планирую, так как подозреваю большой фронт работ. А тут и так много чего ещё допиливать)
Круто, что был проделан весь путь изучения веб технологий ради создания игры) Кстати не рассматривали meteor js? Делал на нем простенькую онлайн игру, очень удобно в плане общения сервера и клиента, mongo и angular «из коробки»
Да, это был очень непростой, но интересный путь. На meteor я наткнулся уже позже, во время создания. Изучение нового framework'а отняло бы часть времени, которое хотелось потратить на имплементации нового функционала. В самом начале я смотрел в сторону MEAN stack, но потом решил использовать те же инструменты по-старинке)
на мой взгляд, не хватает чатика
Полностью согласен, чат есть в планах, в скором времени постараюсь заимплементить…
НЛО прилетело и опубликовало эту надпись здесь
Спасибо за развёрнутый комментарий)
В целом я думаю, что ты прав, разобраться с наката не получится. На добавление системы левелинга аля HS уйдёт не мало времени. Пока же я планирую выпустить серию обучающих видео с нюансами тактики и механики классов. А по поводу казуалов — им и так есть во что поиграть, мне же хотелось сделать игру похардкорней)
losfer, рекомендую прикрутить социальный логин, хотя бы по тому же гмейлу.
О таком я пока не думал, подозреваю кучу проблем с интегрированием VK API на Express.js. Тем более касательно приколюх с выкидыванием такого же игрока из сессии…
Раз у вас всё завязано на почте, лучше использовать почтовые сервисы, как упомянутый мною gmail. В таком случае никаких особых проблем тут не наблюдается — нажал на кнопку, подтвердил у гугла, если это первый вход — ввёл свой ник (с существующей уже валидацией) иначе просто сразу входишь. Со стороны сервера нужно только на каждый вход через кнопку сделать один запрос к гугл апи вида «у пользователя с вот таким токеном действительно вот такая почта?».
На самом деле
Заголовок спойлера
к почте ничего не привязано =), просто идёт проверка на то, что такой e-mail уже есть.

Спасибо за совет, видео issue на гите, буду копать ;)
Подключается http://passportjs.org
Эта библиотека для аутентификации, к которой с помощью модулей подключаются всевозможное способы входа
Спасибо за толковую статью!
Если действительно будет цикл статей по техническим аспектам, то с радостью прочту.
У меня прям крылья выросли как прочел. Как раз сейчас только встаю на эту трапу — разработки игр (давняя мечта). Буду ждать обновлений, если будут, ну и по-рублюсь в игруху:)
Спасибо) Очень приятно слышать, что кого-то данная статья замотивирует на начало разработки своего проекта) Welcome to FOTM \m/
Иконки скилов крутые. Сами рисовали?
Нет, иконки все free, брал с сайта http://game-icons.net/
Случайно обнаружил баг: первоначально вписал ник «qwe», создавая второго персонажа. Ответом было сообщение, что данный ник уже занят. После чего я просто переписал его, но кнопка создания персонажа уже не работала:
i.imgur.com/3i5f4sz.png
Да, я знаю про этот баг. Постараюсь исправить в ближайшее время, спасибо)
Первое награждение самых настойчивых игроков за первые 2 дня игры)
https://vk.com/fotm_game?w=wall-111631987_4
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации