Old Map #1: Создаю онлайн игру с нуля
Всем привет, я начинаю новый проект и хочу поделиться с вами своим путём.
Игра будет представлять из себя клон magic ru.
Изометрическая ММО. Фармим, ходим на боссов, улучшаем гильдию.
Должно получится что-то такое.
Стек
Я создал много играл на Unity, но моя основная работа - веб разработка, я хорошо знаю JS и PHP, всякие Node и Mysql, по этому, в выбор пал на Phaser 3 + Socket IO + Express + Mysql
В качестве хостинга для сервера я использую reg ru cloud
Актуальная версия игры доступна на сайте chat2you.ru
Начало
Я буду использовать бесплатные изометрические ассеты с сайта kenney.nl, там же для начала возьмём UI, но для начала хватит и графики из примера phaser.
Пример карты с изометрией я возьму прямо с сайте phaser, у них десятки примеров, в том числе изометрия с правильной сортировкой
Карта
Я никогда не создавал онлайн игры, но вот что я придумал
Мы будем хранить на клиенте ресурсы, а карты получать в момент входа на локацию, в виде 2d массива.
Можно будет в любой момент изменять карту, удалять или добавлять боссов. Скрывать или открывать пещеры по времени.
Если взять демо проект и оставить только нужное нам, то получится примерно так
Берём из примера лучшее, оставляем только карту и одного скелета:
Я нашёл на гитхабе проект, в котором уже есть изометрия и поиск пути, его и возьмём за основу.
Сервер
Тогда пришло время создавать сервер
В первой версии цели простые - передать карту клиенту при запуске и вывести количество игроков онлайн.
Сама по себе отдача JSON крайне лёгкая, просто переносим карту из проекта на сервер и по требованию отдаём
Конечно, далее карты мы будем редактировать в админке и отдавать клиенту через базу.
Давайте сразу подключим базу, я использую reg.ru как хостинг удалённой базы данных и клиента (фронта), на node подключаюсь через mysql2
Вход
Для входа нужно авторизоваться, я сделал базовую форму, формальную
SOCKET IO
Самое главное в онлайн игре то сообщать игрокам о других игроках.
Socket IO очень простая вещь, встраиваем как обычно, в Express
А дальше всё просто, получаем нового игрока и сообщаем ему онлайн и положение (в будущем) остальных игроков, а текущим игрокам спавним на клиенте ещё одного игрока
Перемещение
Тут всё просто, продолжаем ту же концепцию.
Игрок ходит и посылает серверу новые координаты, путь считается на клиенте. Сервер отправляет команду всем остальным игрокам, о новых координатах игрока и каждый игрок считает ему путь и отрисовывает перемещение .
То есть, в условиях плохо сервера - пути считаются на клиенте и если будет большой онлайн в одной локации - клиент может и не выдержать, но эта проблема решается слоями, условно по 10 человек.
По поводу того, куда можно, а куда нельзя - проверок нет. Планируются проверки только доступа, к локациям и тд.
Размещение игры и сервера на хостинге
Оказалось задача довольно сложная
Если с фронтом всё понятно, я просто вебпаком всё собираю и получаю пару файлов статичных
То с сервером всё намного сложнее и вот почему:
Я всегда использовал regru как хостинг, там есть поддержка LAMP из коробки, я просто заливаю скрипты php/js на сайт и всё работает
А сервер у нас на node, для таких целей у меня есть regru cloud, облако где я ставлю скрипты node, допустим для постоянного парсинга игры, например для проекта games-stats.ru.
Я думал так прокатит и дальше, НО оказалось что во-первых нужен домен, во вторых поставить SSL.
Задача довольно сложная, для первого раза, домен я купил за 130р, back-server, а вот установка SSL, заняла у меня 4 часа, методом экспериментов я в итоге всё установил и всё хорошо, но было сложно)
Будут вопросы по настройке сервера пишите )
v0.01 is ready
Версия 0.01 моей изометрической онлайн ММО готова)
Вы только посмотрите, за 10 часов работы у меня есть что-то работающее.
Конечно тут мало игры, но мы это исправим)
Играть в онлайн ММО бесплатно и без регистрации
уже можно!
С гордостью представляю вам игру OldMap
Спасибо что дочитали, спасибо если зашли по ссылке!
Сервер может упасть, пишите!
Пожалуйста не взламывайте хостинг и базу данных <3
Будущее
Буду ооочень рад фитбеку и предложениям.
Сейчас работаю на сохранением положения в игре и статами (здоровье, уровень, опыт, мана)
Пока без регистрации, просто через логин
Ещё очень важный вопрос, как вы видите бой, я вижу как в героях, отдельное поле, дерёмся поочереди, выходим из боя - получаем опыт, то есть бой будет локальный, по сути 1х1 с сервером, чтобы не трогать других клиентов, им нужно только скрыть и показать обратно игрока после боя.
Ещё есть вариант с автобоем, типа входим в бой, видим анимации атаки поочереди и победителя. Ваш герой будет драться с мобами автоматически. Задача проще, но скучнее. )
Подписывайтесь на канал. Хорошего дня :3
Решил не брать серверный движок а пилить свой - уважаемо.
Ну это же проект не коммерческий, хочется и подучиться чуть-чуть )
Были похожие идеи с картой, но хотелось добавить управление не target based, а по стрелочкам и не придумал как на сетке делать в таком случае диагональное перемещение, чтобы оно не было быстрее горизонтального.
А у вас таргентное движение, т.е. игрок кликает на нужную клетку и перемещается только по 4 соседним клеткам?
И что насчет зданий, построек, стен, они всегда выровнены по клеткам? Стена всегда одна клетка?
На текущий момент карта просто 2d array, то есть 0 условно - вода, а 1 - земля, для зданий тоже самое, 3 - условно домик 1х1, а если поставить допустим 33 и 34 это будет начало и конец домика)
Дальность хода не ограничена, поиск идёт через плагин EasyStar.js, я просто отдаю карту и точки, он возвращает путь массивами точек
Комментарий недоступен
ну это же первый пост, посмотрю как людям заходит то или иное, моменты кода показывать или весь )
Я думаю он больше как показатель интересных моментов, для интересующихся )
Комментарий недоступен