7382db367b
* Limit placement to 5 nodes per second * Add Readme, check pointed thing, inform player * Include team door fix * Add license
53 lines
1.8 KiB
Lua
53 lines
1.8 KiB
Lua
-- Licensed under the MIT license, written by appgurueu.
|
|
local players = {}
|
|
local blocks_per_second = 5
|
|
local resend_chat_message_seconds = 10
|
|
|
|
minetest.register_on_joinplayer(function(player)
|
|
-- player has to wait after join before they can place a node
|
|
players[player:get_player_name()] = {
|
|
last_placement = minetest.get_us_time(),
|
|
last_chat_message_sent = -math.huge
|
|
}
|
|
end)
|
|
|
|
local chat_send_player = minetest.chat_send_player
|
|
function minetest.chat_send_player(name, message)
|
|
if players[name] then
|
|
players[name].last_chat_message_sent = -math.huge
|
|
end
|
|
return chat_send_player(name, message)
|
|
end
|
|
|
|
local chat_send_all = minetest.chat_send_all
|
|
function minetest.chat_send_all(message)
|
|
for _, playerdata in pairs(players) do
|
|
playerdata.last_chat_message_sent = -math.huge
|
|
end
|
|
return chat_send_all(message)
|
|
end
|
|
|
|
minetest.register_on_leaveplayer(function(player)
|
|
players[player:get_player_name()] = nil
|
|
end)
|
|
|
|
minetest.register_on_placenode(function(pos, _newnode, placer, oldnode, _itemstack, pointed_thing)
|
|
if not ItemStack(minetest.get_node(pointed_thing.under).name):get_definition().pointable then
|
|
-- this should happen rarely
|
|
minetest.chat_send_player(placer:get_player_name(), "The block you have been building to has been dug/replaced!")
|
|
minetest.set_node(pos, oldnode)
|
|
return true
|
|
end
|
|
local name = placer:get_player_name()
|
|
local playerdata = players[name]
|
|
local time = minetest.get_us_time()
|
|
if (time - playerdata.last_placement) / 1e6 < 1 / blocks_per_second then
|
|
if (time - playerdata.last_chat_message_sent) / 1e6 >= resend_chat_message_seconds then
|
|
chat_send_player(placer:get_player_name(), "You are placing blocks too fast (more than " .. blocks_per_second .. " blocks per second) !")
|
|
playerdata.last_chat_message_sent = time
|
|
end
|
|
minetest.set_node(pos, oldnode)
|
|
return true
|
|
end
|
|
playerdata.last_placement = time
|
|
end)
|