Changeset - 38255c2dc001
[Not reviewed]
default
0 5 0
Silverwing - 8 years ago 2016-02-23 09:34:19

Warehouse 18: Done
WIP: Warehouse 32
5 files changed with 215 insertions and 64 deletions:
0 comments (0 inline, 0 general)
items.lua
Show inline comments
 
@@ -317,4 +317,21 @@ item_cogs = obj {
 
			]];
 
		end;
 
	end;
 
};
 
 
item_w32_key = obj {
 
	nam = "item_w32_key";
 
	disp = "Ключ";
 
	dsc = [[
 
		За книгами спрятан небольшой {ключик}. 
 
	]];
 
	tak = function(s)
 
		w32_mgr.key_inplace = false;
 
		return [[
 
			Вы забираете ключ. 
 
		]];
 
	end;
 
	inv = [[
 
		Ключ от стола управляющего из склада 32
 
	]];
 
};
 
\ No newline at end of file
main.lua
Show inline comments
 
@@ -118,8 +118,6 @@ pl = player {
 
	where = 'port';
 
	hitpoints = 10;
 
	obj = {'item_umbrella', 'item_charts', 'item_note_1', 'item_money', 
 
	--debug
 
	--'item_lamp', 'item_electrodes', 'item_ducttape', 'item_map'
 
	};
 
	-- party array. Should be empty on start
 
	party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]};
 
@@ -202,11 +200,12 @@ function init()
 
	pl.where = intro;
 
	put(submarine_leviathan:disable(), dock_mooring);
 
	---debug
 
	pl.where = dock_2;
 
	put(item_toolbox, pl);
 
	put(item_cogs, pl);
 
	put(item_pump_details, pl);
 
	put(item_electrodes, pl);
 
	--pl.where = warehouse_32_entry;
 
	pl.where = w32_mgr;
 
	-- put(item_toolbox, pl);
 
	-- put(item_cogs, pl);
 
	-- put(item_pump_details, pl);
 
	-- put(item_electrodes, pl);
 
	put(item_lamp, pl);
 
	--pl.where = aurora_borealis;
 
	--move(submarine_leviathan, first_city_entrance);
utils.lua
Show inline comments
 
@@ -50,7 +50,12 @@ EngineUtils = {
 
]]
 
_kh = {
 
	vroom_enter = function(s)  
 
		walk(EngineUtils.getValue(s.where));
 
		local v = EngineUtils.getValue(s.where);
 
		if (v) then
 
			walk(v);
 
		else
 
			return false;
 
		end;
 
	end;
 
	vroom_save = function(s)
 
		if need then
 
@@ -243,6 +248,7 @@ function input_number(tab)
 
		--return tab.label .. tab.input .. "_";
 
	end;
 
	tab.entered = function(s)
 
		input = "";
 
		hook_keys('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'backspace', 'return');
 
	end;
 
	tab.left = function(s)
 
@@ -252,7 +258,7 @@ function input_number(tab)
 
		if (not down) then
 
			if (key == "return") then
 
				if (s.input) then
 
					s:check();
 
					s:check(s.input);
 
				end;
 
			elseif (key == "backspace") then
 
				if (s.input:len() > 0) then
warehouse18.lua
Show inline comments
 
@@ -159,7 +159,7 @@ dlg_w18_mgr = dlg {
 
	nam = "dlg_w18_mgr";
 
	disp = "Управляющий складом";
 
	entered = [[
 
		[[ "Добрый день, что вы хотели?" ]]
 
		"Добрый день, что вы хотели?"
 
	]];
 
	phr = {
 
		{1, 'Мое имя Дэвид Дрейк, я сын владельца "Вестхейвен Трансоушен". ', code = [[
 
@@ -195,7 +195,7 @@ warehouse_18_inside = room {
 
	nam = "warehouse_18_inside";
 
	disp = "Склад 18";
 
	dsc = [[
 
		Вы находитесь в небольшой комнате, куда, по словам управляющего, было перенесено все оставшееся от "Вестхейвен Трансоушен". Помещение завалено ящиками без каких-либо отметок о содержимом. Все покрыто толстым слоем пыли - очевидно сюда нечасто заходят. 
 
		Вы находитесь в небольшой комнате, куда, по словам управляющего, было перенесено все оставшееся от "Вестхейвен Трансоушен". Все покрыто толстым слоем пыли - очевидно сюда нечасто заходят. 
 
	]];
 
	obj = {
 
		'char_w18_sec_in';
 
@@ -220,7 +220,7 @@ w18_box_act = function(s)
 
		local item = s.item;
 
		s.item = nil;
 
		take(item);
 
		return "Вы находите " .. stead.ref(item).disp;
 
		return stead.ref(item).disp;
 
	else
 
		return "Здесь ничего нет";
 
	end;
 
@@ -230,7 +230,7 @@ w18_box1 = obj {
 
	nam = "w18_box1";
 
	disp = "Ящик";
 
	dsc = [[
 
		Ваше внимание привлекает {один из ящиков}. Ящик не закрыт и вы можете видеть содержимое.
 
		В центре комнаты составлено множество {ящиков}. 
 
	]];
 
	act = w18_box_act;
 
};
 
@@ -239,7 +239,7 @@ w18_box2 = obj {
 
	nam = "w18_box2";
 
	disp = "Ящик";
 
	dsc = [[
 
		{Ящик 2}
 
		Возле одной из стен комнаты свалены в кучу какие-то {обломки}. 
 
	]];
 
	act = w18_box_act;
 
};
 
@@ -248,7 +248,7 @@ w18_box3 = obj {
 
	nam = "w18_box3";
 
	disp = "Ящик";
 
	dsc = [[
 
		{Ящик 3}
 
		Рядом с дверью стоит {стеллаж}, заполненный всякой всячиной.
 
	]];
 
	act = w18_box_act;
 
};
 
@@ -257,7 +257,7 @@ w18_box4 = obj {
 
	nam = "w18_box4";
 
	disp = "Ящик";
 
	dsc = [[
 
		{Ящик 4}
 
		Еще несколько {ящиков} валяется в углу. 
 
	]];
 
	act = w18_box_act;
 
};
warehouse32.lua
Show inline comments
 
@@ -32,21 +32,134 @@ w32_backdoor = room {
 
	disp = "Склад 32, задняя дверь";
 
};
 
 
w32_mgr = room {
 
w32_mgr = darkroom {
 
	nam = "w32_mgr";
 
	disp = "Склад 32, кабинет управляющего";
 
	dsc = [[
 
	dsc_dark = [[
 
		Вы находитесь в кабинете управляющего. В темноте вы можете лишь смутно различить очертания предметов.
 
	]];
 
	dsc_halflit = [[
 
		Вы находитесь в кабинете управляющего. 
 
	]];
 
	entered = function(s)
 
		warehouse_32.pos = "54";
 
		warehouse_32.dir = 3;
 
	end;
 
	key_inplace = true;
 
	book_inplace = true;
 
	way = {
 
		
 
		kh_vroom("Выйти", function(s)
 
			if (not w32_mgr.key_inplace or not w32_mgr.book_inplace) then
 
				pr("Стоит вернуть все как было. ");
 
				return false;
 
			elseif (pl.has_light) then
 
				pr("Если я не погашу лампу, меня заметят. ");
 
				return false;
 
			else
 
				return "warehouse_32"
 
			end;
 
		end, 2);
 
	};
 
	obj = {
 
		'w32_mgr_table',
 
		'w32_mgr_bookcase'
 
	};
 
};
 
 
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 {
 
	seen_level = 1;
 
	nam = 'w32_mgr_table';
 
	dsc = function(s)
 
		if (s.open) then
 
			return [[
 
				В центре комнаты расположен большой письменный стол. {Ящик} стола выдвинут.
 
			]];
 
		else
 
			return [[
 
				В центре комнаты расположен большой письменный стол. В столе имеется {ящик}.
 
			]];
 
		end;
 
	end;
 
	open = false;
 
	locked = true;
 
	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 {
 
	seen_level = 1;
 
	nam = 'w32_mgr_bookcase';
 
	dsc = [[
 
		Одну из стен практически целиком занимает {шкаф}, заполненный книгами и записями. 
 
	]];
 
	act = function(s)
 
		item_w32_key:enable();
 
		return "Вы замечаете спрятанный за книгами ключ. ";
 
	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();
 
	};
 
};
 
 
@@ -58,7 +171,7 @@ w32_frontdoor = room {
 
warehouse_32_definitions = {
 
	---line E
 
	["01"] = { name="у задней двери", dsc=[[
 
		
 
		К югу от вас расположена задняя дверь склада. 
 
	]], e1 = "11", ex3 = "w32_backdoor"};
 
	["02"] = { name="тупик", dsc=[[
 
		
 
@@ -73,16 +186,16 @@ warehouse_32_definitions = {
 
	["10"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "11", corner = true};
 
	["11"] = { name="", dsc=[[
 
	["11"] = { name="секция D1", dsc=[[
 
		
 
	]], e1 = "21", e2="12", e3="01", e4="10", sector = "D1"};
 
	["12"] = { name="", dsc=[[
 
	["12"] = { name="секция D2", dsc=[[
 
		
 
	]], e1 = "22", e2="13", e3="02", e4="11", sector = "D2"};
 
	["13"] = { name="", dsc=[[
 
	["13"] = { name="секция D3", dsc=[[
 
		
 
	]], e1 = "23", e2="14", e3="03", e4="12", sector = "D3"};
 
	["14"] = { name="", dsc=[[
 
	["14"] = { name="секция D4", dsc=[[
 
		
 
	]], e1 = "24", e2="15", e3="04", e4="13", sector = "D4"};
 
	["15"] = { name="тупик", dsc=[[
 
@@ -92,16 +205,16 @@ warehouse_32_definitions = {
 
	["20"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "21", corner = true};
 
	["21"] = { name="", dsc=[[
 
	["21"] = { name="секция C1", dsc=[[
 
		
 
	]], e1 = "31", e2="22", e3="11", e4="20", sector = "C1"};
 
	["22"] = { name="", dsc=[[
 
	["22"] = { name="секция C2", dsc=[[
 
		
 
	]], e1 = "32", e2="23", e3="12", e4="21", sector = "C2"};
 
	["23"] = { name="", dsc=[[
 
	["23"] = { name="секция C3", dsc=[[
 
		
 
	]], e1 = "33", e2="24", e3="13", e4="22", sector = "C3"};
 
	["24"] = { name="", dsc=[[
 
	["24"] = { name="секция C4", dsc=[[
 
		
 
	]], e1 = "34", e2="25", e3="14", e4="23", sector = "C4"};
 
	["25"] = { name="тупик", dsc=[[
 
@@ -111,16 +224,16 @@ warehouse_32_definitions = {
 
	["30"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "31", corner = true};
 
	["31"] = { name="", dsc=[[
 
	["31"] = { name="секция B1", dsc=[[
 
		
 
	]], e1 = "41", e2="32", e3="21", e4="30", sector = "B1"};
 
	["32"] = { name="", dsc=[[
 
	["32"] = { name="секция B2", dsc=[[
 
		
 
	]], e1 = "42", e2="33", e3="22", e4="31", sector = "B2"};
 
	["33"] = { name="", dsc=[[
 
	["33"] = { name="секция B3", dsc=[[
 
		
 
	]], e1 = "43", e2="34", e3="23", e4="32", sector = "B3"};
 
	["34"] = { name="", dsc=[[
 
	["34"] = { name="секция B4", dsc=[[
 
		
 
	]], e1 = "44", e2="35", e3="24", e4="33", sector = "B4"};
 
	["35"] = { name="тупик", dsc=[[
 
@@ -130,16 +243,16 @@ warehouse_32_definitions = {
 
	["40"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "41", corner = true};
 
	["41"] = { name="", dsc=[[
 
	["41"] = { name="секция A1", dsc=[[
 
		
 
	]], e1 = "51", e2="42", e3="31", e4="40", sector = "A1"};
 
	["42"] = { name="", dsc=[[
 
	["42"] = { name="секция A2", dsc=[[
 
		
 
	]], e1 = "52", e2="43", e3="32", e4="41", sector = "A2"};
 
	["43"] = { name="", dsc=[[
 
	["43"] = { name="секция A3", dsc=[[
 
		
 
	]], e1 = "53", e2="44", e3="33", e4="42", sector = "A3"};
 
	["44"] = { name="", dsc=[[
 
	["44"] = { name="секция A4", dsc=[[
 
		
 
	]], e1 = "54", e2="45", e3="34", e4="43", sector = "A4"};
 
	["45"] = { name="тупик", dsc=[[
 
@@ -150,13 +263,13 @@ warehouse_32_definitions = {
 
		
 
	]], e3 = "41", corner = true};
 
	["52"] = { name="у входа", dsc=[[
 
		
 
		К северу от вас расположен главный вход склада. 
 
	]], e3 = "42", ex1 = "w32_frontdoor"};
 
	["53"] = { name="тупик", dsc=[[
 
		
 
	]], e3 = "43", corner = true};
 
	["54"] = { name="у входа в кабинет управляющего", dsc=[[
 
		
 
		К югу от вас расположена дверь, ведущая, судя по табличке на ней, в кабинет управляющего. 
 
	]], e3 = "44", ex1="w32_mgr"};
 
};
 
 
@@ -178,7 +291,9 @@ warehouse_32 = room {
 
		return "Склад 32, " .. s.definitions[s.pos].name;
 
	end;
 
	dsc = function(s)
 
		return s.definitions[s.pos].dsc .. "^ Вы смотрите на " .. getDirName(s.dir);
 
		--return s.definitions[s.pos].dsc .. "^ Вы смотрите на " .. getDirName(s.dir);
 
		
 
		return 'Вы стоите где-то между стеллажами склада 32. В помещении темно, за исключением фонарей охранников. ' .. s.definitions[s.pos].dsc .. "^ Вы смотрите на " .. getDirName(s.dir) .. ". ";
 
	end;
 
	definitions = warehouse_32_definitions;
 
	pos = "01";
 
@@ -227,8 +342,8 @@ warehouse_32 = room {
 
		return true;
 
	end;
 
	guardTurn = function(s)
 
		local pl_x = math.floor(tonumber(s.pos) / 10);
 
		local pl_y = tonumber(s.pos) % 10;
 
		local pl_y = math.floor(tonumber(s.pos) / 10);
 
		local pl_x = tonumber(s.pos) % 10;
 
		print("player:", pl_x, pl_y);
 
		--Каждый стражник делает ход, игрок получает сообщения, о том, слышит ли он шаги, откуда и как они движутся
 
		for i = 1, #s.guards do
 
@@ -262,42 +377,42 @@ warehouse_32 = room {
 
				end;
 
			end;
 
			
 
			local g_x = math.floor(tonumber(s.guards[i].pos) / 10);
 
			local g_y = tonumber(s.guards[i].pos) % 10;
 
			local g_y = math.floor(tonumber(s.guards[i].pos) / 10);
 
			local g_x = tonumber(s.guards[i].pos) % 10;
 
			print("guard:", g_x, g_y)
 
			--Видимость при разнице не более двух. В прямой видимости - видно, иначе - слышно
 
			--TODO может стоит сделать, чтобы шаги были слышны только при движении стражнека?
 
			if (g_x == pl_x) then
 
				--North-south line
 
				if (g_y - pl_y == 2) then
 
					pr("На севере вдалеке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
					pr("На севере вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". ");
 
				elseif (g_y - pl_y == 1) then
 
					pr("На севере вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
					pr("На севере, совсем рядом, вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". ");
 
				elseif (pl_y - g_y == 1) then
 
					pr("На юге вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
					pr("На юге, совсем рядом, вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". ");
 
				elseif (pl_y - g_y == 2) then
 
					pr("На юге вдалеке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
					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));
 
					pr("На востоке вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". ");
 
				elseif (g_x - pl_x == 1) then
 
					pr("На востоке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
					pr("На востоке, совсем рядом, вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". ");
 
				elseif (pl_x - g_x == 1) then
 
					pr("На западе вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
					pr("На западе, совсем рядом, вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". ");
 
				elseif (pl_x - g_x == 2) then
 
					pr("На западе вдалеке вы видите стражника, он не видит вас. Он смотрит на " .. getDirName(s.guards[i].dir));
 
					pr("На западе вы видите охранника. Он смотрит на " .. getDirName(s.guards[i].dir) .. ". ");
 
				end;
 
			else
 
				if (g_x - pl_x == 1 and g_y - pl_y == 1) then
 
					pr("К северовостоку от вас вы слышите шаги. ");
 
					pr("К северовостоку от вас вы слышите шаги охранника. ");
 
				elseif (g_x - pl_x == 1 and pl_y - g_y == 1) then
 
					pr("К юговостоку от вас вы слышите шаги. ");
 
					pr("К юговостоку от вас вы слышите шаги охранника. ");
 
				elseif (pl_x - g_x == 1 and g_y - pl_y == 1) then
 
					pr("К северозападу от вас вы слышите шаги. ");
 
					pr("К северозападу от вас вы слышите шаги охранника. ");
 
				elseif (pl_x - g_x == 1 and pl_y - g_y == 1) then
 
					pr("К югозападу от вас вы слышите шаги. ");
 
					pr("К югозападу от вас вы слышите шаги охранника. ");
 
				end;
 
			end;
 
		end;
 
@@ -308,9 +423,10 @@ warehouse_32 = room {
 
		print(s.guards[2].pos, s.guards[2].dir);
 
		print(s.guards[3].pos, s.guards[3].dir);
 
		print(s.guards[4].pos, s.guards[4].dir);
 
		if (s:checkGuardSight()) then
 
		-- TODO debug
 
		if (true or s:checkGuardSight()) then
 
			s:guardTurn();
 
			if (s:checkGuardSight()) then
 
			if (true or s:checkGuardSight()) then
 
				path("Повернуть налево"):enable();
 
				path("Повернуть направо"):enable();
 
				
 
@@ -375,7 +491,7 @@ warehouse_32 = room {
 
				warehouse_32.dir = 4;
 
			end;
 
			
 
			return warehouse_32;
 
			return "warehouse_32";
 
		end);
 
		kh_vroom("Вперед", function(s)
 
			if (warehouse_32.dir == 1) then
 
@@ -412,17 +528,22 @@ warehouse_32 = room {
 
				warehouse_32.dir = 1;
 
			end;
 
			
 
			return warehouse_32;
 
			return "warehouse_32";
 
		end);
 
		kh_vroom("Ждать", function(s)
 
			
 
			
 
			return "warehouse_32";
 
		end);		
 
		kh_vroom("Спрятаться", function(s)
 
			warehouse_32.hidden = true;
 
			
 
			return warehouse_32;
 
			return "warehouse_32";
 
		end);
 
		kh_vroom("Выбраться из укрытия", function(s)
 
			warehouse_32.hidden = false;
 
			
 
			return warehouse_32;
 
			return "warehouse_32";
 
		end);
 
	};
 
	obj = {
 
@@ -437,14 +558,22 @@ warehouse_32_shelves = obj {
 
		return "Стеллажи, расположенные в этой секции отмечены табличкой {" .. s.current .. "}";
 
	end;
 
	act = function(s)
 
		w32_shelf_input.sector = s.current;
 
		walkin("w32_shelf_input");
 
	end;
 
};
 
 
w32_shelf_input = input_number {
 
	nam = "w32_shelf_input";
 
	check = function(s)
 
		
 
	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 = "Укажите номер позиции:";
 
	items = {
 
@@ -471,7 +600,7 @@ function warehouse32_init()
 
			end;
 
			shelf_name = shelf_name .. tostring(index2);
 
			w32_shelf_input.items[i].shelf = shelf_name;
 
			w32_shelf_input.items[i].position = "";
 
			w32_shelf_input.items[i].position = tostring(rnd(100));
 
			ok = true;
 
			for j = 1, i - 1 do
 
				if (w32_shelf_input.items[i].shelf == w32_shelf_input.items[j].shelf and 
0 comments (0 inline, 0 general)