Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
27.05.2007 15:45

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

Reachable и unreachable объекты

Вот начал писать игру к конкурсу. Возник следующий вопрос, в мануале не отраженный совсем.

Есть объект подвешенный на определенной высоте - unreachable. Есть предмет с помощью которого объект можно сбить.

В итоге когда для метательного объекта прописывается глагол для сбивания объекта (doDrop (actor, inPrep, io)), интерперетатор пишет, что до объекта опять же не добраться. Как заставить реагировать объект? Конечно, возможно определить два состояния для объекта, но чувствую (и в коде это отражено), что стандартные средства есть соответсвующие просто я не знаю как их включить. smile

Вообще считаю вопросы связанные с reachable и unreachable объектами должны быть как-то отражены в мануале. А то система очень уж путанная. Я уж не говорю о путанице связанной с тем когда объекты видны, но недосягаемы и когда объекты не видны и не досягаемы.

Неактивен

0    0    #2
28.05.2007 19:48

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Reachable и unreachable объекты

Мне кажется, дело в путанице с IoVerb и DoVerb в твоём коде.

Глагол "сбить грушу камнем" подразумевает прямой объект do = груша, а косвенный io = камень

Итого, в базовом классе у тебя должно быть (модифицируем базовый класс всех объектов, чтобы он отвечал на воздействие новым глаголом):

Код:

modify thing:
    verIoSbitWith(actor) = // !! Верификатор Io не имеет второго параметра -- особенности парсера!!
    {
        "<<ZAG(self, &sdesc)>> не подходит для этого. "; // все, чем нельзя сбивать "Стол не подходит для этого."
    }
    verDoSbitWith(actor, iobj) =
    {
        "<<ZAG(self, &vdesc)>> бессмысленно сбивать. "; // все, что нельзя сбивать "Дерево бессмысленно сбивать."
    }
;

Теперь в классах "камень" и "груша" эти верификаторы надо занулить соответственно, и добавить обработчики действия:

Код:

kamen: item
    verIoSbitWith (actor) = {}
    ioSbitWith (actor, dobj) = 
    { 
        if (dobj = grusha)  
            ; // -- сбили 
        else            
            ; // -- если есть объекты с зануленным 
              //    верификатором verDoSbitWith кроме груши
    }
;

grusha: item
    verDoSbitWith(actor, iobj) = {}
;

Вообще, перечитай манул, главу 4. С этими косвенными объектами такой конфуз... Должно быть 3 функции на глагол с 2мя объектами типа твоего:

  verIoГлагол(actor) = { ... }
  verDoГлагол(actor, iobj) = { ...}
  ioГлагол(actor, dobj) = { ... }

Отредактировано Gremour (28.05.2007 19:59)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru