Вырезатель, начало

This commit is contained in:
Alexander Yakovlev 2020-12-21 18:02:03 +07:00
parent 749d8a58b0
commit 9196f060eb
Signed by: oreolek
GPG key ID: 1CDC4B7820C93BD3
2 changed files with 128 additions and 2 deletions

View file

@ -93,3 +93,45 @@ function mp.shortcut.g(options)
end
return options[1]
end
Verb {
"#Shoot",
'стрел/ять,вырез/ать',
-- дань удобству - можно опустить предлог
'~ {noun}/тв,scene : LetterShoot',
'~ в|во {noun}/тв,scene : LetterShoot',
'~ из {noun}/тв,scene : LetterShoot',
'~ из {noun}/вн в|во {noun}/тв,scene : WrongShoot',
}
function HasChar(str, skipc)
if type(str) ~= 'string' then
return false
end
return (string.find(str, skipc) ~= nil)
end
function StrCut(str, skipc)
if type(str) ~= 'string' then
return str
end
return str:gsub(skipc, '')
end
function mp:WrongShoot(w)
return 'Правильная команда: стрелять (во что-то)';
end
function mp:LetterShoot(w)
if not pl:have('letterremover') then
return 'Нечем.';
end
if (w:has 'animate') then
return 'Вырезатель не работает на живых.';
end
local letter = _('letterremover').letter;
if not HasChar(w.canonical, letter) then
return 'Вырезатель настроен на букву '..letter..', которой нет в слове «'..w.canonical..'».';
end
return 'Вы стреляете в '.. w.canonical ..',который вырезается в '..StrCut(w.canonical, letter);
end

View file

@ -1,7 +1,8 @@
room {
nam = 'pantry';
dsc = function()
if visits() < 2 then
seen = false;
dsc = function(s)
if not s.seen then
-- if not visited() then
pn "{#Me} {#g/летишь,летите} из Йоханнесбурга (Земля) в Петербург (планета Проксима Центавра b). Всего четыре часа полёта в эконом-классе. Как раз, чтобы дочитать увлекательную книгу о приключениях капитана Киркунова.^";
p "Но, не {#g/успела,успел,успело,успели} {#me} закончить и первой главы, как откуда-то спереди донёсся душераздирающий крик. {#Me} {#g/увидела,увидел,увидело,увидели}, как впереди по проходу медленно шагает на чёрных щупальцах какая-то иссине-чёрная ";
@ -10,6 +11,89 @@ room {
pn "{#Me} {#g/бросилась,бросился,бросилось,бросились} бежать к корме судна и {#word/нырнула,нырнул,нырнуло,нырнули} в первую же комнату, чтобы найти хотя бы кого-то из экипажа.^";
p "Вдруг дверь за {#you/твор} закрылась и выставила защитные щиты.";
pn "{#Me} {#g/заперта,заперт,заперто,заперты}.^^";
s.seen = true;
end
p 'Это маленькая комнатка, мягко подсвеченная светильниками внутри стен. В углу стоит робот-уборщик. Единственная дверь на юге закрыта ярким голубым щитом.';
end;
s_to = 'Дверь закрыта и заблокирована прочным щитом.';
obj = {
'shield',
'robot',
'letterremover'
};
}
obj {
-"щит/мр";
nam = 'shield';
canonical = 'щит';
dsc = 'Переливчатый щит из неизвестного {#you/дт} материала. Его нельзя сломать и он не пропускает звуков.';
before_Open = 'На щите нет дверной ручки.';
before_Attack = 'Не пробивается.';
}:attr 'scenery,static'
obj {
-"вырезатель,убиратель,пистолет|оружие";
nam = 'letterremover';
letter = "Р";
dsc = function(s)
return '«Вырезатель ЕДАКТО-12» выглядит как древний пистолет с маленьким дисплеем и кнопками. На дисплее горит буква «'..s.letter..'». Из него можно СТРЕЛЯТЬ во что-то.';
end;
inv = function(s)
return s.letter..'-вырезатель'
end;
before_Shoot = 'Не {#plural/размахивай,размахивайте} этой штукой! Надо стрелять во что-то определённое.';
}: dict {
['вырезатель/рд'] = 'вырезателя';
['вырезатель/дт'] = 'вырезателю';
['вырезатель/вн'] = 'вырезатель';
['вырезатель/тв'] = 'вырезателем';
['вырезатель/пр'] = 'вырезателе';
}: attr 'concealed'
obj {
-"робот,уборщик";
nam = 'robot';
alive = false;
dsc = 'У стенки стоит выключенный робот-уборщик. У него два длинных манипулятора-руки и широкие стальные гусеницы.';
before_SwitchOn = function(s)
if not (s.has('battery')) then
p "Над кнопкой включения загорается сообщение: нет батареи.";
return false;
end
if not (s.has('hand')) then
p "Робот оживляется, но тут же потухает. Новое сообщение: неисправность руки.";
return false;
end
robot.alive = true;
return "Робот включается и начинает тихо бурчать. Наверное, оценивает чистоту чулана.";
end;
obj = {
'robot_hand',
'button'
}
}: attr 'essential,scenery,switchable'
obj {
-"батарея,батарейка";
nam = 'battery';
dsc = 'Сменная батарея для бытовой электроники типа «крона». Одному пылесосу её хватает на тридцать лет.';
}: attr 'essential,concealed,switchable'
obj {
-"кнопка|выключатель";
nam = 'button';
dsc = 'Кнопка включения робота. Ничего примечательного.';
}: attr 'essential,scenery,switchable'
obj {
-"манипулятор";
nam = 'robot_hand';
dsc = 'Манипулятор робота типа «рука». Имеет пальцы. Может хватать. Может сгибаться. Много чего может.';
}: attr 'essential,scenery'
obj {
-"рука";
nam = 'hand';
dsc = 'Пластиковая рука, как будто от манекена. Похоже, она левая.';
}: attr 'essential'