2014-11-30 06:17:28 +00:00
|
|
|
-- ff_monkey.lua
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- includes
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
IncludeScript("base_ctf")
|
|
|
|
IncludeScript("base_location")
|
|
|
|
IncludeScript("base_respawnturret")
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- global overrides
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
POINTS_PER_CAPTURE = 10
|
|
|
|
FLAG_RETURN_TIME = 60
|
|
|
|
|
|
|
|
function startup()
|
|
|
|
SetGameDescription("Capture the Flag")
|
|
|
|
|
|
|
|
-- set up team limits on each team
|
|
|
|
SetPlayerLimit(Team.kBlue, 0)
|
|
|
|
SetPlayerLimit(Team.kRed, 0)
|
|
|
|
SetPlayerLimit(Team.kYellow, -1)
|
|
|
|
SetPlayerLimit(Team.kGreen, -1)
|
|
|
|
|
|
|
|
-- 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)
|
|
|
|
end
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- Pickups
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
monkeypackgeneric = genericbackpack:new({
|
|
|
|
health = 20,
|
|
|
|
armor = 15,
|
|
|
|
grenades = 60,
|
|
|
|
nails = 60,
|
|
|
|
shells = 60,
|
|
|
|
rockets = 60,
|
|
|
|
cells = 60,
|
|
|
|
mancannons = 1,
|
|
|
|
gren1 = 1,
|
|
|
|
gren2 = 1,
|
|
|
|
respawntime = 35,
|
|
|
|
model = "models/items/backpack/backpack.mdl",
|
|
|
|
materializesound = "Item.Materialize",
|
|
|
|
touchsound = "Backpack.Touch",
|
|
|
|
botgoaltype = Bot.kBackPack_Ammo
|
|
|
|
})
|
|
|
|
|
|
|
|
function monkeypackgeneric:dropatspawn() return false end
|
|
|
|
|
|
|
|
redmonkeypack = genericbackpack:new({
|
|
|
|
health = 200,
|
|
|
|
armor = 200,
|
|
|
|
grenades = 200,
|
|
|
|
nails = 200,
|
|
|
|
shells = 200,
|
|
|
|
rockets = 200,
|
|
|
|
cells = 200,
|
2015-08-07 06:57:24 +00:00
|
|
|
respawntime = 7,
|
2014-11-30 06:17:28 +00:00
|
|
|
model = "models/items/backpack/backpack.mdl",
|
|
|
|
materializesound = "Item.Materialize",
|
|
|
|
touchsound = "Backpack.Touch",
|
|
|
|
touchflags = {AllowFlags.kRed},
|
|
|
|
botgoaltype = Bot.kBackPack_Ammo
|
|
|
|
})
|
|
|
|
|
|
|
|
function redmonkeypack:dropatspawn() return false end
|
|
|
|
|
|
|
|
redmonkeypacktoo = genericbackpack:new({
|
|
|
|
health = 20,
|
|
|
|
armor = 15,
|
|
|
|
grenades = 10,
|
|
|
|
nails = 30,
|
|
|
|
shells = 30,
|
|
|
|
rockets = 10,
|
|
|
|
cells = 30,
|
|
|
|
respawntime = 20,
|
|
|
|
model = "models/items/backpack/backpack.mdl",
|
|
|
|
materializesound = "Item.Materialize",
|
|
|
|
touchsound = "Backpack.Touch",
|
|
|
|
touchflags = {AllowFlags.kRed},
|
|
|
|
botgoaltype = Bot.kBackPack_Ammo
|
|
|
|
})
|
|
|
|
|
|
|
|
function redmonkeypacktoo:dropatspawn() return false end
|
|
|
|
|
|
|
|
bluemonkeypack = genericbackpack:new({
|
|
|
|
health = 200,
|
|
|
|
armor = 200,
|
|
|
|
grenades = 200,
|
|
|
|
nails = 200,
|
|
|
|
shells = 200,
|
|
|
|
rockets = 200,
|
|
|
|
cells = 200,
|
2015-08-07 06:57:24 +00:00
|
|
|
respawntime = 7,
|
2014-11-30 06:17:28 +00:00
|
|
|
model = "models/items/backpack/backpack.mdl",
|
|
|
|
materializesound = "Item.Materialize",
|
|
|
|
touchsound = "Backpack.Touch",
|
|
|
|
touchflags = {AllowFlags.kBlue},
|
|
|
|
botgoaltype = Bot.kBackPack_Ammo
|
|
|
|
})
|
|
|
|
|
|
|
|
function bluemonkeypack:dropatspawn() return false end
|
|
|
|
|
|
|
|
bluemonkeypacktoo = genericbackpack:new({
|
|
|
|
health = 20,
|
|
|
|
armor = 15,
|
|
|
|
grenades = 10,
|
|
|
|
nails = 30,
|
|
|
|
shells = 30,
|
|
|
|
rockets = 10,
|
|
|
|
cells = 30,
|
|
|
|
respawntime = 20,
|
|
|
|
model = "models/items/backpack/backpack.mdl",
|
|
|
|
materializesound = "Item.Materialize",
|
|
|
|
touchsound = "Backpack.Touch",
|
|
|
|
touchflags = {AllowFlags.kBlue},
|
|
|
|
botgoaltype = Bot.kBackPack_Ammo
|
|
|
|
})
|
|
|
|
|
|
|
|
function bluemonkeypacktoo:dropatspawn() return false end
|
|
|
|
|
|
|
|
redmonkeygrenades = genericbackpack:new({
|
|
|
|
detpacks = 1,
|
|
|
|
mancannons = 1,
|
|
|
|
gren1 = 4,
|
|
|
|
gren2 = 4,
|
|
|
|
model = "models/items/backpack/backpack.mdl",
|
|
|
|
materializesound = "Item.Materialize",
|
|
|
|
touchsound = "Backpack.Touch",
|
|
|
|
touchflags = {AllowFlags.kRed},
|
2015-07-03 03:08:21 +00:00
|
|
|
respawntime = 30,
|
2014-11-30 06:17:28 +00:00
|
|
|
botgoaltype = Bot.kBackPack_Ammo
|
|
|
|
})
|
|
|
|
|
|
|
|
function redmonkeygrenades:dropatspawn() return false end
|
|
|
|
|
|
|
|
bluemonkeygrenades = genericbackpack:new({
|
|
|
|
detpacks = 1,
|
|
|
|
mancannons = 1,
|
|
|
|
gren1 = 4,
|
|
|
|
gren2 = 4,
|
|
|
|
model = "models/items/backpack/backpack.mdl",
|
|
|
|
materializesound = "Item.Materialize",
|
|
|
|
touchsound = "Backpack.Touch",
|
|
|
|
touchflags = {AllowFlags.kBlue},
|
2015-07-03 03:08:21 +00:00
|
|
|
respawntime = 30,
|
2014-11-30 06:17:28 +00:00
|
|
|
botgoaltype = Bot.kBackPack_Ammo
|
|
|
|
})
|
|
|
|
|
|
|
|
function bluemonkeygrenades:dropatspawn() return false end
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- Locations
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
location_blue_front_door = location_info:new({ text = "Front Door", team = Team.kBlue })
|
|
|
|
location_blue_right_front_door = location_info:new({ text = "Right Front Door", team = Team.kBlue })
|
|
|
|
location_blue_left_front_door = location_info:new({ text = "Left Front Door", team = Team.kBlue })
|
|
|
|
location_blue_ramp_room = location_info:new({ text = "Great Hall", team = Team.kBlue })
|
|
|
|
location_blue_T_route = location_info:new({ text = "'T' Route", team = Team.kBlue })
|
|
|
|
location_blue_upper_spawn = location_info:new({ text = "Upper Spawn", team = Team.kBlue })
|
|
|
|
location_blue_lower_spawn = location_info:new({ text = "Lower Spawn", team = Team.kBlue })
|
|
|
|
location_blue_lower_route = location_info:new({ text = "Lower Route", team = Team.kBlue })
|
|
|
|
location_blue_water_route = location_info:new({ text = "Water Route", team = Team.kBlue })
|
|
|
|
location_blue_flag_room = location_info:new({ text = "Flag Room", team = Team.kBlue })
|
|
|
|
location_blue_pit = location_info:new({ text = "Flag Room Pit", team = Team.kBlue })
|
|
|
|
location_blue_flag_room_catwalk = location_info:new({ text = "Flag Room Catwalks", team = Team.kBlue })
|
|
|
|
location_blue_water_tunnel = location_info:new({ text = "Water Tunnel", team = Team.kBlue })
|
|
|
|
location_blue_yard = location_info:new({ text = "Yard", team = Team.kBlue })
|
|
|
|
|
|
|
|
location_red_front_door = location_info:new({ text = "Front Door", team = Team.kRed })
|
|
|
|
location_red_right_front_door = location_info:new({ text = "Right Front Door", team = Team.kRed })
|
|
|
|
location_red_left_front_door = location_info:new({ text = "Left Front Door", team = Team.kRed })
|
|
|
|
location_red_ramp_room = location_info:new({ text = "Great Hall", team = Team.kRed })
|
|
|
|
location_red_T_route = location_info:new({ text = "'T' Route", team = Team.kRed })
|
|
|
|
location_red_upper_spawn = location_info:new({ text = "Upper Spawn", team = Team.kRed })
|
|
|
|
location_red_lower_spawn = location_info:new({ text = "Lower Spawn", team = Team.kRed })
|
|
|
|
location_red_lower_route = location_info:new({ text = "Lower Route", team = Team.kRed })
|
|
|
|
location_red_water_route = location_info:new({ text = "Water Route", team = Team.kRed })
|
|
|
|
location_red_flag_room = location_info:new({ text = "Flag Room", team = Team.kRed })
|
|
|
|
location_red_pit = location_info:new({ text = "Flag Room Pit", team = Team.kRed })
|
|
|
|
location_red_flag_room_catwalk = location_info:new({ text = "Flag Room Catwalks", team = Team.kRed })
|
|
|
|
location_red_water_tunnel = location_info:new({ text = "Water Tunnel", team = Team.kRed })
|
|
|
|
location_red_yard = location_info:new({ text = "Yard", team = Team.kRed })
|
|
|
|
|
|
|
|
location_river = location_info:new({ text = "River", team = Team.kUnassigned })
|
|
|
|
location_midmap = location_info:new({ text = "Midmap", team = Team.kUnassigned })
|
|
|
|
location_bridge = location_info:new({ text = "Bridge", team = Team.kUnassigned })
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- OFFENSIVE AND DEFENSIVE SPAWNS
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
red_o_only = function(self,player) return ((player:GetTeamId() == Team.kRed) and ((player:GetClass() == Player.kScout) or (player:GetClass() == Player.kMedic) or (player:GetClass() == Player.kSpy) or (player:GetClass() == Player.kDemoman))) end
|
|
|
|
red_d_only = function(self,player) return ((player:GetTeamId() == Team.kRed) and (((player:GetClass() == Player.kScout) == false) and ((player:GetClass() == Player.kMedic) == false) and ((player:GetClass() == Player.kSpy) == false))) end
|
|
|
|
|
|
|
|
red_ospawn = { validspawn = red_o_only }
|
|
|
|
red_dspawn = { validspawn = red_d_only }
|
|
|
|
|
|
|
|
blue_o_only = function(self,player) return ((player:GetTeamId() == Team.kBlue) and ((player:GetClass() == Player.kScout) or (player:GetClass() == Player.kMedic) or (player:GetClass() == Player.kSpy) or (player:GetClass() == Player.kDemoman))) end
|
|
|
|
blue_d_only = function(self,player) return ((player:GetTeamId() == Team.kBlue) and (((player:GetClass() == Player.kScout) == false) and ((player:GetClass() == Player.kMedic) == false) and ((player:GetClass() == Player.kSpy) == false))) end
|
|
|
|
|
|
|
|
blue_ospawn = { validspawn = blue_o_only }
|
|
|
|
blue_dspawn = { validspawn = blue_d_only }
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
-- respawn shields
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
KILL_KILL_KILL = trigger_ff_script:new({ team = Team.kUnassigned })
|
|
|
|
|
|
|
|
function KILL_KILL_KILL:allowed( activator )
|
|
|
|
local player = CastToPlayer( activator )
|
|
|
|
if player then
|
|
|
|
if player:GetTeamId() == self.team then
|
|
|
|
return EVENT_ALLOWED
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return EVENT_DISALLOWED
|
|
|
|
end
|
|
|
|
|
|
|
|
blue_slayer = KILL_KILL_KILL:new({ team = Team.kBlue })
|
|
|
|
red_slayer = KILL_KILL_KILL:new({ team = Team.kRed })
|