mirror of
https://github.com/fortressforever/fortressforever-scripts.git
synced 2024-11-22 20:51:28 +00:00
279 lines
No EOL
9.3 KiB
Lua
279 lines
No EOL
9.3 KiB
Lua
|
|
-- base_shutdown.lua
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- includes
|
|
-----------------------------------------------------------------------------
|
|
IncludeScript("base_ctf");
|
|
IncludeScript("base_location");
|
|
IncludeScript("base_respawnturret");
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- global overrides
|
|
-----------------------------------------------------------------------------
|
|
POINTS_PER_CAPTURE = 10;
|
|
FLAG_RETURN_TIME = 60;
|
|
SECURITY_LENGTH = 45;
|
|
|
|
local base_shutdown_base = {}
|
|
base_shutdown_base.startup = startup
|
|
|
|
function startup()
|
|
if type(base_shutdown_base.startup) == "function" then
|
|
-- call the saved function
|
|
base_shutdown_base.startup()
|
|
end
|
|
|
|
-- this will take care of lights, etc when map loads or round gets restarted/prematch ends
|
|
security_on("red")
|
|
security_on("blue")
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Security events
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- called when security gets turned off (team is a string prefix, like "red")
|
|
function security_off( team )
|
|
-- turn off security light, brush, hurt, etc
|
|
OutputEvent(team.."_security_light", "TurnOff")
|
|
OutputEvent(team.."_security_brush", "Disable")
|
|
OutputEvent(team.."_security_hurt", "Disable")
|
|
OutputEvent(team.."_laser_hurt", "Disable") -- a possible alias
|
|
|
|
-- get the clip entities
|
|
local clips = Collection()
|
|
local clipname = team.."_security_clip"
|
|
clips:GetByName({clipname})
|
|
|
|
for clip in clips.items do
|
|
clip = CastToTriggerClip(clip)
|
|
if clip and _G[clipname] and _G[clipname].clipflags then
|
|
-- clear flags, but send a dummy flag (for some reason with zero flags it blocks everything)
|
|
clip:SetClipFlags({ClipFlags.kClipTeamBlue})
|
|
end
|
|
end
|
|
end
|
|
|
|
-- called when security gets turned on (team is a string prefix, like "red")
|
|
function security_on( team )
|
|
-- turn on security light, brush, hurt, etc
|
|
OutputEvent(team.."_security_light", "TurnOn")
|
|
OutputEvent(team.."_security_brush", "Enable")
|
|
OutputEvent(team.."_security_hurt", "Enable")
|
|
OutputEvent(team.."_laser_hurt", "Enable") -- a possible alias
|
|
|
|
-- get the clip entities
|
|
local clips = Collection()
|
|
local clipname = team.."_security_clip"
|
|
clips:GetByName({clipname})
|
|
|
|
for clip in clips.items do
|
|
clip = CastToTriggerClip(clip)
|
|
if clip and _G[clipname] and _G[clipname].clipflags then
|
|
-- reset flags to normal
|
|
clip:SetClipFlags(_G[clipname].clipflags)
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Buttons
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- base button stuff (common functionality)
|
|
button_common = func_button:new({ team = Team.kUnassigned })
|
|
|
|
function button_common:allowed( allowed_entity )
|
|
if IsPlayer( allowed_entity ) then
|
|
local player = CastToPlayer( allowed_entity )
|
|
if player:GetTeamId() == self.team and player:IsAlive() then
|
|
return EVENT_ALLOWED
|
|
end
|
|
end
|
|
|
|
return EVENT_DISALLOWED
|
|
end
|
|
|
|
function button_common:onfailuse( use_entity )
|
|
if IsPlayer( use_entity ) then
|
|
local player = CastToPlayer( use_entity )
|
|
BroadCastMessageToPlayer( player, "#FF_NOTALLOWEDBUTTON" )
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Button inputs (touch, use, damage etc.)
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- red button
|
|
button_red = button_common:new({
|
|
team = Team.kBlue,
|
|
sec_up = true,
|
|
sec_down_icon = "hud_secdown.vtf",
|
|
sec_up_icon = "hud_secup_red.vtf",
|
|
iconx = 60,
|
|
icony = 30,
|
|
iconw = 16,
|
|
iconh = 16,
|
|
iconalign = 3
|
|
})
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Button responses
|
|
-----------------------------------------------------------------------------
|
|
function button_red:onin()
|
|
if SECURITY_LENGTH == 60 or SECURITY_LENGTH == 30 then
|
|
BroadCastMessage( "#FF_RED_SEC_"..SECURITY_LENGTH )
|
|
else
|
|
BroadCastMessage( "#FF_RED_SECURITY_DEACTIVATED" )
|
|
end
|
|
SpeakAll( "SD_REDDOWN" )
|
|
|
|
self.sec_up = false
|
|
|
|
RemoveHudItemFromAll( "red-sec-up")
|
|
AddHudIconToAll( self.sec_down_icon, "red-sec-down", self.iconx, self.icony, self.iconw, self.iconh, self.iconalign )
|
|
LogLuaEvent(0, 0, "security_down", "team", "red")
|
|
|
|
security_off("red")
|
|
end
|
|
|
|
function button_red:onout()
|
|
BroadCastMessage( "#FF_RED_SECURITY_ACTIVATED" )
|
|
SpeakAll( "SD_REDUP" )
|
|
|
|
self.sec_up = true
|
|
|
|
RemoveHudItemFromAll( "red-sec-down" )
|
|
AddHudIconToAll( self.sec_up_icon, "red-sec-up", self.iconx, self.icony, self.iconw, self.iconh, self.iconalign )
|
|
LogLuaEvent(0, 0, "security_up", "team", "red")
|
|
|
|
security_on("red")
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Button inputs (touch, use, damage etc.)
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- blue button
|
|
button_blue = button_common:new({
|
|
team = Team.kRed,
|
|
sec_up = true,
|
|
sec_down_icon = "hud_secdown.vtf",
|
|
sec_up_icon = "hud_secup_blue.vtf",
|
|
iconx = 60,
|
|
icony = 30,
|
|
iconw = 16,
|
|
iconh = 16,
|
|
iconalign = 2
|
|
})
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Button responses
|
|
-----------------------------------------------------------------------------
|
|
function button_blue:onin()
|
|
if SECURITY_LENGTH == 60 or SECURITY_LENGTH == 30 or SECURITY_LENGTH == 40 then
|
|
BroadCastMessage( "#FF_BLUE_SEC_"..SECURITY_LENGTH )
|
|
else
|
|
BroadCastMessage( "#FF_BLUE_SECURITY_DEACTIVATED" )
|
|
end
|
|
SpeakAll( "SD_BLUEDOWN" )
|
|
|
|
self.sec_up = false
|
|
|
|
RemoveHudItemFromAll( "blue-sec-up")
|
|
AddHudIconToAll( self.sec_down_icon, "blue-sec-down", self.iconx, self.icony, self.iconw, self.iconh, self.iconalign )
|
|
LogLuaEvent(0, 0, "security_down", "team", "blue")
|
|
|
|
security_off("blue")
|
|
end
|
|
|
|
function button_blue:onout()
|
|
BroadCastMessage( "#FF_BLUE_SECURITY_ACTIVATED" )
|
|
SpeakAll( "SD_BLUEUP" )
|
|
|
|
self.sec_up = true
|
|
|
|
RemoveHudItemFromAll( "blue-sec-down")
|
|
AddHudIconToAll( self.sec_up_icon, "blue-sec-up", self.iconx, self.icony, self.iconw, self.iconh, self.iconalign )
|
|
LogLuaEvent(0, 0, "security_up", "team", "blue")
|
|
|
|
security_on("blue")
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Trigger-based security toggling
|
|
-----------------------------------------------------------------------------
|
|
|
|
base_security_trigger = not_team_only_trigger:new({ button = "" })
|
|
|
|
function base_security_trigger:ontrigger( player )
|
|
-- only take sec down if its up currently
|
|
local button = _G[self.button]
|
|
if button and button.sec_up then
|
|
self:onsecuritydown( player )
|
|
end
|
|
end
|
|
|
|
function base_security_trigger:onsecuritydown( player )
|
|
-- call the button's onin directly
|
|
local button = _G[self.button]
|
|
button.onin( button )
|
|
AddSchedule( self.button.."_security", SECURITY_LENGTH, function() self:onsecurityup() end )
|
|
end
|
|
function base_security_trigger:onsecurityup()
|
|
-- call the button's onout directly
|
|
local button = _G[self.button]
|
|
button.onout( button )
|
|
end
|
|
|
|
red_security_trigger = base_security_trigger:new( { team = Team.kRed, button = "button_red" } )
|
|
blue_security_trigger = base_security_trigger:new( { team = Team.kBlue, button = "button_blue" } )
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Hurts
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- red lasers hurt blue and vice-versa
|
|
red_security_hurt = not_red_trigger:new({})
|
|
blue_security_hurt = not_blue_trigger:new({})
|
|
-- the trigger_hurts can also be named like this
|
|
red_laser_hurt = red_security_hurt
|
|
blue_laser_hurt = blue_security_hurt
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- Clips
|
|
-----------------------------------------------------------------------------
|
|
|
|
red_security_clip = clip_red:new()
|
|
blue_security_clip = clip_blue:new()
|
|
|
|
-------------------------
|
|
-- flaginfo
|
|
-------------------------
|
|
|
|
--flaginfo runs whenever the player spawns or uses the flaginfo command.
|
|
--Right now it just refreshes the HUD items; this ensures that players who just joined the server have the right information
|
|
function flaginfo( player_entity )
|
|
flaginfo_base(player_entity) --see base_teamplay.lua
|
|
|
|
local player = CastToPlayer( player_entity )
|
|
|
|
RemoveHudItem( player, "red-sec-down" )
|
|
RemoveHudItem( player, "blue-sec-down" )
|
|
RemoveHudItem( player, "red-sec-up" )
|
|
RemoveHudItem( player, "blue-sec-up" )
|
|
|
|
if button_blue.sec_up == true then
|
|
AddHudIcon( player, button_blue.sec_up_icon, "blue-sec-up", button_blue.iconx, button_blue.icony, button_blue.iconw, button_blue.iconh, button_blue.iconalign )
|
|
else
|
|
AddHudIcon( player, button_blue.sec_down_icon, "blue-sec-down", button_blue.iconx, button_blue.icony, button_blue.iconw, button_blue.iconh, button_blue.iconalign )
|
|
end
|
|
|
|
if button_red.sec_up == true then
|
|
AddHudIcon( player, button_red.sec_up_icon, "red-sec-up", button_red.iconx, button_red.icony, button_red.iconw, button_red.iconh, button_red.iconalign )
|
|
else
|
|
AddHudIcon( player, button_red.sec_down_icon, "red-sec-down", button_red.iconx, button_red.icony, button_red.iconw, button_red.iconh, button_red.iconalign )
|
|
end
|
|
end |