--[[ Игрок может попасть сюда только после диалога с Майклом. Эта локация имеет владельца, которому не понравится, что здесь шляются посторонние. Здесь игрок найдет карту. ]] warehouse_32_guard = npc { var { dlg = 'warehouse_32_guard_dlg'; }; nam = "warehouse_32_guard"; dsc = "Рядом со входом, опершись на стену, стоит {охранник}. Он не обращает на вас никакого внимания. "; phrases = { 'Мне больше не о чем с ним говорить. '; 'Он меня не пропустит. '; }; }; warehouse_32_guard_dlg = dlg { nam = "warehouse_32_guard_dlg"; disp = "Охранник"; entered = function(s) warehouse_32_guard.dlg = nil; warehouse32_visited = true; return [[Вы подходите к охраннику, но он не обращает на вас никакого внимания. ]]; end; phr = { {"Могу я пройти внутрь?", [[Охранник медленно поворачивает голову в вашу сторону и отрывисто произносит: "Нет". ]]}; {"Мне нужно поговорить с управляющим. ", [[Охранник медленно поворачивает голову в вашу сторону и отрывисто произносит: "Управляющий велел никого не пускать". ]]}; {"У меня есть дело к управляющему. ", [[Охранник медленно поворачивает голову в вашу сторону и отрывисто произносит: "Значит у вас есть пропуск. Покажите мне его". ]]}; }; }; warehouse_32_entry = room { nam = "warehouse_32_entry"; disp = "Вход на склад 32"; dsc = [[Склад 32 расположен в одном из промышленных районов Лондона. Вокруг дымят многочисленные фабрики, делая воздух практически непригодным для дыхания. Склад представляет собой большое здание, огороженное высоким забором. ]]; entered = function(s) move(char_coachman, here()); end; way = { vroom("В переулок", "warehouse_32_alley"); }; obj = { 'warehouse_32_guard' }; }; warehouse_32_alley = room { nam = "warehouse_32_alley"; disp = "Переулок у склада 32"; dsc = [[Темный переулок, между забором склада 32 и соседним строением завален мусором. ]]; way = { vroom("К главному входу", "warehouse_32_entry"); vroom("За склад", "warehouse_32_behind"); }; }; warehouse_32_behind = room { nam = "warehouse_32_behind"; disp = "За складом 32"; dsc = [[Узкий темный проулок за складом 32 завален мусором. От главного здания вас отделяет высокий забор из металлической решетки. За забором, почти напротив вас, вы видите заднюю дверь склада. ]]; way = { vroom("Назад", "warehouse_32_alley"); }; }; warehouse_32_guard_night = npc { nam = "warehouse_32_guard"; dsc = "Рядом со входом, опершись на стену, дремлет {охранник}. "; phrases = { 'Сейчас мне точно не стоит будить его. '; }; }; warehouse_32_night = room { nam = "warehouse_32_night"; disp = "Вход на склад 32"; dsc = [[Склад 32 расположен в одном из промышленных районов Лондона. Склад представляет собой большое здание, огороженное высоким забором. Сейчас темная ночь и район совершенно вымер. Лишь одинокий фонарь, висящий над входом склада, слабо освещает улицу. ]]; obj = { 'warehouse_32_guard_night', 'char_wright_travel' }; way = { vroom("В переулок", "warehouse_32_alley_night"); }; }; warehouse_32_alley_night = darkroom { nam = "warehouse_32_alley_night"; disp = "Переулок у склада 32"; dsc_halflit = [[Темный переулок, между забором склада 32 и соседним строением завален мусором. Лампа освещает небольшую часть проулка, заваленного мусором. ]]; dsc_dark = [[Темный переулок, между забором склада 32 и соседним строением завален мусором. Здесь совсем темно и вы ничего не видите. ]]; way = { kh_vroom("К главному входу", "warehouse_32_night", 2); kh_vroom("За склад", "warehouse_32_behind_night", 1); }; }; warehouse_32_behind_night = room { nam = "warehouse_32_behind_night"; disp = "За складом 32"; dsc = [[Узкий темный проулок за складом 32 завален мусором. От главного здания вас отделяет высокий забор из металлической решетки. За забором, почти напротив вас, вы видите приоткрытую заднюю дверь склада. Над ней расположен фонарь, свет от которого едва достигает вас. ]]; way = { vroom("В переулок", "warehouse_32_alley_night"); vroom("Через забор", "w32_backdoor"); }; }; char_wright_travel = npc { nam = "char_wright_travel"; disp = "Джек Райт"; dsc = [[На другой стороне улицы стоит небольшая крытая {повозка}, запряженная двумя лошадьми. ]]; dlg = "wright_travel_dlg"; }; wright_travel_dlg = dlg { nam = "wright_travel_dlg"; disp = "Джек Райт"; entered = [[Джек приоткрывает дверь повозки и спрашивает вас: "Все готово? Уезжаем?" ]]; phr = { {1, always=true, "Да, поехали. ", [[ Вы забираетесь в повозке и Джек, подстегивая лошадей, говорит: "Вперед". ]], code [[ walk('wright_house_cabinet'); ]]}; {2, always=true, "Нет еще. ", [[ Джек кивает: "Жду". ]], code [[ back(); ]]}; }; }; w32_tablet = cutscene("w32_tablet", "Склад 32, задняя дверь", "Табличка со схемой склада висит рядом с дверью. ", "w32_backdoor", null, "images/wh32_plan.png"); w32_tablet_obj = obj { nam = "w32_tablet_obj"; dsc = "Рядом с дверью висит {табличка}. "; act = function(s) walk(w32_tablet); end; }; w32_backdoor = room { nam = "w32_backdoor"; disp = "Склад 32, задняя дверь"; dsc = [[Над прочной деревянной дверью висит фонарь, дающий слабый свет. Площадка вокруг пуста, за исключением небольшой кучки обломков у забора. ]]; entered = function(s) warehouse_32.pos = "01"; make_snapshot(); end; way = { kh_vroom("Внутрь", function(s) if (me().has_light) then pn("Стоит погасить лампу, прежде чем заходить внутрь. "); return false; else return "warehouse_32"; end; end); kh_vroom("Через забор", "warehouse_32_behind_night"); }; obj = { "w32_tablet_obj"; }; }; w32_mgr = darkroom { var { key_inplace = true; book_inplace = true; }; nam = "w32_mgr"; disp = "Склад 32, кабинет управляющего"; dsc_dark = [[Вы находитесь в кабинете управляющего. В темноте вы можете лишь смутно различить очертания предметов. ]]; dsc_halflit = [[Вы находитесь в кабинете управляющего. ]]; entered = function(s) make_snapshot(); warehouse_32.pos = "54"; end; way = { kh_vroom("Выйти", function(s) if (not w32_mgr.key_inplace or not w32_mgr.book_inplace) then pr("Стоит вернуть все как было. "); return false; elseif (me().has_light) then pr("Если я не погашу лампу, меня заметят. "); return false; else return "warehouse_32"; end; end, 2); }; obj = { 'w32_mgr_table', 'w32_mgr_bookcase', 'money_wh32' }; }; w32_journal = obj { nam = 'w32_journal'; dsc = [[В ящике стола лежит {учетная книга}, в которую занесено все содержимое склада. ]]; act = function(s) local list = [[Среди сотен записей вы натыкаетесь на несколько, отмеченных как "Westhaven":]]; for i = 1, #w32_shelf_input.items do list = list .. "^".. stead.ref(w32_shelf_input.items[i].n).disp .. " " .. w32_shelf_input.items[i].shelf .. "-" .. w32_shelf_input.items[i].position; end; return list; end; }; w32_mgr_table = obj { var { open = false; locked = true; }; seen_level = 1; nam = 'w32_mgr_table'; dsc = function(s) if (s.open) then return [[В центре комнаты расположен большой письменный стол. {Ящик} стола выдвинут. ]]; else return [[В центре комнаты расположен большой письменный стол. В столе имеется {ящик}. ]]; end; end; act = function(s) if (not s.locked) then if (s.open) then s.open = false; w32_journal:disable(); return [[Вы задвигаете ящик. ]]; else s.open = true; w32_journal:enable(); return [[Вы выдвигаете ящик. ]]; end; else return [[Ящик заперт. Вам придется найти ключ. ]]; end; end; used = function(s, o) if (o == item_w32_key) then if (s.locked) then w32_mgr.book_inplace = false; s.locked = false; return "Вы отпираете ящик. "; else w32_journal:disable(); w32_mgr.book_inplace = true; s.open = false; s.locked = true; return "Вы запираете ящик. "; end; end; end; obj = { w32_journal:disable(); }; }; w32_mgr_bookcase = obj { var { state = 0; }; seen_level = 1; nam = 'w32_mgr_bookcase'; dsc = [[Одну из стен практически целиком занимает {шкаф}, заполненный книгами и записями. ]]; act = function(s) item_w32_key:enable(); if (s.state == 0) then s.state = 1; return "Вы замечаете спрятанный за книгами ключ. "; else return "Записи, журналы и прочие малоинтересные вам книги. "; end; end; used = function(s, o) if (o == item_w32_key) then w32_mgr.key_inplace = true; remove(item_w32_key, pl); put(item_w32_key, s); return "Вы возвращаете ключик на место. "; end; end; obj = { item_w32_key:disable(); }; }; warehouse_32_definitions = { ---line E ["01"] = { name="Склад 32, у задней двери", dsc=[[К югу от вас расположена задняя дверь склада. ]], e1 = "11", ex3 = "w32_backdoor"}; ["02"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К югу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e1 = "12", corner = true}; ["03"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К югу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e1 = "13", corner = true}; ["04"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К югу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e1 = "14", corner = true}; ---line DE ["10"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К западу от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e2 = "11", corner = true}; ["11"] = { name="Склад 32, секция D1", dsc=[[ ]], e1 = "21", e2="12", e3="01", e4="10", sector = "D1"}; ["12"] = { name="Склад 32, секция D2", dsc=[[ ]], e1 = "22", e2="13", e3="02", e4="11", sector = "D2"}; ["13"] = { name="Склад 32, секция D3", dsc=[[ ]], e1 = "23", e2="14", e3="03", e4="12", sector = "D3"}; ["14"] = { name="Склад 32, секция D4", dsc=[[ ]], e1 = "24", e2="15", e3="04", e4="13", sector = "D4"}; ["15"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К востоку от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e4 = "14", corner = true}; ---line CD ["20"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К западу от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e2 = "21", corner = true}; ["21"] = { name="Склад 32, секция C1", dsc=[[ ]], e1 = "31", e2="22", e3="11", e4="20", sector = "C1"}; ["22"] = { name="Склад 32, секция C2", dsc=[[ ]], e1 = "32", e2="23", e3="12", e4="21", sector = "C2"}; ["23"] = { name="Склад 32, секция C3", dsc=[[ ]], e1 = "33", e2="24", e3="13", e4="22", sector = "C3"}; ["24"] = { name="Склад 32, секция C4", dsc=[[ ]], e1 = "34", e2="25", e3="14", e4="23", sector = "C4"}; ["25"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К востоку от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e4 = "24", corner = true}; ---line BC ["30"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К западу от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e2 = "31", corner = true}; ["31"] = { name="Склад 32, секция B1", dsc=[[ ]], e1 = "41", e2="32", e3="21", e4="30", sector = "B1"}; ["32"] = { name="Склад 32, секция B2", dsc=[[ ]], e1 = "42", e2="33", e3="22", e4="31", sector = "B2"}; ["33"] = { name="Склад 32, Склад 32, секция B3", dsc=[[ ]], e1 = "43", e2="34", e3="23", e4="32", sector = "B3"}; ["34"] = { name="Склад 32, секция B4", dsc=[[ ]], e1 = "44", e2="35", e3="24", e4="33", sector = "B4"}; ["35"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К востоку от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e4 = "34", corner = true}; ---line AB ["40"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К западу от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e2 = "41", corner = true}; ["41"] = { name="Склад 32, секция A1", dsc=[[ ]], e1 = "51", e2="42", e3="31", e4="40", sector = "A1"}; ["42"] = { name="Склад 32, секция A2", dsc=[[ ]], e1 = "52", e2="43", e3="32", e4="41", sector = "A2"}; ["43"] = { name="Склад 32, секция A3", dsc=[[ ]], e1 = "53", e2="44", e3="33", e4="42", sector = "A3"}; ["44"] = { name="Склад 32, секция A4", dsc=[[ ]], e1 = "54", e2="45", e3="34", e4="43", sector = "A4"}; ["45"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К востоку от вас находится стена, на севере и юге -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e4 = "34", corner = true}; ---line A ["51"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К северу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e3 = "41", corner = true}; ["52"] = { name="Склад 32, у входа", dsc=[[К северу от вас расположен главный вход склада, но он заперт. ]], e3 = "42"}; ["53"] = { name="Склад 32, тупик", dsc=[[Вы в тупике. К северу от вас находится стена, на востоке и западе -- стеллажи. Здесь составлено несколько больших ящиков, за которыми можно спрятаться. ]], e3 = "43", corner = true}; ["54"] = { name="Склад 32, у входа в кабинет управляющего", dsc=[[К северу от вас расположена дверь, ведущая в кабинет управляющего. ]], e3 = "44", ex1="w32_mgr"}; }; warehouse_32 = stealthroom { var{ pos = "01"; hidden = false; guards = { { pos = "11", dir=1, s = 2 }; --s=1 - должен идти на юг(или повернуть по часовой стрелке, если смотрит не на юг), s=2 - на север { pos = "42", dir=2, s = 1 }; --s=1 - должен идти на юг(или повернуть по часовой стрелке, если смотрит не на юг), s=2 - на север { pos = "13", dir=1, s = 2 }; --s=1 - должен идти на юг(или повернуть по часовой стрелке, если смотрит не на юг), s=2 - на север { pos = "44", dir=2, s = 1 }; --s=1 - должен идти на юг(или повернуть по часовой стрелке, если смотрит не на юг), s=2 - на север }; }; nam = "warehouse_32"; map = { {1,1,2,1,1,1,1,1,1,1,1}; {1,3,0,3,0,3,0,3,0,3,1}; {1,0,0,0,0,0,0,0,0,0,1}; {1,3,0,3,0,3,0,3,0,3,1}; {1,0,0,0,0,0,0,0,0,0,1}; {1,3,0,3,0,3,0,3,0,3,1}; {1,0,0,0,0,0,0,0,0,0,1}; {1,3,0,3,0,3,0,3,0,3,1}; {1,0,0,0,0,0,0,0,0,0,1}; {1,3,0,3,0,3,0,3,0,3,1}; {1,1,1,1,2,1,1,1,2,1,1}; }; wall = 'wh32_wall'; door = 'wh32_door'; background = 'wh32_bg'; obstacle = 'wh32_shelves'; guard = 'wh32_guard_'; player = 'wh32_player'; game_over = 'game_over_caught'; dsc = function(s) return 'Вы стоите где-то между стеллажами склада 32. В помещении темно, за исключением фонарей охранников. ' .. s.definitions[s.pos].dsc; end; definitions = warehouse_32_definitions; guardTurn = function(s) local pl_y = math.floor(tonumber(s.pos) / 10); local pl_x = tonumber(s.pos) % 10; --Каждый стражник делает ход, игрок получает сообщения, о том, слышит ли он шаги, откуда и как они движутся for i = 1, #s.guards do if (rnd(10) < 9) then if (s.guards[i].s == 1) then s.guards[i].s = 2; s.guards[i].dir = s.guards[i].dir + 1; if (s.guards[i].dir > 4) then s.guards[i].dir = 1; end; elseif (s.guards[i].s == 2) then s.guards[i].s = 1; if (s.guards[i].dir == 1) then if (s.definitions[s.guards[i].pos].e1) then s.guards[i].pos = s.definitions[s.guards[i].pos].e1; end; elseif (s.guards[i].dir == 2) then if (s.definitions[s.guards[i].pos].e2) then s.guards[i].pos = s.definitions[s.guards[i].pos].e2; end; elseif (s.guards[i].dir == 3) then if (s.definitions[s.guards[i].pos].e3) then s.guards[i].pos = s.definitions[s.guards[i].pos].e3; end; elseif (s.guards[i].dir == 4) then if (s.definitions[s.guards[i].pos].e4) then s.guards[i].pos = s.definitions[s.guards[i].pos].e4; end; end; end; end; local g_y = math.floor(tonumber(s.guards[i].pos) / 10); local g_x = tonumber(s.guards[i].pos) % 10; if (g_x == pl_x) then --North-south line if (g_y - pl_y == 2) then pr("На севере вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". "); elseif (g_y - pl_y == 1) then pr("На севере, совсем рядом, вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". "); elseif (pl_y - g_y == 1) then pr("На юге, совсем рядом, вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". "); elseif (pl_y - g_y == 2) then pr("На юге вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". "); end; elseif (g_y == pl_y) then --east-west line if (g_x - pl_x == 2) then pr("На востоке вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". "); elseif (g_x - pl_x == 1) then pr("На востоке, совсем рядом, вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". "); elseif (pl_x - g_x == 1) then pr("На западе, совсем рядом, вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". "); elseif (pl_x - g_x == 2) then pr("На западе вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". "); end; else if (g_x - pl_x == 1 and g_y - pl_y == 1) then pr("К северо-востоку от вас вы слышите шаги охранника. "); elseif (g_x - pl_x == 1 and pl_y - g_y == 1) then pr("К юго-востоку от вас вы слышите шаги охранника. "); elseif (pl_x - g_x == 1 and g_y - pl_y == 1) then pr("К северо-западу от вас вы слышите шаги охранника. "); elseif (pl_x - g_x == 1 and pl_y - g_y == 1) then pr("К юго-западу от вас вы слышите шаги охранника. "); end; end; end; end; makeTurn = function(s) if (s.definitions[s.pos].sector) then warehouse_32_shelves.current = s.definitions[s.pos].sector; warehouse_32_shelves:enable(); else warehouse_32_shelves:disable(); end; end; enter = function(s) s:makeTurn(); end; obj = { 'warehouse_32_shelves' }; }; warehouse_32_shelves = obj { var { current = "E1"; }; nam = "warehouse_32_shelves"; dsc = function (s) return "Стеллажи, расположенные в этой секции, отмечены табличкой {" .. s.current .. "}"; end; act = function(s) w32_shelf_input.sector = s.current; walkin("w32_shelf_input"); end; }; w32_shelf_input = input_number { var { items = { { n = "item_electrodes"; }; { n = "item_pump_details"; }; }; }; nam = "w32_shelf_input"; disp = function(s) return "Стеллаж с отметкой " .. s.sector; end; check = function(s, input) for i = 1, #s.items do if (s.items[i].shelf == s.sector and w32_shelf_input.items[i].position == input and not w32_shelf_input.items[i].taken) then w32_shelf_input.items[i].taken = true; pn(stead.ref(s.items[i].n).disp); put(s.items[i].n, pl); end; end; back(); end; label = "Укажите номер позиции:"; }; function warehouse32_init() local shelfnames = {'A1', 'A2', 'A3', 'A4', 'B1', 'B4', 'C1', 'C4', 'D1', 'D2', 'D3', 'D4'}; for i = 1, #w32_shelf_input.items do local ok = false; while not ok do local index1 = rnd(4); local index2 = rnd(4); w32_shelf_input.items[i].shelf = shelfnames[rnd(#shelfnames)]; w32_shelf_input.items[i].position = tostring(rnd(90)+9); ok = true; for j = 1, i - 1 do if (w32_shelf_input.items[i].shelf == w32_shelf_input.items[j].shelf and w32_shelf_input.items[i].position == w32_shelf_input.items[j].position) then ok = false; end; end; end; end; end;