From f9d3db654c5b2ebb3e1e725ae4b9abe9a4bf76b4 Mon Sep 17 00:00:00 2001 From: HimbeerserverDE Date: Wed, 7 Oct 2020 18:01:45 +0200 Subject: [PATCH] Add SafeRoute system --- controllers.lua | 119 +++++++++++++++++++++++++++++++++ models/realdoor_a.obj | 0 models/realdoor_b.obj | 0 textures/saferoute_active.png | Bin 0 -> 3340 bytes textures/saferoute_default.png | Bin 0 -> 3334 bytes 5 files changed, 119 insertions(+) mode change 100644 => 100755 models/realdoor_a.obj mode change 100644 => 100755 models/realdoor_b.obj create mode 100644 textures/saferoute_active.png create mode 100644 textures/saferoute_default.png diff --git a/controllers.lua b/controllers.lua index 6142bee..6332ed3 100644 --- a/controllers.lua +++ b/controllers.lua @@ -46,6 +46,12 @@ realdoors.codepad_formspec = "size[5,6]" .. "button[1,4;1,1;seven;7]button[2,4;1,1;eight;8]button[3,4;1,1;nine;9]" .. "button[1,5;1,1;clear;C]button[2,5;1,1;zero;0]button[3,5;1,1;submit;E]" +realdoors.saferoute_formspec = "size[10,5]" .. +"list[context;keyslot;1,1;1,1]" .. +"button[3,1;3,1;trigger;Use key]" .. +"button[3,3;3,1;alarm;Trigger alarm]" .. +"list[current_player;main;1,2;9,1]" + realdoors.keyswitch_formspec_handler = function(pos, fields, sender) local meta = minetest.get_meta(pos) if not fields.trigger then return end @@ -204,6 +210,43 @@ realdoors.codepad_formspec_handler_2 = function(pos) mesecon.receptor_off(pos, realdoors.connection_rules) end +realdoors.saferoute_formspec_handler = function(pos, fields, sender) + local meta = minetest.get_meta(pos) + if fields.alarm and meta:get_string("alarm") == "" then + meta:set_string("alarm", "yes") + mesecon.receptor_on(pos, realdoors.connection_rules) + local node = minetest.get_node(pos) + node.name = "realdoors:saferoute_alarm" + minetest.swap_node(pos, node) + return + end + if not fields.trigger then return end + local inv = minetest.get_inventory({type = "node", pos = pos}) + local keystack = inv:get_stack("keyslot", 1) + if keystack:get_name() ~= "realdoors:key" then return end + local key = keystack:get_meta():get_string("shape") + if meta:get_string("key") == "" then + meta:set_string("key", key) + minetest.chat_send_player(sender:get_player_name(), "This SafeRoute has been linked to key " .. key) + return + end + if key == meta:get_string("key") then + meta:set_string("alarm", "") + local node = minetest.get_node(pos) + if node.name == "realdoors:saferoute_alarm" then + node.name = "realdoors:saferoute" + minetest.swap_node(pos, node) + end + mesecon.receptor_on(pos, realdoors.connection_rules) + minetest.after(1, realdoors.saferoute_formspec_handler_2, pos) + else + minetest.chat_send_player(sender:get_player_name(), "Your key does not match the lock") + end +end +realdoors.saferoute_formspec_handler_2 = function(pos) + mesecon.receptor_off(pos, realdoors.connection_rules) +end + minetest.register_node("realdoors:keyswitch", { description = "Key switch", drawtype = "nodebox", @@ -298,6 +341,82 @@ minetest.register_node("realdoors:codepad", { }, }) +minetest.register_node("realdoors:saferoute", { + description = "SafeRoute system", + drawtype = "nodebox", + tiles = {"saferoute_default.png"}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = false, + node_box = { + type = "fixed", + fixed = { + {-0.1, -0.125, 0.4, 0.1, 0.125, 0.5}, + }, + }, + groups = {snappy = 1}, + on_construct = function(pos) + minetest.get_meta(pos):set_string("formspec", realdoors.saferoute_formspec) + local inv = minetest.get_inventory({type = "node", pos = pos}) + inv:set_size("keyslot", 1) + end, + on_receive_fields = function(pos, formname, fields, sender) + realdoors.saferoute_formspec_handler(pos, fields, sender) + end, + mesecons = { + receptor = { + state = mesecon.state.off, + rules = realdoors.connection_rules, + }, + }, +}) + +minetest.register_node("realdoors:saferoute_alarm", { + description = "SafeRoute system (alarm going off)", + drawtype = "nodebox", + tiles = {"saferoute_active.png"}, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = false, + node_box = { + type = "fixed", + fixed = { + {-0.1, -0.125, 0.4, 0.1, 0.125, 0.5}, + }, + }, + groups = {snappy = 1, not_in_creative_inventory = 1}, + on_construct = function(pos) + minetest.get_meta(pos):set_string("formspec", realdoors.saferoute_formspec) + local inv = minetest.get_inventory({type = "node", pos = pos}) + inv:set_size("keyslot", 1) + end, + on_receive_fields = function(pos, formname, fields, sender) + realdoors.saferoute_formspec_handler(pos, fields, sender) + end, + mesecons = { + receptor = { + state = mesecon.state.on, + rules = realdoors.connection_rules, + }, + }, +}) + +minetest.register_abm({ + label = "SafeRoute alarm", + nodenames = {"realdoors:saferoute_alarm"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + minetest.sound_play("lockbeep_error", { + pos = pos, + max_hear_distance = 8, + gain = 4.0, + }) + end, +}) + minetest.register_node("realdoors:toggler", { description = "Door toggler", drawtype = "nodebox", diff --git a/models/realdoor_a.obj b/models/realdoor_a.obj old mode 100644 new mode 100755 diff --git a/models/realdoor_b.obj b/models/realdoor_b.obj old mode 100644 new mode 100755 diff --git a/textures/saferoute_active.png b/textures/saferoute_active.png new file mode 100644 index 0000000000000000000000000000000000000000..87a02ed963252fa26de818523dc8f9f2ca322630 GIT binary patch literal 3340 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 KxkAw*=>Gs}B2_E^ literal 0 HcmV?d00001