From fe8794b353fb3841168eb27f8bbc6c6b13f30098 Mon Sep 17 00:00:00 2001 From: orwell96 Date: Sun, 9 Apr 2017 15:15:45 +0200 Subject: [PATCH] Add privilege for basic train operation. This privilege is granted to singleplayer by default, but is not granted on servers. This prevents unexperienced or evil players from breaking automatic train operation on servers. --- advtrains.zip | Bin 4986437 -> 4986626 bytes advtrains/advtrains/signals.lua | 18 ++++++++++++------ advtrains/advtrains/tracks.lua | 18 +++++++++++------- advtrains/advtrains/wagons.lua | 10 ++++++++-- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/advtrains.zip b/advtrains.zip index 22c0e4d7e6ecbb512f6b19b2e45b9e2e4cd67747..226e34eee1c36a32885219c51ebd58c329e0fcca 100644 GIT binary patch delta 17984 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 T$b10Y6GCK=N$bF{>(2iJOu050 delta 17742 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 diff --git a/advtrains/advtrains/signals.lua b/advtrains/advtrains/signals.lua index ceb4166..a5a9aa3 100644 --- a/advtrains/advtrains/signals.lua +++ b/advtrains/advtrains/signals.lua @@ -41,8 +41,10 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", advtrains.ndb.swap_node(pos, {name = "advtrains:retrosignal_"..f.as..rotation, param2 = node.param2}) end }}, - on_rightclick=function(pos, node, clicker) - advtrains.ndb.swap_node(pos, {name = "advtrains:retrosignal_"..f.as..rotation, param2 = node.param2}) + on_rightclick=function(pos, node, player) + if minetest.check_player_privs(player:get_player_name(), {train_operator=true}) then + advtrains.ndb.swap_node(pos, {name = "advtrains:retrosignal_"..f.as..rotation, param2 = node.param2}) + end end, }) advtrains.trackplacer.add_worked("advtrains:retrosignal", r, rotation, nil) @@ -83,8 +85,10 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", end end, }, - on_rightclick=function(pos, node, clicker) - advtrains.ndb.swap_node(pos, {name = "advtrains:signal_"..f.as..rotation, param2 = node.param2}) + on_rightclick=function(pos, node, player) + if minetest.check_player_privs(player:get_player_name(), {train_operator=true}) then + advtrains.ndb.swap_node(pos, {name = "advtrains:signal_"..f.as..rotation, param2 = node.param2}) + end end, }) advtrains.trackplacer.add_worked("advtrains:signal", r, rotation, nil) @@ -130,8 +134,10 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", end end, }, - on_rightclick=function(pos, node, clicker) - advtrains.ndb.swap_node(pos, {name = "advtrains:signal_wall_"..loc.."_"..f.as, param2 = node.param2}) + on_rightclick=function(pos, node, player) + if minetest.check_player_privs(player:get_player_name(), {train_operator=true}) then + advtrains.ndb.swap_node(pos, {name = "advtrains:signal_wall_"..loc.."_"..f.as, param2 = node.param2}) + end end, }) end diff --git a/advtrains/advtrains/tracks.lua b/advtrains/advtrains/tracks.lua index 90d2ad3..2bb61eb 100644 --- a/advtrains/advtrains/tracks.lua +++ b/advtrains/advtrains/tracks.lua @@ -260,11 +260,15 @@ advtrains.trackpresets = ap }]] function advtrains.register_tracks(tracktype, def, preset) local function make_switchfunc(suffix_target, mesecon_state, is_state) + local rcswitchfunc=function(pos, node, player) + if minetest.check_player_privs(player:get_player_name(), {train_operator=true}) then + advtrains.ndb.swap_node(pos, {name=def.nodename_prefix.."_"..suffix_target, param2=node.param2}) + end + end local switchfunc=function(pos, node, newstate) if newstate~=is_state then advtrains.ndb.swap_node(pos, {name=def.nodename_prefix.."_"..suffix_target, param2=node.param2}) end - advtrains.invalidate_all_paths() end local mesec if mesecon_state then -- if mesecons is not wanted, do not. @@ -273,13 +277,13 @@ function advtrains.register_tracks(tracktype, def, preset) rules=advtrains.meseconrules }} end - return switchfunc, mesec, + return rcswitchfunc, mesec, { getstate = is_state, setstate = switchfunc, } end - local function make_overdef(suffix, rotation, conns, switchfunc, mesecontbl, luaautomation, in_creative_inv, drop_slope) + local function make_overdef(suffix, rotation, conns, rcswitchfunc, mesecontbl, luaautomation, in_creative_inv, drop_slope) local img_suffix=suffix..rotation return { mesh = def.shared_model or (def.models_prefix.."_"..img_suffix..def.models_suffix), @@ -293,7 +297,7 @@ function advtrains.register_tracks(tracktype, def, preset) rely2=conns.rely2 or 0, railheight=conns.railheight or 0, - on_rightclick=switchfunc, + on_rightclick=rcswitchfunc, groups = { attached_node=1, ["advtrains_track_"..tracktype]=1, @@ -352,9 +356,9 @@ function advtrains.register_tracks(tracktype, def, preset) for suffix, conns in pairs(preset.variant) do for rotid, rotation in ipairs(preset.rotation) do if not def.formats[suffix] or def.formats[suffix][rotid] then - local switchfunc, mesecontbl, luaautomation + local rcswitchfunc, mesecontbl, luaautomation if preset.switch[suffix] then - switchfunc, mesecontbl, luaautomation=make_switchfunc(preset.switch[suffix]..rotation, preset.switchmc[suffix], preset.switchst[suffix]) + rcswitchfunc, mesecontbl, luaautomation=make_switchfunc(preset.switch[suffix]..rotation, preset.switchmc[suffix], preset.switchst[suffix]) end local adef={} if def.get_additional_definiton then @@ -366,7 +370,7 @@ function advtrains.register_tracks(tracktype, def, preset) make_overdef( suffix, rotation, cycle_conns(conns, rotid), - switchfunc, mesecontbl, luaautomation, preset.increativeinv[suffix], preset.slopenodes[suffix] + rcswitchfunc, mesecontbl, luaautomation, preset.increativeinv[suffix], preset.slopenodes[suffix] ), adef ) diff --git a/advtrains/advtrains/wagons.lua b/advtrains/advtrains/wagons.lua index 28de3fa..15a0ec7 100644 --- a/advtrains/advtrains/wagons.lua +++ b/advtrains/advtrains/wagons.lua @@ -8,6 +8,11 @@ minetest.register_privilege("train_remove", { description = "Player can remove trains not owned by player", give_to_singleplayer= false, }); +minetest.register_privilege("train_operator", { + description = "Player may operate trains and switch signals. Given by default. Revoke to prevent players from griefing automated subway systems.", + give_to_singleplayer= true, + default= true, +}); local wagon={ collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, @@ -242,7 +247,8 @@ function wagon:on_step(dtime) --driver control for seatno, seat in ipairs(self.seats) do local driver=self.seatp[seatno] and minetest.get_player_by_name(self.seatp[seatno]) - if seat.driving_ctrl_access and driver then + local has_driverstand=seat.driving_ctrl_access and self.seatp[seatno] and minetest.check_player_privs(self.seatp[seatno], {train_operator=true}) + if has_driverstand and driver then advtrains.update_driver_hud(driver:get_player_name(), self:train(), self.wagon_flipped) elseif driver then --only show the inside text @@ -253,7 +259,7 @@ function wagon:on_step(dtime) local pc=driver:get_player_control() self.seatpc[seatno]=driver:get_player_control_bits() - if seat.driving_ctrl_access then + if has_driverstand then --regular driver stand controls advtrains.on_control_change(pc, self:train(), self.wagon_flipped) else