Changeset - e4ecbb8dc309
[Not reviewed]
default
0 2 0
Silverwing - 7 years ago 2017-06-24 08:30:22

Coder
2 files changed with 146 insertions and 2 deletions:
0 comments (0 inline, 0 general)
items.lua
Show inline comments
 
@@ -533,74 +533,75 @@ item_navjiarr_chart_iraa = obj {
 
item_navjiarr_chart_dyp = obj {
 
	nam = "item_navjiarr_chart_dyp";
 
	disp = "Карта из Дипатреанотра";
 
	dsc = [[На пьедестале лежит металлическая табличка. ]];
 
	tak = function(s)
 
		path("Выйти из храма"):enable();
 
		return [[Как только вы подбираете табличку, дверь открывается. ]];
 
	end;
 
	inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]];
 
};
 
 
item_navjiarr_chart_2 = obj {
 
	nam = "item_navjiarr_chart_2";
 
	disp = "Навьярская табличка";
 
	dsc = [[На полу в углу валяется какой-то {предмет}. ]];
 
	tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]];
 
	inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]];
 
};
 
 
item_navjiarr_chart_ven = obj {
 
    nam = "item_navjiarr_chart_ven";
 
    disp = "Карта из Венаэданотра";
 
    inv = [[Металлическая табличка с нанесенными обозначениями. ]];
 
}
 
 
item_navjiarr_chart_3 = obj {
 
	nam = "item_navjiarr_chart_3";
 
	disp = "Навьярская табличка";
 
	dsc = [[На полу в углу валяется какой-то {предмет}. ]];
 
	tak = [[Вы поднимаете предмет - это небольшая металлическая табличка. ]];
 
	inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]];
 
};
 
 
item_navjiarr_cube = obj {
 
	nam = "item_navjiarr_cube";
 
	disp = "Навьярский артефакт";
 
	inv = [[Небольшой прозрачный куб, очень холодный на ощупь - холод ощущается даже в скафандре. От него исходит слабое свечение. ]];
 
};
 
 
item_talk_device = obj {
 
	nam = "item_talk_device";
 
	disp = "Устройство для общения с навьярами";
 
	inv = [[Небольшое устройство с клавиатурой и большим количеством цветных лампочек. Оно полностью герметично и может быть использовано под водой. ]];
 
};
 
 
item_suit = suit {
 
	dlg = "call_leviathan";
 
	nam = "Скафандр";
 
    has_coder = true;   
 
};
 
 
item_deep_key = obj {
 
    nam = "item_deep_key";
 
    disp = "Пирамидка";
 
    dsc = [[На пьедестале вы видите небольшой блестящий {предмет}. ]];
 
    inv = [[Небольшая полупрозрачная пирамидка из неизвестного материала. Гладкая и холодная на ощупь. На гранях пирамидки нанесены непонятные символы. ]];
 
    tak = [[Это оказалась небольшая полупрозрачная пирамидка. Вы забираете ее себе. ]];
 
};
 
 
item_navjiarr_chart_z = obj {
 
    nam = "item_navjiarr_chart_z";
 
    disp = "Навьярская табличка";
 
    dsc = [[На пьедестале лежит небольшая металлическая {табличка}. ]];
 
    tak = function(s)        
 
        return [[Вы поднимаете предмет - это небольшая металлическая табличка. Вдалеке вы слышите скрежет камней - дверь храма снова открыта. ]];
 
    end;
 
    inv = [[Металлическая табличка, на которую нанесены странные обозначения. ]];
 
};
 
 
item_naethvjirr_key = obj {
 
    nam = "item_naethvjirr_key";
 
    disp = "Ключ из древнего храма";
 
    dsc = [[На пьедестале лежит небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. ]];
 
    inv = [[Небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. Пластинка с обеих сторон покрыта тонкими металлическими нитями. ]];
 
};
 
\ No newline at end of file
utils.lua
Show inline comments
 
@@ -395,96 +395,216 @@ function input_number_nav(tab)
 
    tab.dsc = function(s)
 
        pr(tab.label .. tab.input .. "_");
 
        return false;
 
        --return tab.label .. tab.input .. "_";
 
    end;
 
    tab.entered = function(s)
 
        s.input = "";
 
        hook_keys('0', '1', '2', '3', '4', '5', 'backspace', 'return', 'escape');
 
    end;
 
    tab.left = function(s)
 
        unhook_keys('0', '1', '2', '3', '4', '5', 'backspace', 'return', 'escape');
 
    end;
 
    tab.kbd = function(s, down, key)
 
        if (not down) then
 
            if (key == "escape") then
 
                back();
 
            elseif (key == "return") then
 
                if (s.input) then
 
                    s:check(s.input);
 
                end;
 
            elseif (key == "backspace") then
 
                if (s.input:len() > 0) then
 
                    s.input = s.input:sub(1, s.input:len() - 1);
 
                end;
 
            else
 
                if (string.len(s.input) < s.maxlen) then
 
                    s.input = s.input .. key;
 
                    -- hide buttons :)
 
                end;
 
            end;
 
        end;
 
        pr("");
 
    end;
 
    tab.obj = {
 
        "_kh_input1",
 
        "_kh_input2",
 
        "_kh_input3",
 
        "_kh_input4",
 
        "_kh_input5",
 
        "_kh_input0",
 
        "_kh_backspace",
 
        "_kh_cancel",
 
        "_kh_enter"
 
    };
 
 
    return room(tab);
 
end;
 
 
function input_alphabet_nav(tab)
 
    if (not tab.maxlen) then
 
        tab.maxlen = "16";
 
    end;
 
    tab.forcedsc = true;
 
    tab.noinv = true;
 
    tab.input = "";
 
    tab.dsc = function(s)
 
        pr(tab.label .. tab.input .. "_");
 
        return false;
 
    end;
 
    tab.entered = function(s)
 
        s.input = "";
 
        hook_keys('0', '1', '2', '3', '4', '5', 
 
            'a', 'd', 'e', 'f', 'h', 'i', 'j', 'k', 'l', 'n', 'p', 'r', 's', 't', 'v', 'y', 'z',"'",'space',
 
            'backspace', 'return', 'escape');
 
    end;
 
    tab.left = function(s)
 
        unhook_keys('0', '1', '2', '3', '4', '5', 
 
            'a', 'd', 'e', 'f', 'h', 'i', 'j', 'k', 'l', 'n', 'p', 'r', 's', 't', 'v', 'y', 'z',"'",'space',
 
            'backspace', 'return', 'escape');
 
    end;
 
    tab.kbd = function(s, down, key)
 
        if (not down) then
 
            if (key == "escape") then
 
                back();
 
            elseif (key == "return") then
 
                if (s.input) then
 
                    s:check(s.input);
 
                end;
 
            elseif (key == "backspace") then
 
                if (s.input:len() > 0) then
 
                    s.input = s.input:sub(1, s.input:len() - 1);
 
                end;
 
            else
 
                if (string.len(s.input) < s.maxlen) then
 
                    s.input = s.input .. key;
 
                    -- hide buttons :)
 
                end;
 
            end;
 
        end;
 
        pr("");
 
    end;
 
    tab.obj = {
 
        "_kh_input1",
 
        "_kh_input2",
 
        "_kh_input3",
 
        "_kh_input4",
 
        "_kh_input5",
 
        "_kh_inputa",
 
        "_kh_inputd",
 
        "_kh_inpute",
 
        "_kh_inputf",
 
        "_kh_inputh",
 
        "_kh_inputi",
 
        "_kh_inputj",
 
        "_kh_inputk",
 
        "_kh_inputl",
 
        "_kh_inputn",
 
        "_kh_inputp",
 
        "_kh_inputr",
 
        "_kh_inputs",
 
        "_kh_inputt",
 
        "_kh_inputv",
 
        "_kh_inputy",
 
        "_kh_inputz",
 
        "_kh_inputhp",
 
        "_kh_inputsp",
 
        "_kh_backspace",
 
        "_kh_cancel",
 
        "_kh_enter"
 
    };
 
    return room(tab);
 
end;
 
 
_kh_input_key = function(key, key_text)
 
    if not key_text then
 
        key_text = key;
 
    end;
 
    return obj {
 
        nam = "_kh_input" .. key;
 
        dsc = "{" .. key_text .. "}";
 
        act = function(s)
 
            if (here().input:len() < here().maxlen) then
 
                here().input = here().input .. key;
 
            end;
 
            return "";
 
        end;
 
    };
 
end;
 
 
_kh_inputa = _kh_input_key("a");
 
_kh_inputb = _kh_input_key("b");
 
_kh_inputc = _kh_input_key("c");
 
_kh_inputd = _kh_input_key("d");
 
_kh_inpute = _kh_input_key("e");
 
_kh_inputf = _kh_input_key("f");
 
_kh_inputg = _kh_input_key("g");
 
_kh_inputh = _kh_input_key("h");
 
_kh_inputi = _kh_input_key("i");
 
_kh_inputj = _kh_input_key("j");
 
_kh_inputk = _kh_input_key("k");
 
_kh_inputl = _kh_input_key("l");
 
_kh_inputm = _kh_input_key("m");
 
_kh_inputn = _kh_input_key("n");
 
_kh_inputo = _kh_input_key("o");
 
_kh_inputp = _kh_input_key("p");
 
_kh_inputq = _kh_input_key("q");
 
_kh_inputr = _kh_input_key("r");
 
_kh_inputs = _kh_input_key("s");
 
_kh_inputt = _kh_input_key("t");
 
_kh_inputu = _kh_input_key("u");
 
_kh_inputv = _kh_input_key("v");
 
_kh_inputw = _kh_input_key("w");
 
_kh_inputx = _kh_input_key("x");
 
_kh_inputy = _kh_input_key("y");
 
_kh_inputz = _kh_input_key("z");
 
_kh_inputsp = _kh_input_key(" ", "Пробел");
 
_kh_inputhp = _kh_input_key("'", "'");
 
 
_kh_input1 = obj {
 
    nam = "_kh_input1";
 
    dsc = "{1}";
 
    act = function(s)
 
        if (here().input:len() < here().maxlen) then
 
            here().input = here().input .. "1";
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_input2 = obj {
 
    nam = "_kh_input2";
 
    dsc = "{2}";
 
    act = function(s)
 
        if (here().input:len() < here().maxlen) then
 
            here().input = here().input .. "2";
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_input3 = obj {
 
    nam = "_kh_input3";
 
    dsc = "{3}";
 
    act = function(s)
 
        if (here().input:len() < here().maxlen) then
 
            here().input = here().input .. "3";
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_input4 = obj {
 
    nam = "_kh_input4";
 
    dsc = "{4}";
 
    act = function(s)
 
        if (here().input:len() < here().maxlen) then
 
            here().input = here().input .. "4";
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_input5 = obj {
 
    nam = "_kh_input5";
 
    dsc = "{5}";
 
    act = function(s)
 
@@ -571,133 +691,156 @@ end;
 
    nam = "_kh_enter";
 
    dsc = "{Ввод}";
 
    act = function(s)
 
        if (here().input) then
 
            here():check(here().input);
 
        end;
 
    end;
 
};
 
 
 
--[[
 
	Создает obj, который добавляет другой obj на сцену при активации и становится неинтерактивным
 
	nam - имя объекта
 
	dsc_a - описание до активации
 
	dsc_b - описание после активации
 
	act_a - описание взаимодействия до активации
 
	act_b - описание взаимодействия после активации
 
	o2 - obj, добавляемый на сцену
 
	r - удаляет объект после активации
 
]]
 
function obscured_obj(nam, dsc_a, act_a, o2, r, dsc_b, act_b)
 
	return obj {
 
		var {
 
			activated = false;
 
		};
 
		nam = nam;
 
		dsc = function(s)
 
			if (s.activated) then
 
				return dsc_b;
 
			else 
 
				return dsc_a;
 
			end;
 
		end;
 
		act = function(s)
 
			if (s.activated) then
 
				return act_b;
 
			else
 
				s.activated = true;
 
				put(o2, here());
 
				if (r) then
 
					remove(r, here());
 
				end;
 
				return act_a;
 
			end;
 
		end;
 
	};
 
end;
 
 
_atlantis_coder = input_alphabet_nav {
 
    nam = "Кодировщик";
 
    maxlen = 32;
 
    label = "Сообщение:";
 
    check = function(s, input)
 
        if type(_atlantis_suit_menu._here.checkCoder) == "function" then
 
            pn(_atlantis_suit_menu._here:checkCoder());
 
        else
 
            pn [[Лампочки кодировщика зажигаются в заданной последовательности, но ничего не происходит. ]];
 
        end;
 
        back();
 
    end;
 
};
 
 
_atlantis_suit_menu = dlg {
 
	nam = "Скафандр";
 
	_item = nil;
 
	dsc = [[
 
		Что вы хотите сделать?
 
	]];
 
    entered = function(s)
 
        if (s._item.has_coder) then
 
            pon(2);
 
        else
 
            poff(2);
 
        end;
 
    end;   
 
	phr = {
 
		{1, always = "true", "Использовать рацию", function(s)
 
			local val = EngineUtils.getValue(_atlantis.suit_menu._item.dlg, _atlantis.suit_menu._item);
 
			if (val) then
 
				walkin(val);
 
				stead.ref(val).__from__ = _atlantis.suit_menu.__from__;
 
			else
 
				back();
 
				return "Никто не отвечает";
 
			end;
 
		end};
 
		{2, always = "true", "Снять скафандр", function(s)
 
        {2, always = "true", "Использовать кодировщик", code [[ walkin("_atlantis_coder"); ]]};
 
		{3, always = "true", "Снять скафандр", function(s)
 
			if (EngineUtils.getValue(_atlantis_suit_menu._item.cantakeoff, _atlantis_suit_menu._item)) then
 
				drop(_atlantis._uit_menu._item);
 
				back();
 
				return "Вы снимаете скафандр";
 
			else
 
				back();
 
				return "Вы не можете снять скафандр сейчас";
 
			end;
 
		end};
 
		{3, always = "true", "Отмена", function(s)
 
		{4, always = "true", "Отмена", function(s)
 
			back();
 
			return "";
 
		end};
 
	};
 
};
 
 
_atlantis = {
 
	suit_inv = function(s)
 
		_atlantis_suit_menu._item = s;
 
        _atlantis_suit_menu._here = here();
 
		walkin(_atlantis_suit_menu);
 
	end;
 
};
 
 
suit = function(tab)
 
	if (not tab.inv) then
 
		tab.inv = _atlantis.suit_inv;
 
	end;
 
	
 
	return obj(tab);
 
end;
 
 
labyrinth = function(tab)
 
    local enter = tab.enter;
 
    local exit = tab.exit;
 
    local dsc = tab.dsc;
 
    local lab;
 
    tab.enter = function(s)
 
        path('e1'):disable();
 
        path('e2'):disable();
 
        path('e3'):disable();
 
        path('e4'):disable();
 
        path('ex'):disable();
 
        
 
        local e1open = s.map[s.position].e1 and not EngineUtils.getValue(s.map[s.position].e1lock, s);
 
        local e2open = s.map[s.position].e2 and not EngineUtils.getValue(s.map[s.position].e2lock, s);
 
        local e3open = s.map[s.position].e3 and not EngineUtils.getValue(s.map[s.position].e3lock, s);
 
        local e4open = s.map[s.position].e4 and not EngineUtils.getValue(s.map[s.position].e4lock, s);
 
        local exopen = s.map[s.position].ex and not EngineUtils.getValue(s.map[s.position].exlock, s);
 
        
 
        if (e1open) then
 
            path('e1'):enable();
 
        end;
 
        if (e2open) then
 
            path('e2'):enable();
 
        end;
 
        if (e3open) then
 
            path('e3'):enable();
 
        end;
 
        if (e4open) then
 
            path('e4'):enable();
 
        end;
 
        if (exopen) then
 
            path('ex'):enable();
 
        end;
 
        if (type(enter) == 'function') then
 
            enter(s);
 
        end;
0 comments (0 inline, 0 general)