Функции, которые возвращают объекты
В INSTEAD определены некоторые функции, которые возвращают различные объекты. При описании функции используются следующие соглашения о параметрах.
- в символах [ ] описаны необязательные параметры;
- 'что' или 'где' - означает объект (в том числе комнату), заданный тегом, именем или переменной-ссылкой;
Итак, основные функции:
- '_(что)' - получить объект;
- 'me()' возвращает текущего объекта-игрока;
- 'here()' возвращает текущую сцену;
- 'where(что)' возвращает комнату или объект, в котором находится заданный объект. Если объект находится в нескольких местах, то можно передать второй параметр -- таблицу Lua, в которую будут добавлены эти объекты;
- 'inroom(что)' аналогично where(), но вернёт комнату, в которой расположен объект (это важно для объектов в объектах);
- 'from([где])' возвращает прошлую комнату, из которой игрок перешёл в заданную комнату. Необязательный параметр -- получить прошлую комнату не для текущей комнаты, а для заданной;
- 'seen(что, [где])' возвращает объект или переход, если он присутствует и видим, есть второй необязательный параметр -- выбрать сцену или объект/список в котором искать;
- 'lookup(что, [где])' возвращает объект или переход, если он существует в сцене или объекте/списке;
- 'inspect(что)' возвращает объект, если он виден/доступен на сцене. Поиск производится по переходам и объектам, в том числе, в объектах игрока;
- 'have(что)' возвращает объект, если он есть в инвентаре и не отключён;
- 'live(что)' возвращает объект, если он присутствует среди живых объектов (описано далее);
Эти функции в основном используются в условиях, либо для поиска объекта с последующей модификацией. Например, вы можете использовать 'seen' для написания условия:
onexit = function(s)
if seen 'монстр' then -- если у функции 1 параметр,
--- скобки писать не обязательно
p 'Монстр загораживает проход!'
return false
end
endА также, для нахождения объекта в сцене:
use = function(s, w)
if w^'окно' then
local ww = lookup 'собака'
if not ww then
p [[А где моя собака?]]
return
end
place(ww, 'улица')
p 'Я разбил окно! Моя собака выпрыгнула на улицу.'
return
end
return false
endПример с функцией 'have':
...
act = function(s)
if have 'нож' then
p 'Но у меня же есть нож!';
return
end
take 'нож'
end
...Может возникнуть вопрос, в чём разница между функциями lookup и _ ()? Дело в том, что lookup() ищет объект, и в случае, если объект не найден -- просто ничего не вернёт. А запись _ () предполагает, что вы точно знаете, что за предмет вы получаете. Другими словами, _ () это безусловное получение объекта по имени. Эта функция в общем случае не занимается поиском. Только если в качестве параметра задан тег, будет осуществлён поиск среди доступных объектов. Если вы используете _ () на несуществующий объект или недоступный тег -- вы получите ошибку!