# HG changeset patch # User Silverwing # Date 2017-11-05 17:42:18 # Node ID f58c1494e547f0d02795982da03d6595284d8cd6 # Parent c301e7514c58fa3daffd0eb20bec0bd99eda6523 Learr, IOF, LFC fixes diff --git a/atlantis.lua b/atlantis.lua --- a/atlantis.lua +++ b/atlantis.lua @@ -900,7 +900,7 @@ char_learr_atlantis = npc { elseif stead.deref(here()) == "atl_oculus_library" then return [[{Леарр} спокойно стоит рядом с Екатериной Светловой. ]]; else - if (where(char_jack_wright_atlantis) == atl_ignis_hall_a) then + if (stead.deref(where(char_jack_wright_atlantis)) == atl_ignis_hall_a) then return [[{Леарр} стоит перед иллюминатором и что-то рассказывает ]]; else return [[{Леарр} стоит перед иллюминатором и смотрит вдаль. ]]; @@ -908,7 +908,7 @@ char_learr_atlantis = npc { end; end; dlg = function(s) - if where(s) == atl_oculus_lab_a then + if stead.deref(where(s)) == atl_oculus_lab_a then return "char_svetlova_dlg"; else return "char_learr_atlantis_dlg"; diff --git a/atlantis_dlg.lua b/atlantis_dlg.lua --- a/atlantis_dlg.lua +++ b/atlantis_dlg.lua @@ -1434,7 +1434,7 @@ char_learr_atlantis_dlg = dlg { ]]}; {tag='pre_iof'}; {"He'vji'a'rr?", [[Леарр кивает: "Мы так-наззываем пришшедшших-сс-поверхноссти-васс". ]]}; - {"Я хотел кое-что спросить", [["Ты говорри", -- просит Леарр. ]], code [[ + {"Я хотел кое-что спросить.", [["Ты говорри", -- просит Леарр. ]], code [[ char_learr_atlantis_dlg.state = 1; walk('atl_iof_intro'); ]]}; diff --git a/atlantis_ignis_on_fire.lua b/atlantis_ignis_on_fire.lua --- a/atlantis_ignis_on_fire.lua +++ b/atlantis_ignis_on_fire.lua @@ -85,7 +85,7 @@ char_learr_iof = obj { end; end; life = function(s) - if (where(s) ~= where(pl) and where(pl).iof) then + if (where(s) ~= where(pl) and where(pl).iof and not s.faint) then move(s, where(pl)); end; end; @@ -93,7 +93,7 @@ char_learr_iof = obj { if (where(s) == atl_iof_ignis_service_room and not dlg_learr_suit.state) then walkin('dlg_learr_suit'); elseif (s.faint) then - walkin('atl_iof_learr_faint_alone'); + walkin('atl_iof_learr_faint_alone_2'); else return [[Некогда разговаривать. ]]; end; @@ -140,12 +140,12 @@ dlg_learr_iof = dlg { disp = "Леарр"; entered = [[Леарр подбегает к вам и спрашивает: "Что происходит?" ]]; phr = { - {'Надеюсь, все в порядке, следуй за мной', [[Леарр молча кивает. ]], code [[ + {'Надеюсь, все в порядке, следуй за мной. ', [[Леарр молча кивает. ]], code [[ lifeon('char_learr_iof'); char_learr_iof.state = 1; walk('atl_iof_ignis_hall_a'); ]]}; - {'Такое уже происходило?', [[Леарр пожимает плечами: "Я не-видела". ]]}; + {'Такое уже происходило? ', [[Леарр пожимает плечами: "Я не-видела". ]]}; }; }; @@ -208,9 +208,10 @@ atl_iof_time_state = obj { carry_learr = false; }; life = function(s) - if (not where(pl).iof) then + if (not where(pl).iof or where(pl).no_limits) then return; end; + s.life_left = s.life_left - 1; if (s.life_left == 5) then if (not s.pl_safe) then @@ -252,13 +253,29 @@ atl_iof_time_state = obj { end; }; +atl_iof_learr_faint_alone_2 = dlg { + nam = "Леарр"; + disp = "Леарр"; + dsc = [[Леарр лежит на полу без сознания. ]]; + phr = { + {"[Взять Леарр на руки]", [[Леарр теряет сознание, обессилев. Вы берете навьярессу на руки. Она весит не больше обычного человека. Вы вполне в состоянии донести ее до выхода. ]], code [[ + remove(char_learr_iof, where(char_learr_iof)); + put(char_learr_faint, pl); + lifeon(char_learr_faint); + atl_iof_time_state.carry_learr = true; + back(); + ]]}; + {"[Уйти]", "", code [[ back(); ]]}; + }; +}; + atl_iof_learr_faint_alone = dlg { nam = "Леарр"; disp = "Леарр"; dsc = [[Леарр медленно опускается на пол. Сквозь скафандр вы с трудом различаете ее голос: "Я не-могу-идти". ]]; phr = { {"Совсем немного осталось, пойдем. [Помочь Леарр подняться]", [[Леарр пытается подняться опираясь на вашу руку, но снова падает, теряя сознание. ]], code [[ - tag('faint'); + psub('faint'); ]]}; {"Оставайся здесь, я вернусь. ", [[Леарр теряет сознание, обессилев. ]], code [[ char_learr_iof.faint = true; @@ -281,7 +298,7 @@ atl_iof_learr_faint_alone = dlg { put(char_learr_faint, pl); lifeon(char_learr_faint); atl_iof_time_state.carry_learr = true; - back(); + back(); ]]}; {"[Уйти]", "", code [[ back(); ]]}; }; @@ -595,6 +612,7 @@ atl_iof_ignis_service_room = room { nam = "Атлантида, Игнис, служебное помещение"; disp = "Атлантида, Игнис, служебное помещение"; iof = true; + no_limits = true; dsc = [[Небольшое помещение, используемое для хранения различного оборудования, необходимого для обслуживания секции. ]]; way = { kh_vroom("В главный зал", function(s) @@ -1061,7 +1079,7 @@ atl_iof_electr_panel_open = dlg { atl_iof_end = room { nam = "Атлантида"; - dsc = [[Вы возвращаетесь на станцию и сразу же отправляетесь в свою комнату, чтобы отдохнуть. Вы просыпаетесь утром. ^Едва вы поднимаетесь с койки, к вам в комнату входят двое охранников. Они просят вас проследовать за ними к начальнику службы безопасности -- Винсенту Даркстару. У вас нет никакого выхода, кроме как пойти с ними. ]]; + dsc = [[Вы возвращаетесь на станцию и сразу же отправляетесь в свою комнату, чтобы отдохнуть. ^Едва вы просыпаетесь, к вам в комнату входят двое охранников. Они просят вас проследовать за ними к Винсенту Даркстару. У вас нет никакого выхода, кроме как пойти с ними. ]]; entered = function(s) atl_lfc_state = 1; if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then diff --git a/atlantis_looking_for_clues.lua b/atlantis_looking_for_clues.lua --- a/atlantis_looking_for_clues.lua +++ b/atlantis_looking_for_clues.lua @@ -17,7 +17,7 @@ atl_lfc_darkstar_dlg = dlg { }; nam = "Винсент Даркстар"; disp = "Винсент Даркстар"; - entered = function(s) + enter = function(s) psub("q1"); s.limit = 3; q2_states = 0; @@ -44,15 +44,9 @@ atl_lfc_darkstar_dlg = dlg { end; phr = { {tag="q1"}; - {"Вы меня подозреваете?", [[ - "Отвечайте на поставленный вопрос. Это не имеет значения". - ]]}; - {always=true,"Мы с Леарр разговаривали в зале А", [[ - "Хорошо. Дальше. Заметили ли вы что-то необычное в секции?" - ]], code [[ psub("q2"); ]]}; - {always=true,"Я не хочу отвечать", [[ - "Нет проблем. Следующий вопрос. Заметили ли вы что-то необычное в секции?" - ]], code [[ + {"Вы меня подозреваете?", [[Даркстар приказывает: "Отвечайте на поставленный вопрос. Это не имеет значения". ]]}; + {always=true, "Мы с Леарр разговаривали в зале А.", [[Даркстар кивает: "Хорошо. Дальше. Заметили ли вы что-то необычное в секции?" ]], code [[ psub("q2"); ]]}; + {always=true, "Я не хочу отвечать.", [[Даркстар разводит руками: "Нет проблем. Следующий вопрос. Заметили ли вы что-то необычное в секции?" ]], code [[ atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1; psub("q2"); ]]}; @@ -61,104 +55,72 @@ atl_lfc_darkstar_dlg = dlg { if (atl_lfc_darkstar_dlg.q2_states < 2) then atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1; end; - pr [[ - "Хорошо, идем дальше. - ]]; + pr [[Даркстар кивает: "Хорошо, идем дальше. ]]; if (atl_jack_in_party) then psub("q3_1"); - return [[ - Что делал в это время ваш друг, Джек?" - ]]; + return [[Что делал в это время ваш друг, Джек?" ]]; else psub("q3_2"); - return [[ - Кроме вас кто-нибудь еще был в секции?" - ]]; + return [[Кроме вас кто-нибудь еще был в секции?" ]]; end; end}; - {tag="halldoors", false, always=true,"Двери в другие залы не работали.", [[ - "Техники..." - ]], code [[ + {tag="halldoors", false, "Двери в другие залы не работали.", [[Даркстар вздыхает: "Техники..." ]], code [[ atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; ]]}; - {tag="board", false, always=true,"Один из электрощитов не был закрыт.", [[ - "Обычное дело на Атлантиде. Наши техники порой позволяют себе невероятную неаккуратность". - ]], code [[ + {tag="board", false, "Один из электрощитов не был закрыт.", [[Даркстар вздыхает: "Обычное дело на Атлантиде. Наши техники порой позволяют себе невероятную неаккуратность". ]], code [[ atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; ]]}; - {tag="electric", false, always=true,"В зале А не работали электроприборы.", [[ - "Это уже совсем ни в какие ворота не лезет". - ]], code [[ + {tag="electric", false, "В зале А не работали электроприборы.", [[Даркстар недовольно качает головой: "Это уже совсем ни в какие ворота не лезет". ]], code [[ atl_lfc_darkstar_dlg.q2_states = atl_lfc_darkstar_dlg.q2_states + 1; ]]}; {tag="q3_1"};--Что делал в это время ваш друг, Джек? - {always=true,"Он вышел в главный зал, чтобы не мешать нам", function(s) + {always=true,"Он вышел в главный зал, чтобы не мешать нам.", function(s) if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; - {always=true,"Он был с нами", function(s) + {always=true,"Он был с нами.", function(s) if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; - {always=true,"Не помню", function(s) + {always=true,"Не помню.", function(s) atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1; if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; {tag="q3_2"};--Кроме вас с Леарр кто-нибудь еще был в секции? - {always=true,"Я никого не видел", function(s) + {always=true,"Я никого не видел.", function(s) if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; - {always=true,"Не помню", function(s) + {always=true,"Не помню.", function(s) atl_lfc_darkstar_dlg.limit = atl_lfc_darkstar_dlg.limit - 1; if (atl_lfc_darkstar_dlg.limit < 2) then psub("i1"); - return [[ - "Вы в Игнис с какой целью пришли?" - ]]; + return [[Даркстар спрашивает: "Вы в Игнис с какой целью пришли?" ]]; else walk("atl_lfc_darkstar_interlude"); - return [[ - "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". - ]]; + return [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]]; end; end}; {tag="i1"}; @@ -166,35 +128,23 @@ atl_lfc_darkstar_dlg = dlg { if (atl_iof_learr_dead) then if (atl_lfc_darkstar_dlg.total_limit > 1) then psub("i2_1"); - return [[ - "Почему вы оставили Леарр там?" - ]]; + return [[Даркстар смотрит вам прямо в глаза и спрашивает: "Почему вы оставили Леарр там?" ]]; else psub("i3"); - return [[ - "Откуда вы узнали про скафандры?" - ]]; + return [[Даркстар спрашивает: "Откуда вы узнали про скафандры?" ]]; end; else psub("i2_2"); - return [[ - "Почему вы спасли Леарр?" - ]]; + return [[Даркстар спрашивает: "Почему вы спасли Леарр?" ]]; end; end;}; - {always=true,"Посмотреть Игнис.", [[ - "Вы знали, что Леарр там?" - ]], code [[ psub("i2_3"); ]]}; - {always=true,"Это имеет значение?", [[ - Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования". - ]], code = [[ + {always=true,"Посмотреть Игнис.", [[Даркстар спрашивает: "Вы знали, что Леарр там?" ]], code [[ psub("i2_3"); ]]}; + {always=true,"Это имеет значение?", [[Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования". ]], code = [[ atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1; walk('atl_lfc_non_coop'); ]]}; {tag="i2_1"}; - {always=true,"У меня не было выбора", [[ - Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Вам стоит еще подумать". - ]], code = [[ + {always=true,"У меня не было выбора", [[Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Вам стоит еще подумать". ]], code = [[ atl_lfc_darkstar_dlg.total_limit = atl_lfc_darkstar_dlg.total_limit - 1; walk('atl_lfc_non_coop'); ]]}; @@ -207,21 +157,21 @@ atl_lfc_darkstar_dlg = dlg { walk('atl_lfc_non_coop'); ]]}; {tag="i2_2"}; - {always=true,"Я не мог оставить ее умирать", [["Откуда вы узнали про скафандры?"]], code [[ + {always=true,"Я не мог оставить ее умирать.", [[Даркстар спрашивает: "Откуда вы узнали про скафандры?"]], code [[ psub("i3"); ]]}; {tag="i2_3"}; - {always=true,"Светлова говорила, что она может быть в Игнисе", [["Откуда вы узнали про скафандры?"]], code [[ + {always=true,"Светлова говорила, что она может быть в Игнисе.", [[Даркстар спрашивает: "Откуда вы узнали про скафандры?"]], code [[ psub("i3"); ]]}; - {always=true,"Нет", [["Откуда вы узнали про скафандры?"]], code [[ + {always=true,"Нет.", [[Даркстар спрашивает: "Откуда вы узнали про скафандры?"]], code [[ psub("i3"); ]]}; {always=true,"Это имеет значение?", [[Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "Все имеет значение. Раз вы не хотите сотрудничать, придется вас изолировать до окончания расследования". ]], code [[ psub("i3"); ]]}; {tag = "i3"}; - {always=true,tag="wright_said", "Джек Райт сказал.", [["Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]], code = [[ + {always=true,tag="wright_said", "Джек Райт сказал.", [[Даркстар кивает: "Хорошо. Больше у меня вопросов нет. Но я хочу вам кое-что рассказать". ]], code = [[ walk("atl_lfc_darkstar_interlude"); ]]}; {always=true,"Леарр сказала.", [["Она не могла этого знать", -- Даркстар угрожающе поднимается, опирается на стол и недовольно говорит: "А я терпеть не могу, когда мне врут". ]], code = [[ @@ -248,11 +198,22 @@ atl_lfc_darkstar_interlude = room { }; atl_lfc_darkstar_office = room { + var { + timer = 4; + }; nam = "Атлантида, Доминус, кабинет начальника СБ"; dsc = [[Кабинет начальника службы безопасности почти пуст -- здесь нет ничего кроме массивного металлического стола(судя по всему, бронированного) в центре и кресла перед ним. ]]; - entered = function() + entered = function(s) + lifeon(s); end; - life = function() + left = function(s) + lifeoff(s); + end; + life = function(s) + s.timer = s.timer - 1; + if s.timer <= 0 then + walk("atl_lfc_darkstar_interlude_2") + end; end; way = { kh_vroom("В коридор", function() diff --git a/utils.lua b/utils.lua --- a/utils.lua +++ b/utils.lua @@ -166,7 +166,8 @@ function npc(tab) if (not tab.act) then tab.act = function(s) if (s.dlg) then - walkin(s.dlg); + local dlg = EngineUtils.getValue(s.dlg, s); + walkin(dlg); else local phrases = EngineUtils.getValue(s.phrases, s); return phrases[rnd(#phrases)];