Drop the flag after a period of time
parent
d9c1f7dcd1
commit
370c6edd65
|
@ -14,6 +14,14 @@ function ctf_flag.register_on_pick_up(func)
|
|||
table.insert(ctf_flag.registered_on_pick_up, func)
|
||||
end
|
||||
|
||||
ctf_flag.registered_on_drop = {}
|
||||
function ctf_flag.register_on_drop(func)
|
||||
if ctf._mt_loaded then
|
||||
error("You can't register callbacks at game time!")
|
||||
end
|
||||
table.insert(ctf_flag.registered_on_drop, func)
|
||||
end
|
||||
|
||||
ctf_flag.registered_on_precapture = {}
|
||||
function ctf_flag.register_on_precapture(func)
|
||||
if ctf._mt_loaded then
|
||||
|
@ -63,6 +71,10 @@ function ctf_flag.player_drop_flag(name)
|
|||
|
||||
ctf.action("flag", name .. " dropped " .. flag_name)
|
||||
minetest.chat_send_all(flag_name.." has returned.")
|
||||
|
||||
for i = 1, #ctf_flag.registered_on_drop do
|
||||
ctf_flag.registered_on_drop[i](name, flag)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -8,8 +8,11 @@ ctf.register_on_init(function()
|
|||
ctf._set("flag.protect_distance", 25)
|
||||
ctf._set("flag.nobuild_radius", 3)
|
||||
ctf._set("flag.capture_mode", "take")
|
||||
ctf._set("flag.drop_time", 7*60)
|
||||
ctf._set("flag.drop_warn_time", 60)
|
||||
ctf._set("gui.team.teleport_to_flag", true)
|
||||
ctf._set("gui.team.teleport_to_spawn", false)
|
||||
|
||||
end)
|
||||
|
||||
dofile(minetest.get_modpath("ctf_flag") .. "/hud.lua")
|
||||
|
@ -103,3 +106,34 @@ ctf_flag.register_on_pick_up(function(attname, flag)
|
|||
})
|
||||
end
|
||||
end)
|
||||
|
||||
-- Drop after time
|
||||
local pickup_times = {}
|
||||
ctf_flag.register_on_pick_up(function(attname, flag)
|
||||
pickup_times[attname] = minetest.get_gametime()
|
||||
end)
|
||||
ctf_flag.register_on_drop(function(attname, flag)
|
||||
pickup_times[attname] = nil
|
||||
end)
|
||||
ctf_flag.register_on_capture(function(attname, flag)
|
||||
pickup_times[attname] = nil
|
||||
end)
|
||||
ctf.register_on_new_game(function()
|
||||
pickup_times = {}
|
||||
end)
|
||||
local function update_flag_drops()
|
||||
local time = minetest.get_gametime()
|
||||
local drop_time = ctf.setting("flag.drop_time")
|
||||
for name, start in pairs(pickup_times) do
|
||||
local remaining = drop_time - time + start
|
||||
if remaining < 0 then
|
||||
ctf_flag.player_drop_flag(name)
|
||||
minetest.chat_send_player(name, "You took too long to capture the flag, so it returned!")
|
||||
elseif remaining < ctf.setting("flag.drop_warn_time") then
|
||||
minetest.chat_send_player(name, "You have " .. remaining ..
|
||||
" seconds to capture the flag before it returns.")
|
||||
end
|
||||
end
|
||||
minetest.after(5, update_flag_drops)
|
||||
end
|
||||
minetest.after(5, update_flag_drops)
|
||||
|
|
Loading…
Reference in New Issue