File diff fda22c203ad5 → 77aa01170934
powerplant.lua
Show inline comments
 
new file 100644
 
first_city_powerplant_door = obj {
 
	nam = "first_city_powerplant_door";
 
	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;
 
};
 
 
first_city_powerplant_door_inside = obj {
 
	nam = "first_city_powerplant_door";
 
	dsc = function(s)
 
		if(first_city_powerplant_door.open) then 
 
			return "{Входные двери} открыты. ";
 
		else
 
			return "{Входные двери} закрыты. ";
 
		end;
 
	end;
 
	act = function(s)
 
		if(first_city_powerplant_door.open) then 
 
			return "Двери уже открыты";
 
		else
 
			return "У вас не получается открыть двери. Возможно, это делается в другом месте";
 
		end;
 
	end;
 
};
 
 
first_city_powerplant = room {
 
	nam = "first_city_powerplant";
 
	disp = "Лсэрианотр, энергостанция";
 
	dsc = [[
 
		Вы находитесь в комнате управления энергоснабжением Лсэрианотра. Сквозь скафандр вы ощущаете слабую вибрацию, исходяющую от работающих неподалеку генераторов.
 
	]];
 
	entered = function(s)
 
		service_tunnels.position = "35";
 
	end;
 
	obj = {
 
		"powerplant_control",
 
		"first_city_powerplant_door_inside"
 
	};
 
	way = {
 
		kh_vroom("Выйти из здания", "first_city_middle_east", "powerplant_out"):disable();
 
		kh_vroom("В сервиcный тоннель", "service_tunnels");
 
	};
 
};
 
 
powerplant_control = obj {
 
	nam = "powerplant_control";
 
	disp = "Терминал управления энергоснабжением";
 
	dsc = "У одной из стен расположен {огромный экран}, на котором, судя по всему, отмечены линии энергоснабжения и ключевые источники потребления энергии. ^";
 
	act = function(s)
 
		walkin(powerplant_control_dlg);
 
	end;
 
};
 
 
powerplant_control_dlg = dlg {
 
	nam = "powerplant_control_dlg";
 
	disp = "Терминал управления энергоснабжением";
 
	dsc = "На экране вы видите подробную схему энергосетей города. Несколько иконок внизу экрана показывают вам, что нужно нажимать, чтобы перейти в различные режимы управления. ";
 
	entered = function()
 
		if (first_city_powerplant_door.open) then
 
			poff(3);
 
			pon(4);
 
		else
 
			poff(4);
 
			pon(3);
 
		end;
 
	end;
 
	phr = {
 
		{1, always = true, "Перейти в режим управления системами защиты", function(s)
 
			walkin(powerplant_defence_control_dlg);
 
			return false;
 
		end; };
 
		{3, "Разблокировать вход в здание", function(s)
 
			pon(4);
 
			first_city_powerplant_door.open = true;
 
			path("powerplant_out", "first_city_powerplant"):enable();
 
			path("to_powerplant", "first_city_middle_east"):enable();
 
			return "Входные двери открываются";
 
		end; };
 
		{4, "Заблокировать вход в здание", function(s)
 
			pon(3);
 
			first_city_powerplant_door.open = false;
 
			path("powerplant_out", "first_city_powerplant"):disable();
 
			path("to_powerplant", "first_city_middle_east"):disable();
 
			return "Входные двери закрываются";
 
		end; };
 
		{5, always = true, "Внимательно осмотреть схему города", "На схеме изображены все три кольца города, эта энергостанция и еще две других, расположенные во внешнем и внутреннем кольце. Ворота, соединяющие внешнее и среднее кольцо отмечены открытыми, ворота, соединяющие среднее и внутреннее кольцо закрыты. "};
 
		{255, always = true, "Отойти от терминала",function(s)
 
			back();
 
		end; };
 
	};
 
};
 
 
powerplant_defence_control_dlg = dlg {
 
	nam = "powerplant_defence_control_dlg";
 
	disp = "Терминал управления энергоснабжением систем защиты";
 
	states = {0, 1, 0, 1};
 
	locked = 1;
 
	pic = function(s)
 
		local image = 'images/power_bcg.png';
 
		if (s.locked == 1) then
 
			image = image .. ";images/power_lock.png@62,31";
 
		elseif (s.locked == 2) then
 
			image = image .. ";images/power_lock.png@62,93";
 
		elseif (s.locked == 3) then
 
			image = image .. ";images/power_lock.png@31,62";
 
		elseif (s.locked == 4) then
 
			image = image .. ";images/power_lock.png@93,62";
 
		end;
 
		
 
		image = image .. ";images/power_" .. tostring(s.states[1]) .. ".png@62,31";
 
		image = image .. ";images/power_" .. tostring(s.states[2]) .. ".png@62,93";
 
		image = image .. ";images/power_" .. tostring(s.states[3]) .. ".png@31,62";
 
		image = image .. ";images/power_" .. tostring(s.states[4]) .. ".png@93,62";
 
		return image;
 
	end;
 
	detect = function(s)
 
		return (s.states[1] == 1 and s.states[2] == 3 
 
			and s.states[3] == 0 and s.states[4] == 2) or 
 
			(s.states[1] == 3 and s.states[2] == 1 
 
			and s.states[3] == 2 and s.states[4] == 0)
 
	end;
 
	dsc = "На экране видна схема питания систем защиты. Иконки внизу экрана подсказывают, что нажимать при отключении";
 
	phr = {
 
		{1, always = true, "блокировать верхний переключатель", "Изображение на экране изменилось.", function(s)
 
			powerplant_defence_control_dlg.locked = 1;
 
		end;},
 
		{2, always = true, "блокировать нижний переключатель", "Изображение на экране изменилось.", function(s)
 
			powerplant_defence_control_dlg.locked = 2;
 
		end;},
 
		{3, always = true, "блокировать левый переключатель", "Изображение на экране изменилось.", function(s)
 
			powerplant_defence_control_dlg.locked = 3;
 
		end;}, 
 
		{4, always = true, "блокировать правый переключатель", "Изображение на экране изменилось.", function(s)
 
			powerplant_defence_control_dlg.locked = 4;
 
		end;}, 
 
		{5, always = true, "поворот по часовой", "Изображение на экране изменилось.", function(s)
 
			for i = 1, 4 do
 
				if (i ~= powerplant_defence_control_dlg.locked) then
 
					powerplant_defence_control_dlg.states[i] = powerplant_defence_control_dlg.states[i] + 1;
 
					if (powerplant_defence_control_dlg.states[i] > 3) then
 
						powerplant_defence_control_dlg.states[i] = 0;
 
					end;
 
				end;
 
			end;
 
			if (powerplant_defence_control_dlg.detect(powerplant_defence_control_dlg)) then
 
				p("Защитные системы отключены"); --TODO сделать нормальный фидбэк
 
			end;
 
		end;},
 
		{6, always = true, "поворот против часовой", "Изображение на экране изменилось.", function(s)
 
			for i = 1, 4 do
 
				if (i ~= powerplant_defence_control_dlg.locked) then
 
					powerplant_defence_control_dlg.states[i] = powerplant_defence_control_dlg.states[i] - 1;
 
					if (powerplant_defence_control_dlg.states[i] < 0) then
 
						powerplant_defence_control_dlg.states[i] = 3;
 
					end;
 
				end;
 
			end;
 
			if (powerplant_defence_control_dlg.detect(powerplant_defence_control_dlg)) then
 
				p("Защитные системы отключены"); --TODO сделать нормальный фидбэк
 
			end;
 
		end;}, 
 
		{255, always = true, "выход", function(s)
 
			back();
 
		end},
 
	};
 
};
 
\ No newline at end of file