mirror of
https://github.com/minetest/minetest_game.git
synced 2025-06-28 04:40:22 +02:00
Deduplicate player action logging, silence fake player actions (#2941)
This commit is contained in:
@ -222,21 +222,7 @@ function default.chest.register_chest(prefixed_name, d)
|
||||
end
|
||||
end
|
||||
|
||||
def.on_metadata_inventory_move = function(pos, from_list, from_index,
|
||||
to_list, to_index, count, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" moves stuff in chest at " .. minetest.pos_to_string(pos))
|
||||
end
|
||||
def.on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" moves " .. stack:get_name() ..
|
||||
" to chest at " .. minetest.pos_to_string(pos))
|
||||
end
|
||||
def.on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" takes " .. stack:get_name() ..
|
||||
" from chest at " .. minetest.pos_to_string(pos))
|
||||
end
|
||||
default.set_inventory_action_loggers(def, "chest")
|
||||
|
||||
local def_opened = table.copy(def)
|
||||
local def_closed = table.copy(def)
|
||||
|
@ -715,6 +715,47 @@ function default.register_craft_metadata_copy(ingredient, result)
|
||||
end)
|
||||
end
|
||||
|
||||
--
|
||||
-- Log API / helpers
|
||||
--
|
||||
|
||||
local log_non_player_actions = minetest.settings:get_bool("log_non_player_actions", false)
|
||||
|
||||
local is_pos = function(v)
|
||||
return type(v) == "table" and
|
||||
type(v.x) == "number" and type(v.y) == "number" and type(v.z) == "number"
|
||||
end
|
||||
|
||||
function default.log_player_action(player, ...)
|
||||
local msg = player:get_player_name()
|
||||
if player.is_fake_player or not player:is_player() then
|
||||
if not log_non_player_actions then
|
||||
return
|
||||
end
|
||||
msg = msg .. "(" .. (type(player.is_fake_player) == "string"
|
||||
and player.is_fake_player or "*") .. ")"
|
||||
end
|
||||
for _, v in ipairs({...}) do
|
||||
-- translate pos
|
||||
local part = is_pos(v) and minetest.pos_to_string(v) or v
|
||||
-- no leading spaces before punctuation marks
|
||||
msg = msg .. (string.match(part, "^[;,.]") and "" or " ") .. part
|
||||
end
|
||||
minetest.log("action", msg)
|
||||
end
|
||||
|
||||
function default.set_inventory_action_loggers(def, name)
|
||||
def.on_metadata_inventory_move = function(pos, from_list, from_index,
|
||||
to_list, to_index, count, player)
|
||||
default.log_player_action(player, "moves stuff in", name, "at", pos)
|
||||
end
|
||||
def.on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
default.log_player_action(player, "moves", stack:get_name(), "to", name, "at", pos)
|
||||
end
|
||||
def.on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
default.log_player_action(player, "takes", stack:get_name(), "from", name, "at", pos)
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- NOTICE: This method is not an official part of the API yet.
|
||||
|
@ -2057,10 +2057,9 @@ local function coral_on_place(itemstack, placer, pointed_thing)
|
||||
|
||||
if minetest.is_protected(pos_under, player_name) or
|
||||
minetest.is_protected(pos_above, player_name) then
|
||||
minetest.log("action", player_name
|
||||
.. " tried to place " .. itemstack:get_name()
|
||||
.. " at protected position "
|
||||
.. minetest.pos_to_string(pos_under))
|
||||
default.log_player_action(placer,
|
||||
"tried to place", itemstack:get_name(),
|
||||
"at protected position", pos_under)
|
||||
minetest.record_protection_violation(pos_under, player_name)
|
||||
return itemstack
|
||||
end
|
||||
@ -2525,7 +2524,7 @@ local function update_bookshelf(pos)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("default:bookshelf", {
|
||||
local default_bookshelf_def = {
|
||||
description = S("Bookshelf"),
|
||||
tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
|
||||
"default_wood.png", "default_bookshelf.png", "default_bookshelf.png"},
|
||||
@ -2550,21 +2549,6 @@ minetest.register_node("default:bookshelf", {
|
||||
end
|
||||
return 0
|
||||
end,
|
||||
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" moves stuff in bookshelf at " .. minetest.pos_to_string(pos))
|
||||
update_bookshelf(pos)
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" puts stuff to bookshelf at " .. minetest.pos_to_string(pos))
|
||||
update_bookshelf(pos)
|
||||
end,
|
||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name() ..
|
||||
" takes stuff from bookshelf at " .. minetest.pos_to_string(pos))
|
||||
update_bookshelf(pos)
|
||||
end,
|
||||
on_blast = function(pos)
|
||||
local drops = {}
|
||||
default.get_inventory_drops(pos, "books", drops)
|
||||
@ -2572,7 +2556,9 @@ minetest.register_node("default:bookshelf", {
|
||||
minetest.remove_node(pos)
|
||||
return drops
|
||||
end,
|
||||
})
|
||||
}
|
||||
default.set_inventory_action_loggers(default_bookshelf_def, "bookshelf")
|
||||
minetest.register_node("default:bookshelf", default_bookshelf_def)
|
||||
|
||||
local function register_sign(material, desc, def)
|
||||
minetest.register_node("default:sign_wall_" .. material, {
|
||||
@ -2615,8 +2601,8 @@ local function register_sign(material, desc, def)
|
||||
minetest.chat_send_player(player_name, S("Text too long"))
|
||||
return
|
||||
end
|
||||
minetest.log("action", player_name .. " wrote \"" .. text ..
|
||||
"\" to the sign at " .. minetest.pos_to_string(pos))
|
||||
default.log_player_action(sender, "wrote \"" .. text ..
|
||||
"\" to the sign at", pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("text", text)
|
||||
|
||||
|
@ -572,8 +572,7 @@ function default.sapling_on_place(itemstack, placer, pointed_thing,
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.log("action", player_name .. " places node "
|
||||
.. sapling_name .. " at " .. minetest.pos_to_string(pos))
|
||||
default.log_player_action(placer, "places node", sapling_name, "at", pos)
|
||||
|
||||
local take_item = not minetest.is_creative_enabled(player_name)
|
||||
local newnode = {name = sapling_name}
|
||||
|
Reference in New Issue
Block a user