mirror of
https://gitlab.com/Oreolek/duel.git
synced 2024-06-30 13:55:10 +03:00
Законченный основной квест
This commit is contained in:
parent
134181ed73
commit
facb0a28f3
|
@ -116,6 +116,10 @@ dlg {
|
||||||
function() return 'Где '..pronoun_1()..'?'; end,
|
function() return 'Где '..pronoun_1()..'?'; end,
|
||||||
'-- Добро посаловать в Зжсестиану. Деревня Малогхо раийона, население дефхятнадтцат\' человек.'
|
'-- Добро посаловать в Зжсестиану. Деревня Малогхо раийона, население дефхятнадтцат\' человек.'
|
||||||
};
|
};
|
||||||
|
{
|
||||||
|
'Кто твой хозяин?',
|
||||||
|
'Этот элемент — собственность Горского А.В.'
|
||||||
|
};
|
||||||
{
|
{
|
||||||
function() return fmt.em('Как проехать до Жестианы? '..plural('У меня', 'У нас')..' в машине навигатор отключился.'); end,
|
function() return fmt.em('Как проехать до Жестианы? '..plural('У меня', 'У нас')..' в машине навигатор отключился.'); end,
|
||||||
function()
|
function()
|
||||||
|
|
|
@ -37,11 +37,14 @@ room {
|
||||||
Его глаза очень маленькие для широкого лица; скорее всего, их вставили из какой-нибудь детской куклы.
|
Его глаза очень маленькие для широкого лица; скорее всего, их вставили из какой-нибудь детской куклы.
|
||||||
]],
|
]],
|
||||||
talk = function()
|
talk = function()
|
||||||
return walk('robobutler-dlg')
|
walk('robobutler-dlg')
|
||||||
|
return true
|
||||||
end,
|
end,
|
||||||
};
|
};
|
||||||
obj {
|
obj {
|
||||||
nam = 'mechanism',
|
nam = 'mechanism',
|
||||||
|
disp = 'механизм',
|
||||||
|
talk = 'Механизму нечего вам ответить.',
|
||||||
act = [[Какая-то параболическая антенна на широкой стальной трубе, вкопанной в землю.
|
act = [[Какая-то параболическая антенна на широкой стальной трубе, вкопанной в землю.
|
||||||
Видимо, труба служит защитным корпусом для деталей.]],
|
Видимо, труба служит защитным корпусом для деталей.]],
|
||||||
take = function()
|
take = function()
|
||||||
|
@ -53,34 +56,36 @@ room {
|
||||||
}
|
}
|
||||||
dlg {
|
dlg {
|
||||||
nam = 'robobutler-dlg',
|
nam = 'robobutler-dlg',
|
||||||
disp = false,
|
disp = 'Диалог с роботом',
|
||||||
decor = function()
|
decor = function()
|
||||||
return deref('robobutler').act
|
return _('robobutler').act
|
||||||
end,
|
end,
|
||||||
obj = {{
|
obj = {{
|
||||||
{
|
{
|
||||||
always = true,
|
'#who',
|
||||||
'Кто вы?',
|
'Кто вы?',
|
||||||
function()
|
function()
|
||||||
|
disable('#who')
|
||||||
char.knows_kef = true
|
char.knows_kef = true
|
||||||
return 'Я — программируемый секретарь КЕ-2469Ф. Можно Кеф для краткости.'
|
return 'Я — программируемый секретарь КЕ-2469Ф. Можно Кеф для краткости.'
|
||||||
end,
|
end,
|
||||||
};
|
};
|
||||||
{
|
{
|
||||||
always = true,
|
'#good',
|
||||||
'Что такое «добро»?',
|
'Что такое «добро»?',
|
||||||
function()
|
function()
|
||||||
|
disable('#good')
|
||||||
char.asked_good = true
|
char.asked_good = true
|
||||||
return [[Понятие, которое ассоциировано с действиями на пользу или на защиту общества.]]
|
return [[Понятие, которое ассоциировано с действиями на пользу или на защиту общества.]]
|
||||||
end
|
end
|
||||||
};
|
};
|
||||||
{
|
{
|
||||||
cond = function()
|
cond = function()
|
||||||
return (char.asked_good == true)
|
return (char.asked_good == true and char.knows_robots ~= true)
|
||||||
end,
|
end,
|
||||||
'Что означает надпись «добро»? Чем вы занимаетесь как группа?',
|
'Что означает надпись «добро»? Чем вы занимаетесь как группа?',
|
||||||
function()
|
function()
|
||||||
changeop('reputation', 1)
|
changeop('reputation', 3)
|
||||||
char.knows_robots = true
|
char.knows_robots = true
|
||||||
return [[Мы занимаемся добром. Мы действуем на пользу общества.]]
|
return [[Мы занимаемся добром. Мы действуем на пользу общества.]]
|
||||||
end
|
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 - нет ответа'
|
'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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,13 @@ init = function ()
|
||||||
walk('inventory')
|
walk('inventory')
|
||||||
end
|
end
|
||||||
}, me())
|
}, me())
|
||||||
|
place(menu {
|
||||||
|
nam = "end-game",
|
||||||
|
disp = fmt.b("Уехать"),
|
||||||
|
menu = function()
|
||||||
|
walk('ending')
|
||||||
|
end
|
||||||
|
}:disable(), me())
|
||||||
char.act = nil
|
char.act = nil
|
||||||
place( proxy_menu {
|
place( proxy_menu {
|
||||||
disp = 'ОСМОТРЕТЬ';
|
disp = 'ОСМОТРЕТЬ';
|
||||||
|
@ -171,5 +178,5 @@ changeop = function(name, delta)
|
||||||
rawset(char, name, fairadd(rawget(char, name), delta))
|
rawset(char, name, fairadd(rawget(char, name), delta))
|
||||||
end
|
end
|
||||||
fairadd = function(value, add)
|
fairadd = function(value, add)
|
||||||
return Math.floor(value + (100-value)*(add/100))
|
return math.floor(value + (100-value)*(add/100))
|
||||||
end
|
end
|
||||||
|
|
21
ui.lua
21
ui.lua
|
@ -140,3 +140,24 @@ room {
|
||||||
end,
|
end,
|
||||||
obj = {'back'}
|
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('КОНЕЦ'))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue