diff --git a/.luacheckrc b/.luacheckrc index 6fbf911..79f512c 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -5,7 +5,8 @@ max_line_length = 999 globals = { "minetest", "irc", "ctf_playertag", - "gauges", + "gauges", "ctf_hpbar", + "ctf_teams", "PlayerName", } read_globals = { diff --git a/spectator_mode/init.lua b/spectator_mode/init.lua index 3d49a8c..9165998 100644 --- a/spectator_mode/init.lua +++ b/spectator_mode/init.lua @@ -101,23 +101,6 @@ minetest.register_on_leaveplayer(function(player) end end) -local old_set = ctf_playertag.set -function ctf_playertag.set(player, type, color) - local privs = minetest.get_player_privs(player:get_player_name()) - if not privs.spectate then - return old_set(player, type, color) - end -end - -local old_add_gauge = gauges.add_HP_gauge -function gauges.add_HP_gauge(name) - local privs = minetest.get_player_privs(name) - if not privs.spectate then - return old_add_gauge(name) - end -end - - local function hide_player(player) local prop = { pointable = false, @@ -129,26 +112,46 @@ local function hide_player(player) player:set_properties(prop) player:set_armor_groups({ immortal = 1 }) - player:set_nametag_attributes({color = {a = 0, r = 255, g = 255, b = 255}}) + player:set_nametag_attributes({color = {a = 0, r = 255, g = 255, b = 255}, text = ""}) end minetest.register_on_joinplayer(function(player) - minetest.after(3, function(name) - local player = minetest.get_player_by_name(name) - if not player then - return - end + if not minetest.check_player_privs(player:get_player_name(), { spectate = true }) then + return + end - if not minetest.check_player_privs(name, { spectate = true }) then - return - end + hide_player(player) +end) - player:set_armor_groups({immortal = 1}) - old_set(player, ctf_playertag.TYPE_BUILTIN, { a=0, r=255, g=255, b=255 }) +local old_can_show = ctf_hpbar.can_show +function ctf_hpbar.can_show(player, ...) + if minetest.check_player_privs(player:get_player_name(), { spectate = true }) then + return false + end + return old_can_show(player, ...) +end - hide_player(player) - end, player:get_player_name()) -end) +local old_join_func = minetest.send_join_message +local old_leave_func = minetest.send_leave_message + +function minetest.send_join_message(player_name, ...) + if not minetest.check_player_privs(player_name, { spectate = true }) then + old_join_func(player_name, ...) + end +end + +function minetest.send_leave_message(player_name, ...) + if not minetest.check_player_privs(player_name, { spectate = true }) then + old_leave_func(player_name, ...) + end +end + +local old_allocate_player = ctf_teams.allocate_player +function ctf_teams.allocate_player(player, on_join, ...) + if not minetest.check_player_privs(player:get_player_name(), {spectate=true}) then + old_allocate_player(player, on_join, ...) + end +end -- /whereis chat-command minetest.register_chatcommand("whereis", { diff --git a/spectator_mode/mod.conf b/spectator_mode/mod.conf index 5a411b2..1dd098b 100644 --- a/spectator_mode/mod.conf +++ b/spectator_mode/mod.conf @@ -1,2 +1,2 @@ name = spectator_mode -depends = ctf_map_core, ctf_playertag, gauges +depends = ctf_playertag, ctf_hpbar, ctf_modebase, ctf_teams