From 68456374ed372a2691100fcd7575e6c139151bca Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Fri, 5 Feb 2016 21:55:45 +0000 Subject: [PATCH] Add random_messages --- minetest.conf | 1 + mods/random_messages/README.txt | 17 ++++ mods/random_messages/depends.txt | 1 + mods/random_messages/init.lua | 148 +++++++++++++++++++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 mods/random_messages/README.txt create mode 100644 mods/random_messages/depends.txt create mode 100644 mods/random_messages/init.lua diff --git a/minetest.conf b/minetest.conf index e2ab4d8..8a24057 100644 --- a/minetest.conf +++ b/minetest.conf @@ -8,6 +8,7 @@ vote.kick_vote = false barrier = 102 regen_interval = 10 regen_amount = 1 +random_messages_interval = 60 # # CTF_PVP_ENGINE diff --git a/mods/random_messages/README.txt b/mods/random_messages/README.txt new file mode 100644 index 0000000..5c08357 --- /dev/null +++ b/mods/random_messages/README.txt @@ -0,0 +1,17 @@ +RandomMessages mod by arsdragonfly. +Put your messages in (world directory)/random_messages,1 message per line. +Messages can be all kinds of hints, mod usage, etc. +Add/Remove messages on the fly: +/rmessages viewmessages +to see all the messages. +/rmessages addmessage blah blah blah +to add the random message blah blah blah. +/rmessages removemessage 2 +to remove the 2nd random message in /rmessages viewmessages . +In minetest.conf, random_messages_interval decides how often a message is sent. +Released under CC0. +Special thanks to: +Michael Rasmussen (michael@jamhome.us) +Enjoy it! ^_^ +arsdragonfly@gmail.com +6/19/2013 diff --git a/mods/random_messages/depends.txt b/mods/random_messages/depends.txt new file mode 100644 index 0000000..331d858 --- /dev/null +++ b/mods/random_messages/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/mods/random_messages/init.lua b/mods/random_messages/init.lua new file mode 100644 index 0000000..317e867 --- /dev/null +++ b/mods/random_messages/init.lua @@ -0,0 +1,148 @@ +--[[ +RandomMessages mod by arsdragonfly. +arsdragonfly@gmail.com +6/19/2013 +--]] +--Time between two subsequent messages. +local MESSAGE_INTERVAL = 0 + +math.randomseed(os.time()) + +random_messages = {} +random_messages.messages = {} --This table contains all messages. + +function table.count( t ) + local i = 0 + for k in pairs( t ) do i = i + 1 end + return i +end + +function table.random( t ) + local rk = math.random( 1, table.count( t ) ) + local i = 1 + for k, v in pairs( t ) do + if ( i == rk ) then return v, k end + i = i + 1 + end +end + +function random_messages.initialize() --Set the interval in minetest.conf. + minetest.setting_set("random_messages_interval",120) + minetest.setting_save(); + return 120 +end + +function random_messages.set_interval() --Read the interval from minetest.conf(set it if it doesn'st exist) + MESSAGE_INTERVAL = tonumber(minetest.setting_get("random_messages_interval")) or random_messages.initialize() +end + +function random_messages.check_params(name,func,params) + local stat,msg = func(params) + if not stat then + minetest.chat_send_player(name,msg) + return false + end + return true +end + +function random_messages.read_messages() + local line_number = 1 + local input = io.open(minetest.get_worldpath().."/random_messages","r") + if not input then + local output = io.open(minetest.get_worldpath().."/random_messages","w") + output:write("To talk to only your team, start your messages with /t. For example, /t Hello team!\n") + output:write("If the map is ruined, use /vote to start a new vote to skip the current match.\n") + output:write("Eat apples to restore health quickly.\n") + io.close(output) + input = io.open(minetest.get_worldpath().."/random_messages","r") + end + for line in input:lines() do + random_messages.messages[line_number] = line + line_number = line_number + 1 + end + io.close(input) +end + +function random_messages.display_message(message_number) + if random_messages.messages[message_number] then + minetest.chat_send_all(random_messages.messages[message_number]) + end +end + +function random_messages.show_message() + random_messages.display_message(table.random(random_messages.messages)) +end + +function random_messages.list_messages() + local str = "" + for k,v in pairs(random_messages.messages) do + str = str .. k .. " | " .. v .. "\n" + end + return str +end + +function random_messages.remove_message(k) + table.remove(random_messages.messages,k) + random_messages.save_messages() +end + +function random_messages.add_message(t) + table.insert(random_messages.messages,table.concat(t," ",2)) + random_messages.save_messages() +end + +function random_messages.save_messages() + local output = io.open(minetest.get_worldpath().."/random_messages","w") + for k,v in pairs(random_messages.messages) do + output:write(v .. "\n") + end + io.close(output) +end + +--When server starts: +random_messages.set_interval() +random_messages.read_messages() + +local TIMER = 0 +minetest.register_globalstep(function(dtime) + TIMER = TIMER + dtime; + if TIMER > MESSAGE_INTERVAL then + random_messages.show_message() + TIMER = 0 + end +end) + +local register_chatcommand_table = { + params = "viewmessages | removemessage | addmessage ", + privs = {server = true}, + description = "View and/or alter the server's random messages", + func = function(name,param) + local t = string.split(param, " ") + if t[1] == "viewmessages" then + minetest.chat_send_player(name,random_messages.list_messages()) + elseif t[1] == "removemessage" then + if not random_messages.check_params( + name, + function (params) + if not tonumber(params[2]) or + random_messages.messages[tonumber(params[2])] == nil then + return false,"ERROR: No such message." + end + return true + end, + t) then return end + random_messages.remove_message(t[2]) + elseif t[1] == "addmessage" then + if not t[2] then + minetest.chat_send_player(name,"ERROR: No message.") + else + random_messages.add_message(t) + end + else + minetest.chat_send_player(name,"ERROR: Invalid command.") + end + end +} + +minetest.register_chatcommand("random_messages", register_chatcommand_table) +minetest.register_chatcommand("rmessages", register_chatcommand_table)