Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds a very basic round timer system to base_id.lua #18

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion maps/ff_ksour.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,10 @@ function startup()
-- start the timer for the points
AddScheduleRepeating("addpoints", PERIOD_TIME, addpoints)

setup_door_timer("start_gate", INITIAL_ROUND_DELAY)
-- start the timer for the round timer
setup_round_timer( INITIAL_ROUND_DELAY )

setup_door_timer("start_gate", INITIAL_ROUND_DELAY)
if INITIAL_ROUND_DELAY > 30 then AddSchedule( "dooropen30sec" , INITIAL_ROUND_DELAY - 30 , schedulemessagetoall, "Gates open in 30 seconds!" ) end
if INITIAL_ROUND_DELAY > 10 then AddSchedule( "dooropen10sec" , INITIAL_ROUND_DELAY - 10 , schedulemessagetoall, "Gates open in 10 seconds!" ) end
if INITIAL_ROUND_DELAY > 5 then AddSchedule( "dooropen5sec" , INITIAL_ROUND_DELAY - 5 , schedulemessagetoall, "5" ) end
Expand Down Expand Up @@ -130,6 +133,10 @@ function base_id_cap:oncapture(player, item)

AddSchedule("switch_teams", TEAM_SWITCH_DELAY, switch_teams)
else
-- out with the old timer, in with the new
destroy_round_timer()
setup_round_timer( ROUND_DELAY )

phase = phase + 1

-- enable the next flag after a time
Expand Down Expand Up @@ -199,6 +206,10 @@ function switch_teams()
RespawnAllPlayers()
setup_door_timer("start_gate", INITIAL_ROUND_DELAY)

-- out with the old timer, in with the new
destroy_round_timer()
setup_round_timer( INITIAL_ROUND_DELAY )

-- run custom round reset stuff
onroundreset()
update_hud()
Expand Down Expand Up @@ -354,6 +365,25 @@ end
---------------------------------------
--Resetting round
------------------------------------

function forceRoundEnd()
-- end and stuff

RemoveHudItemFromAll("cp"..phase.."_flag")
--cancel any flag action
local flag = GetInfoScriptByName("cp"..phase.."_flag")
if flag then
flag:Remove()
end

phase = 1

OutputEvent( "start_gate", "Close" )
BroadCastMessage("#ADZ_Switch")

AddSchedule("switch_teams", 0, switch_teams)
end

detpack_wall_open = nil

function onroundreset()
Expand Down
32 changes: 32 additions & 0 deletions maps/ff_napoli.lua
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ function startup()
-- start the timer for the points
AddScheduleRepeating("addpoints", PERIOD_TIME, addpoints)

-- start the timer for the round timer
setup_round_timer( INITIAL_ROUND_DELAY )

setup_door_timer("start_gate", INITIAL_ROUND_DELAY)
if INITIAL_ROUND_DELAY > 30 then AddSchedule( "dooropen30sec" , INITIAL_ROUND_DELAY - 30 , schedulemessagetoall, "Gates open in 30 seconds!" ) end
if INITIAL_ROUND_DELAY > 10 then AddSchedule( "dooropen10sec" , INITIAL_ROUND_DELAY - 10 , schedulemessagetoall, "Gates open in 10 seconds!" ) end
Expand Down Expand Up @@ -166,6 +169,9 @@ function base_id_cap:oncapture(player, item)
-- it's the last round. end and stuff
phase = 1

--kill the old timer, just in case
destroy_round_timer()

OutputEvent( "start_gate", "Close" )

AddSchedule("switch_teams", TEAM_SWITCH_DELAY, switch_teams)
Expand All @@ -190,6 +196,10 @@ function base_id_cap:oncapture(player, item)
OutputEvent( "start_gate", "Close" )
setup_door_timer("start_gate", NONINITIAL_ROUND_DELAY)

-- out with the old timer, in with the new
destroy_round_timer()
setup_round_timer( NONINITIAL_ROUND_DELAY )

-- clear objective icon
ATTACKERS_OBJECTIVE_ENTITY = nil
UpdateDefendersObjective()
Expand All @@ -210,6 +220,13 @@ function switch_teams()
defenders = Team.kRed
end

--cancel any flag action
local flag = GetInfoScriptByName(current_flag)
if flag then
flag:Remove()
end
RemoveHudItemFromAll(current_flag)

-- set all flag teams to new attackers
flags_set_team( attackers )

Expand Down Expand Up @@ -238,6 +255,10 @@ function switch_teams()
RespawnAllPlayers()
setup_door_timer("start_gate", INITIAL_ROUND_DELAY)

-- out with the old timer, in with the new
destroy_round_timer()
setup_round_timer( INITIAL_ROUND_DELAY )

-- run custom round reset stuff
onroundreset()
update_hud()
Expand Down Expand Up @@ -364,6 +385,17 @@ end
---------------------------------------
--Resetting round
------------------------------------

function forceRoundEnd()
-- end and stuff
phase = 1

OutputEvent( "start_gate", "Close" )
BroadCastMessage("#ADZ_Switch")

AddSchedule("switch_teams", 0, switch_teams)
end

detpack_wall_open = nil

function onroundreset()
Expand Down
172 changes: 170 additions & 2 deletions maps/includes/base_id.lua
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ if TEAM_SWITCH_DELAY == nil then TEAM_SWITCH_DELAY = 2 end
if RESPAWN_AFTER_CAP == nil then RESPAWN_AFTER_CAP = false end
if RESPAWN_DELAY == nil then RESPAWN_DELAY = 2 end

-- round timer globals
if ROUND_TIME_LIMIT == nil then ROUND_TIME_LIMIT = 240 end --4min
if round_timeleft == nil then round_timeleft = nil end

basecap = trigger_ff_script:new({
health = 100,
armor = 300,
Expand Down Expand Up @@ -273,6 +277,9 @@ function startup()

setup_door_timer("start_gate", INITIAL_ROUND_DELAY)

-- start the timer for the round timer
setup_round_timer( INITIAL_ROUND_DELAY )

cp1_flag.enabled = true
for i,v in ipairs({"cp1_flag", "cp2_flag", "cp3_flag", "cp4_flag", "cp5_flag", "cp6_flag", "cp7_flag", "cp8_flag"}) do
local flag = GetInfoScriptByName(v)
Expand Down Expand Up @@ -509,7 +516,10 @@ function base_id_cap:oncapture(player, item)

local flag_item = GetInfoScriptByName( item )
RemoveHudItem( player, flag_item:GetName() )


-- out with the old timer
destroy_round_timer()

-- turn off this flag
for i,v in ipairs(self.item) do
_G[v].enabled = nil
Expand All @@ -526,6 +536,9 @@ function base_id_cap:oncapture(player, item)
-- it's the last round. end and stuff
AddSchedule("team_switch_delay", TEAM_SWITCH_DELAY, round_end)
else
-- in with the new timer
setup_round_timer( ROUND_DELAY )

if RESPAWN_AFTER_CAP then
AddSchedule("respawn_all", RESPAWN_DELAY, respawn_all)
else
Expand All @@ -548,6 +561,81 @@ function base_id_cap:oncapture(player, item)

end

------------------------
-- Round Timer
------------------------

function setup_round_timer( duration )
--since this is called when the rounds begin
--round_timeleft should equal 0 initially
round_timeleft = 0

--start the new round_timer and warning schedules
AddSchedule("round_timer_start", duration, round_timer_start)
AddSchedule("forceRoundEnd", ROUND_TIME_LIMIT+duration, forceRoundEnd)

--Don't do vox as the gate opens because there's already an announcement
if ROUND_TIME_LIMIT >= 305 then AddSchedule("forceRoundWarn300", ROUND_TIME_LIMIT+duration-300, forceRoundWarn300) end
if ROUND_TIME_LIMIT >= 125 then AddSchedule("forceRoundWarn120", ROUND_TIME_LIMIT+duration-120, forceRoundWarn120) end
AddSchedule("forceRoundWarn30", ROUND_TIME_LIMIT+duration-30, forceRoundWarn30)
AddSchedule("forceRoundWarn10", ROUND_TIME_LIMIT+duration-10, forceRoundWarn10)
AddSchedule("forceRoundWarn9", ROUND_TIME_LIMIT+duration-9, forceRoundWarn9)
AddSchedule("forceRoundWarn8", ROUND_TIME_LIMIT+duration-8, forceRoundWarn8)
AddSchedule("forceRoundWarn7", ROUND_TIME_LIMIT+duration-7, forceRoundWarn7)
AddSchedule("forceRoundWarn6", ROUND_TIME_LIMIT+duration-6, forceRoundWarn6)
AddSchedule("forceRoundWarn5", ROUND_TIME_LIMIT+duration-5, forceRoundWarn5)
AddSchedule("forceRoundWarn4", ROUND_TIME_LIMIT+duration-4, forceRoundWarn4)
AddSchedule("forceRoundWarn3", ROUND_TIME_LIMIT+duration-3, forceRoundWarn3)
AddSchedule("forceRoundWarn2", ROUND_TIME_LIMIT+duration-2, forceRoundWarn2)
AddSchedule("forceRoundWarn1", ROUND_TIME_LIMIT+duration-1, forceRoundWarn1)
end

function destroy_round_timer()
--removes the round timer and warning schedules
RemoveSchedule("round_timer_schedule")
RemoveSchedule("forceRoundEnd")
RemoveSchedule("forceRoundWarn300")
RemoveSchedule("forceRoundWarn120")
RemoveSchedule("forceRoundWarn30")
RemoveSchedule("forceRoundWarn10")
RemoveSchedule("forceRoundWarn9")
RemoveSchedule("forceRoundWarn8")
RemoveSchedule("forceRoundWarn7")
RemoveSchedule("forceRoundWarn6")
RemoveSchedule("forceRoundWarn5")
RemoveSchedule("forceRoundWarn4")
RemoveSchedule("forceRoundWarn3")
RemoveSchedule("forceRoundWarn2")
RemoveSchedule("forceRoundWarn1")
round_timeleft = 0
end

function round_timer_start()
round_timeleft = ROUND_TIME_LIMIT
AddScheduleRepeating( "round_timer_schedule", 1, round_timer_schedule)
round_timer_HUD()
end


function round_timer_schedule()
round_timeleft = round_timeleft - 1
if round_timeleft <= 45 then update_hud() end
if round_timeleft < 0 then round_timeleft = 0 end
end

function forceRoundEnd()
BroadCastMessage("#ADZ_Switch")

-- cancel any flag action
RemoveHudItemFromAll(current_flag)
local flag = GetInfoScriptByName("cp"..phase.."_flag")
if flag then
flag:Remove()
end

round_end()
end

function respawn_all()
RespawnAllPlayers()
phase = phase + 1
Expand Down Expand Up @@ -593,6 +681,10 @@ function round_end()
RespawnAllPlayers()
setup_door_timer("start_gate", INITIAL_ROUND_DELAY)

-- out with the old timer, in with the new
destroy_round_timer()
setup_round_timer( INITIAL_ROUND_DELAY )

-- run custom round reset stuff
onroundreset()
update_hud()
Expand All @@ -613,6 +705,63 @@ end
function round_30secwarn() BroadCastMessage("#FF_ROUND_30SECWARN") end
function round_10secwarn() BroadCastMessage("#FF_ROUND_10SECWARN") end

----------------------------
-- Timer Warning Messages
----------------------------

function forceRoundWarn300()
BroadCastMessage("#ADZ_Switch5Min")
SpeakAll("AD_300SEC")
end
function forceRoundWarn120()
BroadCastMessage("#ADZ_Switch2Min")
SpeakAll("AD_120SEC")
end
function forceRoundWarn30()
BroadCastMessage("#ADZ_Switch30Sec")
SpeakAll("AD_30SEC")
end
function forceRoundWarn10()
BroadCastMessage("#ADZ_Switch10Sec")
SpeakAll("AD_10SEC")
end
function forceRoundWarn9()
BroadCastMessage("9")
SpeakAll("AD_9SEC")
end
function forceRoundWarn8()
BroadCastMessage("8")
SpeakAll("AD_8SEC")
end
function forceRoundWarn7()
BroadCastMessage("7")
SpeakAll("AD_7SEC")
end
function forceRoundWarn6()
BroadCastMessage("6")
SpeakAll("AD_6SEC")
end
function forceRoundWarn5()
BroadCastMessage("5")
SpeakAll("AD_5SEC")
end
function forceRoundWarn4()
BroadCastMessage("4")
SpeakAll("AD_4SEC")
end
function forceRoundWarn3()
BroadCastMessage("3")
SpeakAll("AD_3SEC")
end
function forceRoundWarn2()
BroadCastMessage("2")
SpeakAll("AD_2SEC")
end
function forceRoundWarn1()
BroadCastMessage("1")
SpeakAll("AD_1SEC")
end

function flag_start(flagname)
BroadCastMessage("#AD_FlagAtBase")
_G[flagname].enabled = true
Expand Down Expand Up @@ -674,7 +823,7 @@ function UpdateDefendersObjective()
end

------------------------------------------------
-- instanciate them
-- instantiate them
------------------------------------------------
cp1_flag = base_id_flag:new({phase = 1})
cp2_flag = base_id_flag:new({phase = 2})
Expand Down Expand Up @@ -719,13 +868,30 @@ cp8_defender = base_defender_spawn:new({phase=8})
------------------------------------------------
-- hud info
------------------------------------------------

function round_timer_HUD()
RemoveHudItemFromAll("round_timer")
RemoveHudItemFromAll("round_timer_text")
if round_timeleft > 0 then
if round_timeleft <= 45 then
-- only add round_timer_text, schedules will handle the rest from here
AddHudTextToAll("round_timer_text", "Round Time", 40, od_hudstatusicony, 2, 0, 2)
else
AddHudTextToAll("round_timer_text", "Round Time", 40, od_hudstatusicony, 2, 0, 2)
AddHudTimerToAll("round_timer", round_timeleft, -1, 40, od_hudstatusicony+10, 2, 0, 3)
end
end
end

function flaginfo( player_entity )

local player = CastToPlayer( player_entity )

local flag = GetInfoScriptByName("cp"..phase.."_flag")
local flagname = flag:GetName()

round_timer_HUD()

--RemoveHudItemFromAll( "background" )
--AddHudIconToAll( "hud_statusbar_256_128.vtf", "background", -64, 32, 128, 70, 3 )

Expand Down Expand Up @@ -832,6 +998,8 @@ function update_hud()
local flag = GetInfoScriptByName("cp"..phase.."_flag")
local flagname = flag:GetName()

round_timer_HUD()

--RemoveHudItemFromAll( "background" )
--AddHudIconToAll( "hud_statusbar_256_128.vtf", "background", -64, 32, 128, 70, 3 )

Expand Down