Compare commits

...

5 Commits

Author SHA1 Message Date
Gaël C aa12c0d2f7 Prevent players from switching teams 2018-03-31 21:44:58 +01:00
rubenwardy e2a59cef6e Fix duplicated hud waypoints
Breaks multiple flag support
2018-01-21 22:21:33 +00:00
rubenwardy 87d0438db6 Remove nametag coloring 2018-01-21 20:39:59 +00:00
rubenwardy 8b12a8e4f1 Disable vulnerable code 2018-01-02 20:58:39 +00:00
rubenwardy 40c84728d4 Change color to right angled brackets 2018-01-02 20:56:04 +00:00
8 changed files with 31 additions and 55 deletions

View File

@ -158,6 +158,7 @@ end
function ctf.reset()
ctf.log("io", "Deleting CTF save data...")
os.remove(minetest.get_worldpath().."/ctf.txt")
ctf.player_last_team = {}
ctf.init()
end

View File

@ -142,6 +142,8 @@ function ctf.register_on_join_team(func)
table.insert(ctf.registered_on_join_team, func)
end
ctf.player_last_team = {}
-- Player joins team
-- Called by /join, /team join or auto allocate.
function ctf.join(name, team, force, by)
@ -196,6 +198,7 @@ function ctf.join(name, team, force, by)
player.team = team
team_data.players[player.name] = player
ctf.player_last_team[name] = team
ctf.needs_save = true
@ -265,6 +268,11 @@ function ctf.autoalloc(name, alloc_mode)
if alloc_mode == 0 then
return
end
local last_team = ctf.player_last_team[name]
if last_team then
return last_team
end
local max_players = ctf.setting("maximum_in_team")
local mtot = false -- more than one team

View File

@ -369,7 +369,9 @@ if minetest.global_exists("irc") then
color = ""
clear = ""
end
return ("%s%s%s <%s> %s"):format(color, tname, clear, name, message)
local abrace = color .. "<" .. clear
local bbrace = color .. ">" .. clear
return ("%s%s%s %s"):format(abrace, name, bbrace, message)
end
end

View File

@ -36,11 +36,6 @@ function ctf_colors.update(player, name, tplayer)
local tcolor_text, tcolor_hex = ctf_colors.get_color(name, tplayer)
if ctf.setting("colors.nametag") then
player:set_nametag_attributes({
color = ctf_colors.get_nametag_color(name, tplayer, tcolor_text, tcolor_hex) })
end
if ctf.setting("colors.hudtint") then
if tcolor_text == "red" or tcolor_text == "blue" then
print("tinting hud! " .. tcolor_hex)
@ -82,21 +77,4 @@ function ctf_colors.update(player, name, tplayer)
end
end
ctf.hud.register_part(ctf_colors.update)
--[[if minetest.global_exists("armor") and armor.get_player_skin then
print("3d_armor detected!")
local old = armor.get_player_skin
function armor.get_player_skin(self, name)
local player = ctf.player(name)
local team = ctf.team(player.team)
if team and team.data.color and ctf.flag_colors[team.data.color] then
print("Return ctf_colors_skin_" .. team.data.color .. ".png")
return "ctf_colors_skin_" .. team.data.color .. ".png"
end
print("ctf_colors -!- Reverting to default armor skin")
return old(self, name)
end
end]]

View File

@ -23,8 +23,6 @@ ctf.flag_colors = ctf_colors.colors
ctf.register_on_init(function()
ctf.log("colors", "Initialising...")
ctf._set("colors.skins", false)
ctf._set("colors.nametag", true)
ctf._set("colors.nametag.tcolor", false)
ctf._set("colors.hudtint", true)
ctf._set("hud.teamname", false)
end)

View File

@ -55,16 +55,16 @@ end)
minetest.register_on_player_receive_fields(function(player, formname, fields)
-- Todo: fix security issue here
local name = player:get_player_name()
if formname == "ctf:flags" then
for key, field in pairs(fields) do
local x,y,z = string.match(key, "goto_([%d-]+)_([%d-]+)_([%d-]+)")
if x and y and z then
player:setpos({ x=tonumber(x), y=tonumber(y), z=tonumber(z) })
return true
end
end
end
-- local name = player:get_player_name()
-- if formname == "ctf:flags" then
-- for key, field in pairs(fields) do
-- local x,y,z = string.match(key, "goto_([%d-]+)_([%d-]+)_([%d-]+)")
-- if x and y and z then
-- player:setpos({ x=tonumber(x), y=tonumber(y), z=tonumber(z) })
-- return true
-- end
-- end
-- end
end)
-- Flag interface

View File

@ -3,13 +3,20 @@ ctf.hud.register_part(function(player, name, tplayer)
if ctf.setting("flag.waypoints") then
for tname, team in pairs(ctf.teams) do
for _, flag in pairs(team.flags) do
local hud = "ctf:hud_" .. flag.x .. "_" .. flag.y .. "_" .. flag.z
local hud = "ctf:hud_" .. tname
local flag_name = flag.name or tname .. "'s base"
local color = ctf.flag_colors[team.data.color]
if not color then
color = "0x000000"
end
if not ctf.hud:exists(player, hud) then
if ctf.hud:exists(player, hud) then
ctf.hud:change(player, hud, "world_pos", {
x = flag.x,
y = flag.y,
z = flag.z
})
else
ctf.hud:add(player, hud, {
hud_elem_type = "waypoint",
name = flag_name,

View File

@ -114,24 +114,6 @@ ctf_flag.register_on_pick_up(function(attname, flag)
end
end)
-- Change nametag color
local oldntc = ctf_colors.get_nametag_color
function ctf_colors.get_nametag_color(name, tplayer, tcolor_text, tcolor_hex)
if ctf_flag.get_claimed_by_player(name) then
return "0xFFFF0000"
else
return oldntc(name, tplayer, tcolor_text, tcolor_hex)
end
end
ctf_flag.register_on_pick_up(function(attname, flag)
ctf_colors.update(nil, attname, ctf.player(attname))
end)
ctf_flag.register_on_drop(function(attname, flag)
ctf_colors.update(nil, attname, ctf.player(attname))
end)
-- Drop after time
local pickup_times = {}
ctf_flag.register_on_pick_up(function(attname, flag)