You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.4 KiB

--$Name: Тест открывания$
--$Version: 1.0$
--$Author:Александр Яковлев$
require 'parser/mp-ru'
mp.undo = 1
room {
nam = 'main';
decor = [[
Добро пожаловать в тестовую комнату.^
Попробуйте открыть или отпереть замок.
]];
title = 'Тестовая комната';
}
obj {
-"код/мр|бумажка/жр";
nam = 'code';
description = 'Листок бумаги с кодом: 1234.';
found_in = 'main';
}
obj {
-"отмычка/жр";
nam = 'pin';
description = 'Отмычка для слишком умных замков. Ведёт себя как ключ.';
found_in = 'main';
}
obj {
-"карандаш/мр";
nam = 'pencil';
description = 'Карандаш, которым нельзя открывать замки.';
found_in = 'main';
}
-- действие "писать карандашом на бумажке" не входит в тестируемые
-- и требует нового глагола, но оно было бы в реальной игре
obj {
-"замок/мр";
nam = 'lock';
found_in = 'main';
description = 'Надёжный умный замок. Его можно открыть правильным цифровым кодом или ключом.';
-- замок можно открыть двумя вещами, поэтому with_key не уместен
-- вместо этого надо перехватывать before_Unlock
-- кроме того, его хочется сразу открывать, потому что зачем ещё мы его отпираем
before_Lock = 'Замок полезнее открытым.';
before_Unlock = function(self, what)
if (what == nil) then
return false
end
if self:has('open') then
return 'Но он уже открыт.';
end
if (what ^ 'code') then
pn 'Вы читаете бумажку и вводите код.'
self:attr('~locked');
self:attr('open');
self:attr('~closed');
return false;
end
if (what ^ 'pin') then
pn 'Вы взламываете замок отмычкой.';
self:attr('~locked');
self:attr('open');
self:attr('~closed');
return false;
end
return 'Нет, этим замок не отпереть.';
end;
}:attr 'locked,openable,closed'