instead-unittest/parser/mp-ru.lua

1185 lines
38 KiB
Lua
Raw Normal View History

2021-01-12 00:24:20 +02:00
--luacheck: no self
local lang = require "morph/lang-ru"
require "parser/mp"
require "parser/mplib"
local mp = _'@metaparser'
std.mod_init(
function()
mp:init(lang)
end)
game.dsc = function()
p ([[МЕТАПАРСЕР3 Версия: ]]..mp.version.."^")
p [[http://instead-hub.github.io^^
Если вам необходима справка по игре, наберите "помощь".
^]]
end
-- local utf = mp.utf
_'@all'.word = -"всё/~од"
_'@darkness'.word = -"тьма,темнота,темень"
_'@darkness'.before_Any = "Полная, кромешная тьма."
_'@darkness':attr 'persist'
_'@n_to'.word = -"север";
_'@ne_to'.word = -"северо-восток";
_'@e_to'.word = -"восток";
_'@se_to'.word = -"юго-восток";
_'@s_to'.word = -"юг";
_'@sw_to'.word = -"юго-запад";
_'@w_to'.word = -"запад";
_'@nw_to'.word = -"северо-запад";
_'@u_to'.word = -"наверх,вверх,верх";
_'@d_to'.word = -"вниз,низ";
_'@out_to'.word = -"наружу,выход,назад";
_'@in_to'.word = -"внутрь,вход"
mp.shorten = {
["с"] = "север";
["в"] = "восток";
["з"] = "запад";
["ю"] = "юг";
["св"] = "северо-восток";
["юв"] = "юго-восток";
["юз"] = "юго-запад";
["сз"] = "северо-запад";
["вн"] = "вниз";
["вв"] = "вверх";
}
mp.shorten_expert = {
["и"] = "инвентарь";
["ж"] = "ждать";
["о"] = "осмотреть";
["осм"] = "осмотреть";
["вкл"] = "включить";
["выкл"] = "выключить";
["см"] = "смотреть";
}
function mp:skip_filter(w)
for _, v in ipairs(w) do
if v == 'не' or v == 'кроме' or v == 'вместо' then
return false
end
end
return true
end
_'@compass'.before_Default = 'Попробуйте глагол "идти".'
function mp.msg.SCORE(d)
if d > 0 then
pn ("{$fmt em|(Счёт увеличился на ", d, ")}")
else
pn ("{$fmt em|(Счёт уменьшился на ", d, ")}")
end
end
mp.door.word = -"дверь";
mp.msg.TITLE_SCORE = "Счёт: "
mp.msg.TITLE_TURNS = "Ходы: "
mp.msg.YES = "Да"
mp.msg.WHEN_DARK = "Кромешная тьма."
mp.msg.UNKNOWN_THEDARK = "Возможно, это потому что в темноте ничего не видно?"
mp.msg.COMPASS_NOWAY = "Этот путь недоступен."
mp.msg.COMPASS_EXAM_NO = "В этом направлении не видно ничего примечательного."
mp.msg.ENUM = "шт."
mp.msg.CUTSCENE_HELP = "Для продолжения нажмите <ввод> или введите {$fmt em|дальше}."
mp.msg.DLG_HELP = "Для выбора фразы введите цифру."
mp.msg.NO_ALL = "Это действие нельзя применить на всё."
mp.msg.DROPPING_ALL = function(w)
pn (iface:em("(бросить "..w:noun'вн'..")"))
end
mp.msg.TAKING_ALL = function(w)
pn (iface:em("(взять "..w:noun'вн'..")"))
end
mp.msg.TAKE_BEFORE = function(w)
pn (iface:em("(сначала взяв "..w:noun'вн'..")"))
end
mp.msg.DISROBE_BEFORE = function(w)
pn (iface:em("(сначала сняв "..w:noun'вн'..")"))
end
mp.msg.CLOSE_BEFORE = function(w)
pn (iface:em("(сначала закрыв "..w:noun'вн'..")"))
end
--"находиться"
mp.msg.SCENE = "{#Me} {#word/находиться,#me,нст} {#if_has/#here,supporter,на,в} {#here/пр,2}.";
mp.msg.INSIDE_SCENE = "{#Me} {#word/находиться,#me,нст} {#if_has/#where,supporter,на,в} {#where/пр,2}.";
mp.msg.TITLE_INSIDE = "{#if_has/#where,supporter,на,в} {#where/пр,2}";
mp.msg.COMPASS_EXAM = function(dir, ob)
if dir == 'u_to' then
p "Вверху"
elseif dir == 'd_to' then
p "Внизу"
elseif dir == 'out_to' or dir == 'in_to' then
p "В этом направлении"
else
p "На {#first/пр,2}"
end
if ob:hint'plural' then
p "находятся"
else
p "находится"
end
p (ob:noun(),".")
end
mp.msg.enter = "<ввод>"
mp.msg.EMPTY = 'Простите?'
mp.msg.UNKNOWN_VERB = "Непонятный глагол"
mp.msg.UNKNOWN_VERB_HINT = "Возможно, вы имели в виду"
mp.msg.INCOMPLETE = "Нужно дополнить предложение."
mp.msg.INCOMPLETE_NOUN = "К чему вы хотите применить команду"
mp.msg.INCOMPLETE_SECOND_NOUN = "Уточните команду:"
mp.msg.UNKNOWN_OBJ = function(w)
if not w then
p "Об этом предмете ничего не известно."
else
p "Об этом предмете ничего не известно "
p ("(",w,").")
end
end
mp.msg.NOTHING_OBJ = "Ничего подходящего нет."
mp.msg.UNKNOWN_WORD = function(w)
if not w then
p "Фраза не распознана."
else
p "Фраза не распознана "
p ("(",w,"?).")
end
end
mp.msg.HINT_WORDS = "Может быть"
mp.msg.HINT_OR = "или"
mp.msg.HINT_AND = "и"
mp.msg.AND = "и"
mp.msg.MULTIPLE = "Тут есть"
mp.msg.LIVE_ACTION = function(w)
p (w:It'дт'," это не понравится.")
end
mp.msg.NO_LIVE_ACTION = "Действие применимо только к одушевлённым объектам."
mp.msg.NOTINV = function(t)
p (lang.cap(t:noun'вн') .. " сначала нужно взять.")
end
--"надет"
mp.msg.WORN = function(w)
local hint = w:gram().hint
pr (" (",mp.mrd:word('надет/' .. hint), ")")
end
--"открыт"
mp.msg.OPEN = function(w)
local hint = w:gram().hint
pr (" (",mp.mrd:word('открыт/' .. hint), ")")
end
mp.msg.EXITBEFORE = "Возможно, {#me/дт} нужно сначала {#if_has/#where,supporter,слезть с {#where/рд}.,покинуть {#where/вн}.}"
mp.default_Event = "Exam"
mp.default_Verb = "осмотреть"
--"доступен"
mp.msg.ACCESS1 = "{#First} отсюда не{#word/доступен,#first}."
mp.msg.ACCESS2 = "{#Second} отсюда не{#word/доступен,#second}."
mp.msg.Look.HEREIS = "Здесь находится"
mp.msg.Look.HEREARE = "Здесь находятся"
mp.msg.NOROOM = function(w)
if w == std.me() then
p ("У {#me/рд} слишком много вещей.")
elseif w:has'supporter' then
p ("На ", w:noun'пр,2', " больше нет места.")
else
p ("В ", w:noun'пр,2', " больше нет места.")
end
end
--"включён"
--"выключен"
mp.msg.Exam.SWITCHSTATE = "{#First} сейчас {#if_has/#first,on,{#word/включён,#first},{#word/выключен,#first}}."
mp.msg.Exam.NOTHING = "ничего нет."
mp.msg.Exam.IS = "находится"
mp.msg.Exam.ARE = "находятся"
mp.msg.Exam.IN = "В {#first/пр,2}"
mp.msg.Exam.ON = "На {#first/пр,2}"
--"видеть"
mp.msg.Exam.DEFAULT = "{#Me} не {#word/видеть,#me,нст} {#vo/{#first/пр}} ничего необычного.";
mp.msg.Exam.SELF = "{#Me} не {#word/видеть,#me,нст} в себе ничего необычного.";
--"открыт"
mp.msg.Exam.OPENED = "{#First} {#word/открыт,нст,#first}."
--"закрыт"
mp.msg.Exam.CLOSED = "{#First} {#word/закрыт,нст,#first}."
--"находить"
mp.msg.LookUnder.NOTHING = "{#Me} не {#word/находить,нст,#me} под {#first/тв} ничего интересного."
--"могу"
--"закрыт"
--"держать"
--"залезать"
mp.msg.Enter.ALREADY = "{#Me} уже {#if_has/#first,supporter,на,в} {#first/пр,2}."
mp.msg.Enter.INV = "{#Me} не {#word/могу,#me,нст} зайти в то, что {#word/держать,#me,нст} в руках."
mp.msg.Enter.IMPOSSIBLE = "Но в/на {#first/вн} невозможно войти, встать, сесть или лечь."
mp.msg.Enter.CLOSED = "{#First} {#word/закрыт,#first}, и {#me} не {#word/мочь,#me,нст} зайти туда."
mp.msg.Enter.ENTERED = "{#Me} {#word/залезать,нст,#me} {#if_has/#first,supporter,на,в} {#first/вн}."
mp.msg.Enter.DOOR_NOWHERE = "{#First} никуда не ведёт."
--"закрыт"
mp.msg.Enter.DOOR_CLOSED = "{#First} {#word/закрыт,#first}."
mp.msg.Walk.ALREADY = mp.msg.Enter.ALREADY
mp.msg.Walk.WALK = "Но {#first} и так находится здесь."
mp.msg.Walk.NOWHERE = "Куда именно?"
mp.msg.Walk.INV = "Но {#first} у {#me/рд} с собой."
mp.msg.Enter.EXITBEFORE = "Сначала нужно {#if_has/#where,supporter,слезть с {#where/рд}.,покинуть {#where/вн}.}"
mp.msg.Exit.NOTHERE = "Но {#me} сейчас не {#if_has/#first,supporter,на,в} {#first/пр,2}."
mp.msg.Exit.NOWHERE = "Но {#me/дт} некуда выходить."
mp.msg.Exit.CLOSED = "Но {#first} {#word/закрыт,#first}."
--"покидать"
--"слезать"
mp.msg.Exit.EXITED = "{#Me} {#if_has/#first,supporter,{#word/слезать с,#me,нст} {#first/рд},{#word/покидать,#me,нст} {#first/вн}}."
mp.msg.GetOff.NOWHERE = "Но {#me/дт} не с чего слезать."
mp.msg.Inv.NOTHING = "У {#me/рд} с собой ничего нет."
mp.msg.Inv.INV = "У {#me/рд} с собой"
--"открывать"
mp.msg.Open.OPEN = "{#Me} {#word/открывать,нст,#me} {#first/вн}."
mp.msg.Open.NOTOPENABLE = "{#First/вн} невозможно открыть."
--"открыт"
mp.msg.Open.WHENOPEN = "{#First/} уже {#word/открыт,#first}."
--"заперт"
mp.msg.Open.WHENLOCKED = "Похоже, что {#first/} {#word/заперт,#first}."
--"закрывать"
mp.msg.Close.CLOSE = "{#Me} {#word/закрывать,нст,#me} {#first/вн}."
mp.msg.Close.NOTOPENABLE = "{#First/вн} невозможно закрыть."
--"закрыт"
mp.msg.Close.WHENCLOSED = "{#First/} уже {#word/закрыт,#first}."
mp.msg.Lock.IMPOSSIBLE = "{#First/вн} невозможно запереть."
--"заперт"
mp.msg.Lock.LOCKED = "{#First} уже {#word/заперт,#first}."
--"закрыть"
mp.msg.Lock.OPEN = "Сначала необходимо закрыть {#first/вн}."
--"подходит"
mp.msg.Lock.WRONGKEY = "{#Second} не {#word/подходит,#second} к замку."
--"запирать"
mp.msg.Lock.LOCK = "{#Me} {#word/запирать,#me,нст} {#first/вн}."
mp.msg.Unlock.IMPOSSIBLE = "{#First/вн} невозможно отпереть."
--"заперт"
mp.msg.Unlock.NOTLOCKED = "{#First} не {#word/заперт,#first}."
--"подходит"
mp.msg.Unlock.WRONGKEY = "{#Second} не {#word/подходит,нст,#second} к замку."
--"отпирать"
mp.msg.Unlock.UNLOCK = "{#Me} {#word/отпирать,#me,нст} {#first/вн}."
mp.msg.Take.HAVE = "У {#me/вн} и так {#firstit} уже есть."
mp.msg.Take.TAKE = "{#Me} {#verb/take} {#first/вн}."
mp.msg.Take.SELF = "{#Me} есть у {#me/рд}."
--"находиться"
mp.msg.Take.WHERE = "Нельзя взять то, в/на чём {#me} {#word/находиться,#me}."
mp.msg.Take.LIFE = "{#First/дт} это вряд ли понравится."
--"закреплён"
mp.msg.Take.STATIC = "{#First} жестко {#word/закреплён,#first}."
mp.msg.Take.SCENERY = "{#First/вн} невозможно взять."
--"надет"
mp.msg.Take.WORN = "{#First} {#word/надет,#first} на {#firstwhere/вн}."
mp.msg.Take.PARTOF = "{#First} {#if_hint/#first,plural,являются,является} частью {#firstwhere/рд}."
mp.msg.Remove.WHERE = "{#First} не находится {#if_has/#second,supporter,на,в} {#second/пр,2}."
mp.msg.Remove.REMOVE = "{#First} {#if_has/#second,supporter,поднят,извлечён из} {#second/рд}."
mp.msg.Drop.SELF = "У {#me/рд} не хватит ловкости."
mp.msg.Drop.WORN = "{#First/вн} сначала нужно снять."
--"помещать"
mp.msg.Insert.INSERT = "{#Me} {#word/помещать,нст,#me} {#first/вн} в {#second/вн}."
mp.msg.Insert.CLOSED = "{#Second} {#word/закрыт,#second}."
mp.msg.Insert.NOTCONTAINER = "{#Second} не {#if_hint/#second,plural,могут,может} что-либо содержать."
mp.msg.Insert.WHERE = "Нельзя поместить {#first/вн} внутрь себя."
mp.msg.Insert.ALREADY = "Но {#first} уже и так {#word/находиться,#first} там."
mp.msg.PutOn.NOTSUPPORTER = "Класть что-либо на {#second/вн} бессмысленно."
--"класть"
mp.msg.PutOn.PUTON = "{#Me} {#word/класть,нст,#me} {#first/вн} на {#second/вн}."
mp.msg.PutOn.WHERE = "Нельзя поместить {#first/вн} на себя."
--"брошен"
mp.msg.Drop.DROP = "{#First} {#word/брошен,#first}."
mp.msg.ThrowAt.NOTLIFE = "Бросать {#first/вн} в {#second/вн} бесполезно."
mp.msg.ThrowAt.THROW = "У {#me/рд} не хватает решимости бросить {#first/вн} в {#second/вн}."
mp.msg.Wear.NOTCLOTHES = "Надеть {#first/вн} невозможно."
mp.msg.Wear.WORN = "{#First} уже на {#me/дт}."
--"надевать"
mp.msg.Wear.WEAR = "{#Me} {#word/надевать,#me,нст} {#first/вн}."
mp.msg.Disrobe.NOTWORN = "{#First} не на {#me/дт}."
--"снимать"
mp.msg.Disrobe.DISROBE = "{#Me} {#word/снимать,#me,нст} {#first/вн}."
mp.msg.SwitchOn.NONSWITCHABLE = "{#First/вн} невозможно включить."
--"включён"
mp.msg.SwitchOn.ALREADY = "{#First} уже {#word/включён,#first}."
--"включать"
mp.msg.SwitchOn.SWITCHON = "{#Me} {#word/включать,#me,нст} {#first/вн}."
mp.msg.SwitchOff.NONSWITCHABLE = "{#First/вн} невозможно выключить."
--"выключён"
mp.msg.SwitchOff.ALREADY = "{#First} уже {#word/выключён,#first}."
--"выключать"
mp.msg.SwitchOff.SWITCHOFF = "{#Me} {#word/выключать,#me,нст} {#first/вн}."
--"годится"
mp.msg.Eat.NOTEDIBLE = "{#First} не {#word/годится,#first} в пищу."
mp.msg.Taste.TASTE = "Никакого необычного вкуса нет."
--"съедать"
mp.msg.Eat.EAT = "{#Me} {#word/съедать,нст,#me} {#first/вн}."
mp.msg.Drink.IMPOSSIBLE = "Выпить {#first/вн} невозможно."
mp.msg.Push.STATIC = "{#First/вн} трудно сдвинуть с места."
mp.msg.Push.SCENERY = "{#First/вн} двигать невозможно."
mp.msg.Push.PUSH = "Ничего не произошло."
mp.msg.Pull.STATIC = "{#First/вн} трудно сдвинуть с места."
mp.msg.Pull.SCENERY = "{#First/вн} двигать невозможно."
mp.msg.Pull.PULL = "Ничего не произошло."
mp.msg.Turn.STATIC = "{#First/вн} трудно сдвинуть с места."
mp.msg.Turn.SCENERY = "{#First/вн} двигать невозможно."
mp.msg.Turn.TURN = "Ничего не произошло."
mp.msg.Wait.WAIT = "Проходит немного времени."
mp.msg.Touch.LIVE = "Не стоит давать волю рукам."
mp.msg.Touch.TOUCH = "Никаких необычных ощущений нет."
mp.msg.Touch.MYSELF = "{#Me} на месте."
mp.msg.Rub.RUB = "Тереть {#first/вн} бессмысленно."
mp.msg.Sing.SING = "С таким слухом и голосом как у {#me/рд} этого лучше не делать."
mp.msg.Give.MYSELF = "{#First} и так у {#me/рд} есть."
mp.msg.Give.GIVE = "{#Second/вн} это не заинтересовало."
mp.msg.Show.SHOW = "{#Second/вн} это не впечатлило."
mp.msg.Burn.BURN = "Поджигать {#first/вн} бессмысленно."
mp.msg.Burn.BURN2 = "Поджигать {#first/вн} {#second/тв} бессмысленно."
--"поверь"
mp.msg.Wake.WAKE = "Это не сон, а явь."
mp.msg.WakeOther.WAKE = "Будить {#first/вн} не стоит."
mp.msg.WakeOther.NOTLIVE = "Бессмысленно будить {#first/вн}."
mp.msg.PushDir.PUSH = "Передвигать это нет смысла."
mp.msg.Kiss.NOTLIVE = "Странное желание."
mp.msg.Kiss.KISS = "{#Firstit/дт} это может не понравиться."
mp.msg.Kiss.MYSELF = "Ну уж нет."
mp.msg.Think.THINK = "Отличная идея!"
mp.msg.Smell.SMELL = "Никакого необычного запаха нет."
mp.msg.Smell.SMELL2 = "Пахнет как {#first}."
mp.msg.Listen.LISTEN = "Никаких необычных звуков нет."
--"прислушаться"
mp.msg.Listen.LISTEN2 = "{#Me} {#word/прислушаться,#me,прш} к {#first/дт}. Никаких необычных звуков нет."
--"выкопать"
mp.msg.Dig.DIG = "{#Me} ничего не {#word/выкопать,#me,прш}."
mp.msg.Dig.DIG2 = "Копать {#first/вн} бессмысленно."
mp.msg.Dig.DIG3 = "Копать {#first/вн} {#second/тв} бессмысленно."
mp.msg.Cut.CUT = "Резать {#first/вн} бессмысленно."
mp.msg.Cut.CUT2 = "Резать {#first/вн} {#second/тв} бессмысленно."
mp.msg.Tear.TEAR = "Рвать {#first/вн} бессмысленно."
mp.msg.Tie.TIE = "Привязывать {#first/вн} бессмысленно."
mp.msg.Tie.TIE2 = "Привязывать {#first/вн} к {#second/дт} бессмысленно."
mp.msg.Blow.BLOW = "Дуть на/в {#first/вн} бессмысленно."
mp.msg.Attack.LIFE = "Агрессия к {#first/дт} неоправданна."
mp.msg.Attack.ATTACK = "Сила есть -- ума не надо?"
--"хотеть"
mp.msg.Sleep.SLEEP = "{#Me} не {#word/хотеть,#me,нст} спать."
mp.msg.Swim.SWIM = "Для этого здесь недостаточно воды."
mp.msg.Fill.FILL = "Наполнять {#first/вн} бессмысленно."
--"подпрыгивать"
mp.msg.Jump.JUMP = "{#Me} глупо {#word/подпрыгивать,#me,нст}."
mp.msg.JumpOver.JUMPOVER = "Прыгать через {#first/вн} бессмысленно."
--"находить"
mp.msg.Consult.CONSULT = "{#Me} не {#word/находить,#me,нст} ничего подходящего."
--"помахать"
mp.msg.WaveHands.WAVE = "{#Me} глупо {#word/помахать,прш,#me} руками."
mp.msg.Wave.WAVE = "{#Me} глупо {#word/помахать,прш,#me} {#first/тв}."
mp.msg.Talk.SELF = "Беседы не получилось."
--"уметь"
mp.msg.Talk.NOTLIVE = "{#First} не {#word/уметь,#first,нст} разговаривать."
--"отреагировать"
mp.msg.Talk.LIVE = "{#First} никак не {#word/отреагировать,#first}."
mp.msg.Tell.SELF = "Беседы не получилось."
--"безмолвен"
mp.msg.Tell.NOTLIVE = "{#First} {#word/безмолвен,#first}."
--"отреагировать"
mp.msg.Tell.LIVE = "{#First} никак не {#word/отреагировать,#first}."
--"нашёл"
mp.msg.Tell.EMPTY = "{#Me} не {#word/нашёл,#me,прш} что сказать."
--"отвечать"
mp.msg.Ask.NOTLIVE = "Ответа не последовало."
--"ответить"
mp.msg.Ask.LIVE = "{#First} не {#word/ответить,прш,#first}."
--"придумать"
mp.msg.Ask.EMPTY = "{#Me} не {#word/придумать,#me,прш} что спросить."
mp.msg.Ask.SELF = "Хороший вопрос."
--"отвечать"
mp.msg.Answer.NOTLIVE = "Ответа не последовало."
--"ответить"
mp.msg.Answer.LIVE = "{#First} не {#word/ответить,прш,#first}."
--"придумать"
mp.msg.Answer.EMPTY = "{#Me} не {#word/придумать,#me,прш} что ответить."
mp.msg.Answer.SELF = "Хороший ответ."
mp.msg.Yes.YES = "Вопрос был риторическим."
mp.msg.Use.USE = "Как именно?"
--"продаваться"
mp.msg.Buy.BUY = "{#First} не {#word/продаваться,нст,#first}."
mp.keyboard_space = '<пробел>'
mp.keyboard_backspace = '<удалить>'
mp.msg.verbs.take = -"брать,#me,нст"
mp.msg.GAMEOVER_HELP = [[Чтобы начать заново, введите рестарт.]];
local function dict(t, hint)
local g = std.split(hint, ",")
for _, v in ipairs(g) do
if t[v] then
return t[v]
end
end
end
function mp:myself(_, hint)
local ww = dict({
["вн"] = "себя";
["дт"] = "себе";
["тв"] = "собой";
["пр"] = "себе";
["рд"] = "себя";
}, hint)
return { ww }
end
function mp:it(w, hint)
hint = hint or ''
if w:hint'plural' then
return mp.mrd:noun(-"они/"..hint)
elseif w:hint'neuter' then
return mp.mrd:noun(-"оно/"..hint)
elseif w:hint'female' then
return mp.mrd:noun(-"она/"..hint)
end
return mp.mrd:noun(-"он/"..hint)
end
function mp:synonyms(w, hint)
local nt = {
['его'] = 'него';
['её'] = 'неё';
['ее'] = 'нее';
['ей'] = 'ней';
['им'] = 'ним';
['ими'] = 'ними';
['их'] = 'них';
['ему'] = 'нему';
}
local t = self:it(w, hint)
return { t, nt[t] }
end
mp.keyboard = {
'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й',
'К','Л','М','Н','О','П','Р','О','С','Т','У','Ф',
'Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я'
}
local function hints(w)
local h = std.split(w, ",")
local ret = {}
for _, v in ipairs(h) do
ret[v] = true
end
return ret
end
function mp:err_noun(noun)
if noun == '*' then return "{$fmt em|<любое слово>}" end
local hint = std.split(noun, "/")
local rc = "{$fmt em|"
if #hint == 2 then
local h = hints(hint[2])
local acc = 'кто/что'
if h["им"] then
acc = 'кто/что'
elseif h["рд"] then
acc = 'кого/чего'
elseif h["дт"] then
acc = 'кому/чему'
elseif h["вн"] then
acc = 'кого/что'
elseif h["тв"] then
acc = 'кем/чем'
elseif h["пр"] or h["пр2"] then
acc = 'ком/чём'
end
rc = rc .. acc
else
rc = rc .. "кто/что"
end
rc = rc .. "}"
return rc
end
function mp.shortcut.vo(hint)
return "в ".. hint
-- local w = std.split(hint)
-- w = w[#w]
-- if mp.utf.len(w) > 2 and
-- (lang.is_vowel(utf.char(w, 1)) or
-- lang.is_vowel(utf.char(w, 2))) then
-- return "в ".. hint
-- end
-- return "во ".. hint
end
function mp.shortcut.so(hint)
return "с ".. hint
-- local w = std.split(hint)
-- w = w[#w]
-- if mp.utf.len(w) > 2 and
-- (lang.is_vowel(utf.char(w, 1)) or
-- lang.is_vowel(utf.char(w, 2))) then
-- return "с ".. hint
-- end
-- return "со ".. hint
end
function mp:before_Enter(w)
if mp:compass_dir(w) then
mp:xaction("Walk", w)
return
end
return false
end
mp.msg.HELP = [[{$fmt b|КАК ИГРАТЬ?}^^
Вводите ваши действия в виде простых предложений вида: глагол -- существительное. Например:^
> открыть дверь^
> отпереть дверь ключом^
> идти на север^
> взять кепку^
^
Чтобы снова увидеть описание обстановки, введите "осмотреть", "осм" или просто нажмите "ввод".^
^
Чтобы осмотреть предмет, введите "осмотреть книгу" или просто "книга".^
^
Попробуйте "осмотреть себя" и узнать, кто вы.^
^
Чтобы узнать какие предметы у вас с собой, наберите "инвентарь" или "инв".^
^
Для перемещений используйте стороны света, например: "идти на север" или "север" или просто "с".^
Кроме сторон света можно перемещаться вверх ("вверх" или "вв") и вниз ("вниз" или "вн").
^^
Вы можете воспользоваться клавишей "TAB" для автодополнения ввода.
]]
function mp.token.compass1(_)
return "{noun_obj}/@n_to,compass|{noun_obj}/@ne_to,compass|{noun_obj}/@e_to,compass|{noun_obj}/@se_to,compass|{noun_obj}/@s_to,compass|{noun_obj}/@sw_to,compass|{noun_obj}/@w_to,compass|{noun_obj}/@nw_to,compass"
end
function mp.token.compass2(_)
return "{noun_obj}/@u_to,compass|{noun_obj}/@d_to,compass|{noun_obj}/@in_to,compass|{noun_obj}/@out_to,compass"
end
function mp.shortcut.pref1()
return '[по|подо|за|во|про]'
end
function mp.shortcut.pref2()
return '[по|под|за|в|про]'
end
function mp.shortcut.pref3()
return 'по|подъ|за|въ|про'
end
std.mod_init(function(_)
Verb { "#Walk",
"идти,{#pref1}йти,{#pref1}йди,иди,бежать,{#pref2}бежать,бег/и,{#pref2}бег/и,влез/ть,"..
"[|{#pref3}]ехать,едь,сесть,сядь,лечь,ляг,[в|]стать,[в|]стан/ь",
"на {compass1} : Walk",
"на|в|во {noun}/вн,scene,enterable : Enter",
"внутрь {noun}/рд,scene,enterable : Enter",
"к {noun}/дт,scene : Walk",
"{compass2}: Walk" }
Verb { "#Exit",
"[вы|у]йти,выйд/и,уйд/и,вылез/ти,выхо/ди,обратно,назад,выбраться,выберись,выбираться",
"из|с|со {noun}/рд,scene : Exit",
"в|через|на {noun}/вн,scene,enterable : Enter",
"?наружу : Exit" }
Verb { "#Exam",
"[о| |по|рас]смотр/еть,[раз|по]гляд/еть",
"?на {noun}/вн : Exam",
" : Look",
"инвентарь : Inv",
"~ под {noun}/тв : LookUnder",
"~ под {noun}/вн : LookUnder",
"~ в|во|на {noun}/пр,2 : Search",
"~ внутри {noun}/рд : Search",
"~ в|во {noun}/вн : Search",
"~ в|во {noun}/пр,2 о|об|обо|про * : Consult",
"~ о|об|обо|про * в|во {noun}/пр,2 : Consult reverse",
}
Verb { "#Search",
"[|по]искать,обыскать,[|по]ищ/и,обыщ/и,[|по]изуч/ать,[|по]исслед/овать",
"{noun}/вн : Search",
"в|во|на {noun}/пр,2 : Search",
"под {noun}/тв : LookUnder",
"~ в|во {noun}/пр,2 * : Consult",
"~ * в|во {noun}/пр,2 : Consult reverse",
}
Verb { "#Open",
"откр/ыть,распах/нуть,раскр/ыть,отвори/ть",
"{noun}/вн : Open",
"{noun}/вн {noun}/тв,held : Unlock",
"~ {noun}/тв,held {noun}/вн : Unlock reverse",
}
Verb { "#Unlock",
"отпереть,отопр/и",
"{noun}/вн {noun}/тв,held : Unlock",
"~ {noun}/тв,held {noun}/вн : Unlock reverse",
}
Verb { "#Close",
"закр/ыть",
"{noun}/вн : Close",
"{noun}/вн {noun}/тв,held : Lock",
"~ {noun}/вн на {noun}/вн,held : Lock",
"~ {noun}/тв,held {noun}/вн : Lock reverse",
}
Verb { "#Lock",
"запереть",
"{noun}/вн {noun}/тв,held : Lock",
"~ {noun}/вн на {noun}/вн,held : Lock",
"~ {noun}/тв,held {noun}/вн : Lock reverse",
}
Verb { "#Inv",
"инв/ентарь,с собой",
"Inv" }
function mp.shortcut.pref4()
return '[ |за|подо]'
end
function mp.shortcut.pref5()
return '[ |за|под]'
end
Verb { "#Take",
"взять,возьм/и,{#pref4}брать,{#pref5}бер/и,доста/ть,схват/ить,"..
"украсть,украд/и,извле/чь,вын/уть,вытащ/ить",
"{noun}/вн,scene : Take",
"{noun}/вн,scene из|с|со|у {noun}/рд,inside,holder: Remove",
"~ из|с|со|у {noun}/рд,inside,holder {noun}/вн,scene: Remove reverse",
}
Verb { "#Drop",
"полож/ить,постав/ить,посади/ть,класть,клади/,помест/ить,"..
"[|про|за]сун/уть,воткн/уть,втык/ать,вставить,вставь/,влож/ить",
"{noun}/вн,held : Drop",
"{noun}/вн,held в|во {noun}/вн,inside : Insert",
"~ {noun}/вн,held внутрь {noun}/рд : Insert",
"{noun}/вн,held на {noun}/вн : PutOn",
"~ в|во {noun}/вн {noun}/вн : Insert reverse",
"~ внутрь {noun}/рд {noun}/вн : Insert reverse",
"~ на {noun}/вн {noun}/вн : PutOn reverse",
}
Verb {
"#ThrowAt",
"брос/ить,выбро/сить,кин/уть,кида/ть,швыр/нуть,метн/уть,метать",
"{noun}/вн,held : Drop",
"{noun}/вн,held в|во|на {noun}/вн : ThrowAt",
"~ в|во|на {noun}/вн {noun}/вн : ThrowAt reverse",
"~ {noun}/вн {noun}/дт : ThrowAt",
"~ {noun}/дт {noun}/вн : ThrowAt reverse",
}
Verb {
"#Wear",
"наде/ть,оде/ть",
"{noun}/вн,held : Wear",
}
Verb {
"#Disrobe",
"снять,сним/ать",
"{noun}/вн,worn : Disrobe",
"~ {noun}/вн с|со {noun}/рд : Remove",
"~ с|со {noun}/рд {noun}/вн : Remove reverse"
}
Verb {
"#SwitchOn",
"включ/ить,вруб/ить,активи/ровать",
"{noun}/вн : SwitchOn",
}
Verb {
"#SwitchOff",
"выключ/ить,выруб/ить,деактиви/ровать",
"{noun}/вн : SwitchOff",
}
Verb {
"#Eat",
"есть,съе/сть,куша/ть,скуша/ть,сожр/ать,жри,жрать,ешь",
"{noun}/вн,held : Eat",
}
Verb {
"#Taste",
"лизать,лизн/уть,попроб/овать,полиз/ать,сосать,пососа/ть",
"{noun}/вн : Taste"
}
Verb {
"#Drink",
"пить,выпить,выпей,выпью,пью",
"{noun}/вн,held : Drink",
}
function mp.shortcut.pref6()
return 'с|по|пере|за'
end
Verb {
"#Push",
"толк/ать,пих/ать,нажим/ать,нажм/и,нажать,[{#pref6}]двин/уть,[|{#pref6}]двига/ть,"..
"запих/нуть,затолк/ать,[|на]давить",
"?на {noun}/вн : Push",
"{noun}/вн на|в|во {noun}/вн : Transfer",
"~ {noun}/вн к {noun}/дт : Transfer",
"{noun}/вн {compass2} : Transfer",
"~ на|в|во {noun}/вн {noun}/вн : Transfer reverse",
"~ {compass2} {noun}/вн : Transfer reverse"
}
Verb {
"#Pull",
"[|вы|по]тян/уть,[|вы|по]тащ/ить,тягать,[|по]волоч/ь,[|по]волок/ти,дёрн/уть,дёрг/ать",
"?за {noun}/вн : Pull",
"{noun}/вн на|в|во {noun}/вн : Transfer",
"~ {noun}/вн к {noun}/дт : Transfer",
"{noun}/вн {compass2} : Transfer",
"~ на|в|во {noun}/вн {noun}/вн : Transfer reverse",
"~ {compass2} {noun}/вн : Transfer reverse"
}
Verb {
"#Turn",
"враща/ть,поверн/уть,верт/еть,поверт/еть,крути/ть",
"{noun}/вн : Turn"
}
Verb {
"#Wait",
"ждать,жди,подожд/ать,ожид/ать",
"Wait"
}
function mp.shortcut.pref7()
return 'за|по|про|пере|вы'
end
Verb {
"#Rub",
"[|{#pref7}]тереть,[|{#pref7}]три/,[{#pref7}]тира/ть,",
"{noun}/вн : Rub"
}
Verb {
"#Sing",
"[|с]петь,спой/,пой",
"Sing"
}
Verb {
"#Touch",
"[ |по]трога/ть,трон/уть,дотрон/уться,[ |при]косну/ться,касать/ся,[ |по|о]щупа/ть,[ |по]глад/ить",
"{noun}/вн : Touch",
"~ до {noun}/рд : Touch",
"~ к {noun}/дт : Touch",
"~ {noun}/рд : Touch",
}
Verb {
"#Give",
"дать,отда/ть,предло/жить,предла/гать,дам,даю,дадим",
"{noun}/вн,held {noun}/дт,live : Give",
"~ {noun}/дт,live {noun}/вн,held : Give reverse",
}
Verb {
"#Show",
"показ/ать,покаж/и",
"{noun}/вн,held {noun}/дт,live : Show",
"~ {noun}/дт,live {noun}/вн,held : Show reverse",
}
Verb {
"#Burn",
"[|под]жечь,жг/и,подожги/,поджиг/ай,зажг/и,зажиг/ай,зажечь",
"{noun}/вн : Burn",
"{noun}/вн {noun}/тв,held : Burn",
"~ {noun}/тв,held {noun}/вн reverse",
}
Verb {
"#Wake",
"будить,разбуд/ить,просн/уться,бужу",
"{noun}/вн,live : WakeOther",
"Wake",
}
Verb {
"#Kiss",
"целовать,поцел/овать,чмок/нуть,обним/ать,обнять,целуй",
"{noun}/вн,live : Kiss"
}
Verb {
"#Think",
"дума/ть,мысл/ить,подум/ать,рассужд/ать",
"Think"
}
Verb {
"#Smell",
"нюха/ть,понюха/ть,занюх/ать,нюхн/уть,принюх/аться",
"Smell",
"{noun}/вн : Smell"
}
Verb {
"#Listen",
"слуша/ть,послуша/ть,прислушать/ся,слыш/ать,слух/",
"Listen",
"{noun}/вн : Listen",
"~ к {noun}/дт : Listen",
}
Verb {
"#Dig",
"копа/ть,выкопа/ть,выры/ть,рыть,рой,вырой",
"Dig",
"{noun}/вн,scene : Dig",
"{noun}/вн,scene {noun}/тв,held : Dig",
"~ {noun}/тв,held {noun}/вн,scene : Dig reverse",
}
function mp.shortcut.pref8()
return '[|раз|на|по|от|пере|вы]'
end
Verb {
"#Cut",
"{#pref8}рез/ать,{#pref8}реж/ь",
"{noun}/вн : Cut",
"{noun}/вн {noun}/тв,held: Cut",
"~ {noun}/тв,held {noun}/вн: Cut reverse"
}
function mp.shortcut.pref9()
return '[ |по|разо|со]'
end
Verb {
"#Tear",
"{#pref9}рвать,{#pref9}рви/,{#pref9}рву",
"{noun}/вн : Tear",
}
Verb {
"#Tie",
"[при|с]вяз/ать,[при|с]вяж/и",
"{noun}/вн : Tie",
"{noun}/вн к {noun}/дт : Tie",
"~ {noun}/вн с|со {noun}/тв : Tie",
"~ к {noun}/дт {noun}/вн : Tie reverse",
"~ с|со {noun}/тв {noun}/вн : Tie reverse",
}
Verb {
"#Blow",
"дуть,дуй/,дун/ь,задут/ь,задун/ь,задуй/",
"в|во|на {noun}/вн : Blow",
"~ {noun}/вн : Blow", -- задуть
}
Verb {
"#Attack",
"атак/овать,[|у|вы|раз|по|выши]бить,[|по|раз]бей/,удар/ить,"..
"[|с|раз|по|вы|вз]лома/ть,разруш/ить,побь/,круш/ить,напасть,напад/ать,пнуть",
"?на {noun}/вн : Attack"
}
Verb {
"#Sleep",
"спать,усн/уть,засн/уть,дрем/ать",
"Sleep",
}
Verb {
"#Swim",
"плыть,плав/ать,ныря/ть,уплы/ть,поплы/ть,нырн/уть,[ |ис]купа/ться",
"Swim",
}
Verb {
"#Consult",
"[|про|по]чита/ть,проч/есть",
"в|во {noun}/пр,2 о|об|обо|про * : Consult",
"~ о|об|обо|про * в|во {noun}/пр,2 : Consult reverse",
"~ {noun}/вн : Exam",
}
Verb {
"#Fill",
"наполн/ить,нали/ть",
"?в {noun}/вн : Fill",
"~ внутрь {noun}/рд : Fill"
}
Verb {
"#Jump",
"[|по]прыг/ать,скак/ать,[|пере|под]прыг/нуть,переско/чить",
"Jump",
"через {noun}/вн,scene : JumpOver",
"~ в {noun}/вн,scene : Enter",
"~ на {noun}/вн,scene : Climb",
"~ с|со {noun}/рд,scene : GetOff",
"~ {compass2} : Walk",
"~ +через {noun}/вн,scene : JumpOver",
}
Verb {
"#Wave",
"[|по]мах/ать,взмахн/уть,помаш/и",
"WaveHands",
"~ руками : WaveHands",
"{noun}/тв,held : Wave"
}
Verb {
"#Climb",
"[|за|по|про|в]лез/ть,карабк/аться,взбир/ться,взобраться,взбери/сь",
"на {noun}/вн,scene : Climb",
"по {noun}/дт,scene : Climb",
"~ внутрь {noun}/рд,scene : Enter",
"~ в|во {noun}/вн,scene : Enter",
"{compass2}: Walk",
}
Verb {
"#GetOff",
"слез/ть,спусти/ться,встать,встан/ь",
"GetOff",
"{compass2}: Walk",
"с|со {noun}/рд,scene : GetOff",
}
Verb {
"#Buy",
"купи/ть,покупать",
"{noun}/вн,scene : Buy"
}
Verb {
"#Talk",
"[|по]говор/ить,[|по]бесед/овать,разговарива/ть",
"с|со {noun}/тв,live : Talk"
}
Verb {
"#Tell",
"сказать,сообщи/ть,сообщу,рассказать,расскаж/ите",
"{noun}/дт,live о|об|обо|про * : Tell",
"~ * {noun}/дт,live : Tell reverse",
"~ {noun}/дт * : AskTo",
}
Verb {
"#Ask",
"спросит/ь,расспросит/ь",
"{noun}/вн,live о|об|обо|про * : Ask",
"~ у {noun}/рд,live о|об|обо|про * : Ask",
"~ о|об|обо|про * у {noun}/рд,live : Ask reverse",
}
Verb {
"#AskFor",
"попроси/ть,выпроси/ть,уговори/ть,проси/ть,попрош/у,выпрош/у",
"у {noun}/рд,live * : AskFor",
"* у {noun}/рд,live : AskFor reverse",
"~ {noun}/вн,live * : AskTo",
}
Verb {
"#Answer",
"ответ/ить,отвеч/ать",
"{noun}/дт,live * : Answer",
"~ * {noun}/дт,live : Answer reverse",
}
Verb {
"#Yes",
"да",
"Yes",
}
Verb {
"#No",
"нет",
"No",
}
Verb {
"~ использ/овать,воспольз/оваться",
"{noun}/вн : Use",
"{noun}/тв : Use",
}
if DEBUG then
MetaVerb {
"#MetaWord",
"~_слово",
"* : MetaWord"
}
MetaVerb {
"#MetaNoun",
"~_сущ/ествительное",
"* : MetaNoun"
}
MetaVerb {
"#MetaTrace",
"~_трассировка",
"да : MetaTraceOn",
"нет : MetaTraceOff",
}
MetaVerb {
"#MetaDump",
"~_дамп",
"MetaDump"
}
end
MetaVerb {
"#MetaTranscript",
"~транскрипт",
"да : MetaTranscriptOn",
"нет : MetaTranscriptOff",
"MetaTranscript",
}
MetaVerb {
"#MetaExpert",
"~парсер",
"эксперт да : MetaExpertOn",
"эксперт нет : MetaExpertOff",
}
MetaVerb {
"#MetaSave",
"~сохрани/ть",
"MetaSave"
}
MetaVerb {
"#MetaLoad",
"~загрузи/ть",
"MetaLoad"
}
if DEBUG then
MetaVerb {
"#MetaAutoplay",
"~автоскрипт",
"MetaAutoplay"
}
end
mp.msg.MetaRestart.RESTART = "Начать заново?";
MetaVerb {
"#MetaRestart",
"~заново,~рестарт",
"MetaRestart"
}
MetaVerb {
"#MetaHelp",
"~помощь,помоги/те",
"MetaHelp",
}
end, 1)
std.mod_start(function()
if mp.undo > 0 then
mp.msg.MetaUndo.EMPTY = "Отменять нечего."
MetaVerb {
"#MetaUndo",
"~отмен/ить",
"MetaUndo",
}
end
end)
-- Dialog
std.phr.default_Event = "Exam"
Verb ({"~ сказать", "{select} : Exam" }, std.dlg)
Verb ({'#Next', "дальше", "Next" }, mp.cutscene)
Verb ({'#Exam', "~ осмотреть", "Look" }, std.dlg)
mp.cutscene.default_Verb = "дальше"
mp.cutscene.help = fmt.em "<дальше>";
std.dlg.default_Verb = "осмотреть"
std.player.word = -"ты/мр,2л"