Я совсем расстроен. Создаю объекты: "большой сундук" и "маленький сундук". Оба fixeditem, openable
. Далее имею вот такое:>открыть большой сундук
Что ты хочешь открыть?
>большой сундук
Я не знаю как открыть большой сундук.
>открыть
Что ты хочешь открыть?
>сундук
Который "сундук" Вы имеете в виду: большой сундук или маленький сундук?
>большой
Открыт.
Офигеть. Если так пойдет дальше, то я не успею исправить все до дедлайна КРИЛ.
Андрей, помоги, пожалуйста!
Отредактировано fireton (10.01.2008 01:55)
Неактивен
Вот еще прикол:>открыть большой сундук
Что ты хочешь открыть?
>дверь
Я не знаю как открыть что-либо с помощью большого сундука.
Похоже, парсер принимает "открыть" за UnlockWith
...
Если это может помочь, то в локации еще присутствует дверь...
UPD. Я проверил. Даже если в локации ничего, кроме "большого сундука" не присутствует, то ошибка остается... Это серьезный прокол в библиотеках. Его надо исправлять как можно скорее... Я уже не в состоянии. Блин, надеялся сегодня игру на бета-тест отправить...
Отредактировано fireton (10.01.2008 02:30)
Неактивен
Я уже натыкался на эту хрень, когда тестил игру Корвина. Мерзкий глюк.
А ещё нужно внимательно следить за порядком множественного наследования. Объекты, упомянутые раньше считаются приоритетнее в случае противоречащих свойств.
Неактивен
fireton написал:
Похоже, парсер принимает "открыть" за
UnlockWith
...
Может, так как:Код:
openVerb: deepverb verb = 'открыть' 'открой' 'отворить' 'отвори' 'раскрыть' 'раскрой' 'распахнуть' 'распахни' 'отк' 'откр' sdesc = "открыть" doAction = 'Open' ioAction(withPrep)='UnlockWith' type=1 ;Если это может помочь, то в локации еще присутствует дверь...
UPD. Я проверил. Даже если в локации ничего, кроме "большого сундука" не присутствует, то ошибка остается... Это серьезный прокол в библиотеках. Его надо исправлять как можно скорее... Я уже не в состоянии. Блин, надеялся сегодня игру на бета-тест отправить...
Пожалуйста, пришли, код.
Неактивен
Пожалуйста, пришли, код.
startroom: room sdesc = "<b>Маленькая комната</b>" ldesc = "Это тестовая комната для отладки открываемых объектов. Посреди комнаты стоит большой сундук. Попробуйте его открыть." ; sunduk : fixeditem, openable location = startroom sdesc = "большой сундук" rdesc = "большого сундука" ddesc = "большому сундуку" vdesc = "большой сундук" tdesc = "большим сундуком" pdesc = "большом сундуке" adjective = 'большой' 'большой#t' 'большого' 'большому' 'большому#d' 'большим' 'большим#t' 'большом' noun = 'сундук' 'сундука' 'сундуку' 'сундуком' 'сундуке' 'сундуку#d' 'сундуком#t' ldesc = "Это большой сундук, который никак не хочет открываться, зараза!" isHim = true isopen = nil ;
Транскрипт:Маленькая комната
Это тестовая комната для отладки открываемых объектов. Посреди комнаты стоит большой сундук. Попробуйте его открыть.
>открыть большой сундук
Что Вы хотите открыть?
>большой сундук
Я не знаю как открыть большой сундук.
>открыть
(большой сундук)
Открыт.
>закрыть сундук
Закрыт.
>открыть сундук
Открыт.
>закрыть большой сундук
Что Вы хотите закрыть?
>большой сундук
Я не знаю как закрыть большой сундук.
>закрыть
(большой сундук)
Закрыт.
Неактивен
Если в комнате больше одного openable
объекта с совпадающим noun
(два сундука, например), то начинается кошмар. С дверями, что показательно, все нормально. Если сделать несколько дверей в комнате, то парсер нормально обрабатывает предложения вида "открыть небольшую дверь" и уточняющие запросы "Какую дверь вы хотите открыть?" тоже нормально работают...
Неактивен
fireton написал:
Если в комнате больше одного
openable
объекта с совпадающимnoun
(два сундука, например), то начинается кошмар. С дверями, что показательно, все нормально. Если сделать несколько дверей в комнате, то парсер нормально обрабатывает предложения вида "открыть небольшую дверь" и уточняющие запросы "Какую дверь вы хотите открыть?" тоже нормально работают...
Баг генератора падежей: добавляет лишнюю лексему прилагательного 'большой#t'. В результате "открыть большой сундук" превращается в "открыть с помощью большой сундук".
Пока могу предложить только внимательно следить за выдачей генератора для наименований с прилагательными. Я написал новый генератор, но не доделал выдачу конечного кода. К сожалению, разрабатывал в вижуал Си, а он у меня давно не установлен и руки не доходят поставить.
Неактивен
Спасибо, Андрей! Я просмотрю свои объекты...
Как я понял, галочку в "2#t" устанавливать не надо? Беда в том, что я очень плохо еще разобрался в этих магических суффиксах.
Отредактировано fireton (10.01.2008 17:56)
Неактивен
Ситуация такая. В тестовой игре, что я здесь выкладывал, после удаления #t
все замечательно. В моей игре, что я пишу на КРИЛ, я удалил с сундука вообще все #t
(и с существительного тоже). И все равно:>открыть большой сундук
Что ты хочешь открыть?
>сундук
Я не знаю как открыть большой сундук.
>открыть сундук
Открыт.
печально. я в непонятках...
Отредактировано fireton (10.01.2008 18:54)
Неактивен
На свете есть только три "магических" суффикса:
Первый "#t"- указатель творительного падежа, выявляющий скрытую связку "с помощью".
Второй "#d" - дательного, дарующий глупому англоязычному ТАДСу предлог "to"
Третий, самый образный и красочный - "#r", который встречается лишь в прилагательных, следующих за существительным. Без него не потекут "реки времени" и не прорастет "древо жизни".
В твоем случае нужно лишь удалить 'большой#t' - потому, что это не творительный падеж. Остальные маркеры оставь, они могут пригодиться игрокам.
Неактивен
Удалил все суффиксы. Оставил единственный объект в локации (тот самый злосчастный сундук). Выбросил все объекты из инвентори (на всякий случай). И все равно не работает! Ну что за хреновина такая?!
Неактивен
Нашел проблему. У меня в игре есть "большой ключ". Даже, если этот ключ не присутствует в локации, начинается фигня с "открыть большой сундук". У ключа есть "большой#t", но, как я понимаю, его удалять нельзя - ведь ключом мы отпираем дверь... Есть ли способ это как-то обойти? Я, конечно, могу сделать ключ другим (бронзовым, например), но ведь это не выход...
Неактивен
fireton написал:
Нашел проблему. У меня в игре есть "большой ключ". Даже, если этот ключ не присутствует в локации, начинается фигня с "открыть большой сундук". У ключа есть "большой#t", но, как я понимаю, его удалять нельзя - ведь ключом мы отпираем дверь... Есть ли способ это как-то обойти? Я, конечно, могу сделать ключ другим (бронзовым, например), но ведь это не выход...
А зачем нужно значение 'большой#t'? Если это творительный падеж, то нужно 'большим#t'.
Неактивен
А зачем нужно значение 'большой#t'? Если это творительный падеж, то нужно 'большим#t'.
Не важно. Почему объекты, которых нет даже в комнате, влияют на парсинг?
У меня еще есть "большая кухонная плита" и там "большой#t" уже совершенно к месту...
В общем, я считаю, это бага именно в openable
и реализации глагола openVerb
. Это надо как-то разрулить, однозначно...
Просто в русском языке "открыть дверь ключом" и "открыть дверь", хоть и подразумевают разные действия, но совершенно правомерны. Как это разрулить, я не слишком хорошо понимаю...
Неактивен
openable и openVerb совершенно не при чем. Просто учет падежей происходит без учета доступности объекта. Причем, как выходит, даже если метка есть у другого предмета с такой лексемой! Есть над чем подумать. Также пугает случай неизменяемых слов.
fireton - Метка #t должна быть только у лексем с творительным падежом, остальные удали и будет тебе счастье.
Неактивен
GrAndrey написал:
openable и openVerb совершенно не при чем. Просто учет падежей происходит без учета доступности объекта. Причем, как выходит, даже если метка есть у другого предмета с такой лексемой! Есть над чем подумать. Также пугает случай неизменяемых слов.
А нельзя таки учитывать доступность объекта?
fireton - Метка #t должна быть только у лексем с творительным падежом, остальные удали и будет тебе счастье.
Ну вот. Есть "большая плетка" и "большой сундук" (например). У плетки есть форма творительного падежа "большой#t". И чего? Как обойти данный казус?
Неактивен
fireton - Метка #t должна быть только у лексем с творительным падежом, остальные удали и будет тебе счастье.
Не поверишь, удалил все большой#t
по всему квесту (ну, по-хорошему, можно без них обойтись). "Открыть большой сундук" все так же не работает. Похоже слово "большой" вообще не должно быть в adjective
, чтобы "мне было счастье"...
Неактивен