-- base_id_new.lua -- Invade / Defend gametype -- New scoring system included ----------------------------------------------------------------------------- -- includes ----------------------------------------------------------------------------- IncludeScript("base_teamplay") ----------------------------------------------------------------------------- -- globals. Copy these your yourmap.lua if you want to change them. ----------------------------------------------------------------------------- if NUM_PHASES == nil then NUM_PHASES = 4; end if INITIAL_ROUND_DELAY == nil then INITIAL_ROUND_DELAY = 45; end --How long it takes for the next flag to become available if ROUND_DELAY == nil then ROUND_DELAY = 20; end FLAG_RETURN_TIME = 60 --A little pause before teams switch TEAM_SWITCH_DELAY = 5 --If true, all players will respawn when a flag is capped if RESPAWN_AFTER_CAP == nil then RESPAWN_AFTER_CAP = false end if RESPAWN_DELAY == nil then RESPAWN_DELAY = 2 end --Every cap has a time limit. The score for a capture decreases as time passes if CAP_TIME_LIMIT == nil then CAP_TIME_LIMIT = 240 end if SECONDS_PER_POINT == nil then SECONDS_PER_POINT = 12 end SECONDS_FOR_ONE_FULL_ROUND = INITIAL_ROUND_DELAY + TEAM_SWITCH_DELAY + ROUND_DELAY * (NUM_PHASES-1) + CAP_TIME_LIMIT * NUM_PHASES --SECONDS_FOR_TWO_FULL_ROUNDS = (INITIAL_ROUND_DELAY + TEAM_SWITCH_DELAY + ROUND_DELAY * (NUM_PHASES-1) + CAP_TIME_LIMIT * NUM_PHASES) * 2 --ConsoleToAll("SECONDS_FOR_ONE_FULL_ROUND = "..SECONDS_FOR_ONE_FULL_ROUND) ----------------------------------------------------------------------------- if ATTACKERS_OBJECTIVE_ENTITY == nil then ATTACKERS_OBJECTIVE_ENTITY = nil end if DEFENDERS_OBJECTIVE_ENTITY == nil then DEFENDERS_OBJECTIVE_ENTITY = nil end if DEFENDERS_OBJECTIVE_ONFLAG == nil then DEFENDERS_OBJECTIVE_ONFLAG = true end if DEFENDERS_OBJECTIVE_ONCARRIER == nil then DEFENDERS_OBJECTIVE_ONCARRIER = true end if onroundreset == nil then onroundreset = function() end end instantswitch = false --let players instantly change class before the gates open function player_switchclass( player, oldclassid, newclassid ) --avoids problems with joining a server if oldclassid == 0 then return true end if instantswitch and oldclassid ~= newclassid then --add 16 to convert classes to AT flags ApplyToPlayer( player, {newclassid+16} ) --The player gets full ammo/grenades on class switch! if player:GetTeamId() == attackers then player:RemoveAmmo( Ammo.kGren2, 4 ) elseif player:GetTeamId() == defenders then player:RemoveAmmo( Ammo.kDetpack, 1) end end return true end basecap = trigger_ff_script:new({ health = 100, armor = 300, grenades = 200, nails = 200, shells = 200, rockets = 200, cells = 200, detpacks = 1, mancannons = 1, gren1 = 0, gren2 = 0, item = "", team = 0, botgoaltype = Bot.kFlagCap, }) function basecap:ontrigger ( trigger_entity ) if IsPlayer( trigger_entity ) then local player = CastToPlayer( trigger_entity ) -- player should capture now for i,v in ipairs( self.item ) do -- find the flag and cast it to an info_ff_script local flag = GetInfoScriptByName(v) -- Make sure flag isn't nil if flag then -- check if the player is carrying the flag if player:HasItem(flag:GetName()) then -- reward player for capture player:AddFortPoints(FORTPOINTS_PER_CAPTURE, "#FF_FORTPOINTS_CAPTUREFLAG") -- Remove any hud icons RemoveHudItem( player, flag:GetName() ) RemoveHudItemFromAll( flag:GetName() .. "_c" ) LogLuaEvent(player:GetId(), 0, "flag_capture","flag_name",flag:GetName()) -- return the flag flag:Return() -- give player some health and armor if self.health ~= nil and self.health ~= 0 then player:AddHealth(self.health) end if self.armor ~= nil and self.armor ~= 0 then player:AddArmor(self.armor) end -- give the player some ammo if self.nails ~= nil and self.nails ~= 0 then player:AddAmmo(Ammo.kNails, self.nails) end if self.shells ~= nil and self.shells ~= 0 then player:AddAmmo(Ammo.kShells, self.shells) end if self.rockets ~= nil and self.rockets ~= 0 then player:AddAmmo(Ammo.kRockets, self.rockets) end if self.cells ~= nil and self.cells ~= 0 then player:AddAmmo(Ammo.kCells, self.cells) end if self.detpacks ~= nil and self.detpacks ~= 0 then player:AddAmmo(Ammo.kDetpack, self.detpacks) end if self.mancannons ~= nil and self.mancannons ~= 0 then player:AddAmmo(Ammo.kManCannon, self.mancannons) end if self.gren1 ~= nil and self.gren1 ~= 0 then player:AddAmmo(Ammo.kGren1, self.gren1) end if self.gren2 ~= nil and self.gren2 ~= 0 then player:AddAmmo(Ammo.kGren2, self.gren2) end self:oncapture( player, v ) end end end end end function baseflag:spawn() self.notouch = { } info_ff_script.spawn(self) local flag = CastToInfoScript( entity ) LogLuaEvent(0, 0, "flag_spawn","flag_name",flag:GetName()) self.status = 0 update_hud() end function baseflag:ownercloak( owner_entity ) -- drop the flag local flag = CastToInfoScript(entity) flag:Drop(FLAG_RETURN_TIME, 0.0) -- remove flag icon from hud local player = CastToPlayer( owner_entity ) RemoveHudItem( player, flag:GetName() ) self.status = 2 -- objective icon ATTACKERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" ) if DEFENDERS_OBJECTIVE_ONFLAG then DEFENDERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" ) end UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) setup_return_timer() update_hud() end function baseflag:dropitemcmd( owner_entity ) if allowdrop == false then return end --Used by logging self.flagtoss = true -- throw the flag local flag = CastToInfoScript(entity) flag:Drop(FLAG_RETURN_TIME, FLAG_THROW_SPEED) -- remove flag icon from hud local player = CastToPlayer( owner_entity ) RemoveHudItem( player, flag:GetName() ) self.status = 2 -- objective icon ATTACKERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" ) if DEFENDERS_OBJECTIVE_ONFLAG then DEFENDERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" ) end UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) setup_return_timer() update_hud() end function baseflag:onownerforcerespawn( owner_entity ) local flag = CastToInfoScript( entity ) local player = CastToPlayer( owner_entity ) player:SetDisguisable( true ) player:SetCloakable( true ) RemoveHudItem( player, flag:GetName() ) flag:Drop(0, FLAG_THROW_SPEED) self.status = 2 -- objective icon ATTACKERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" ) if DEFENDERS_OBJECTIVE_ONFLAG then DEFENDERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" ) end UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) update_hud() end function baseflag:onreturn( ) -- let the teams know that the flag was returned local team = GetTeam( self.team ) SmartTeamMessage(team, "#FF_TEAMRETURN", "#FF_OTHERTEAMRETURN", Color.kYellow, Color.kYellow) SmartTeamSound(team, "yourteam.flagreturn", "otherteam.flagreturn") SmartTeamSpeak(team, "CTF_FLAGBACK", "CTF_EFLAGBACK") local flag = CastToInfoScript( entity ) self.status = 0 LogLuaEvent(0, 0, "flag_returned","flag_name",flag:GetName()); -- objective icon ATTACKERS_OBJECTIVE_ENTITY = flag if DEFENDERS_OBJECTIVE_ONFLAG then DEFENDERS_OBJECTIVE_ENTITY = flag end UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) destroy_return_timer() update_hud() end phase = 1 current_flag = "cp1_flag" attackers = Team.kBlue defenders = Team.kRed current_timer = 0 carried_by = nil rounds_elapsed = 0 cap_timeleft = 0 --This is the default startup script for id maps. If you use startup() in your map, call this and then do your own stuff before/after. function id_startup() SetGameDescription( "Invade Defend" ) -- set up team limits local team = GetTeam( Team.kBlue ) team:SetPlayerLimit( 0 ) team = GetTeam( Team.kRed ) team:SetPlayerLimit( 0 ) team = GetTeam( Team.kYellow ) team:SetPlayerLimit( -1 ) team = GetTeam( Team.kGreen ) team:SetPlayerLimit( -1 ) redScore = 0 blueScore = 0 --map will end after red gets to attack roundnumber = 1 lastround = false --the original timelimit. If a server admin changes mp_timelimit, the script won't adjust to it. timelimit = GetConvar( "mp_timelimit" ) -- CTF maps generally don't have civilians, -- so override in map LUA file if you want 'em local team = GetTeam(Team.kBlue) team:SetClassLimit(Player.kCivilian, -1) team = GetTeam(Team.kRed) team:SetClassLimit(Player.kCivilian, -1) -- set them team names SetTeamName( attackers, "Attackers" ) SetTeamName( defenders, "Defenders" ) cap_timeleft = 0 setup_door_timer("start_gate", 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) if flag then flag:SetModel(_G[v].model) flag:SetSkin(teamskins[attackers]) if i == 1 then flag:Restore() else flag:Remove() end end end flags_set_team( attackers ) ATTACKERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" ) DEFENDERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_cap" ) UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) end function startup() id_startup() end -- Give everyone a full resupply, but strip secondary grenades for offense function player_spawn( player_entity ) local player = CastToPlayer( player_entity ) player:AddHealth( 100 ) player:AddArmor( 300 ) player:AddAmmo( Ammo.kNails, 400 ) player:AddAmmo( Ammo.kShells, 400 ) player:AddAmmo( Ammo.kRockets, 400 ) player:AddAmmo( Ammo.kCells, 400 ) player:AddAmmo( Ammo.kDetpack, 1 ) player:AddAmmo( Ammo.kManCannon, 1 ) if player:GetTeamId() == attackers then UpdateObjectiveIcon( player, ATTACKERS_OBJECTIVE_ENTITY ) player:RemoveAmmo( Ammo.kGren2, 4 ) elseif player:GetTeamId() == defenders then UpdateObjectiveIcon( player, DEFENDERS_OBJECTIVE_ENTITY ) player:RemoveAmmo( Ammo.kDetpack, 1) end end function precache() -- precache sounds PrecacheSound("yourteam.flagstolen") PrecacheSound("otherteam.flagstolen") PrecacheSound("yourteam.flagcap") PrecacheSound("otherteam.flagcap") PrecacheSound("yourteam.drop") PrecacheSound("otherteam.drop") PrecacheSound("yourteam.flagreturn") PrecacheSound("otherteam.flagreturn") end -- kinda ghetto, sure function flags_set_team( teamid ) -- set all flags teams cp1_flag.team = teamid cp2_flag.team = teamid cp3_flag.team = teamid cp4_flag.team = teamid cp5_flag.team = teamid cp6_flag.team = teamid cp7_flag.team = teamid cp8_flag.team = teamid end ----------------------------------------- --Backpacks ----------------------------------------- idbackpack = genericbackpack:new({team = nil}) function idbackpack:touch( touch_entity ) if IsPlayer( touch_entity ) then local player = CastToPlayer( touch_entity ) if player:GetTeamId() ~= self.team then return false end local dispensed = 0 -- give player some health and armor if self.health ~= nil and self.health ~= 0 then dispensed = dispensed + player:AddHealth( self.health ) end if self.armor ~= nil and self.armor ~= 0 then dispensed = dispensed + player:AddArmor( self.armor ) end -- give player ammo if self.nails ~= nil and self.nails ~= 0 then dispensed = dispensed + player:AddAmmo(Ammo.kNails, self.nails) end if self.shells ~= nil and self.shells ~= 0 then dispensed = dispensed + player:AddAmmo(Ammo.kShells, self.shells) end if self.rockets ~= nil and self.rockets ~= 0 then dispensed = dispensed + player:AddAmmo(Ammo.kRockets, self.rockets) end if self.cells ~= nil and self.cells ~= 0 then dispensed = dispensed + player:AddAmmo(Ammo.kCells, self.cells) end if self.detpacks ~= nil and self.detpacks ~= 0 then dispensed = dispensed + player:AddAmmo(Ammo.kDetpack, self.detpacks) end if self.mancannons ~= nil and self.mancannons ~= 0 then dispensed = dispensed + player:AddAmmo(Ammo.kManCannon, self.mancannons) end if self.gren1 ~= nil and self.gren1 ~= 0 then dispensed = dispensed + player:AddAmmo(Ammo.kGren1, self.gren1) end if self.gren2 ~= nil and self.gren2 ~= 0 then dispensed = dispensed + player:AddAmmo(Ammo.kGren2, self.gren2) end -- if the player took ammo, then have the backpack respawn with a delay if dispensed >= 1 then local backpack = CastToInfoScript(entity); if backpack then backpack:EmitSound(self.touchsound); backpack:Respawn(self.respawntime); end end end end --These bags will switch teams with the map. backpack_attackers = idbackpack:new({team = attackers}) backpack_defenders = idbackpack:new({team = defenders}) ----------------------------------------- -- base flag ----------------------------------------- base_id_flag = baseflag:new({ phase = 1, enabled = nil, touchflags = { AllowFlags.kOnlyPlayers, AllowFlags.kBlue, AllowFlags.kRed }, hudicon = BLUE_FLAG_HUD_ICON, }) function base_id_flag:touch( touch_entity ) if IsPlayer( touch_entity ) then local player = CastToPlayer( touch_entity ) -- pickup if they can if self.notouch[player:GetId()] then return; end if player:GetTeamId() == attackers and phase == self.phase and self.enabled then SmartSound(player, "yourteam.flagstolen", "yourteam.flagstolen", "otherteam.flagstolen") RandomFlagTouchSpeak( player ) SmartMessage(player, "#FF_YOUPICKUP", "#FF_TEAMPICKUP", "#FF_OTHERTEAMPICKUP", Color.kGreen, Color.kGreen, Color.kRed) local flag = CastToInfoScript(entity) flag:Pickup(player) player:SetDisguisable( false ) -- if the player is a spy, then force him to lose his cloak player:SetCloakable( false ) self.hudicon = team_hudicons[attackers] AddHudIcon( player, self.hudicon, flag:GetName(), self.hudx, self.hudy, self.hudstatusiconw, self.hudstatusiconh, self.hudalign ) -- log action in stats LogLuaEvent(player:GetId(), 0, "flag_touch", "flag_name", flag:GetName(), "player_origin", (string.format("%0.2f",player:GetOrigin().x) .. ", " .. string.format("%0.2f",player:GetOrigin().y) .. ", " .. string.format("%0.1f",player:GetOrigin().z) ), "player_health", "" .. player:GetHealth()); -- change objective icons ATTACKERS_OBJECTIVE_ENTITY = player if DEFENDERS_OBJECTIVE_ONFLAG then DEFENDERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..self.phase.."_cap" ) end if DEFENDERS_OBJECTIVE_ONCARRIER then DEFENDERS_OBJECTIVE_ENTITY = player end UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) UpdateObjectiveIcon( player, GetEntityByName( "cp"..self.phase.."_cap" ) ) carried_by = player:GetName() destroy_return_timer() update_hud() end end end function base_id_flag:onownerdie( owner_entity ) -- drop the flag local flag = CastToInfoScript(entity) flag:Drop(FLAG_RETURN_TIME, 0.0) -- remove flag icon from hud local player = CastToPlayer( owner_entity ) RemoveHudItem( player, flag:GetName() ) player:SetDisguisable( true ) player:SetCloakable( true ) -- change objective icon ATTACKERS_OBJECTIVE_ENTITY = flag if DEFENDERS_OBJECTIVE_ONFLAG then DEFENDERS_OBJECTIVE_ENTITY = flag end UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) UpdateObjectiveIcon( player, nil ) self.status = 2 setup_return_timer() update_hud() end ----------------------------------------- -- base capture point ----------------------------------------- base_id_cap = basecap:new({ phase = 0, }) function base_id_cap:allowed ( touch_entity ) if phase ~= self.phase then return EVENT_DISALLOWED end if IsPlayer( touch_entity ) then local player = CastToPlayer( touch_entity ) if player:GetTeamId() == defenders then BroadCastMessageToPlayer( player, "#AD_Defend" ) else for i,v in ipairs(self.item) do if player:HasItem( v ) then return EVENT_ALLOWED end end end end return EVENT_DISALLOWED end function base_id_cap:oncapture(player, item) SmartSound(player, "yourteam.flagcap", "yourteam.flagcap", "otherteam.flagcap") SmartMessage(player, "#FF_YOUCAP", "#FF_TEAMCAP", "#FF_OTHERTEAMCAP", Color.kGreen, Color.kGreen, Color.kRed) --Custom map effects. Put a logic_relay in the map, eg. "cp1_relay_blue" to trigger when there's a cap. if attackers == Team.kBlue then OutputEvent( "cp"..self.phase.."_relay_blue", "Trigger" ) else OutputEvent( "cp"..self.phase.."_relay_red", "Trigger" ) end local flag_item = GetInfoScriptByName( item ) RemoveHudItem( player, flag_item:GetName() ) -- turn off this flag for i,v in ipairs(self.item) do _G[v].enabled = nil local flag = GetInfoScriptByName(v) if flag then flag:Remove() end end --Team gets points for time left on the clock. local team = player:GetTeam() team:AddScore(math.ceil(cap_timeleft / SECONDS_PER_POINT)) if attackers == Team.kBlue then blueScore = blueScore + (math.ceil(cap_timeleft / SECONDS_PER_POINT)) else redScore = redScore + (math.ceil(cap_timeleft / SECONDS_PER_POINT)) end -- show on the deathnotice board ObjectiveNotice( player, "captured point "..phase.." for "..(math.ceil(cap_timeleft / SECONDS_PER_POINT)).." points" ) RemoveSchedule("cap_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") cap_timeleft = 0 if phase == NUM_PHASES then -- it's the last phase. end and stuff rounds_elapsed = rounds_elapsed + 1 SmartTeamSpeak(GetTeam(attackers), "CZ_GOTALL", "CZ_THEYGOTALL") freezeAllPlayers() --End the map if it's time. if attackers == Team.kRed and lastround == true then AddSchedule("QuitSched", 4, QuitIt()) else AddSchedule("team_switch_delay", TEAM_SWITCH_DELAY, round_end) end else SmartSpeak(player, "CTF_YOUCAP", "CTF_TEAMCAP", "CTF_THEYCAP") phase = phase + 1 if RESPAWN_AFTER_CAP then AddSchedule("respawn_all", RESPAWN_DELAY, respawn_all) end -- enable the next flag after a time AddSchedule("flag_start", ROUND_DELAY, flag_start, self.next) if ROUND_DELAY > 30 then AddSchedule("flag_30secwarn", ROUND_DELAY-30, flag_30secwarn) end if ROUND_DELAY > 10 then AddSchedule("flag_10secwarn", ROUND_DELAY-10, flag_10secwarn) end current_flag = self.next -- clear objective icon ATTACKERS_OBJECTIVE_ENTITY = nil if DEFENDERS_OBJECTIVE_ONFLAG or DEFENDERS_OBJECTIVE_ONCARRIER then DEFENDERS_OBJECTIVE_ENTITY = nil else DEFENDERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_cap" ) end UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) setup_tobase_timer() update_hud() end end function respawn_all() RespawnAllPlayers() end function round_end() phase = 1 if attackers == Team.kBlue then attackers = Team.kRed defenders = Team.kBlue else roundnumber = roundnumber + 1 attackers = Team.kBlue defenders = Team.kRed AddHudTextToAll("finalround_text", "ROUND "..roundnumber, 20, od_hudstatusicony+5, 3, 0, 2) end --ten minutes until the time limit, call it quits if (GetServerTime() > 60 * timelimit - 600) and lastround == false and attackers == Team.kBlue then lastround = true AddHudTextToAll("finalround_text", "FINAL ROUND", 20, od_hudstatusicony+5, 3, 0, 2) --ConsoleToAll("declaring last round: "..(timelimit - GetServerTime()/60).." minutes left until original map limit") end -- set all flag teams to new attackers flags_set_team( attackers ) -- switch them team names SetTeamName( attackers, "Attackers" ) SetTeamName( defenders, "Defenders" ) -- respawn the players RespawnAllPlayers() setup_door_timer("start_gate", INITIAL_ROUND_DELAY) --Telling players what's up SmartTeamMessage(GetTeam(defenders), "You are now on defense. Move to command point 1", "You are now on Offense. When the gates open, attack!") SmartTeamSpeak(GetTeam(attackers), "AD_ATTACK", "AD_DEFEND") if blueScore > redScore then AddSchedule("WinningSpeak", 3, SmartTeamSpeak, GetTeam(Team.kBlue), "WINNING_YOURTEAM", "WINNING_ENEMYTEAM") elseif redScore > blueScore then AddSchedule("WinningSpeak", 3, SmartTeamSpeak, GetTeam(Team.kRed), "WINNING_YOURTEAM", "WINNING_ENEMYTEAM") end current_flag = "cp1_flag" -- enable the first flag cp1_flag.enabled = true cp1_flag.status = 0 local flag = GetInfoScriptByName("cp1_flag") if flag then flag:Restore() flag:SetSkin(teamskins[attackers]) end -- change objective icon ATTACKERS_OBJECTIVE_ENTITY = flag DEFENDERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_cap" ) UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) update_hud() -- run custom round reset stuff onroundreset() end function setup_door_timer(doorname, duration) CloseDoor(doorname) AddSchedule("round_start", duration, round_start, doorname) AddSchedule("round_30secwarn", duration-30, round_30secwarn) AddSchedule("round_10secwarn", duration-10, round_10secwarn) AddSchedule("round_5secwarn", duration-5, round_5secwarn) AddSchedule("round_4secwarn", duration-4, round_4secwarn) AddSchedule("round_3secwarn", duration-3, round_3secwarn) AddSchedule("round_2secwarn", duration-2, round_2secwarn) AddSchedule("round_1secwarn", duration-1, round_1secwarn) --This overrides the schedules from the previous round --Which should be over anyway, but don't fix what ain't broke, right? AddSchedule("forceRoundEnd", CAP_TIME_LIMIT+duration, forceRoundEnd) --Don't do vox as the gate opens becasue there's already an anouncement if CAP_TIME_LIMIT >= 305 then AddSchedule("forceRoundWarn300", CAP_TIME_LIMIT+duration-300, forceRoundWarn300) end if CAP_TIME_LIMIT >= 125 then AddSchedule("forceRoundWarn120", CAP_TIME_LIMIT+duration-120, forceRoundWarn120) end AddSchedule("forceRoundWarn30", CAP_TIME_LIMIT+duration-30, forceRoundWarn30) AddSchedule("forceRoundWarn10", CAP_TIME_LIMIT+duration-10, forceRoundWarn10) AddSchedule("forceRoundWarn9", CAP_TIME_LIMIT+duration-9, forceRoundWarn9) AddSchedule("forceRoundWarn8", CAP_TIME_LIMIT+duration-8, forceRoundWarn8) AddSchedule("forceRoundWarn7", CAP_TIME_LIMIT+duration-7, forceRoundWarn7) AddSchedule("forceRoundWarn6", CAP_TIME_LIMIT+duration-6, forceRoundWarn6) AddSchedule("forceRoundWarn5", CAP_TIME_LIMIT+duration-5, forceRoundWarn5) AddSchedule("forceRoundWarn4", CAP_TIME_LIMIT+duration-4, forceRoundWarn4) AddSchedule("forceRoundWarn3", CAP_TIME_LIMIT+duration-3, forceRoundWarn3) AddSchedule("forceRoundWarn2", CAP_TIME_LIMIT+duration-2, forceRoundWarn2) AddSchedule("forceRoundWarn1", CAP_TIME_LIMIT+duration-1, forceRoundWarn1) instantswitch = true --Put more time on the clock if needed if (60 * GetConvar( "mp_timelimit" ) - GetServerTime() - 4) < SECONDS_FOR_ONE_FULL_ROUND then set_cvar("mp_timelimit", (GetServerTime() + SECONDS_FOR_ONE_FULL_ROUND)/60) --ConsoleToAll("setting mp_timelimit: "..(GetServerTime() + SECONDS_FOR_ONE_FULL_ROUND/)60) end end function round_start(doorname) cap_timeleft = CAP_TIME_LIMIT AddScheduleRepeating( "cap_timer_schedule", 1, cap_timer_schedule) BroadCastMessage("#FF_AD_GATESOPEN") SpeakAll("AD_GATESOPEN") OpenDoor(doorname) update_hud() instantswitch = false end function cap_timer_schedule() cap_timeleft = cap_timeleft - 1 if cap_timeleft < 0 then cap_timeleft = 0 end end function freezeAllPlayers() local col = Collection() col:GetByFilter( { CF.kPlayers, CF.kTeamBlue } ) for temp in col.items do local player = CastToPlayer( temp ) if player then player:Freeze(true) end end col:GetByFilter( { CF.kPlayers, CF.kTeamRed } ) for temp in col.items do local player = CastToPlayer( temp ) if player then player:Freeze(true) end end end function forceRoundEnd() freezeAllPlayers() BroadCastMessage("#ADZ_Switch") SpeakAll("CZ_POINTSRESET") RemoveSchedule("cap_timer_schedule") cap_timeleft = 0 rounds_elapsed = rounds_elapsed + 1 --These relays fire if the round times out if attackers == Team.kBlue then OutputEvent("timeout_relay_blue", "Trigger") else OutputEvent("timeout_relay_red", "Trigger") end --cancel any flag action local flag = GetInfoScriptByName(current_flag) if flag then flag:Remove() end RemoveHudItemFromAll(current_flag) update_hud() --End the map if it's time if attackers == Team.kRed and lastround == true then AddSchedule("QuitSched", 4, QuitIt()) else AddSchedule("team_switch_delay", TEAM_SWITCH_DELAY, round_end) end end function QuitIt() GoToIntermission() if blueScore > redScore then AddSchedule("WinSpeak", 1, SpeakAll, "WIN_BLUE") elseif redScore > blueScore then AddSchedule("WinSpeak", 1, SpeakAll, "WIN_RED") end end 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 round_30secwarn() BroadCastMessage("#FF_ROUND_30SECWARN") end function round_10secwarn() BroadCastMessage("#FF_ROUND_10SECWARN") end function round_5secwarn() BroadCastMessage("5") SpeakAll("AD_5SEC") end function round_4secwarn() BroadCastMessage("4") SpeakAll("AD_4SEC") end function round_3secwarn() BroadCastMessage("3") SpeakAll("AD_3SEC") end function round_2secwarn() BroadCastMessage("2") SpeakAll("AD_2SEC") end function round_1secwarn() BroadCastMessage("1") SpeakAll("AD_1SEC") end function flag_start(flagname) BroadCastMessage("#AD_FlagAtBase") _G[flagname].enabled = true _G[flagname].status = 0 local flag = GetInfoScriptByName(flagname) if flag then flag:Restore() flag:SetSkin(teamskins[attackers]) end --reset the cap timer cap_timeleft = CAP_TIME_LIMIT AddScheduleRepeating( "cap_timer_schedule", 1, cap_timer_schedule) AddSchedule("forceRoundEnd", CAP_TIME_LIMIT, forceRoundEnd) if CAP_TIME_LIMIT >= 300 then AddSchedule("forceRoundWarn300", CAP_TIME_LIMIT-300, forceRoundWarn300) end if CAP_TIME_LIMIT >= 120 then AddSchedule("forceRoundWarn120", CAP_TIME_LIMIT-120, forceRoundWarn120) end AddSchedule("forceRoundWarn30", CAP_TIME_LIMIT-30, forceRoundWarn30) AddSchedule("forceRoundWarn10", CAP_TIME_LIMIT-10, forceRoundWarn10) AddSchedule("forceRoundWarn9", CAP_TIME_LIMIT-9, forceRoundWarn9) AddSchedule("forceRoundWarn8", CAP_TIME_LIMIT-8, forceRoundWarn8) AddSchedule("forceRoundWarn7", CAP_TIME_LIMIT-7, forceRoundWarn7) AddSchedule("forceRoundWarn6", CAP_TIME_LIMIT-6, forceRoundWarn6) AddSchedule("forceRoundWarn5", CAP_TIME_LIMIT-5, forceRoundWarn5) AddSchedule("forceRoundWarn4", CAP_TIME_LIMIT-4, forceRoundWarn4) AddSchedule("forceRoundWarn3", CAP_TIME_LIMIT-3, forceRoundWarn3) AddSchedule("forceRoundWarn2", CAP_TIME_LIMIT-2, forceRoundWarn2) AddSchedule("forceRoundWarn1", CAP_TIME_LIMIT-1, forceRoundWarn1) -- change objective icon ATTACKERS_OBJECTIVE_ENTITY = flag if DEFENDERS_OBJECTIVE_ONFLAG then DEFENDERS_OBJECTIVE_ENTITY = flag end UpdateTeamObjectiveIcon( GetTeam(attackers), ATTACKERS_OBJECTIVE_ENTITY ) UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY ) update_hud() end function flag_30secwarn() BroadCastMessage("#AD_30SecReturn") end function flag_10secwarn() BroadCastMessage("#AD_10SecReturn") end function timer_schedule() current_timer = current_timer -1 end function setup_return_timer() RemoveSchedule( "timer_tobase_schedule" ) current_timer = FLAG_RETURN_TIME AddScheduleRepeatingNotInfinitely( "timer_return_schedule", 1, timer_schedule, current_timer) end function destroy_return_timer() RemoveSchedule( "timer_return_schedule" ) end function setup_tobase_timer() RemoveSchedule( "timer_return_schedule" ) current_timer = ROUND_DELAY AddScheduleRepeatingNotInfinitely( "timer_tobase_schedule", 1, timer_schedule, current_timer) end function destroy_tobase_timer() RemoveSchedule( "timer_tobase_schedule" ) end ------------------------------------------------ -- instanciate them ------------------------------------------------ cp1_flag = base_id_flag:new({phase = 1}) cp2_flag = base_id_flag:new({phase = 2}) cp3_flag = base_id_flag:new({phase = 3}) cp4_flag = base_id_flag:new({phase = 4}) cp5_flag = base_id_flag:new({phase = 5}) cp6_flag = base_id_flag:new({phase = 6}) cp7_flag = base_id_flag:new({phase = 7}) cp8_flag = base_id_flag:new({phase = 8}) cp1_cap = base_id_cap:new({phase = 1, item = {"cp1_flag"}, next = "cp2_flag"}) cp2_cap = base_id_cap:new({phase = 2, item = {"cp2_flag"}, next = "cp3_flag"}) cp3_cap = base_id_cap:new({phase = 3, item = {"cp3_flag"}, next = "cp4_flag"}) cp4_cap = base_id_cap:new({phase = 4, item = {"cp4_flag"}, next = "cp5_flag"}) cp5_cap = base_id_cap:new({phase = 5, item = {"cp5_flag"}, next = "cp6_flag"}) cp6_cap = base_id_cap:new({phase = 6, item = {"cp6_flag"}, next = "cp7_flag"}) cp7_cap = base_id_cap:new({phase = 7, item = {"cp7_flag"}, next = "cp8_flag"}) cp8_cap = base_id_cap:new({phase = 8, item = {"cp8_flag"}, next = nil}) base_attacker_spawn = info_ff_teamspawn:new({ phase = 0, validspawn = function(self,player) return player:GetTeamId() == attackers and phase == self.phase end }) base_defender_spawn = info_ff_teamspawn:new({ phase = 0, validspawn = function(self,player) return player:GetTeamId() == defenders and phase == self.phase end }) cp1_attacker = base_attacker_spawn:new({phase=1}) cp2_attacker = base_attacker_spawn:new({phase=2}) cp3_attacker = base_attacker_spawn:new({phase=3}) cp4_attacker = base_attacker_spawn:new({phase=4}) cp5_attacker = base_attacker_spawn:new({phase=5}) cp6_attacker = base_attacker_spawn:new({phase=6}) cp7_attacker = base_attacker_spawn:new({phase=7}) cp8_attacker = base_attacker_spawn:new({phase=8}) cp1_defender = base_defender_spawn:new({phase=1}) cp2_defender = base_defender_spawn:new({phase=2}) cp3_defender = base_defender_spawn:new({phase=3}) cp4_defender = base_defender_spawn:new({phase=4}) cp5_defender = base_defender_spawn:new({phase=5}) cp6_defender = base_defender_spawn:new({phase=6}) cp7_defender = base_defender_spawn:new({phase=7}) cp8_defender = base_defender_spawn:new({phase=8}) ------------------------------------------------ -- hud info ------------------------------------------------ function flaginfo( player_entity ) local player = CastToPlayer( player_entity ) local flag = GetInfoScriptByName("cp"..phase.."_flag") local flagname = flag:GetName() RemoveHudItem( player, "cp_flag_c" ) RemoveHudItem( player, "cp_flag_d" ) RemoveHudItem( player, "cp_flag_h" ) RemoveHudItem( player, "flag_tobase_timer" ) RemoveHudItem( player, "flag_tobase_text" ) RemoveHudItem( player, "flag_return_timer" ) RemoveHudItem( player, "flag_return_text" ) RemoveHudItem( player, "flag_carried_by" ) RemoveHudItem( player, "flag_carried_by2" ) RemoveHudItem( player, "flag_athome" ) RemoveHudItem( player, "flag_athome2" ) if attackers == Team.kBlue then hudstatusicondropped = "hud_flag_dropped_blue.vtf" hudstatusiconhome = "hud_flag_home_blue.vtf" hudstatusiconcarried = "hud_flag_carried_blue.vtf" hudstatusicontobase = "hud_flag_home_l.vtf" elseif attackers == Team.kRed then hudstatusicondropped = "hud_flag_dropped_red.vtf" hudstatusiconhome = "hud_flag_home_red.vtf" hudstatusiconcarried = "hud_flag_carried_red.vtf" hudstatusicontobase = "hud_flag_home_r.vtf" elseif attackers == Team.kYellow then hudstatusicondropped = "hud_flag_dropped_yellow.vtf" hudstatusiconhome = "hud_flag_home_yellow.vtf" hudstatusiconcarried = "hud_flag_carried_yellow.vtf" hudstatusicontobase = "hud_flag_home_l.vtf" elseif attackers == Team.kGreen then hudstatusicondropped = "hud_flag_dropped_green.vtf" hudstatusiconhome = "hud_flag_home_green.vtf" hudstatusiconcarried = "hud_flag_carried_green.vtf" hudstatusicontobase = "hud_flag_home_r.vtf" end flag_hudstatusiconx = 4 flag_hudstatusicony = 42 flag_hudstatusiconw = 15 flag_hudstatusiconh = 15 flag_hudstatusiconalign = 3 text_hudstatusx = 0 text_hudstatusy = flag_hudstatusicony + 24 text_hudstatusalign = 4 local CPnumber = phase - 1 if _G[flagname].enabled == true then if flag:IsCarried() then AddHudText(player, "flag_carried_by", "#AD_FlagCarriedBy", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) AddHudText(player, "flag_carried_by2", carried_by, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 2) AddHudIcon(player, hudstatusiconcarried, ( "cp_flag_c" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign ) elseif flag:IsDropped() and _G[flagname].status == 2 then if CPnumber > 0 then AddHudTextToAll("flag_return_text", "Flag will return to CP"..CPnumber.." in", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) else AddHudTextToAll("flag_return_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) end AddHudTimer(player, "flag_return_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3) AddHudIcon(player, hudstatusicondropped, ( "cp_flag_d" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign ) elseif _G[flagname].status == 0 then AddHudText(player, "flag_athome", "#AD_FlagIsAt", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) if CPnumber > 0 then AddHudText(player, "flag_athome2", "Capture Point "..CPnumber, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 2) else AddHudText(player, "flag_athome2", "#AD_ASpawn", text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 2) end AddHudIcon(player, hudstatusiconhome, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign ) end else if CPnumber > 0 then AddHudText(player, "flag_tobase_text", "Flag will return to CP"..CPnumber.." in", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) else AddHudText(player, "flag_tobase_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) end AddHudTimer(player, "flag_tobase_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3) AddHudIcon(player, hudstatusicontobase, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign ) end RemoveHudItem( player, "Zone_Team"..attackers ) RemoveHudItem( player, "Zone_Team"..defenders ) RemoveHudItem( player, "Zone_Phase"..attackers ) RemoveHudItem( player, "Zone_Phase"..defenders ) od_hudstatusiconx = -28 od_hudstatusicony = 38 od_hudstatusiconw = 24 od_hudstatusiconh = 24 od_hudstatusiconalign = 3 RemoveHudItem(player, "cap_timer") RemoveHudItem(player, "cap_timer_text") if cap_timeleft > 0 then AddHudText(player, "cap_timer_text", "Time left", 40, od_hudstatusicony, 2, 0, 2) AddHudTimer(player, "cap_timer", cap_timeleft, -1, 40, od_hudstatusicony+10, 2, 0, 3) end if lastround == true then AddHudText(player, "finalround_text", "FINAL ROUND", 20, od_hudstatusicony+5, 3, 0, 2) else AddHudText(player, "finalround_text", "ROUND "..roundnumber, 20, od_hudstatusicony+5, 3, 0, 2) end if player:GetTeamId() == attackers then AddHudIcon( player, "hud_offense.vtf", "Zone_Team"..attackers, od_hudstatusiconx, od_hudstatusicony, od_hudstatusiconw, od_hudstatusiconh, od_hudstatusiconalign ) AddHudIcon( player, "hud_cp_"..phase..".vtf", "Zone_Phase"..attackers, od_hudstatusiconx + 2, od_hudstatusicony + 2, 20, 20, od_hudstatusiconalign ) else AddHudIcon( player, "hud_defense.vtf", "Zone_Team"..defenders, od_hudstatusiconx, od_hudstatusicony, od_hudstatusiconw, od_hudstatusiconh, od_hudstatusiconalign ) AddHudIcon( player, "hud_cp_"..phase..".vtf", "Zone_Phase"..defenders, od_hudstatusiconx + 2, od_hudstatusicony + 2, 20, 20, od_hudstatusiconalign ) end end function update_hud() local flag = GetInfoScriptByName("cp"..phase.."_flag") local flagname = flag:GetName() RemoveHudItemFromAll( "cp_flag_c" ) RemoveHudItemFromAll( "cp_flag_d" ) RemoveHudItemFromAll( "cp_flag_h" ) RemoveHudItemFromAll( "flag_tobase_timer" ) RemoveHudItemFromAll( "flag_tobase_text" ) RemoveHudItemFromAll( "flag_return_timer" ) RemoveHudItemFromAll( "flag_return_text" ) RemoveHudItemFromAll( "flag_carried_by" ) RemoveHudItemFromAll( "flag_carried_by2" ) RemoveHudItemFromAll( "flag_athome" ) RemoveHudItemFromAll( "flag_athome2" ) if attackers == Team.kBlue then hudstatusicondropped = "hud_flag_dropped_blue.vtf" hudstatusiconhome = "hud_flag_home_blue.vtf" hudstatusiconcarried = "hud_flag_carried_blue.vtf" hudstatusicontobase = "hud_flag_home_l.vtf" elseif attackers == Team.kRed then hudstatusicondropped = "hud_flag_dropped_red.vtf" hudstatusiconhome = "hud_flag_home_red.vtf" hudstatusiconcarried = "hud_flag_carried_red.vtf" hudstatusicontobase = "hud_flag_home_r.vtf" elseif attackers == Team.kYellow then hudstatusicondropped = "hud_flag_dropped_yellow.vtf" hudstatusiconhome = "hud_flag_home_yellow.vtf" hudstatusiconcarried = "hud_flag_carried_yellow.vtf" hudstatusicontobase = "hud_flag_home_l.vtf" elseif attackers == Team.kGreen then hudstatusicondropped = "hud_flag_dropped_green.vtf" hudstatusiconhome = "hud_flag_home_green.vtf" hudstatusiconcarried = "hud_flag_carried_green.vtf" hudstatusicontobase = "hud_flag_home_r.vtf" end flag_hudstatusiconx = 4 flag_hudstatusicony = 42 flag_hudstatusiconw = 15 flag_hudstatusiconh = 15 flag_hudstatusiconalign = 3 text_hudstatusx = 0 text_hudstatusy = flag_hudstatusicony + 24 text_hudstatusalign = 4 local CPnumber = phase - 1 if _G[flagname].enabled == true then if flag:IsCarried() then AddHudTextToAll("flag_carried_by", "#AD_FlagCarriedBy", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) AddHudTextToAll("flag_carried_by2", carried_by, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 2) AddHudIconToAll( hudstatusiconcarried, ( "cp_flag_c" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign ) elseif flag:IsDropped() and _G[flagname].status == 2 then if CPnumber > 0 then AddHudTextToAll("flag_return_text", "Flag will return to CP"..CPnumber.." in", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) else AddHudTextToAll("flag_return_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) end AddHudTimerToAll("flag_return_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3) AddHudIconToAll( hudstatusicondropped, ( "cp_flag_d" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign ) elseif _G[flagname].status == 0 then AddHudTextToAll("flag_athome", "#AD_FlagIsAt", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) if CPnumber > 0 then AddHudTextToAll("flag_athome2", "Capture Point "..CPnumber, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 2) else AddHudTextToAll("flag_athome2", "#AD_ASpawn", text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 2) end AddHudIconToAll( hudstatusiconhome, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign ) end else if CPnumber > 0 then AddHudTextToAll("flag_tobase_text", "Flag will return to CP"..CPnumber.." in", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) else AddHudTextToAll("flag_tobase_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0, 2) end AddHudTimerToAll("flag_tobase_timer", current_timer, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0, 3) AddHudIconToAll(hudstatusicontobase, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign ) end RemoveHudItemFromAll( "Zone_Team"..attackers ) RemoveHudItemFromAll( "Zone_Team"..defenders ) RemoveHudItemFromAll( "Zone_Phase"..attackers ) RemoveHudItemFromAll( "Zone_Phase"..defenders ) od_hudstatusiconx = -28 od_hudstatusicony = 38 od_hudstatusiconw = 24 od_hudstatusiconh = 24 od_hudstatusiconalign = 3 RemoveHudItemFromAll("cap_timer") RemoveHudItemFromAll("cap_timer_text") if cap_timeleft > 0 then AddHudTextToAll("cap_timer_text", "Time left", 40, od_hudstatusicony, 2, 0, 2) AddHudTimerToAll("cap_timer", cap_timeleft, -1, 40, od_hudstatusicony+10, 2, 0, 3) end AddHudIconToTeam( GetTeam(attackers), "hud_offense.vtf", "Zone_Team"..attackers, od_hudstatusiconx, od_hudstatusicony, od_hudstatusiconw, od_hudstatusiconh, od_hudstatusiconalign ) AddHudIconToTeam( GetTeam(attackers), "hud_cp_"..phase..".vtf", "Zone_Phase"..attackers, od_hudstatusiconx + 2, od_hudstatusicony + 2, 20, 20, od_hudstatusiconalign ) AddHudIconToTeam( GetTeam(defenders), "hud_defense.vtf", "Zone_Team"..defenders, od_hudstatusiconx, od_hudstatusicony, od_hudstatusiconw, od_hudstatusiconh, od_hudstatusiconalign ) AddHudIconToTeam( GetTeam(defenders), "hud_cp_"..phase..".vtf", "Zone_Phase"..defenders, od_hudstatusiconx + 2, od_hudstatusicony + 2, 20, 20, od_hudstatusiconalign ) end