Skip to content
This repository has been archived by the owner on Aug 20, 2020. It is now read-only.

Commit

Permalink
[action_timers & pclasses] Limit class switch to one per houre
Browse files Browse the repository at this point in the history
- Create a wrapper for the action_timers
- Limit the use of class switch orbs to one use per hour
- Related to #183
  • Loading branch information
Lymkwi committed Oct 16, 2015
1 parent ea16f89 commit 0091be6
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
20 changes: 18 additions & 2 deletions mods/action_timers/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
9 changes: 8 additions & 1 deletion mods/pclasses/nodes.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 0091be6

Please sign in to comment.