instead-unittest/main3.lua

74 lines
2.4 KiB
Lua
Raw Permalink Normal View History

2021-01-12 00:24:20 +02:00
--$Name: Тест открывания$
--$Version: 1.0$
--$Author:Александр Яковлев$
require 'parser/mp-ru'
mp.undo = 1
room {
nam = 'main';
decor = [[
2021-01-12 00:42:41 +02:00
Добро пожаловать в тестовую комнату.^
Попробуйте открыть или отпереть замок.
2021-01-12 00:24:20 +02:00
]];
title = 'Тестовая комната';
}
obj {
-"код/мр|бумажка/жр";
nam = 'code';
description = 'Листок бумаги с кодом: 1234.';
found_in = 'main';
}
obj {
-"отмычка/жр";
nam = 'pin';
description = 'Отмычка для слишком умных замков. Ведёт себя как ключ.';
found_in = 'main';
}
obj {
-"карандаш/мр";
nam = 'pencil';
description = 'Карандаш, которым нельзя открывать замки.';
found_in = 'main';
}
-- действие "писать карандашом на бумажке" не входит в тестируемые
-- и требует нового глагола, но оно было бы в реальной игре
2021-01-12 00:24:20 +02:00
obj {
-"замок/мр";
nam = 'lock';
found_in = 'main';
description = 'Надёжный умный замок. Его можно открыть правильным цифровым кодом или ключом.';
-- замок можно открыть двумя вещами, поэтому with_key не уместен
-- вместо этого надо перехватывать before_Unlock
-- кроме того, его хочется сразу открывать, потому что зачем ещё мы его отпираем
before_Lock = 'Замок полезнее открытым.';
2021-01-12 00:24:20 +02:00
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'