Вот начал писать игру к конкурсу. Возник следующий вопрос, в мануале не отраженный совсем.
Есть объект подвешенный на определенной высоте - unreachable. Есть предмет с помощью которого объект можно сбить.
В итоге когда для метательного объекта прописывается глагол для сбивания объекта (doDrop (actor, inPrep, io)), интерперетатор пишет, что до объекта опять же не добраться. Как заставить реагировать объект? Конечно, возможно определить два состояния для объекта, но чувствую (и в коде это отражено), что стандартные средства есть соответсвующие просто я не знаю как их включить.
Вообще считаю вопросы связанные с 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)
Неактивен