-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Опознавать объект по местоположению #19
Comments
Было бы хорошо, если бы в подобных issue прикладывался готовый маленький пример. |
Пишу, чтобы не забыть. Так что в текущей архитектуре исправление, увы, невозможно. Идея была сделать максимально "дубовый", а не интеллектуальный парсер. Закрывать не буду, может быть когда-нибудь этот слой будет переписан. |
Перенести уточнения уже в слой обработки команд? Типа анализатор опознал два яблока и передал дальше обрабатывать оба объекта. А обработчик команд, владея сценой, может решить, что из них выкинуть из списка, исходя из ситуации... |
Я тут смешал два вида уточнений.
1 работает до 2. Например, если ты закомментируешь строки:
то всё заработает. КРОМЕ того, что перестанут работать уточнения (1) вообще. :) То есть слой ввода (до формирования события), ничего не понимает о взаимоотношениях. Но обязан выдать уже готовую конструкцию дальше. В теории можно пытаться передвинуть детектирование уточнений дальше, но это и означает переписывание. Так что на данный момент я не вижу способа. Если кто-то его найдёт, конечно, посмотрю. |
То есть архитектура предполагает слои:
Так что данная фича в архитектуру не вяжется. Проблема ещё и в том, что я как разрабочик вижу в этом скорее плюс, чем минус. Поэтому сильный энтузиазм проявлять пока не буду. Но переписывание ядра не исключаю, мне не нравится match, так что когда-нибудь может что то и изменится. |
Ну вот про «выберется самый вероятный», может, и можно подкрутить? |
Например, предусмотреть какие-то фильтры у глаголов. Ранжирующую функцию, которая выстроит объекты в списке по приоритету. А если приоритет одинаковый, тогда и выдавать подсказку про то, что тут два одинаковых объекта. Например, в случае Take приоритет будет у того объекта, который не находится в инвентаре. А в случае Drop — наоборот. |
Я ж выше написал. Это УЖЕ есть. Если ты посмотришь реализацию глагола Take с 2мя вариантами, то увидишь, что на контейнере стоит уточнение и оно работает. Если ты удалишь те строки о которых я сказал, то будет работать как тебе нужно. Но только при этом не сработают утчнения. Выше я описал про фазы match и подготовку событий. Почитай внимательней, сверься с кодом. |
Возможное решение: убрать обработку уточнений из :match и перенести их в конец function mp:input(str). Чтобы не забыть. |
Просто пожелание на подумать.
Например, в комнате есть два яблока. Одно красное — в инвентаре. И одно зелёное — на столе.
Если написать
> взять яблоко со стола
то ответ будет всё равно
Здесь есть красное яблоко и зелёное яблоко.
Мало того, что «взять» можно только то, что у тебя нет в инвентаре. Так ещё ж и игрок явно написал, что нужное ему яблоко — на столе.
В «Разломе» у меня были два баллона, пустой и полный. И игроки регулярно напарывались на то, что когда пишешь
> снять баллон со скафандра
то игра их не понимает.
Я понимаю, что МП оперирует понятием scope, но может как-то сужать этот scope, когда в строке уже есть какие-то уточнения помимо полного названия предмета?
The text was updated successfully, but these errors were encountered: