diff --git a/mods/mech/depends.txt b/mods/mech/depends.txt index c651bb9..7ca41e5 100644 --- a/mods/mech/depends.txt +++ b/mods/mech/depends.txt @@ -1,3 +1,4 @@ boxes frame sounds +fsc \ No newline at end of file diff --git a/mods/mech/init.lua b/mods/mech/init.lua index b2ee028..7073689 100644 --- a/mods/mech/init.lua +++ b/mods/mech/init.lua @@ -1,4 +1,3 @@ - --[[ mech - mechanisms for Inside The Box @@ -1378,6 +1377,57 @@ minetest.register_node("mech:randomizer", { end, }) +minetest.register_node("mech:speaker", { + description = S("Speaker"), + tiles = {"speaker.png"}, + groups = {node = 1, unbreakable = 1}, + sounds = sounds.metal, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("msg", "") + end, + on_rightclick = function(pos, node, puncher, itemstack, pointed_thing) + local name = puncher:get_player_name() + if not puncher then + return itemstack + elseif not boxes.players_editing_boxes[name] then + return do_player_place(pos, node, puncher, itemstack, pointed_thing) + end + local meta = minetest.get_meta(pos) + local metatable = meta:to_table() + local msg = "" + if metatable.fields and metatable.fields.msg then + msg = metatable.fields.msg + end + local form = "field[msg;message;" .. msg .. "]" + fsc.show(name, form, {}, function(player, fields, context) + if fields.msg then + meta:set_string("msg", fields.msg) + return true + end + return nil + end) + return itemstack + end, + on_trigger = function(pos) + local box = boxes.find_box(pos) + if not box then + return + end + local meta = minetest.get_meta(pos) + local msg = meta:get_string("msg") + if msg then + -- underline text character + local underline = string.char(0xcd) .. string.char(0x9f) + local newstring = "" + for i = 0, #msg, 1 do + newstring = newstring .. string.sub(msg, i, i) .. underline + end + minetest.chat_send_player(box.name, newstring) + minetest.sound_play("speaker_trigger", {to_player = box.name}, true) + end + end, +}) -- event reactors: -- doors diff --git a/mods/mech/sounds/license.md b/mods/mech/sounds/license.md new file mode 100644 index 0000000..2097f0b --- /dev/null +++ b/mods/mech/sounds/license.md @@ -0,0 +1,2 @@ + * speaker_trigger : From AlienX, CC-BY-3.0 + - https://freesound.org/people/AlienXXX/sounds/249975/ diff --git a/mods/mech/sounds/speaker_trigger.1.ogg b/mods/mech/sounds/speaker_trigger.1.ogg new file mode 100644 index 0000000..57592b3 Binary files /dev/null and b/mods/mech/sounds/speaker_trigger.1.ogg differ diff --git a/mods/mech/sounds/speaker_trigger.2.ogg b/mods/mech/sounds/speaker_trigger.2.ogg new file mode 100644 index 0000000..efc3a17 Binary files /dev/null and b/mods/mech/sounds/speaker_trigger.2.ogg differ diff --git a/mods/mech/textures/speaker.png b/mods/mech/textures/speaker.png new file mode 100644 index 0000000..35e663b Binary files /dev/null and b/mods/mech/textures/speaker.png differ