fortressforever-scripts/maps/includes/base_ad.lua

856 lines
30 KiB
Lua

-- base_ad.lua
-- Attack / Defend gametype
-----------------------------------------------------------------------------
-- includes
-----------------------------------------------------------------------------
IncludeScript("base_teamplay")
-----------------------------------------------------------------------------
-- globals
-----------------------------------------------------------------------------
if NUM_PHASES == nil then NUM_PHASES = 3; end
if INITIAL_ROUND_LENGTH == nil then INITIAL_ROUND_LENGTH = 90
POINTS_PER_CAPTURE = 25
POINTS_PER_PERIOD = 1
POSTCAP_TIMER = 2
if ATTACKERS == nil then ATTACKERS = Team.kBlue; end
if DEFENDERS == nil then DEFENDERS = Team.kRed; end
--if MAP_LENGTH == nil then MAP_LENGTH = 1436; end -- 23 minutes 56 seconds, 4 seconds less than the default timelimit of 24 minutes.
if ATTACKERS_OBJECTIVE_ENTITY == nil then ATTACKERS_OBJECTIVE_ENTITY = nil end
if DEFENDERS_OBJECTIVE_ENTITY == nil then DEFENDERS_OBJECTIVE_ENTITY = nil end
-- _ONCAP set to true; Defenders should always point to cap
if DEFENDERS_OBJECTIVE_ONCAP == nil then DEFENDERS_OBJECTIVE_ONCAP = true end
-- _OBJECTIVE_ONCARRIER and _ONFLAG set to false to keep objective on cap
if DEFENDERS_OBJECTIVE_ONFLAG == nil then DEFENDERS_OBJECTIVE_ONFLAG = false end
if DEFENDERS_OBJECTIVE_ONCARRIER == nil then DEFENDERS_OBJECTIVE_ONCARRIER = false end
INITIAL_FUSE_TIMER = 80
BLOW_CP1_ROUTE_TIMER = 300
BLOW_CP2_ROUTE_TIMER = 780
allow_win = true
phase = 1
current_timer = 0
carried_by = nil
function startup( )
SetGameDescription( "Attack Defend" )
-- 4 seconds less than mp_timelimit, just as was the case when it was fixed (I assume it always takes 4 seconds to initialise?)
MAP_LENGTH = (60 * GetConvar( "mp_timelimit" )) - 4;
PERIOD_TIME = MAP_LENGTH * POINTS_PER_PERIOD / 100;
-- set up team limit
-- disable all teams
for i = Team.kBlue, Team.kGreen do
local team = GetTeam( i )
if i then
team:SetPlayerLimit( -1 )
end
end
-- then re-enable attackers/defenders
local team = GetTeam( ATTACKERS )
team:SetPlayerLimit( 0 )
team:SetClassLimit( Player.kCivilian, -1 )
local team = GetTeam( DEFENDERS )
team:SetPlayerLimit( 0 )
team:SetClassLimit( Player.kCivilian, -1 )
team:SetClassLimit(Player.kScout, -1)
-- Should this be map specific?
SetTeamName( ATTACKERS, "#FF_Attackers")
SetTeamName( DEFENDERS, "#FF_Defenders" )
-- start the timer for the points
AddScheduleRepeating( "addpoints", PERIOD_TIME, addpoints )
setup_door_timer( "cp1_gate", INITIAL_ROUND_LENGTH )
setup_map_timers()
allow_win = true
cp1_flag.enabled = true
cp1_flag.team = ATTACKERS
for i,v in ipairs({"cp1_flag", "cp2_flag", "cp3_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
-- Remove future phase flags
flag_remove( "cp2_flag" )
flag_remove( "cp3_flag" )
-- add map initialise stuff. Needs to be done via lua for synchronisation
AddSchedule("blow_first_gate", INITIAL_FUSE_TIMER, blow_first_gate )
AddSchedule("blow_cp1_extra_route", BLOW_CP1_ROUTE_TIMER, blow_cp1_extra_route )
AddSchedule("blow_cp2_extra_route", BLOW_CP2_ROUTE_TIMER, blow_cp2_extra_route )
ATTACKERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" )
UpdateDefendersObjective()
UpdateTeamObjectiveIcon( GetTeam(ATTACKERS), ATTACKERS_OBJECTIVE_ENTITY )
end
function blow_first_gate( )
OutputEvent( "fuse01", "StartForward" ) -- delay of 80 secs
end
function blow_cp1_extra_route( )
OutputEvent( "cp1_extraroute", "Break" ) -- delay of 300 secs
end
function blow_cp2_extra_route( )
OutputEvent( "cp2_extraroute", "Break" ) -- delay of 780 secs
end
-----------------------------------------
-- Remove a flag by name
-----------------------------------------
function flag_remove( flag_name )
local flag = GetInfoScriptByName( flag_name )
if flag then
flag:Remove()
_G[flag_name].enabled = false
end
end
-----------------------------------------
-- Restore a flag by name
-----------------------------------------
function flag_restore( flag_name )
local flag = GetInfoScriptByName( flag_name )
if flag then
flag:Restore()
_G[flag_name].enabled = true
end
end
-----------------------------------------
--
-----------------------------------------
function player_spawn( player_entity )
local player = CastToPlayer( player_entity )
player:AddHealth( 400 )
player:AddArmor( 400 )
-- Remove stuff
player:RemoveAmmo( Ammo.kNails, 400 )
player:RemoveAmmo( Ammo.kShells, 400 )
player:RemoveAmmo( Ammo.kRockets, 400 )
player:RemoveAmmo( Ammo.kCells, 400 )
player:RemoveAmmo( Ammo.kGren2, 4 )
-- Add items (similar to both teams)
player:AddAmmo( Ammo.kShells, 200 )
player:AddAmmo( Ammo.kRockets, 30 )
player:AddAmmo( Ammo.kNails, 200 )
-- Defenders get...
if player:GetTeamId() == DEFENDERS then
-- Player is at full armor now, so we can
-- easily reduce by some percent
-- but were not going to because
-- theres no reason to do so
-- player:RemoveArmor( ( player:GetArmor() * .25 ) )
player:RemoveAmmo( Ammo.kGren1, 4 )
player:AddAmmo( Ammo.kCells, 200 )
elseif player:GetTeamId() == ATTACKERS then
-- Attackers get...
player:AddAmmo( Ammo.kCells, 200 )
end
if player:GetTeamId() == ATTACKERS then
UpdateObjectiveIcon( player, ATTACKERS_OBJECTIVE_ENTITY )
elseif player:GetTeamId() == DEFENDERS then
UpdateObjectiveIcon( player, DEFENDERS_OBJECTIVE_ENTITY )
end
end
function addpoints( )
local team = GetTeam( DEFENDERS )
team:AddScore( POINTS_PER_PERIOD )
end
-----------------------------------------
-- base flag
-----------------------------------------
-- default
base_ad_flag = baseflag:new({
modelskin = teamskins[ATTACKERS],
name = "base_ad_flag",
team = ATTACKERS,
phase = 1,
hudicon = team_hudicons[ATTACKERS],
touchflags = {AllowFlags.kOnlyPlayers, AllowFlags.kBlue, AllowFlags.kGreen, AllowFlags.kYellow}
})
-- if ATTACKERS == Team.kRed then
-- ConsoleToAll("Setting up RED ATTACKERS FLAG")
-- base_ad_flag.hudicon = "hud_flag_red.vtf"
-- base_ad_flag.touchflags = {AllowFlags.kOnlyPlayers, AllowFlags.kRed}
-- elseif ATTACKERS == Team.kGreen then
-- ConsoleToAll("Setting up GREEN ATTACKERS FLAG")
-- base_ad_flag.hudicon = "hud_flag_green.vtf"
-- base_ad_flag.touchflags = {AllowFlags.kOnlyPlayers, AllowFlags.kGreen}
-- elseif ATTACKERS == Team.kBlue then
-- ConsoleToAll("Setting up BLUE ATTACKERS FLAG")
-- base_ad_flag.hudicon = "hud_flag_blue.vtf"
-- base_ad_flag.touchflags = {AllowFlags.kOnlyPlayers, AllowFlags.kBlue}
-- elseif ATTACKERS == Team.kYellow then
-- ConsoleToAll("Setting up Yellow ATTACKERS FLAG")
-- base_ad_flag.hudicon = "hud_flag_yellow.vtf"
-- base_ad_flag.touchflags = {AllowFlags.kOnlyPlayers, AllowFlags.kYellow}
-- end
end
function base_ad_flag:dropitemcmd( owner_entity )
-- DO NOTHING!
-- -- throw the flag
-- local flag = CastToInfoScript(entity)
-- flag:Drop(FLAG_RETURN_TIME, FLAG_THROW_SPEED)
--
-- if IsPlayer( owner_entity ) then
-- local player = CastToPlayer( owner_entity )
-- player:RemoveEffect( EF.kSpeedlua1 )
--
-- -- Remove any hud icons with identifier "base_ad_flag"
-- RemoveHudItem( player, "base_ad_flag" )
-- end
end
function base_ad_flag:touch( touch_entity )
-- should only respond to players
if (IsPlayer(touch_entity) == false) then
return
end
local player = CastToPlayer(touch_entity)
local teamId = player:GetTeamId()
-- pickup if they can
if self.notouch then
if self.notouch[player:GetId()] then return; end
end
if teamId == ATTACKERS and phase == self.phase then
if phase == 1 then
--BroadCastMessageToPlayer(player, "#FF_AD_TAKE1")
SmartMessage(player, "#FF_AD_TAKE1", "#FF_TEAMPICKUP", "#FF_OTHERTEAMPICKUP", Color.kGreen, Color.kGreen, Color.kRed)
elseif phase == 2 then
--BroadCastMessageToPlayer(player, "#FF_AD_TAKE2")
SmartMessage(player, "#FF_AD_TAKE2", "#FF_TEAMPICKUP", "#FF_OTHERTEAMPICKUP", Color.kGreen, Color.kGreen, Color.kRed)
else
--BroadCastMessageToPlayer(player, "#FF_AD_TAKE3")
SmartMessage(player, "#FF_AD_TAKE3", "#FF_TEAMPICKUP", "#FF_OTHERTEAMPICKUP", Color.kGreen, Color.kGreen, Color.kRed)
end
SmartSound(player, "yourteam.flagstolen", "yourteam.flagstolen", "otherteam.flagstolen")
RandomFlagTouchSpeak( player )
-- have player pick up the flag and lose his disguise (for spy class)
local flag = CastToInfoScript( entity )
if flag ~= nil then
flag:Pickup( player)
player:AddEffect( EF.kSpeedlua1, -1, 0, 0.65 )
player:SetDisguisable( false )
-- if the player is a spy, then force him to lose his cloak
player:SetCloakable( false )
self.hudicon = team_hudicons[ATTACKERS]
-- Add hud icon to show we're carrying the flag
AddHudIcon( player, self.hudicon, flag:GetName(), self.hudx, self.hudy, self.hudstatusiconw, self.hudstatusiconh, self.hudalign )
-- change objective icons
ATTACKERS_OBJECTIVE_ENTITY = player
UpdateDefendersObjective()
UpdateTeamObjectiveIcon( GetTeam(ATTACKERS), ATTACKERS_OBJECTIVE_ENTITY )
UpdateObjectiveIcon( player, GetEntityByName( "cp"..self.phase.."_cap" ) )
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());
-- show on the deathnotice board
--ObjectiveNotice( player, "grabbed the flag" )
carried_by = player:GetName()
destroy_return_timer()
update_hud()
end
end
end
function base_ad_flag:onownerdie( owner_entity )
if IsPlayer( owner_entity ) then
local player = CastToPlayer( owner_entity )
player:RemoveEffect( EF.kSpeedlua1 )
player:SetDisguisable( true )
player:SetCloakable( true )
-- Remove any hud icons with identifier "base_ad_flag"
RemoveHudItem( player, "base_ad_flag" )
-- drop the flag
local flag = CastToInfoScript(entity)
flag:Drop(FLAG_RETURN_TIME, 0.0)
-- change objective icon
ATTACKERS_OBJECTIVE_ENTITY = flag
UpdateDefendersObjective()
UpdateObjectiveIcon( player, nil )
UpdateTeamObjectiveIcon( GetTeam(ATTACKERS), ATTACKERS_OBJECTIVE_ENTITY )
-- remove flag icon from hud
RemoveHudItem( player, flag:GetName() )
RemoveHudItemFromAll( flag:GetName() .. "_c" )
AddHudIconToAll( self.hudstatusicondropped, ( flag:GetName() .. "_d" ), self.hudstatusiconx, self.hudstatusicony, self.hudstatusiconw, self.hudstatusiconh, self.hudstatusiconalign )
self.status = 2
setup_return_timer()
update_hud()
end
end
function base_ad_flag: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 )
RemoveHudItemFromAll( flag:GetName() .. "_d" )
RemoveHudItemFromAll( flag:GetName() .. "_c" )
AddHudIconToAll( self.hudstatusiconhome, ( flag:GetName() .. "_h" ), self.hudstatusiconx, self.hudstatusicony, self.hudstatusiconw, self.hudstatusiconh, self.hudstatusiconalign )
self.status = 0
-- change objective icon
ATTACKERS_OBJECTIVE_ENTITY = flag
UpdateDefendersObjective()
UpdateTeamObjectiveIcon( GetTeam(ATTACKERS), ATTACKERS_OBJECTIVE_ENTITY )
LogLuaEvent(0, 0, "flag_returned","flag_name",flag:GetName());
destroy_return_timer()
update_hud()
end
-----------------------------------------
-- base capture point
-----------------------------------------
base_ad_cap = basecap:new({
phase = 0,
doorname = "cp2_gate",
duration = 90,
team = ATTACKERS
})
function base_ad_cap:allowed ( allowed_entity )
if phase ~= self.phase then
return false
end
-- only respond to players
if ( IsPlayer( allowed_entity ) == false ) then
return false
end
if allow_win == false then
return false
end
local player = CastToPlayer( allowed_entity )
-- check if the player has the flag
for i,v in ipairs( self.item ) do
if player:HasItem( v ) then
player:RemoveEffect( EF.kSpeedlua1 )
-- Remove any hud icons with identifier "base_ad_flag"
RemoveHudItem( player, "base_ad_flag" )
return true
end
end
return false
end
function base_ad_cap:oncapture( player, item )
if phase == 1 then
map_cap1()
elseif phase == 2 then
map_cap2()
else
allow_win = false
map_attackers_win()
end
player:AddFortPoints(500, "#FF_FORTPOINTS_CAPTUREPOINT")
if self.closedoor then
CloseDoor(self.closedoor)
end
-- remove objective icon
ATTACKERS_OBJECTIVE_ENTITY = nil
DEFENDERS_OBJECTIVE_ENTITY = nil
UpdateTeamObjectiveIcon( GetTeam(ATTACKERS), ATTACKERS_OBJECTIVE_ENTITY )
UpdateTeamObjectiveIcon( GetTeam(DEFENDERS), DEFENDERS_OBJECTIVE_ENTITY )
-- Remove previous phase flag
flag_remove( item )
-- Delay for a couple seconds after the cap
AddSchedule( "cap_delay_timer", POSTCAP_TIMER, cap_delay_timer, self )
end
-----------------------------------------
-- waste a couple seconds before respawning/ending
-----------------------------------------
function cap_delay_timer( cap )
if phase == NUM_PHASES then
-- it's the last round. end and stuff
GoToIntermission()
RemoveSchedule( "addpoints" )
else
phase = phase + 1
-- setup double cap points for the last round
if phase == NUM_PHASES then
POINTS_PER_CAPTURE = POINTS_PER_CAPTURE * 2
end
-- Restore next flag
if phase == 2 then
flag_restore( "cp2_flag" )
elseif phase == 3 then
flag_restore( "cp3_flag" )
end
-- update objective icon
ATTACKERS_OBJECTIVE_ENTITY = GetEntityByName( "cp"..phase.."_flag" )
UpdateDefendersObjective()
setup_door_timer( cap.doorname, cap.duration)
ApplyToAll( { AT.kRemovePacks, AT.kRemoveProjectiles, AT.kRespawnPlayers, AT.kRemoveBuildables, AT.kRemoveRagdolls, AT.kStopPrimedGrens, AT.kReloadClips } )
end
end
function setup_door_timer( doorname, duration )
AddSchedule( "round_start", duration, round_start, doorname )
if duration > 65 then AddSchedule( "round_60secwarn", duration-60, round_60secwarn ) end
if duration > 35 then AddSchedule( "round_30secwarn", duration-30, round_30secwarn ) end
if duration > 15 then AddSchedule( "round_10secwarn", duration-10, round_10secwarn ) end
end
function round_start( doorname )
BroadCastMessage( "#FF_AD_GATESOPEN" )
BroadCastSound( "otherteam.flagstolen" )
SpeakAll( "AD_GATESOPEN" )
OpenDoor( doorname )
end
function round_60secwarn( )
BroadCastMessage( "#FF_ROUND_60SECWARN" )
end
function round_30secwarn( )
BroadCastMessage( "#FF_ROUND_30SECWARN" )
end
function round_10secwarn( )
BroadCastMessage( "#FF_ROUND_10SECWARN" )
end
----------------
-- map timers --
----------------
function setup_map_timers( )
local timelimit = MAP_LENGTH
AddSchedule( "map_10mintimer", timelimit-600, map_timewarn, 600 )
AddSchedule( "map_5mintimer", timelimit-300, map_timewarn, 300 )
AddSchedule( "map_2mintimer", timelimit-120, map_timewarn, 120 )
AddSchedule( "map_60sectimer", timelimit-60, map_timewarn, 60 )
AddSchedule( "map_30sectimer", timelimit-30, map_timewarn, 30 )
AddSchedule( "map_10sectimer", timelimit-10, map_timewarn, 10 )
AddSchedule( "map_9sectimer", timelimit-9, map_timewarn, 9 )
AddSchedule( "map_8sectimer", timelimit-8, map_timewarn, 8 )
AddSchedule( "map_7sectimer", timelimit-7, map_timewarn, 7 )
AddSchedule( "map_6sectimer", timelimit-6, map_timewarn, 6 )
AddSchedule( "map_5sectimer", timelimit-5, map_timewarn, 5 )
AddSchedule( "map_4sectimer", timelimit-4, map_timewarn, 4 )
AddSchedule( "map_3sectimer", timelimit-3, map_timewarn, 3 )
AddSchedule( "map_2sectimer", timelimit-2, map_timewarn, 2 )
AddSchedule( "map_1sectimer", timelimit-1, map_timewarn, 1 )
AddSchedule( "map_timer", timelimit, map_defenders_win )
end
function map_attackers_win( )
RemoveSchedule( "map_10mintimer" )
RemoveSchedule( "map_5mintimer" )
RemoveSchedule( "map_2mintimer" )
RemoveSchedule( "map_60sectimer" )
RemoveSchedule( "map_30sectimer" )
RemoveSchedule( "map_10sectimer" )
RemoveSchedule( "map_9sectimer" )
RemoveSchedule( "map_8sectimer" )
RemoveSchedule( "map_7sectimer" )
RemoveSchedule( "map_6sectimer" )
RemoveSchedule( "map_5sectimer" )
RemoveSchedule( "map_4sectimer" )
RemoveSchedule( "map_3sectimer" )
RemoveSchedule( "map_2sectimer" )
RemoveSchedule( "map_1sectimer" )
RemoveSchedule( "map_timer" )
BroadCastSound( "yourteam.flagcap" )
--BroadCastMessage("#FF_AD_" .. TeamName(ATTACKERS) .. "#FF_WIN")
BroadCastMessage( "#FF_AD_BLUEWIN" )
--SpeakAll( "AD_" .. TeamName( ATTACKERS ) .. "CAP".. TeamName( DEFENDERS ) )
SpeakAll( "AD_CAP" )
end
function map_defenders_win( )
if allow_win == false then
return false
end
--BroadCastSound("yourteam.flagcap")
BroadCastMessage("#FF_AD_REDWIN")
--SpeakAll( "AD_HOLD_" .. TeamName(DEFENDERS) )
SpeakAll( "AD_HOLD" )
allow_win = false
--Defenders wins, call Intermission!
phase = NUM_PHASES
RemoveSchedule( "addpoints" )
addpoints()
AddSchedule( "cap_delay_timer", POSTCAP_TIMER, cap_delay_timer, self )
end
function map_timewarn( time )
BroadCastMessage( "#FF_MAP_" .. time .. "SECWARN" )
SpeakAll( "AD_" .. time .. "SEC" )
end
function map_cap1( )
BroadCastSound( "yourteam.flagcap" )
BroadCastMessage( "#FF_AD_CAP1" )
SpeakAll( "AD_CP1" )
--SpeakAll("AD_CP1_" .. TeamName(ATTACKERS))
end
function map_cap2( )
BroadCastSound( "yourteam.flagcap" )
BroadCastMessage( "#FF_AD_CAP2" )
SpeakAll( "AD_CP2" )
--SpeakAll("AD_CP2_" .. TeamName(ATTACKERS))
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
-----------------------------------------
-- spawn info stuffs
-----------------------------------------
function start_allowedmethod( self, player_entity )
if ( IsPlayer( player_entity ) == false ) then
return false
end
local player = CastToPlayer( player_entity )
local teamId = player:GetTeamId( )
return (teamId == ATTACKERS and phase == 1)
end
function alpha_allowedmethod( self, player_entity )
if ( IsPlayer( player_entity ) == false ) then
return false
end
local player = CastToPlayer( player_entity )
local teamId = player:GetTeamId( )
return (teamId == ATTACKERS and phase == 2)
or (teamId == DEFENDERS and phase == 1)
end
function beta_allowedmethod( self, player_entity )
if ( IsPlayer( player_entity ) == false ) then
return false
end
local player = CastToPlayer( player_entity )
local teamId = player:GetTeamId( )
return (teamId == ATTACKERS and phase == 3)
or (teamId == DEFENDERS and phase == 2)
end
function final_allowedmethod( self, player_entity )
if ( IsPlayer( player_entity ) == false ) then
return false
end
local player = CastToPlayer( player_entity )
local teamId = player:GetTeamId( )
return (teamId == DEFENDERS and phase == 3)
end
function UpdateDefendersObjective()
-- Check to see what Defenders should be focused on and update
local flag = GetInfoScriptByName("cp"..phase.."_flag")
local carried = flag:IsCarried()
if (not carried and DEFENDERS_OBJECTIVE_ONFLAG) or (carried and DEFENDERS_OBJECTIVE_ONCARRIER) then
DEFENDERS_OBJECTIVE_ENTITY = flag
elseif DEFENDERS_OBJECTIVE_ONCAP then
DEFENDERS_OBJECTIVE_ENTITY = GetEntityByName("cp"..phase.."_cap")
else
DEFENDERS_OBJECTIVE_ENTITY = nil
end
UpdateTeamObjectiveIcon( GetTeam(defenders), DEFENDERS_OBJECTIVE_ENTITY )
end
-----------------------------------------
-- instanciate everything
-----------------------------------------
cp1_flag = base_ad_flag:new({ phase = 1 })
cp2_flag = base_ad_flag:new({ phase = 2 })
cp3_flag = base_ad_flag:new({ phase = 3 })
cp1_cap = base_ad_cap:new({ item={"cp1_flag"}, phase = 1, doorname = "cp2_gate", closedoor = "cp1_exit"})
cp2_cap = base_ad_cap:new({ item={"cp2_flag"}, phase = 2, doorname = "cp3_gate", closedoor = "cp2_exit"})
cp3_cap = base_ad_cap:new({ item={"cp3_flag"}, phase = 3, doorname = "", closedoor = "cp3_exit"})
start_door = respawndoor:new({allowed = start_allowedmethod})
start_spawn = {validspawn = start_allowedmethod}
alpha_door = respawndoor:new({allowed = alpha_allowedmethod})
alpha_spawn = {validspawn = alpha_allowedmethod}
beta_door = respawndoor:new({allowed = beta_allowedmethod})
beta_spawn = {validspawn = beta_allowedmethod}
final_door = respawndoor:new({allowed = final_allowedmethod})
final_spawn = {validspawn = final_allowedmethod}
------------------------------------------------
-- hud info
------------------------------------------------
function flaginfo( player_entity )
local player = CastToPlayer( player_entity )
local flag = GetInfoScriptByName("cp"..phase.."_flag")
local flagname = flag:GetName()
attackers = ATTACKERS
defenders = DEFENDERS
--RemoveHudItemFromAll( "background" )
--AddHudIconToAll( "hud_statusbar_256_128.vtf", "background", -64, 32, 128, 70, 3 )
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
if _G[flagname].enabled == true then
if flag:IsCarried() then
AddHudText(player, "flag_carried_by", "#AD_FlagCarriedBy", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
AddHudText(player, "flag_carried_by2", carried_by, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0)
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
AddHudText(player, "flag_return_text", "#AD_FlagReturn", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
AddHudTimer(player, "flag_return_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
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)
AddHudText(player, "flag_athome2", "#AD_ASpawn", text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0)
AddHudIcon(player, hudstatusiconhome, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
end
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
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()
attackers = ATTACKERS
defenders = DEFENDERS
--RemoveHudItemFromAll( "background" )
--AddHudIconToAll( "hud_statusbar_256_128.vtf", "background", -64, 32, 128, 70, 3 )
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
if _G[flagname].enabled == true then
if flag:IsCarried() then
AddHudTextToAll("flag_carried_by", "#AD_FlagCarriedBy", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
AddHudTextToAll("flag_carried_by2", carried_by, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0)
AddHudIconToAll( hudstatusiconcarried, ( "cp_flag_c" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
elseif flag:IsDropped() and _G[flagname].status == 2 then
AddHudTextToAll("flag_return_text", "#AD_FlagReturn", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
AddHudTimerToAll("flag_return_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
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)
AddHudTextToAll("flag_athome2", "#AD_ASpawn", text_hudstatusx, text_hudstatusy+8, text_hudstatusalign, 0)
AddHudIconToAll( hudstatusiconhome, ( "cp_flag_h" ), flag_hudstatusiconx, flag_hudstatusicony, flag_hudstatusiconw, flag_hudstatusiconh, flag_hudstatusiconalign )
end
else
AddHudTextToAll("flag_tobase_text", "#AD_FlagReturnBase", text_hudstatusx, text_hudstatusy, text_hudstatusalign, 0)
AddHudTimerToAll("flag_tobase_timer", current_timer + 1, -1, text_hudstatusx, text_hudstatusy+8, text_hudstatusalign)
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
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