Вторник, 23 Апреля 2024, 09:39

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Записи участника » JanCarlo [24]
Результаты поиска
JanCarloДата: Четверг, 10 Июня 2021, 10:30 | Сообщение # 21 | Тема: Ищу движок под MUD на php
был не раз
Сейчас нет на сайте
Добрый день господа!

Руки дошли до проекта вот в принципе пару дней назад только. Реализовал переходы как посоветовали по координатам x/y/z, сделал контроллер (делаю на ларавеле, что бы уж сильно всё с нуля не пилить) который внутри сам, в зависимости от переданного параметра направления - плюсует или минусует вектор направления, проверяет существует ли по новой координате комната - и если существует, делает переход и записывает в юзера. Для юзера направления движения выглядят как активная ссылка для перехода которую можно клацнуть, и если перехода нет то ссылка в виде текста некликабельная.

В бд есть 2 таблицы - юзеры и комнаты. У таблицы юзера поля - login, pass, email, created_at, updated_at, current_room_id.
У таблицы rooms в принципе всё просто, поля - x, y, z, name, description.

Получается теперь так, что если у нас, к примеру 3 локации тянутся вперед, образно коридор - первая локация - x1/y1/z1, вторая x1/y2/z1, третья - x1/y3/z1 - всё логично (влево вправо это ось x, вперед назад y, вверх вниз - z). Допустим мы хотим добавить в конце коридора поворот на право и такой же коридор обратно, делаем - поворот - x2/y3/z1, далее так же идем обратно - x2/y2/z1, x2/y1/z1.
При данной структуре базы данных, на данный момент эти 6 локаций получились БЕЗ стен, то есть это не коридор буквой П, а просто большая комната из 6 локаций.

Первый вопрос - как структурировать базу данных, так, что бы можно было добавлять стены с любой стороны у самой локации?
Технически реализовать то думаю не сложно, сложно придумать что бы это было грамотно.
В кратце что бы можно было реализовать так -


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

Получается, что в принципе координаты у комнат остаются прежние, но ID локаций просто меняются местами (и тут кстати я еще не думаю, как primary key можно переприсваивать). НО, если реализовывать логику стен, (я сначала предполагал что таблица комнат будет содержать помимо координат еще и доступные направления типа - south - allowed, west - disallowed, up - allowed, down - disallowed ну и тд) то при перемещении комнат должны так же меняться еще и стены - тут короче говоря у меня мозг начал вытекать из ушей и носа.

Кто то может подсобить советом по этим двум вопросам? =)
Заранее спасибо!


VK группа игры (Разработка c 22 года): https://vk.com/browsermud
JanCarloДата: Вторник, 06 Апреля 2021, 13:41 | Сообщение # 22 | Тема: Ищу движок под MUD на php
был не раз
Сейчас нет на сайте
Fire_Phoenix,

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


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


VK группа игры (Разработка c 22 года): https://vk.com/browsermud

Сообщение отредактировал JanCarlo - Понедельник, 19 Апреля 2021, 10:30
JanCarloДата: Понедельник, 05 Апреля 2021, 12:05 | Сообщение # 23 | Тема: Ищу движок под MUD на php
был не раз
Сейчас нет на сайте
Fire_Phoenix, Добрый день!

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

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

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

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

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

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

Запустил -

В целом выглядит довольно интересно, и судя по таблице в бд предполагается передвижение по клеткам именно по координатной оси 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 фреймов и в каждом из них будет какая то определенная часть управления игровым процессом.

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


VK группа игры (Разработка c 22 года): https://vk.com/browsermud

Сообщение отредактировал JanCarlo - Понедельник, 19 Апреля 2021, 10:31
JanCarloДата: Воскресенье, 04 Апреля 2021, 19:06 | Сообщение # 24 | Тема: Ищу движок под MUD на php
был не раз
Сейчас нет на сайте
Добрый день господа!

Ищу движок, основу, наработки браузерной игры на 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 игроков одновременно передвигаются и каждый раз целую базу такую считывать... но это если карта будет храниться чисто в массиве что неразумно. По этому надо подумать как реализовать это на базе и запрос с проверками к ней.

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


VK группа игры (Разработка c 22 года): https://vk.com/browsermud

Сообщение отредактировал JanCarlo - Воскресенье, 04 Апреля 2021, 19:20
Форум игроделов » Записи участника » JanCarlo [24]
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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