Changeset - 1e36831e2495
[Not reviewed]
default
0 4 0
silverwing - 7 years ago 2017-09-09 11:51:24

Some extra money
4 files changed with 39 insertions and 9 deletions:
0 comments (0 inline, 0 general)
dock2.lua
Show inline comments
 
--[[
 
Игрок может попасть сюда только после диалога с Майклом.
 
Верфь заброшена, многие механизмы придется ремонтировать.
 
Здесь игрок найдет подводную лодку, которую нужно будет восстановить.
 
]]
 
dock_2 = room {
 
	nam = "dock_2";
 
	disp = "Док 2, вход";   
 
	dsc = [[Док огражден высоким металлическим забором, изрядно проржавевшим из-за отсутствия должного ухода. Ржавая табличка с надписью "Док 2, собственность Вестхейвен Трансоушен" висит над воротами, слегка поскрипывая под сильными порывами ветра. Пространство за забором заставлено старыми металлическими грузовыми контейнерами. Вдали виднеется кран, предназначенный для погрузки и разгрузки приходящих судов. ]];
 
	enter = function(s)
 
		move(char_coachman, here());
 
	end;
 
	way = {
 
		vroom("В док", "dock_inside"):disable();
 
	};
 
	obj = {
 
		"dock_gate"
 
	};
 
};
 
 
dock_gate = obj {
 
	nam = "dock_gate";
 
	disp = "Ворота";
 
	dsc = function(s)
 
		if (s.open) then 
 
			return [[Ржавые {ворота} слегка приоткрыты. ]];
 
		else
 
			return [[Проржавевшие ворота дока заперты на тяжелый навесной {замок}. ]];
 
		end;
 
	end;
 
	act = function (s)
 
		if (s.open) then
 
			return [[Вы при всем желании не сможете сдвинуть ворота с места. ]];
 
		else
 
			return [[Замок давно пришел в негодность. Даже если бы у вас был ключ, вы вряд ли смогли бы открыть его. ]];
 
		end;
 
	end;
 
	used = function(s,o)
 
		if (s.open) then
 
			return false;
 
		end;
 
		if (o == item_toolbox) then
 
			s.open = true;
 
			path("В док"):enable();
 
			return [[Пользуясь ломиком, найденным в ящике, вы снимаете замок с ворот. С жутким скрипом вам удается приоткрыть их. Теперь вы можете войти внутрь. ]];
 
		else
 
			return false;
 
		end;
 
	end;
 
	
 
};
 
 
dock_inside = room {
 
	nam = "dock_inside";
 
	disp = "Док";
 
    dsc = [[На территории дока повсюду раскиданы обломки дерева, железа, какие-то мешки. Ржавые ворота в заборе застыли в приоткрытом состоянии. Вдалеке, у причала, стоит старый грузовой кран. До вас доносятся завывания ветра и скрип ржавого металла. ]];
 
	--dsc = [[Вы находитесь на территории дока, принадлежавшего компании "Вестхейвен Трансоушен", о чем свидетельствует оставшаяся позади табличка. Вдалеке, у причала стоит старый грузовой кран. Вы не слышите ничего, кроме завываний ветра и скрипа ржавого металла. ]];
 
	way = {
 
		vroom("На улицу", "dock_2");
 
		vroom("К причалу", "dock_mooring");
 
	};
 
	obj = {
 
		"dock_boxes"
 
	};
 
};
 
 
dock_boxes = obj {
 
    var {
 
        searched = false;
 
        searched = 0;
 
    };
 
	nam = "dock_boxes";
 
	disp = "Ящики";
 
	dsc = [[Ровными рядами вокруг расположены старые грузовые {контейнеры}. Краска на большинстве из них повреждена настолько, что не осталось никаких опознавательных знаков об их происхождении и содержимом. ]];
 
	act = function(s)
 
		if (not s.searched) then
 
			s.searched = true;
 
		if s.searched == 0 then
 
			s.searched = 1;
 
			put(item_pump_broken, pl);
 
			return [[
 
				В одном из ящиков вы находите неисправный ручной насос. 
 
			]];
 
			return [[В одном из ящиков вы находите неисправный ручной насос. ]];
 
        elseif s.searched == 1 then
 
            s.searched = 2;
 
            pl.money = pl.money + 5;
 
            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_inside");
 
		vroom("К пульту управления краном", "dock_crane_control");
 
		leviathan_entry:disable();
 
	};
 
	obj = {
 
		"dock_leviathan",
 
		"dock_crane"
 
	};
 
};
 
 
dock_leviathan = obj {
 
    var {
 
        submerged = true;
 
        pump_state = 0; -- 0 в отсеке вода; 1 - в отсеке нет воды
 
        open = false;
 
    };
 
	nam = "dock_leviathan";
 
	disp = "Левиафан";
 
	dsc = function(s)
 
		if (s.submerged) then
 
			return "Под поверхностью воды виден какой-то большой металлический {объект}. ";
 
		else
 
			if (s.open) then
 
				return [[На тросах подвешена странная машина. В верхней части торпедообразного корпуса расположен открытый {люк}. В задней видно два гребных винта. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка с надписью "А04 - Левиафан". ]];
 
			else
 
				return [[На тросах подвешена странная машина. В верхней части торпедообразного корпуса расположен наглухо задраенный {люк}. В задней видно два гребных винта. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка с надписью "А04 - Левиафан". ]];
 
			end;
 
		end;
 
	end;
 
	act = function(s)
 
		if (s.submerged) then
 
			return "Какой-то большой объект. В мутной воде вы не можете понять, что это, но похоже на перевернутое судно. ";
 
		elseif (s.open) then
 
			--TODO
 
			s.open = false;
 
			leviathan_entry:disable();
 
			return "Вы задраиваете люк.";
 
		else
 
			--TODO
 
			s.open = true;
 
			leviathan_entry:enable();
 
			if (s.pump_state == 0) 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 {
 
    var {
 
        state = 0;
 
        broken = true;
 
    };
 
	nam = "dock_crane";
 
	disp = "Подъемник";
 
	dsc = function(s)
 
		if (s.state == 0) then
 
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} сейчас подняты. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
 
		elseif (s.state == 1) then
 
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно - они почти полностью погружены в грязную воду. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
 
		elseif (s.state == 2) then
 
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. ";
 
		else
 
			return "Чуть в стороне от вас огромный металлический кран нависает над водой. ";
 
		end;
 
	end;
 
	act = function(s)
 
		if (s.state == 0) then
 
			return "Тросы слишком высоко";
 
		elseif (s.state == 1) then
 
			s.state = 2;
 
			return "Вы подцепляете тросы к скрывающемуся под водой предмету. ";
 
		elseif (s.state == 2) then
 
			s.state = 1;
 
			return "Вы отцепляете тросы от скрывающегося под водой предмета. ";
 
		elseif (s.state == 3) then
 
			return "Вы больше ничего не можете сделать здесь";
 
		end;
 
	end;
 
};
 
 
dock_crane_control = room {
 
	nam = "dock_crane_control";
 
	disp = "Панель управления краном";
 
	dsc = [[Вы стоите на небольшой огороженной площадке перед панелью управления подъемником. На ней расположено два рычага. ]];
 
	obj = {
 
		"crane_lever_vertical",
 
		"crane_lever_rail",
 
		"crane_service_access_panel"
 
	};
 
	way = {
 
		vroom("Назад", "dock_mooring");
 
	};
 
};
 
 
crane_lever_vertical = obj {
 
	nam = "crane_lever_vertical";
 
	dsc = "{Один из них} установлен вертикально и имеет несколько промежуточных положений. Сбоку от него нарисованы стрелки вверх и вниз. ";
 
	act = function(s)
 
		if (dock_crane.broken) then
 
			return "Вы двигаете рычаг, но ничего не происходит";
 
		else
 
			if (dock_crane.state == 0) then
 
				dock_crane.state = 1;
 
				return [[Вы сдвигаете рычаг в крайнее нижнее положение. С громким скрежетом тросы опускаются. ]];
 
			elseif (dock_crane.state == 3) then
 
				dock_crane.state = 2;
 
				dock_leviathan.submerged = true;
 
				return [[Вы сдвигаете рычаг в крайнее нижнее положение. С громким скрежетом тросы опускаются и поднятый предмет скрывается под водой. ]];
 
			elseif (dock_crane.state == 2) then
 
				dock_crane.state = 3
 
				dock_leviathan.submerged = false;
 
				leviathan_discovered = true;
 
				return [[Вы сдвигаете рычаг в крайнее верхнее положение. С громким скрежетом тросы поднимаются вместе с подцепленным к ним предметом. ]];
 
			elseif (dock_crane.state == 1) then
 
				dock_crane.state = 0;
 
				return [[Вы сдвигаете рычаг в крайнее верхнее положение. С громким скрежетом тросы поднимаются. ]];
 
			end;
 
		end;
 
	end;
 
};
 
 
crane_lever_rail = obj {
 
	nam = "crane_level_rail";
 
	dsc = "{Второй рычаг} установлен горизотельно и имеет три положения. Над ним нарисованы стрелки влево и вправо.";
 
	act = "Рычаг не поддается. ";
 
};
 
 
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
london.lua
Show inline comments
 
@@ -169,452 +169,479 @@ char_worker_dlg = dlg {
 
		{always=true, "12. ", [["14". ]], [[pjump 'bribing_14']]};
 
		{always=true, "13. ", [["14". ]], [[pjump 'bribing_14']]};
 
		{always=true, "14. ", function(s)
 
			if (pl:pay(14)) then
 
				char_worker.bought = true;
 
				return [[Рабочий довольно потирает руки: "Идет". ]];
 
			else
 
				return [[Рабочий недовольно рычит: "Ты дурак?" ]];
 
			end;
 
		end, [[ char_worker.bought = true; back(); ]]};
 
		{tag='bribing_14'};
 
		{always=true, "10. ", [["13". ]], [[pjump 'bribing_13']]};
 
		{always=true, "11. ", [["13". ]], [[pjump 'bribing_13']]};
 
		{always=true, "12. ", [["13". ]], [[pjump 'bribing_13']]};
 
		{always=true, "13. ", function(s)
 
			if (pl:pay(13)) then
 
				char_worker.bought = true;
 
				return [[Рабочий довольно потирает руки: "Идет". ]];
 
			else
 
				return [[Рабочий недовольно рычит: "Ты дурак?" ]];
 
			end;
 
		end, [[ char_worker.bought = true; back(); ]]};
 
		{tag='bribing_13'};
 
		{always=true, "10. ", [[Рабочий недовольно рычит: "Не хочешь -- не надо", -- после чего отворачивается в другую сторону. ]], [[ back(); ]]};
 
		{always=true, "11. ", [[Рабочий недовольно рычит: "Не хочешь -- не надо", -- после чего отворачивается в другую сторону. ]], [[ back(); ]]};
 
		{always=true, "12. ", function(s)
 
			if (pl:pay(12)) then
 
				char_worker.bought = true;
 
				return [[Рабочий довольно потирает руки: "Идет". ]];
 
			else
 
				return [[Рабочий недовольно рычит: "Ты дурак?" ]];
 
			end;
 
		end, [[  back(); ]]};
 
	};
 
};
 
 
ginshop = room {
 
	nam = "ginshop";
 
	disp = "Пивная лавка";
 
    dsc = [[Свет с трудом проникает в небольшую комнатушку через давно не мытые окна. На полу многолетний слой грязи. Будучи излюбленным заведением самых отъявленных алкоголиков, этот магазинчик представляет огромный выбор дешевого и крепкого пойла. ]];   
 
	obj = {'ginshop_trader'};
 
	way = {
 
		vroom("На улицу", "port_street");
 
	};
 
};
 
 
ginshop_trader = npc {
 
    var {
 
        bought = false;
 
    };
 
	nam = "ginshop_trader";
 
	disp = "Продавец";
 
	dsc = [[За грязным прилавком, не раз залитым местными напитками, стоит пожилой {продавец}. Сквозь потрескавшееся мутное стекло в старых очках(второе отсутствует, судя по всему, уже давно) он пытается рассмотреть вас. ]];
 
	dlg = "ginshop_trader_dlg";
 
};
 
 
ginshop_trader_dlg = dlg {
 
	nam = "ginshop_trader_dlg";
 
	disp = "Торговец";
 
	enter = function(s)
 
		if (ginshop_trader.bought or char_worker.bought) then
 
			pr("Мне здесь ничего не нужно. ");
 
			return false;
 
		else
 
			return true;
 
		end;
 
	end;
 
	entered = [[Сняв очки, продавец смотрит на вас и спрашивает: "Добро пожаловать, господин. Чем могу помочь, господин?" ]];
 
	phr = {
 
		{always = true, "Бутылочку чего-нибудь покрепче, пожалуйста. ", [[Продавец кивает: "Сию секунду, господин". Почесав седую голову, он уходит в подвал, откуда возвращается через некоторое время с бутылкой. С громким стуком поставив бутылку на стол, он сообщает вам цену: "Это будет стоить вам 10 шиллингов, господин". ]], code = [[ psub("buy"); ]]};
 
		{always = true, "Это все, спасибо. ", [[Продавец одевает очки обратно и прощается с вами: "Приходите еще, господин". ]], function() 
 
				back();
 
			end;
 
		};
 
		{tag = "buy"};
 
		{always = true, "Беру. ", function(s)
 
			if (pl:pay(10)) then
 
				ginshop_trader.bought = true;
 
				take(item_bottle);
 
				return [[Расплывшись в широкой улыбке продавец подмигивает вам и говорит: "Приходите еще, господин!" ]];
 
			else
 
				return [[Одевая очки обратно, продавец прячет бутылку под прилавок: "Простите, господин, но я сказал 10 шиллингов". ]];
 
			end;
 
		end, code = [[ back(); ]]};
 
		{always = true, "Я передумал. ", [[Одевая очки обратно, продавец прячет бутылку под прилавок: "Подумайте еще, господин. Всего 10 шиллингов, господин!". ]], code = [[ pret(); ]]};
 
	};
 
};
 
 
hotel_street = room {
 
	nam = "hotel_street";
 
	disp = "Улица";
 
	entered = function(s)
 
		move(char_coachman, here());
 
	end;
 
    dsc = [[Перед вами стоит старое двухэтажное здание гостиницы. Массивные деревянные двери открыты, приглашая вас внутрь. Покосившаяся вывеска над ними гласит: "Гостиница Старого Фрэнки". Большинство домов поблизости выглядят старыми и неухоженными - очевидно, в этом районе живут не самые богатые горожане. Вокруг тихо - лишь редкие пешеходы проходят мимо, не обращая на вас никакого внимания. По небу неспешно плывут тяжелые темные тучи. ]];
 
	way = {
 
		vroom("В гостиницу", "hotel_hall");
 
	};
 
};
 
 
hotel_hall = room {
 
	nam = "hotel_hall";
 
	disp = "Гостиница";
 
	dsc = [[Холл гостиницы представляет собой просторный зал высотой в два этажа. В задней части зала вы видите широкую лестницу, застеленную старой дорожкой, которая некогда была красной. Окна закрыты тяжелыми занавесками, не позволяя свету с улицы проникнуть в помещение. Огромная люстра под потолком дает достаточно света. Вдоль стен расположено несколько диванчиков. ]];
 
	obj = {
 
		'hotel_concierge',
 
        'hotel_starlight'      
 
	};
 
    entered = function(s)
 
        if (rnd(20) > 19) then
 
            hotel_maid.state = #hotel_maid.actions;
 
            put(hotel_maid, here());
 
        else
 
            remove(hotel_maid, here());
 
        end;
 
    end;   
 
	way = {
 
		vroom("На улицу", "hotel_street");
 
		vroom("К номерам", "hotel_corridor_1"):disable();
 
		vroom("На второй этаж", "hotel_corridor_2"):disable();
 
	};
 
};
 
 
hotel_corridor_1 = room {
 
	nam = "hotel_corridor_1";
 
	disp = "Гостиница, первый этаж";
 
    dsc = [[Широкий коридор без окон, освещенный газовыми лампами, укрепленными на стенах. По обе стороны от вас расположены двери, ведущие в комнаты постояльцев. ]];
 
    entered = function(s)
 
        if (rnd(10) > 9) then
 
            hotel_maid.state = rnd(#hotel_maid.actions - 1);
 
            put(hotel_maid);
 
        else
 
            remove(hotel_maid);
 
        end;
 
    end;
 
	way = {
 
		vroom("В холл", "hotel_hall");
 
		vroom("В комнату №2", "hotel_room_2"):disable();
 
	};
 
};
 
 
hotel_corridor_2 = room {
 
    var {
 
        room_visited = false;
 
        met_starlight = false;
 
    };
 
	nam = "hotel_corridor_2";
 
	disp = "Гостиница, второй этаж";
 
	dsc = [[Широкий коридор без окон, освещенный газовыми лампами, укрепленными на стенах. По обе стороны от вас расположены двери, ведущие в комнаты постояльцев. ]];
 
	way = {
 
		vroom("В холл", "hotel_hall");
 
		vroom("В комнату №7", "hotel_room_7");
 
	};
 
	enter = function(s)
 
		if (s.room_visited and not s.met_starlight) then
 
			s.met_starlight = true;
 
			walkin('starlight_first_dlg');
 
		end;
 
	end;
 
    entered = function(s)
 
        if (rnd(10) > 9) then
 
            hotel_maid.state = rnd(#hotel_maid.actions - 1);
 
            put(hotel_maid, here());
 
        else
 
            remove(hotel_maid, here());
 
        end;
 
    end;
 
	left = function(s)
 
		if (s.room_visited) then
 
			remove("char_starlight_corridor", where("char_starlight_corridor"));
 
			lifeoff("char_starlight_corridor");
 
		end;
 
	end;
 
};
 
 
hotel_room_2 = room {
 
	nam = "hotel_room_2";
 
	disp = "Гостиница, Комната №2";
 
    dsc = [[Небольшая чистая комната. На столике у окна стоит зажженная лампа, рядом брошена стопка газет. На кровати в углу валяется шляпа хозяина. Окно распахнуто, впуская внутрь прохладный и влажный воздух. ]];   
 
	obj = {
 
		"char_starlight"
 
	};
 
	way = {
 
		vroom("В коридор", "hotel_corridor_1");
 
	};
 
};
 
 
hotel_room_7 = room {
 
	nam = "hotel_room_7";
 
	disp = "Гостиница, Комната №7";
 
	dsc = [[Небольшая чистая комната. Деревянный столик в углу прикрыт белой скатертью. В углу стоит аккуратно сделанный стул. У окна расположена застеленная чистым бельем кровать. На скрипучем деревянном полу лежит старый коврик. ]];
 
	obj = {
 
		'item_lamp', 'room_7_window'
 
		'item_lamp', 'room_7_window', 'money_hotel'
 
	};
 
	way = {
 
		vroom("В коридор", "hotel_corridor_2");
 
	};
 
	entered = function(s)
 
		hotel_corridor_2.room_visited = true;
 
	end;
 
};
 
 
room_7_window = obj {
 
	nam = "room_7_window";
 
	state = 0;
 
	dsc = function(s)
 
		if (s.state == 0) then
 
			return "{Окно} закрыто плотными ставнями. ";
 
		elseif (s.state == 1) then
 
			return "Через {окно} вы можете разглядеть мостовую, немногочисленных прохожих, прочные кирпичные дома на другой стороне улицы и тяжелые тучи, нависающие над городом. ";
 
		else
 
			return "Сквозь открытое {окно} до вас доносится шум большого, живущего своей жизнью города. Прохладный ветерок задувает в комнату. ";
 
		end;
 
	end;
 
	act = function(s)
 
		if (s.state == 0) then
 
			s.state = 1;
 
			return [[Вы открываете ставни. ]];
 
		elseif (s.state == 1) then
 
			s.state = 2;
 
			return [[Вы открываете окно. ]];
 
		elseif (s.state == 2) then
 
			s.state = 0;
 
			return [[Вы закрываете окно и захлопываете ставни. ]];
 
		end;
 
	end;
 
};
 
 
hotel_concierge = obj {
 
    var {
 
        paid = false;
 
    };
 
	nam = "hotel_concierge";
 
	disp = "Консьерж";
 
	dsc = [[За стойкой скучает пожилой {консьерж}. Поношенный костюм, выглаженный и начищенный, хорошо сидит на его худощавом теле. Аккуратно подстриженная седая борода украшает его морщинистое лицо. Руки его неподвижно лежат на стойке, а глаза наблюдают за входящими и выходящими посетителями. ]];
 
	act = function(s)
 
		if (hotel_concierge.paid) then
 
			pn("Я уже снял номер. ");
 
		else
 
			walkin(hotel_concierge_dlg);
 
		end;
 
	end;
 
};
 
 
hotel_starlight = npc {
 
    nam = "hotel_starlight";
 
    disp = "Старлайт";
 
    dsc = "На одном из диванчиков сидит мужчина лет сорока-пяти--пятидесяти, одетый в помятый костюм. Он читает газету и не обращает на вас внимания. ";
 
};
 
 
hotel_maid = npc {
 
    var {
 
        state = 1;
 
    };
 
	nam = "hotel_maid";
 
	disp = "Служанка";
 
	actions = {
 
		[[{Служанка} подметает пол. ]];
 
		[[{Служанка} протирает стены. ]];
 
        [[{Служанка} поправляет лампу. ]];
 
        [[На один из диванчиков присела отдохнуть {служанка}. ]];
 
	};
 
	dsc = function(s)
 
		return s.actions[s.state];
 
	end;
 
	phrases = {
 
		[["Простите, я занята". ]];
 
		[["Вам понравилась ваша комната?" ]];
 
		[["У меня еще много дел сегодня". ]];
 
		[["Простите?" ]];
 
		[["Добрый день". ]];
 
	};
 
};
 
 
hotel_concierge_dlg = dlg {
 
	nam = "hotel_concierge_dlg";
 
	disp = "Консьерж";
 
	entered = [[Консьерж оживился, как только вы подошли: "Здравствуйте! Желаете снять номер?" ]];
 
	phr = {
 
		{1, "Да, мне нужна комната на неделю. ", [[Консьерж, посмотрев в журнал, называет цену: "С вас 100 монет". ]], code = [[ psub("pay"); ]]};
 
		{255, always = true, "Не сейчас. ", function()
 
			back();
 
			return [[Консьерж недовольно отвечает: "Приходите, когда соберетесь! "]];
 
		end};
 
		{tag = "pay"};
 
		{always = true, "Хорошо. ", function()
 
			if pl:pay(100) then
 
				hotel_concierge.paid = true;
 
				path("К номерам", hotel_hall):enable();
 
				path("На второй этаж", hotel_hall):enable();
 
				back();
 
				return [[Консьерж принимает ваши деньги и просит вас расписаться в гостевой книге. После чего вручает вам ключ, сообщая: "Вам на второй этаж, комната номер 7". ]];
 
			else
 
				pon(1);
 
				pret();
 
				back();
 
				return [[Консьерж недовольно отвечает: "Приходите, когда деньги будут!" ]];
 
			end;
 
		end};
 
		{always = true, "Я передумал. ", [[Консьерж недовольно отвечает: "Приходите, когда соберетесь!" ]], code = [[ pon(1); pret(); ]]}
 
	};
 
};
 
 
starlight_first_dlg = dlg {
 
    nam = "starlight_first_dlg";
 
	disp = "Гостиница, второй этаж";
 
	entered = [[Выйдя из своей комнаты, вы замечаете поднимающегося по лестнице человека. Это мужчина лет сорока-пяти--пятидесяти. Он одет в помятый темно-серый костюм, на носу -- маленькие очки в простой оправе. В левой руке он держит какую-то газету, а правой спешно ощупывает карманы в поисках чего-то. Заметив вас он улыбается и спрашивает: "Господин Дрейк?" ]];
 
	left = function(s)
 
        remove(hotel_starlight, hotel_hall);
 
		path('В комнату №2', hotel_corridor_1):enable();
 
		put(hotel_corridor_2, "char_starlight_corridor");
 
		lifeon("char_starlight_corridor");
 
	end;
 
	phr = {
 
		{ "Мы встречались?", [[Человек пожимает плечами: "Скорее всего нет, мое имя Джозеф Старлайт. Вы случайно не родственник Уильяма Дрейка? Название Вестхейвен Трансоушен вам о чем-то говорит?" ]], code [[ pstart('have_we_met') ]]};
 
		{ "Кто вы?", [[Человек протягивает вам руку: "Джозеф Старлайт, адвокат. Название Вестхейвен Трансоушен вам о чем-то говорит?" ]], code [[ pstart('who_are_you') ]]};
 
		{ "Да, я Дэвид Дрейк.", [[Человек протягивает вам руку: "Здравствйте! Я Джозеф Старлайт. Вы сын Уильяма Дрейка? Название Вестхейвен Трансоушен вам о чем-нибудь говорит?" ]], code [[ pstart('i_am_drake') ]]};
 
		{ "Простите, я спешу.", [[Человек огорченно вздыхает: "Простите". Подойдя к лестнице он оборачивается и говорит: "Мое имя - Джозеф Старлайт. Если хотите поговорить о Вестхейвен Трансоушен, зайдите ко мне в комнату 2 когда у вас будет время". ]], code [[ back(); ]]};
 
		{tag = "have_we_met"};
 
		{ "Я сын Уильяма. Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ back(); ]]};
 
		{ "Кто вы?", [[Джозеф Старлайт отвечает: "Адвокат. Я занимался делом о банкротстве Вестхейвен Трансоушен". ]], code [[ pstart('who_are_you') ]]};
 
		{tag = "who_are_you"};
 
		{ "Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ back(); ]]};
 
		{tag = "i_am_drake"};
 
		{ "Да все верно. Это название компании моего отца. Вы знаете что произошло?", [[Джозеф Старлайт чешет подбородок: "Немного. Это было, без сомнения, самое запутанное мое дело. Нам лучше поговорить у меня в комнате. Номер 2, на первом этаже". ]], code [[ back(); ]]};
 
	};
 
};
 
 
char_starlight_corridor = obj {
 
	nam = "char_starlight_corridor";
 
	dsc = function(s)
 
		return [[{Джозеф Старлайт} продолжает ощупывать карманы, словно ищет что-то. ]];
 
	end;
 
	act = function(s)
 
		remove(s, where(s));
 
		lifeoff(s);
 
		return [[Раздраженно махнув рукой, Джозеф быстрым шагом спускается вниз по лестнице. ]];
 
	end;
 
	life = function(s)
 
		if (rnd(5) > 4) then
 
			remove(s, where(s));
 
			lifeoff(s);
 
			return [[Раздраженно махнув рукой, Джозеф быстрым шагом спускается вниз по лестнице. ]];
 
		end;
 
	end;
 
};
 
 
char_starlight = obj {
 
    var {
 
        forgetful = 0;
 
        complete = 0;
 
    };
 
	nam = "char_starlight";
 
	dsc = function(s)
 
		return [[{Джозеф Старлайт} сидит за столом и делает какие-то записи в блокноте. ]];
 
	end;
 
	act = function(s)
 
		walkin(starlight_dlg);
 
	end;
 
};
 
 
starlight_dlg = dlg {
 
	nam = "starlight_dlg";
 
	disp = "Джозеф Старлайт";
 
	entered = function(s)
 
		if (not char_starlight.forgetful) then
 
			pon(0);
 
		else
 
			poff(0);
 
		end;
 
		if (have(item_charts) and not warehouse18_found) then
 
			pon(14);
 
		else
 
			poff(14);
 
		end;
 
		char_starlight.forgetful = true;
 
		if (char_starlight.complete) then
 
			return [[Джозеф оборачивается к вам и удивленно вскакивает со стула: "Как вы сюда попали?!" Он подходит к двери, открывает ее и снова закрывает, после чего запирает замок: "Опять забыл, да что ж такое?!" Потом он снова оборачивается к вам и говорит: "Господин Дрейк? Мое имя Джозеф ..." - внезапно он делает паузу, после чего продолжает: "Мы же вроде все обсудили с вами?" ]];
 
		else
 
			return [[Джозеф оборачивается к вам и удивленно вскакивает со стула: "Как вы сюда попали?!" Он подходит к двери, открывает ее и снова закрывает, после чего запирает замок: "Опять забыл, да что ж такое?!" Потом он снова оборачивается к вам и говорит: "Господин Дрейк? Мое имя Джозеф Старлайт. Я думаю нам есть что обсудить касательно компании вашего отца". ]];
 
		end;
 
	end;
 
	phr = {
 
		{1, "Вы уже представлялись. ", [[Джозеф Старлайт удивленно переспрашивает: "Да?! Что-то я этого не помню. Впрочем я такими мелочами себе голову не забиваю. Давайте к делу". ]]};
 
		{2, "Я вас слушаю. ", [[Джозеф Старлайт чешет подбородок: "Как я уже говорил, это дело было одним из самых запутанных. Судите сами: верхушка преуспевающей компании, внезапно исчезает, не оставив следов. Сначала мы предполагали, что это дело рук конкурентов - прибрать компанию к рукам, прикрыть или использовать их разработки. Однако, когда начали копать, выяснили, что к этому моменту Вестхейвен Трансоушен была не в лучшем состоянии -- отдел исследований закрыт, документы уничтожены, некоторые подразделения проданы. Говоря проще -- компания разваливалась". ]], code [[ pstart('father_bankrupt') ]]};
 
		{3, tag = 'father_bankrupt'};
 
		{4, "Но зачем Уильяму разрушать собственную компанию? ", [[
 
			Джозеф Старлайт пожимает плечами: "Если бы я знал. Судя по той информации, что я о нем собрал, он весьма грамотный человек и у него были толковые помощники. Не знаю, сможете ли вы что-то сказать, господин Дрейк. Вам тогда сколько было? 10 лет?" Джозеф поправляет очки и продолжает: "У меня, конечно, есть предположение. Исследовательский отдел занимался чем-то принципиально новым, не связанным с основной деятельностью компании. Это подтверждают и отчеты компании - инженеры получали колоссальное финасирование, заказывалось огромное количество заказных деталей. Также компания зачем-то наняла нескольких видных ученых. В итоге, что бы там не планировалось - дело закончилось провалом и большими расходами, поэтому компанию пришлось закрыть. Чего я не понимаю - зачем он исчез? Любой банк бы выдал большой кредит такому человеку". ]], code [[ pstart('fathers_project') ]]};
 
		{5, tag = 'fathers_project', empty = code [[psub('final') ]]};
 
		{6, "А может у него наоборот все получилось? ", [[Джозеф Старлайт пожимает плечами: "Тогда почему он исчез? Почему оставил семью? Еще больше вопросов". ]]};
 
		{7, "Не думаю, что из-за простой неудачи мой отец мог бы бросить вообще все. ", [[Джозеф Старлайт чешет подбородок: "Я и не говорил, что это *простая* неудача. Судя по всему, проект был весьма перспективным. Настолько, что можно было рискнуть всем". ]]};
 
		{8, "И что это мог быть за проект? ", [[Джозеф Старлайт пожимает плечами: "Понятия не имею. Какое-то масштабное исследование, может быть экспедиция - это подтверждают и большое количество заказанных компанией деталей и нанятые ученые". ]], code [[ psub('submarine'); ]]};
 
		{9, tag = 'submarine'};
 
		{10, "Для чего это могло понадобиться Уильяму? ", [[Джозеф Старлайт снимает очки: "Понятия не имею. Совершенно". ]]};
 
		{11, "Это бы объяснило куда он исчез. ", [[Джозеф Старлайт чешет голову: "Может быть, только никаких документов не сохранилось. Впрочем они очень много денег на какие-то секретные проекты тратили последнее время". ]]};
 
		{13, tag = 'final'};
 
		{14, always = true, "Вы можете посмотреть эти бумаги? Вам знакомы эти места? [Показать Джозефу документы отца]", [["Так вот зачем вы здесь! Я догадывался. Давайте ваши бумаги сюда", - Джозеф выхватывает документы из ваших рук и бегло просматривает их. Почесав голову, он говорит: "Одно из этих мест я знаю". Он сообщает вам адрес склада 18. ]], code [[ warehouse18_found = true; poff(14); ]]};
 
		{15, always = true, "Мне пора. ", [[Джозеф Старлайт отворачивается к столу: "До встречи". ]], code [[ back(); ]]};
 
	};
 
};
 
 
--[[
 
    Банк
 
]]
 
london_bank_street = room {
 
    nam = "london_bank_street";
 
    disp = "Улица";
 
    dsc = [[На улице перед банком людно -- прохожие спешат по своим делам, то и дело натыкаясь друг на друга и разбегаясь в разные стороны. Среди этой суеты возвышается, словно игнорируя ее, здание, высокое и широкое, с резными колоннами, мраморными ступенями, ведущими к широким и тяжелым дверям из красного дерева и позолоченной табличкой над входом, гласящей, что перед лицезреющими это ни что иное, как банк. ]];
 
    way = {
 
        kh_vroom("В банк", "london_bank");
 
    };
 
    entered = function(s)
 
        move(char_coachman, here());
 
    end;
 
};
 
 
london_bank = room {
 
    nam = "london_bank";
 
    disp = "Банк";
 
    dsc = [[Внутри банка прохладно и светло. ]];
 
    obj = {
 
        "bank_clerks";
 
        "bank_guard";
 
    };
 
};
 
 
bank_clerks = npc {
 
    nam = "bank_clerks";
 
    dsc = [[Людей внутри почти нет, не считая нескольких скучающих за мраморной стойкой {клерков} ]];
 
    dlg = "bank_clerks_dlg";
 
};
 
 
bank_clerks_dlg = dlg {
 
    nam = "bank_clerks_dlg";
 
    disp = "Клерк";
 
    entered = [[Вы подходите к одному из клерков. Молодой человек в аккуратном пиджаке и галстуке уставляет свой взор на вас и спрашивает: "Чем я могу помочь?"]];
 
    phr = {
 
        {"[Передать сберкнижку]Я хотел бы снять деньги со своего счета. ", [[Вы протягиваете клерку сберкнижку. Он просматривает ее и отвечает: "Конечно. Минутку". Он уходит из зала и через несколько минут возвращается с мешочком монет. ]], code [[ pl.money = pl.money + 150; ]]};
 
        {always=true; "Я вернусь позже. ", [[Клерк возвращается к своим делам. ]], code [[ back(); ]]}
 
    };
 
};
 
 
bank_guard = npc {
 
    nam = "bank_guard";
 
    dsc = "и одинокого {охранника}, застывшего у входа.";
 
    phrases = {
 
        [[Охранник вежливо приветствует вас: "Добро пожаловать, господин". ]];
 
        [[Охранник пожимает плечами: "Я ничем не могу вам помочь". ]];
 
        [[Охранник зевает. ]];
 
        [[Охранник задумчиво чешет подбородок. ]];
 
    };
 
};
 
 
money_dock = obj {
 
    nam = "money_dock";
 
    dsc = "Среди куч мусора вы видите что-то {блестящее}. ";
 
    act = function(s)
 
        remove(money_dock, here());
 
        return "Пять шиллингов!";
 
    end;
 
};
 
 
money_wh32 = obj {
 
    nam = "money_wh32";
 
    dsc = "На столе лежат несколько {монет}. ";
 
    act = function(s)
 
        remove(money_wh32, here());
 
        return "Пять шиллингов!";
 
    end;
 
};
 
 
money_hotel = obj {
 
    nam = "money_hotel";
 
    dsc = "Под кроватью вы замечаете {что-то блестящее}. ";
 
    act = function(s)
 
        remove(money_hotel, here());
 
        return "Пять шиллингов!";
 
    end;
 
};
 
\ No newline at end of file
warehouse32.lua
Show inline comments
 
--[[
 
Игрок может попасть сюда только после диалога с Майклом.
 
Эта локация имеет владельца, которому не понравится, что здесь шляются посторонние.
 
Здесь игрок найдет карту.
 
]]
 
 
warehouse_32_guard = npc {
 
    var {
 
        dlg = 'warehouse_32_guard_dlg';
 
    };
 
	nam = "warehouse_32_guard";
 
	dsc = "Рядом со входом, опершись на стену, стоит {охранник}. Он не обращает на вас никакого внимания. ";
 
	phrases = {
 
		'Мне больше не о чем с ним говорить. ';
 
		'Он меня не пропустит. ';
 
	};
 
};
 
 
warehouse_32_guard_dlg = dlg {
 
	nam = "warehouse_32_guard_dlg";
 
    disp = "Охранник";
 
	entered = function(s)
 
		warehouse_32_guard.dlg = nil;
 
		warehouse32_visited = true;
 
		return [[Вы подходите к охраннику, но он не обращает на вас никакого внимания. ]];
 
	end;
 
	phr = {
 
		{"Могу я пройти внутрь?", [[Охранник медленно поворачивает голову в вашу сторону и отрывисто произносит: "Нет". ]]};
 
		{"Мне нужно поговорить с управляющим. ", [[Охранник медленно поворачивает голову в вашу сторону и отрывисто произносит: "Управляющий велел никого не пускать". ]]};
 
		{"У меня есть дело к управляющему. ", [[Охранник медленно поворачивает голову в вашу сторону и отрывисто произносит: "Значит у вас есть пропуск. Покажите мне его". ]]};
 
	};
 
};
 
 
warehouse_32_entry = room {
 
	nam = "warehouse_32_entry";
 
	disp = "Вход на склад 32";
 
	dsc = [[Склад 32 расположен в одном из промышленных районов Лондона. Вокруг дымят многочисленные фабрики, делая воздух практически непригодным для дыхания. Склад представляет собой большое здание, огороженное высоким забором. ]];
 
	entered = function(s)
 
		move(char_coachman, here());
 
	end;
 
	way = {
 
		vroom("В переулок", "warehouse_32_alley");
 
	};
 
	obj = {
 
		'warehouse_32_guard'
 
	};
 
};
 
 
warehouse_32_alley = room {
 
	nam = "warehouse_32_alley";
 
	disp = "Переулок у склада 32";
 
	dsc = [[Темный переулок, между забором склада 32 и соседним строением завален мусором. ]];
 
	way = {
 
		vroom("К главному входу", "warehouse_32_entry");
 
		vroom("Пройти дальше", "warehouse_32_behind");
 
	};
 
};
 
 
warehouse_32_behind = room {
 
	nam = "warehouse_32_behind";
 
	disp = "За складом 32";
 
	dsc = [[Узкий темный проулок за складом 32 завален мусором. От главного здания вас отделяет высокий забор из металлической решетки. За забором, почти напротив вас, вы видите заднюю дверь склада. ]];
 
	way = {
 
		vroom("Назад", "warehouse_32_alley");
 
	};
 
};
 
 
warehouse_32_guard_night = npc {
 
	nam = "warehouse_32_guard";
 
	dsc = "Рядом со входом, опершись на стену, дремлет {охранник}. ";
 
	phrases = {
 
		'Сейчас мне точно не стоит будить его. ';
 
	};
 
};
 
 
warehouse_32_night = room {
 
	nam = "warehouse_32_night";
 
	disp = "Вход на склад 32";
 
	dsc = [[Склад 32 расположен в одном из промышленных районов Лондона. Склад представляет собой большое здание, огороженное высоким забором. Сейчас темная ночь и район совершенно вымер. Лишь одинокий фонарь, висящий над входом склада, слабо освещает улицу. ]];
 
	obj = {
 
		'warehouse_32_guard_night',
 
		'char_wright_travel'
 
	};
 
	way = {
 
		vroom("В переулок", "warehouse_32_alley_night");
 
	};
 
};
 
 
warehouse_32_alley_night = darkroom {
 
	nam = "warehouse_32_alley_night";
 
	disp = "Переулок у склада 32";
 
	dsc_halflit = [[Темный переулок, между забором склада 32 и соседним строением завален мусором. Лампа освещает небольшую часть проулка, заваленного мусором. ]];
 
	dsc_dark = [[Темный переулок, между забором склада 32 и соседним строением завален мусором. Здесь совсем темно и вы ничего не видите. ]];
 
	way = {
 
		kh_vroom("К главному входу", "warehouse_32_night", 2);
 
		kh_vroom("За склад", "warehouse_32_behind_night", 1);
 
	};
 
};
 
 
warehouse_32_behind_night = room {
 
	nam = "warehouse_32_behind_night";
 
	disp = "За складом 32";
 
	dsc = [[Узкий темный проулок за складом 32 завален мусором. От главного здания вас отделяет высокий забор из металлической решетки. За забором, почти напротив вас, вы видите приоткрытую заднюю дверь склада. Над ней расположен фонарь, свет от которого едва достигает вас. ]];
 
	way = {
 
		vroom("В переулок", "warehouse_32_alley_night");
 
		vroom("Через забор", "w32_backdoor");
 
	};
 
};
 
 
char_wright_travel = npc {
 
	nam = "char_wright_travel";
 
	disp = "Джек Райт";
 
	dsc = [[На другой стороне улицы стоит небольшая крытая {повозка}, запряженная двумя лошадьми. ]];
 
	dlg = "wright_travel_dlg";
 
};
 
 
wright_travel_dlg = dlg {
 
	nam = "wright_travel_dlg";
 
	disp = "Джек Райт";
 
	entered = [[Джек приоткрывает дверь повозки и спрашивает вас: "Все готово? Уезжаем?" ]];
 
	phr = {
 
		{1, always=true, "Да, поехали. ", [[ Вы забираетесь в повозке и Джек, подстегивая лошадей, говорит: "Вперед". ]], code [[
 
			walk('wright_house_cabinet');
 
		]]};
 
		{2, always=true, "Нет еще. ", [[ Джек кивает: "Жду". ]], code [[
 
			back();
 
		]]};
 
	};
 
};
 
 
w32_backdoor = room {
 
	nam = "w32_backdoor";
 
	disp = "Склад 32, задняя дверь";
 
    dsc = [[Над прочной деревянной дверью висит фонарь, дающий слабый свет. Площадка вокруг пуста, за исключением небольшой кучки обломков у забора. ]];
 
	entered = function(s)
 
		warehouse_32.pos = "01";
 
	end;
 
	way = {
 
		kh_vroom("Войти", function(s)
 
			if (pl.has_light) then
 
				pn("Мне стоит погасить лампу, прежде чем заходить внутрь. ");
 
				return false;
 
			else
 
				return "warehouse_32";
 
			end;
 
		end);
 
		kh_vroom("Через забор", "warehouse_32_behind_night");
 
	};
 
};
 
 
w32_mgr = darkroom {
 
    var {
 
        key_inplace = true;
 
        book_inplace = true;
 
    };
 
	nam = "w32_mgr";
 
	disp = "Склад 32, кабинет управляющего";
 
	dsc_dark = [[
 
		Вы находитесь в кабинете управляющего. В темноте вы можете лишь смутно различить очертания предметов.
 
	]];
 
	dsc_halflit = [[
 
		Вы находитесь в кабинете управляющего. 
 
	]];
 
	entered = function(s)
 
		warehouse_32.pos = "54";
 
	end;
 
	way = {
 
		kh_vroom("Выйти", function(s)
 
			print(w32_mgr.key_inplace);
 
			print(w32_mgr.book_inplace);
 
			if (not w32_mgr.key_inplace or not w32_mgr.book_inplace) then
 
				pr("Стоит вернуть все как было. ");
 
				return false;
 
			elseif (pl.has_light) then
 
				pr("Если я не погашу лампу, меня заметят. ");
 
				return false;
 
			else
 
				return "warehouse_32"
 
			end;
 
		end, 2);
 
	};
 
	obj = {
 
		'w32_mgr_table',
 
		'w32_mgr_bookcase'
 
		'w32_mgr_bookcase',
 
        'money_w32'
 
	};
 
};
 
 
w32_journal = obj {
 
	nam = 'w32_journal';
 
	dsc = [[
 
		В ящике стола лежит {учетная книга}, в которую занесено все содержимое склада. 
 
	]];
 
	act = function(s)
 
		local list = [[Среди сотен записей вы натыкаетесь на несколько, отмеченных как "Westhaven":]];
 
		for i = 1, #w32_shelf_input.items do
 
			list = list .. "^".. stead.ref(w32_shelf_input.items[i].n).disp .. " " .. w32_shelf_input.items[i].shelf .. "-" .. w32_shelf_input.items[i].position;
 
		end;
 
		
 
		return list;
 
	end;
 
};
 
 
w32_mgr_table = obj {
 
    var {
 
        open = false;
 
        locked = true;
 
    };
 
	seen_level = 1;
 
	nam = 'w32_mgr_table';
 
	dsc = function(s)
 
		if (s.open) then
 
			return [[
 
				В центре комнаты расположен большой письменный стол. {Ящик} стола выдвинут.
 
			]];
 
		else
 
			return [[
 
				В центре комнаты расположен большой письменный стол. В столе имеется {ящик}.
 
			]];
 
		end;
 
	end;
 
	act = function(s)
 
		if (not s.locked) then 
 
			if (s.open) then
 
				s.open = false;
 
				w32_journal:disable();
 
				return [[
 
					Вы задвигаете ящик. 
 
				]];
 
			else
 
				s.open = true;
 
				w32_journal:enable();
 
				return [[
 
					Вы выдвигаете ящик. 
 
				]];
 
			end;
 
		else 
 
			return [[
 
				Ящик заперт. Вам придется найти ключ. 
 
			]];
 
		end;
 
	end;
 
	used = function(s, o)
 
		if (o == item_w32_key) then
 
			if (s.locked) then
 
				w32_mgr.book_inplace = false;
 
				s.locked = false;
 
				return "Вы отпираете ящик. ";
 
			else
 
				w32_journal:disable();
 
				w32_mgr.book_inplace = true;
 
				s.open = false;
 
				s.locked = true;
 
				return "Вы запираете ящик. ";
 
			end;
 
		end;
 
	end;
 
	obj = {
 
		w32_journal:disable();
 
	};
 
};
 
 
w32_mgr_bookcase = obj {
 
	seen_level = 1;
 
	nam = 'w32_mgr_bookcase';
 
	dsc = [[
 
		Одну из стен практически целиком занимает {шкаф}, заполненный книгами и записями. 
 
	]];
 
	act = function(s)
 
		item_w32_key:enable();
 
		return "Вы замечаете спрятанный за книгами ключ. ";
 
	end;
 
	used = function(s, o)
 
		if (o == item_w32_key) then
 
			w32_mgr.key_inplace = true;
 
			remove(item_w32_key, pl);
 
			put(item_w32_key, s);
 
			return "Вы возвращает ключик на место";
 
		end;
 
	end;
 
	obj = {
 
		item_w32_key:disable();
 
	};
 
};
 
 
warehouse_32_definitions = {
 
	---line E
 
	["01"] = { name="у задней двери", dsc=[[
 
		К югу от вас расположена задняя дверь склада. 
 
	]], e1 = "11", ex3 = "w32_backdoor"};
 
	["02"] = { name="тупик", dsc=[[
 
		
 
	]], e1 = "12", corner = true};
 
	["03"] = { name="тупик", dsc=[[
 
		
 
	]], e1 = "13", corner = true};
 
	["04"] = { name="тупик", dsc=[[
 
		
 
	]], e1 = "14", corner = true};
 
	---line DE
 
	["10"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "11", corner = true};
 
	["11"] = { name="секция D1", dsc=[[
 
		
 
	]], e1 = "21", e2="12", e3="01", e4="10", sector = "D1"};
 
	["12"] = { name="секция D2", dsc=[[
 
		
 
	]], e1 = "22", e2="13", e3="02", e4="11", sector = "D2"};
 
	["13"] = { name="секция D3", dsc=[[
 
		
 
	]], e1 = "23", e2="14", e3="03", e4="12", sector = "D3"};
 
	["14"] = { name="секция D4", dsc=[[
 
		
 
	]], e1 = "24", e2="15", e3="04", e4="13", sector = "D4"};
 
	["15"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "14", corner = true};
 
	---line CD
 
	["20"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "21", corner = true};
 
	["21"] = { name="секция C1", dsc=[[
 
		
 
	]], e1 = "31", e2="22", e3="11", e4="20", sector = "C1"};
 
	["22"] = { name="секция C2", dsc=[[
 
		
 
	]], e1 = "32", e2="23", e3="12", e4="21", sector = "C2"};
 
	["23"] = { name="секция C3", dsc=[[
 
		
 
	]], e1 = "33", e2="24", e3="13", e4="22", sector = "C3"};
 
	["24"] = { name="секция C4", dsc=[[
 
		
 
	]], e1 = "34", e2="25", e3="14", e4="23", sector = "C4"};
 
	["25"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "24", corner = true};
 
	---line BC
 
	["30"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "31", corner = true};
 
	["31"] = { name="секция B1", dsc=[[
 
		
 
	]], e1 = "41", e2="32", e3="21", e4="30", sector = "B1"};
 
	["32"] = { name="секция B2", dsc=[[
 
		
 
	]], e1 = "42", e2="33", e3="22", e4="31", sector = "B2"};
 
	["33"] = { name="секция B3", dsc=[[
 
		
 
	]], e1 = "43", e2="34", e3="23", e4="32", sector = "B3"};
 
	["34"] = { name="секция B4", dsc=[[
 
		
 
	]], e1 = "44", e2="35", e3="24", e4="33", sector = "B4"};
 
	["35"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "34", corner = true};
 
	---line AB
 
	["40"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "41", corner = true};
 
	["41"] = { name="секция A1", dsc=[[
 
		
 
	]], e1 = "51", e2="42", e3="31", e4="40", sector = "A1"};
 
	["42"] = { name="секция A2", dsc=[[
 
		
 
	]], e1 = "52", e2="43", e3="32", e4="41", sector = "A2"};
 
	["43"] = { name="секция A3", dsc=[[
 
		
 
	]], e1 = "53", e2="44", e3="33", e4="42", sector = "A3"};
 
	["44"] = { name="секция A4", dsc=[[
 
		
 
	]], e1 = "54", e2="45", e3="34", e4="43", sector = "A4"};
 
	["45"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "34", corner = true};
 
	---line A
 
	["51"] = { name="тупик", dsc=[[
wright.lua
Show inline comments
 
door_wright = obj {
 
    var {
 
        locked = true;
 
    };
 
	nam = "door_wright";
 
	disp = "Дверь";
 
	act = function(s)
 
		if (s.locked) then
 
			walkin "wright_entry_dlg";
 
		end;
 
		return true;
 
	end;
 
	dsc = function(s)
 
		if (s.locked) then
 
			return [[Обшарпанная деревянная {дверь}, ведущая в дом, заперта изнутри. ]];
 
		else
 
			return [[Обшарпанная деревянная {дверь}, ведущая в дом, незаперта. ]];
 
		end;
 
	end;
 
};
 
 
char_wright_home = obj {
 
    var {
 
        known = false;
 
        documents = false;
 
        known_leviathan = false;
 
    };
 
	nam = "char_wright_home";
 
	disp = "Джек Райт";
 
	dsc = function(s)
 
		if (s.documents) then
 
			return [[За столом сидит {Джек Райт} и с интересом рассматривает схемы, которые вы ему отдали. ]];
 
		else
 
            if (s.known) then
 
                return [[За столом сидит {Джек Райт}, неспешно просматривая какие-то бумаги. ]];
 
            else
 
			    return [[За столом сидит {молодой человек}, неспешно просматривающий какие-то бумаги. ]];
 
            end;         
 
		end;
 
	end;
 
	act = function(s)
 
		walkin(wright_dlg);
 
	end;
 
};
 
 
wright_dlg = dlg {
 
    var {
 
        state = 1;
 
    };
 
	nam = "wright_dlg";
 
	disp = "Джек Райт";
 
	entered = function(s)
 
        if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery and submarine_leviathan.air_level < 432000) then
 
            submarine_leviathan.air_level = 432000;
 
            lifeoff(s);
 
        end;   
 
		if (atlantis_found and submarine_leviathan.air_level > 400000 and submarine_leviathan.circuit_breaks == 0 and submarine_leviathan.power_on) then
 
			psub('leviathan_restored');
 
			return [[Джек Райт отвлекается от газеты: "Добрый день". ]];
 
		elseif (s.state == 1) then
 
			--First meeting
 
            char_wright_home.known = true;         
 
            char_wright_home.known = true;
 
			psub('first_visit');
 
			return [[Перед вами молодой человек, одетый в недорогой, но опрятный костюм. Его бледное лицо украшает короткая темная борода и пышные усы. Темные волосы коротко острижены. Серые глаза с интересом разглядывают вас. Он протягивает вам руку и представляется: "Добрый день. Мое имя -- Джек Райт. Майкл -- мой отец, но он пропал несколько лет назад". ]];
 
		elseif (s.state == 2) then
 
			--Documents not given
 
			psub('ask_documents');
 
			return [[Джек отвлекается от газеты: "Добрый день. Вы обещали принести какие-то документы". ]];
 
		elseif (s.state == 3) then
 
			--Documents given
 
			if (not leviathan_discovered) then
 
				psub('checking_documents');
 
				return [[Джек отвлекается от документов: "Добрый день. Если вы по поводу документов, то я еще ничего не нашел". ]];
 
			else
 
				s.state = 5;
 
				warehouse32_found = true;
 
				psub('warehouse_discovered');
 
                pl.money = pl.money + 100;
 
				return [[Джек отвлекается от документов: "Добрый день. У меня хорошие новости. Я нашел склад 32", - он достает карту города и показывает вам место. Потом он достает из стола мешочек денег и протягивает вам со словами: "Надеюсь, это поможет тебе в поисках". ]];
 
			end;
 
		elseif (s.state == 4) then
 
			--Documents taken back
 
			psub('ask_documents2');
 
			return [[Джек отвлекается от газеты: "Добрый день. Я хотел бы еще раз вглянуть на эти бумаги". ]];
 
		elseif (s.state == 5) then
 
			psub('warehouse_discovered2');
 
            poff("phr_warehouse_visited");
 
            poff("phr_leviathan");
 
            if (warehouse32_visited) then
 
                pon("phr_warehouse_visited");
 
            end;
 
            if (not char_wright_home.known_leviathan) then
 
                pon("phr_leviathan");
 
            end;
 
			return [[Джек отвлекается от газеты: "Добрый день". ]];
 
		elseif (s.state == 7) then
 
			psub('warehouse_discovered3');
 
			return [[Джек отвлекается от газеты: "Добрый день". ]];
 
		end;
 
	end;
 
	phr = {
 
		{tag='first_visit'};
 
		{"Мое имя -- Дэвид Дрейк. Мне удалось найти кое-какие документы в одном из тайников отца. Этот адрес был среди них. Вы что-то знаете о судьбе моего отца? ", [[Джек вздыхает: "Это бесполезно. Я изучил практически все, до чего сумел дотянуться - газеты, судебные дела. И ничего - никаких зацепок. Компания обанкротилась, руководители пропали". ]], code [[wright_dlg.state = 2; psub('ask_documents'); ]]};
 
		{tag='ask_documents'};
 
		{always = true, "[Отдать документы]Посмотрите это. Не думаю, что вы это видели. ", [[Джек нехотя забирает бумаги из ваших рук и бегло их осматривает. Пожимая плечами, он комментирует: "Ничего интересного, просто планы старых зданий. Док 2? Отец там часто бывал, впрочем не думаю, что после 10 лет там что-то осталось. Если хотите - можете оставить документы, я попробую разузнать побольше". ]], code [[ 
 
			dock_found = true;
 
			wright_dlg.state = 3; 
 
			remove(item_charts, pl); 
 
			psub("checking_documents");
 
		]]};
 
		{always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу - помогу". ]], code [[psub('questions')]]};
 
		{always = true, "Я вернусь позже.", [[ Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]};
 
		{tag='checking_documents'};
 
		{always = true, "Вы можете вернуть мне бумаги?", [["Конечно. Если принесете их снова -- я возобновлю поиски", - Джек возвращает вам документы. ]], code [[
 
			wright_dlg.state = 4;
 
			put(item_charts, pl);
 
			back();
 
		]]};
 
		{always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу - помогу". ]], code [[psub('questions')]]};
 
		{always = true, "Я вернусь позже.", [[Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]};
 
		{tag='questions'};
 
		{"Вы знаете, чем занимался ваш отец в Вестхейвен Трансоушен?", [["Частично", - Джек показывает на картину на стене: "Он проектировал корабли, был главным инженером. Перед тем, как исчезнуть, он часто запирался в этом кабинете, подолгу что-то чертил. До глубокой ночи книги читал... Никаких материалов он не оставил. Он, вообще, очень ответственно относился к этому - никто никогда не знал, чем конкретно он занимается, кроме его подчиненных и вашего отца". ]]};
 
		{always = true, "Вернемся к делу.", [[Джек кивает: "Хорошо". ]], code [[ pret(); ]]};
 
		{tag='ask_documents2'};
 
		{always = true, "[Отдать документы]Вот документы.", [[Джек забирает бумаги и раскладывает их на своем столе: "Спасибо, я посмотрю, что смогу найти". ]], code[[ wright_dlg.state = 3; remove(item_charts, pl); back(); ]]};
 
		{always = true, "У меня есть несколько вопросов.", [[Джек кивает: "Чем смогу - помогу". ]], code [[psub('questions')]]};
 
		{always = true, "Я вернусь позже.", [[Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]};
 
		{tag='warehouse_discovered'};
 
		{"[Рассказать о Левиафане]Я кое-что нашел в доке...", [[Джек мгновенно вскакивает со стула, восклицая: "Ничего себе, я должен это видеть!" ]], code [[
 
            char_wright_home.known_leviathan = true;
 
            rel_jack = rel_jack + 1;
 
            walkin('wright_leviathan_cutscene1a'); 
 
        ]]};
 
		{always = true, "Отлично, я съезжу туда и посмотрю, что удастся найти.", [[Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]};
 
		{tag='warehouse_discovered2'};
 
        {tag="phr_leviathan", "[Рассказать о Левиафане]Я кое-что нашел в доке...", [[Джек мгновенно вскакивает со стула, восклицая: "Ничего себе, я должен это видеть!" ]], code [[
 
            char_wright_home.known_leviathan = true;
 
            rel_jack = rel_jack + 1;
 
            walkin('wright_leviathan_cutscene1a'); 
 
        ]]};      
 
		{tag="phr_warehouse_visited", always = true, "На склад мне попасть не удалось.", function(s)
 
            if (char_wright_home.known_leviathan) then
 
                psub("warehouse_break_in");
 
                return [[Джек с досадой стучит по столу: "Черт!"^ Еще пару минут он задумчиво сидит в кресле, после чего предлагает идею: "Мы можем попробовать проникнуть туда тайком. Я довезу вас туда, но внутри все делать придется вам". ]]
 
            else
 
                psub('warehouse_break_in_reluctant');
 
                return [[Джек вздыхает: "Ну вот и все. Боюсь, больше мы ничего не узнаем". ]];
 
            end;
 
        end};
 
		{always = true, "Я вернусь позже.", [[Джек возвращается к своим делам: "До встречи". ]], code [[ back(); ]]};
 
		{tag='warehouse_break_in'};
 
		{always = true, "Надо попробовать.", [["Хорошо", - отвечает Джек. Приготовления занимают все время до вечера. Наконец, после наступления темноты, вы садитесь в повозку и Джек привозит вас к складу 32. ]], code [[ walk('warehouse_32_night'); ]]};
 
		{always = true, "Лучше не стоит.", [[Джек разочарованно отвечает: "Очень жаль". ]], code [[ pret(); ]]};
 
        {tag='warehouse_break_in_reluctant'};
 
        {always = true, "Мы можем попробовать проникнуть туда. Вдруг там что-то сохранилось?", [[Джек удивленно переспрашивает: "Проникнуть? Дэвид, вы в своем уме?"]], code [[ psub("w_bir2");]]};
 
        {always = true, "Я пойду.", [[Джек возвращается к своим делам: "До встречи". ]]};
 
        {tag="w_bir2"};
 
        {always = true, "Если мы хотим найти моего и вашего отца - нам нужно действовать вместе.", [[Джек отрицательно качает головой: "Я не готов действовать такими методами". ]], code [[ psub("w_bir3");]]};
 
        {always = true, "Вы правы, это глупо.", [[Джек молча кивает. ]], code [[ pret(); ]]};
 
        {tag="w_bir3"};
 
        {"Вы готовы остановиться в шаге от цели?", [[Джек отвечает не сразу: "Мы не знаем, насколько мы близко. "]]};
 
        { "У нас нет другого выбора. Это наша единственная зацепка", [[Джек берет карандаш, вертит его в руках несколько минут, потом смотрит на картину. Наконец, он соглашается: "Будь по вашему". Приготовления занимают все время до вечера. Наконец, после наступления темноты, вы садитесь в повозку и Джек привозит вас к складу 32. ]], code [[
 
            wright_dlg.state = 7;
 
            walk("warehouse_32_night");
 
        ]]};
 
        {"У вас есть другие предложения?", [[Джек вздыхает: "Нет. Придется признать, поиски зашли в тупик". ]]};
 
        {always = true, "Вы правы, это глупо.", [[Джек молча кивает. ]], code [[ psub("warehouse_break_in_reluctant"); ]]};
 
		{tag='warehouse_discovered3'};
 
		{always = true, "Надо еще раз попасть на склад.", [["Хорошо", - отвечает Джек. После наступления темноты, вы садитесь в повозку и Джек привозит вас к складу 32. ]], code [[ psub('warehouse_break_in'); ]]};
 
		{always = true, "Я вернусь позже.", [["До встречи". ]], code [[ back(); ]]};
 
		{tag='leviathan_restored_known'};
 
		{always = true, "Мне удалось починить \"Левиафан\". Мне понадобится помощник на борту.", [[Джек поднимается с кресла и одевает пальто: "Безусловно, я готов", - сообщает вам он. "Здесь меня ничто не держит". ]], code [[ 
 
			lifeon("char_wright");
 
			table.insert(pl.party, 'wright');
 
			walk('leviathan_wardroom'); 
 
		]]};
 
		{always = true, "Я вернусь позже.", [[
 
			"До встречи".
 
		]], code [[ back(); ]]};
 
        {tag='leviathan_restored'};
 
        {always = true, "Я нашел подводный корабль. Мне понадобится помощь в управлении им. ", [[Джек мгновенно вскакивает со стула, восклицая: "Ничего себе! Я должен это видеть!". ]], code [[ 
 
            lifeon("char_wright");
 
            table.insert(pl.party, 'wright');
 
            walk('wright_leviathan_cutscene2'); 
 
        ]]};
 
        {always = true, "Я вернусь позже.", [[Джек возвращается к своим делам: "До встречи".]], code [[ back(); ]]};
 
	};
 
};
 
 
wright_leviathan_cutscene2 = cutscene("wright_leviathan_cutscene2", "Причал", [[Вместе с Джеком вы приезжаете в док. Райт долго и с интересом осматривает корпус _"Левиафана"_. Внутри, Джек долго обходит отсеки, разглядывая все узлы. Наконец, вы оказываетесь в кают-компании и он сообщает: "Я готов". ]], 'leviathan_wardroom');
 
 
wright_leviathan_cutscene1a = cutscene("wright_leviathan_cutscene1a", "Причал", [[Вместе с Джеком Райтом вы отправляетесь в док 2. После прибытия на место, Джек долго и с интересом осматривает металлический корпус субмарины. С задумчивым видом он ходит туда-сюда вдоль причала. ]], 'wright_leviathan_cutscene1b');
 
 
wright_leviathan_cutscene1b = dlg {
 
	nam = "wright_leviathan_cutscene1b";
 
	disp = "Причал";
 
	entered = [[После очередного круга, он спрашивает: "Она работает?"]];
 
	phr = {
 
		{"Десять лет под водой. Не думаю, что там хоть что-то сохранилось.", [[Джек задумчиво смотрит на металлический корпус, на табличку с выгравированным названием. Наконец он говорит: "Надо попытаться попасть внутрь, а затем посмотрим". Еще немного постояв, он возвращается к кэбу. Джек оборачивается к вам и спрашивает: "Пора ехать. Вы со мной?" ]], code [[ psub('choice'); ]]};
 
		{"Не уверен, но, думаю, да.", [[Джек задумчиво смотрит на металлический корпус, на табличку с выгравированным названием. Наконец он говорит: "Надо попытаться попасть внутрь, а затем посмотрим". Еще немного постояв, он возвращается к кэбу. Джек оборачивается к вам и спрашивает: "Пора ехать. Вы со мной?"]], code [[ psub('choice'); ]]}; 
 
		{tag='choice'};
 
		{"Да, поехали.", [[	Вы садитесь в кэб и возвращаетесь домой к Джеку. ]], [[
 
			walk('wright_house_cabinet');
 
		]]};
 
		{"Я останусь тут.", [[Джек садится в кэб и уезжает домой, вы остаетесь в доке один. ]], [[
 
			walk('dock_mooring');
 
		]]};
 
	};
 
};
 
 
wright_entry_dlg = dlg {
 
	nam = "wright_entry_dlg";
 
	disp = "Голос за дверью";
 
	entered = function(s)
 
		psub("start");
 
		return [[Вы стучите в дверь. Через некоторое время вам отвечает сонный голос: "Кто здесь?" ]];
 
	end;
 
	hideinv = true;
 
	phr = {
 
		{tag = "start"};
 
		{always = true, "Могу я увидеть Майкла Райта?", [[Голос за дверью повторяет вопрос: "Кто спрашивает?"]], code [[ psub('who') ]]};
 
		{always = true, "Извините, я ошибся адресом.", code [[ back(); ]]},
 
		{tag = 'who'};
 
		{"Вы знаете Уильяма Дрейка?", [["Понятия не имею. Кто спрашивает?" - В голосе собеседника явно прослеживается некоторое недовольство. ]], code [[ psub('irritated') ]]};
 
		{"Майкл Райт здесь живет?", [["Кто спрашивает?" - В голосе собеседника явно прослеживается некоторое недовольство. ]], code [[ psub('irritated') ]]};
 
		{always = true, "У меня важное сообщение для него.", [["Он тут не живет уже много лет. Уходите" - вам показалось, что голос собеседника слегка дрогнул при этих словах. ]], code [[ back(); ]]};
 
		{tag = 'irritated'};
 
		{"Мой отец - Уильям Дрейк, работал с Майклом Райтом. Так вы знаете его?", [[Вы слышите звук отодвигающегося засова и ответ: "Проходите". ]], code [[ 
 
			door_wright.locked = false;
 
			path("В дом", wright_house):enable();
 
			back();
 
		]]};
 
	};
 
};
 
 
wright_drawing = obj {
 
	nam = 'wright_drawing';
 
	dsc = [[На стене напротив двери висит большая {картина}, изображающая пароход. ]];
 
	act = [[На картине во всех деталях изображен пароход _"Огненная стрела"_, принадлежавший Вестхейвен Трансоушен, полным ходом идущий по бескрайнему океану. Яркое солнце освещает палубу, на которой находится множество пассажиров, прогуливающихся, общающихся, сидящих на скамейках. Из всех трех труб парохода идет густой черный дым, а на корме развевается флаг Соединенного Королевства. Под картиной вы видите небольшую табличку с надписью: _"Майклу Райту, создателю ,,Огненной стрелы''. Альберт Мур, 1889"_. ]];
 
};
 
 
wright_table = obj {
 
	nam = "wright_table";
 
	disp = "Стол";
 
	dsc =[[В центре комнаты стоит массивный дубовый стол. На его полированной поверхности разбросаны в кажущемся беспорядке бумаги, письменные принадлежности, старые газеты и другие предметы. ]];
 
};
 
 
wright_house_cabinet = room {
 
	nam = "wright_house_cabinet";
 
	disp = "Дом Райта, кабинет";
 
	dsc = [[Стены комнаты оклеены старыми обоями с полустершимся рисунком. Сквозь большие окна в комнату проникает достаточно света. ]];
 
	obj = {
 
        'wright_drawing',   
 
		'wright_table',
0 comments (0 inline, 0 general)