Понедельник, 23 Декабря 2024, 04:43

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Ищу движок под 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 к локаций? :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 картах, но такое вроде допускается:

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

Запустил -

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


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


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

В общем, когда-то давным давно работал с вап-игрушками и реализовывал нечто подобное тому, что ты делаешь.

Отвязал от работы с базой и внутренними функциями движка, поэтому код теперь не особо читаем. Да и можно сделать скидку на возраст кода, даже у меня от него глаза болеть начали. Ладно, хорош уже оправдываться.
Ссылка на гитхаб репу

Тебя интересует 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
  • Страница 1 из 1
  • 1
Поиск:

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