# HG changeset patch # User Silverwing # Date 2016-01-21 17:20:52 # Node ID dc34aaff843af712064feab6e1847394306996c4 # Parent 4362d49f13504bfcdd1fdaa31c569e3d608c1682 Dock 2 fixes diff --git a/dock2.lua b/dock2.lua --- a/dock2.lua +++ b/dock2.lua @@ -26,11 +26,11 @@ dock_gate = obj { dsc = function(s) if (s.open) then return [[ - Ржавые {ворота} застыли в приоткрытом состоянии, достаточно, чтобы вы смогли проникнуть за них. + Ржавые {ворота} слегка приоткрыты. ]]; else return [[ - На проржавевших воротах, ведущих на территорию дока, висит {амбарный замок}. + Проржавевшие ворота дока заперты на тяжелый навесной {замок}. ]]; end; end; @@ -41,7 +41,7 @@ dock_gate = obj { ]]; else return [[ - Массивный старый замок уже изрядно проржавел и пришел в негодность. Даже если бы у вас был ключ, вы врядли смогли бы открыть его. + Замок давно пришел в негодность. Даже если бы у вас был ключ, вы врядли смогли бы открыть его. ]]; end; end; @@ -81,22 +81,42 @@ dock_inside = room { dock_boxes = obj { nam = "dock_boxes"; disp = "Ящики"; - dsc = "Ровными рядами вокруг расположены старые грузовые {контейнеры}. Большинство из них проржавели настолько, что не осталось никаких опознавательных знаков об их происхождении и содержимом. "; - act = "Скорее всего, большинство из этих контейнеров пусты - врядли кто-то позволил бы пропадать такому количеству добра. "; + dsc = "Ровными рядами вокруг расположены старые грузовые {контейнеры}. Краска на большинстве из них повреждена настолько, что не осталось никаких опознавательных знаков об их происхождении и содержимом. "; + act = function(s) + if (not s.searched) then + s.searched = true; + put(item_pump_broken, pl); + return [[ + В одном из ящиков вы находите неисправный ручной насос. + ]]; + end; + end; +}; + +leviathan_entry = room { + nam = "leviathan_entry"; + disp = "В люк"; + enter = function(s) + if (dock_leviathan.pump_state == 1) then + walk('leviathan_airlock'); + else + return "Отсек заполнен водой. Вы не можете туда спуститься. ", false; + end; + end; }; dock_mooring = room { nam = "dock_inside"; disp = "Причал"; dsc = [[ - Вы находитесь у причала. Здесь нет ящиков и почти пусто, не считая нескольих кучек мусора - старых гнилых деревяшек, каких-то ржавых металлических трубок, мешков с неизвестным содержимым. Вы не слышите ничего, кроме шума мутной воды, завываний ветра и скрипа ржавого металла. + Вы находитесь у причала. Здесь почти пусто, не считая нескольких кучек мусора - старых гнилых деревяшек, каких-то ржавых металлических трубок, мешков с неизвестным содержимым. Вы не слышите ничего, кроме шума мутной воды, завываний ветра и скрипа ржавого металла. ]]; view = [[ Левиафан находится в доке ]]; way = { vroom("К пульту управления краном", "dock_crane_control"); - vroom("В люк", "leviathan_disabled_airlock"):disable(); + leviathan_entry:disable(); }; obj = { "dock_leviathan", @@ -108,48 +128,71 @@ dock_leviathan = obj { nam = "dock_leviathan"; disp = "Левиафан"; submerged = true; + pump_state = 0; -- 0 в отсеке вода; 1 - в отсеке нет воды dsc = function(s) if (s.submerged) then return "Под поверхностью воды виден какой-то большой металлический {предмет}. "; else - return "На тросах подвешена странная машина. Торпедообразный корпус, в верхней части которого виден наглухо задраенный {люк}, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности покрыты грязью, не позволяя заглянуть внутрь. В передней части на борту прикреплена слегка поржавевшая табличка \"А04 - Левиафан\". " + if (s.open) then + return [[ + На тросах подвешена странная машина. Торпедообразный корпус, в верхней части которого находится {люк}, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка "А04 - Левиафан". + ]] + else + return [[ + На тросах подвешена странная машина. Торпедообразный корпус, в верхней части которого виден наглухо задраенный {люк}, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка "А04 - Левиафан". + ]] + end; end; end; act = function(s) if (s.submerged) then - return "В мутной воде вы не можете понять, что это. "; + return "Какой-то большой предмет. В мутной воде вы не можете понять, что это. "; elseif (s.open) then --TODO s.open = false; - path("В люк"):disable(); - return "Вы задраиваете люк"; + leviathan_entry:disable(); + return "Вы задраиваете люк."; else --TODO s.open = true; - path("В люк"):enable(); - return "Вы отдраиваете люк"; + leviathan_entry:enable(); + if (s.pump_state < 2) then + return "Вы отдраиваете люк. Отсек внутри заполнен водой. "; + else + return "Вы отдраиваете люк. "; + end; end; end; + used = function(s, o) + if (o == item_pump) then + dock_leviathan.pump_state = 1; + remove(item_pump, pl); + return [[ + Вы откачиваете воду из отсека и теперь можете спуститься в него. + ]]; + end; + end; }; dock_crane = obj { nam = "dock_crane"; disp = "Подъемник"; state = 0; + broken = true; dsc = function(s) if (s.state == 0) then - return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} сейчас подняты. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; + return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} сейчас подняты. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; elseif (s.state == 1) then - return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно - они почти полностью погружены в грязную воду. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; + return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно - они почти полностью погружены в грязную воду. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; elseif (s.state == 2) then - return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; + return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; else - return "Чуть в стороне от вас огромный металлический кран нависает над водой. " -- На крюках подвешена странная машина. Торпедообразный корпус, в верхней части которого виден наглухо задраенный люк, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности покрыты грязью, не позволяя заглянуть внутрь. В передней части на борту прикреплена слегка поржавевшая табличка "А04 - Левиафан". + return "Чуть в стороне от вас огромный металлический кран нависает над водой. "; end; end; act = function(s) if (s.state == 0) then - return "Нужно опустить тросы"; + return "Тросы слишком высоко"; elseif (s.state == 1) then s.state = 2; return "Вы подцепляете тросы к скрывающемуся под водой предмету. "; @@ -182,9 +225,8 @@ crane_lever_vertical = obj { nam = "crane_lever_vertical"; dsc = "{Один из них} установлен вертикально и имеет несколько промежуточных положений. Сбоку от него нарисованы стрелки вверх и вниз. "; act = function(s) - print "fuck"; if (dock_crane.broken) then - return "Как ни дергаете вы рычаг, ничего не происходит"; + return "Вы двигаете рычаг, но ничего не происходит"; else -- TODO refactor -- TODO texts! @@ -215,5 +257,51 @@ crane_lever_rail = obj { crane_service_access_panel = obj { nam = "crane_service_access_panel"; + state = 0; + dsc = function(s) + if (s.state == 0) then + return [[ + Под панелью управления прикреплена на винтах металлическая {пластина}, закрывающая механизм. + ]]; + else + return [[ + Под панелью управления расположен {механизм} управления. Металлическая пластина, закрывавшая его, лежит рядом. + ]]; + end; + end; + act = function(s) + if (s.state == 0) then + return [[ + Вы не сможете открыть это руками. + ]]; + else + if (dock_crane.broken) then + return [[ + Вы заглядываете внутрь механизма. Часть шестерней сильно изношена. + ]]; + else + return [[ + Вы заглядываете внутрь механизма. Все шестерни исправлены и находятся на своих местах. + ]]; + end; + end; + end; + used = function(s,o) + if (o == item_toolbox) then + if (s.state == 0) then + s.state = 1; + return [[ + При помощи отвертки из ящика вы снимаете защитную панель, открывая доступ к внутренностям механизма. + ]]; + else + s.state = 0; + return [[ + Вы возвращаете панель на место и закрепляете ее винтами. + ]]; + end; + else + return false; + end; + end; }; diff --git a/items.lua b/items.lua --- a/items.lua +++ b/items.lua @@ -128,10 +128,10 @@ item_lamp = obj { inv = function(s) if (pl.has_light) then pl.has_light = false; - return "Вы гасите свет"; + return "Вы гасите свет. "; else pl.has_light = true; - return "Вы зажигаете лампу"; + return "Вы зажигаете лампу. "; end; end; }; @@ -236,19 +236,45 @@ item_bottle = obj { end; }; +item_pump_broken = obj { + nam = "item_pump_broken"; + disp = "Насос"; + inv = [[ + Старый ручной насос. Рычаг сломан, делая его использование невозможным. + ]]; +}; + +item_pump = obj { + nam = "item_pump"; + disp = "Насос"; + inv = [[ + Старый ручной насос. + ]]; +}; + item_pump_details = obj { nam = "item_pump_details"; disp = "Детали насоса"; inv = [[ - Запчасти для насоса. Сделаны по заказу Вестхейвен Трансоушен. + Запчасти для насоса. ]]; + use = function(s, o) + if (o == item_pump_broken) then + remove(s, pl); + remove(item_pump_broken, pl); + put(item_pump, pl); + return [[ + Вы починили насос. + ]]; + end; + end; }; item_electrodes = obj { nam = "item_electrodes"; disp = "Электроды"; inv = [[ - Несколько электродов - плоских свинцовых решеток. + Несколько металлических пластин, предназначенных для использования в качестве электродов. ]]; }; @@ -276,15 +302,19 @@ item_leviathan_schematics = obj { ]]; }; -item_missing_list = obj { - nam = 'item_missing_list'; - disp = 'Список пропавших'; +item_cogs = obj { + nam = "item_cogs"; + disp = "Шестеренки"; inv = [[ - Это список пропавших сотрудников Вестхейвен Трансоушен, составленный Джозефом Старлайтом. Небрежный почерк Джозефа непросто разобрать, однако документ содержит исчерпывающую информацию о пропавших. Содержание документа следующее: - 1. Уильям Дрейк - директор, владелец, основатель, по образованию - инженер-кораблестроитель. ^ - 2. Адриан Блэк - член совета директоров, по образованию - биолог, содержал лабораторию на средства компании(???). ^ - 3. Майкл Райт - начальник инженерного отдела. Хороший друг Уильяма(и его однокурсник(!)). ^ - 4. + Несколько шестерней разного размера. ]]; - + use = function(s, o) + if (o == crane_service_access_panel and crane_service_access_panel.state == 1) then + remove(s, pl); + dock_crane.broken = false; + return [[ + Вы заменяете поврежденные шестерни новыми. + ]]; + end; + end; }; \ No newline at end of file diff --git a/main.lua b/main.lua --- a/main.lua +++ b/main.lua @@ -202,7 +202,12 @@ function init() pl.where = intro; put(submarine_leviathan:disable(), dock_mooring); ---debug - pl.where = wright_house; + pl.where = dock_2; + put(item_toolbox, pl); + put(item_cogs, pl); + put(item_pump_details, pl); + put(item_electrodes, pl); + put(item_lamp, pl); --pl.where = aurora_borealis; --move(submarine_leviathan, first_city_entrance); --move(submarine_leviathan, first_city_outer_east); diff --git a/travel.lua b/travel.lua --- a/travel.lua +++ b/travel.lua @@ -25,7 +25,7 @@ london = dlg { char_coachman = obj { nam = "coachman"; disp = "экипаж"; - dsc = [[Вы видите небольшую двухколесную повозку, с впряженной в нее лошадью. Его {владелец} стоит рядом и, судя по всему, ждет пассажиров^ ]]; + dsc = [[Вы видите небольшую двухколесную повозку, с впряженной в нее лошадью. Его {владелец} стоит рядом и, судя по всему, ждет пассажиров. ^ ]]; act = function(s) walkin "coachman_dlg"; end;