Залив
This commit is contained in:
172
gamemodes/cod_custom/gamemode/server/sv_infected.lua
Normal file
172
gamemodes/cod_custom/gamemode/server/sv_infected.lua
Normal file
@@ -0,0 +1,172 @@
|
||||
COD.DelayGamemodeNumber = 999999999
|
||||
|
||||
function COD:JoinAllToTeam()
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
ply:SetTeam(1)
|
||||
ply:KillSilent()
|
||||
ply:Spawn()
|
||||
end
|
||||
end
|
||||
|
||||
function COD:ShowTimer(num)
|
||||
net.Start("COD.TimerShow")
|
||||
net.WriteFloat(num)
|
||||
net.Broadcast()
|
||||
end
|
||||
|
||||
function COD:RandomInfection()
|
||||
local tabp = player.GetAll()
|
||||
local ply = table.Random(tabp)
|
||||
for _, plys in ipairs(tabp) do
|
||||
if plys != ply then
|
||||
COD:GiveMessageCenter(plys, 9)
|
||||
plys:ChangeScore(50)
|
||||
end
|
||||
end
|
||||
if IsValid(ply) then
|
||||
local pos = ply:GetPos()
|
||||
local ang = ply:EyeAngles()
|
||||
ply:SetTeam(2)
|
||||
ply:KillSilent()
|
||||
ply:Spawn()
|
||||
COD:GiveMessageCenter(ply, 7)
|
||||
timer.Simple(0.02, function()
|
||||
if !IsValid(ply) then return end
|
||||
|
||||
ply:SetPos(pos)
|
||||
ply:SetEyeAngles(ang)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
hook.Add("PlayerDeath", "TDMPlayer_Infection", function(ply, inf, att)
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 4 then
|
||||
COD.DataTable["Team1_Kills"] = 0
|
||||
COD.DataTable["Team2_Kills"] = 0
|
||||
if ply:Team() == 1 then
|
||||
COD.TimeBeforeEnd = COD.TimeBeforeEnd+30
|
||||
BroadcastLua([[
|
||||
COD.TimeMatch = ]]..COD.TimeBeforeEnd..[[
|
||||
]])
|
||||
for _, plys in ipairs(team.GetPlayers(1)) do
|
||||
COD:GiveMessageCenter(plys, 9)
|
||||
plys:ChangeScore(50)
|
||||
end
|
||||
end
|
||||
timer.Simple(0.1, function()
|
||||
if !IsValid(ply) or ply:Team() == 2 then return end
|
||||
|
||||
ply:SetTeam(2)
|
||||
if #team.GetPlayers(1) == 1 then
|
||||
COD:GiveMessageCenter(player.GetAll(), 8)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("PlayerSpawn", "TDMPlayer_Infection", function(ply)
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 4 then
|
||||
timer.Simple(0.01, function()
|
||||
if !IsValid(ply) then return end
|
||||
|
||||
ply:SetNWFloat('Perk1', 4)
|
||||
ply:SetNWFloat('Perk2', 0)
|
||||
ply:SetNWFloat('Perk1_Choose', 0)
|
||||
ply:SetNWFloat('Perk2_Choose', 0)
|
||||
ply:SetNWFloat('KillStreak1', 0)
|
||||
ply:SetNWFloat('KillStreak2', 0)
|
||||
ply:SetNWFloat('KillStreak3', 0)
|
||||
ply:SetPos(table.Random(COD.DataTable["simple_Spawns"]))
|
||||
if ply:Team() == 2 then
|
||||
ply:SetModel("models/humangrunt/cod4/captain_macmillan_pm.mdl")
|
||||
ply:SetupHands()
|
||||
ply:StripWeapons()
|
||||
ply:Give('tdm_infection_knife')
|
||||
ply:SetNWFloat('FragGrenades', 0)
|
||||
ply:SetNWFloat('FlashGrenades', 0)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("COD.ChangeState", "TDMPlayer_Infection", function(start)
|
||||
if start and COD.DataTable["Gamemode"] == 4 then
|
||||
COD.TimeBefore1PerkUnlock = math.huge
|
||||
COD.TimeBefore2PerkUnlock = math.huge
|
||||
COD.DisableSpawn = false
|
||||
COD.DelayGamemodeNumber = CurTime()+COD.DataTable["Delay_Before_Start"]+21
|
||||
COD.DisableEndGameByNoTeam = true
|
||||
COD:JoinAllToTeam()
|
||||
timer.Simple(COD.DataTable["Delay_Before_Start"]+10, function()
|
||||
if COD.DataTable["Gamemode"] == 4 and COD.GameStarted then
|
||||
COD:ShowTimer(10)
|
||||
end
|
||||
end)
|
||||
timer.Simple(COD.DataTable["Delay_Before_Start"]+20, function()
|
||||
if COD.DataTable["Gamemode"] == 4 and COD.GameStarted then
|
||||
COD:RandomInfection()
|
||||
end
|
||||
end)
|
||||
else
|
||||
COD.DisableSpawn = false
|
||||
end
|
||||
end)
|
||||
|
||||
hook.Add("Think", "TDMPlayer_Infection", function()
|
||||
if COD.GameStarted and COD.DataTable["Gamemode"] == 4 then
|
||||
local team1, team1alive = team.GetPlayers(1), false
|
||||
local team2alive = false
|
||||
local loseteam = 0
|
||||
|
||||
for k, p in ipairs(team1) do
|
||||
if p:Alive() then
|
||||
team1alive = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if #team.GetPlayers(2) != 0 then
|
||||
team2alive = true
|
||||
end
|
||||
|
||||
if team1alive and team2alive then
|
||||
COD.DelayGamemodeNumber = CurTime()+2
|
||||
loseteam = 0
|
||||
elseif team1alive and not team2alive then
|
||||
loseteam = 1
|
||||
elseif team2alive and not team1alive then
|
||||
loseteam = 2
|
||||
COD.TimeBeforeEnd = 0
|
||||
elseif not team1alive and not team2alive then
|
||||
loseteam = 3
|
||||
end
|
||||
|
||||
if COD.TimeBeforeStart < CurTime()+1 and team1alive then
|
||||
loseteam = 1
|
||||
COD.DelayGamemodeNumber = 0
|
||||
end
|
||||
|
||||
if loseteam == 1 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team1_Kills"] = 1
|
||||
COD.DataTable["Team2_Kills"] = 0
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
elseif loseteam == 2 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team2_Kills"] = 1
|
||||
COD.DataTable["Team1_Kills"] = 0
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
elseif loseteam == 3 and COD.DelayGamemodeNumber < CurTime() then
|
||||
COD.DataTable["Team1_Kills"] = 0
|
||||
COD.DataTable["Team2_Kills"] = 0
|
||||
BroadcastLua([[
|
||||
COD.DataTable["Team2_Kills"] = ]]..COD.DataTable["Team2_Kills"]..[[
|
||||
COD.DataTable["Team1_Kills"] = ]]..COD.DataTable["Team1_Kills"]..[[
|
||||
]])
|
||||
end
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user