Хм, столкнулся с проблемой. У протагониста уже есть предмет, пусть "пузырек с ядом". Исследуя отдаленные районы квеста он находит второй точно такой же "пузырек с ядом". Предметы по идее абсолютно идентичны (массовое производство приводит к этому), более того это контейнеры, и их содержимое отличается (в одном из пузырьков на самом деле простая вода), однако об этом нельзя узнать, если не попробовать (а умный протагонист не станет пить из пузырька с ядом, чтоб не почувствовать легкого недомогания).
Собственно есть ли выход из ситуации:
Вы имеете в виду "пузырек с ядом" или "пузырек с ядом"?
Кроме как поменять сценарий?
Самое страшное - таких предметов на самом деле на два, а четыре
Неактивен
Кстати, сделал пару "пузырьков". При вводе "пузырек с ядом" пишет: Какой "пузырек of ядом" вы имеете ввиду?
Проблема, видимо, в том что в процедуру разбора несостыковок передается уже преобразованная строка с предлогом 'of' нужная для английского разборщика. Как бы это обойти. А вызывается она, как я понял, уже напрямую из интерпертатора?
parseDisambig: function(str, lst, ...) //Вместо 100-104 кодов ошибок { local i, tot, cnt; "Котор"; if (lst[1].isactor) ok(lst[1],'ых','ого','ое','ую'); else if (lst[1].isThem) "ые"; else if (lst[1].gender=1) "ый"; else if (lst[1].gender=2) "ую"; else "ое"; " \"<< str >>\" Вы имеете в виду: "; for (i := 1, cnt := length(lst) ; i <= cnt ; ++i) { if (dToS(lst[i],&vdesc)!=str) lst[i].vdesc; else lst[i].disamvdesc; //кстати, в чем смысл этой строки? Может сразу выводить только disamvdesc? if (i < cnt - 1) ", "; if (i + 1 = cnt) " или "; } "?"; }
PS Что за многоточия в аргументах функции? Это что-то вроде необязательных параметров или как?
Отредактировано - VampirE - (05.12.2007 19:46)
Неактивен
В общем, вот, что можно сделать со свойством disamvdesc:
puzyryek1 : item location = startroom sdesc = "пузырек c ядом" rdesc = "пузырка c ядом" ddesc = "пузырку c ядом" vdesc = "пузырек c ядом" tdesc = "пузырком c ядом" pdesc = "пузырека c ядом" adjective = 'ядом' 'ядом#r' 'первый' disamvdesc = "первый пузырек" noun = 'пузырек' 'пузырка' 'пузырку' 'пузырком' 'пузырека' 'пузырку#d' 'пузырком#t' ldesc = "Пузырек." isHim = true ; puzyryek2 : item location = startroom sdesc = "пузырек c ядом" rdesc = "пузырка c ядом" ddesc = "пузырку c ядом" vdesc = "пузырек c ядом" tdesc = "пузырком c ядом" pdesc = "пузырека c ядом" adjective = 'ядом' 'ядом#r' 'второй' disamvdesc = "второй пузырек" noun = 'пузырек' 'пузырка' 'пузырку' 'пузырком' 'пузырека' 'пузырку#d' 'пузырком#t' ldesc = "Пузырек." isHim = true ;
Правда, при этом в фун-ии parseDisambig пришлось строку
if (dToS(lst[i],&vdesc)!=str) lst[i].vdesc; else lst[i].disamvdesc;
заменить на
lst[i].disamvdesc;
иначе disamvdesc отображаться не хочет.
Отредактировано - VampirE - (05.12.2007 20:30)
Неактивен
А вот еще пример: игрок встречает какого-то персонажа. Так как его имени он не знает, то может обращаться к нему как "человек" и т.д. А вот если персонаж узнает имя собеседника, возможно ли потом изменять значение переменных с падежами vdesc, pdesc и т.д. на имя персонажа?
Ну что? Кто-то знает как избежать смены предлога на "of"? Когда Гранд писал о "некоторых экзотических случаях" он это имел ввиду?
Отредактировано - VampirE - (05.12.2007 23:46)
Неактивен
Есть идея (правда, без кода, код предоставляю написать ГрАнду, так как оптимизация системных библиотек - его епархия): в parseDisambig перед выводом запроса просматривать переменную str на предмет вхождения в нее подстроки ' of ' и безжалостно заменять оную на пробел.
Это-то понятно. Но будет не очень красиво смотреться. По смылсу там все равно должен будет стоять какой-то предлог.
А про методы спасибо. Я даже совсем забыл про это.
Неактивен
А вообще, что мешает заменить на:
"Какой именно объект Вы имеете ввиду?"
Тоже самое фактически, только не будет этих некрасивостей.
Неактивен