room { nam = 'abandoned', disp = 'Одноэтажный дом', -- занят роботами way = {'exit_north'}, dsc = [[ Дорога к этому дому выложена камнями. Идти по булыжнику легко и просто. ]], decor = [[ Это высокий треугольный дом без окон. Его пирамидальная крыша блестит зеркальной чистотой, а стены отполированы в ровный цвет свежего дерева. На одной из стен углём нарисована стилизованная голова робота-летописца и надпись: "ДОБРО.". Внутрь ведёт единственный вход, который находится на три метра выше земли.^^ Перед домом работают механические боты. Ближе всего к вам стоят двое. {robofarmer|Один из них} копается в грядках, а {robobutler|второй} настраивает какой-то {mechanism|механизм.} ]], obj = { obj { nam = 'robofarmer', disp = function() return 'первый робот' end, act = [[Низкий хромированный фермер. Четырёхногая модель примерно десяти лет от роду. Он медленно неуклюже передвигает передние ноги, когда переходит к следующей грядке.]] }; obj { nam = 'robobutler', disp = function() if char.knows_kef then return 'Кеф' end return 'второй робот' end, act = [[ Он похож по строению на робота-дворецкого, но у него не хватает верхней части лица, а вместо левой ноги - импровизированный протез из строительного нанопластика. Его глаза очень маленькие для широкого лица; скорее всего, их вставили из какой-нибудь детской куклы. ]], talk = function() walk('robobutler-dlg') return true end, }; obj { nam = 'mechanism', disp = 'механизм', talk = 'Механизму нечего вам ответить.', act = [[Какая-то параболическая антенна на широкой стальной трубе, вкопанной в землю. Видимо, труба служит защитным корпусом для деталей.]], take = function() pn ('Над ней работает робот, который заметит отсутствие механизма. Да и зачем вам эта антенна?'); return false end } } } dlg { nam = 'robobutler-dlg', disp = 'Диалог с роботом', decor = function() return _('robobutler').act end, obj = {{ { '#who', 'Кто вы?', function() disable('#who') char.knows_kef = true return 'Я — программируемый секретарь КЕ-2469Ф. Можно Кеф для краткости.' end, }; { '#good', 'Что такое «добро»?', function() disable('#good') char.asked_good = true return [[Понятие, которое ассоциировано с действиями на пользу или на защиту общества.]] end }; { cond = function() return (char.asked_good == true and char.knows_robots ~= true) end, 'Что означает надпись «добро»? Чем вы занимаетесь как группа?', function() changeop('reputation', 3) char.knows_robots = true return [[Мы занимаемся добром. Мы действуем на пользу общества.]] end }; { always = true, cond = function() return (char.knows_robots == true) end, 'Напомни ещё раз, что означает надпись «добро»?', [[Мы занимаемся добром. Мы действуем на пользу общества.]] }; { '#хозяин', 'Где ваш хозяин?', function() disable('#хозяин') return 'Отсутствует. Но не волнуйтесь, мы поддерживаем его владения в идеальном порядке.' end }; { [[Вы очень похожи на одного моего знакомого робота…]]; [[ -- Вы очень похожи на одного моего знакомого робота. Такой высокий, без левого манипулятора. Катается на красном спортивном авто. По крайней мере, последние несколько часов. Вы не знаете, где он?^^ -- Запрос неточен. Подходит ЛО-1847З, но у него нет личной машины. Вы хотите найти ЛО-2837З?^^ -- Да. Это срочно.^^ -- ЛО-1847З выполняет задание поиска редких металлов и механизмов. В чём выражается срочность? ]]; next = "#поиск"; }; { 'Что это за механизм перед вами?', 'TODO - нет ответа' }; { cond = function() -- есть квест по починке комбайна end, 'У вас нет ремонтного бота?', 'TODO - нет ответа' }; { always = true, 'Спасибо. Удачи вам с этим… добром.', function() walkout() return 'Робот кивнул вам и вернулся к починке механизма.' end }; }; { "#поиск", { '#украл', "Он украл чужую машину. Его нужно остановить.", function() disable('#украл') changeop('actions', 10) return 'ЛО-1847З не мог украсть чужой механизм. Это напрямую противоречит его задаче сбора '..fmt.em('потерянных')..' механизмов.' end }; { function() return "У "..plural('меня', 'нас')..' есть механизм для него.' end, 'Предъявите механизм для того, чтобы я произвёл оценку полезности.', next = '#механизм' }; { '#багрепорт', function() return plural('Я знаю', 'Мы знаем')..', что в его программе сбора механизмов есть ошибка.' end, function() changeop('actions', -5) disable('#багрепорт') return [[Глаза робота совершили оборот вокруг своих осей.^^ -- У вас есть отчёт об ошибке? Замечательно! Если ошибка будет принята, мы немедленно отзовём бракованный элемент со всеми механизмами!]] end, next = '#ошибка' } }; { '#механизм', { 'Он не здесь. Не под рукой.', 'В таком случае я не способен произвести оценку полезности.' } }; { '#ошибка', --[[ { cond = function() return (char.actions > 40) end, '{}[Оригинальность < 40] Он не учитывает контекст находок.' }; { cond = function() return (char.actions < 40) end, '[Оригинальность < 40] Он не учитывает контекст находок.', function() changeop('reputation', 5) return [\[-- Отчёт об ошибке принят.^^ Робот ненадолго задумался, потом дёрнулся и продолжил: -- Требуются дополнительные данные. Какой контекст необходимо учитывать?]\] end, next = '#контекст', };]] { 'Он действует без разрешения владельцев механизмов.', function() return [[-- Отчёт об ошибке принят.^^ Робот ненадолго задумался, потом дёрнулся и продолжил: -- Отчёт об ошибке закрыт. Программа работает исключительно на бесхозных объектах. Данные объекты не имеют владельцев.]] end, next = '#поиск' }; { 'Область поиска механизмов слишком велика.', function() return [[-- Отчёт об ошибке принят.^^ Робот ненадолго задумался, потом дёрнулся и продолжил: -- Отчёт об ошибке закрыт. Область поиска вычислена из расчёта трёх часов ходьбы среднего двуногого независимого элемента по земле, которая не является собственностью жителей села.]] end, next = '#поиск' }; { 'Определение владельца механизма неверно с юридической точки зрения.', function() changeop('reputation', 5) return [[-- Отчёт об ошибке принят.^^ Робот ненадолго задумался, потом дёрнулся и продолжил: -- Требуются дополнительные данные. Трактовка какого закона неверна?]] end, next = '#закон' } }; { '#закон', { 'Закон о межевании сельхозугодий.', [[ Робот открыл рот, потряс головой, а затем быстро парировал:^^ -- Межевание земель сельскохозяйственного назначения не относится к обсуждаемой теме. Мы действуем как собственность Горского А.В. и не делим его участок между собой. Ваш отчёт об ошибке будет закрыт. ]], next = "#поиск" }; { [[Закон о находках.]], function() lifeon('car-retrieval-unit') --подъезжает робот-гад на машине, вылезает из машины, исчезает в доме. Можно забирать авто. walk('abandoned') changeop('reputation', 10) return [[Робот задумался:^^ -- «Если лицо, имеющее право потребовать возврата найденной вещи, или место его пребывания неизвестны, нашедший вещь обязан заявить о находке в полицию или в орган местного самоуправления.» Мы признаём, что были вынуждены упростить программу. Благодарим вас за отчёт об ошибке. Требуется немедленный отзыв элемента для обновления программы.]] end, }; { [[Налог с доходов и кладов.]], function() return [[Робот задумался:^^ -- Вы считаете, что мы должны отсылать налог на найденные механизмы неустановленной ценности?^^ Вы не успели ничего ответить, как он продолжил:^^ -- Отчёт об ошибке закрыт. Мы являемся собственностью Горского А.В. и не рассматриваем себя как физические лица. Найденные механизмы не относятся к доходам Горского А.В.]] end, next = "#поиск" }; { [[Определение частной собственности. Если человек купил механизм, то механизм может быть потерянным, но не может быть бесхозным.]], [[ Робот быстро парировал:^^ -- Определение частной собственности не противоречит программе. Она занимается поиском ]]..fmt.em('бесхозных')..[[ механизмов, а не потерянных. По определению купленные механизмы не могут быть бесхозными. Ваш отчёт об ошибке будет закрыт. ]], next = "#поиск" } }; } } obj { nam = 'car'; disp = 'автомобиль'; dsc = 'Недалеко от вас припаркован ваш {автомобиль.}'; tak = function() enable('end-game') p 'Вы вынимаете ключи из замка зажигания. Больше никто не угонит авто просто так.' return true end } obj { nam = 'car-retrieval-unit'; timer = 0; disp = false; life = function(s) s.timer = s.timer + 1 if s.timer == 2 then return [[По дороге сюда едет машина. Похоже, это ваша машина.]] end if s.timer == 3 then place('car', here()) lifeoff(s) return [[Возле дома останавливается ваша машина. Из неё выходит знакомый однорукий робот. Он ковыляет ко входу в дом; когда он уже близко, из входа вылезает механический паук, берёт робота за шкирку и залезает обратно внутрь дома.]] end end; }