-- Доступное пространство имён для объектов - все имена объектов должны начинаться с "room14_" или "secondfloor_" -- Все описания можно менять -- Задача: Игрок должен найти в локации предмет bonekey, а также открыть проход на восток в спальню предметом circlekey и на запад в таинственную комнату предметом piramidekey, изначально проходы должны быть перекрыты -- Игрок может придти в локацию как с одним и обоими ключами, так и без них, и иметь возможность спустится вниз или поднятся наверх --e_to = 'room15_bedroom'; --w_to = 'room16_mystical'; obj { -"пирамидальный ключ, ключ|пирамидка, пирамидка с письменами, письмена"; nam = "piramidekey"; description = "Пирамидальный ключ. Небольшая деревянная треугольная пирамидка. С древними письменами на ней."; inv = "пирамидальный ключ"; -- found_in = {'room14_secondfloor'} score=false; after_Take = function(s) if not s.score then mp.score=mp.score+1; end; _'piramidekey'.score=true; return false; end; } obj { -"круглый ключ, ключ|ригельный ключ"; nam = "circlekey"; description = "Круглый ключ. Толстый стальной ригельный. Сантиметров шестнадцать в длину. Увесистый."; inv = "круглый ключ"; -- found_in = {'room14_secondfloor'}; found_in = { 'room17_keyhole' }; score=false; after_Take = function(s) if not s.score then mp.score=mp.score+1; end; _'circlekey'.score=true; return false; end; } room { -"коридор/мр|комната/жр|второй этаж, этаж"; nam = "room14_secondfloor"; title = "Второй этаж. Коридор."; dsc = function(s) _'room14_secondfloor'.scope:add("room14_floor"); pr"В одном конце широкого коридора лестница," if _"room14_plan".seen == true or _"room17_cherdak":visited() then pr" ведущая на чердак."; else pr" ведущая наверх."; end pr" Рядом с лестницей стоит стальная напольная вешалка" if _"room14_dress".worn == true then pr", на которой висит моя одежда. "; else pr", на которой висит вечернее платье. "; end p[[В противоположном конце — лестница, ведущая вниз, в зал. Справа по коридору]]; if _"room14_platform".door == true then p[[проход]]; if _"room14_plan".seen == true or _'room16_mystical':visited() then p"в таинственную комнату. C правой стороны от прохода висит картина."; else p"на запад. C правой стороны от прохода висит картина."; end else p[[деревянная дверь, ведущая]] if _"room14_plan".seen == true or _'room16_mystical':visited() then p"в таинственную комнату. C правой стороны от двери висит картина."; else p"на запад. C правой стороны от двери висит картина." end end if _"room14_drawer".moving == false then pr[[Под картиной находится громоздкий комод. На комоде стоит стеклянная витрина. ]]; end pr[[Слева по коридору посреди стены большое двухметровое зеркало. ]]; if _"room14_hole".door == true and _"room14_door1".seen == true then pr" Справа от него проход"; if _"room14_plan".seen == true or _"room15_bedroom":visited() then pr" в спальню "; else pr" на восток "; end p"и стальная дверь, скрывшаяся в стене."; elseif _"room14_door1".seen == true then pr"Справа от него стальная дверь, скрывшаяся в стене. "; end p[[Справа от зеркала — женский манекен.]]; if _"room14_carpet".moving == true then p[[На полу лежит свёрнутый роскошный персидский ковёр.]]; if _"room14_drawer".moving == true then p"На пластине в центре пола стоит комод. На комоде стоит стеклянная витрина."; else p"В центре пола находится пластина."; end else if _"room14_drawer".moving == true then p[[На полу лежит роскошный персидский ковёр, на котором стоит комод. На комоде стоит стеклянная витрина.]]; else p[[На полу лежит роскошный персидский ковёр.]]; end end if _"room14_glove".seen == false then p"Кажется, из-под ковра что-то торчит."; else p"Из-под ковра торчит перчатка горничной."; end p[[Недалеко от зеркала на стене]]; if _"room14_plan".seen == false then p 'какая-то схема.'; else p 'план комнаты.^ На востоке, судя по схеме, должна быть спальня. А на западе — таинственная комната. Внизу на первом этаже — зал. А лестница в конце коридора ведёт наверх, на чердак.'; end end; before_Attack = function(s) p"Ты не собираешься ничего ломать в доме тёти. Конечно, ты немного ей завидуешь, но не настолько."; end; before_Walk = function(s, ev) if _"room14_dress".worn then return "Ты не можешь разгуливать по дому в чужом платье. Тем более, в таком неудобном."; elseif ev == _'@e_to' and _"room14_hole".door ~= true then p"Этот путь не доступен."; elseif ev == _'@w_to' and _"room14_platform".door ~= true then p"Этот путь не доступен"; elseif pl:have(_"room14_box1") or pl:have(_"room14_box2") then p"Ты думаешь, что тебе совершенно незачем таскать с собой ящик комода."; elseif pl:have(_"room14_report") then p"Ты думаешь, что тебе совершенно незачем таскать с собой папку с бумагами."; else return false end end; before_Take = function (s, w) if w == _'@all' then p"Тут слишком много всего. Нужно выбрать что-то одно."; else return false end end; before_Remove = function(s,w,wh) if wh == _'room14_floor' then mp:xaction('Take', w); else return false; end; end; e_to = ''; w_to = ''; compass_look = function(s,dir) p 'Не стоит заглядываться по сторонам, лучше сосредоточиться на том что происходит в комнате.'; end; d_to = 'room10_zal'; u_to = 'room17_cherdak'; before_Listen = "Ничего не слышно."; scope = { }; }: with {'room14_wardrobe', 'room14_door', 'room14_carpet', 'room14_plan', 'room14_stairs', 'room14_ladder', 'room14_dress', 'room14_cloth', 'room14_mirror', 'room14_dummy', 'room14_picture', 'room14_drawer', 'room14_showcase', 'room14_walls','room14_ceiling'} -- Менять нельзя!!!! Это не ваш предмет!!! Вы не знаете как он выглядит, его придумает другой автор!!! --obj { -- -"костяной ключ,ключ"; -- nam = "bonekey"; -- description = "Костяной ключ"; -- found_in = { 'room14_box1' }; --} --Декорации obj { -"лестница наверх, лестница ведущая наверх, лестница"; nam = "room14_stairs"; Exam = function(s) if _"room14_plan".seen == true or _"room17_cherdak":visited() then p"Лестница, ведущая наверх, на чердак."; else p"Лестница, ведущая наверх."; end end; }:attr 'scenery' obj { -"лестница вниз, лестница ведущая вниз, лестница"; nam = "room14_ladder"; Exam = function(s) if _"room14_plan".seen == true or _'room10_zal':visited() then p"Лестница, ведущая вниз, в зал."; else p"Лестница, ведущая вниз."; end end; }:attr 'scenery' --"вешалка" obj { -"вешалка, стальная вешалка, напольная вешалка"; nam = "room14_wardrobe"; description = "Стальная напольная вешалка, ножки которой надёжно прикручены к полу."; scope = {}; before_Exam = function(s) _"room14_wardrobe".scope:add("room14_wardrobe1"); return false end; }:attr 'scenery' obj { -"ножки, ножки вешалки"; nam = "room14_wardrobe1"; description = "Ножки cтальной напольной вешалки, надёжно прикрученные к полу."; }:attr 'scenery' --"дверь" obj { -"деревянная дверь, дверь"; nam = "room14_door"; description = "Массивная деревянная дверь. Что удивительно: нет ни дверной ручки, ни замочной скважины."; ['before_Walk,Enter'] = function(s) p"Деревянная дверь заперта. В неё невозможно войти." end }:attr 'scenery' obj { -"стальная дверь, дверь"; nam = "room14_door1"; seen = false; description = "Прямоугольный лист металла, встроенный в стену. Нет ни дверной ручки, ни петель, ни замочной скважины. Лишь форма напоминает, что это массивная стальная дверь."; before_Exam = function(s) if _"room14_hole".door == true then p"Стальная дверь полностью скрылась в стене." else return false end end; ['before_Walk,Enter'] = function(s) if _"room14_hole".door == true then p"Стальная дверь полностью скрылась в стене. В неё невозможно войти." else p"Стальная дверь заперта. В неё невозможно войти." end end; }:attr 'scenery' obj { -"схема, схема комнаты|план,план комнаты"; nam = "room14_plan"; seen = false; scope = { }; before_Exam = function(s) _"room14_plan".scope:add("room14_paper"); _"room14_plan".scope:add("room14_glass"); _"room14_plan".scope:add("room14_ink"); if _"room14_plan".seen then p [[Пожелтевший листок бумаги с планом комнаты. На востоке — спальня. А на западе — таинственная комната. Внизу на первом этаже — зал. А лестница в конце коридора ведёт наверх, на чердак.]]; else _"room14_plan".seen = true; p [[Присмотревшись к пожелтевшему от времени листку бумаги, закреплённому в рамке за стеклом, ты заметила, что грубоватые штрихи выцветших чернил, на самом деле не что иное, как план комнаты!^ Что странно: на востоке, судя по схеме, должна быть спальня. А на западе — таинственная комната. Внизу на первом этаже — зал. А лестница в конце коридора ведёт наверх, на чердак.]]; end end; }:attr 'scenery' obj { -"бумага|лист, листок, листок бумаги"; nam = "room14_paper"; description = "Кроме изображённой на нём схемы листок бумаги более ничем не примечателен."; Exam = function(s) if _"room14_plan".seen ~= true then return false else p"Кроме изображённой на нём схемы листок бумаги более ничем не примечателен."; end end; }:attr"scenery" obj { -"стекло"; nam = "room14_glass"; description = "Обычное прозрачное стекло, за которым находится план комнаты."; }:attr"scenery" obj { -"грубоватые штрихи, штрихи, старые штрихи, полустёртые штрихи, старые полустёртые штрихи| выцветшие чернила, чернила, синие чернила"; nam = "room14_ink"; description = "Старые полустёртые штрихи, нанесённые синими чернилами. Ничего интересного."; }:attr"scenery" -- СПАЛЬНЯ obj { -"картина"; nam = "room14_picture"; description = "Портрет молодой тёти Агаты и её мужа. Обнявшись, они стоят в комнате рядом с зеркалом. Тетя Агата в платье, а её муж в строгом фраке. Кажется, они выглядят счастливыми. Наверное, портрет был сделан вскоре после их свадьбы."; seen = false; before_Exam = function(s) _"room14_picture".seen = true; return false end; }:attr"scenery" -- Одежда obj { -"платье|вечернее платье"; nam = "room14_dress"; --description = "Тёмно-синее лаконичное вечернее платье прямого покроя с отдельными кружевными элементами на рукавах и глубоким вырезом. Идеально подчеркнёт женственные формы, которых у тебя нет."; worn = false; before_Exam = function(s) if _"room14_picture".seen == true then p[[Тёмно-синее лаконичное вечернее платье прямого покроя с отдельными кружевными элементами на рукавах и глубоким вырезом. Идеально подчеркнёт женственные формы, которых у тебя нет. Кажется, оно чем-то напоминает платье с картины.]]; else p"Тёмно-синее лаконичное вечернее платье прямого покроя с отдельными кружевными элементами на рукавах и глубоким вырезом. Идеально подчеркнёт женственные формы, которых у тебя нет."; end end; --, w:noun'вн' before_Wear = function(s) if not _"room14_dress".worn then p"Ты разделась и повесила свою одежду на вешалку. А затем, осторожно взяв вечернее платье, надела его."; _"room14_dress".worn = true; else p"Ты и так одета в него."; end; end; ["before_Drop,PutOn,Insert,ThrowAt,Wave"] = function(s,w) if mp.event == "PutOn" and w == _"room14_dummy" then p("Судя по размерам, платье для этого не предназначено."); else p("Не стоит так обращаться с платьем."); end; end; before_Take = function(s) if _"room14_dress".worn == true then p"Ты и так одета в него."; else p"Тебе совершенно незачем таскать с собой по особняку вечернее платье."; end end; before_Disrobe = function(s) if _"room14_dress".worn then p"Отвернувшись от зеркала и встав лицом к стене, ты сняла вечернее платье. А затем повесила его на вешалку и переоделась в свою одежду."; _"room14_dress".worn = false; else return false; end; end; }:attr'concealed, clothing' obj { -"одежда|своя одежда|моя одежда"; nam = "room14_cloth"; description = "Моя ничем не примечательная одежда."; before_Wear = function(s) if _"room14_dress".worn == false then p"Ты и так одета в неё."; else p"Отвернувшись от зеркала и встав лицом к стене, ты сняла вечернее платье. А затем повесила его на вешалку и переоделась в свою одежду."; _"room14_dress".worn = false; end end; ["before_Drop,PutOn,Insert,ThrowAt,Wave"] = function(s,w) p("Не стоит так обращаться со своей одеждой."); end; before_Take = function(s) if _"room14_dress".worn == false then p"Ты и так одета в неё."; else p"Тебе совершенно незачем таскать с собой по особняку свою одежду."; end end; before_Disrobe = function(s) if not _"room14_dress".worn then p"Ты уже не в том возрасте, чтобы ходить голой по лестницам."; else return false; end; end; }:attr'concealed, clothing' -- зеркало obj { -"зеркало"; nam = "room14_mirror"; scope = {}; before_Exam = function(s) _"room14_mirror".scope:add("room14_button"); _"room14_mirror".scope:add("room14_frame"); _"room14_mirror".scope:add("room14_stones"); if _"room14_door1".seen ~= true then p"Старинное декоративное зеркало во всю стену с деревянной рамой, инкрустированной драгоценными камнями. В одном из узоров на раме зеркала ты увидела небольшую коричневую кнопку, которую не было видно издали."; else p"Старинное декоративное зеркало во всю стену с рамой, инкрустированной драгоценными камнями. В одном из узоров на раме зеркала ты увидела небольшую коричневую кнопку, которую не было видно издали."; if _"room14_plan".seen == true or _"room15_bedroom":visited() then pr"Справа от зеркала стальная дверь, ведущая в спальню."; else pr"Справа от зеркала стальная дверь."; end end end; }:attr'scenery' obj { -"рама зеркала, рама| узоры, узор"; nam = "room14_frame"; description = "Деревянная резная рама зеркала, богато украшенная драгоценными камнями и узорными завитушками."; }:attr'scenery' obj { -"драгоценные камни, камни | алмазы, алмаз | рубины, рубин | сапфиры, сапфир | изумруды, изумруд"; nam = "room14_stones"; description = [[Чего тут только нет: алмазы, рубины, изумруды, сапфиры. Тётя получила по-настоящему большое наследство от мужа.]]; }:attr'scenery' --кнопка obj { -"кнопка, коричневая кнопка, пластиковая кнопка, небольшая кнопка, небольшая коричневая пластиковая кнопка"; nam = "room14_button"; scope = {}; description = "Небольшая коричневая пластиковая кнопка, справа от зеркала."; before_Push = function(s) if _"room14_dress".worn == false then p"Ты встала перед зеркалом и нажала на кнопку. Раздался тихий щелчок, но ничего не произошло."; elseif _"room14_dress".worn == true and _"room14_door1".seen ~= true then _"room14_door1".seen = true; p[[Ты встала в вечернем платье перед зеркалом и нажала на кнопку. Раздался тихий щелчок, наконец, со скрипом зеркало отодвинулось влево. В стене на месте, где раньше было зеркало, ты увидела стальную дверь. И потом откуда-то справа послышался странный шорох, который, впрочем, быстро прекратился.]]; _"room14_secondfloor".obj:add("room14_door1"); mp.score=mp.score+1; else p"Ты встала перед зеркалом и нажала на кнопку. Раздался тихий щелчок, но ничего не произошло."; end end; }:attr'scenery' --Манекен obj { -"манекен/но, женский манекен, манекен девушки, манекен женщины"; nam = "room14_dummy"; description = "Высокий манекен с внешностью красивой обнажённой девушки, чем-то отдалённо напоминающей тётю в молодости. Руки скрещены на груди, ноги сдвинуты и крепко стоят на стальной подставке."; scope = {}; before_Exam = function(s) _"room14_dummy".scope:add("room14_hands"); _"room14_dummy".scope:add("room14_chest"); _"room14_dummy".scope:add("room14_rack"); _"room14_dummy".scope:add("room14_legs"); p [[Высокий манекен с внешностью красивой обнажённой девушки, чем-то отдалённо напоминающей тётю в молодости. ]]; if _"room14_door1".seen ~= true then pr[[Руки скрещены на груди, ноги сдвинуты и крепко стоят на стальной подставке.]]; else pr[[Руки манекена, совсем не прикрывают обнажённую грудь. Ноги манекена раздвинуты в стороны.]]; _"room14_secondfloor".obj:add("room14_hole"); end end; }:attr'scenery, ~animate' obj { -"руки| руки манекена | тонкие руки"; nam = "room14_hands"; before_Exam = function(s) if _"room14_door1".seen ~= true then p[[Руки манекена, скрещенные на груди.]]; else p[[Тонкие руки манекена, совсем не прикрывающие обнажённую грудь.]]; end end; }:attr'scenery' obj { -"грудь| груди | грудь манекена| грудь девушки| груди манекена| груди девушки"; nam = "room14_chest"; description = [[Женская грудь второго размера правильной формы.]]; }:attr'scenery' obj { -"подставка манекена | подставка | стальная подставка"; nam = "room14_rack"; description = [[Стальная подставка, на которой твёрдо стоит манекен. Судя по всему, она надёжно прикреплена к полу и её не сдвинуть с места.]]; }:attr'scenery' obj { -"ноги| ноги манекена | нога | нога манекена"; nam = "room14_legs"; before_Exam = function(s) if _"room14_door1".seen ~= true then p[[Плотно сдвинутые ноги манекена.]]; elseif _"room14_hole".door == true then p[[Ноги манекена, раздвинутые в стороны. Между ног манекена вставлен круглый ригельный ключ.]]; else p[[Ноги манекена, раздвинутые в стороны. Между ног манекена, вместо ожидаемого зрелища, ты увидела скрытое ранее круглое отверстие, напоминающее замочную скважину.]]; _"room14_secondfloor".obj:add("room14_hole"); end end; }:attr'scenery' --замок стальной двери obj { -"отверстие | круглое отверстие | замочная скважина | скважина | отверстие манекена"; nam = "room14_hole"; description = [[Круглое отверстие между ног манекена, напоминающее замочную скважину.]]; door = false; before_Exam = function(s) if _"room14_hole".door == true then p"Круглый ригельный ключ намертво застрял между ног манекена."; else return false; end end; before_Receive = function(s, w) if mp.xevent == 'Insert' and w == _"circlekey" then p[[Ты медленно вставляешь круглый ключ в отверстие между ног манекена. Кажется, он идеально подходит. Вставив до упора, ты дважды его поворачиваешь. Раздаётся лязг, и стальная дверь вдвигается в стену, открывая проход на восток. Но ключ намертво застрял в замочной скважине.]]; pl.obj:del("circlekey"); _"circlekey":attr'scenery'; _"circlekey".description = "Ригельный ключ, намертво застрявший между ног манекена."; _"room14_hole".door = true; _"room14_secondfloor".e_to = 'room15_bedroom'; mp.score=mp.score+1; return false else p("Ты попробовала вставить ", w:noun'вн', " в круглое отверстие. Но ", w:noun'им', " совершенно не подходит. Иногда размер и форма имеют значение."); end end; after_Receive = function(s, w) _'room14_hole':attr'~container, ~open'; end; }:attr'scenery, container, open' --ТАИНСТВЕННАЯ КОМНАТА --"ковёр" obj { -"ковёр, роскошный ковёр, персидский ковёр, роскошный персидский ковёр"; nam = "room14_carpet"; description = "Роскошный персидский ковёр с длинным ворсом, занимающий половину коридора. Мягкий, полностью заглушающий шаги, в отличии от паркета."; moving = false; scope = {}; ['before_Take,Push,Pull,Turn'] = function(s) if _"room14_drawer".moving == true then if not s.moving then p"Ковёр невозможно сдвинуть, пока на нём стоит тяжёлый комод."; else p"Ковёр не получится вернуть на место, пока комод на пластине."; end else if _"room14_carpet".moving == false then p"Попробовав поднять ковёр, ты поняла, что он слишком тяжёлый, чтобы переместить его, но, откинув край ковра, ты увидела на полу посреди коридора квадратную пластину. А рядом с пластиной — грязную перчатку горничной."; _"room14_carpet".scope:add("room14_glove"); _"room14_carpet".moving = true; _"room14_glove".seen = true; _"room14_secondfloor".scope:add("room14_plate"); _"room14_secondfloor".obj:add("room14_plate"); else p"Ковёр слишком тяжёлый, чтобы его перемещать, поэтому ты просто расправила край ковра на полу. Теперь ничто здесь не напоминает о твоих похождениях."; _"room14_carpet".moving = false; end end end; before_LookUnder = function(s) if not s.moving then p"Ковёр слишком плотно прилегает к полу, ничего не разглядеть."; else p"Нет необходимости. Край ковра уже откинут."; end; end; ['before_Walk,Enter'] = function(s) p"Это бессмысленно. Ты и так стоишь на ковре на полу."; end; --before_Receive = function(s, w) -- if _"room14_carpet".moving == true then -- p"Ковёр сейчас свёрнут и на него нельзя ничего положить."; -- else -- p"Абсолютно бессмысленно класть что-то на ковёр."; -- end -- end; after_Receive = function(s, w) move(w, _"room14_secondfloor"); return false end; }:attr 'scenery,supporter,enterable' obj { -"перчатка, перчатка горничной, грязная перчатка"; nam = "room14_glove"; seen = false; before_Any = function(s) if _"room14_carpet".moving == false then return p"Но перчатка сейчас под ковром."; else return false end end; before_Exam = function(s) p"Длинная атласная перчатка, судя по всему, из костюма горничной. Когда-то была чёрной, но теперь вся покрыта пылью и какими-то белыми пятнами. У тёти разве была горничная?"; end; before_Smell = function(s) p"Какой-то странный мускусный запах."; end; ['before_Take,Push,Pull,Turn,Insert,Wear,Touch,Rub,Kiss,Eat,Taste,Tear'] = function(s) p"Перчатка настолько грязная, что даже трогать противно."; end; }:attr'scenery' obj { -"комод, громоздкий комод, деревянный комод, громоздкий деревянный комод, комод тёмно-каштанового цвета"; nam = "room14_drawer"; description = "Громоздкий квадратный деревянный комод тёмно-каштанового цвета с двумя ящиками: верхним и нижним. На комоде стоит стеклянная витрина."; scope = {}; moving = false; before_Exam = function(s) _'room14_drawer':attr'open' if _"room14_box1".stable and _"room14_box2".stable then p"Громоздкий квадратный деревянный комод тёмно-каштанового цвета с двумя ящиками: верхним и нижним. На комоде стоит стеклянная витрина."; elseif _"room14_box1".stable == false and _"room14_box2".stable == false then p"Громоздкий пустой квадратный деревянный комод тёмно-каштанового цвета без ящиков. На комоде стоит стеклянная витрина."; elseif _"room14_box1".stable == false then p"Громоздкий квадратный деревянный комод тёмно-каштанового цвета с одним нижним ящиком. На комоде стоит стеклянная витрина."; elseif _"room14_box2".stable == false then p"Громоздкий деревянный комод тёмно-каштанового цвета с одним верхним ящиком. На комоде стоит стеклянная витрина."; end end; before_Receive = function(s, w) if w == _"room14_box1" or w == _"room14_box2" then return false else p("Ты подумала, что логичнее было бы положить ", w:noun'вн', " в ящик, а не в комод."); end end; before_Take = function(s) p"Комод слишком большой и тяжёлый."; end; ['before_Push,Pull,'] = function(s, ev) if _"room14_box1".stable or _"room14_box2".stable then p"Комод слишком тяжёлый, чтобы его двигать. Если бы можно было его как-то облегчить."; else if _"room14_carpet".moving == false then if _"room14_drawer".moving == false then p"С трудом ты передвинула комод на середину ковра."; _"room14_drawer".moving = true; else p"С трудом ты передвинула комод с ковра обратно на место под картиной."; _"room14_drawer".moving = false; end elseif _"room14_carpet".moving == true then if not s.moving and _"room14_plate":empty() then p"С трудом ты передвинула комод на пластину в центре пола."; _"room14_drawer".moving = true; move(_"room14_drawer", _"room14_plate"); _'room14_drawer':attr'~concealed'; elseif s.moving then p"С трудом ты передвинула комод с пластины обратно на место под картиной."; _"room14_drawer".moving = false; move(_"room14_drawer", _"room14_secondfloor"); _'room14_drawer':attr'concealed'; else p"На пластине уже что-то лежит, поэтому туда комод не передвинуть."; end end end end; before_Open = function(s) p"Что именно в комоде ты хочешь открыть?"; end; ['before_Walk,Enter'] = function(s) p"Ты уже не в том возрасте, чтобы лазать по чужим комодам."; end; --obj = { 'room14_box1', 'room14_box2' }; }:attr'concealed, container' obj { -"верхний ящик комода, верхний ящик, ящик комода, ящик"; nam = "room14_box1"; description = function(s) _"room14_box1":attr'open'; p"Верхний ящик комода."; content(_"room14_box1", true); --return false end; stable = true; found_in = "room14_drawer"; before_Take = function (s,w) if pl:have(_"room14_box1") or pl:have(_"room14_box2") then return p"Ящики слишком тяжёлые, чтобы носить их вместе."; else _"room14_box1".stable = false; return false end end; before_Pull = function(s) move(_"room14_box1", _"room14_secondfloor"); _"room14_box1".stable = false; return p"Ты вытащила верхний ящик комода и положила на пол."; end; ['before_Insert,Push'] = function(s) if _"room14_box1".stable == true then p"Но верхний ящик и так в комоде."; else move(_"room14_box1", _"room14_drawer"); _"room14_box1".stable = true; return p"Ты вставила верхний ящик обратно в комод."; end end; before_Open = function(s) _"room14_box1":attr'open'; if _"room14_box1".stable then p"Ты открыла верхний ящик комода."; content(_"room14_box1", true); else content(_"room14_box1", true); end end; -- found_in = "room14_drawer"; }:attr'container' obj { -"нижний ящик комода, нижний ящик, ящик комода, ящик"; nam = "room14_box2"; description = function(s) _"room14_box2":attr'open'; p"Нижний ящик комода."; content(_"room14_box2", true); --return false end; stable = true; found_in = "room14_drawer"; before_Take = function (s,w) if pl:have(_"room14_box1") or pl:have(_"room14_box2") then return p"Ящики слишком тяжёлые, чтобы носить их вместе."; else _"room14_box2".stable = false; return false end end; before_Pull = function(s) move(_"room14_box2", _"room14_secondfloor"); _"room14_box2".stable = false; return p"Ты вытащила нижний ящик комода и положила на пол."; end; ['before_Insert,Push'] = function(s) if _"room14_box2".stable == true then p"Но нижний ящик и так в комоде."; else move(_"room14_box2", _"room14_drawer"); _"room14_box2".stable = true; return p"Ты вставила нижний ящик обратно в комод."; end end; before_Open = function(s) _"room14_box2":attr'open'; if _"room14_box2".stable then p"Ты открыла нижний ящик комода."; content(_"room14_box2", true); else content(_"room14_box2", true); end end; }:attr'container' --- Декорации obj { -"пол"; nam = "room14_floor"; description = function(s) p"Тёмный паркетный пол."; return false end; scope = {}; ['before_Walk,Enter'] = function(s) p"Это бессмысленно. Ты и так на полу."; end; after_Receive = function(s, w) move(w, _"room14_secondfloor"); return false end; }:attr'enterable, supporter,transparent,scenery' obj { -"витрина, стеклянная витрина"; nam = "room14_showcase"; description = function(s) if _"room14_report".seen then p[[Стеклянная витрина, за которой находится пистолет с позолоченной рукояткой. Возможно, это и есть беретта, упоминавшаяся в отчёте?]]; else p[[Стеклянная витрина, за которой находится пистолет с позолоченной рукояткой.]]; end end; before_Exam = function(s) _"room14_secondfloor".obj:add("room14_gun"); return false end; }:attr'scenery' obj { -"пистолет|беретта/жр,но|позолоченная рукоятка, рукоятка"; nam = "room14_gun"; description = function(s) if _"room14_report".seen then p"Пистолет с позолоченной рукояткой. Возможно, это и есть беретта, упоминавшаяся в отчёте?"; else p"Пистолет с позолоченной рукояткой. Ты никогда особо не любила оружие и не разбиралась в нём."; end end; }:attr'scenery' obj { -"стена, стены|штукатурка, бордовая штукатурка, венецианская штукатурка, бордовая венецианская штукатурка"; nam = "room14_walls"; description = "Стены, отделанные бордовой венецианской штукатуркой, имитирующей узоры яшмы. Безумно дорого. Такое ты видела только в модном журнале в статье о дворцах венецианских дожей. Сколько же денег получила тётя после смерти мужа?"; }:attr'scenery' obj { -"пластина, напольная пластина"; nam = "room14_plate"; description = function(s) if _"room14_plate":empty() then p"Напольная деревянная квадратная пластина. На ней изображена какая-то девушка с весами, на которых стоят пустые бокалы."; mp:content(s); else p"Напольная деревянная квадратная пластина. На ней изображена какая-то девушка с весами, на которых стоят пустые бокалы."; mp:content(s); p"Сейчас пластина нажата."; end end; dsc = function(s) p(description); content(s); end; -- before_Receive = function(s,w) -- p("Ты положила ", w:noun"вн", " на пластину."); -- return false -- end; before_Any = function(s) if _"room14_carpet".moving == false then return p"Но пластина сейчас под ковром."; else return false end end; ['before_Enter,Walk'] = function(s) if _"room14_drawer".moving == false then p"Ты встала на пластину. Пластина нажалась, но ничего больше не произошло. Возможно, здесь нужен другой вес. ^Ты сошла с пластины."; else p"На пластину невозможно встать, всю её поверхность занял комод."; end end; before_Push = function(s) p"Ты нажала на квадратную пластину, но ничего не произошло. Судя по всему, пластина реагирует на вес предметов."; end; --before_Receive = function(s) -- if _"room14_plate":empty() == false then -- p("Но на пластине уже находится ", mp:content(_"room14_plate"), "."); -- else -- return false -- end --end; each_turn = function(s) if _'room14_drawer':inside'room14_plate' and _"room14_box1".stable == true and _"room14_box2".stable == true and _"room14_box1":empty() and _"room14_box2":empty() and _"room14_platform".seen == false then _"room14_secondfloor".obj:add(_"room14_platform"); _"room14_platform".seen = true; p"Внезапно раздался щелчок, и пластина нажалась. Похоже, вес предметов оказался подходящим. Из стены рядом с деревянной дверью выдвинулась небольшая платформа."; end end; capacity = 1; }:attr'supporter,scenery,enterable,transparent' obj { -"платформа|деревянная платформа|углубление"; nam = "room14_platform"; description = "Небольшая толстая деревянная платформа в центре которой есть треугольное углубление."; seen = false; door = false; before_Receive = function(s, w) if w ~= _"piramidekey" then p("Ты положила ", w:noun'вн', " на платформу. Но ", w:noun'им', " совершенно не подходит для треугольного углубления, поэтому ты забрала ", w:noun'вн', " обратно."); else return false end end; after_Receive = function(s, w) if w == _"piramidekey" then p[[Как только ты положила пирамидальный ключ на платформу, он бесшумно исчез внутри неё. А сама платформа тут же скрылась в стене, а вслед за ней в стену вдвинулась деревянная дверь, обнажив проход]]; if _"room14_plan".seen == true or _'room16_mystical':visited() then p"в таинственную комнату."; else p"на запад."; end _"room14_platform":attr'scenery'; _"room14_platform".description = "Деревянная платформа полностью скрылась в стене вместе с пирамидальным ключом." if not _"piramidekey":has('scenery') then mp.score=mp.score+1; end _"piramidekey":attr'scenery'; _"piramidekey".description = "Пирамидальный ключ исчез в стене вместе с платформой."; _"room14_door".description = "Массивная деревянная дверь полностью скрылась в стене, не оставив ни следа." _"room14_platform".door = true; _"room14_secondfloor".w_to = 'room16_mystical'; remove("piramidekey"); remove("room14_platform"); else return false end end; }:attr'scenery,supporter' obj { -"потолок, высокий потолок"; nam = "room14_ceiling"; description = "Высокий потолок, отделанный дорогой бордовой венецианской штукатуркой."; }:attr'scenery' obj { -"толстая папка с бумагами,папка с бумагами, папка|бумаги|отчёт,отчет|документ|документы|газетные вырезки,вырезки|заметки"; nam = "room14_report"; seen = false; keyword = ""; description = "Большая папка с бумагами, документами и газетными вырезками."; before_Exam = function(s) p"Большая папка с бумагами, документами и газетными вырезками. Просмотрев бумаги, ты поняла, что они посвящены какому-то преступлению."; end; topic = {'муж', 'жертв', 'преступлен', 'агат','тети','тетю','тете','тетя','тёт', 'перчатк','горничн','самоубий','убийц', 'пистолет', 'оруд', 'оруж','рукоят', 'убийств', 'улик', 'себе','себя', 'свидетел', 'наследств','наследн','завещ','богат', 'тимо йокинен', 'особняк', 'ковё', 'кове', 'ковр', 'плать'}; ['before_Consult,Search'] = function(s, w) if w == nil then p"Большая папка с бумагами, документами и газетными вырезками. Просмотрев бумаги, ты поняла, что они посвящены какому-то преступлению. Возможно, надо поискать что-то в документах."; return else local found for x, y in ipairs(s.topic) do if w:find(y) then found = x; break end end if found == nil then p"Большая папка с бумагами, документами и газетными вырезками. Просмотрев бумаги, ты поняла, что они посвящены какому-то преступлению. Возможно, надо поискать в документах что-то другое."; return end if found == 1 or found == 2 or found == 27 then p"Ты поискала в документах упоминания мужа тёти и обнаружила, что его звали Тимо Йокинен, и он был миллиардером из Финляндии. "; elseif found == 32 then p"Ты нашла свадебное фото: вместо традиционного белого тётя была на свадьбе в вечернем платье."; elseif found == 29 or found == 30 or found == 31 then p[[Согласно квитанции в документах роскошный персидский ковёр был приобретён у некоего мистера Черепнакольского за весьма приличную сумму.]]; elseif found == 3 then p"Ты почитала документы в папке и поняла, что они посвящены убийству мужа тёти Агаты и самоубийству их горничной."; elseif found >= 4 and found <= 9 or found == 18 or found == 22 then p"Согласно папке, преступление произошло спустя несколько лет после свадьбы тёти. Судя по свидетельствам тёти, убийца вечером проникла в их спальню и попыталась застрелить тётю. Но вместо неё погиб муж, пытаясь отобрать пистолет убийцы. После чего убийца покончила с собой на пороге комнаты. О внебрачной связи своего мужа тётя узнала только после того, как на пороге их спальни появилась горничная."; elseif found == 10 then p'Ты нашла в документах следующее: "...никаких следов выстрела на руках горничной не осталось, поскольку она была в длинных атласных перчатках..."'; elseif found == 11 or found == 12 or found == 13 then p"Судя по отчёту, горничную Веронику наняли сразу после свадьбы для того, чтобы вести хозяйство большого особняка. Мотивом преступления стала ревность, которую убийца испытывала к жене своего любовника. После неудачной попытки убийства, находясь в состоянии аффекта от смерти любовника, она покончила с собой."; elseif found >= 14 and found <= 17 then _"room14_report".seen = true; -- _"room14_gun".word:add("беретта/жр,но") p"Пролистав папку, ты обнаружила, что орудием преступления являлся пистолет Beretta 92FS, с позолоченной рукояткой, который принадлежал жертве и хранился в его кабинете."; elseif found == 19 then p'В бумагах написано: "...cледов борьбы не обнаружено. На потерпевшей обнаружена кровь мужа. На убийце нет никаких следов, кроме следов от выстрела в сердце при самоубийстве..."'; elseif found == 20 or found == 21 then p"Ты нашла краткие заметки ручкой в блокноте из которых следовало, что тётя собиралась подарить особняк тебе."; elseif found >= 23 and found <= 26 then p"Тётя оказалась единственной наследницей своего мужа, упомянутой в завещании, и получила гигантское состояние, в том числе особняк."; elseif found == 28 then p[[Вот что нашлось в заметках: "...cтаринный фамильный особняк семейства Йокиненов был построен в девятнадцатом веке, представляет собой настоящее чудо инженерной мысли. Состоит из восемнадцати комнат. В особняке предусмотрено множество тайных секретных проходов и комнат. После современной реставрации особняка он оснащён по последнему слову техники. Тётя Агата получила особняк по завещанию от мужа."]]; else p"Ты почитала документы в папке, но не нашла ничего подходящего."; end end end; found_in = { 'room14_box2' }; } VerbExtend {"#Wear", "{noun}/вн,held на {noun}/вн : PutOn", "~ на {noun}/вн {noun}/вн : PutOn reverse", }