Merge branch 'verbs'
This commit is contained in:
commit
ae03946923
|
@ -19,3 +19,6 @@
|
||||||
- Спать
|
- Спать
|
||||||
|
|
||||||
[История версий](CHANGELOG.md) - лёгкие спойлеры
|
[История версий](CHANGELOG.md) - лёгкие спойлеры
|
||||||
|
|
||||||
|
### Использованные иллюстрации
|
||||||
|
https://unsplash.com/photos/fNj7ca7nC1I
|
||||||
|
|
19
autoscript
19
autoscript
|
@ -12,20 +12,15 @@
|
||||||
закрыть сейф
|
закрыть сейф
|
||||||
осмотреть вырезатель
|
осмотреть вырезатель
|
||||||
взять вырезатель
|
взять вырезатель
|
||||||
выставить К
|
вырезать К из пластинку
|
||||||
стрелять в пластинку
|
вырезать К из пластинки
|
||||||
выставить С
|
вырезать С из пластины
|
||||||
стрелять в пластину
|
вырезать Л из платины
|
||||||
выставить Л
|
|
||||||
стрелять в платину
|
|
||||||
взять батарею
|
взять батарею
|
||||||
вставить батарею в робота
|
вставить батарею в робота
|
||||||
выставить В
|
вырезать В из рукава
|
||||||
стрелять в рукав
|
|
||||||
вставить руку в робота
|
вставить руку в робота
|
||||||
включить робота
|
включить робота
|
||||||
выставить К
|
вырезать К из булавки
|
||||||
стрелять в булавку
|
вырезать Т из щита
|
||||||
выставить Т
|
|
||||||
стрелять в щит
|
|
||||||
юг
|
юг
|
||||||
|
|
BIN
bgr/vaporwave.jpg
(Stored with Git LFS)
Normal file
BIN
bgr/vaporwave.jpg
(Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -1,5 +1,6 @@
|
||||||
-- Здесь мы настраиваем парсер.
|
-- Здесь мы настраиваем парсер.
|
||||||
local mrd = require "morph/mrd"
|
local mrd = require "morph/mrd"
|
||||||
|
local msg = dprint or print
|
||||||
|
|
||||||
mp.msg.SCENE = "{#Me} {#plural/находишься,находитесь} {#if_has/#here,supporter,на,в} {#here/пр,2}.";
|
mp.msg.SCENE = "{#Me} {#plural/находишься,находитесь} {#if_has/#here,supporter,на,в} {#here/пр,2}.";
|
||||||
mp.msg.Exam.DEFAULT = "{#Me} не {#g/видишь,видите} {#vo/{#first/пр}} ничего необычного.";
|
mp.msg.Exam.DEFAULT = "{#Me} не {#g/видишь,видите} {#vo/{#first/пр}} ничего необычного.";
|
||||||
|
@ -113,16 +114,6 @@ function mp.shortcut.g(options)
|
||||||
return options[1]
|
return options[1]
|
||||||
end
|
end
|
||||||
|
|
||||||
Verb {
|
|
||||||
"#Shoot",
|
|
||||||
'стрел/ять,вырез/ать',
|
|
||||||
-- дань удобству - можно опустить предлог
|
|
||||||
'~ {noun}/вн,scene : LetterShoot',
|
|
||||||
'~ в|во {noun}/вн,scene : LetterShoot',
|
|
||||||
'~ из {noun}/рд в|во {noun}/вн,scene : LetterShoot',
|
|
||||||
'~ из {noun}/тв,scene : WrongShoot',
|
|
||||||
}
|
|
||||||
|
|
||||||
function HasChar(str, skipc)
|
function HasChar(str, skipc)
|
||||||
if type(str) ~= 'string' then
|
if type(str) ~= 'string' then
|
||||||
return false
|
return false
|
||||||
|
@ -137,29 +128,40 @@ function StrCut(str, skipc)
|
||||||
return str:gsub(skipc, '')
|
return str:gsub(skipc, '')
|
||||||
end
|
end
|
||||||
|
|
||||||
function mp:WrongShoot(w)
|
Verb {
|
||||||
return 'Правильная команда: стрелять (во что-то)';
|
"#Shoot",
|
||||||
end
|
'вырез/ать',
|
||||||
|
'~ * из {noun}/рд,scene : SetShoot',
|
||||||
|
}
|
||||||
|
|
||||||
function mp:LetterShoot(w)
|
function mp:SetShoot(what, letter)
|
||||||
if not pl:have('letterremover') then
|
if not pl:have('letterremover') then
|
||||||
return 'Нечем.';
|
return 'Нечем.';
|
||||||
end
|
end
|
||||||
if (w:has 'animate') then
|
if (what:has 'animate') then
|
||||||
return 'Вырезатель не работает на живых.';
|
return 'Вырезатель не работает на живых.';
|
||||||
end
|
end
|
||||||
if (w:has 'essential') then
|
if (what:has 'essential') then
|
||||||
return 'Это слишком полезная вещь, чтобы её вырезать.';
|
return 'Это слишком полезная вещь, чтобы её вырезать.';
|
||||||
end
|
end
|
||||||
local letter = _('letterremover').letter;
|
if type(letter) ~= 'string' then
|
||||||
|
return 'Вырезатель можно установить только на букву.';
|
||||||
|
end
|
||||||
|
-- string.len считает байты, а надо символы; utf8.len в инстеде не работает
|
||||||
|
if #(letter):gsub('[\128-\191]', '') == 0 then
|
||||||
|
return 'Вырезатель можно установить только на букву русского алфавита.';
|
||||||
|
end
|
||||||
|
if #(letter):gsub('[\128-\191]', '') > 1 then
|
||||||
|
return 'Вырезатель можно установить только на одну букву.';
|
||||||
|
end
|
||||||
local lcaseletter = mrd.lang.lower(letter);
|
local lcaseletter = mrd.lang.lower(letter);
|
||||||
if w.canonical == nil or w.canonical == '' then
|
if what.canonical == nil or what.canonical == '' then
|
||||||
w.canonical = w.word
|
what.canonical = what.word
|
||||||
end
|
end
|
||||||
if not HasChar(w.canonical, lcaseletter) then
|
if not HasChar(what.canonical, lcaseletter) then
|
||||||
return 'Вырезатель настроен на букву '..letter..', которой нет в слове «'..w.canonical..'».';
|
return 'Вырезатель настроен на букву '..letter..', которой нет в слове «'..what.canonical..'».';
|
||||||
end
|
end
|
||||||
local newCanonical = StrCut(w.canonical, lcaseletter);
|
local newCanonical = StrCut(what.canonical, lcaseletter);
|
||||||
local newTarget = lookup(newCanonical);
|
local newTarget = lookup(newCanonical);
|
||||||
if not newTarget then
|
if not newTarget then
|
||||||
-- продолжаем поиск полным перебором
|
-- продолжаем поиск полным перебором
|
||||||
|
@ -171,174 +173,14 @@ function mp:LetterShoot(w)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
if newTarget then
|
if newTarget then
|
||||||
w:remove();
|
what:remove();
|
||||||
put(newTarget, here());
|
put(newTarget, here());
|
||||||
pn('Вы стреляете в '.. w:noun'вн' ..',и это вырезается в '..newCanonical..'.');
|
pn('Вы стреляете в '.. what:noun'вн' ..',и '..what:it('им')..' вырезается в '..newCanonical..'.');
|
||||||
if newTarget.oncreate ~= nil then
|
if newTarget.oncreate ~= nil then
|
||||||
newTarget.oncreate()
|
newTarget.oncreate()
|
||||||
end
|
end
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
return 'Вы стреляете в '.. w:noun'вн' ..' и '.. w:it('им') ..' мигает в слабом тумане букв «'..newCanonical..'», но затем возвращается в прежнее состояние.';
|
return 'Вы стреляете в '.. what:noun'вн' ..' и '..what:it('им')..' мигает в слабом тумане букв «'..newCanonical..'», но затем возвращается в прежнее состояние.';
|
||||||
end
|
|
||||||
|
|
||||||
Verb {
|
|
||||||
"#Set",
|
|
||||||
'установ/ить,выстав/ить',
|
|
||||||
-- см. проблему #3 - я не хочу определять ещё 33*4 вариации
|
|
||||||
--'~ вырезатель на А: LetterSetA',
|
|
||||||
--'~ вырезатель на а: LetterSetA',
|
|
||||||
--'~ а на вырезателе: LetterSetA',
|
|
||||||
--'~ А на вырезателе: LetterSetA',
|
|
||||||
'~ А: LetterSet1',
|
|
||||||
'~ Б: LetterSet2',
|
|
||||||
'~ В: LetterSet3',
|
|
||||||
'~ Г: LetterSet4',
|
|
||||||
'~ Д: LetterSet5',
|
|
||||||
'~ Е: LetterSet6',
|
|
||||||
'~ Ё: LetterSet7',
|
|
||||||
'~ Ж: LetterSet8',
|
|
||||||
'~ З: LetterSet9',
|
|
||||||
'~ И: LetterSet10',
|
|
||||||
'~ Й: LetterSet11',
|
|
||||||
'~ К: LetterSet12',
|
|
||||||
'~ Л: LetterSet13',
|
|
||||||
'~ М: LetterSet14',
|
|
||||||
'~ Н: LetterSet15',
|
|
||||||
'~ О: LetterSet16',
|
|
||||||
'~ П: LetterSet17',
|
|
||||||
'~ Р: LetterSet18',
|
|
||||||
'~ С: LetterSet19',
|
|
||||||
'~ Т: LetterSet20',
|
|
||||||
'~ У: LetterSet21',
|
|
||||||
'~ Ф: LetterSet22',
|
|
||||||
'~ Х: LetterSet23',
|
|
||||||
'~ Ц: LetterSet24',
|
|
||||||
'~ Ч: LetterSet25',
|
|
||||||
'~ Ш: LetterSet26',
|
|
||||||
'~ Щ: LetterSet27',
|
|
||||||
'~ Ъ: LetterSet28',
|
|
||||||
'~ Ы: LetterSet29',
|
|
||||||
'~ Ь: LetterSet30',
|
|
||||||
'~ Э: LetterSet31',
|
|
||||||
'~ Ю: LetterSet32',
|
|
||||||
'~ Я: LetterSet33',
|
|
||||||
}
|
|
||||||
|
|
||||||
function mp:LetterSet(w)
|
|
||||||
if not pl:have('letterremover') then
|
|
||||||
return 'Нечем.';
|
|
||||||
end
|
|
||||||
if type(w) ~= 'string' then
|
|
||||||
return 'Вырезатель можно установить только на букву русского алфавита.';
|
|
||||||
end
|
|
||||||
--if string.len(w) > 1 then
|
|
||||||
-- return 'Вырезатель можно установить только на одну букву.';
|
|
||||||
--end
|
|
||||||
local letter = _('letterremover').letter;
|
|
||||||
if letter ~= w then
|
|
||||||
_('letterremover').letter = w
|
|
||||||
return 'Вырезатель будет вынимать букву '..w..'.';
|
|
||||||
end
|
|
||||||
return 'Вырезатель уже работает на частоте буквы '..w;
|
|
||||||
end
|
|
||||||
|
|
||||||
function mp:LetterSet1()
|
|
||||||
return mp:LetterSet('А')
|
|
||||||
end
|
|
||||||
function mp:LetterSet2()
|
|
||||||
return mp:LetterSet('Б')
|
|
||||||
end
|
|
||||||
function mp:LetterSet3()
|
|
||||||
return mp:LetterSet('В')
|
|
||||||
end
|
|
||||||
function mp:LetterSet4()
|
|
||||||
return mp:LetterSet('Г')
|
|
||||||
end
|
|
||||||
function mp:LetterSet5()
|
|
||||||
return mp:LetterSet('Д')
|
|
||||||
end
|
|
||||||
function mp:LetterSet6()
|
|
||||||
return mp:LetterSet('Е')
|
|
||||||
end
|
|
||||||
function mp:LetterSet7()
|
|
||||||
return mp:LetterSet('Ё')
|
|
||||||
end
|
|
||||||
function mp:LetterSet8()
|
|
||||||
return mp:LetterSet('Ж')
|
|
||||||
end
|
|
||||||
function mp:LetterSet9()
|
|
||||||
return mp:LetterSet('З')
|
|
||||||
end
|
|
||||||
function mp:LetterSet10()
|
|
||||||
return mp:LetterSet('И')
|
|
||||||
end
|
|
||||||
function mp:LetterSet11()
|
|
||||||
return mp:LetterSet('Й')
|
|
||||||
end
|
|
||||||
function mp:LetterSet12()
|
|
||||||
return mp:LetterSet('К')
|
|
||||||
end
|
|
||||||
function mp:LetterSet13()
|
|
||||||
return mp:LetterSet('Л')
|
|
||||||
end
|
|
||||||
function mp:LetterSet14()
|
|
||||||
return mp:LetterSet('М')
|
|
||||||
end
|
|
||||||
function mp:LetterSet15()
|
|
||||||
return mp:LetterSet('Н')
|
|
||||||
end
|
|
||||||
function mp:LetterSet16()
|
|
||||||
return mp:LetterSet('О')
|
|
||||||
end
|
|
||||||
function mp:LetterSet17()
|
|
||||||
return mp:LetterSet('П')
|
|
||||||
end
|
|
||||||
function mp:LetterSet18()
|
|
||||||
return mp:LetterSet('Р')
|
|
||||||
end
|
|
||||||
function mp:LetterSet19()
|
|
||||||
return mp:LetterSet('С')
|
|
||||||
end
|
|
||||||
function mp:LetterSet20()
|
|
||||||
return mp:LetterSet('Т')
|
|
||||||
end
|
|
||||||
function mp:LetterSet21()
|
|
||||||
return mp:LetterSet('У')
|
|
||||||
end
|
|
||||||
function mp:LetterSet22()
|
|
||||||
return mp:LetterSet('Ф')
|
|
||||||
end
|
|
||||||
function mp:LetterSet23()
|
|
||||||
return mp:LetterSet('Х')
|
|
||||||
end
|
|
||||||
function mp:LetterSet24()
|
|
||||||
return mp:LetterSet('Ц')
|
|
||||||
end
|
|
||||||
function mp:LetterSet25()
|
|
||||||
return mp:LetterSet('Ч')
|
|
||||||
end
|
|
||||||
function mp:LetterSet26()
|
|
||||||
return mp:LetterSet('Ш')
|
|
||||||
end
|
|
||||||
function mp:LetterSet27()
|
|
||||||
return mp:LetterSet('Щ')
|
|
||||||
end
|
|
||||||
function mp:LetterSet28()
|
|
||||||
return mp:LetterSet('Ъ')
|
|
||||||
end
|
|
||||||
function mp:LetterSet29()
|
|
||||||
return mp:LetterSet('Ы')
|
|
||||||
end
|
|
||||||
function mp:LetterSet30()
|
|
||||||
return mp:LetterSet('Ь')
|
|
||||||
end
|
|
||||||
function mp:LetterSet31()
|
|
||||||
return mp:LetterSet('Э')
|
|
||||||
end
|
|
||||||
function mp:LetterSet32()
|
|
||||||
return mp:LetterSet('Ю')
|
|
||||||
end
|
|
||||||
function mp:LetterSet33()
|
|
||||||
return mp:LetterSet('Я')
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -46,6 +46,12 @@ obj {
|
||||||
before_Open = 'На щите нет дверной ручки.';
|
before_Open = 'На щите нет дверной ручки.';
|
||||||
before_Listen = 'Не пропускает. Звук.';
|
before_Listen = 'Не пропускает. Звук.';
|
||||||
before_Attack = 'Не пробивается.';
|
before_Attack = 'Не пробивается.';
|
||||||
|
}: dict {
|
||||||
|
['щит/рд'] = 'щита';
|
||||||
|
['щит/дт'] = 'щиту';
|
||||||
|
['щит/вн'] = 'щит';
|
||||||
|
['щит/тв'] = 'щитом';
|
||||||
|
['щит/пр'] = 'щите';
|
||||||
}:attr 'scenery,static'
|
}:attr 'scenery,static'
|
||||||
|
|
||||||
obj {
|
obj {
|
||||||
|
@ -77,12 +83,12 @@ obj {
|
||||||
return 'На полу лежит вырезатель.';
|
return 'На полу лежит вырезатель.';
|
||||||
end;
|
end;
|
||||||
description = function(s)
|
description = function(s)
|
||||||
return '«Вырезатель ЕДАКТО-12» выглядит как древний пистолет с маленьким дисплеем и кнопками. На дисплее горит буква «'..s.letter..'». Из него можно СТРЕЛЯТЬ во что-то. Чтобы выставить букву А, напишите ВЫСТАВИТЬ А.';
|
return '«Вырезатель ЕДАКТО-12» выглядит как древний пистолет с маленьким дисплеем и кнопками. На дисплее горит буква «'..s.letter..'». Напишите ВЫРЕЗАТЬ Ш ИЗ чего-нибудь.';
|
||||||
end;
|
end;
|
||||||
inv = function(s)
|
inv = function(s)
|
||||||
return s.letter..'-вырезатель'
|
return s.letter..'-вырезатель'
|
||||||
end;
|
end;
|
||||||
before_Shoot = 'Не {#plural/размахивай,размахивайте} этой штукой! Надо стрелять во что-то определённое.';
|
before_Shoot = 'Не {#plural/размахивай,размахивайте} этой штукой! Её надо направить во что-то определённое.';
|
||||||
}: dict {
|
}: dict {
|
||||||
['вырезатель/рд'] = 'вырезателя';
|
['вырезатель/рд'] = 'вырезателя';
|
||||||
['вырезатель/дт'] = 'вырезателю';
|
['вырезатель/дт'] = 'вырезателю';
|
||||||
|
@ -271,6 +277,12 @@ obj {
|
||||||
nam = 'rukav';
|
nam = 'rukav';
|
||||||
canonical = 'рукав';
|
canonical = 'рукав';
|
||||||
description = 'Несколько метров серого пожарного рукава. Кто-то прорезал в нём дырки в форме звёздочек. При пожаре он не поможет, но хотя бы выглядит красиво.';
|
description = 'Несколько метров серого пожарного рукава. Кто-то прорезал в нём дырки в форме звёздочек. При пожаре он не поможет, но хотя бы выглядит красиво.';
|
||||||
|
}: dict {
|
||||||
|
['рукав/рд'] = 'рукава';
|
||||||
|
['рукав/дт'] = 'рукаву';
|
||||||
|
['рукав/вн'] = 'рукав';
|
||||||
|
['рукав/тв'] = 'рукавом';
|
||||||
|
['рукав/пр'] = 'рукаве';
|
||||||
}
|
}
|
||||||
|
|
||||||
obj {
|
obj {
|
||||||
|
|
21
theme.ini
21
theme.ini
|
@ -3,16 +3,21 @@ scr.w = 500
|
||||||
scr.h = 600
|
scr.h = 600
|
||||||
|
|
||||||
scr.col.bg = white
|
scr.col.bg = white
|
||||||
|
scr.gfx.bg = bgr/vaporwave.jpg
|
||||||
|
|
||||||
win.x = 20
|
; Границы окна: 500x600
|
||||||
win.y = 20
|
; Границы полей: 30x30, 470x30, 30x570, 470x570
|
||||||
win.w = 460
|
; Границы текстового поля: 30x30, 470x30, 30x480, 470x480
|
||||||
win.h = 500
|
; Границы поля ввода: 30x500, 470x500, 30x570, 470x570
|
||||||
|
win.x = 30
|
||||||
|
win.y = 30
|
||||||
|
win.w = 440
|
||||||
|
win.h = 450
|
||||||
|
|
||||||
inv.x = 20
|
inv.x = 30
|
||||||
inv.y = 520
|
inv.y = 500
|
||||||
inv.w = 460
|
inv.w = 440
|
||||||
inv.h = 40
|
inv.h = 70
|
||||||
|
|
||||||
inv.col.link = #666666
|
inv.col.link = #666666
|
||||||
inv.col.fg = #000000
|
inv.col.fg = #000000
|
||||||
|
|
Loading…
Reference in a new issue