Changeset - 0e8e3f82de50
[Not reviewed]
default
0 2 0
silverwing - 7 years ago 2017-07-08 06:43:20

phr as function
2 files changed with 12 insertions and 3 deletions:
0 comments (0 inline, 0 general)
atlantis_navjiarr.lua
Show inline comments
 
@@ -584,99 +584,107 @@ iraa_near_city_west = room {
 
    };
 
};
 

	
 
iraa_city_west = room {
 
    nam = "iraa_city_west";
 
    disp = "Ираафаанотр, улица";
 
    dsc = [[Широкая мощеная улица, пересекающая город с востока на запад. К северу вы видите обширные поля, обрабатываемые десятками рук и дающие пищу жителям селения. К востоку вы видите каменный обелиск, возвышающийся над центральной площадью Ираафаанотра. ]];
 
    way = {
 
        kh_vroom("На запад", "iraa_near_city_west");
 
        kh_vroom("На восток, к центру Ираафаанотра", "iraa_city_center");
 
    };
 
};
 

	
 
iraa_city_center = room {
 
    nam = "iraa_city_center";
 
    disp = "Ираафаанотр, центральная площадь";
 
    dsc = [[Центральная площадь Ираафаанотра практически пуста. Лишь несколько зевак с интересом разглядывает вас, осторожно выглядывая из дверей библиотеки -- крупного здания, расположенного к северу от вас. Напротив библиотеки расположен дом вождя, не уступающий размерами библиотеке. ]];
 
    obj = {
 
        "iraa_obelisk";
 
    };
 
    way = {
 
        kh_vroom("На запад");
 
        kh_vroom("На восток");
 
        kh_vroom("В библиотеку");
 
        kh_vroom("В дом вождя");
 
    };
 
};
 

	
 
iraa_obelisk = obj {
 
    nam = "iraa_obelisk";
 
    dsc = [[В центре площади стоит большой каменный {обелиск}, с нанесенными на него символами. ]];
 
    act = function(s)
 
        iraaphaanotrr_temple_found = true;
 
        return [[На обелиске, традиционно для навьяров, начертано название города и вырезана карта, указывающая путь к храму. ]];
 
    end;
 
};
 

	
 
iraa_city_east = room {
 
    var {
 
        state = 0;
 
    };
 
    nam = "iraa_city_east";
 
    disp = "Ираафаанотр, улица";
 
    dsc = [[Широкая мощеная улица, пересекающая город с востока на запад. К северу вы видите обширные поля, обрабатываемые десятками рук и дающие пищу жителям селения. К западу вы видите каменный обелиск, возвышающийся над центральной площадью Ираафаанотра. ]];
 
    entered = function(s)
 
        if (state == 0 and char_learr.follow) then
 
            path("На юг, к саду"):enable();
 
            if language_known then
 
                return [[Когда вы почти доходите до дома мэра, Леарр неожиданно останавливается. Она смотрит на юг, а по ее головным плавникам бегут цветные полосы -- она говорит, что здесь, за домом вождя есть небольшой сад, а сразу за ним находится ее дом. Она просит вас пойти туда вместе с ней. ]];
 
                return [[Здесь Леарр неожиданно останавливается. Она смотрит на юг, а по ее головным плавникам бегут цветные полосы -- она говорит, что здесь, за домом вождя есть небольшой сад, а сразу за ним находится ее дом. Она просит вас пойти туда вместе с ней. ]];
 
            else
 
                return [[Когда вы почти доходите до дома мэра, Леарр неожиданно останавливается. Она смотрит на юг, а по ее головным плавникам бегут цветные полосы. Вы не понимаете, что она пытается вам сказать, но она хватает вас за руку и пытается вести за собой на юг. ]];
 
                return [[Здесь Леарр неожиданно останавливается. Она смотрит на юг, а по ее головным плавникам бегут цветные полосы. Вы не понимаете, что она пытается вам сказать, но она хватает вас за руку и пытается вести за собой на юг. ]];
 
            end;
 
        end;
 
    end;
 
    way = {
 
        kh_vroom("На восток", "iraa_near_city_east");
 
        kh_vroom("На юг, к саду", "iraa_garden"):disable();
 
        kh_vroom("На запад, к центру Ираафаанотра", "iraa_city_center");
 
    };
 
};
 

	
 
iraa_garden = room {
 
    nam = "iraa_garden";
 
    disp = "Ираафаанотр, сад";
 
    dsc = [[Небольшой сад, расположенный за домом вождя. ]];
 
    way = {
 
        kh_vroom("На север, к главной улице", "iraa_near_city_east");
 
        kh_vroom("На юг, к дому Леарр", "iraa_learr_house_near");
 
    };
 
};
 

	
 
iraa_learr_house_near = room {
 
    nam = "iraa_learr_house_near";
 
    disp = "Ираафаанотр, у дома Леарр";
 
};
 

	
 
iraa_near_city_east = room {
 
    nam = "iraa_near_city_east";
 
    disp = [[Ираафаанотр, у города]];
 
    dsc = [[Ровное илистое плато простирается вокруг насколько хватает взгляда. Вы находитесь на восточной окраине Ираафаанотра -- небольшого навьярского поселения. Невысокие каменные здания, раскиданные в кажущемся беспорядке служат жилищем для многих из них. В центре городка возвышается каменный обелиск, с нанесенными на него изображениями. ]];
 
    obj = {
 
        "iraa_city_east_guard";
 
    };
 
    way = {
 
        kh_vroom("К центру Ираафаанотра", "iraa_city_east");
 
    };
 
};
 

	
 
iraa_city_west_guard = npc {
 
    nam = "iraa_city_west_guard";
 
    dsc = [[По обе стороны дороги стоят двое навьярских {стражникиов}. ]];
 
    phr = {
 
        "Они не обращают на вас никакого внимания. "
 
    };
 
};
 

	
 
iraa_city_east_guard = npc {
 
    nam = "iraa_city_east_guard";
 
    dsc = [[По обе стороны дороги стоят двое навьярских {стражникиов}. ]];
 
    phr = {
 
        "Они не обращают на вас никакого внимания. "
 
    };
 
};
 

	
 
--[[
 
Ираафаанотр.Храм
 
]]
 
\ No newline at end of file
utils.lua
Show inline comments
 
@@ -123,97 +123,98 @@ end);]]
 
 
dlg = inherit(dlg, function(v)
 
    v.hideinv = true;
 
    return v;
 
end);
 
 
obj = inherit(obj, function(v)
 
	v.disable_implicit = hook(v.disable, function(f, s, ...)
 
		s._disabled_implicit = true;
 
		return f(s, unpack({...}));
 
	end);
 
 
	v.disable = hook(v.disable, function(f, s, ...)
 
		s._disabled_explicit = true;
 
		return f(s, unpack({...}));
 
	end);
 
	
 
	v.enable_implicit = hook(v.enable, function(f, s, ...)
 
		s._disabled_implicit = false;
 
		if (s._disabled_explicit) then
 
			return s; --mimic original enable() behavior
 
		else
 
			return f(s, unpack({...}));
 
		end;
 
	end);
 
	
 
	v.enable = hook(v.enable, function(f, s, ...)
 
		s._disabled_explicit = false;
 
		if (s._disabled_implicit) then
 
			return s; --mimic original enable() behavior
 
		else
 
			return f(s, unpack({...}));
 
		end;
 
	end);
 
	
 
	return v;
 
end);
 
 
--[[
 
	character object
 
	represents character, with whom you can interact
 
]]
 
function npc(tab)
 
	if (not tab.act) then
 
		tab.act = function(s)
 
			if (s.dlg) then
 
				walkin(s.dlg);
 
			else
 
				return s.phrases[rnd(#s.phrases)];
 
                local phrases = getValue(s.phrases, s);
 
				return phrases[rnd(#phrases)];
 
			end;
 
		end;
 
	end;
 
	
 
	return obj(tab);
 
end;
 
 
function darkroom(tab)
 
	local life;
 
	local entered;
 
	local left;
 
	if (not tab.has_light) then
 
		tab.has_light = false;
 
	end;
 
	if (tab.life) then
 
		life = tab.life;
 
	end;
 
	if (tab.entered) then
 
		entered = tab.entered;
 
	end;
 
	if (tab.left) then
 
		left = tab.left;
 
	end;
 
	tab.entered = function(s)
 
		lifeon(s);
 
		if (entered) then
 
			entered(s);
 
		end;
 
	end;
 
	tab.left = function(s)
 
		lifeoff(s);
 
		if (left) then
 
			left(s);
 
		end;
 
	end;
 
	tab.life = function(s)
 
        local hasLight = EngineUtils.getValue(s.has_light, s);
 
        local plLight = EngineUtils.getValue(pl.has_light, pl);
 
		if (hasLight) then
 
			-- show all objects that were not explicitly disabled(any seen_level)
 
			for i = 1, #objs(s) do
 
				objs(s)[i]:enable_implicit();
 
			end;
 
			for i = 1, #ways(s) do
 
				ways(s)[i]:enable_implicit();
 
			end;
 
		elseif (plLight) then
 
			-- show all objects that were not explicitly disabled and marked as seen in halflight (seen_level = 1 or higher)
0 comments (0 inline, 0 general)