diff --git a/powerplant.lua b/powerplant.lua new file mode 100644 --- /dev/null +++ b/powerplant.lua @@ -0,0 +1,182 @@ +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