From 2dda8597b7f56473b8e0b9fef1a15ae814aac208 Mon Sep 17 00:00:00 2001 From: tchncs Date: Wed, 14 Sep 2016 19:22:09 +0200 Subject: [PATCH] add mod random_messages --- mods/random_messages/depends.txt | 1 + mods/random_messages/init.lua | 141 +++++++++++++++++++++++++++++++ mods/random_messages/readme.md | 17 ++++ 3 files changed, 159 insertions(+) create mode 100644 mods/random_messages/depends.txt create mode 100644 mods/random_messages/init.lua create mode 100644 mods/random_messages/readme.md diff --git a/mods/random_messages/depends.txt b/mods/random_messages/depends.txt new file mode 100644 index 00000000..4ad96d51 --- /dev/null +++ b/mods/random_messages/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/random_messages/init.lua b/mods/random_messages/init.lua new file mode 100644 index 00000000..64d75065 --- /dev/null +++ b/mods/random_messages/init.lua @@ -0,0 +1,141 @@ +--[[ +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",300) + minetest.setting_save(); + return 300 +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() + random_messages.messages = { + "# Illuna-Notes: Soup is very useful to fight hunger, everyone should have some.", + "# Illuna-Notes: Meet your fellows on our Mumbleserver at tchncs.de", + "# Illuna-Notes: Enjoy Illuna? Invite your friends today!", + "# Illuna-Notes: Have something to share? Create and join discussion at the Illuna forum: https://forum.illuna-minetest.tk!", + "# Illuna-Notes: Sell and buy stuff on the Illuna marketplace. It is below the spawnhouse." + } +end + +function random_messages.display_message(message_number) + local msg = random_messages.messages[message_number] or message_number + if msg then + minetest.chat_send_all(msg) + 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) diff --git a/mods/random_messages/readme.md b/mods/random_messages/readme.md new file mode 100644 index 00000000..ead798a7 --- /dev/null +++ b/mods/random_messages/readme.md @@ -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 \ No newline at end of file