Очень круто! Но есть шероховатости. Нажатие клавиши ALT вызывает появление/исчезновение строки меню в браузере, выглядит не комильфо. А если нажать клавишу SHIFT пять раз, то в винде включается режим залипания клавиш.
Гитхаб и новости из мира теперь спамят в #dreamland, новости также спамят в #mud.
По мотивам воздвигла пост о том как использовать вебхуки.
Готово :)
Отлично, а можно попросить добавить для канала #muds webhook, как описано тут: support.discordapp.com/hc/en-us/articles/228383668?
Я тогда настрою, чтобы туда постились новости из мира.
И еще просьба, если планируется поддерживать каналы для индивидульных мадов, создать #dreamland и для него тоже webhook.
Я подключу его к нашим github репозиториям и туда будут автоматом попадать обновления по сайту и клиенту. Спамить это в общий канал как-то не хочется.
  • avatar vaysa
  • 0
скажите Алисе от яндекса «Запусти навык квест про космос»
Это на планшете так выглядит? У меня на телефоне немного по другому.
Прямо вылитый BlowTorch, потом в качестве мобильного приложения можете выпустить клиент.
Угу, толковое замечание, добавила ссылки в каждый пост.
Внизу каждого поста выставлены теги, нажимая на которые появляются все топики по теме. В них есть все необходимые адреса.

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

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

Годно. Но, имхо, лучше по дефолту, чтобы отображались по русски.
Возможно выбор не верный,
Если вы делаете проект для себя, just for fun, то разницы никакой нет.
а я как наивный албанец оставался с поломанным проектом

Пишите или поддерживайте библиотеки сами, если там после обновления что-то ломается, то это обычно легко починить. Самому часто приходилось так делать.
  • avatar vaysa
  • 0
Привет! Спасибо за интерес к проекту!
Возможно выбор не верный, но это всего лишь прототип, который создается что бы наглядно продемонстрировать proof of concept

Вот некоторые мои _личные_ моменты, из-за которых выбор произошел в сторону баш, если кому интересно:
на каком бы языке не приходилось вести разработку, всегда было лень изобретать велосипеды и естественно находил и подключал готовые библиотеки, где все было продумано за меня (как мне на тот момент казалось), но в случае долгоиграющего проекта, спустя годы, разрабы библиотек, которые я использовал, забивали на них. С двумя вариантами уже не раз сталкивался — либо просто забросили и с выходом новых версий языка их либа утрачивала совместимость, либо в их либах находили кучи критических уязвимостей, тогда они тупо бросали поддержку и начинали новую версию почти с нуля без обратной совместимости, а я как наивный албанец оставался с поломанным проектом и чувством что меня кинули =) и приходилось вникать в чужой код и пачить его, что не всегда получалось сделать грамотно и на что уходила куча времени.
К примеру по этой причине в основном умер мой MUD мир писаный на ruby. Ruby выбрал потому что тогда он был простой платформой для сверхскоростной разработки с кучей gem'ов на все случаи жизни, язык был модным (как сейчас nodejs) и позволял любую прихоть реализовать в короткие сроки. С такой же ситуацией столкнулся в другом проекте на PHP и либами из PEAR… Еще недавно увидел похожую ситуацию с nodejs, где нужные библиотеки не имели совместимости с новыми версиями языка.
Сейчас это кажется ерундой, типа — выбирай нужную версию в докере и не парься, но что-то мне подсказывает, что через 10 лет эту версию днем с огнем не сыщешь особенно в бинарном виде, совместимым с современной ОС.

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

Еще баш стал более кроссплатформенным, когда в win10 появилась linux прослойка.
Сейчас, для того что бы запустить прототип, не надо ничего компилить или устанавливать библиотеки — почти все используемые команды есть в системе по умолчанию и не нужно быть программистом — любой админ поймет, что в коде творится.

Конечно скорее всего, если проект будет развиваться и ему посчастливится работать под высокой нагрузкой, то для оптимизации узких мест в производительности придется дописывать утилиты на си
К примеру, вам нужно добавить автоматическое склонение имен. В nodejs я просто добавил библиотеку и написал пару строк кода. У вас же это все займет несколько больше времени.
Это очень удачный выбор задачи — склонение имен — которая не имеет непосредственного отношения к специфики мадов и поэтому есть шанс, что ее решили где-то в библиотеках. Большинство задач всё же не такие.
Что касается склонений, ну я взяла перловую либу, которая делает склонения, и за обеденный перерыв переписала ее на феню.
Тогда может быть какой-нибудь режим сделать ?
Разумеется это настраивается через 'режим имяпредмета'. Равно как и язык отображения названий команд, умений и имен.
Но помимо этого, еще есть не до конца переведенные сообщения и зоны, над этим работаем.

Так если вся игровая логика написана на скриптовом языке, API не нужно расширять.
Кто сказал что вся игровая логика на скриптовом языке? Там ниже Филдс привел статистику, сколько строк кода на С++ и сколько на Фене.
Если в Фене написать что-то типа: ch.profession.name — должен быть соответствующий кусок кода на С++, который обернет нативный класс Character и предоставит read/write доступ к его полю profession, а также обернет сам нативный класс Profession и даст доступ к полю name. Вот именно это и имеется в виду когда говорят «расширение API»: предоставить из Фени доступ к нативным классам, их полям и методам.
только на то чтоб сохранить все мобы и предметы с помощью какого-нибудь pickle уйдет значительно больше времени

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

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

В остальных мадах такая схема работает. Ксерокопирование шмоток в былинах фиксится с помощью уникальных id.
Если не нравится хранить состояние мада в файле, можно хранить в базе данных считывая/записывая отдельно каждый объект по мере необходимости (как в браузерных играх).
«а почему нет совместимости с моим мад-клиентом пятнадцатилетней давности?»

Вот это критично среди прочего для незрячих игроков, они используют BlindTin или похожие клиенты.
Я говорю про сохранение состояния всей виртуальной машины целиком, включая выполняемый код, глобальные + локальные переменные, потоки, стек, и тд.

Сдаюсь. Только до сих пор не понял, зачем надо сохранять полное состояние вм. Как я понимаю, сейвится состояние комнат, объектов, игроков. Файты тоже сейвятся ?
Состояние игрового мира: объекты, мобы, комнаты.
Это все нативные объекты и они и так уже сохранялись между ребутами еще до Фени.
Как на счет состояния потоков, глобальных/локальных переменных и тд?
Даже если отбросить многопотоковость (без которой, кстати, очень сложно было бы построить нормальный диалог с персонажем) и полное состояние виртуальной машины, только на то чтоб сохранить все мобы и предметы с помощью какого-нибудь pickle уйдет значительно больше времени чем четверть секунды. А делать это итеративно не получится если нет возможности получить список измененных с прошлой итерации объектов. Когда-то давным-давно предметы записывались «тупо» на диск. В итоге можно было ксерокопировать шмотки тупо подняв их с пола, тупо набрав save и тупо крашнув мир одним из тысячи доступных на тот момент способов. Ну, или сделать все то же самое прямо перед плановым ребутом. В общем, тупо пробовали до нас. Тупо не работает.
А когда это происходит у вас?
Я в ветке про Дримленд уже описывал в общих чертах.
Просто размазывать сохранение на большое количество игровых тиков.
Без специальной поддержки языка это не так уж и просто по описанной выше причине. Даже если писать в базу с транзакциями, надо знать когда можно завершить транзакцию так, чтоб, например, при передаче денег от одного персонажа другому деньги не исчезли бесследно и не появились из ниоткуда в случае внезапного краща, или отключения света.
Самый простой вариант — использование pickle или shelve.
Варианты по сложнее и по интереснее, например, ZODB или Prevayler (для питона он тоже есть).
Вроде, это все библиотеки для сохранения отдельных объектов языка на диск/в базу данных.
Я говорю про сохранение состояния всей виртуальной машины целиком, включая выполняемый код, глобальные + локальные переменные, потоки, стек, и тд. Теоретически интерпретатор можно остановить в любой момент выдернув сервер из розетки и продолжить с того же места 10 лет спустя. При этом с точки зрения выполняемых скриптов ничего не произойдет. Мне известно только об одном очень специфическом клоне jvm который позволяет делать нечто подобное, но дальше тезисов этот проект вроде так и не сдвинулся — слишком узкая область применения.
вы переписали на феню большинство логики мада,

Пока далеко не большинство. В Дриме где-то 250к строк кода на с++ и всего 25к строк кода на Фене.
например, создание персонажа
В Дриме с момента выбора кодировке персонаж сразу в мире. У него стандартное имя Stranger и ему недоступны почти все команды. В остальном это полноценный персонаж.
Вся процедура создания персонажа сводится к общению с мобом. Феня для таких задач и создавалась.
К примеру, вам нужно добавить автоматическое склонение имен
Руффина прикрутила автоматическое склонение имен при создании персонажа где-то месяц назад. Может рассказать сколько это заняло у нее времени.
Нативные классы и вызовы у вас пишутся на Си и подгружается в виде модулей?
Да. Не только нативные классы — почти весь код перегружается налету. Начиная с работы с сокетами и заканчивая игровой логикой. Так было в Дриме задолго до Фени. Нельзя поменять без ребута только несколько системных библиотек.