Changeset - 9845ab51a6c8
[Not reviewed]
default
0 3 0
Silverwing - 4 years ago 2020-11-28 15:15:37

Multiple fixes and improvements
3 files changed with 119 insertions and 34 deletions:
0 comments (0 inline, 0 general) First comment
main3.lua
Show inline comments
 
@@ -243,19 +243,21 @@ obj {
 
}
 

	
 
obj {
 
	nam = 'potion_open';
 
	disp = 'Зелье открытия';
 
	disp2 = 'зелье открытия';
 
	disp3 = 'зелье открытия';
 
	inv = 'Сваренное мной зелье открытия пахнет ржавым металлом и имеет неприятный рыжевато-серый цвет. Пробирка горячая на ощупь. ';
 
}
 

	
 
obj {
 
	nam = 'potion_light';
 
	disp = 'Зелье света';
 
	disp2 = 'зелье света';
 
	disp3 = 'зелье света';
 
	inv = 'Сваренное мной зелье света совершенно прозрачно и источает легкий аромат свежести, как воздух после грозы. ';
 
}
 

	
 
obj {
 
	nam = 'candle';
 
	disp = 'Свечка';
 
@@ -265,20 +267,21 @@ obj {
 
}
 

	
 
obj {
 
	nam = 'potion_enrichment';
 
	disp = 'Зелье обогащения';
 
	disp2 = 'зелье обогащения';
 
	disp3 = 'зелье обогащения';
 
	inv = 'Сваренное мной зелье обогащения сияет словно настоящее золото. Когда я встряхиваю пробирку, мне слышится в ней звон монет. ';
 
}
 

	
 
obj {
 
	nam = 'emerald';
 
	disp = 'Изумруд';
 
	 disp2 = 'изумруд';
 
	 disp3 = 'изумруд';
 
	disp2 = 'изумруд';
 
	disp3 = 'изумруд';
 
	inv = 'Небольшой, изящно ограненный изумруд. Очень красивый. ';
 
}
 

	
 
obj {
 
	nam = 'password_note';
 
	disp = 'Записка';
 
@@ -286,12 +289,14 @@ obj {
 
}
 

	
 
obj {
 
	nam = 'tool_box';
 
	dsc = 'На одной из полок я вижу коробочку с {набором отверток}. ';
 
	disp = 'Набор отверток';
 
	disp2 = 'набор отверток';
 
	disp3 = 'набор отверток';
 
	inv = 'Набор отверток для электроники. Нигде на коробке нет никаких отметок о производителе. Отвертки при это очень качественно изготовлены и прекрасно сохранились. ';
 
};
 

	
 
room {
 
	nam = 'main';
 
	noinv = true;
 
@@ -1789,12 +1794,16 @@ room {
 

	
 
function start(load)
 
	if load then
 
		if here().theme then
 
			here():theme();
 
		end;
 
		
 
		if here().onboot then
 
			here():onboot();
 
		end;
 
	else
 
		local computer_parts = {
 
			'cvx-rst-i3sb',
 
			'mcpu70-cvx-7mhz',
 
			'rst-m16-16mb',
 
			'tva-rx1',
solarscale.lua
Show inline comments
 
@@ -259,19 +259,74 @@ dlg {
 
				return;
 
			end;
 
		
 
			open('#tl4r2a');
 
		
 
			pr [[Драконесса, посмотрев на экран, сообщает: "Кажется, заработал". ]];
 
		end, 
 
		{
 
		end,
 
        {
 
			'#tl4r2a', "[Подойти к терминалу]Отлично, посмотрим.",
 
			function(s)
 
				walkin('terminal');
 
			end;
 
		},
 
        {'Вы сможете отремонтировать его?', function(s)
 
			if have('part_box') then
 
				if solarscale_helps > 0 then
 
					open('#tl4r2cfa');
 
					open('#tl4r2cfb');
 
					close('#tl4r2cfc');
 
					close('#tl4r2cfd');
 
					return 'Соларскейл заглядывает в коробку с запчастями и, немного покопавшись в ней, сообщает: "Думаю, справлюсь. Позволите?"';
 
				else
 
					close('#tl4r2cfa');
 
					close('#tl4r2cfb');
 
					close('#tl4r2cfc');
 
					open('#tl4r2cfd');
 
					return 'Соларскейл с сожалением сообщает: "Не думаю, что смогу помочь. Я никогда не встречала компьютеров такого типа". ';
 
				end;
 
			else
 
				close('#tl4r2cfa');
 
				close('#tl4r2cfb');
 
				close('#tl4r2cfd');
 
				open('#tl4r2cfc');
 
				return 'Соларскейл задумчиво говорит: "Только если мы найдем запасные детали". '
 
			end;
 
		end, only=true,
 
			{'#tl4r2cfa', 'Да, разумеется. ', function(s)
 
				walkout();
 
				local motherboard = lookup('#motherboard', _'system_unit');
 
				local cpu= lookup('#cpu', _'system_unit');
 
				local ram = lookup('#ram', _'system_unit');
 
				local slot1 = lookup('#slot1', _'system_unit');
 
				local slot2 = lookup('#slot2', _'system_unit');
 
				local slot3 = lookup('#slot3', _'system_unit');
 
			
 
				motherboard.device = _'crx-rdt-i3sb';
 
				cpu.device = _'rcpu200-crx-20mhz';
 
				ram.device = _'rdt-m32-32mb';
 
				slot1.device = _'gva-rx4';
 
				slot2.device = _'fna-100-10mbs_2';
 
				slot3.device = _'kbc-s';
 
			
 
				solarscale_helps = solarscale_helps - 1;
 
	            pc_status = 'ok';
 
			
 
				return 'Соларскейл привычно разбирает компьютер и, заглянув в инструкцию, меняет сломанные детали на новые. Закончив, она собирает его обратно. "Посмотрите! Кажется, я даже смогла немного улучшить его!"';
 
			end},
 
			{'#tl4r2cfb', 'Спасибо, но я сам справлюсь. ', function(s)
 
				walkout();
 
				return 'Соларскейл молча кивает. ';
 
			end},
 
			{'#tl4r2cfc', 'Как думаете, где они могут быть?', function(s)
 
				return 'Соларскейл отвечает: "Этажом ниже был склад, кажется. Есть смысл начать поиск оттуда". ';
 
			end},
 
			{'#tl4r2cfd', '[Закончить разговор]', function(s)
 
				walkout();
 
			end}
 
		};
 
		{
 
			'#tl4r2b', "[Закончить диалог]",
 
			function(s)
 
				walkout();
 
			end;
 
		}};
 
@@ -312,12 +367,13 @@ dlg {
 
				ram.device = _'rdt-m32-32mb';
 
				slot1.device = _'gva-rx4';
 
				slot2.device = _'fna-100-10mbs_2';
 
				slot3.device = _'kbc-s';
 
			
 
				solarscale_helps = solarscale_helps - 1;
 
	            pc_status = 'ok';
 
			
 
				return 'Соларскейл привычно разбирает компьютер и, заглянув в инструкцию, меняет сломанные детали на новые. Закончив, она собирает его обратно. "Посмотрите! Кажется, я даже смогла немного улучшить его!"';
 
			end},
 
			{'#tl4r2fb', 'Спасибо, но я сам справлюсь. ', function(s)
 
				walkout();
 
				return 'Соларскейл молча кивает. ';
tower.lua
Show inline comments
 
@@ -1728,15 +1728,15 @@ room {
 
}
 

	
 
room {
 
	light = false;
 
	nam = 'tower_level_3_room_2';
 
	disp = 'Башня, Склад';
 
	dsc = function(s)
 
	decor = function(s)
 
		if s.light then
 
			return 'Помещение представляет собой колоссальных размеров склад. Рядом со мной находится {#ladder|лестница}, ведущая вверх. Точно такая же {#ladder_down|лестница}, но ведущая вниз расположена чуть поодаль. {#floor|Пол} здесь точно такой же как и в других помещениях башни. {#walls|Стены} отсюда практически не видны, скрытые многочисленными {#shelves|стеллажами}. {#ceilingПотолок} зала расположен на высоте около пяти метров. ';
 
			return 'Помещение представляет собой колоссальных размеров склад. Рядом со мной находится {#ladder|лестница}, ведущая вверх. Точно такая же {#ladder_down|лестница}, но ведущая вниз расположена чуть поодаль. {#floor|Пол} здесь точно такой же как и в других помещениях башни. {#walls|Стены} отсюда практически не видны, скрытые многочисленными {#shelves|стеллажами}. {#ceiling|Потолок} зала расположен на высоте около пяти метров. ';
 
		else
 
			return 'Помещение представляет собой колоссальных размеров склад. В {#darkness|темноте} я могу различить лишь несколько {#shelves|стеллажей} неподалеку от себя. Рядом со мной находится {#ladder|лестница}, ведущая вверх. ';
 
		end;
 
	end;
 
	way = {
 
		path {'Наверх', 'tower_level_4_room_2'};
 
@@ -1787,20 +1787,30 @@ room {
 
			return false;
 
		end;
 
		act = [[Здесь слишком темно, чтобы что-либо разглядеть. ]];
 
	};
 
	obj {
 
		nam = '#door';
 
		dsc = 'В одной из стен расположена небольшая {дверь}, ведущая в другие помещения башни. ';
 
		dsc = function(s)
 
			if _ 'level_3_main_room':disabled() then
 
				return 'В одной из стен расположена небольшая {дверь}, запертая на засов. ';
 
			else
 
				return 'В одной из стен расположена небольшая {дверь}. ';
 
			end;
 
        end;
 
		act = function(s)
 
			_ 'level_3_main_room':enable();
 
			_('level_3_next_room', 'tower_level_3'):enable();
 
			_('level_3_room_2_door', 'tower_level_3'):enable();
 
			return [[Я отодвигаю засов. Теперь путь свободен. Дверь ведет в кабинет, расположенный на третьем этаже башни. ]];
 
	        if _ 'level_3_main_room':disabled() then
 
				_ 'level_3_main_room':enable();
 
				_('level_3_next_room', 'tower_level_3'):enable();
 
				_('level_3_room_2_door', 'tower_level_3'):enable();
 
				return [[Я отодвигаю засов. Теперь путь свободен. Дверь ведет в кабинет, расположенный на третьем этаже башни. ]];
 
	        else
 
		        return [[За приоткрытой дверью я вижу кабинет. ]];
 
	        end;
 
		end;
 
	};
 
	}:disable();
 
	obj {
 
		state = 0;
 
		nam = '#shelves';
 
		act = function(s)
 
			if not here().light then
 
				return [[Здесь слишком темно, чтобы что-либо разглядеть. ]];
 
@@ -1825,13 +1835,13 @@ room {
 
		if have('protection_suit', pl) then
 
			put('protection_suit', 'tower_level_2_airlock_cabinet');
 
			remove('protection_suit', pl);
 
			return 'Я снимаю костюм радиационной защиты и оставляю его в шкафчике. ';
 
		end;
 
	end;
 
	dsc = function(s)
 
	decor = function(s)
 
		if power_on then
 
			return 'Небольшая комната, самая маленькая из виденных мной помещений башни. Каменные {#walls|стены}, {#floor|пол} и {#ceiling|потолок} ничем не отличаются от таковых в других комнатах. Несколько {#lamps|ламп} на потолке дают яркий белый свет. ';
 
		else
 
			return 'Небольшая комната, самая маленькая из виденных мной помещений башни. Каменные {#walls|стены}, {#floor|пол} и {#ceiling|потолок} ничем не отличаются от таковых в других комнатах. На потолке горят красные {#emergency_lamps|лампы} аварийного света. ';
 
		end;
 
	end;
 
@@ -1871,20 +1881,29 @@ room {
 
		nam = '#control_panel';
 
		dsc = [[Рядом с дверью расположена {панель управления}. ]];
 
		act = function(s)
 
			walkin('reactor_control_panel');
 
		end;
 
	};
 
	
 
	obj {
 
		nam = '#next_door';
 
		dsc = 'В стене напротив панели управления расположена небольшая каменная {дверь}, закрытая на щеколду. ';
 
		dsc = function(s)
 
	        if _'level_2_main_room':disabled() then
 
		        return 'В стене напротив панели управления расположена небольшая каменная {дверь}, закрытая на щеколду. ';
 
	        else
 
		        return 'В стене напротив панели управления расположена небольшая каменная {дверь}. ';
 
	        end;
 
        end;
 
		act = function(s)
 
			_'level_2_main_room':enable();
 
			_'level_2_next_room':enable();
 
			return 'Я отодвигаю щеколду и открываю дверь. ';
 
	        if _'level_2_main_room':disabled() then
 
				_'level_2_main_room':enable();
 
				_'level_2_next_room':enable();
 
				return 'Я отодвигаю щеколду и открываю дверь. ';
 
	        else
 
		        return 'Через приоткрытую дверь я вижу алхимическую лабораторию. ';
 
	        end;
 
		end;
 
	}
 
}
 

	
 
dlg {
 
	nam = 'reactor_control_panel';
 
@@ -2016,13 +2035,13 @@ room {
 
				return 'Длинные металлические стержни, должно быть, внутри них находятся топливные элементы для работы реактора. Я не могу оценить их состояние на глаз. ';
 
			else
 
				return 'Надо поднять стержни, чтобы я мог их осмотреть. ';
 
			end;
 
		end;
 
		used = function(s, o)
 
			if o^'potion_enrichment' then
 
			if o^'potion_enrichment' and rods_raised then
 
				remove('potion_enrichment', pl);
 
				rods_enriched = true;
 
				return 'Я выливаю зелье на топливный стержень. С виду ничего не изменилось. ';
 
			end;
 
		end;
 
	}
 
@@ -2036,13 +2055,13 @@ room {
 
		path {'Наверх', 'tower_level_2_room_2'};
 
		path {'level_1_main_room', 'В гостиную', 'tower_level_1'}:disable();
 
	};
 
}: with {
 
	obj {
 
		nam = '#tabletop';
 
		act = 'Столешница сделана из того же материала, что и стены. Прочность этого холодныго и гладкого камня не вызывает сомнений.';
 
		act = 'Столешница сделана из того же материала, что и стены. Прочность этого холодного и гладкого камня не вызывает сомнений.';
 
	};
 
	obj {
 
		nam = '#cabinets1';
 
		act = 'В шкафах только посуда и различные столовые приборы. ';
 
	};
 
	obj {
 
@@ -2080,13 +2099,13 @@ room {
 
		nam = '#door';
 
		dsc = 'В одной из стен расположена небольшая деревянная {дверца}. ';
 
		act = function(s)
 
			if s.state == 0 then
 
				return 'Дверца заперта. Резной узор украшает железную накладку замка. ';
 
			else
 
				return 'Дверца прикрыта. Резной узор украшает железную накладку замка. ';
 
				return 'За приоткрытой дверцей я вижу гостиную башни. ';
 
			end;
 
		end;
 
		used = function(s, o)
 
			if o^'kitchen_key' then
 
				s.state = 1;
 
				remove('kitchen_key', pl);
 
@@ -2120,12 +2139,14 @@ obj {
 
	inv = 'Небольшой железный ключик. Головка украшена резным узором. ';
 
};
 

	
 
obj {
 
	nam = 'part_box';
 
	disp = 'Коробка с запчастями';
 
	disp2 = 'коробка с запчастями';
 
	disp3 = 'коробку с запчастями';
 
	inv = function(s)
 
		walkin('part_box_inside');
 
	end;
 
	used = function(s, o)
 
		if o.part then
 
			remove(o, pl);
 
@@ -2136,12 +2157,13 @@ obj {
 
	dsc = 'На одном из стеллажей стоит {коробка} с запасными платами для компьютера. ';
 
	tak = 'Я бегло просматриваю платы. Ни один чип не промаркирован известным мне производителем. О назначении плат я могу догадываться только по разъемам на них. Я забираю коробку с собой.  ';
 
}:disable();
 

	
 
room {
 
	nam = 'part_box_inside';
 
	nofollow = true;
 
	disp = 'Коробка с запчастями';
 
	dsc = 'Большая коробка, внутри нее я вижу следующие детали: ';
 
	way = {
 
		path {'Назад', function(s) return here():from() end;};
 
	}
 
}:with {
 
@@ -2578,12 +2600,15 @@ room {
 
		--s:push('TOWER OS Version 1.0');
 
		s:push('');
 
		s:push("Введите 'HELP' для вывода списка доступных команд");
 
		--s:push("Type 'HELP' to list available commands");
 
		s:push('');
 
	end;
 
	onboot = function(s)
 
		s:process_directory_structure(s.directory_structure['C:']);
 
	end;
 
	theme = function(s)
 
		theme.set('scr.gfx.bg', 'images/terminal.png');
 
		theme.set('scr.col.bg', '#000000');
 
		theme.set('win.fnt.name', 'fonts/vga.ttf');
 
		theme.set('win.col.fg', '#D0FFFF');
 
		theme.set('win.fnt.size', '16');
 
@@ -2681,21 +2706,21 @@ room {
 
	end;
 
	{
 
		directory_structure = {
 
			['C:'] = {
 
				['DOCS'] = {
 
					['PASSWORD.TXT'] = function(s, command, args)
 
						if command == 'PRINT.EXE' then
 
						if command == 'PRINT.COM' then
 
							s:push('Ошибка: Нельзя вывести двоичные данные');
 
							--s:push('Error: Unable to print binary data');
 
						else
 
							s:push('Bad command or file name');
 
						end;
 
					end;
 
					['CRYPT.COM'] = function(s, command, args)
 
						if command == 'PRINT.EXE' then
 
						if command == 'PRINT.COM' then
 
							s:push('Ошибка: Нельзя вывести двоичные данные');
 
							--s:push('Error: Unable to print binary data');
 
						elseif command == '' then
 
							if not args then
 
								s:push('Usage: CRYPT [filename] [key_file]');
 
								s:push('Decrypts an encrypted file');
 
@@ -2711,32 +2736,24 @@ room {
 
							else
 
								s:push('File is not encrypted');
 
							end;
 
						end;
 
					end;
 
					['CRYPT.CFG'] = function(s, command, args)
 
						if command == 'PRINT.EXE' then
 
						if command == 'PRINT.COM' then
 
							s:push('[MAIN]');
 
							s:push('ALGORITHM=AES');
 
							s:push('[RSA]');
 
							s:push('HARDWARE=FALSE');
 
							s:push(';KEY=KEY.TXT');
 
						else
 
							s:push('Bad command or file name');
 
						end;
 
					end;
 
					['README.TXT'] = function(s, command, args)
 
						if command == 'PRINT.EXE' then
 
							s:push('Ошибка: Нельзя вывести двоичные данные');
 
							--s:push('Error: Unable to print binary data');
 
						else
 
							s:push('Bad command or file name');
 
						end;
 
					end;
 
					['KEY.TXT'] = function(s, command, args)
 
						if command == 'PRINT.EXE' then
 
						if command == 'PRINT.COM' then
 
							s:push('Ошибка: Нельзя вывести двоичные данные');
 
							--s:push('Error: Unable to print binary data');
 
						else
 
							s:push('Bad command or file name');
 
						end;
 
					end;
 
@@ -2813,13 +2830,14 @@ room {
 
						end;
 
					end;
 
				},
 
				['AUTOEXEC.BAT'] = function(s, command, args)
 
					if command == 'PRINT.COM' then
 
						s:push('SET PATH C:\\SYSTEM');
 
						s:push('REM CONNECT.EXE - So I may use the main OS interface');
 
						--s:push('REM CONNECT.EXE - So I may use the main OS interface');
 
	                    s:push('REM CONNECT.EXE - Для доступа к командной строке');
 
					elseif command == '' then
 
						s:push('Bad command or file name');
 
					end;
 
				end;
 
				['CONFIG.SYS'] = function(s, command, args)
 
					if command == 'PRINT.COM' then
 
@@ -2847,12 +2865,14 @@ room {
 
					if command == 'PRINT.COM' then
 
						s:push('Приветствую, дорогой друг!');
 
						s:push('Я всего лишь отключил основную оболочку, CONNECT.EXE.');
 
						s:push('Просто запусти ее, чтобы войти в систему.');
 
						s:push('В дальнейшем, когда ты разберешься с системой, сможешь ');
 
						s:push('снова перестать ей пользоваться.');
 
                        s:push('Пароль от основного интерфейса -- в папке DOCS в файле PASSWORD.TXT ');
 
						s:push('разумеется, он зашифрован. ');
 
					elseif command == '' then
 
						s:push('Bad command or file name');
 
					end;
 
				end;
 
			}
 
		};
0 comments (0 inline, 0 general) First comment
You need to be logged in to comment. Login now