From 243061957abc5364dff87a24d7312b25d2018165 Mon Sep 17 00:00:00 2001 From: savilli <78875209+savilli@users.noreply.github.com> Date: Wed, 24 Mar 2021 17:34:02 +0300 Subject: [PATCH] Postpone map skipping until flag holder captures or loses the flag (#835) * Postpone map skipping until flag holder captures or loses the flag * Wait 5s after flag drop --- mods/ctf/ctf_match/vote.lua | 44 ++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/mods/ctf/ctf_match/vote.lua b/mods/ctf/ctf_match/vote.lua index c2738f4..eef2c6e 100644 --- a/mods/ctf/ctf_match/vote.lua +++ b/mods/ctf/ctf_match/vote.lua @@ -6,6 +6,16 @@ function ctf_match.register_on_skip_map(func) table.insert(ctf_match.registered_on_skip_map, func) end +function skip() + for i = 1, #ctf_match.registered_on_skip_map do + ctf_match.registered_on_skip_map[i]() + end + ctf_match.next() +end + +local can_vote_skip = false +local voted_skip = false +local flags_hold = 0 function ctf_match.vote_next(name) local tcolor = ctf_colors.get_color(ctf.player(name)).css or "#FFFFFFFF" minetest.chat_send_all(minetest.colorize("#FFAA11", "Vote started by ") .. @@ -22,10 +32,12 @@ function ctf_match.vote_next(name) if result == "yes" then minetest.chat_send_all("Vote to skip match passed, " .. #results.yes .. " to " .. #results.no) - for i = 1, #ctf_match.registered_on_skip_map do - ctf_match.registered_on_skip_map[i]() + + can_vote_skip = false + voted_skip = true + if flags_hold <= 0 then + skip() end - ctf_match.next() else minetest.chat_send_all("Vote to skip match failed, " .. #results.no .. " to " .. #results.yes) @@ -53,9 +65,8 @@ minetest.register_chatcommand("vote", { local matchskip_time local matchskip_timer = 0 -local can_skip = false minetest.register_globalstep(function(dtime) - if not can_skip then return end + if not can_vote_skip then return end matchskip_timer = matchskip_timer + dtime @@ -68,18 +79,25 @@ minetest.register_globalstep(function(dtime) end end) -local function prevent_autoskip() - can_skip = false -end - -ctf.register_on_new_game(prevent_autoskip) -ctf_flag.register_on_pick_up(prevent_autoskip) +ctf.register_on_new_game(function() + can_vote_skip = false + voted_skip = false + flags_hold = 0 +end) +ctf_flag.register_on_pick_up(function() + flags_hold = flags_hold + 1 +end) ctf_flag.register_on_drop(function() - can_skip = true + flags_hold = flags_hold - 1 + if voted_skip and flags_hold <= 0 then + minetest.after(5, function() + skip() + end) + end end) ctf_match.register_on_build_time_end(function() - can_skip = true + can_vote_skip = true matchskip_timer = 0 -- Set to initial vote time matchskip_time = tonumber(minetest.settings:get("ctf_match.auto_skip_delay")) or 50 * 60