From 0091be67acc2b0c86de151b25f7addcb9fb7257b Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Fri, 16 Oct 2015 21:07:58 +0200 Subject: [PATCH] [action_timers & pclasses] Limit class switch to one per houre - Create a wrapper for the action_timers - Limit the use of class switch orbs to one use per hour - Related to #183 --- mods/action_timers/init.lua | 20 ++++++++++++++++++-- mods/pclasses/nodes.lua | 9 ++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/mods/action_timers/init.lua b/mods/action_timers/init.lua index b7dd0f2a..276fd56f 100755 --- a/mods/action_timers/init.lua +++ b/mods/action_timers/init.lua @@ -38,10 +38,8 @@ function action_timers.api.do_action(name, func, params) action_timers.timers[name] = action_timers.limits[name] if not params then - print("func()") return func() else - print("func(unpack(params))") return func(unpack(params)) end end @@ -60,3 +58,21 @@ minetest.register_globalstep(function(dtime) end) minetest.log("action", "[ACTimers] Loaded") + + +function action_timers.wrapper(pname, name, timername, value, func, params) + if not action_timers.api.get_timer(timername) then + action_timers.api.register_timer(timername, value) + return func(unpack(params)) + else + local res = action_timers.api.do_action(timername, func, params) + if tonumber(res) then + minetest.chat_send_player(pname, "Please retry later, you used " .. name .. " last time less than " .. value .. " seconds ago.") + minetest.chat_send_player(pname, "Retry in: " .. math.floor(res) .. " seconds.") + minetest.log("action", "[action_timers] Player " .. pname .. " tried to use'" .. name .. "' within forbidden interval.") + return false + elseif res == true then + return res + end + end +end diff --git a/mods/pclasses/nodes.lua b/mods/pclasses/nodes.lua index 5b39e55e..2733dbad 100755 --- a/mods/pclasses/nodes.lua +++ b/mods/pclasses/nodes.lua @@ -42,7 +42,14 @@ minetest.register_entity("pclasses:item", { self.object:set_properties(prop) end, on_rightclick = function(self, clicker) - pclasses.api.set_player_class(clicker:get_player_name(), self.class) + action_timers.wrapper( + clicker:get_player_name(), + "class switch", + "class_switch_" .. clicker:get_player_name(), + 3600, + pclasses.api.set_player_class, + {clicker:get_player_name(), self.class} + ) end, on_activate = function(self, staticdata) local tab = minetest.deserialize(staticdata)