Files @ 38255c2dc001
Branch filter:

Location: games/Awakening/powerplant.lua

Silverwing
Warehouse 18: Done
WIP: Warehouse 32
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},
	};
};