fortressforever-scripts/maps/ff_palermo.lua

194 lines
No EOL
5.5 KiB
Lua

-- ff_palermo.lua
-----------------------------------------------------------------------------
-- includes
-----------------------------------------------------------------------------
IncludeScript("base_id");
IncludeScript("base_respawnturret");
IncludeScript("base_location");
-----------------------------------------------------------------------------
-- globals
-----------------------------------------------------------------------------
DEFENDERS_OBJECTIVE_ONCAP = true
DEFENDERS_OBJECTIVE_ONCARRIER = false --set to true to follow flag when carried
DEFENDERS_OBJECTIVE_ONFLAG = false --set to true to follow flag ALWAYS
-- custom startup
local startup_base = startup
function startup()
startup_base()
-- palermo specific stuff
-- lower trigger_hurt damage in water
OutputEvent( "trigger_hurt", "SetDamage", "42" )
end
palammopack = genericbackpack:new({
grenades = 20,
nails = 50,
shells = 100,
rockets = 15,
cells = 70,
model = "models/items/backpack/backpack.mdl",
materializesound = "Item.Materialize",
touchsound = "Backpack.Touch"
})
palgrenadepackone = genericbackpack:new({
grenades = 20,
nails = 50,
shells = 50,
rockets = 20,
mancannons = 1,
gren1 = 2,
gren2 = 1,
armor = 50,
health = 25,
respawntime = 30,
model = "models/items/backpack/backpack.mdl",
materializesound = "Item.Materialize",
touchsound = "Backpack.Touch"
})
attackers_palgrenadepackone = idbackpack:new({
team = attackers,
grenades = 20,
nails = 50,
shells = 50,
rockets = 20,
mancannons = 1,
gren1 = 2,
gren2 = 1,
armor = 50,
health = 25,
respawntime = 30,
model = "models/items/backpack/backpack.mdl",
materializesound = "Item.Materialize",
touchsound = "Backpack.Touch"
})
palammotypeone = genericbackpack:new({
grenades = 20,
nails = 50,
shells = 50,
rockets = 20,
cells = 75,
armor = 50,
health = 25,
respawntime = 7,
model = "models/items/backpack/backpack.mdl",
materializesound = "Item.Materialize",
touchsound = "Backpack.Touch"
})
attackers_palammotypeone = idbackpack:new({
team = attackers,
grenades = 20,
nails = 50,
shells = 50,
rockets = 20,
cells = 75,
armor = 50,
health = 25,
respawntime = 7,
model = "models/items/backpack/backpack.mdl",
materializesound = "Item.Materialize",
touchsound = "Backpack.Touch"
})
--This is called from base_id to do map-specific stuff
function onroundreset()
-- close the holes
OutputEvent("cp1_detpack_hole", "Enable")
OutputEvent("cp4_detpack_hole", "Enable")
--re-enable detpack relays
OutputEvent("cp1_detpack_relay", "Enable")
OutputEvent("cp4_detpack_relay", "Enable")
-- Reset The Turrets(?) and Bags
respawnturret_attackers = base_respawnturret:new({ team = attackers })
respawnturret_defenders = base_respawnturret:new({ team = defenders })
attackers_palammotypeone.team = attackers
attackers_palgrenadepackone.team = attackers
end
bellbutton = func_button:new({})
function bellbutton:ondamage() return true end
---------------------------
--Detpack shit
---------------------------
detpack_trigger = trigger_ff_script:new({ prefix = "" })
function detpack_trigger:onexplode( trigger_entity )
if IsDetpack( trigger_entity ) then
local detpack = CastToDetpack( trigger_entity )
if detpack:GetTeamId() == attackers then
--This triggers a logic_relay in the map, which opens the hole and can trigger any other effect.
OutputEvent( self.prefix .. "_detpack_relay", "Trigger" )
end
end
return EVENT_ALLOWED
end
--The detpack trigger names. Only attakers can activate them.
--Prefix is used so each detpack area can have a different effect.
cp1_detpack_trigger = detpack_trigger:new({ prefix = "cp1" })
cp4_detpack_trigger = detpack_trigger:new({ prefix = "cp4" })
---------------------------------------------------
--Respawn the player if they go too far out to sea.
---------------------------------------------------
out_of_bounds = trigger_ff_script:new({})
function out_of_bounds:allowed( touch_entity )
if IsPlayer( touch_entity ) then
local player = CastToPlayer( touch_entity )
return EVENT_ALLOWED
end
return EVENT_DISALLOWED
end
function out_of_bounds:ontrigger( triggering_entity )
if IsPlayer( triggering_entity ) then
local player = CastToPlayer( triggering_entity )
ApplyToPlayer( player, { AT.kRespawnPlayers } )
end
end
cp1_detpack_trigger_hint = trigger_ff_script:new({})
function cp1_detpack_trigger_hint:ontrigger( triggering_entity )
if IsPlayer( triggering_entity ) then
local player = CastToPlayer( triggering_entity )
DisplayMessage( player, "A demoman on the attacking team can open this passage by laying a detpack here." )
end
end
cp4_detpack_trigger_hint = cp1_detpack_trigger_hint
------------------------------------------
--return the flag if it goes in the water.
------------------------------------------
--hijacking this base_id function to add in the last line
function setup_return_timer()
RemoveSchedule( "timer_tobase_schedule" )
current_timer = FLAG_RETURN_TIME
AddScheduleRepeatingNotInfinitely( "timer_return_schedule", 1, timer_schedule, current_timer)
--five seconds should be enough time to check.
AddSchedule( "water_check", 5, check_flag_position)
end
function check_flag_position()
local flag = GetInfoScriptByName(current_flag)
local o = flag:GetOrigin()
-- -256 is Palermo's sea level
if o.z < -256 then
flag:Return()
BroadCastMessage("The flag was lost at sea and has returned.")
end
end