aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authororwell96 <mono96.mml@gmail.com>2017-03-30 21:21:03 +0200
committerorwell96 <mono96.mml@gmail.com>2017-03-30 21:21:03 +0200
commitb5a5d9035f83c47e64b3b0e3343c9de519391907 (patch)
tree6b0ef5c26eada3a04f811b798fbbcf0485762f35
parenta091ac2e1da07b442c8f58237667287714adc838 (diff)
downloadadvtrains-b5a5d9035f83c47e64b3b0e3343c9de519391907.tar.gz
advtrains-b5a5d9035f83c47e64b3b0e3343c9de519391907.tar.bz2
advtrains-b5a5d9035f83c47e64b3b0e3343c9de519391907.zip
Respect protection_bypass privilege, fix crash with areas and properly record protection violations
-rw-r--r--advtrains/advtrains/atc.lua4
-rw-r--r--advtrains/advtrains/helpers.lua11
-rw-r--r--advtrains/advtrains/trackplacer.lua13
-rw-r--r--advtrains/advtrains/tracks.lua6
-rw-r--r--advtrains/advtrains_luaautomation/pcnaming.lua3
5 files changed, 26 insertions, 11 deletions
diff --git a/advtrains/advtrains/atc.lua b/advtrains/advtrains/atc.lua
index a15baa8..192ef0f 100644
--- a/advtrains/advtrains/atc.lua
+++ b/advtrains/advtrains/atc.lua
@@ -98,8 +98,8 @@ advtrains.register_tracks("default", {
atc.controllers[pts]=nil
end,
on_receive_fields = function(pos, formname, fields, player)
- if minetest.is_protected(pos, player:get_player_name()) then
- minetest.chat_send_player(player:get_player_name(), attrans("This position is protected!"))
+ if advtrains.is_protected(pos, player:get_player_name()) then
+ minetest.record_protection_violation(pos, name)
return
end
local meta=minetest.get_meta(pos)
diff --git a/advtrains/advtrains/helpers.lua b/advtrains/advtrains/helpers.lua
index 5761d18..a2b9b16 100644
--- a/advtrains/advtrains/helpers.lua
+++ b/advtrains/advtrains/helpers.lua
@@ -242,3 +242,14 @@ function advtrains.deserialize_inventory(sers, inv)
return false
end
+--is_protected wrapper that checks for protection_bypass privilege
+function advtrains.is_protected(pos, name)
+ if not name then
+ error("advtrains.is_protected() called without name parameter!")
+ end
+ if minetest.check_player_privs(name, {protection_bypass=true}) then
+ --player can bypass protection
+ return false
+ end
+ return minetest.is_protected(pos, name)
+end
diff --git a/advtrains/advtrains/trackplacer.lua b/advtrains/advtrains/trackplacer.lua
index df21608..e039800 100644
--- a/advtrains/advtrains/trackplacer.lua
+++ b/advtrains/advtrains/trackplacer.lua
@@ -194,8 +194,9 @@ function tp.register_track_placer(nnprefix, imgprefix, dispname)
if pointed_thing.type=="node" then
local pos=pointed_thing.above
local upos=vector.subtract(pointed_thing.above, {x=0, y=1, z=0})
- if minetest.is_protected(pos,name) and minetest.is_protected(upos,name) then
- return itemstack
+ if advtrains.is_protected(pos,name) then
+ minetest.record_protection_violation(pos, name)
+ return itemstack
end
if minetest.registered_nodes[minetest.get_node(pos).name] and minetest.registered_nodes[minetest.get_node(pos).name].buildable_to
and minetest.registered_nodes[minetest.get_node(upos).name] and minetest.registered_nodes[minetest.get_node(upos).name].walkable then
@@ -225,7 +226,8 @@ minetest.register_craftitem("advtrains:trackworker",{
end
if pointed_thing.type=="node" then
local pos=pointed_thing.under
- if minetest.is_protected(pos, name) then
+ if advtrains.is_protected(pos, name) then
+ minetest.record_protection_violation(pos, name)
return
end
local node=minetest.get_node(pos)
@@ -267,8 +269,9 @@ minetest.register_craftitem("advtrains:trackworker",{
if pointed_thing.type=="node" then
local pos=pointed_thing.under
local node=minetest.get_node(pos)
- if minetest.is_protected(pos, name) then
- return
+ if advtrains.is_protected(pos, name) then
+ minetest.record_protection_violation(pos, name)
+ return
end
--if not advtrains.is_track_and_drives_on(minetest.get_node(pos).name, advtrains.all_tracktypes) then return end
diff --git a/advtrains/advtrains/tracks.lua b/advtrains/advtrains/tracks.lua
index d4d52c9..90d2ad3 100644
--- a/advtrains/advtrains/tracks.lua
+++ b/advtrains/advtrains/tracks.lua
@@ -490,8 +490,8 @@ function sl.create_slopeplacer_on_place(def, preset)
minetest.chat_send_player(player:get_player_name(), attrans("Can't place: space occupied!"))
return istack
end
- if minetest.is_protected(pos, player:get_player_name()) then
- minetest.chat_send_player(player:get_player_name(), attrans("Can't place: protected position!"))
+ if advtrains.is_protected(pos, player:get_player_name()) then
+ minetest.record_protection_violation(pos, player:get_player_name())
return istack
end
--determine player orientation (only horizontal component)
@@ -525,7 +525,7 @@ function sl.create_slopeplacer_on_place(def, preset)
while step<=lookup.max do
local node=minetest.get_node(vector.add(pos, dirvec))
--next node solid?
- if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].buildable_to or minetest.is_protected(pos, player:get_player_name()) then
+ if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].buildable_to or advtrains.is_protected(pos, player:get_player_name()) then
--do slopes of this distance exist?
if lookup[step] then
if minetest.setting_getbool("creative_mode") or istack:get_count()>=step then
diff --git a/advtrains/advtrains_luaautomation/pcnaming.lua b/advtrains/advtrains_luaautomation/pcnaming.lua
index 5604749..18f1017 100644
--- a/advtrains/advtrains_luaautomation/pcnaming.lua
+++ b/advtrains/advtrains_luaautomation/pcnaming.lua
@@ -34,7 +34,8 @@ minetest.register_craftitem("advtrains_luaautomation:pcnaming",{
end
if pointed_thing.type=="node" then
local pos=pointed_thing.under
- if minetest.is_protected(pos, name) then
+ if advtrains.is_protected(pos, pname) then
+ minetest.record_protection_violation(pos, name)
return
end
local node=minetest.get_node(pos)