А почему поверхность при ее осмотре не выписывает список предметов, которые лежат на ней? И контейнеры тоже...
Гранд, может, доточить библиотеку? Какое-то глобальное упущение.
Пример. На столике лежит ключ. Если я напишу осмотреть столик
, то выведется ldesc
столика, но не напишется, что "на столике лежит ключ". Что, в целом, неправильно...
Неактивен
GrAndrey написал:
Не проверял, но на первый взгляд проблема в изобилии классов для сейфа. Он в первую очередь контейнер, а потом уже поверхность. В плане "нахождения" "на" и "в" реализованы одинаково, и поэтому когда кладешь что-то на сейф, оно оказывается внутри.
Да, похоже именно так и есть.
Самый простой вариант (особенно с точки зрения новичка;) - убрать surface из списка классов.
И еще такой момент: у тебя действительно явный избыток классов. Определение сейфа можно сократить до
box: keyedLockable, fixeditem
поскольку в данном случае container и openable ничего нового не внесут (keyedLockable - наследник этих классов).
Неактивен
noname написал:
GrAndrey написал:
Да, нужны два объекта - "сейф" и "сейфовая ячейка". Некоторые действия над сейфом переадресовывать ячейке, а многие над ячейкой - сейфу.
а насколько это сложно? не будет ли затруднительно выложить пример, где сейф можно отпереть/запереть, открыть/закрыть, ложить ключи и яблоко как В сейф, так и НА него?
Ну, примерно вот так:
Safe: surface, fixedItem // Сейф для укладки "на сейф"
name='сейф'
sdesc="сейф"
ldesc="Мощный металлический шкаф с широкой поверхностью сверху и сейфовой ячейкой посередине."
location=startroom
// Переадресация на сейфовую ячейку
doOpen -> SafeInside //Открыть
doClose -> SafeInside // Закрыть
doLock -> SafeInside // Запереть
doLockWith -> SafeInside // Запереть при помощи...
doUnlock -> SafeInside // Отпереть
doUnlockWIth -> SafeInside // Отпереть при помощи...
ioPutIn -> SafeInside // Положить в...
;
SafeInside: keyedLockable, fixedItem // Сейфовая ячейка для укладки "в сейф"
name='ячейка'
adjective='сейфовая'
sdesc="сейфовая ячейка"
ldesc="Сейфовая ячейка посередине мощного металлического шкафа."
location=startroom
// Переадресация на сейф
ioPutOn -> Safe // Положить на...
;
-> - краткая форма записи переадресации глагола, говорящая о том, что для глагола, стоящего слева от "стрелки", будет вызываться набор соответствующих методов-верификаторов и методов действий объекта, стоящего справа от "стрелки". Т. е., скажем,
doClose -> SafeInside
аналогично записи
verDoClose(actor)={SafeInside.verDoClose(actor);}
doClose(actor)={SafeInside.doClose(actor);}
Отредактировано uux (06.02.2009 01:40)
Неактивен