Итак, первая порция моих патчей. Прошу прощение за скупость описаний, банально не успеваю, потому что сегодня уезжаю на неделю в Харьков.
sayPrefixCount
было:
Ты видишь два спички.
стало:
Ты видишь две спички.
было:
>спросить стол о погоде
Ты думаешь, что стол ничего не знает об этом!
стало:
>спросить стол о погоде
Стол безмолвен.
было:
>сесть на пол
Хорошо, ты теперь сидишь на полу.
>восток
Ты никуда не пойдёшь пока не слезешь с пола.
стало:
>сесть на пол
Хорошо, ты теперь сидишь на полу.
>восток
Ты никуда не пойдёшь пока не встанешь с пола.
было:
>набрать
Что ты хочешь печатать?
>набрать воды в банку
Я не понимаю это предложение.
стало:
>набрать
Что ты хочешь печатать?
>набрать воды в банку
Вы набрали воды в банку.
[Метод ‘FillIn’]
было:
>сесть
(стул)
Хорошо, ты теперь сидишь на стуле.
стало:
>сесть
(на стул)
Хорошо, ты теперь сидишь на стуле.
Несколько мелких исправлений к глаголам: синонимы, указание умолчательных предлогов и падежей. Например, «выглянуть в» к lookThru.
Ну, и самое интересное - исправления к parseAskobjActor:
было:
>спросить Петю
Об чем Вы хотите спросить этого персонажа?
>положить спичку
Во что Вы хотите положить это?
>ударить Петю
С помощью чего Вы хотите напасть на это?
стало:
>спросить Петю
О чем ты хочешь спросить его?
>положить спичку
Во что ты хочешь положить её?
>ударить Петю
С помощью чего ты хочешь напасть на него?
То есть учитывается текущее лицо и подбирается правильное местоимение.
Что я еще хочу исправить:
сейчас:
>положить карандаш
Во что ты хочешь положить его?
>на стол
Ты не можешь положить что-либо в стол.
хочется:
>положить карандаш
Куда ты хочешь положить его?
>на стол
Готово.
>положить карандаш
Куда ты хочешь положить его?
>в стол
Ты не можешь положить что-либо в стол.
сейчас:
>набрать
Что ты хочешь печатать?
>налить
(воду)
(в банку)
Вы набрали воды в банку.
хочется:
>набрать
(воду)
(в банку)
Вы набрали воды в банку.
[Если присутствует неопределенность, не просить сразу уточнить объект, а попробовать устранить неопределенность по второстепенным предлогам тоже. Т.е. если «набрать» в смысле печатать (ioAction(onPrep) = 'TypeOn') в комнате ничего нельзя, но можно «набрать» в смысле налить (ioAction(inPrep) = 'FillIn'), то использовать «налить».]
Долго думал, каким образом эти исправления выложить, ведь они во многих местах. Поэтому выкладываю diff-файлы к advr.t (от 07.02.08 17:19) и errorru.t (от 06.02.08 02:25). Применяются они утилиткой patch.
patch advr.t advr.diff
Если юникса под рукой нет, то win-версию проги можно взять здесь http://unxutils.sourceforge.net/
КАЧАТЬ ПАТЧИ ТУТ http://ifwiki.ru/files/25PATCH.rar
Пробуйте пока, буду через неделю.
Неактивен
Локализовал ошибку с атакой. Код:
#include <advr.t>
#include <stdr.t>
#include <errorru.t>
startroom: room
sdesc = "Комната"
ldesc = "Просто комната"
;
stick: item
location = startroom
sdesc = "палка"
rdesc = "палки"
ddesc = "палке"
vdesc = "палку"
tdesc = "палкой"
pdesc = "палке"
noun = 'палка' 'палки' 'палке' 'палку' 'палкой' 'палкою' 'палке#d' 'палкой#t' 'палкою#t'
ldesc = "Палка"
isHer = true
;
mutant: item
location = startroom
sdesc = "мутант"
rdesc = "мутанта"
ddesc = "мутанту"
vdesc = "мутанта"
tdesc = "мутантом"
pdesc = "мутанте"
noun = 'мутант' 'мутанта' 'мутанту' 'мутантом' 'мутанте' 'мутанту#d' 'мутантом#t'
ldesc = "Мутант"
isHim = true
;
slime: item
location = startroom
sdesc = "слизь мутанта"
rdesc = "слизи мутанта"
ddesc = "слизи мутанта"
vdesc = "слизь мутанта"
tdesc = "слизью мутанта"
pdesc = "слизи мутанта"
adjective = 'мутанта' 'мутанта#r'
noun = 'слизь' 'слизи' 'слизью' 'слизи#d' 'слизью#t'
ldesc = "Слизь мутанта"
isHer = true
;>ударить мутанта палкой
Я не вижу здесь объект "мутанта палкой"
Причина: свойство adjective объекта slime. Если его закомментировать, команда работает как надо.
Это лечится вообще? Слизь мутанта жизненно важна, и ограничивать лексемы только словом "слизь" очень нехорошо.
P.S. К тому же, местонахождение слизи не влияет на парсинг фразы. Достаточно просто декларировать объект с такой лексемой.
Отредактировано Gremour (13.02.2008 15:09)
Неактивен
Это ошибка в алгоритме парсинга или несостыковка твого метода обхода падежей? Почему парсер не выбирает существительное в первую очередь (или во вторую)? Зачем хватается за прилагательное как единственный вариант? Может, есть негласное ограничение -- совпадающих с существительными в игре прилагательных не должно быть?
Удаление прилагательного с флагом "#r" из "слизи мутанта" не помогает.
Ошибка неприятная, т. к. в игре большого размера с задействованием актёров-гномов, например, есть много вещей тех же гномов, к которым игрок захочет обратиться (вполне справедливо) использую полную лексему. Это какой-то КОШМАР!
Отредактировано Gremour (13.02.2008 20:14)
Неактивен
Спасибо.
Неактивен