1
0
Fork 0
mirror of https://gitlab.com/Oreolek/duel.git synced 2024-06-23 18:40:54 +03:00

Законченный основной квест

This commit is contained in:
Alexander Yakovlev 2017-03-15 21:28:15 +07:00
parent 134181ed73
commit facb0a28f3
4 changed files with 240 additions and 14 deletions

View file

@ -116,6 +116,10 @@ dlg {
function() return 'Где '..pronoun_1()..'?'; end,
'-- Добро посаловать в Зжсестиану. Деревня Малогхо раийона, население дефхятнадтцат\' человек.'
};
{
'Кто твой хозяин?',
'Этот элемент — собственность Горского А.В.'
};
{
function() return fmt.em('Как проехать до Жестианы? '..plural('У меня', 'У нас')..' в машине навигатор отключился.'); end,
function()

View file

@ -37,11 +37,14 @@ room {
Его глаза очень маленькие для широкого лица; скорее всего, их вставили из какой-нибудь детской куклы.
]],
talk = function()
return walk('robobutler-dlg')
walk('robobutler-dlg')
return true
end,
};
obj {
nam = 'mechanism',
disp = 'механизм',
talk = 'Механизму нечего вам ответить.',
act = [[Какая-то параболическая антенна на широкой стальной трубе, вкопанной в землю.
Видимо, труба служит защитным корпусом для деталей.]],
take = function()
@ -53,34 +56,36 @@ room {
}
dlg {
nam = 'robobutler-dlg',
disp = false,
disp = 'Диалог с роботом',
decor = function()
return deref('robobutler').act
return _('robobutler').act
end,
obj = {{
{
always = true,
'#who',
'Кто вы?',
function()
disable('#who')
char.knows_kef = true
return 'Я — программируемый секретарь КЕ-2469Ф. Можно Кеф для краткости.'
end,
};
{
always = true,
'#good',
'Что такое «добро»?',
function()
disable('#good')
char.asked_good = true
return [[Понятие, которое ассоциировано с действиями на пользу или на защиту общества.]]
end
};
{
cond = function()
return (char.asked_good == true)
return (char.asked_good == true and char.knows_robots ~= true)
end,
'Что означает надпись «добро»? Чем вы занимаетесь как группа?',
function()
changeop('reputation', 1)
changeop('reputation', 3)
char.knows_robots = true
return [[Мы занимаемся добром. Мы действуем на пользу общества.]]
end
@ -94,14 +99,22 @@ dlg {
[[Мы занимаемся добром. Мы действуем на пользу общества.]]
};
{
always = true,
'#хозяин',
'Где ваш хозяин?',
'Отсутствует. Но не волнуйтесь, мы поддерживаем его владения в идеальном порядке.'
function()
disable('#хозяин')
return 'Отсутствует. Но не волнуйтесь, мы поддерживаем его владения в идеальном порядке.'
end
};
-- TODO TODO TODO TODO TODO TODO
{
'Один из ваших угнал машину. Где он? И где машина?',
'TODO - нет ответа'
[[Вы очень похожи на одного моего знакомого робота…]];
[[
-- Вы очень похожи на одного моего знакомого робота. Такой высокий, без левого манипулятора. Катается на красном спортивном авто. По крайней мере, последние несколько часов. Вы не знаете, где он?^^
-- Запрос неточен. Подходит ЛО-1847З, но у него нет личной машины. Вы хотите найти ЛО-2837З?^^
-- Да. Это срочно.^^
-- ЛО-1847З выполняет задание поиска редких металлов и механизмов. В чём выражается срочность?
]];
next = "#поиск";
};
{
'Что это за механизм перед вами?',
@ -113,5 +126,186 @@ dlg {
'У вас нет ремонтного бота?',
'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;
}

View file

@ -35,6 +35,13 @@ init = function ()
walk('inventory')
end
}, me())
place(menu {
nam = "end-game",
disp = fmt.b("Уехать"),
menu = function()
walk('ending')
end
}:disable(), me())
char.act = nil
place( proxy_menu {
disp = 'ОСМОТРЕТЬ';
@ -171,5 +178,5 @@ changeop = function(name, delta)
rawset(char, name, fairadd(rawget(char, name), delta))
end
fairadd = function(value, add)
return Math.floor(value + (100-value)*(add/100))
return math.floor(value + (100-value)*(add/100))
end

21
ui.lua
View file

@ -140,3 +140,24 @@ room {
end,
obj = {'back'}
}
room {
nam = 'ending',
disp = 'Уехать из Жестианы',
hideinv = true,
decor = 'Вы уверены, что хотите немедленно уехать из Жестианы?^^'..fmt.c('{yes|Да}'),
obj = {
'back',
obj {
nam = 'yes',
act = function() walk('theend') end,
}
}
}
room {
nam = 'theend',
disp = 'КОНЕЦ',
hideinv = true,
decor = fmt.c(fmt.b('КОНЕЦ'))
}