Понедельник, 12 Апреля 2021, 01:56

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Ищу движок под MUD на php (xin.ru/tale.ru)
Ищу движок под MUD на php
JanCarloДата: Воскресенье, 04 Апреля 2021, 19:06 | Сообщение # 1
был не раз
Сейчас нет на сайте
Добрый день господа!

Ищу движок, основу, наработки браузерной игры на PHP/MySql по типу MUD только разумеется без использования telnet и отправки команд типа go to / drop и тd

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

соответственно один шаг - переход на одну локацию, на каждой локации могут стоять npc/мобы/здания и тд

Переход по ссылкам:


Если кто помнит были такие игровые проекты как xin.ru tale.ru там это было реализовано.

Если есть какие то готовые конструкторы / исходники / движки подобных схем передвижений - было бы отлично. С нуля можно было бы тоже написать, но пока в голове сложно представить в каком вид хранить базу данных самой карты таким образом, что бы не делать при каждом переходе с локации на локацию запрос в базу данных и делать сверку типа а есть ли проход в ту или иную сторону. Было бы отлично если бы был еще конструктор подобных карт, которые можно было бы в последствии подключать. Видел отдельный видос такого конструктора - https://www.youtube.com/watch?v=X-1lu0zER60 тут конструктор прямо точь в точь что мне нужно, было бы круто еще реализовать переход по локациям. Разумеется надо что бы после регистрации персонажа по дефолту ставило на какую либо локацию, а после выхода из игры его локация сохранялась и при новом входе персонаж оставался на последнем месте. При этом важно, что бы была исключена возможность отправить поддельный post запрос с отправкой левой локации что бы исключить возможность телепорта игрока в любое место.

Ребят кто может подсказать по этой задаче?

Мне для начала главное реализовать хранение карты и передвижение пользователей по ней.

В какой то момент я сделал эскиз карты простенькой к примеру :


И представил хранение карты в виде такого массива -
Код
$worldMap = [
  1 => ['south' = false, 'north' = 4, 'west' = false, 'east' => 2, 'up' => false, 'down' => false, 'description' => 'Самая левая нижняя комната'],
  2 => ['south' = false, 'north' = 5, 'west' = 1, 'east' => 3, 'up' => false, 'down' => false, 'description' => 'Комната с канделябрами'],
  3 => ['south' = false, 'north' = false, 'west' = 2, 'east' => false, 'up' => false, 'down' => false, 'description' => 'Самая правая нижняя комната'],
  4 => ['south' = 1, 'north' = 6, 'west' = false, 'east' => 5, 'up' => false, 'down' => false, 'description' => 'Центраяльная левая комната'],
  5 => ['south' = 2, 'north' = 7, 'west' = 4, 'east' => false, 'up' => false, 'down' => false, 'description' => 'Центр здания'],
  6 => ['south' = 4, 'north' = false, 'west' = false, 'east' => 7, 'up' => false, 'down' => false, 'description' => 'Левая северная комната'],
  7 => ['south' = 5, 'north' = false, 'west' = 6, 'east' => 8, 'up' => false, 'down' => false, 'description' => 'Задняя часть дома с окном'],
  8 => ['south' = false, 'north' = false, 'west' = 7, 'east' => false, 'up' => false, 'down' => false, 'description' => 'Правая северная комната'],
];


Но потом представил, а что если у нас карта где будет 10к локаций, это при каждом переходе каждого игрок на соседнюю локацию - будет подгружаться этот массив на 10к строк и циклом искать тот ID локации на котором стоит игрок, что бы прочесть в какие стороны он может двигаться и куда эти стороны его приведут - (на какую именно соседнюю локацию переместиться игрок) то это будет дикая нагрузка на сервер скорее всего, скажем 100 игроков одновременно передвигаются и каждый раз целую базу такую считывать... но это если карта будет храниться чисто в массиве что неразумно. По этому надо подумать как реализовать это на базе и запрос с проверками к ней.

Заранее спасибо


Сообщение отредактировал JanCarlo - Воскресенье, 04 Апреля 2021, 19:20
Fire_PhoenixДата: Понедельник, 05 Апреля 2021, 06:23 | Сообщение # 2
был не раз
Сейчас нет на сайте
JanCarlo, можно узнать, почему не хотите использовать (стандартные) 8 направлений: N, NE, E, SE, S, SW, W, NW?

Я не эксперт в MUD картах, но такое вроде допускается:


Цитата
И представил хранение карты в виде такого массива

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

Цитата
Но потом представил, а что если у нас карта где будет 10к локаций, это при каждом переходе каждого игрок на соседнюю локацию - будет подгружаться этот массив на 10к строк и циклом искать тот ID локации на котором стоит игрок, что бы прочесть в какие стороны он может двигаться и куда эти стороны его приведут - (на какую именно соседнюю локацию переместиться игрок) то это будет дикая нагрузка на сервер скорее всего, скажем 100 игроков одновременно передвигаются и каждый раз целую базу такую считывать...


Это очень интересный подход: с одной стороны просчитывать нагрузку на сервер заранее конечно не плохо, но с другой стороны, Вы сразу планируете сделать 10 к локаций? :D

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

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


Не переживайте, при вдумчивой разработке, все эти вопросы быстро решаются :)

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

Цитата
При этом важно, что бы была исключена возможность отправить поддельный post запрос с отправкой левой локации что бы исключить возможность телепорта игрока в любое место.


Все просто :)
Ваш клиентский интерфейс (впрочем, как и ответы сервера) должен предусматривать передачу только допустимых команд. Например, зачем нужна команда телепорта? Правильно, не за чем... Клиент не имеет права давать такие команды, все что он может, это попросить у сервера возможность, перейти на нужную клетку, а тут уже сервер откроет файл (или БД), проверит, доступна ли эта клетка ему, и если да, даст добро на переход. Применяйте алгоритм: все, что не разрешено - запрещено, и никаких проблем не будет...

Так что, сложностей в реализации практически нет. И да, если Вам кто-то будет писать, мол PHP плохо, возьми Python, или еще что-то, не слушайте, PHP достаточно гибок для новичка. А то я знаю случаи, когда человеку предлагали разные языки программирования, мотивируя разными преимуществами, в итоге, человек потерял интерес к проекту, так как не смог определиться, на каком ЯП писать в итоге лучше... Выбрали PHP - пишите на нем. Будет что-то не получаться, спросите :)

Цитата
Видел отдельный видос такого конструктора


Я пока читал Ваше сообщение, написал небольшой конструктор карт, вот фрагмент карты из него:


Если немного доработать, то можно тоже снимать видео :)




Сообщение отредактировал Fire_Phoenix - Понедельник, 05 Апреля 2021, 06:26
JanCarloДата: Понедельник, 05 Апреля 2021, 12:05 | Сообщение # 3
был не раз
Сейчас нет на сайте
Fire_Phoenix, Добрый день!

Спасибо огромное за столь развернутый ответ! Очень приятно что так отреагировали, я не ожидал =)

Цитата Fire_Phoenix ()
JanCarlo, можно узнать, почему не хотите использовать (стандартные) 8 направлений: N, NE, E, SE, S, SW, W, NW?

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

А направления то можно назвать как угодно, это вообще не проблема и да, даже на том скриншоте что я привел там как раз север / запад / юг / восток / вверх / вниз.

Цитата Fire_Phoenix ()
Я не эксперт в MUD картах, но такое вроде допускается:

Интересно, попробую поискать этот конструктор, было бы интересно видеть в каком виде экспортируется карта и как её потом в бд заносить.

На самом деле тот видео ролик что я показал, я сегодня нашел к нему исходник с гитхаба - https://github.com/incompl/rmbt

Запустил -

В целом выглядит довольно интересно, и судя по таблице в бд предполагается передвижение по клеткам именно по координатной оси x,y,z где каждое направление отличается на одну единицу от соседней локации, то есть при передвижении по осям мы делаем по идее x++; y--; в зависимости от направления

Сам бы я конечно такой конструктор не написал =)

Осталось реализовать регистрацию и переходы по локациям :D ну и заложить фундамент в базе на то, что на локациях могут быть и мобы, и предметы типа выбросить/поднять и соответственно другой игрок позже с этой локации может поднять выброшенный вами предмет. Неоторые локации могут к примеру телепортировать игрока куда либо за определенную плату, или сделать на локации дверь, а ключ положить в квестовую ветку. Про NPC, бои с мобами / пвп / командные бои я пока молчу, не знаю как это реализовывать пока, не буду пока голову забивать. (однозначно бои хотел бы сделать в пошаговом виде, но не в таком как у пресловутых комбатс (в который ни разу не играл :D) где удар идет в пах/голову и тд. Есть живой пример проекта как бы я хотел видеть бой аналогично)

В целом я очень хорошо представляю как именно должна в перспективе выглядеть моя игра, но так как я только учусь то хотелось бы делать с простого и по порядку =)

Цитата Fire_Phoenix ()

Это очень интересный подход: с одной стороны просчитывать нагрузку на сервер заранее конечно не плохо, но с другой стороны, Вы сразу планируете сделать 10 к локаций?

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

Цитата Fire_Phoenix ()
И да, если Вам кто-то будет писать, мол PHP плохо, возьми Python, или еще что-то, не слушайте, PHP достаточно гибок для новичка. А то я знаю случаи, когда человеку предлагали разные языки программирования, мотивируя разными преимуществами, в итоге, человек потерял интерес к проекту, так как не смог определиться, на каком ЯП писать в итоге лучше... Выбрали PHP - пишите на нем. Будет что-то не получаться, спросите


Вот за это отдельный респект и огромное спасибо за поддержку =)
Я в принципе сейчас прохожу курсы по php в данный момент нахожусь на SlimFramework, и у нас на курсе в приоритете PostgreSQL изучение. Но на SlimFramework не думаю что хорошая идея писать, так как он создан для самых простых минимальных сайтов. Через пару дней начинается большой курс по Laravel. В целом я пока только на PHP и могу что то минимальное делать, на другие языки распыляться пока точно не хочу, что бы, как говориться, штаны не порвать сидя на двух ветках :D Ну разве что кроме JS, JS в любом случае хотя бы минимально будет нужен в перспективе.

Кстати посмотрев на вашу карту - у вас точно такой же принцип получился как на ролике, что очень классно выглядит.

Многие еще советовали использовать webSocket, но я их еще не изучал. Думаю что это было бы разумно как минимум рассмотреть. Так как в перспективе на веб интерфейсе клиента будет отображаться персонаж, переходы по локациям и с описанием самой локации, в нижней части будет общий игровой чат с переключением вкладок на "торговый чат", "Приватный", "Соседние локации" и тд то есть в целом будет динамика на странице.

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

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

Как то так, со дня на день начну реализацию, как только продумаю как передвигаться по миру =)


Сообщение отредактировал JanCarlo - Понедельник, 05 Апреля 2021, 12:39
Fire_PhoenixДата: Понедельник, 05 Апреля 2021, 12:41 | Сообщение # 4
был не раз
Сейчас нет на сайте
Цитата
Осталось реализовать регистрацию и переходы по локациям :D ну и заложить фундамент в базе на то, что на локациях могут быть и мобы, и предметы типа выбросить/поднять и соответственно другой игрок позже с этой локации может поднять выброшенный вами предмет. Неоторые локации могут к примеру телепортировать игрока куда либо за определнную плату, или сделать на локации дверь, а ключ положить в квестовую ветку.


Я думаю, с этим тоже не будет проблем :) Это в реализации просто запросы: клиент отправил, сервер проверил, и дал ответ...

Цитата
Через пару дней начинается большой курс по Laravel.


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

Цитата
Как то так, со дня на день начну реализацию, как только продумаю как передвигаться по миру =)


Удачи :) Если будут вопросы, всегда рад помочь...

Добавлено (05 Апреля 2021, 20:13)
---------------------------------------------
Скажите, а как у Вас дела с графикой? Игра, как я понимаю, все же подразумевает ее наличие. Сами будете рисовать?




Сообщение отредактировал Fire_Phoenix - Понедельник, 05 Апреля 2021, 20:13
JanCarloДата: Вторник, 06 Апреля 2021, 13:41 | Сообщение # 5
был не раз
Сейчас нет на сайте
Fire_Phoenix,

Цитата Fire_Phoenix ()
Было бы очень хорошо, если бы Вам дали вначале полностью освоиться в PHP, а потом предлагали изучение Framework-ов, ведь у самого языка большой потенциал, и написать на чистом PHP тоже можно много чего... Да и код получается Ваш, в котором спустя даже несколько лет Вы сможете быстро разобраться, и использовать как основу для других проектов...


Да, это верно, именно так и хочу сделать =)

Да собственно я уже прошел несколько курсов, функции / классы / объекты / массивы / ООП и другие, написал 2 проекта типа экзаменных. Первый это 6 консольных математических игр типа "Допишите недостающее число в ряде - 2 4 6 .. 10 12" ну или "Является ли число 673 простым?" и другие.

Второй проект был гораздо сложнее для меня, писал консольную утилиту по вычислению различий в двух JSON / JSON или JSON / YML файлах. На выходе получаем дерево различий в формате массива / json / или просто стилизованного текста.
Всего 4 экзамена, следующие 2 это уже полноценные веб приложения на Laravel с базой.

Ну то есть, короче говоря, уже не с нуля php учу но при этом
всё равно много сложностей в голове возникает.
Да собственно я на Hexlet учусь, может быть слышали? =)

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

Цитата Fire_Phoenix ()
Скажите, а как у Вас дела с графикой? Игра, как я понимаю, все же подразумевает ее наличие. Сами будете рисовать?


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

Игрок будет читать краткое описание каждой локации (буквально 1-4 предложения) и постепенно, в голове у игрока карта будет сама "визуализироваться", что мне кажется довольно круто. Человек сам решит как он будет видеть карту в голове у себя =)

Представьте, Вы, как игрок сделали шаг на север, и тут описание локации - "Вы стоите перед спуском с крутого песчаного обрыва, в лицо дует теплый вечерний ветер. На горизонте яркий закат а впереди, после спуска, виднеется тропа уходящая на север в лесной массив". Делаете следующий переход на локацию - "Спустившись с обрыва, вы стоите у входа в лесной массив. Часть деревьев изуродована под многолетним воздействием радиации. Однако местами можно увидеть вполне нормальные сосны. Впереди, в лесной гуще виднеется сильно разрушенное двухэтажное здание к которому ведут остатки асфальта. На здании боком висит табличка с надписью "Пятёрочка"..." :D

И так вот к этому зданию на север еще пару локаций будет тянуться, по дороге будут мобы где то стоять.

Согласен, текста будет очень много)

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

То есть вкратце игра будет по принципу MUD, но разумеется без telnet и ввода команд всяких как это было именно в мадах. Многие скажут что, а как же графика и динамика - мол я потеряю большое количество аудитории. Да, вполне так может быть. Но в первую очередь я хочу эту игру создать в своих учебных целях, а во вторых предполагается что в такую игру будут играть скорее игроки постарше, так как сам на своём опыте играл в подобные и там контингент был довольной взрослый хотя разумееться и не без молодых, да к тому же еще и платёжеспособный =), при этом никто не запрещает в случае более менее рабочей версии игры - заказать адаптацию под android/ios. Однозначно не хочу игру делать по принципу "срубить бабла", а в первую очередь для своего развития и для привлечения игроков и для создания крутой атмосферы в самой игре. Про донат я вообще не думаю. Просто уже очень давно хочу создать крутую игру и знаю что в ней должно быть =)

В игре в перспективе будут кланы, пвп бои, мега боссы которых можно будет убить только набрав к примеру от 10 бойцов, если в общем бою 9 бойцов то босс неубиваемый =), транспорт, крафт вещей, прокачка навыков для статистики, к примеру "Умение создавать арбалетные наконечники" которое растет в время создания наконечников. И при этом эти наконечники можно будет использовать самому для создания стрел, так и передать/продать другим игрокам (тут уже целая экономика в игре нарисовывается), клановые территории которые надо захватывать и защищать (строить стены/баррикады/ покупать охранных мобов, при этом пока держится эта территория - она приносит ценные ресурсы клану) при этом эту территорию могут толпой захватить так же другие кланы, допустим разрушив для начала стену подогнав к стене какую нибудь "баллисту" или использовать дорогущий "ракетный комплекс"
:D, убив охрану, и пройдя через ПВП если владельцы не будут спать к примеру ночью и увидят захват)))

За огромное количество монет можно будет купить индивидуальную клетку на карте, именную где к примеру будет стоять дом игрока (игрок сам выберет название локации/описание и тд) и все смогут пройти по этой клетке/локации, это будет часть игровой карты =) но при входе в дом нужен будет либо ключ/код/разрешение для других игроков выданное владельцем. Ну а в доме можно будет хранить вещи, получать какие нибудь баффы к примеру +45% к общей броне на 3 часа или + 100% к опыту на 1 час. Квесты разумеется, но об этом всё пока рано, скорее всего нужен будет человек контент-мейкер что бы писать текста и придумывать квесты.

Ограничей по уровню не будет! Не хочу лимит уровней делать для развития =)

В Кратце как то так, если вдруг будет интерес, можно будет пообщаться в лс или в мессенджерах.

На самом деле надо бы ВСЁ что придумано - грамотно перенести в док файл, схематически.


Сообщение отредактировал JanCarlo - Вторник, 06 Апреля 2021, 13:59
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Ищу движок под MUD на php (xin.ru/tale.ru)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг