Ищу движок под 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 игроков одновременно передвигаются и каждый раз целую базу такую считывать... но это если карта будет храниться чисто в массиве что неразумно. По этому надо подумать как реализовать это на базе и запрос с проверками к ней.
Заранее спасибо
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
Сообщение отредактировал 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 к локаций?
Обычно, заранее сложно просчитать все нюансы, и возможно, что придется в дальнейшем что-то менять. Рассчитать все сразу с нуля может только тот, кто с такой задачей уже сталкивался
Цитата Разумеется надо что бы после регистрации персонажа по дефолту ставило на какую либо локацию, а после выхода из игры его локация сохранялась и при новом входе персонаж оставался на последнем месте.
Не переживайте, при вдумчивой разработке, все эти вопросы быстро решаются
Про установку игрока в нужную клетку и сохранение его позиции после выхода можно не волноваться, а что касается:
Цитата При этом важно, что бы была исключена возможность отправить поддельный 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 картах, но такое вроде допускается: Интересно, попробую поискать этот конструктор, было бы интересно видеть в каком виде экспортируется карта и как её потом в бд заносить.
Запустил -
В целом выглядит довольно интересно, и судя по таблице в бд предполагается передвижение по клеткам именно по координатной оси x,y,z где каждое направление отличается на одну единицу от соседней локации, то есть при передвижении по осям мы делаем по идее x++; y--; в зависимости от направления
Сам бы я конечно такой конструктор не написал =)
Осталось реализовать регистрацию и переходы по локациям ну и заложить фундамент в базе на то, что на локациях могут быть и мобы, и предметы типа выбросить/поднять и соответственно другой игрок позже с этой локации может поднять выброшенный вами предмет. Неоторые локации могут к примеру телепортировать игрока куда либо за определенную плату, или сделать на локации дверь, а ключ положить в квестовую ветку. Про NPC, бои с мобами / пвп / командные бои я пока молчу, не знаю как это реализовывать пока, не буду пока голову забивать. (однозначно бои хотел бы сделать в пошаговом виде, но не в таком как у пресловутых комбатс (в который ни разу не играл :D) где удар идет в пах/голову и тд. Есть живой пример проекта как бы я хотел видеть бой аналогично)
В целом я очень хорошо представляю как именно должна в перспективе выглядеть моя игра, но так как я только учусь то хотелось бы делать с простого и по порядку =)
Цитата Fire_Phoenix ( ) Это очень интересный подход: с одной стороны просчитывать нагрузку на сервер заранее конечно не плохо, но с другой стороны, Вы сразу планируете сделать 10 к локаций?
Ну 10к конечно я не создам сразу, хотя бы пару десятков для начала, мини городок к примеру с прилегающим к нему лесом. Но в перспективе через такие конструкторы как показали Вы, я имею ввиду вашу наработку, или то что показал я - за годик могут несколько тысяч локаций появиться это однозначно =)
Цитата Fire_Phoenix ( ) И да, если Вам кто-то будет писать, мол PHP плохо, возьми Python, или еще что-то, не слушайте, PHP достаточно гибок для новичка. А то я знаю случаи, когда человеку предлагали разные языки программирования, мотивируя разными преимуществами, в итоге, человек потерял интерес к проекту, так как не смог определиться, на каком ЯП писать в итоге лучше... Выбрали PHP - пишите на нем. Будет что-то не получаться, спросите
Вот за это отдельный респект и огромное спасибо за поддержку =) Я в принципе сейчас прохожу курсы по php в данный момент нахожусь на SlimFramework, и у нас на курсе в приоритете PostgreSQL изучение. Но на SlimFramework не думаю что хорошая идея писать, так как он создан для самых простых минимальных сайтов. Через пару дней начинается большой курс по Laravel. В целом я пока только на PHP и могу что то минимальное делать, на другие языки распыляться пока точно не хочу, что бы, как говориться, штаны не порвать сидя на двух ветках Ну разве что кроме JS, JS в любом случае хотя бы минимально будет нужен в перспективе.
Кстати посмотрев на вашу карту - у вас точно такой же принцип получился как на ролике, что очень классно выглядит.
Многие еще советовали использовать webSocket, но я их еще не изучал. Думаю что это было бы разумно как минимум рассмотреть. Так как в перспективе на веб интерфейсе клиента будет отображаться персонаж, переходы по локациям и с описанием самой локации, в нижней части будет общий игровой чат с переключением вкладок на "торговый чат", "Приватный", "Соседние локации" и тд то есть в целом будет динамика на странице.
И самое главное, будет так же возможность в этом же интерфейсе сбоку посмотреть кто на этой локации из игроков находиться а так же путь откуда игрок пришел (возможно, вместо этого надо будет сделать под блоком краткой инфы о персонаже - миникарту текущего местоположения где сейчас игрок находиться и соседние локации к примеру с радиусом в 3-5 клеток, что бы он визуально видел куда сделал шаг и где оказался - тогда не придется делать колонку с историей куда двигался игрок и будет очень удобно ориентироваться в местности).
В целом получается что веб интерфейс клиента будет поделен на 5-6 фреймов и в каждом из них будет какая то определенная часть управления игровым процессом.
Как то так, со дня на день начну реализацию, как только продумаю как передвигаться по миру =)
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
Сообщение отредактировал JanCarlo - Понедельник, 19 Апреля 2021, 10:31 |
|
| |
Fire_Phoenix | Дата: Понедельник, 05 Апреля 2021, 12:41 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Цитата Осталось реализовать регистрацию и переходы по локациям ну и заложить фундамент в базе на то, что на локациях могут быть и мобы, и предметы типа выбросить/поднять и соответственно другой игрок позже с этой локации может поднять выброшенный вами предмет. Неоторые локации могут к примеру телепортировать игрока куда либо за определнную плату, или сделать на локации дверь, а ключ положить в квестовую ветку.
Я думаю, с этим тоже не будет проблем Это в реализации просто запросы: клиент отправил, сервер проверил, и дал ответ...
Цитата Через пару дней начинается большой курс по 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 тоже можно много чего... Да и код получается Ваш, в котором спустя даже несколько лет Вы сможете быстро разобраться, и использовать как основу для других проектов...
Да, это верно, именно так и хочу сделать =)
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
Сообщение отредактировал JanCarlo - Понедельник, 19 Апреля 2021, 10:30 |
|
| |
dohteM | Дата: Среда, 12 Мая 2021, 09:02 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| Цитата JanCarlo ( ) Добрый день господа!
Ищу движок, основу, наработки браузерной игры на 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 ( ) Добрый день господа!
Ищу движок, основу, наработки браузерной игры на 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 | Дата: Четверг, 10 Июня 2021, 10:30 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Добрый день господа!
Руки дошли до проекта вот в принципе пару дней назад только. Реализовал переходы как посоветовали по координатам 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
|
|
| |
yanki | Дата: Суббота, 02 Октября 2021, 18:30 | Сообщение # 8 |
уже был
Сейчас нет на сайте
| Приветствую! Специально зарегистрировался здесь ради того, чтобы написать это сообщение
В общем, когда-то давным давно работал с вап-игрушками и реализовывал нечто подобное тому, что ты делаешь.
Отвязал от работы с базой и внутренними функциями движка, поэтому код теперь не особо читаем. Да и можно сделать скидку на возраст кода, даже у меня от него глаза болеть начали. Ладно, хорош уже оправдываться. Ссылка на гитхаб репу
Тебя интересует 2 файла:
index.php - Представляет собой пародию на графический конструктор тайловой карты. Справа (нажми на "tiles" на черном фоне) выбираешь картику (спрайт, при нажатии подсветится красной рамкой), потом тыкаешь в нужную клетку таблицы, настраиваешь куда можно из этой клетки пойти и что там может произойти. Когда наиграешься, снизу на желтом фоне тебя ждет готовый JSON, который нужно поместить в папку /maps
game.php - Это пример реализации перемещения по карте и выполнения событий на той или иной клетке. (в комплекте идет две карты, первая буквой П перевернутой на бок и на противоположном конце переход на другую карту (этаж/локацию/мир), а на второй карте есть несколько монстров (просто выводится текст что с таким-то шансом может напасть монстр))
Если будут вопросы, пиши в лс телегу, поболтаем.
|
|
| |
JanCarlo | Дата: Пятница, 12 Ноября 2021, 23:22 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| yanki, Привет!
Очень интересно! Спасибо за проявленый интерес Гляну код, в лс телегу тоже скинул
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
|
|
| |
JackNazaryan | Дата: Пятница, 12 Ноября 2021, 23:54 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| Кажется, задача частично уже решена, но вставлю пять копеек.
Цитата JanCarlo ( ) Ищу движок, основу, наработки браузерной игры на PHP/MySql по типу MUD только разумеется без использования telnet и отправки команд типа go to / drop и тd
По нынешним меркам это простая задача, а все основы, увы, уже морально устарели. Реально проще самому, даже если это будет долго.
Цитата JanCarlo ( ) С нуля можно было бы тоже написать, но пока в голове сложно представить в каком вид хранить базу данных самой карты таким образом, что бы не делать при каждом переходе с локации на локацию запрос в базу данных и делать сверку типа а есть ли проход в ту или иную сторону. Это в любом случае придётся делать. Можно кэш конечно реализовать, но нагрузить базу будет очень сложно, если речь не про огромный онлайн. Да и тот можно выдержать.
Цитата JanCarlo ( ) Но потом представил, а что если у нас карта где будет 10к локаций, это при каждом переходе каждого игрок на соседнюю локацию - будет подгружаться этот массив на 10к строк и циклом искать тот ID локации на котором стоит игрок, что бы прочесть в какие стороны он может двигаться и куда эти стороны его приведут - (на какую именно соседнюю локацию переместиться игрок) то это будет дикая нагрузка на сервер скорее всего, скажем 100 игроков одновременно передвигаются и каждый раз целую базу такую считывать... но это если карта будет храниться чисто в массиве что неразумно. По этому надо подумать как реализовать это на базе и запрос с проверками к ней.
Если хранить не в файле/массиве, а простой базой данных с индексами, то никаких проблем не возникнет.
|
|
| |
JanCarlo | Дата: Воскресенье, 14 Ноября 2021, 22:53 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| JackNazaryan, Спасибо за ответ!
Да, передвижение уже реализовано, соответственно сама карта тоже. В целом всё довольно элементарно. 3Д пространство, координаты x/y/z - 3 столбца в таблице rooms. Движение на север это Y+1, движение на запад это X-1.
Реализованы ловушки на локациях, сделал банк - разовое открытие счета, перевод/снятие/пополнение с комиссией. Пока так, по мелочи. Начал писать в июне, закончил в июле что бы не наколбасить кривого кода. Доучился по пхп, и сейчас готов дальше проект пилить. В данный момент у меня чисто функциональный стиль - вот думаю переходить ли на ооп.
В перспективе будет чат, массовые бои, пвп, пве, захваты территорий, квесты, кланы, крафт предметов, маические всякие фичи, помощники типа собак, транспорт и многое многое другое. Вот советуют веб сокеты изучить - для меня это пока дикий зверь как говориться да и пока не горит.
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
|
|
| |
JackNazaryan | Дата: Понедельник, 15 Ноября 2021, 21:39 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Цитата JanCarlo ( ) вот думаю переходить ли на ооп. Зависит от того, как далеко есть желание продвигаться в PHP-разработке. Технически можно и без него, но без ООП нынче пишут в основном только любители. В профессиональной же среде так или иначе все вынуждены осваивать ООП и различные стандарты. Иначе код становится (по нынешним меркам) нечитабельным.
Так что если хотите учиться - конечно, стоит постепенно осваивать. Но не спеша, конечно, лучше вдумчиво.
Цитата JanCarlo ( ) чат, массовые бои, пвп, пве
Цитата JanCarlo ( ) Вот советуют веб сокеты изучить - для меня это пока дикий зверь как говориться да и пока не горит.
Сразу предупрежу, что на чистом PHP их делать не очень удачная мысль. Вебсокеты, конечно, реализуемы и так, но не выдержат большого онлайна, например, и будут расходовать ресурсы сервера. Начать можно с этого, но с заделом на будущее.
|
|
| |
JanCarlo | Дата: Среда, 16 Марта 2022, 13:13 | Сообщение # 13 |
был не раз
Сейчас нет на сайте
| Господа, а кто нибудь знает конструкторы/генераторы карт на php (что бы встроить в админку)? Ну или на любом другом софте с экспортом к примеру в json? В целом то система передвижений готова, банк готов, трназакции и тд
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
|
|
| |
|