Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
05.12.2007 15:13

goraph
Участник (+647, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

Два одинаковый предмета

Хм, столкнулся с проблемой. У протагониста уже есть предмет, пусть "пузырек с ядом". Исследуя отдаленные районы квеста он находит второй точно такой же "пузырек с ядом". Предметы по идее абсолютно идентичны (массовое производство приводит к этому), более того это контейнеры, и их содержимое отличается (в одном из пузырьков на самом деле простая вода), однако об этом нельзя узнать, если не попробовать (а умный протагонист не станет пить из пузырька с ядом, чтоб не почувствовать легкого недомогания).
Собственно есть ли выход из ситуации:
   Вы имеете в виду "пузырек с ядом" или "пузырек с ядом"?
Кроме как поменять сценарий? smile
Самое страшное - таких предметов на самом деле на два, а четыре smile

Неактивен

0    0    #2
05.12.2007 19:04

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

Кстати, сделал пару "пузырьков". При вводе "пузырек с ядом" пишет: Какой "пузырек 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)

Неактивен

0    0    #3
05.12.2007 20:30

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

В общем, вот, что можно сделать со свойством 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)

Неактивен

0    0    #4
05.12.2007 23:44

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

А вот еще пример: игрок встречает какого-то персонажа. Так как его имени он не знает, то может обращаться к нему как "человек" и т.д. А вот если персонаж узнает имя собеседника, возможно ли потом изменять значение переменных с падежами vdesc, pdesc и т.д. на имя персонажа?

Ну что? Кто-то знает как избежать смены предлога на "of"? Когда Гранд писал о "некоторых экзотических случаях" он это имел ввиду? wink

Отредактировано - VampirE - (05.12.2007 23:46)

Неактивен

0    0    #5
06.12.2007 08:10

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

Есть идея (правда, без кода, код предоставляю написать ГрАнду, так как оптимизация системных библиотек - его епархия): в parseDisambig перед выводом запроса просматривать переменную str на предмет вхождения в нее подстроки ' of ' и безжалостно заменять оную на пробел.

Это-то понятно. Но будет не очень красиво смотреться. По смылсу там все равно должен будет стоять какой-то предлог.

А про методы спасибо. Я даже совсем забыл про это. smile

Неактивен

0    0    #6
07.12.2007 08:27

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

А вообще, что мешает заменить на:

"Какой именно объект Вы имеете ввиду?"

Тоже самое фактически, только не будет этих некрасивостей.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru