Итак, первая порция моих патчей. Прошу прощение за скупость описаний, банально не успеваю, потому что сегодня уезжаю на неделю в Харьков.
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
Пробуйте пока, буду через неделю.
Неактивен
В TADS "патчи" лучше оформлять с помощью функций replace
и modify
. И Гранду будет проще вносить эти изменения в релиз...
И еще. IFWIKI не является хранилищем файлов. Если файл не относится к одной из статей, то он будет удален безжалостно и нафик. Если некуда выложить файл, то существует масса специализированных сервисов.
Отредактировано fireton (13.02.2008 12:21)
Неактивен
Ну, пусть полежит пока. Может, автор одумается и выложит его таки в другое место.
Андрей, когда нам ждать релиз библиотеки? Что касается меня, то я его действительно жду.
Неактивен
Локализовал ошибку с атакой. Код:
#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)
Неактивен
Вот еще пожелание. Если у комнаты не определить свойство out
, то при попытке выйти
игра выдает стандартное "Этим путем не пройти". Дело в том, что в определении класса room есть такое:
out = { return self.noexit; }
Мне кажется, что можно несколько усложнить обработку данной функции. Возможно ли сделать обработку по умолчанию таким образом: если в комнате один выход, то out
выдаст этот один выход. Если выходов определено несколько, то выдаваемая строка будет чем-то вроде "Здесь несколько выходов, уточните, куда вы хотите выйти."
Как мне кажется этого можно добиться, если вместо { return self.noexit; }
присвоить всем свойствам-направлениям nil
(чтобы можно было проверять), а выдачу "Этим путем не пройти" реализовать в процедуре, обрабатывающей выход (сделать там проверку на nil
). Тогда для out
можно сделать свою обработку.
Что думаете?
Неактивен
Ты стоишь на небольшой площадке, огороженной сплошной бетонной стеной. В центре площадки зияет вход в бункер. >выйти Ты протиснулся в лаз бункера...
И вообще, автор должен быть внимательным и трудолюбивым. Добавить одно направление можно быстро и не задумываясь.
Неактивен
И вообще, автор должен быть внимательным и трудолюбивым. Добавить одно направление можно быстро и не задумываясь.
C твоим таглайном не согласуется.
Но вообще да. Тебе виднее... Наткнулся на то, что в "Кащее" выйти приводит к "Этим путем не пройти". С другой стороны, офигеешь определять out в каждой комнате. Везде надо что-то свое. А придумать универсальную заглушку как-то не получается...
Неактивен
Gremour написал:
>ударить мутанта палкой
Я не вижу здесь объект "мутанта палкой"
Причина: свойство adjective объекта slime. Если его закомментировать, команда работает как надо.
Да, я в курсе. В моем случае
>взять с трупа кирку
Я не вижу здесь объект "трупа кирку".
Проблема в том, что "трупа" - прилагательное и получается неподходящее сочетание прилагательного и существительного. Это можно проверять. Либо вообще запретить использовать прилагательное с флагом "#r" перед существительным. Тем более не своим.
Неактивен
Это ошибка в алгоритме парсинга или несостыковка твого метода обхода падежей? Почему парсер не выбирает существительное в первую очередь (или во вторую)? Зачем хватается за прилагательное как единственный вариант? Может, есть негласное ограничение -- совпадающих с существительными в игре прилагательных не должно быть?
Удаление прилагательного с флагом "#r" из "слизи мутанта" не помогает.
Ошибка неприятная, т. к. в игре большого размера с задействованием актёров-гномов, например, есть много вещей тех же гномов, к которым игрок захочет обратиться (вполне справедливо) использую полную лексему. Это какой-то КОШМАР!
Отредактировано Gremour (13.02.2008 20:14)
Неактивен
http://rtads.org/libr25beta.rar - обновил.
Теперь не понимает только "ударить палкой слизь мутанта".
"ударить мутанта палкой" и "ударить палкой мутанта" - без проблем
Неактивен
Большое спасибо
Неактивен