Changeset - fdb71dc0b136
[Not reviewed]
default
0 1 0
Silverwing - 7 years ago 2017-12-02 08:00:44

realtime pumps on leviathan
1 file changed with 15 insertions and 4 deletions:
0 comments (0 inline, 0 general)
leviathan.lua
Show inline comments
 
@@ -29,961 +29,972 @@ submarine_leviathan = obj {
 
		power_on = false; -- включена ли энергия
 
		air_level = 0; -- запас воздуха. Максимум - 5 дней(5 * 24 * 60 * 60 = 432000)
 
		airpump = false;
 
        refit = false;      
 
	};
 
	nam = "submarine_leviathan";
 
	disp = "Левиафан";
 
	dsc = function(s)
 
        --[[
 
            atl_aqua_leviathan_dock
 
            iyh_far_from_entrance_foot
 
            ctt_iraa_city
 
            ctt_iraa_near_temple
 
            ctt_dyp_city
 
            ctt_dyp_temple_entrance
 
        ]]
 
        if (where(submarine_leviathan) == atl_aqua_leviathan_dock) then
 
            return [[В воде покоится ваша субмарина -- "{Левиафан}". ]];
 
        else
 
            return [[Вы видите "{Левиафан}" -- вашу субмарину. ]];
 
        end;
 
    end;
 
	act = [[Несмотря на проведенные в бездействии годы, субмарина сейчас в отличном состоянии. Из иллюминаторов льется яркий свет. На борту виднеется слегка пошарпанная, но читаемая надпись "А04 - Левиафан" ]];
 
};
 
 
leviathan_airlock = darkroom {
 
	nam = "leviathan_airlock";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, шлюз";
 
	leviathan = true;
 
	dsc_lit = "Шлюзовой отсек Левиафана представляет собой небольшую круглую камеру, около двух метров в диаметре. Отсек освещен ярким светом электрических ламп, смонтированных на стенах. ";
 
	dsc_halflit = "Шлюзовой отсек Левиафана представляет собой небольшую круглую камеру, около двух метров в диаметре. В свете лампы вы различаете предметы окружения. На стенах смонтированы электрические лампы, однако они сейчас не горят. ";
 
	dsc_dark = "Шлюзовой отсек Левиафана представляет собой небольшую круглую камеру, около двух метров в диаметре. Сейчас здесь темно и вы почти ничего не видите. ";
 
	way = {
 
		kh_vroom("В кают-компанию", function(s)
 
			if (have(item_suit)) then
 
				remove(item_suit, pl);
 
                pl.has_light = false;
 
			end;
 
			return "leviathan_wardroom";
 
		end, 1);
 
		kh_vroom("В люк", function()
 
			local val = EngineUtils.getValue(where(submarine_leviathan).no_exit);
 
			if (val) then
 
				pr(val);
 
				return false;
 
			else
 
				if (where(submarine_leviathan).underwater) then
 
					put(item_suit, pl);
 
				elseif (have(item_suit)) then
 
					remove(item_suit, pl);
 
                    pl.has_light = false;
 
				end;
 
				return where(submarine_leviathan);
 
			end;
 
		end, 2);
 
	};
 
    obj = {
 
        "leviathan_suits",
 
        "leviathan_trapdoor"
 
    };
 
};
 
 
leviathan_suits = obj {
 
    nam = "leviathan_suits";
 
    dsc = "У стены стоят два {водолазных костюма}. ";
 
    act = "Костюмы для глубоководного погружения. ";
 
};
 
 
leviathan_trapdoor = obj {
 
    nam = "leviathan_trapdoor";
 
    dsc = "На потолке расположен люк, ведущий наружу субмарины. ";
 
};
 
 
leviathan_captains_cabin = darkroom {
 
    --[[var {
 
        light_on = false;
 
    };]]
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;
 
	nam = "leviathan_captains_cabin";
 
	disp = "Левиафан, каюта капитана";
 
	leviathan = true;
 
	dsc_lit = [[Каюта капитана несколько больше остальных. Под потолком расположена элетрическая лампа, излучающая яркий свет. ]];
 
	dsc_halflit = [[Вы находитесь в каюте, очевидно, предназначенной для капитана. Под потолком расположена элетрическая лампа, однако сейчас она не горит. Эта каюта немного больше остальных. В слабом свете лампы вы с трудом различаете очертания дверей и предметов. ]];
 
	dsc_dark = [[Вы находитесь в одной из кают. В темноте вы не можете ничего различить. ]];
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
	obj = {
 
		"phone_cabin";
 
        "lev_capn_desk";
 
        "lev_capn_map";
 
        "lev_capn_chair";
 
        "lev_capn_bed";
 
        "lev_capn_view";
 
	};
 
};
 
 
lev_capn_desk = obj {
 
    nam = "lev_capn_desk";
 
    dsc = [[У стены установлен небольшой стол с несколькими {ящиками}. ]];
 
    act = "Ящики пусты. ";
 
};
 
 
lev_capn_map = obj {
 
    nam = "lev_capn_map";
 
    dsc = [[Над столом висит {карта} Атлантического океана. ]];
 
    act = function(s) 
 
        if atlantis_found then
 
            return [[Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". На ней изображено несколько объектов, имеющих значение для компании и, в частности, Атлантида. ]];
 
        else
 
            atlantis_found = true;
 
            return [[Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". Вы внимательно осматриваете карту в поисках чего-нибудь необычного. Ваше внимание привлекает отметка "Атлантида", сделанная посреди океана. К сожалению, никаких пояснений у вас нет и единственное, что вы можете сделать это попытаться добраться до этой точки. ]];
 
        end;
 
    end;
 
};
 
 
lev_capn_chair = obj {
 
    nam = "lev_capn_chair";
 
    dsc = "Рядом со столом стоит {кресло}. ";
 
    act = "Капитанское кресло. Удобное. ";
 
};
 
 
lev_capn_bed = obj {
 
    nam = "lev_capn_bed";
 
    dsc = "У стены напротив стола расположена {койка}. ";
 
    act = "Мне сейчас некогда спать. ";
 
};
 
 
lev_capn_view = obj {
 
    nam = "lev_capn_view";
 
    dsc = "Напротив входа расположен {иллюминатор}. ";
 
    act = function(s)
 
        return here().view_left;
 
    end;
 
};
 
 
lev_capn_ls = obj {
 
    nam = "lev_capn_ls";
 
    dsc = function(s)
 
        if (here().light_on) then
 
            return "У входа находится {выключатель}, Сейчас он включен. ";
 
        else
 
            return "У входа находится {выключатель}, Сейчас он выключен. ";
 
        end;
 
    end;
 
    act = function(s)
 
        pr [[Вы переключаете выключатель. ]];
 
        if (here().light_on) then
 
            here().light_on = false;
 
            if (submarine_leviathan.power_on and submarine_leviathan.battery) then
 
                pr [[Свет гаснет. ]];
 
            else
 
                pr [[Ничего не происходит. ]];
 
            end;
 
        else
 
            here().light_on = true;
 
            if (submarine_leviathan.power_on and submarine_leviathan.battery) then
 
                pr [[Свет зажигается. ]];
 
            else
 
                pr [[Ничего не происходит. ]];
 
            end;
 
        end;
 
    end;
 
};
 
 
leviathan_cabin_1 = darkroom {
 
	nam = "leviathan_cabin_1";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;
 
	disp = "Левиафан, каюта №1";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };   
 
};
 
 
leviathan_cabin_2 = darkroom {
 
	nam = "leviathan_cabin_2";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, каюта №2";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };   
 
};
 
 
leviathan_cabin_3 = darkroom {
 
    var {
 
        lock = false;
 
    };
 
	nam = "leviathan_cabin_3";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, каюта №3";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};      
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };   
 
};
 
 
leviathan_cabin_4 = darkroom {
 
	nam = "leviathan_cabin_4";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, каюта №4";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
    };   
 
};
 
 
leviathan_cabin_5 = darkroom {
 
	nam = "leviathan_cabin_5";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, каюта №5";
 
	leviathan = true;
 
	dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]];
 
    dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов.  ]]; 
 
    dsc_dark = [[В помещении темно и вы ничего не видите. ]];  
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
    obj = {
 
        'lev_cab_table';
 
        'lev_cab_beds';
 
        'lev_cab_view';
 
        'item_ducttape';
 
    };
 
};
 
 
lev_cab_table = obj {
 
    nam = "lev_cab_table";
 
    dsc = [[У стены рядом с иллюминатором расположен небольшой {столик}. ]];
 
    act = "Столик пуст. ";
 
};
 
 
lev_cab_beds = obj {
 
    nam = "lev_cab_beds";
 
    dsc = [[Напротив стола расположены две {койки} одна над другой. ]];
 
    act = "Мне сейчас некогда спать. ";
 
};
 
 
lev_cab_view = obj {
 
    nam = "lev_cab_view";
 
    dsc = "Напротив входа расположен {иллюминатор}. ";
 
    act = function(s)
 
        return here().view_left;
 
    end;
 
};
 
 
leviathan_corridor = darkroom {
 
	nam = "leviathan_corridor";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, коридор";
 
	leviathan = true;
 
	dsc_lit = [[Длинный коридор со множеством дверей. По всей длине коридора на стенах расположены электрические лампы, излучающие яркий свет. ]];
 
	dsc_halflit = [[Длинный темный коридор. В слабом свете лампы вы с трудом различаете очертания предметов и множества дверей. ]];
 
	dsc_dark = [[Длинный темный коридор. в темноте вы почти ничего не видите. ]];
 
	way = {
 
		kh_vroom("В каюту капитана", "leviathan_captains_cabin", 1);
 
		kh_vroom("В каюту №1", "leviathan_cabin_1", 1);
 
		kh_vroom("В каюту №2", "leviathan_cabin_2", 1);
 
		kh_vroom("В каюту №3", function(s)
 
            if not leviathan_cabin_3.lock then      
 
                return "leviathan_cabin_3";
 
            else
 
                return false;
 
            end;
 
        end, 1);
 
		kh_vroom("В каюту №4", "leviathan_cabin_4", 1);
 
		kh_vroom("В каюту №5", "leviathan_cabin_5", 1);
 
		kh_vroom("В кают-компанию", "leviathan_wardroom", 1);
 
		kh_vroom("В грузовой отсек", "leviathan_cargo_hold", 1);
 
		kh_vroom("В машинный отсек", "leviathan_engines", 1);
 
		kh_vroom("На нижнюю палубу", "leviathan_lower_deck", 1);
 
	};
 
	obj = {
 
		'leviathan_corridor_wiring';
 
	};
 
};
 
 
leviathan_cargo_hold = darkroom {
 
	nam = "leviathan_cargo_hold";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, грузовой отсек";
 
	leviathan = true;
 
	dsc_lit = function(s)
 
        if (submarine_leviathan.refit) then
 
            return [[Грузовой отсек Левиафана заполнен ящиками с припасами и инструментами. Яркий свет исходит из электрических ламп, установленных на потолке. ]];
 
        else
 
            return [[Грузовой отсек Левиафана практически пуст, не считая обломков, очевидно, оставшихся здесь с момента создания субмарины. Из электрических ламп, установленных на потолке, исходит яркий свет. ]];
 
        end;
 
    end;
 
	dsc_halflit = [[Грузовой отсек Левиафана погружен в кромешный мрак. В свете лампы вы видите, что отсек практически пуст, не считая обломков, очевидно, оставшихся здесь с момента создания субмарины. ]];
 
	dsc_dark = [[Грузовой отсек Левиафана погружен в кромешный мрак. ]];
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
	obj = {
 
		"leviathan_cargo_wiring";
 
	};
 
};
 
 
leviathan_wardroom = darkroom {
 
	nam = "leviathan_wardroom";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, кают-компания";
 
	leviathan = true;
 
	dsc_lit = [[В центре просторной кают-компании Левиафана укреплен массивный деревянный стол. Электрические лампы, укрепленные на потолке над столом и на стенах излучают яркий свет. ]];
 
	dsc_halflit = [[В слабом свете лампы вы с трудом различаете очертания предметов. Судя по всему, вы находитесь в кают-компании. В центре установлен массивный стол, вокруг которого стоят несколько стульев. ]];
 
	dsc_dark = [[Кают-компания погружена во мрак и вы совсем ничего не видите. ]];
 
	way = {
 
		kh_vroom("В рубку", "leviathan_wheelhouse", 1);
 
		kh_vroom("В шлюз", "leviathan_airlock", 1);
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
		kh_vroom("В грузовой отсек", "leviathan_cargo_hold", 1):disable();
 
		kh_vroom("В машинный отсек", "leviathan_engines", 1):disable();
 
	};
 
	obj = {
 
		"phone_wardroom";
 
		"leviathan_wardroom_wiring";
 
	};
 
};
 
 
leviathan_engines = darkroom {
 
	nam = "leviathan_engines";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, машинное отделение";
 
	leviathan = true;
 
	dsc_lit = [[Вы стоите на небольшой металлической платформе посреди достаточно большого помещения. Вверху и внизу тянутся какие-то трубы. Слева и справа от вас расположены механизмы, приводящие субмарину в движение. Единственная лампа, расположенная над входом, дает достаточно света, чтобы можно было осмотреться. ]];
 
	dsc_halflit = [[В слабом свете лампы вы с трудом различаете очертания предметов. Вы стоите на небольшой металлической платформе посреди достаточно большого помещения. Вверху и внизу тянутся какие-то трубы. Слева и справа от вас расположены механизмы, приводящие субмарину в движение. ]];
 
	dsc_dark = [[Машинный отсек Левиафана погружен во мрак и вы совсем ничего не видите. ]];
 
	-- Равномерный гул электрических двигателей сообщает о полной готовности субмарины. 
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
	};
 
	obj = {
 
        'leviathan_battery';
 
		'leviathan_breaker';
 
		'leviathan_engineering_sensors';
 
		'leviathan_engineering_wiring';
 
	};
 
};
 
 
leviathan_engineering_sensors = obj {
 
	nam = "leviathan_engineering_sensors";
 
	dsc = [[Рядом с батареей расположена {панель} со множеством лампочек. ]];
 
	act = function(s)
 
		if (submarine_leviathan.battery) then
 
			pr("На панели горят следующие лампочки: ");
 
			pr("батарея работает");
 
			if (submarine_leviathan.power_on) then
 
				pr(", питание включено");
 
                if (submarine_leviathan.airpump) then
 
                    pr(", воздушные насосы включены");
 
                end;
 
                if (submarine_leviathan.circuit_breaks > 0) then
 
                    pr(", разорвана цепь освещения");
 
                end;
 
            end;         
 
			pr(". ");
 
		else
 
			p("На панели не горит ни одна лампочка. ");
 
		end;
 
	end;
 
	seen_level = 1;
 
};
 
 
leviathan_battery = obj {
 
	nam = "leviathan_battery";
 
	dsc = function(s)
 
		if (s.opened) then
 
			return [[В дальнем конце помещения расположен {блок аккумуляторных батарей}. Крышка блока открыта и вы видите, что электроды подверглись сильной коррозии за долгое время неиспользования. ]];
 
		else
 
			return [[В дальнем конце помещения занимает {блок аккумуляторных батарей}. Крышка блока закрыта. ]];
 
		end;
 
	end;
 
	act = function(s)
 
		if (s.opened) then
 
			s.opened = false;
 
			return [[Вы возвращаете крышку блока батарей на место. ]];
 
		else
 
			if (not submarine_leviathan.battery) then
 
				s.opened = true;
 
				return [[Вы сдвигаете крышку блока батарей в сторону, получая доступ к ней. ]];
 
			else
 
				return [[Незачем это трогать. ]];
 
			end;
 
		end;
 
	end;
 
	used = function(s, o)
 
		if (o == item_electrodes) then
 
			remove(item_electrodes, pl);
 
			submarine_leviathan.battery = true;
 
			s.opened = false;
 
			return [[Вы заменяете электроды. Теперь аккумулятор готов к работе. Вы возвращаете крышку блока батарей на место. ]];
 
		else
 
			return false;
 
		end;
 
	end;
 
	seen_level = 1;
 
	opened = false;
 
};
 
 
leviathan_breaker = obj {
 
	nam = "leviathan_breaker";
 
	dsc = function(s)
 
		if (submarine_leviathan.power_on) then
 
			return [[Рядом с батареей укреплен {рубильник}. Сейчас он включен. ]];
 
		else
 
			return [[Рядом с батареей укреплен {рубильник}. Сейчас он выключен. ]];
 
		end;
 
	end;
 
	act = function(s)
 
		if (submarine_leviathan.power_on) then
 
			submarine_leviathan.power_on = false;
 
			-- TODO включать свет по всему Левиафану, если восстановлены разрывы цепи и установлена батарея
 
			-- TODO включать двигатель если установлена батарея
 
			pr([[Вы выключаете рубильник. ]]);
 
		else
 
			submarine_leviathan.power_on = true;
 
			-- TODO включать двигатель если установлена батарея
 
			pr([[Вы включаете рубильник. ]]);
 
			if (submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0) then
 
				pr([[Повсюду зажигается яркий свет, на мгновение ослепляя вас. ]]);
 
			end;
 
		end;
 
	end;
 
	seen_level = 1;
 
};
 
 
leviathan_lower_deck = darkroom {
 
	nam = "leviathan_lower_deck";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, нижняя палуба";
 
	leviathan = true;
 
	dsc_lit = function(s)
 
        if (submarine_leviathan.refit) then
 
            return [[Большой отсек на нижней палубе Левиафана освещен электрическими лампами, укрепленными на стенах. В передней части помещения вы видите несколько отверстий для зарядки торпедных аппаратов. Рядом с ними закреплены ящики, заполненные боеприпасами. ]];
 
        else
 
            return [[Большой отсек на нижней палубе Левиафана освещен электрическими лампами, укрепленными на стенах. Повсюду раскиданы неизвестно откуда взявшиеся обломки металла. В передней части помещения вы видите несколько отверстий для зарядки торпедных аппаратов. ]];
 
        end;
 
    end;
 
	dsc_halflit = [[Большой отсек на нижней палубе Левиафана слабо освещен вашей лампой. Повсюду раскиданы неизвестно откуда взявшиеся обломки металла. В передней части помещения вы видите несколько отверстий для зарядки торпедных аппаратов. ]];
 
	dsc_dark = [[На нижней палубе Левиафана темно и вы совсем ничего не видите. ]];
 
	way = {
 
		kh_vroom("В коридор", "leviathan_corridor", 1);
 
		kh_vroom("К системе жизнеобеспечения", "leviathan_life_support", 1);
 
	};
 
	obj = {
 
		"leviathan_lower_wiring";
 
	};
 
};
 
 
leviathan_life_support = darkroom {
 
	nam = "leviathan_life_support";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;   
 
	disp = "Левиафан, система жизнеобеспечения";
 
	leviathan = true;
 
	dsc_lit = [[Электрическая лампа освещает важнейший отсек корабля. Здесь расположено все необходимое для обеспечения команды воздухом для дыхания в течение нескольких месяцев. ]];
 
	dsc_halflit = [[Слабый свет лампы освещает важнейший отсек корабля. Здесь расположено все необходимое для обеспечения команды воздухом для дыхания в течение нескольких месяцев. ]];
 
	dsc_dark = [[Отсек погружен во мрак и вы не видите совсем ничего. ]];
 
	way = {
 
		kh_vroom("Назад", "leviathan_lower_deck", 1);
 
	};
 
	obj = {
 
		'leviathan_airtanks';
 
		'leviathan_airregen';
 
		"leviathan_life_wiring";
 
	};
 
};
 
 
leviathan_airtanks = obj {
 
	nam = "leviathan_airtanks";
 
	dsc = function(s)
 
		local percent = submarine_leviathan.air_level / 432000 * 100;
 
		if (percent < 1) then
 
			return [[Большую часть помещения занимают {кислородные баллоны}. Толстые стенки из прочного сплава способны выдержать огромное давление. Судя по показаниям приборов, баллоны пусты. ]]
 
		else
 
			return [[Большую часть помещения занимают {кислородные баллоны}. Толстые стенки из прочного сплава способны выдержать огромное давление. Судя по показаниям приборов, баллоны заполнены на ]] .. tostring(math.floor(percent + 0.5)) .. "%. ";
 
		end;
 
	end;
 
	seen_level = 1;
 
};
 
 
leviathan_airregen = obj {
 
	nam = "leviathan_airregen";
 
	dsc = function(s)
 
        if (submarine_leviathan.refit) then
 
            return [[{Установка регенерации воздуха} расположена в углу и, судя по показаниям приборов, отлично работает. ]];
 
        else
 
            return [[{Установка регенерации воздуха} сейчас находится в плачевном состоянии -- часть деталей отсутствуют, еще некоторые поломаны. ]];
 
        end;
 
    end;
 
	seen_level = 1;
 
};
 
 
leviathan_wheelhouse = darkroom {
 
	nam = "leviathan_wheelhouse";
 
    has_light = function(s)
 
        return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0;
 
    end;
 
	disp = "Левиафан, рубка";
 
	leviathan = true;
 
	dsc_lit = function(s)
 
		local view = "";
 
		if (type(where(submarine_leviathan).view) == "function") then
 
			view = where(submarine_leviathan):view();
 
		else
 
			view = where(submarine_leviathan).view;
 
		end;
 
		
 
		return [[Небольшое помещение в передней части субмарины освещено ярким светом электрических ламп. Через три огромных иллюминатора вы можете увидеть происходящее снаружи субмарины. ]] .. (view);
 
	end;
 
	dsc_halflit = function(s)
 
		local view = "";
 
		if (type(where(submarine_leviathan).view) == "function") then
 
			view = where(submarine_leviathan):view();
 
		else
 
			view = where(submarine_leviathan).view;
 
		end;
 
		
 
		return [[Небольшое помещение в передней части субмарины освещено слабым светом вашей лампы. Через три огромных иллюминатора вы можете увидеть происходящее снаружи субмарины. ]] .. (view);
 
	end;
 
	dsc_dark = function(s)
 
		local view = "";
 
		if (type(where(submarine_leviathan).view) == "function") then
 
			view = where(submarine_leviathan):view();
 
		else
 
			view = where(submarine_leviathan).view;
 
		end;
 
		
 
		return [[Небольшое помещение в передней части субмарины не освещено. В темноте вы ничего не можете разглядеть. Через три огромных иллюминатора вы можете увидеть происходящее снаружи субмарины. ]] .. (view);
 
	end;
 
	way = {
 
		kh_vroom("В кают-компанию", "leviathan_wardroom", 2);
 
	};
 
	obj = {
 
		'leviathan_handwheel';
 
		'leviathan_airpump_control';
 
		'leviathan_wheelhouse_sensors';
 
		"leviathan_wheelhouse_wiring";
 
	};
 
};
 
 
leviathan_handwheel = obj {
 
	nam = "leviathan_handwheel";
 
	dsc = [[Перед вами расположен {штурвал}. Рядом с ним расположено несколько рычагов. ]];
 
	act = function(s)
 
		if (atlantis_found and submarine_leviathan.air_level > 400000 and submarine_leviathan.circuit_breaks == 0 and submarine_leviathan.power_on) then
 
			--walkin("demo_end");
 
			local dlg = EngineUtils.getValue(where(submarine_leviathan).handwheel_room);
 
			if (dlg) then
 
				walkin(dlg);
 
			else
 
				walkin('leviathan_dlg');
 
			end;
 
		elseif (not submarine_leviathan.power_on) then
 
			return [[Без электричества _"Левиафан"_ не сдвинется с места. ]];
 
		elseif (not atlantis_found) then
 
			return [[Вы не знаете, куда плыть. ]];
 
		elseif (submarine_leviathan.air_level <= 400000) then
 
			return [[Без воздуха вы далеко не уплывете. ]];
 
		elseif (submarine_leviathan.circuit_breaks > 0) then
 
			return [[В темноте вы не можете управлять кораблем. ]];
 
		end;
 
	end;
 
};
 
 
leviathan_airpump_timer = function()
 
    if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery) then
 
        submarine_leviathan.air_level = submarine_leviathan.air_level + 4000;
 
        if (submarine_leviathan.air_level > 432000) then 
 
            submarine_leviathan.air_level = 432000;
 
            timer:stop();
 
        end;
 
    end;
 
    
 
end;
 
 
leviathan_airpump_control = obj {
 
	nam = "leviathan_airpump_control";
 
	dsc = function(s)
 
		if (submarine_leviathan.airpump) then
 
			return [[Один из них отвечает за управление {воздушными насосами} и находится сейчас во включенном состоянии. ]];
 
		else
 
			return [[Один из них отвечает за управление {воздушными насосами} и находится сейчас в выключенном состоянии.  ]];
 
		end;
 
	end;
 
	act = function(s)
 
		if (submarine_leviathan.airpump) then
 
			submarine_leviathan.airpump = false;
 
            timer:stop();         
 
			return [[Вы выключаете воздушные насосы. ]];
 
		else
 
			lifeon(s);
 
			submarine_leviathan.airpump = true;
 
            game.timer = leviathan_airpump_timer;
 
            timer:set(1000);
 
			return [[Вы включаете воздушные насосы. ]];
 
		end;
 
	end;
 
	life = function(s)
 
		if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery) then
 
            submarine_leviathan.air_level = submarine_leviathan.air_level + 4000;
 
            if (submarine_leviathan.air_level > 432000) then 
 
                submarine_leviathan.air_level = 432000;
 
                lifeoff(s);
 
                timer:stop();
 
            end;
 
            if (here().leviathan) then
 
                pr([[Вы слышите гул работающих насосов. ]]);
 
            end;
 
        end;
 
	end;
 
	seen_level = 1;
 
};
 
 
leviathan_wheelhouse_sensors = obj {
 
	nam = "leviathan_wheelhouse_sensors";
 
	dsc = [[Чуть ниже рычагов находится небольшая {панель} с лампочками и стрелками каких-то приборов. ]];
 
	act = function(s)
 
		if (submarine_leviathan.battery) then
 
			pr("На панели горят следующие лампочки: ");
 
			pr("батарея работает");
 
			if (submarine_leviathan.power_on) then
 
				pr(", питание включено");
 
			end;
 
			if (submarine_leviathan.airpump) then
 
				pr(", воздушные насосы включены");
 
			end;
 
			if (submarine_leviathan.circuit_breaks > 0) then
 
				pr(", разорвана цепь освещения");
 
			end;
 
			pr(". ");
 
		else
 
			pr("На панели не горит ни одна лампочка. ");
 
		end;
 
		local percent = submarine_leviathan.air_level / 432000 * 100;
 
		pr ([[
 
			Кислородные баллоны заполнены на 
 
		]] .. tostring(math.floor(percent + 0.5)) .. "%. ");
 
	end;
 
	seen_level = 1;
 
};
 
 
leviathan_wiring_dsc = [[Под потолком висят какие-то {провода}. ]];
 
 
leviathan_wiring_act = function(s)
 
	if (submarine_leviathan.power_on and submarine_leviathan.battery) then
 
		return [[Возможно, лучше отключить электричество, прежде чем копаться в проводах. ]];
 
	end;
 
	if (s.state == 0) then
 
		return [[Некоторые провода разорваны. ]];
 
	elseif (s.state == 1) then
 
		return [[Некоторые провода перемотаны изолентой. ]];
 
	else
 
		return [[Провода в порядке. ]];
 
	end;
 
end;
 
 
leviathan_wiring_used = function(s, o)
 
	if (submarine_leviathan.power_on and submarine_leviathan.battery) then
 
		return [[Возможно, лучше отключить электричество, прежде чем копаться в проводах. ]];
 
	end;
 
	if (o == item_ducttape and s.state == 0) then
 
		s.state = 1;
 
		submarine_leviathan.circuit_breaks = submarine_leviathan.circuit_breaks - 1;
 
		if (submarine_leviathan.circuit_breaks == 0) then
 
			for i = 1, #leviathan_wiring do
 
				leviathan_wiring[i]:disable();
 
			end;
 
		end;
 
		return [[Вы соединяете провода и заматываете их изолентой. ]];
 
	end;
 
end;
 
 
leviathan_wheelhouse_wiring = obj {
 
    var {
 
        state = 2;
 
    };
 
	nam = "leviathan_wheelhouse_wiring";
 
	dsc = leviathan_wiring_dsc;
 
	act = leviathan_wiring_act;
 
	used = leviathan_wiring_used;
 
	seen_level = 1;
 
};
 
 
leviathan_wardroom_wiring = obj {
 
    var {
 
        state = 2;
 
    };
 
	nam = "leviathan_wardroom_wiring";
 
	dsc = leviathan_wiring_dsc;
 
	act = leviathan_wiring_act;
 
	used = leviathan_wiring_used;
 
	seen_level = 1;
 
};
 
 
leviathan_engineering_wiring = obj {
 
    var {
 
        state = 2;
 
    };
 
	nam = "leviathan_engineering_wiring";
 
	dsc = leviathan_wiring_dsc;
 
	act = leviathan_wiring_act;
 
 	used = leviathan_wiring_used;
 
	seen_level = 1;
 
};
 
 
leviathan_cargo_wiring = obj {
 
    var {
 
        state = 2;
 
    };
 
	nam = "leviathan_cargo_wiring";
 
	dsc = leviathan_wiring_dsc;
 
	act = leviathan_wiring_act;
 
	used = leviathan_wiring_used;
 
	seen_level = 1;
 
};
 
 
leviathan_corridor_wiring = obj {
 
    var {
 
        state = 2;
 
    };
 
	nam = "leviathan_corridor_wiring";
 
	dsc = leviathan_wiring_dsc;
 
	act = leviathan_wiring_act;
 
	used = leviathan_wiring_used;
 
	seen_level = 1;
 
};
 
 
leviathan_lower_wiring = obj {
 
    var {
 
        state = 2;
 
    };
 
	nam = "leviathan_lower_wiring";
 
	dsc = leviathan_wiring_dsc;
 
	act = leviathan_wiring_act;
 
	used = leviathan_wiring_used;
 
	seen_level = 1;
 
};
 
 
leviathan_life_wiring = obj {
 
    var {
 
        state = 2;
 
    };
 
	nam = "leviathan_life_wiring";
 
	dsc = leviathan_wiring_dsc;
 
	act = leviathan_wiring_act;
 
	used = leviathan_wiring_used;
 
	seen_level = 1;
 
};
 
 
leviathan_wiring = {
 
	leviathan_wheelhouse_wiring;
 
	leviathan_wardroom_wiring;
 
	leviathan_engineering_wiring;
 
	leviathan_cargo_wiring;
 
	leviathan_corridor_wiring;
 
	leviathan_lower_wiring;
 
	leviathan_life_wiring;
 
};
 
 
leviathan_dlg = dlg {
 
	nam = "leviathan_dlg";
 
	disp = "Левиафан, рубка";
 
	dsc = function()
 
		local view = "";
 
		if (type(where(submarine_leviathan).view) == "function") then
 
			view = where(submarine_leviathan):view();
 
		else
 
			view = where(submarine_leviathan).view;
 
		end;
 
		
 
		return [[Вы находитесь в рубке Левиафана перед штурвалом. Отсюда вы можете направиться куда-нибудь. Яркий свет электрических ламп освещает помещение. ]] .. (view);
 
	end;
 
	update_options = function()
 
		leviathan_dlg:poff("atlantis", "old_temple", "iraaphaanotrr", "iraaphaanotrr_temple", "dypatreanotrr", "dypatreanotrr_temple");     
 
		if (atlantis_found and where(submarine_leviathan) ~= atl_aqua_leviathan_dock) then
 
			leviathan_dlg:pon("atlantis");
 
		end;
 
		if (temple_found and where(submarine_leviathan) ~= iyh_far_from_entrance_foot) then
 
			leviathan_dlg:pon("old_temple");
 
		end;	
 
        if (iraaphaanotrr_found and where(submarine_leviathan) ~= ctt_iraa_city) then
 
            leviathan_dlg:pon("iraaphaanotrr");
 
        end;
 
        if (dypatreanotrr_found and where(submarine_leviathan) ~= ctt_dyp_city) then
 
            leviathan_dlg:pon("dypatreanotrr");
 
        end;
 
		if (iraaphaanotrr_temple_found and where(submarine_leviathan) ~= ctt_iraa_near_temple) then
 
			leviathan_dlg:pon("iraaphaanotrr_temple");
 
		end;
 
		if (dypatreanotrr_temple_found and where(submarine_leviathan) ~= dyp_temple_entrance) then
 
			leviathan_dlg:pon("dypatreanotrr_temple");
 
		end;
 
	end;
 
	enter = function(s)
 
		s.update_options();
 
	end;
 
	phr = {
 
		{tag="atlantis", always = "true", "Атлантида", nil, function()
 
			move(submarine_leviathan, "atl_aqua_leviathan_dock");
 
			leviathan_dlg:update_options();
 
            walk(atl_entry);
 
		end},
 
		{tag="old_temple", always = "true", "Старый храм", function()
 
			return "Вы прибыли в старый храм";
 
		end, function()
 
			move(submarine_leviathan, "iyh_far_from_entrance_foot");
 
			leviathan_dlg:update_options();
 
		end},
 
		{tag="iraaphaanotrr", always = "true", "Ираафаанотр", function()
 
            move(submarine_leviathan, "iraa_near_city_west");
 
            leviathan_dlg:update_options();      
 
			walk(iraa_entry);
 
		end},
 
		{tag="iraaphaanotrr_temple", always = "true", "Храм Ираафаанотра", function()
 
			move(submarine_leviathan, "iraa_temple_entrance");
 
            leviathan_dlg:update_options();      
 
            walk(iraa_entry);
 
		end},
 
		{tag="dypatreanotrr", always = "true", "Дипатреанотр", function()
 
			move(submarine_leviathan, "dyp_center");
 
            leviathan_dlg:update_options();      
 
            walk(dyp_entry);
 
		end},
 
		{tag="dypatreanotrr_temple", always = "true", "Храм Дипатреанотра", function()
 
			move(submarine_leviathan, "dyp_temple_entrance");
 
            leviathan_dlg:update_options();      
 
            walk(dyp_temple_entry);
 
		end},
 
		{always = "true", "Назад", "", function()
 
			back();
 
		end}
 
	};
 
};
 
 
phone_wheelhouse = obj {
 
	nam = "phone_wheelhouse";
 
	disp = "Телефон";
 
	dsc = [[Рядом со штурвалом установлен {телефонный аппарат} для связи в пределах субмарины. ]];
 
	act = function(s)
 
        if (not submarine_leviathan.power_on or not submarine_leviathan.battery) then
 
            return [[Без электричества телефон не заработает. ]];
 
        elseif (#pl.party < 1) then
 
            return [[Здесь никого нет. ]];
 
        else
 
            walkin(phone_dlg);
 
        end;      
 
	end;
 
	seen_level = 1;
 
};
 
 
phone_cabin = obj {
 
	nam = "phone_cabin";
 
	disp = "Телефон";
 
	dsc = [[На столе установлен {телефонный аппарат} для связи в пределах субмарины. ]];
 
	act = function(s)
 
		if (not submarine_leviathan.power_on or not submarine_leviathan.battery) then
 
            return [[Без электричества телефон не заработает. ]];
 
        elseif (#pl.party < 1) then
 
            return [[Здесь никого нет. ]];
 
        else
 
            walkin(phone_dlg);
 
        end;
 
	end;
 
	seen_level = 1;
 
};
 
 
phone_wardroom = obj {
 
	nam = "phone_wardroom";
 
	disp = "Телефон";
 
	dsc = [[На столе, рядом с креслом капитана установлен {телефонный аппарат} для связи в пределах субмарины. ]];
 
	act = function(s)
 
		if (not submarine_leviathan.power_on or not submarine_leviathan.battery) then
 
            return [[Без электричества телефон не заработает. ]];
 
        elseif (#pl.party < 1) then
 
            return [[Здесь никого нет. ]];
 
        else
 
            walkin(phone_dlg);
 
        end;
 
	end;
 
	seen_level = 1;
 
};
 
 
phone_dlg = dlg {
 
	nam = "phone_dlg";
 
	disp = "Телефон";
 
	hideinv = true;
 
	dsc = [[Вы снимаете трубку и можете вызвать кого-нибудь. ]];
 
	entered = function(s)
 
		poff("phaetlarr", "learr", "radcliffe", "wright", "aikerjarr", "anna");
 
		for i = 1, #pl.party do
 
			pon(pl.party[i]);
 
		end;
 
	end;
 
	phr = {
 
		{ tag = "aikerjarr", always = true, "Аикерьярр", [[Аикерьярр не берет трубку. ]]},
 
		{ tag = "phaetlarr", always = true, "Фаэтларр", code = [[walkin(phaetlarr_phone_dlg)]]},
 
		{ tag = "learr", always = true, "Леарр", code = [[walkin(learr_phone_dlg)]]},
 
		{ tag = "radcliffe", always = true, "Уолтер Рэдклифф", code = [[walkin(radcliffe_phone_dlg)]]},
 
		{ tag = "wright", always = true, "Джек Райт", code = [[walkin(wright_phone_dlg)]]},
 
		{ tag = "anna", always = true, "Анна Рэдклифф", code = [[walkin(anna_phone_dlg)]]},
 
		{ tag = "exit", always = true, "Положить трубку", code = [[back()]]}
 
	}
 
};
 
 
function leviathan_init()
 
	put(submarine_leviathan:disable(), dock_mooring);
 
	local i = 0;
 
	while i < submarine_leviathan.circuit_breaks do
 
		local t = rnd(#leviathan_wiring);
 
		if (leviathan_wiring[t].state == 2) then
 
			leviathan_wiring[t].state = 0;
 
			i = i + 1;
 
		end;
 
	end;
 
end;
 
\ No newline at end of file
0 comments (0 inline, 0 general)