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 }; { fmt.em([[Вы очень похожи на одного моего знакомого робота…]]); function() char.quests.car = 2 return [[ -- Вы очень похожи на одного моего знакомого робота. Такой высокий, без левого манипулятора. Катается на красном спортивном авто. По крайней мере, последние несколько часов. Вы не знаете, где он?^^ Робот развёл руками:^^ -- Запрос неточен. Подходит ЛО-1847З, но у него нет личной машины. Вы хотите найти ЛО-2837З?^^ -- Да. Это срочно.^^ -- ЛО-1847З выполняет задание поиска редких металлов и механизмов. В чём выражается срочность? ]] end; next = "#поиск"; }; { 'Что это за механизм перед вами?', [[Интернет-антенна с прямым подключением к сети IDEC. Хозяин должен быть в курсе последних постов в эхе pipe.204812.]] }; { "#ремонт", cond = function() -- есть квест по починке комбайна return char.quests.main > 0 end, 'У вас нет ремонтного бота? Переносного.', function() disable '#ремонт' return [[У нас нет стандартных роботов ремонтной специализации. Мы делаем все починки только самостоятельно, на себе.^^ Видимо, это значит что они не чинят чужие комбайны.]] end }; { 'Спасибо. Удачи вам с этим… добром.', 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 have('programmator') end, 'Вот старый программатор.', function() drop('programmator') remove('programmator') char.quests.car = 3 char.quests.cho = -1 char.quests.gave_mech = true lifeon('car-retrieval-unit') --подъезжает робот-гад на машине, вылезает из машины, исчезает в доме. Можно забирать авто. changeop('reputation', -10) -- гадость от провала больше чем радость роботов walk('abandoned') return 'Произвожу оценку… Механизм признан полезным. Вызываю сборщика механизмов.' end } }; { '#ошибка', --[[ { 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() char.quests.car = 3 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() char.quests.car = 5 char.can_leave = true 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 local exit = [[ проковылял ко входу в дом; когда он был уже близко, из входа вылез механический паук, взял робота за шкирку и залез обратно внутрь дома.]] if s.timer == 3 then char.quests.car = 4 place('car', here()) lifeoff(s) local out = [[Возле дома останавливается ваша машина. Из неё выходит знакомый однорукий робот.]] if char.gave_mech then char.gave_mech = false out = out .. [[Он подходит ]] if char.knows_kef then out = out .. [[к Кефу.]] else out = out .. [[ко второму роботу.]] end out = out .. [[^^ -- Механизм.^ -- Механизм передан.^ -- Механизм получен. Слава Добру.^^ Однорукий робот]]..exit else out = out .. [[Он ]]..exit end return out end end; }