global { lse_powerplant_found = false }; lse_item_toolbox = obj { nam = "toolbox"; disp = "Ящик с инструментами"; dsc = [[ У входа лежит {ящик с инструментами}, столь опрометчиво(или предусмотрительно?) оставленный Дэвидом. ]]; tak = [[ Фаэтларр забирает ящик с собой. ]]; inv = [[ Ящик со всевозможными инструментами. Большую часть из них Фаэтларр видит впервые. ]]; }; lse_leviathan_cargo_hold = room { nam = "lse_leviathan_cargo_hold"; disp = "Левиафан, грузовой отсек"; dsc = [[Фаэтларр находится в грузовом отсеке Левиафана, среди множества ящиков в котором так легко затеряться. ]]; obj = { "player_phaetlarr", "lse_item_toolbox", "item_spear" }; way = { kh_vroom("В коридор", "lse_leviathan_corridor"); }; }; lse_leviathan_corridor = room { nam = "lse_leviathan_corridor"; disp = "Левиафан, коридор"; dsc = [[Фаэтларр находится в основном коридоре Левиафана. Длинный металлический коридор освещен ярким светом электрических ламп. По левому борту расположены двери кают. Одна из них была выделена Фаэтларру и навьяр на некоторое время задержал взгляд на ней - дверь ничем не отличалась от соседних, за исключением цифры "5", нарисованной на ней белой краской. ]]; way = { kh_vroom("В каюту капитана", function(s) pr [[ "Не стоит тратить на это время", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); kh_vroom("В каюту №1", function(s) pr [[ "Не стоит тратить на это время", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); kh_vroom("В каюту №2", function(s) pr [[ "Не стоит тратить на это время", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); kh_vroom("В каюту №3", function(s) pr [[ "Не стоит тратить на это время", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); kh_vroom("В каюту №4", function(s) pr [[ "Не стоит тратить на это время", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); kh_vroom("В каюту №5", function(s) pr [[ "Не стоит тратить на это время", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); kh_vroom("В кают-компанию", "lse_leviathan_wardroom", 1); kh_vroom("В грузовой отсек", "lse_leviathan_cargo_hold", 1); kh_vroom("В машинный отсек", function(s) pr [[ "Не стоит тратить на это время", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); kh_vroom("На нижнюю палубу", function(s) pr [[ "Не стоит тратить на это время", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); }; }; lse_leviathan_wardroom = room { nam = "lse_leviathan_wardroom"; disp = "Левиафан, кают-компания"; dsc = [[ Фаэтларр находится в кают-компании Левиафана. Это просторная комната, освещенная ярким светом электрических ламп. В центре кают-компании укреплен массивный металлический стол, вокруг которого стоят несколько стульев. ]]; way = { kh_vroom("В рубку", function(s) pr [["Там я ничего не смогу сделать", - промелькнула мысль в голове Фаэтларра. ]]; return false; end); kh_vroom("В шлюз", "lse_leviathan_airlock"); kh_vroom("В коридор", "lse_leviathan_corridor"); }; obj = { "lse_phone_wardroom"; }; }; lse_phone_wardroom = obj { nam = "lse_phone_wardroom"; disp = "Телефон"; dsc = [[На столе, рядом с креслом Дрейка установлен {телефонный аппарат}. ^]]; act = [[Фаэтларр не умеет этим пользоваться. ]]; }; lse_leviathan_airlock = room { nam = "lse_leviathan_airlock"; disp = "Левиафан, шлюз"; dsc = [[Фаэтларр находится в шлюзовом отсеке Левиафана. Люк не задраен. ]]; way = { kh_vroom("В кают-компанию", "lse_leviathan_wardroom"); kh_vroom("Наверх", "lse_leviathan_airlock_up"); }; }; lse_leviathan_airlock_up = room { nam = "lse_leviathan_airlock_up"; disp = "Левиафан, люк"; dsc = function(s) return [[Фаэтларр выглядывает из люка Левиафана. Субмарина находится все там же - в доке, у ворот Лсэрианотра. ]]; end; obj = { "lse_lev_guard" }; way = { kh_vroom("Вниз", "lse_leviathan_airlock"); kh_vroom("Наружу", function(s) if (lse_lev_guard.state == 0) then return "game_over_phaetlarr_caught"; else return "lse_dock_pier"; end; end); }; }; lse_lev_guard = obj { var { state = 0; }; nam = "lse_lev_guard"; dsc = function(s) if (s.state == 0) then return "У пирса рядом с Левиафаном стоит {группа стражников}"; else return "Стражники отошли в дальний конец дока. Фаэтларр сможет незаметно пробежать мимо. "; end; end; use = function(s,o) if (o == lse_item_toolbox) then s.state = 1; return [[ Фаэтларр достает из ящика первый попавшийся предмет и кидает его в воду, подальше от Левиафана. Стражники, услышав всплеск, дружно направились туда. ]]; end; end; }; lse_dock_pier = room { nam = "lse_dock_pier"; disp = "Лсэрианотр, док, у Левиафана"; dsc = [[ Фаэтларр стоит на пирсе рядом с Левиафаном. Несколько стражников что-то ищут В другом конце дока. ]]; way = { kh_vroom("К выходу", "lse_dock"); }; }; lse_dock = room { var { state = 0; }; nam = "lse_dock"; disp = "Лсэрианотр, док, у входа"; dsc = function(s) if (s.state == 0) then return [[ Фаэтларр стоит у выхода из дока. Массивные металлические двери плотно закрыты и приоткрыть их не представляется возможным. ]]; else return [[ Фаэтларр стоит у выхода из дока. Массивные металлические двери слегка приоткрыты и вы можете спокойной проскользнуть внутрь. ]]; end; end; obj = { "lse_dock_panel" }; way = { kh_vroom("В дверь", function(s) if (lse_dock.state == 0) then pr [[Дверь заперта]]; return false; else return "lse_outer_1"; end; end); }; }; lse_dock_panel = obj { var { state = 0; }; nam = "lse_dock_panel"; dsc = function(s) if (s.state == 0) then return [[Рядом с дверью расположена небольшая {панель}. ]]; else return [[Под открытой {панелью} находятся какие-то провода. Скорее всего, они используются для управления дверью. ]]; end; end; act = function(s) if (s.state == 0) then return [[Фаэтларр пытается открыть панель руками, но ничего не получается. ]]; else walkin("lse_dock_in_panel"); end; end; }; lse_dock_in_panel = room { var { state = 0; index = 0; cut = nil; }; nam = "lse_dock_in_panel"; disp = "Лсэрианотр, док, панель управления дверью"; entered = function(s) if (s.state == 0) then s.state = 1; s.index = rnd(7) - 1; end; end; pic = function(s) local pic = "images/lse_door_bcg.gif;images/lse_door_marker.png@496," .. tostring(3 + 38 * s.index); return pic; end; dsc = [[За панелью скрывается множество проводов. Фаэтларр легко определяет, какой из них задействован в управлении дверью.]]; obj = { 'lse_dock_cut1', 'lse_dock_cut2', 'lse_dock_cut3', 'lse_dock_cut4', 'lse_dock_cut5', 'lse_dock_cut6', 'lse_dock_cut7', 'lse_dock_back' }; }; lse_dock_cut1 = obj { nam = "lse_dock_cut1"; dsc = "{Обрезать фиолетово-синий провод}^"; act = function(s) if (lse_dock_in_panel.index == 3) then lse_dock.state = 1; pr [[Фаэтларр перерезает провод и дверь открывается. ]]; walk("lse_dock"); elseif (lse_dock_in_panel.cut == nil) then lse_dock_in_panel.cut = 3; pr [[Фаэтларр перерезает провод. Свет в помещении моргает. Рядом с панелью начинает мигать красная лампочка. ]]; elseif (lse_dock_in_panel.cut == 3) then pr [[Этот провод уже перерезан. ]]; else walk("game_over_phaetlarr_wrong_wire"); end; end; }; lse_dock_cut2 = obj { nam = "lse_dock_cut2"; dsc = "{Обрезать фиолетово-зеленый провод}^"; act = function(s) if (lse_dock_in_panel.index == 0) then lse_dock.state = 1; pr [[Фаэтларр перерезает провод и дверь открывается. ]]; walk("lse_dock"); elseif (lse_dock_in_panel.cut == nil) then lse_dock_in_panel.cut = 0; pr [[Фаэтларр перерезает провод. Свет в помещении моргает. Рядом с панелью начинает мигать красная лампочка. ]]; elseif (lse_dock_in_panel.cut == 0) then pr [[Этот провод уже перерезан. ]]; else walk("game_over_phaetlarr_wrong_wire"); end; end; }; lse_dock_cut3 = obj { nam = "lse_dock_cut3"; dsc = "{Обрезать фиолетово-желтый провод}^"; act = function(s) if (lse_dock_in_panel.index == 4) then lse_dock.state = 1; pr [[Фаэтларр перерезает провод и дверь открывается. ]]; walk("lse_dock"); elseif (lse_dock_in_panel.cut == nil) then lse_dock_in_panel.cut = 4; pr [[Фаэтларр перерезает провод. Свет в помещении моргает. Рядом с панелью начинает мигать красная лампочка. ]]; elseif (lse_dock_in_panel.cut == 4) then pr [[Этот провод уже перерезан. ]]; else walk("game_over_phaetlarr_wrong_wire"); end; end; }; lse_dock_cut4 = obj { nam = "lse_dock_cut4"; dsc = "{Обрезать фиолетово-оранжевый провод}^"; act = function(s) if (lse_dock_in_panel.index == 1) then lse_dock.state = 1; pr [[Фаэтларр перерезает провод и дверь открывается. ]]; walk("lse_dock"); elseif (lse_dock_in_panel.cut == nil) then lse_dock_in_panel.cut = 1; pr [[Фаэтларр перерезает провод. Свет в помещении моргает. Рядом с панелью начинает мигать красная лампочка. ]]; elseif (lse_dock_in_panel.cut == 1) then pr [[Этот провод уже перерезан. ]]; else walk("game_over_phaetlarr_wrong_wire"); end; end; }; lse_dock_cut5 = obj { nam = "lse_dock_cut5"; dsc = "{Обрезать фиолетово-красный провод}^"; act = function(s) if (lse_dock_in_panel.index == 2) then lse_dock.state = 1; pr [[Фаэтларр перерезает провод и дверь открывается. ]]; walk("lse_dock"); elseif (lse_dock_in_panel.cut == nil) then lse_dock_in_panel.cut = 2; pr [[Фаэтларр перерезает провод. Свет в помещении моргает. Рядом с панелью начинает мигать красная лампочка. ]]; elseif (lse_dock_in_panel.cut == 2) then pr [[Этот провод уже перерезан. ]]; else walk("game_over_phaetlarr_wrong_wire"); end; end; }; lse_dock_cut6 = obj { nam = "lse_dock_cut6"; dsc = "{Обрезать сине-зеленый провод}^"; act = function(s) if (lse_dock_in_panel.index == 6) then lse_dock.state = 1; pr [[Фаэтларр перерезает провод и дверь открывается. ]]; walk("lse_dock"); elseif (lse_dock_in_panel.cut == nil) then lse_dock_in_panel.cut = 6; pr [[Фаэтларр перерезает провод. Свет в помещении моргает. Рядом с панелью начинает мигать красная лампочка. ]]; elseif (lse_dock_in_panel.cut == 6) then pr [[Этот провод уже перерезан. ]]; else walk("game_over_phaetlarr_wrong_wire"); end; end; }; lse_dock_cut7 = obj { nam = "lse_dock_cut7"; dsc = "{Обрезать сине-желтый провод}^"; act = function(s) if (lse_dock_in_panel.index == 5) then lse_dock.state = 1; pr [[Фаэтларр перерезает провод и дверь открывается. ]]; walk("lse_dock"); elseif (lse_dock_in_panel.cut == nil) then lse_dock_in_panel.cut = 5; pr [[Фаэтларр перерезает провод. Свет в помещении моргает. Рядом с панелью начинает мигать красная лампочка. ]]; elseif (lse_dock_in_panel.cut == 5) then pr [[Этот провод уже перерезан. ]]; else walk("game_over_phaetlarr_wrong_wire"); end; end; }; lse_dock_back = obj { nam = "lse_dock_back"; dsc = "{Отойти от панели}^"; act = function(s) walk("lse_dock"); end; }; lse_outer_1 = room { nam = "lse_outer_1"; disp = "Лсэрианотр, внешнее кольцо"; dsc = [[Во внешнем кольце Лсэрианотра нет никого, кто мог бы помешать планам Фаэтларра. К неудовольствию навьяра, улица полностью пуста - нет ни ящиков, ни скамеек, ни камней ни даже какой-нибудь растительности, чтобы можно было хоть как-то укрыться. По левому и правому краю - сплошные металлические стены с закрытыми дверьми. Над городом виднелся громадный купол, на который сверху давит океанская толща. Фаэтларр огляделся - слева вдалеке он заметил группу прогуливающихся навьяров. ]]; way = { kh_vroom("Против часовой стрелки", function(s) pr [[ "Я не хочу попадаться никому на глаза. Лучше туда не ходить", - подумал Фаэтларр. ]]; return false; end); kh_vroom("По часовой стрелке", "lse_outer_2"); }; }; lse_outer_2 = room { nam = "lse_outer_2"; disp = "Лсэрианотр, внешнее кольцо"; dsc = [[Внешнее кольцо Лсэрианотра поражает своей пустотой и безжизненностью. Лишь одинаковые двери на равном расстоянии друг от друга во внешней и внутренней стороне привлекают внимание. Над городом виднелся громадный купол, на который сверху давит океанская толща. ]]; way = { kh_vroom("Против часовой стрелки", "lse_outer_1"); kh_vroom("По часовой стрелке", "lse_outer_3"); }; }; lse_outer_3 = room { nam = "lse_outer_3"; disp = "Лсэрианотр, внешнее кольцо"; dsc = [[Внешнее кольцо Лсэрианотра поражает своей пустотой и безжизненностью. Лишь одинаковые двери на равном расстоянии друг от друга во внешней и внутренней стороне привлекают внимание. Над городом виднелся громадный купол, на который сверху давит океанская толща. ]]; obj = { 'lse_outer_service_entrance' }; way = { kh_vroom("Против часовой стрелки", "lse_outer_2"); kh_vroom("По часовой стрелке", "lse_outer_4"); kh_vroom("В сервисный тоннель", "service_tunnels_1"):disable(); }; }; lse_outer_service_entrance = obj { var { state = 0; }; nam = "lse_outer_service_entrance"; dsc = function(s) if (s.state == 0) then return [[Во внутренней стене Фаэтларр замечает отверстие закрытое {решеткой}. Через него вполне мог бы пролезть человек или навьяр. ]]; else return [[Решетка, закрывающая проход убрана, теперь Фаэтларр вполне может пролезть в него. ]]; end; end; use = function(s, o) if (o == lse_item_toolbox and s.state == 0) then s.state = 1; path('В сервисный тоннель'):enable(); return [[ Недолго думая, Фаэтларр с помощью ломика выковыривает решетку. ]]; end; end; }; lse_outer_4 = room { nam = "lse_outer_4"; disp = "Лсэрианотр, внешнее кольцо"; dsc = [[Внешнее кольцо Лсэрианотра поражает своей пустотой и безжизненностью. Лишь одинаковые двери на равном расстоянии друг от друга во внешней и внутренней стороне привлекают внимание. Над городом виднелся громадный купол, на который сверху давит океанская толща. Дальше безжизненность города становится еще более полной - в той части города даже не горит свет. ]]; way = { kh_vroom("Против часовой стрелки", "lse_outer_3"); kh_vroom("По часовой стрелке", function(s) pr [[ "Нет смысла туда идти", - мелькнула мысль в голове Фаэтларра. ]]; return false; end); }; }; lse_prison_overseer_room = room { nam = "lse_prison_overseer_room"; disp = "Лсэрианотр, тюрьма"; dsc = "Фаэтларр находится в небольшой комнатке. "; obj = { 'lse_prison_table', 'lse_prison_guard' }; way = { kh_vroom("В тоннель", "service_tunnels_1"); kh_vroom("В дверь", function(s) if (lse_prison_guard.state == 1) then if (lse_prison_table.state == 1) then return "lse_prison_fight_intro"; else pr [[Дверь заперта. ]]; return false; end; else return "game_over_lse_prison"; end; end); }; }; lse_prison_table = obj { var { state = 0; }; nam = "lse_prison_table"; dsc = "В центре комнаты установлен {стол} с несколькими индикаторами, кнопками и переключателями. "; act = function(s) if (lse_prison_guard == 1) then if (s.state == 1) then return [["Я уже все здесь сделал", - подумал Фаэтларр. ]]; else lse_prison_table.state = 1; return [[Фаэтларр бегло взглянул на подписи к переключателям и щелкнув пару из них, отошел от стола. ]]; end; else return "Стражник не позволит Фаэтларру сделать это. "; end; end; }; lse_prison_guard = obj { var { state = 0; }; nam = "lse_prison_guard"; dsc = function(s) if (s.state == 0) then return "За столом сидит {стражник} и внимательно наблюдает за мигающими на столе индикаторами. " else return "На полу рядом со столом валяется стражник без сознания. "; end; end; act = [["Приложить бы его чем-нибудь, чтобы не мешался", - мелькнула мысль в голове Фаэтларра. ]]; use = function(s, o) if (s.state == 0 and o == lse_item_toolbox) then s.state = 0; return [[Фаэтларр бьет стражника ящиком по голове, от чего тот падает на пол без чувств. ]]; end; end; }; lse_prison_fight_intro = cutscene("lse_prison_fight_intro", "Лсэрианотр, тюрьма", function(s) pr [[Прошло не так много времени, с того момента, как Блэк запер вас здесь. Вы даже не успели как следует осмотреть камеру и обдумать возможные способы побега. Внезапно, двери камер открываются. Пользуясь моментом, вы выбегаете наружу. Да, вам придется в одиночку и без оружия противостоять отряду вооруженных копьями навьяров-охранников, однако это лучше, чем оставаться взаперти. ]] if (#player_drake.party > 1) then pr [[На помощь вам из других камер выходят ваши спутники. ]]; end; pr [[Дверь в конце коридора открывается и в нее вбегает Фаэтларр. К вашему удивлению, вы замечаете у него свой револьвер. ]]; end, "lse_prison_fight", function(s) for i=#pl.obj,1,-1 do table.remove(pl.obj, i); end; end); lse_prison_fight = battlefield { nam = "lse_prison_fight"; disp = "Лсэрианотр, тюрьма"; lose = "game_over_lse_prison_fight"; win = "lse_prison_fight_victory"; plX = 1; plY = 6; map = { {2,2,0,0,0,2,2}, {0,0,0,0,0,0,0}, {2,2,0,0,0,2,2}, {0,0,0,0,0,0,0}, {2,2,0,0,0,2,2}, {0,0,0,0,0,0,0}, {2,2,0,0,0,2,2} }; entered = function(s) if (have(item_spear)) then lse_cmbt_phaetlarr.hasSpear = true; end; move(player_drake, here()); remove(player_phaetlarr); pl = player_drake; if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then table.insert(lse_prison_fight, 2, lse_cmbt_learr); end; if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then table.insert(lse_prison_fight, 2, lse_cmbt_wright); end; if (ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then table.insert(lse_prison_fight, 2, lse_cmbt_radcliffe); end; if (ArrayUtils.indexOf(pl.party, 'anna') ~= 0) then table.insert(lse_prison_fight, 2, lse_cmbt_anna); end; end; make_turn = function(s) if (not have(item_colt, pl) and here().plX == 2 and here().plY == 6) then p([[Вы подбираете револьвер, брошенный Фаэтларром. ]]); take(item_colt); end; end; obj = { 'lse_cmbt_phaetlarr', --'lse_cmbt_learr', --'lse_cmbt_wright', --'lse_cmbt_radcliffe', --'lse_cmbt_anna', 'lse_cmbt_guard1', 'lse_cmbt_guard2', 'lse_cmbt_guard3', 'lse_cmbt_guard4', 'lse_cmbt_guard5', 'lse_cmbt_guard6' }; }; lse_cmbt_learr = combatant { nam = "lse_cmbt_learr"; disp2 = "Леарр"; disp3 = "Леарр"; x = 7; y = 2; pic = "images/learr.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasSpear = false; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Леарр ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; for i = 1,#enemies do print(enemies[i].p.l); end; -- AI Order: -- If has spear and enemy is far - throw spear -- If has spear and enemy is close - hit with spear -- if spear is nearer than any enemy - walk towards spear -- walk towards nearest enemy -- If enemy close and enemy has spear - take spear from enemy -- If enemy close and enemy doesn't have spear - hit with claws if s.hasSpear then if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); return; end; else if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Леарр бьет " .. enemy.disp2 .. " и попадает. "); return; end; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Леарр идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Леарр} готова к бою. ]]; else return [[ {Леарр} без сознания. ]]; end; end; }; lse_cmbt_phaetlarr = combatant { nam = "lse_cmbt_phaetlarr"; disp2 = "Фаэтларра"; disp3 = "Фаэтларру"; x = 4; y = 7; pic = "images/phaetlarr.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasSpear = false; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Фаэтларр ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; -- AI Order: -- If has spear and enemy is far - throw spear -- If has spear and enemy is close - hit with spear -- if spear is nearer than any enemy - walk towards spear -- walk towards nearest enemy -- If enemy close and enemy has spear - take spear from enemy -- If enemy close and enemy doesn't have spear - hit with claws if s.hasSpear then if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. "); return; end; else if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Фаэтларр бьет " .. enemy.disp2 .. " и попадает. "); return; end; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Фаэтларр идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Фаэтларр} готов к бою. ]]; else return [[ {Фаэтларр} без сознания. ]]; end; end; }; lse_cmbt_wright = combatant { nam = "lse_cmbt_wright"; disp2 = "Джека"; disp3 = "Джеку"; x = 1; y = 2; pic = "images/jack.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = false; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Райт ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; -- AI Order: -- If has harpoon and enemy is far - shoot -- If has harpoon and enemy is close - hit with harpoon -- walk towards nearest enemy if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Райт бьет " .. enemy.disp2 .. " и попадает. "); return; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Райт идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Райт} готов к бою. ]]; else return [[ {Райт} без сознания. ]]; end; end; }; lse_cmbt_radcliffe = combatant { nam = "lse_cmbt_radcliffe"; disp2 = "Уолтера"; disp3 = "Уолтеру"; x = 1; y = 4; pic = "images/walter.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = false; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Уолтер ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; -- AI Order: -- If has harpoon and enemy is far - shoot -- If has harpoon and enemy is close - hit with harpoon -- walk towards nearest enemy if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Уолтер бьет " .. enemy.disp2 .. " и попадает. "); return; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Уолтер идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Уолтер} готов к бою. ]]; else return [[ {Уолтер} без сознания. ]]; end; end; }; lse_cmbt_anna = combatant { nam = "lse_cmbt_anna"; disp2 = "Анну"; disp3 = "Анне"; x = 7; y = 4; pic = "images/anna.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = false; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Анна ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; -- AI Order: -- If has harpoon and enemy is far - shoot -- If has harpoon and enemy is close - hit with harpoon -- walk towards nearest enemy if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Анна бьет " .. enemy.disp2 .. " и попадает. "); return; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Анна идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Анна} готова к бою. ]]; else return [[ {Анна} без сознания. ]]; end; end; }; lse_cmbt_guard = function(nam, index, x, y, spear) return combatant { nam = nam; disp2 = "стражника " .. tostring(index); disp3 = "стражнику " .. tostring(index); x = x; y = y; hp = 4; pic = "images/navjiarr_guard".. index ..".png"; shootHit = "Вы стреляете в стражника и попадаете в него. "; shootMiss = "Вы стреляете в стражника, но не попадаете в него. "; shootKill = "Вы стреляете в стражника и он падает замертво. "; handHit = "Вы ударяете стражника. "; handKill = "После вашего удара стражник падает. "; handFar = "Слишком далеко. "; hasSpear = spear; enemy = true; dsc = function(s) if (s.hp > 0) then if (s.hasSpear) then return "{Стражник " .. tostring(index).. "} вооружен копьем готов к бою. "; else return "{Стражник " .. tostring(index).. "} готов к бою. "; end; else return false; end; end; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.ally and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1]; local path = here():getWalkDistance(s.x, s.y, here().plX, here().plY); if (not enemy or path and enemy.p.l > path.l ) then enemy = pl; else path = enemy.p; enemy = enemy.o; end; if (not enemy or not path) then pn("Стражник ".. tostring(index).. " ждет. "); return; end; -- AI Order: -- If has spear and enemy is close - hit with spear -- walk towards nearest enemy -- If enemy close - hit with claws if (s.hasSpear) then here():canShoot(s.x,s.y, enemy.x, enemy.y); if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then if (math.abs(s.x - enemy.x) == 2 or math.abs(s.y - enemy.y) == 2) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем и попадает. "); return; end; end; else if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " и попадает. "); return; end; end; print("fug2",path); s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Стражник ".. tostring(index).. " идет к " .. enemy.disp3 .. ". "); end; }; end; lse_cmbt_guard1 = lse_cmbt_guard("lse_cmbt_guard1", 1, 3, 1, false); lse_cmbt_guard2 = lse_cmbt_guard("lse_cmbt_guard2", 2, 5, 1, false); lse_cmbt_guard3 = lse_cmbt_guard("lse_cmbt_guard3", 3, 3, 3, true); lse_cmbt_guard4 = lse_cmbt_guard("lse_cmbt_guard4", 4, 5, 3, true); lse_cmbt_guard5 = lse_cmbt_guard("lse_cmbt_guard5", 5, 3, 5, false); lse_cmbt_guard6 = lse_cmbt_guard("lse_cmbt_guard6", 6, 5, 5, false); lse_prison_fight_victory = dlg { nam = "lse_prison_fight_victory"; disp = "Лсэрианотр, тюрьма"; entered = [[Вы избавляетесь от стражников. Теперь нужно принять решение, что делать дальше, Фаэтларр сообщает вам: "Последователи Блэка редко посещают среднее кольцо. Если нам удастся попасть туда, то у нас будет время обдумать дальнейшие действия. Последнее слово за тобой, Дрейк". С этими словами навьяр передает вам ваши револьвер и ящик с инструментами. ]]; phr = { {"Есть другие варианты?", [[Фаэтларр пожимает плечами: "Я предложил то, что считаю правильным. Но я последую за тобой. Остановить Блэка важнее всего. "]]}; {"Ты знаешь где сейчас блэк?", [[Фаэтларр утвердительно кивает: "Он не выходит из центрального зала. Там мы его и настигнем", - руки Фаэтларра сжались в кулаки, когти и зубы выразительно блестнули в свете электрических ламп. ]]}; {"Хорошо, пойдем", code = [[ walk('lse_hideout_intro_dlg');]]}; }; }; lse_hideout_intro_dlg = dlg { nam = "lse_hideout_intro_dlg"; disp = "Лсэрианотр, убежище"; entered = function(s) pr [[В комнате охранников вы находите ваши вещи. Фаэтларр проводит вас по сервисным тоннелям в среднее кольцо Лсэрианотра. Эта часть города мало чем отличается внешне от тех мест, что вы видели ранее. Точно такие же сплошные стены слева и справа. Точно такие же одинаковые металлические двери на равном расстоянии друг от друга. Как вы и ожидали, секция оказывается практически полностью пустой. Фаэтларр проводит вас в одну из дверей. "Попробуем здесь", - говорит он и с помощью нехитрых манипуляций открывает ее, впуская вас внутрь. ^Вы оказываетесь в небольшом узком коридоре. По его сторонам вы видите несколько проходов, ведущих в небольшие помещения, неизвестного вам назначения. За одним из проходов скрывается просторная комната с установленным в центре массивным металлическим столом и несколькими стульями вокруг. ]]; if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then pr [[Леарр осматривает помещение: "Я поверить-не-могу, что наши это-все-построили. "]]; end; if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then pr [[Джек Райт с сомнением пожимает плечами: "Неплохое местечко. И не думаю, что они будут нас здесь искать. "]]; end; if (ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then pr [[Уолтер Рэдклифф молча садится за стол. ]]; end; if (ArrayUtils.indexOf(pl.party, 'anna') ~= 0) then pr [[Анна садится рядом с братом. ]]; end; end; phr = { {"Фаэтларр, что ты можешь рассказать нам о городе?", [[Фаэтларр кивает и сразу предупреждает: "Я не-успел-разузнать почти-ничего", - сделав небольшую паузу, он продолжает: "Город кругами-выстроен. Они называют-это кольцами. Три кольца есть. Внешнее-кольцо склады и помещения для гостей содержит. В среднем кольце горожане-живут и служебные-здания-стоят. Внутреннее кольцо - дом ученых. Помимо врат, кольца соединены служебными проходами, часть которых находится под водой. "]]}; {"Фаэтларр, как мы можем попасть в центр города?", [[Фаэтларр пожимает плечами: "Я не-знаю. Мы найдем. "]]}; {"Ждите меня здесь, я попробую пробраться к Блэку. ", function(s) if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then pr [[]]; end; if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then pr [[]]; end; if (ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then pr [[]]; end; if (ArrayUtils.indexOf(pl.party, 'anna') ~= 0) then pr [[]]; end; end, code [[ walk("lse_hideout_main_room"); ]]} }; }; lse_hideout_main_room = room { nam = "lse_hideout_main_room"; disp = "Лсэрианотр, убежище"; dsc = [[Просторное помещение с металлическими стенами слабо освещено. В центре комнаты расположен стол с шестью стульями вокруг. ]]; obj = { "lse_hideout_cabinet" }; way = { kh_vroom("В коридор", "lse_hideout_corridor"); }; }; lse_hideout_cabinet = obj { nam = "lse_hideout_cabinet"; dsc = [[В углу комнаты стоит небольшая {тумбочка} из неизвестного материала. ]]; act = [[Вы пытаетесь открыть тумбочку, но не можете это сделать. ]]; }; lse_hideout_corridor = room { nam = "lse_hideout_corridor"; disp = "Лсэрианотр, убежище, коридор"; dsc = [[Узкий коридор. От стен исходит мягкое свечение, гораздо более слабое чем в городе. В полумраке вы видите пять проходов, ведущих в соседние помещения. Шестой проход, ведущий в город, закрывает металлическая дверь. ]]; way = { kh_vroom("В зал", "lse_hideout_main_room"), kh_vroom("В первую комнату", "lse_hideout_first_room"), kh_vroom("Во вторую комнату", "lse_hideout_second_room"), kh_vroom("В третью комнату", "lse_hideout_third_room"), kh_vroom("В четвертую комнату", "lse_hideout_fourth_room"), kh_vroom("В город", "lse_middle_2") }; }; lse_hideout_first_room = room { nam = "lse_hideout_first_room"; disp = "Лсэрианотр, убежище, комната"; dsc = [[Небольшая каморка, вдоль стен которой расположены пустые стеллажи. Освещения в комнате нет, за исключением света, проникающего из коридора. ]]; way = { kh_vroom("В коридор", "lse_hideout_corridor"); }; }; lse_hideout_second_room = room { nam = "lse_hideout_second_room"; disp = "Лсэрианотр, убежище, комната"; dsc = [[Небольшая каморка, вдоль стен которой расположены пустые стеллажи. Освещения в комнате нет, за исключением света, проникающего из коридора. ]]; way = { kh_vroom("В коридор", "lse_hideout_corridor"); }; }; lse_hideout_third_room = room { nam = "lse_hideout_third_room"; disp = "Лсэрианотр, убежище, комната"; dsc = [[Небольшая каморка, вдоль стен которой расположены пустые стеллажи. Освещения в комнате нет, за исключением света, проникающего из коридора. ]]; way = { kh_vroom("В коридор", "lse_hideout_corridor"); }; obj = { "item_pickaxe" }; }; lse_hideout_fourth_room = room { nam = "lse_hideout_fourth_room"; disp = "Лсэрианотр, убежище, комната"; dsc = [[Небольшая каморка, вдоль стен которой расположены пустые стеллажи. Освещения в комнате нет, за исключением света, проникающего из коридора. ]]; way = { kh_vroom("В коридор", "lse_hideout_corridor"); }; }; lse_middle_1 = room { nam = "lse_middle_1"; disp = "Лсэрианотр, среднее кольцо"; dsc = [[Эта часть города еще не активирована. Единственное освещение исходит из соседней секции. Во внутренней стене есть прроход в сервисные тоннели. Решетка, закрывающая его искорежена и валяется рядом. ]]; entered = function(s) service_tunnels_2.position = "45"; end; way = { kh_vroom("Против часовой стрелки", function(s) pr [["Мне нечего там делать". ]]; return false; end); kh_vroom("По часовой стрелке", "lse_middle_2"); kh_vroom("В сервисный тоннель", function(s) if lse_powerplant_found then return "service_tunnels_2"; else p [["Я не уверен, что мне туда. "]]; return false; end; end); }; }; lse_middle_2 = room { nam = "lse_middle_2"; disp = "Лсэрианотр, среднее кольцо"; dsc = [[Среднее кольцо Лсэрианотра мало чем отличается от внешнего - та же пустота и безжизненность. Большая часть кольца еще не активирована - свет горит лишь в отдельных секциях. ]]; way = { kh_vroom("Против часовой стрелки", "lse_middle_1"); kh_vroom("По часовой стрелке", "lse_middle_3"); kh_vroom("В убежище", "lse_hideout_corridor"); }; }; lse_middle_3 = room { nam = "lse_middle_3"; disp = "Лсэрианотр, среднее кольцо"; dsc = [[Среднее кольцо Лсэрианотра мало чем отличается от внешнего - та же пустота и безжизненность. ]]; way = { kh_vroom("Против часовой стрелки", "lse_middle_2"); kh_vroom("По часовой стрелке", "lse_middle_4"); }; }; lse_middle_4 = room { nam = "lse_middle_4"; disp = "Лсэрианотр, среднее кольцо"; dsc = [[Среднее кольцо Лсэрианотра мало чем отличается от внешнего - та же пустота и безжизненность. Большая часть кольца еще не активирована - свет горит лишь в отдельных секциях. Одна из дверей в этой секции отличается от остальных - она заметно больше, а над ней на небольшой металлической табличке нанесены цветные полосы, складывающиеся в слово: "[Библиотека]"]]; way = { kh_vroom("Против часовой стрелки", "lse_middle_3"); kh_vroom("В библиотеку", "lse_middle_library"); kh_vroom("По часовой стрелке", function(s) pr [["Мне нечего там делать. "]]; return false; end); }; }; lse_middle_library = room { var { indexa = nil; }; nam = "lse_middle_library"; disp = "Лсэрианотр, библиотека"; dsc = [[Вы находитесь в просторном зале. ]]; entered = function(s) if (not s.indexa) then s.indexa = tostring(rnd(6) - 1) .. tostring(rnd(6) - 1).. tostring(rnd(6) - 1); end; end; obj = { "lse_library_shelves" }; way = { kh_vroom("В город", "lse_middle_4"); }; }; lse_library_shelves = obj { nam = "lse_library_shelves"; dsc = "Зал уставлен высокими {стеллажами}, заполненными металлическими табличками, содержащими навьярские записи. "; act = function(s) walkin(lse_library_shelves_input); end; }; lse_library_shelves_input = input_number_nav { nam = "w32_shelf_input"; disp = "Стеллаж"; maxlen = 3; label = "Укажите номер записи:"; check = function(s, input) if (string.len(input) ~= 3) then pn[[Номер записи должен быть трехзначным. ]]; back(); end; if (input == "000") then pn([[Вы достаете табличку с номером 000 и обнаруживаете, что это каталог имеющихся материалов. Вы узнаете, что искомые вами сведения хранятся в записях номер ]] .. lse_middle_library.indexa); elseif (input == lse_middle_library.indexa) then pn [[Бегло просмотрев найденную схему, вы узнаете, что через сервисные тоннели города вы можете попасть практически в любую его часть, в том числе и в центральный зал. Для того, чтобы попасть в центральный зал, вам придется сперва попасть во внутреннее кольцо. Кроме того, все проходы во внутреннее кольцо, кроме врат, ведут через нижний город, заполненный водой. ]]; lse_powerplant_found = true; else pn [[Эти записи не содержат ничего интересного для вас. ]]; end; back(); end; }; lse_timer = function(s) local loc = stead.deref(here()); if (lse_guard1.loc == "lse_inner_1") then lse_guard1.dir = 2; lse_guard1.loc = "lse_inner_2"; if (loc == "lse_inner_1" or here().out == "lse_inner_1") then pn("Стражник уходит. "); elseif (loc == "lse_inner_3" or here().out == "lse_inner_3" or loc == "lse_inner_4" or here().out == "lse_inner_4") then pn("Стражник приближается. "); elseif (here().out == "lse_inner_2") then pn("Снаружи маячит стражник. "); end; elseif (lse_guard1.loc == "lse_inner_2") then if (lse_guard1.dir == 2) then lse_guard1.loc = "lse_inner_3"; if (loc == "lse_inner_1") then pn("Стражник уходит. "); elseif (loc == "lse_inner_4") then pn("Стражник приближается. "); elseif (here().out == "lse_inner_3") then pn("Снаружи маячит стражник. "); end; else lse_guard1.loc = "lse_inner_1"; if (loc == "lse_inner_3") then pn("Стражник уходит. "); elseif (loc == "lse_inner_4") then pn("Стражник уходит. "); elseif (here().out == "lse_inner_1") then pn("Снаружи маячит стражник. "); end; end; if (here().out == "lse_inner_2") then pn("Стражник уходит. "); end; else lse_guard1.dir = 1; lse_guard1.loc = "lse_inner_2"; if (loc == "lse_inner_3" or here().out == "lse_inner_3") then pn("Стражник уходит. "); elseif (loc == "lse_inner_1" or here().out == "lse_inner_1") then pn("Стражник приближается. "); elseif (loc == "lse_inner_4" or here().out == "lse_inner_4") then pn("Стражник уходит. "); elseif (here().out == "lse_inner_2") then pn("Снаружи маячит стражник. "); end; end; print("lse_guard1", lse_guard1.loc); if (lse_guard2.loc == "lse_inner_5") then lse_guard2.dir = 2; lse_guard2.loc = "lse_inner_6"; if (loc == "lse_inner_5" or here().out == "lse_inner_5") then pn("Стражник уходит. "); elseif (loc == "lse_inner_5") then pn("Стражник уходит. "); elseif (loc == "lse_inner_7" or here().out == "lse_inner_7") then pn("Стражник приближается. "); elseif (here().out == "lse_inner_6") then pn("Снаружи маячит стражник. "); end; elseif (lse_guard2.loc == "lse_inner_6") then if (lse_guard2.dir == 2) then lse_guard2.loc = "lse_inner_7"; if (loc == "lse_inner_5") then pn("Стражник уходит. "); elseif (loc == "lse_inner_4") then pn("Стражник уходит. "); elseif (here().out == "lse_inner_7") then pn("Снаружи маячит стражник. "); end; else lse_guard2.loc = "lse_inner_5"; if (loc == "lse_inner_7") then pn("Стражник уходит. "); elseif (loc == "lse_inner_4") then pn("Стражник приближается. "); elseif (here().out == "lse_inner_5") then pn("Снаружи маячит стражник. "); end; end; if (loc == "lse_inner_6" or here().out == "lse_inner_6") then pn("Стражник уходит. "); end; else lse_guard2.dir = 1; lse_guard2.loc = "lse_inner_6"; if (loc == "lse_inner_4") then pn("Стражник приближается. "); elseif (loc == "lse_inner_7" or here().out == "lse_inner_7") then pn("Стражник уходит. "); elseif (loc == "lse_inner_5" or here().out == "lse_inner_5") then pn("Стражник приближается. "); elseif (here().out == "lse_inner_6") then pn("Снаружи маячит стражник"); end; end; print("lse_guard2", lse_guard2.loc); if (loc == lse_guard1.loc or loc == lse_guard2.loc) then timer:stop(); game.timer = nil; walk("game_over_lse_guards"); end; end; lse_guard1 = { dir = 1; loc = "lse_inner_3"; }; lse_guard2 = { dir = 1; loc = "lse_inner_7"; }; lse_inner_1 = room { nam = "lse_inner_1"; disp = "Лсэрианотр, внутреннее кольцо"; dsc = function(s) local f = [[Внутреннее кольцо Лсэрианотра разительно контрастирует с другими. Хотя изначально оно не проектировалось как жилое, сейчас большинство навьяров живет здесь. ]]; if (lse_guard1.loc == "lse_inner_2") then if (lse_guard1.dir == 1) then f = f .. [[^^Стражник приближается с направления против часовой стрелки. ]]; else f = f .. [[^^Стражник удаляется в направлении против часовой стрелки. ]]; end; elseif (lse_guard1.loc == "lse_inner_3") then f = f .. [[^^Вдалеке, в направлении против часовой стрелки, вы видите стражника. ]]; end; return f; end; enter = function(s) if (lse_guard1.loc == "lse_inner_1") then timer:stop(); game.timer = nil; walk("game_over_lse_guards"); end; end; entered = function(s) if (game.timer ~= lse_timer) then lse_guard1.loc = "lse_inner_3"; lse_guard1.dir = 1; game.timer = lse_timer; timer:set(4000); end; end; way = { kh_vroom("Против часовой стрелки", "lse_inner_2"); kh_vroom("В помещение", "lse_inner_1_inside"); kh_vroom("В энергостанцию", function(s) timer:stop(); game.timer = nil; return "lse_powerplant"; end); kh_vroom("По часовой стрелке", function(s) pn [[Вам там нечего делать. ]]; return false; end); }; }; lse_inner_1_inside = room { nam = "lse_inner_1_inside"; out = "lse_inner_1"; disp = "Лсэрианотр, помещение"; dsc = function(s) local f = [[Узкий коридор с несколькими дверьми, ведущими в маленькие комнатки, по сторонам. ]]; if (lse_guard1.loc == "lse_inner_1") then f = f .. [[^^Снаружи маячит стражник. ]]; end; return f; end; way = { kh_vroom("В город", "lse_inner_1"); }; }; lse_inner_2 = room { nam = "lse_inner_2"; disp = "Лсэрианотр, внутреннее кольцо"; dsc = function(s) local f = [[Внутреннее кольцо Лсэрианотра разительно контрастирует с другими. Хотя изначально оно не проектировалось как жилое, сейчас большинство навьяров живет здесь. ]]; if (lse_guard1.loc == "lse_inner_1") then f = f .. [[Стражник приближается с направления по часовой стрелке]]; elseif (lse_guard1.loc == "lse_inner_3") then f = f .. [[Стражник приближается с направления против часовой стрелки]]; end; return f; end; enter = function(s) if (lse_guard1.loc == "lse_inner_2") then timer:stop(); game.timer = nil; walk("game_over_lse_guards"); end; end; way = { kh_vroom("Против часовой стрелки", "lse_inner_3"); kh_vroom("В помещение", "lse_inner_2_inside"); kh_vroom("По часовой стрелке", "lse_inner_1"); }; }; lse_inner_2_inside = room { nam = "lse_inner_2_inside"; out = "lse_inner_2"; disp = "Лсэрианотр, помещение"; dsc = function(s) local f = [[Узкий коридор с несколькими дверьми, ведущими в маленькие комнатки, по сторонам. ]]; if (lse_guard1.loc == "lse_inner_2") then f = f .. [[^^Снаружи маячит стражник. ]]; end; return f; end; way = { kh_vroom("В город", "lse_inner_2"); }; }; lse_inner_3 = room { nam = "lse_inner_3"; disp = "Лсэрианотр, внутреннее кольцо"; dsc = function(s) local f = [[Внутреннее кольцо Лсэрианотра разительно контрастирует с другими. Хотя изначально оно не проектировалось как жилое, сейчас большинство навьяров живет здесь. ]]; if (lse_guard1.loc == "lse_inner_2") then if (lse_guard1.dir == 2) then f = f .. [[^^Стражник приближается с направления по часовой стрелке. ]]; else f = f .. [[^^Стражник удаляется в направлении по часовой стрелке. ]]; end; elseif (lse_guard1.loc == "lse_inner_1") then f = f .. [[^^Вдалеке, в направлении по часовой стрелке, вы видите стражника. ]]; end; return f; end; enter = function(s) if (lse_guard1.loc == "lse_inner_3") then timer:stop(); game.timer = nil; walk("game_over_lse_guards"); end; end; way = { kh_vroom("Против часовой стрелки", "lse_inner_4"); kh_vroom("В помещение", "lse_inner_3_inside"); kh_vroom("По часовой стрелке", "lse_inner_2"); }; }; lse_inner_3_inside = room { nam = "lse_inner_3_inside"; out = "lse_inner_3"; disp = "Лсэрианотр, помещение"; dsc = function(s) local f = [[Узкий коридор с несколькими дверьми, ведущими в маленькие комнатки, по сторонам. ]]; if (lse_guard1.loc == "lse_inner_3") then f = f .. [[^^Снаружи маячит стражник. ]]; end; return f; end; way = { kh_vroom("В город", "lse_inner_3"); }; }; lse_inner_4 = room { nam = "lse_inner_4"; disp = "Лсэрианотр, внутреннее кольцо"; dsc = function(s) local f = [[Внутреннее кольцо Лсэрианотра разительно контрастирует с другими. Хотя изначально оно не проектировалось как жилое, сейчас большинство навьяров живет здесь. ]]; if (lse_guard1.loc == "lse_inner_2") then f = f .. [[^^Вдалеке в направлении по часовой стрелке вы видите стражника. ]]; elseif (lse_guard1.loc == "lse_inner_3") then f = f .. [[^^В направлении по часовой стрелке вы видите стражника. ]]; end; if (lse_guard2.loc == "lse_inner_6") then f = f .. [[^^Вдалеке в направлении против часовой стрелки вы видите стражника. ]]; elseif (lse_guard2.loc == "lse_inner_5") then f = f .. [[^^В направлении против часовой стрелки вы видите стражника. ]]; end; return f; end; way = { kh_vroom("Против часовой стрелки", "lse_inner_5"); kh_vroom("В помещение", "lse_inner_4_inside"); kh_vroom("По часовой стрелке", "lse_inner_3"); }; }; lse_inner_4_inside = room { nam = "lse_inner_4_inside"; out = "lse_inner_4"; disp = "Лсэрианотр, помещение"; dsc = [[Узкий коридор с несколькими дверьми, ведущими в маленькие комнатки, по сторонам. ]]; way = { kh_vroom("В город", "lse_inner_4"); }; }; lse_inner_5 = room { nam = "lse_inner_5"; disp = "Лсэрианотр, внутреннее кольцо"; dsc = function(s) local f = [[Внутреннее кольцо Лсэрианотра разительно контрастирует с другими. Хотя изначально оно не проектировалось как жилое, сейчас большинство навьяров живет здесь. ]]; if (lse_guard2.loc == "lse_inner_6") then if (lse_guard2.dir == 1) then f = f .. [[^^Стражник приближается с направления против часовой стрелки. ]]; else f = f .. [[^^Стражник удаляется в направлении против часовой стрелки. ]]; end; elseif (lse_guard2.loc == "lse_inner_7") then f = f .. [[^^Вдалеке, в направлении против часовой стрелки, вы видите стражника. ]]; end; return f; end; enter = function(s) if (lse_guard2.loc == "lse_inner_5") then timer:stop(); game.timer = nil; walk("game_over_lse_guards"); end; end; way = { kh_vroom("Против часовой стрелки", "lse_inner_6"); kh_vroom("В помещение", "lse_inner_5_inside"); kh_vroom("По часовой стрелке", "lse_inner_4"); }; }; lse_inner_5_inside = room { nam = "lse_inner_5_inside"; out = "lse_inner_5"; disp = "Лсэрианотр, помещение"; dsc = function(s) local f = [[Узкий коридор с несколькими дверьми, ведущими в маленькие комнатки, по сторонам. ]]; if (lse_guard2.loc == "lse_inner_5") then f = f .. [[^^Снаружи маячит стражник. ]]; end; return f; end; way = { kh_vroom("В город", "lse_inner_5"); }; }; lse_inner_6 = room { nam = "lse_inner_6"; disp = "Лсэрианотр, внутреннее кольцо"; dsc = function(s) local f = [[Внутреннее кольцо Лсэрианотра разительно контрастирует с другими. Хотя изначально оно не проектировалось как жилое, сейчас большинство навьяров живет здесь. ]]; if (lse_guard2.loc == "lse_inner_5") then f = f .. [[Стражник приближается с направления по часовой стрелке]]; elseif (lse_guard2.loc == "lse_inner_7") then f = f .. [[Стражник приближается с направления против часовой стрелки]]; end; return f; end; enter = function(s) if (lse_guard2.loc == "lse_inner_6") then timer:stop(); game.timer = nil; walk("game_over_lse_guards"); end; end; way = { kh_vroom("Против часовой стрелки", "lse_inner_7"); kh_vroom("В помещение", "lse_inner_6_inside"); kh_vroom("По часовой стрелке", "lse_inner_5"); }; }; lse_inner_6_inside = room { nam = "lse_inner_6_inside"; out = "lse_inner_6"; disp = "Лсэрианотр, помещение"; dsc = function(s) local f = [[Узкий коридор с несколькими дверьми, ведущими в маленькие комнатки, по сторонам. ]]; if (lse_guard2.loc == "lse_inner_6") then f = f .. [[^^Снаружи маячит стражник. ]]; end; return f; end; way = { kh_vroom("В город", "lse_inner_6"); }; }; lse_inner_7 = room { nam = "lse_inner_7"; disp = "Лсэрианотр, внутреннее кольцо"; dsc = function(s) local f = [[Внутреннее кольцо Лсэрианотра разительно контрастирует с другими. Хотя изначально оно не проектировалось как жилое, сейчас большинство навьяров живет здесь. ]]; if (lse_guard2.loc == "lse_inner_6") then if (lse_guard2.dir == 2) then f = f .. [[^^Стражник приближается с направления по часовой стрелке. ]]; else f = f .. [[^^Стражник удаляется в направлении по часовой стрелке. ]]; end; elseif (lse_guard2.loc == "lse_inner_5") then f = f .. [[^^Вдалеке, в направлении по часовой стрелке, вы видите стражника. ]]; end; return f; end; enter = function(s) if (lse_guard2.loc == "lse_inner_7") then timer:stop(); game.timer = nil; walk("game_over_lse_guards"); end; end; entered = function(s) service_tunnels_3.position = "10"; if (game.timer ~= lse_timer) then game.timer = lse_timer; timer:set(4000); end; end; way = { kh_vroom("Против часовой стрелки", function(s) pn [[Там вам нечего делать. ]]; return false; end); kh_vroom("В помещение", "lse_inner_7_inside"); kh_vroom("В сервисный тоннель", function(s) timer:stop(); game.timer = nil; return "service_tunnels_3" end); kh_vroom("По часовой стрелке", "lse_inner_6"); }; }; lse_inner_7_inside = room { nam = "lse_inner_7_inside"; out = "lse_inner_7"; disp = "Лсэрианотр, помещение"; dsc = function(s) local f = [[Узкий коридор с несколькими дверьми, ведущими в маленькие комнатки, по сторонам. ]]; if (lse_guard2.loc == "lse_inner_7") then f = f .. [[^^Снаружи маячит стражник. ]]; end; return f; end; way = { kh_vroom("В город", "lse_inner_7"); }; };