Changeset - 5c21237a618f
[Not reviewed]
default
0 3 0
Silverwing - 8 years ago 2017-01-21 10:33:40

savegame fixes
3 files changed with 45 insertions and 30 deletions:
0 comments (0 inline, 0 general)
items.lua
Show inline comments
 
@@ -10,148 +10,152 @@ item_pickaxe = obj {
 
			canhit = o.canhit(o);
 
		else
 
			canhit = o.canhit;
 
		end;
 
		
 
		if (canhit) then
 
			if (o.onhit) then
 
				return(o.onhit(o));
 
			else
 
				return "";
 
			end;
 
		elseif (o.nohitmsg) then
 
			return o.nohitmsg;
 
		else
 
			return "Я не буду этого делать!";
 
		end;
 
	end;
 
};
 
 
item_spear = obj {
 
    nam = "pickaxe";
 
    disp = "Кирка";
 
    dsc = [[{Копье Фаэтларра} аккуратно прислонено к стене]];
 
    tak = [[Фаэтларр забирает копье. ]];
 
    inv = [[Копье, добытое Фаэтларром в честном бою. ]];
 
    use = function(s, o)
 
        local canhit = false;
 
        if (type(o.canhit) == "function") then
 
            canhit = o.canhit(o);
 
        else
 
            canhit = o.canhit;
 
        end;
 
        
 
        if (canhit) then
 
            if (o.onhit) then
 
                return(o.onhit(o));
 
            else
 
                return "";
 
            end;
 
        elseif (o.nohitmsg) then
 
            return o.nohitmsg;
 
        else
 
            return "Я не буду этого делать!";
 
        end;
 
    end;
 
};
 
 
item_colt = obj {
 
    var {
 
        bullets = 6;
 
    };
 
	nam = "colt";
 
	bullets = 6;
 
	disp = function(s)
 
		return "Кольт (" .. tostring(s.bullets) .. " зарядов)";
 
	end;
 
	dsc = [[Ваш револьвер. Надежное оружие в хорошем состоянии. Оно еще не раз спасет вашу жизнь. У вас также есть небольшой запас патронов к нему. ]];
 
	use = function(s, o)
 
        if (here().underwater) then
 
            return "Под водой это вам не поможет. ";
 
        end;
 
    
 
		if (s.bullets == 0) then
 
			return "Нужно перезарядиться, патроны кончились";
 
		end;
 
		
 
		local canshoot = false;
 
		if (type(o.canshoot) == "function") then
 
			canshoot = o.canshoot(o);
 
		else
 
			canshoot = o.canshoot;
 
		end;
 
		
 
		if (canshoot) then
 
			s.bullets = s.bullets - 1;
 
			p("Вы стреляете в "..o.disp2 .. ". ");
 
			if (o.onshoot) then
 
				return(o.onshoot(o));
 
			else
 
				return "";
 
			end;
 
		elseif (o.noshootmsg) then
 
			return o.noshootmsg;
 
		else
 
			return "Я не буду этого делать!";
 
		end;
 
	end;
 
	inv = function(s)
 
		if (s.bullets > 0) then
 
			return [[Ваш револьвер. Надежное оружие в хорошем состоянии. Оно еще не раз спасет вашу жизнь. У вас также есть небольшой запас патронов к нему. ]];
 
		else
 
			s.bullets = 6;
 
			p [[Вы перезаряжаете ваш револьвер и оружие снова готово к бою. ]];
 
            if (type(here().onreload) == 'function') then
 
                here().onreload();
 
            end;
 
		end;
 
	end;
 
};
 
 
item_harpoon = obj {
 
    var {
 
        charge = 1;
 
    };
 
    nam = "item_harpoon";
 
    charge = 1;
 
    disp = function(s)
 
        if (s.charge == 0) then
 
            return "Гарпунное ружье (разряжено)";
 
        else
 
            return "Гарпунное ружье (заряжено)";
 
        end;
 
    end;
 
    dsc = [[
 
        
 
    ]];
 
    use = function(s, o)
 
        if (s.charge == 0) then
 
            return "Ружье не заряжено. ";
 
        end;
 
        
 
        local canshoot = false;
 
        if (type(o.canshoot) == "function") then
 
            canshoot = o:canshoot();
 
        else
 
            canshoot = o.canshoot;
 
        end;
 
        
 
        local canthrust = false;
 
        if (type(o.canthrust) == "function") then
 
            canthrust = o:canthrust();
 
        else
 
            canthrust = o.canthrust;
 
        end;
 
        
 
        if (canthrust) then
 
            p("Вы атакуете "..o.disp2 .. ". ");
 
            if (o.onthrust) then
 
                return(o.onthrust(o));
 
            else
 
                return "";
 
            end;
 
        elseif (canshoot) then
 
            s.charge = s.charge - 1;
 
            p("Вы стреляете в "..o.disp2 .. ". ");
 
            if (o.onshoot) then
 
                return(o.onshoot(o));
 
            else
 
                return "";
 
            end;
 
        elseif (o.noshootmsg) then
 
            return o.noshootmsg;
 
        else
 
            return "Я не буду этого делать!";
main.lua
Show inline comments
 
@@ -36,108 +36,112 @@ dofile "atlantis_from_the_ashes.lua"
 
dofile "atlantis_iyhehevjiarr.lua"
 
dofile "atlantis_catching_the_tail.lua"
 
-- Часть 3
 
dofile "journey_venaedanotrr.lua"
 
dofile "journey_zayslanotrr.lua"
 
dofile "journey_zayslanotrr_temple.lua"
 
dofile "journey_temple.lua"
 
-- Часть 4
 
dofile "lseryanotrr_intro.lua"
 
dofile "lseryanotrr_locations.lua"
 
dofile "lse_service_tunnels.lua"
 
dofile "lse_powerplant.lua";
 
dofile "lse_final_battle.lua";
 
--dofile "final_scene.lua";
 
--dofile "final_battle.lua";
 
--dofile "first_city_inner_rim.lua"
 
--dofile "first_city_middle_rim.lua"
 
--dofile "first_city_outer_rim.lua"
 
 
global {
 
	warehouse18_found = false;
 
	warehouse32_found = false;
 
    warehouse32_visited = false;   
 
	dock_found = false;
 
	leviathan_discovered = false;
 
	atlantis_found = false;
 
	temple_found = false;
 
	nearest_cities_found = false;
 
	iraaphaanotrr_temple_found = false;
 
	dypatreanotrr_temple_found = false;
 
    venaedanotrr_temple_found = false;
 
    zayslanotrr_temple_found = false;
 
    deep_temple_found = false;
 
    lseryanotrr_found = false;
 
	
 
	rel_phaetlarr = 0;
 
	rel_walter = 0;
 
	rel_learr = 0;
 
	rel_anna = 0;
 
	rel_jack = 0;
 
    
 
    dt_code = {};
 
    dt_buttons = {};
 
};
 
 
 
 
player_drake = player {
 
    var {
 
        hp = 10;
 
        has_light = false;
 
        party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]};
 
        companion = nil;
 
        money = 200;
 
    };
 
	nam = "player";
 
	disp = "Дэвид Дрейк";
 
    disp2 = "Дрейка";
 
    disp3 = "Дрейку";
 
	where = 'port';
 
	hp = 10;
 
	
 
	obj = {'item_umbrella', 'item_charts', 'item_note_1', 'item_money', 
 
	};
 
	-- party array. Should be empty on start
 
	party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]};
 
	companion = nil;
 
	money = 200;
 
	
 
	pay = function(s, c)
 
		if (s.money >= c) then
 
			s.money = s.money - c;
 
			return true;
 
		else
 
			return false;
 
		end;
 
	end;
 
};
 
 
intro = room {
 
	nam = "intro";
 
	hideinv = true;
 
	disp = "Вступление";
 
	dsc = [[
 
		ВНИМАНИЕ: Это специальная предварительная версия игры. Ни один фрагмент игры не является финальным. ^^
 
		ВНИМАНИЕ: Данная версия игры не предназначена для какого-либо распространения, исключая прямую передачу файлов автором. ^^
 
		Действие игры происходит в конце 19-го века. Вы играете за Дэвида Дрейка - единственного сына богатого и уважаемого владельца транспортной компании "Вестхейвен Трансоушен". ^
 
		Несколько лет назад, когда Дэвиду было 10 лет, Уильям таинственным образом бесследно пропал. Полицейское расследование вскоре зашло в тупик и было прекращено. Через несколько месяцев компания, оставшаяся без своего владельца, обанкротилась, ее имущество распродается. ^
 
		После исчезновения отца Дэвид жил в Вашингтоне с бабушкой. Он пошел по стопам отца и выучился на инженера-кораблестроителя. Несколько дней назад в доме, где он жил, был обнаружен тайник, хранящий секретные документы отца - карты, указывающие по-видимому на какие-то тайники Уильяма и записка с адресом и именем.^
 
		Одержимый идеей узнать больше, Дэвид отправляется в Лондон...
 
	]];
 
	obj = {
 
		vway("Начать игру", "{Начать игру}", 'aurora_borealis');
 
	}
 
};
 
 
pl = player_drake;
 
 
game.nam = "Пробуждение";
 
game.dsc = [[
 
	Действие игры происходит в конце 19-го века. Вы играете за Дэвида Дрейка, сына владельца крупной транспортной компании "Вестхейвен Трансоушен". Несколько лет назад Уильям Дрейк, отец главного героя бесследно пропадает. Компания вскоре разваливается. Поиски ни к чему не приводят. Когда казалось бы уже все потеряно, в доме Дрейков находят тайник с документами Уильяма. Несколько схем строений, принадлежащих компании и клочок бумаги с адресом некоего Майкла Райта в Лондоне. Естественно, Дэвид как можно скорее отправляется в Великобританию...
 
	Вам предстоит отыскать подводную лодку, посетить подводную станцию, построенную Уильямом, встретить древнюю расу подводных жителей, поучаствовать в событиях, описанных древними легендами этой расы и узнать, что стало с Уильямом Дрейком.
 
]];
 
 
game_act_phrases = {
 
	"Вы не знаете, что с этим делать. ";
 
	"Вам нет смысла это трогать. ";
 
	"Вам это ничем не поможет. ";
 
	"Это бессмыссленно. ";
 
	"Незачем это трогать. ";
 
};
 
 
game_use_phrases = {
 
	"Вам это ничем не поможет. ";
 
	"Это бессмыссленно. ";
 
	"Вы не знаете, как это сделать. "
 
};
warehouse32.lua
Show inline comments
 
--[[
 
Игрок может попасть сюда только после диалога с Майклом.
 
Эта локация имеет владельца, которому не понравится, что здесь шляются посторонние.
 
Здесь игрок найдет карту.
 
]]
 
 
warehouse_32_guard = npc {
 
    var {
 
        dlg = 'warehouse_32_guard_dlg';
 
    };
 
	nam = "warehouse_32_guard";
 
	dsc = "Рядом со входом, опершись на стену, стоит {охранник}. Он не обращает на вас никакого внимания. ";
 
	dlg = 'warehouse_32_guard_dlg';
 
	phrases = {
 
		'Мне больше не о чем с ним говорить. ';
 
		'Он меня не пропустит. ';
 
	};
 
};
 
 
warehouse_32_guard_dlg = dlg {
 
	nam = "warehouse_32_guard_dlg";
 
	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";
 
@@ -126,163 +128,167 @@ warehouse_32_behind_night = room {
 
	};
 
};
 
 
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_backdoor = room {
 
	nam = "w32_backdoor";
 
	disp = "Склад 32, задняя дверь";
 
	entered = function(s)
 
		warehouse_32.pos = "01";
 
	end;
 
	way = {
 
		kh_vroom("Войти", function(s)
 
			if (pl.has_light) then
 
				pn("Мне стоит погасить лампу, прежде чем заходить внутрь. ");
 
				return false;
 
			else
 
				return "warehouse_32";
 
			end;
 
		end);
 
		kh_vroom("Перелезть через забор", "warehouse_32_behind_night");
 
	};
 
};
 
 
w32_mgr = darkroom {
 
    var {
 
        key_inplace = true;
 
        book_inplace = true;
 
    };
 
	nam = "w32_mgr";
 
	disp = "Склад 32, кабинет управляющего";
 
	dsc_dark = [[
 
		Вы находитесь в кабинете управляющего. В темноте вы можете лишь смутно различить очертания предметов.
 
	]];
 
	dsc_halflit = [[
 
		Вы находитесь в кабинете управляющего. 
 
	]];
 
	entered = function(s)
 
		warehouse_32.pos = "54";
 
	end;
 
	key_inplace = true;
 
	book_inplace = true;
 
	way = {
 
		kh_vroom("Выйти", function(s)
 
			print(w32_mgr.key_inplace);
 
			print(w32_mgr.book_inplace);
 
			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 {
 
    var {
 
        open = false;
 
        locked = true;
 
    };
 
	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();
 
		item_ducttape;
 
	};
 
};
 
 
w32_mgr_bookcase = obj {
 
	seen_level = 1;
 
	nam = 'w32_mgr_bookcase';
 
	dsc = [[
 
		Одну из стен практически целиком занимает {шкаф}, заполненный книгами и записями. 
 
	]];
 
@@ -376,115 +382,117 @@ warehouse_32_definitions = {
 
	]], e4 = "34", corner = true};
 
	---line AB
 
	["40"] = { name="тупик", dsc=[[
 
		
 
	]], e2 = "41", corner = true};
 
	["41"] = { name="секция A1", dsc=[[
 
		
 
	]], e1 = "51", e2="42", e3="31", e4="40", sector = "A1"};
 
	["42"] = { name="секция A2", dsc=[[
 
		
 
	]], e1 = "52", e2="43", e3="32", e4="41", sector = "A2"};
 
	["43"] = { name="секция A3", dsc=[[
 
		
 
	]], e1 = "53", e2="44", e3="33", e4="42", sector = "A3"};
 
	["44"] = { name="секция A4", dsc=[[
 
		
 
	]], e1 = "54", e2="45", e3="34", e4="43", sector = "A4"};
 
	["45"] = { name="тупик", dsc=[[
 
		
 
	]], e4 = "34", corner = true};
 
	---line A
 
	["51"] = { name="тупик", dsc=[[
 
		
 
	]], e3 = "41", corner = true};
 
	["52"] = { name="у входа", dsc=[[
 
		К северу от вас расположен главный вход склада, но он заперт. 
 
	]], e3 = "42"};
 
	["53"] = { name="тупик", dsc=[[
 
		
 
	]], e3 = "43", corner = true};
 
	["54"] = { name="у входа в кабинет управляющего", dsc=[[
 
		К северу от вас расположена дверь, ведущая, судя по табличке на ней, в кабинет управляющего. 
 
	]], e3 = "44", ex1="w32_mgr"};
 
};
 
 
function getDirName(dir)
 
	if (dir == 1) then
 
		return "север";
 
	elseif (dir == 2) then
 
		return "восток";
 
	elseif (dir == 3) then
 
		return "юг";
 
	elseif (dir == 4) then
 
		return "запад";
 
	end;
 
end;
 
 
warehouse_32 = room {
 
    var{
 
        pos = "01";
 
        hidden = false;
 
        guards = {
 
            { pos = "21", dir=1, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
            { pos = "31", dir=4, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
            { pos = "24", dir=2, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
            { pos = "34", dir=3, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
        };
 
    };
 
	nam = "warehouse_32";
 
	nolamp = true;
 
	disp = function(s)
 
		return "Склад 32, " .. s.definitions[s.pos].name;
 
	end;
 
	dsc = function(s)
 
		--return s.definitions[s.pos].dsc .. "^ Вы смотрите на " .. getDirName(s.dir);
 
		
 
		return 'Вы стоите где-то между стеллажами склада 32. В помещении темно, за исключением фонарей охранников. ' .. s.definitions[s.pos].dsc;
 
	end;
 
	definitions = warehouse_32_definitions;
 
	pos = "01";
 
	hidden = false;
 
	guards = {
 
		{ pos = "21", dir=1, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "31", dir=4, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "24", dir=2, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
		{ pos = "34", dir=3, s = 1 }; --s=1 - должен повернуть направо, s=2 - должен пройти прямо
 
	};
 
	checkGuardSight = function(s)
 
		--Проверить область зрения каждого стражника, если игрок находится в области зрения - FAIL
 
		for i = 1, #s.guards do
 
			if (s.guards[i].pos == s.pos) then
 
				--detected
 
				walk("game_over_caught");
 
				return false;
 
			end;
 
			if (s.guards[i].dir == 1) then
 
				if (s.definitions[s.guards[i].pos].e1 and s.pos == s.definitions[s.guards[i].pos].e1) then
 
					--detected
 
					walk("game_over_caught");
 
					return false;
 
				end;
 
			elseif (s.guards[i].dir == 2) then
 
				if (s.definitions[s.guards[i].pos].e2 and s.pos == s.definitions[s.guards[i].pos].e2) then
 
					--detected
 
					walk("game_over_caught");
 
					return false;
 
				end;
 
			elseif (s.guards[i].dir == 3) then
 
				if (s.definitions[s.guards[i].pos].e3 and s.pos == s.definitions[s.guards[i].pos].e3) then
 
					--detected
 
					walk("game_over_caught");
 
					return false;
 
				end;
 
			elseif (s.guards[i].dir == 4) then
 
				if (s.definitions[s.guards[i].pos].e4 and s.pos == s.definitions[s.guards[i].pos].e4) then
 
					--detected
 
					walk("game_over_caught");
 
					return false;
 
				end;
 
			end;
 
		end;
 
		return true;
 
	end;
 
	guardTurn = function(s)
 
		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
 
			--TODO play with this random number to assume good gameplay: predictable enough, yet somewhat random
 
			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
 
@@ -508,101 +516,96 @@ warehouse_32 = room {
 
						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;
 
			--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) .. ". ");
 
				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)
 
		--print("turn");
 
		--print(s.guards[1].pos, s.guards[1].dir);
 
		--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);
 
		-- TODO debug
 
		if (s:checkGuardSight()) then
 
			s:guardTurn();
 
			if (s:checkGuardSight()) then				
 
				if (warehouse_32_definitions[warehouse_32.pos].e1 or warehouse_32_definitions[warehouse_32.pos].ex1) then
 
					path("На север"):enable();
 
				else
 
					path("На север"):disable();
 
				end;
 
				
 
				if (warehouse_32_definitions[warehouse_32.pos].e2 or warehouse_32_definitions[warehouse_32.pos].ex2) then
 
					path("На восток"):enable();
 
				else
 
					path("На восток"):disable();
 
				end;
 
			
 
				if (warehouse_32_definitions[warehouse_32.pos].e3 or warehouse_32_definitions[warehouse_32.pos].ex3) then
 
					path("На юг"):enable();
 
				else
 
					path("На юг"):disable();
 
				end;
 
			
 
				if (warehouse_32_definitions[warehouse_32.pos].e4 or warehouse_32_definitions[warehouse_32.pos].ex4) then
 
					path("На запад"):enable();
 
				else
 
					path("На запад"):disable();
 
				end;
 
				
 
				if (warehouse_32_definitions[warehouse_32.pos].corner) then
 
					path("Спрятаться"):enable();
 
				else
 
					path("Спрятаться"):disable();
 
				end;
 
				
 
				if (warehouse_32.hidden) then
 
					path("Спрятаться"):disable();
 
					path("Выбраться из укрытия"):enable();
 
					path("На запад"):disable();
 
					path("На восток"):disable();
 
					path("На север"):disable();
 
					path("На юг"):disable();
 
				else
 
					path("Выбраться из укрытия"):disable();
 
				end;
 
				
 
				if (warehouse_32_definitions[warehouse_32.pos].sector) then
 
					warehouse_32_shelves.current = warehouse_32_definitions[warehouse_32.pos].sector;
 
					warehouse_32_shelves:enable();
 
@@ -633,111 +636,115 @@ warehouse_32 = room {
 
				warehouse_32.pos = warehouse_32_definitions[warehouse_32.pos].e3;
 
			end;
 
			
 
			return "warehouse_32";
 
		end);
 
		
 
		kh_vroom("На запад", function(s)
 
			if (warehouse_32_definitions[warehouse_32.pos].ex4) then
 
				return warehouse_32_definitions[warehouse_32.pos].ex4;
 
			else
 
				warehouse_32.pos = warehouse_32_definitions[warehouse_32.pos].e4;
 
			end;
 
			
 
			return "warehouse_32";
 
		end);
 
		
 
		kh_vroom("На восток", function(s)
 
			if (warehouse_32_definitions[warehouse_32.pos].ex2) then
 
				return warehouse_32_definitions[warehouse_32.pos].ex2;
 
			else
 
				warehouse_32.pos = warehouse_32_definitions[warehouse_32.pos].e2;
 
			end;
 
			
 
			return "warehouse_32";
 
		end);
 
		
 
		kh_vroom("Ждать", function(s)
 
			return "warehouse_32";
 
		end);
 
		
 
		kh_vroom("Спрятаться", function(s)
 
			warehouse_32.hidden = true;
 
			
 
			return "warehouse_32";
 
		end);
 
		
 
		kh_vroom("Выбраться из укрытия", function(s)
 
			warehouse_32.hidden = false;
 
			
 
			return "warehouse_32";
 
		end);
 
	};
 
	obj = {
 
		'warehouse_32_shelves'
 
	};
 
};
 
 
warehouse_32_shelves = obj {
 
    var {
 
        current = "E1";
 
    };
 
	nam = "warehouse_32_shelves";
 
	current = "E1";
 
	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 = "Укажите номер позиции:";
 
	items = {
 
		{ n = "item_electrodes"; };
 
		{ n = "item_pump_details"; };
 
	};
 
};
 
 
function warehouse32_init()
 
	print("init w32");
 
	for i = 1, #w32_shelf_input.items do
 
		local ok = false;
 
		while not ok do
 
			local index1 = rnd(4);
 
			local index2 = rnd(4);
 
			local shelf_name;
 
			if (index1 == 1) then
 
				shelf_name = 'A';
 
			elseif (index1 == 2) then
 
				shelf_name = 'B';
 
			elseif (index1 == 3) then
 
				shelf_name = 'C';
 
			elseif (index1 == 4) then
 
				shelf_name = 'D';
 
			end;
 
			shelf_name = shelf_name .. tostring(index2);
 
			w32_shelf_input.items[i].shelf = shelf_name;
 
			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 
 
					w32_shelf_input.items[i].position == w32_shelf_input.items[j].position) then
 
					ok = false;
 
				end;
 
			end;
 
		end;
 
	end;
 
end;
0 comments (0 inline, 0 general)