diff --git a/autoscript b/autoscript index 8098c1b..3a3c035 100644 --- a/autoscript +++ b/autoscript @@ -21,6 +21,15 @@ вырезать В из рукава вставить руку в робота включить робота +выключить робота +включить робота вырезать К из булавки -вырезать Т из щита +выйти юг +осмотреть дверь +вырезать Т из щита +осмотреть дверь +вырезать И из щи +съесть щи +выйти +открыть дверь diff --git a/custom_parser.lua b/custom_parser.lua index 784e572..c81bbe1 100644 --- a/custom_parser.lua +++ b/custom_parser.lua @@ -10,18 +10,22 @@ mp.msg.Open.OPEN = "{#You} {#g/открываешь,открываете} {#firs mp.msg.Open.CLOSE = "{#You} {#g/закрываешь,закрываете} {#first/вн}." mp.msg.Take.HAVE = "У {#you/вн} и так {#firstit} уже есть." mp.msg.Take.SELF = "{#You} есть у {#you/рд}." +mp.msg.Take.TAKE = '{#You} {#g/берёшь,берёте} {#first/вн}.'; mp.msg.Drop.SELF = "У {#you/рд} не хватит ловкости." mp.msg.Insert.INSERT = "{#You} {#g/кладёшь,кладёте} {#first/вн} в {#second/вн}." mp.msg.PutOn.PUTON = "{#You} {#g/кладёшь,кладёте} {#first/вн} на {#second/вн}." mp.msg.SwitchOn.SWITCHON = "{#You} {#g/включаешь,включаете} {#first/вн}." mp.msg.SwitchOff.SWITCHOFF = "{#You} {#g/выключаешь,выключаете} {#first/вн}." mp.msg.Sing.SING = "Это лучше оставить оперным певцам." +mp.msg.SwitchOn.SWITCHON = "{#You} {#g/включаешь,включаете} {#first/вн}." mp.msg.Smell.SMELL = "Запах очень забытых вещей." mp.msg.Smell.SMELL2 = "Не {#g/волнуйся,волнуйтесь}, у {#you/рд} не пропало чувство запаха. Просто это ничем особенным не пахнет." mp.msg.Taste.TASTE = "Не {#g/волнуйся,волнуйтесь}, у {#you/рд} не пропало чувство вкуса. Просто это не съедобно."; mp.msg.Sleep.SLEEP = "Не спится." mp.msg.Jump.JUMP = "Прыг-скок. Не помогает." mp.msg.Consult.CONSULT = "{#You} не {#g/находишь,находите} ничего подходящего." +mp.msg.Cut.CUT = "Резать {#first/вн} бессмысленно." +mp.msg.Cut.CUT2 = "Резать {#first/вн} {#second/тв} бессмысленно." local function split(s, sep) if sep == nil then @@ -176,12 +180,34 @@ function mp:SetShoot(what, letter) if newTarget then what:remove(); put(newTarget, here()); - pn('Вы стреляете в '.. what:noun'вн' ..',и '..what:it('им')..' вырезается в '..newCanonical..'.'); + p('Вы стреляете в '.. what:noun'вн' ..', и '..what:it('им')..' '); + if what:hint'plural' then + p 'вырезаются' + else + p 'вырезается' + end + pn (' в '..newCanonical..'.'); if newTarget.oncreate ~= nil then newTarget.oncreate() end return; end - return 'Вы стреляете в '.. what:noun'вн' ..' и '..what:it('им')..' мигает в слабом тумане букв «'..newCanonical..'», но затем возвращается в прежнее состояние.'; + local retval = ('{#You} {#g/стреляешь,стреляете} в '.. what:noun'вн' .. ' и '..what:it('им')..' '); + + if what:hint'plural' then + retval = retval .. 'мигают' + else + retval = retval .. 'мигает' + end + retval = retval .. ' в слабом тумане букв «'..newCanonical..'», но затем '; + + if what:hint'plural' then + retval = retval .. 'возвращаются' + else + retval = retval .. 'возвращается' + end + + retval = retval .. ' в прежнее состояние.'; + return retval; end diff --git a/main3.lua b/main3.lua index 5eaf7cf..b306cb3 100644 --- a/main3.lua +++ b/main3.lua @@ -1,5 +1,5 @@ --$Name: Полёт в Петербург$ ---$Version: 1.2.3$ +--$Version: 1.2.4$ --$Author:Александр Яковлев$ require "fmt" @@ -29,7 +29,7 @@ end global { score = 0, - maxscore = 2 + maxscore = 3 } game.dsc = '' player.description = "Здесь нет зеркал. Но хотя бы ноги выглядят прекрасно."; diff --git a/rooms/objects.lua b/rooms/objects.lua index 159b831..d650cd8 100644 --- a/rooms/objects.lua +++ b/rooms/objects.lua @@ -18,7 +18,7 @@ obj { canonical = 'щи'; nam = 'shi'; description = 'Тарелка с остывшими щами. Выглядит не очень аппетитно.'; -} +}: attr 'edible' obj { -"пластина/жр"; diff --git a/rooms/pantry.lua b/rooms/pantry.lua index e7c6689..f4f1c23 100644 --- a/rooms/pantry.lua +++ b/rooms/pantry.lua @@ -88,6 +88,10 @@ obj { inv = function(s) return s.letter..'-вырезатель' end; + before_Take = function() + p '{#You} {#g/берёшь,берёте} пистолет.'; + return false; + end; before_Shoot = 'Не {#plural/размахивай,размахивайте} этой штукой! Её надо направить во что-то определённое.'; }: dict { ['вырезатель/рд'] = 'вырезателя'; @@ -98,10 +102,16 @@ obj { }: attr 'essential' obj { - -"робот,уборщик/мр,ед"; + -"робот,уборщик,робот-уборщик/мр,ед"; nam = 'robot'; description = function(s) - p 'У стенки стоит выключенный робот-уборщик. У него '; + p 'У стенки стоит '; + if live(s) then + p 'включённый'; + else + p 'выключенный'; + end + p ' робот-уборщик. У него '; if not (s:srch('hand')) then p 'длинное щупальце как один из манипуляторов, пустое гнездо вместо второго ' else @@ -110,6 +120,9 @@ obj { pn 'и широкие стальные гусеницы.'; end; before_SwitchOn = function(s) + if live(s) then + return 'Робот уже включён.'; + end if not (s:srch('battery')) then p "Над кнопкой включения загорается сообщение: нет батареи."; return true; @@ -119,8 +132,11 @@ obj { return true; end lifeon('robot'); - return "Робот включается и начинает тихо бурчать. Наверное, оценивает чистоту чулана."; + givepoint(); + pn "Робот включается и начинает тихо бурчать. Наверное, оценивает чистоту чулана."; + return false; end; + before_SwitchOff = 'Пусть работает, хоть не так одиноко.'; life = function() if here().dirty then pn '«ВНИМАНИЕ. ОБНАРУЖЕНА ГРЯЗЬ. НЕОБХОДИМА ИНСПЕКЦИЯ.»'; @@ -148,7 +164,7 @@ obj { }: attr 'essential,scenery,open,switchable,container' obj { - -"сейф/мр"; + -"сейф,маленький сейф/мр"; nam = 'safe'; dsc = 'Напротив стоит маленький сейф.'; before_Close = function(s) @@ -165,15 +181,15 @@ obj { 'letterremover', } }: dict { - ['робот/рд'] = 'робота'; - ['робот/дт'] = 'роботу'; - ['робот/вн'] = 'робота'; - ['робот/тв'] = 'роботом'; - ['робот/пр'] = 'роботе'; + ['сейф/рд'] = 'сейфа'; + ['сейф/дт'] = 'сейфу'; + ['сейф/вн'] = 'сейфа'; + ['сейф/тв'] = 'сейфом'; + ['сейф/пр'] = 'сейфе'; }: attr 'essential,static,container,openable,locked' obj { - -"коробка,коробчонка,коробочка/жр|коробочек/мр"; + -"коробка,маленькая коробка,коробчонка,коробочка/жр|коробочек/мр"; nam = 'box'; found_in = 'pantry'; dsc = 'Возле робота лежит маленькая коробка.'; @@ -193,7 +209,7 @@ obj { }: attr 'container,female,openable'; obj { - -"батарея,батарейка/жр"; + -"батарея,маленькая батарея,батарейка/жр"; nam = 'battery'; dsc = function(s) if s:inside('box') then @@ -228,7 +244,7 @@ obj { }: attr 'essential' obj { - -"кнопка/мр|выключатель/мр"; + -"кнопка,кнопка включения/жр|выключатель/мр"; nam = 'button'; description = 'Кнопка включения робота. Ничего примечательного.'; }: attr 'essential,scenery,switchable' @@ -255,7 +271,7 @@ obj { } obj { - -"стенд/мр"; + -"пожарный стенд,стенд/мр"; nam = 'stand'; dsc = 'На стене покосился пожарный стенд.'; canonical = 'стенд';