Контекстное меню для предметов в клиенте mudjs

Очередной «концептуальный прорыв» в вебклиенте. У всех предметов по нажатию на них появляется выпадающее меню, в котором перечисленым команды, которые можно проделать с этим предметом. По нажатию на пункт меню команда попытается выполниться (попытается — т.к. с тех пор предмет мог уже изменить свое местоположение или исчезнуть).

Меню зависит от типа и положения предмета, например:
* для предмета внутри контейнера виден будет только пункт «взять»
* для большиства предметов на полу или в инвентаре: «бросить» или «взять», «смотреть», «использовать»
* для мебели на полу будет видно «сесть, лечь, отдыхать» в зависимости от типа мебели
* для фонтана меню будет содержать «пить, наполнить», для бочонков — «пить, вылить»
* для вещей в инвентаре также видет пункт «легенды», если это умение доступно
* ворам виден пункт меню «украсть» на предмет в чужом инвентаре
* и так далее

С технической точки зрения это реализовано путем добавления специальных псевдо-тегов разметки вокруг каждого предмета. Если вывод происходит не в вебсокет, а в обычное соединение, эти теги не посылаются. Вебклиент обрабатывает эти теги и превращает их в стандартное dropdown-menu из Bootstrap.

Пример для предмета в инвентаре:
<m c=«бросить $, надеть $, смотреть $, использовать $, легенды $» id=«1773732900»>хитрость лаеркаи</m>
Для компактности символ $ будет заменен на стороне клиента на id предмета.
ID используется в качестве аргумента для однозначности, т.к. иначе для предметов с одинаковым названием пришлось бы вычислять это 3.бочонок или 2.бочонок, при том что с тех пор позиция в инвентаре могла поменяться, и команда в итоге выполнится с не тем предметом.

Аналогично теперь идет работа и с цветами, т.е. вебклиент больше не парсит ANSI-последовательности, а работает с псевдотегами <c c='fgbg'>ярко-зеленое сообщение</c>, превращая их в <span class='fgbg'>.

Пачка скриншотов под катом:











Upd: клиент в действии, исходники клиента

4 комментария

avatar
Очень даже неплохо, только бы побольше действий для такого контекстного меню. Желательно, чтобы вообще все, кроме разговоров, можно было делать мышкой.
avatar
Классно :D Единственное — мейби имеет смысл в каждый пост по клиенту внизу давать на него ссылки, чтобы люди, которые недавно о нем узнали, могли понять что это… что-то типа:
dreamland.rocks/ — МАД, где это работает
github.com/filths/mudjs — гит с исходниками
а то пришлось гуглить, а в гугле не находится сразу, только через мад-коннекттор
avatar
Внизу каждого поста выставлены теги, нажимая на которые появляются все топики по теме. В них есть все необходимые адреса.

Также все известные нам русскоязычные мады представлены на специальной страничке, опять же с тегами http://muder.ru/page/muds/.

Искать так будет проще, чем через Гугл.
avatar
Угу, толковое замечание, добавила ссылки в каждый пост.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.