Хм, столкнулся с проблемой. У протагониста уже есть предмет, пусть "пузырек с ядом". Исследуя отдаленные районы квеста он находит второй точно такой же "пузырек с ядом". Предметы по идее абсолютно идентичны (массовое производство приводит к этому), более того это контейнеры, и их содержимое отличается (в одном из пузырьков на самом деле простая вода), однако об этом нельзя узнать, если не попробовать (а умный протагонист не станет пить из пузырька с ядом, чтоб не почувствовать легкого недомогания).
Собственно есть ли выход из ситуации:
Вы имеете в виду "пузырек с ядом" или "пузырек с ядом"?
Кроме как поменять сценарий?
Самое страшное - таких предметов на самом деле на два, а четыре ![]()
Неактивен
Кстати, сделал пару "пузырьков". При вводе "пузырек с ядом" пишет: Какой "пузырек 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 ' и безжалостно заменять оную на пробел.
Это-то понятно. Но будет не очень красиво смотреться. По смылсу там все равно должен будет стоять какой-то предлог.
А про методы спасибо. Я даже совсем забыл про это. ![]()
Неактивен
А вообще, что мешает заменить на:
"Какой именно объект Вы имеете ввиду?"
Тоже самое фактически, только не будет этих некрасивостей.
Неактивен