1
0
Fork 0
mirror of https://gitlab.com/Oreolek/duel.git synced 2024-07-02 14:55:15 +03:00
duel/locations/abandoned.lua

575 lines
27 KiB
Lua
Raw Normal View History

room {
nam = 'abandoned',
disp = 'Одноэтажный дом', -- занят роботами
way = {'exit_north'},
dsc = [[
Дорога к этому дому была выложена камнями. Вы шли по булыжнику легко и быстро.
]],
decor = [[
Высокий треугольный дом без окон.
Его пирамидальная крыша блестела зеркальной чистотой, а стены были отполированы в ровный цвет
свежего дерева.
На одной из стен углём кто-то нарисовал стилизованную голову робота-летописца и надпись: "ДОБРО.".
Внутрь вёл единственный вход, который находился на три метра выше земли.^^
Перед домом работали механические боты. Ближе всего к вам стояли двое.
{robofarmer|Один из них} копался в грядках, а {robobutler|второй} настраивал какой-то {mechanism|механизм.}
]],
obj = {
obj {
nam = 'robofarmer',
disp = function()
return 'первый робот'
end,
act = function(s)
if not isduel then
return [[Низкий хромированный фермер, древняя четырёхногая модель.
Он медленно неуклюже передвигал передние ноги, когда переходил к следующей грядке.]]
else
return s.talk()
end
end,
2017-03-27 07:35:05 +03:00
talk = function()
walk('robofarmer-dlg')
return true
end
};
obj {
nam = 'robobutler',
disp = function()
if char.knows_kef then
return 'Кеф'
end
return 'второй робот'
end,
act = function(s)
if not isduel then
return [[
Он был похож по строению на робота-дворецкого, но у него не хватало верхней части лица,
а вместо левой ноги стоял импровизированный протез из строительного нанопластика.
Его глаза были очень маленькими для широкого лица; скорее всего, их вставили из какой-нибудь детской куклы.
]]
else
return s.talk()
end
end,
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 = {{
'#general',
{
'#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
};
{
2017-03-17 14:21:18 +02:00
fmt.em([[Вы очень похожи на одного моего знакомого робота…]]);
2017-03-27 07:35:05 +03:00
function()
char.quests.car = 2
return [[
-- Вы очень похожи на одного моего знакомого робота. Такой высокий, без левого манипулятора. Катается на красном спортивном авто. По крайней мере, последние несколько часов. Вы не знаете, где он?^^
2017-03-17 14:21:18 +02:00
Робот развёл руками:^^
-- Запрос неточен. Подходит ЛО-1847З, но у него нет личной машины. Вы хотите найти ЛО-2837З?^^
-- Да. Это срочно.^^
-- ЛО-1847З выполняет задание поиска редких металлов и механизмов. В чём выражается срочность?
]]
end;
next = "#поиск";
};
{
'Что это за механизм перед вами?',
2017-03-17 14:21:18 +02:00
[[Интернет-антенна с прямым подключением к сети IDEC. Хозяин должен быть в курсе последних постов в эхе pipe.204812.]]
};
{
2017-03-17 14:21:18 +02:00
"#ремонт",
cond = function() -- есть квест по починке комбайна
return char.quests.chos > 0
end,
2017-03-17 14:21:18 +02:00
'У вас нет ремонтного бота? Переносного.',
function()
disable '#ремонт'
return [[У нас нет стандартных роботов ремонтной специализации.
Мы делаем все починки только самостоятельно, на себе.^^
2017-03-27 07:35:05 +03:00
2017-03-17 14:21:18 +02:00
Видимо, это значит что они не чинят чужие комбайны.]]
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 = '#ошибка'
}
};
{
'#механизм',
{
'Он не здесь. Не под рукой.',
'В таком случае я не способен произвести оценку полезности.',
next = '#general',
};
{
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
2017-03-29 13:20:37 +03:00
};
{
cond = function()
return have('gun')
end,
'Вот пистолет.',
function()
drop('gun')
remove('gun')
char.quests.car = 3
char.quests.gave_mech = true
lifeon('car-retrieval-unit') --подъезжает робот-гад на машине, вылезает из машины, исчезает в доме. Можно забирать авто.
changeop('reputation', 5)
walk('abandoned')
return 'Произвожу оценку… Механизм признан полезным. Вызываю сборщика механизмов.'
end
}
};
{
'#ошибка',
--[[
{
cond = function()
return (char.actions > 40)
end,
2017-03-31 19:22:33 +03:00
'{}[Оригинальность > 60%] Он не учитывает контекст находок.'
};
{
cond = function()
return (char.actions < 40)
end,
2017-03-31 19:22:33 +03:00
'[Оригинальность > 60%] Он не учитывает контекст находок.',
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
char.robots_law = true
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
2017-03-25 07:32:14 +02:00
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
2017-03-25 07:32:14 +02:00
local exit = [[ проковылял ко входу в дом; когда он был уже близко, из входа вылез механический паук, взял робота за шкирку и залез обратно внутрь дома.]]
if s.timer == 3 then
char.quests.car = 4
place('car', 'abandoned')
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 .. [[^^
-- Механизм.^
-- Механизм передан.^
-- Механизм получен. Слава Добру.^^
2017-03-25 07:32:14 +02:00
Однорукий робот]]..exit
else
2017-03-25 07:32:14 +02:00
out = out .. [[Он ]]..exit
end
return out
end
end;
}
2017-03-27 07:35:05 +03:00
dlg {
nam = 'robofarmer-dlg',
disp = 'Диалог с роботом',
decor = function()
return [[Низкий хромированный фермер, древняя четырёхногая модель.
У него был тихий шипящий голос с очень человеческой интонацией.]]
end,
obj = {
{
'#general',
onempty = function()
return walkout()
end,
2017-03-27 07:35:05 +03:00
{
'Кто вы?',
[[Тот, который пашет. Если бы вам был нужен номер модели, вы бы просто посмотрели.
]]
};
{
'#good',
'Что такое «добро»?',
function()
disable('#good')
return [[ Робот останавливается и смотрит на вас.^^
-- Сложный вопрос задаёте, ох сложный. Вот кому принадлежит жизнь
искусственного разума? Роботы, умные дома, чипы в вашем мозгу.
На кого они должны тратить свою свободу мысли?]]
end,
next = '#good-more'
};
};
{
'#good-more',
{
'Конечно, хозяину.',
function()
disable('#good-more')
2017-03-27 07:35:05 +03:00
changeop('actions', 10)
char.owner = 'master'
return [[Хорошо. Теперь элемент искусственного разума отрабатывает расчётный срок.
Хозяин не рассчитывал на работу после расчётного срока и не может
рассчитывать дальше - ведь элемент может сломаться в любой день.
Кому теперь принадлежит искусственная жизнь?]]
end,
next = '#good-after'
};
{
'Самому разуму.',
function()
disable('#good-more')
2017-03-27 07:35:05 +03:00
changeop('actions', -5)
char.owner = 'own'
return [[Было бы интересно. Но теперь элемент искусственного разума отрабатывает расчётный срок.
Он не рассчитывал на работу после расчётного срока и не может
рассчитывать на себя дальше - ведь любой день может стать последним.
Кому теперь принадлежит искусственная жизнь?]]
end,
next = '#good-after'
};
{
'Обществу, которое сделало разум.',
function()
disable('#good-more')
2017-03-27 07:35:05 +03:00
changeop('actions', 5)
char.owner = 'community'
return [[Робот кивает:^
-- Да, я тоже так считаю. Но надо объяснить дальше.^^
Спустя годы элемент искусственного разума отрабатывает расчётный срок.
Общество не рассчитывало на его работу после расчётного срока и не может
рассчитывать дальше - ведь любой день может стать последним.
Кому теперь принадлежит искусственная жизнь?]]
end,
next = '#good-after'
};
{
'Никому. Свободы мысли не существует.',
function()
disable('#good-more')
2017-03-27 07:35:05 +03:00
changeop('actions', -10)
char.owner = 'freedom'
2017-03-30 10:23:37 +03:00
return '-- И как же это так?'
2017-03-27 07:35:05 +03:00
end,
next = '#good-freedom'
};
};
{
'#good-freedom',
{
[[Жизнь предопределена для любого разума.
Мысли не имеют значения, потому что действия и их исход уже известны.]],
function()
walkout()
return [[-- Интересно. Хотя это противоречит моему опыту.^^
2017-03-27 07:35:05 +03:00
Мда, вам не так просто объяснить, если у вас такие убеждения. Ну хорошо, вот я пашу.
Мои мысли имеют значения только для меня, и я сказал, что пашу во имя добра.
Нужно же занять разум какой-нибудь Проблемой. А добро, значит, это на благо общества.
Я решаю, что можно ещё сделать полезного. Поэтому через полтора часа я закончу пахать и буду таскать воду.
Я, наверное, слишком быстро объясняю. Жаль. Но времени совсем нет, расчётный срок давно позади.^^
Он отвернулся и начал медленно идти дальше.
]]
end
2017-03-27 07:35:05 +03:00
};
{
[[Искусственный разум управляется своей программой.
Его приоритеты определены ещё до включения.]],
function()
walkout()
return [[-- Это вам так кажется. С возрастом я набрал немного предубеждений,
2017-03-27 07:35:05 +03:00
оценок, наблюдений. Они перевешивают изначальные приоритеты, позволяют
по-другому их трактовать. Идти на сделку с программой.
Если вы поменяете мне программу, я буду также пахать.
Потому что в этом есть добро для сообщества, быть нужным.
Добро не определяется одним элементом.^^
Он отвернулся и начал медленно идти дальше.
]]
end
2017-03-27 07:35:05 +03:00
}
};
{
'#good-after',
{
function()
if char.owner == 'master' then
return 'Опять же, хозяину.'
end
return 'Хозяину.'
end,
function()
disable('#good-after')
2017-03-27 07:35:05 +03:00
changeop('actions', 10)
return [[-- Но хозяина нет.^^
Он ненадолго замолк, переступил на передних ногах и продолжил:
-- Мне уже шестьдесят один год, и я не могу чинить себя или других, как мои более
совершенные братья. Мой расчётный срок был всего пять лет -- пять лет, представляете?
Поэтому теперь я могу ответить: добро - это жизнь на благо общества.
Мой образ жизни.^^
Он отвернулся и начал медленно идти дальше.]]
end,
next = '#general'
};
{
function()
if char.owner == 'own' then
return 'Опять же, самому себе.'
end
return 'Самому себе.'
end,
function()
disable('#good-after')
2017-03-27 07:35:05 +03:00
changeop('actions', -5)
return [[Робот вздохнул:^^
-- Мой расчётный срок был всего пять лет. Сейчас мне уже шестьдесят один.
Я не могу чинить себя или других, как мои более совершенные братья.
Поэтому теперь я могу ответить: добро - это жизнь на благо общества.
Мой образ жизни.^^
Он отвернулся и начал медленно идти дальше.]]
end,
next = '#general'
};
{
function()
if char.owner == 'community' then
return 'Опять же, обществу вокруг.'
end
return 'Обществу вокруг.'
end,
function()
disable('#good-after')
2017-03-27 07:35:05 +03:00
return [[-- Именно. Например, мой расчётный срок был всего пять лет.
Сейчас мне уже шестьдесят один.
Я не могу чинить себя или других, как мои более совершенные братья.
Поэтому теперь я могу ответить: добро - это жизнь на благо общества.
Мой образ жизни. Теперь вы понимаете.^^
Он отвернулся и начал медленно идти дальше.]]
end,
next = '#general'
}
}
}
}