function GameOver(winteam) ChangeRound(3) local winmsg if winteam then //override win if winteam == 0 then winmsg = "It's a tie!" elseif winteam == 1 then winmsg = "Red team wins!" elseif winteam == 2 then winmsg = "Blue team wins!" end else //normal win if gb_NumRedCores > gb_NumBlueCores then // Red team wins! winteam = 1 winmsg = "Red team wins!" elseif gb_NumRedCores < gb_NumBlueCores then // Blue team wins! winteam = 2 winmsg = "Blue team wins!" elseif gb_NumRedCores == gb_NumBlueCores then // It was a tie! D: winteam = 0 winmsg = "It's a tie!" end end local times = {} for k, v in pairs(player.GetAll()) do table.insert(times, {v, v:GetVar("gb_time", 0)}) end local new_times = {} for i=1, table.getn(times) do local longest = {0,0,0} for k, v in pairs(times) do if (v[2] > longest[2] || longest[1] == 0) then longest = {v[1], v[2], k} end end if (longest[2] != 0) then table.insert(new_times, {longest[1], longest[2]}) end table.remove(times, longest[3]) end local time_count = table.getn(new_times) if time_count > 10 then time_count = 10 end local healths = {} for k, v in pairs(player.GetAll()) do if (v:GetVar("gb_time", 0) > 0) then table.insert(healths, {v, v:GetNetworkedInt("gb_corehealth", 0)}) end end local new_healths = {} for i=1, table.getn(healths) do local longest = {0,0,0} for k, v in pairs(healths) do if (v[2] > longest[2] || longest[1] == 0) then longest = {v[1], v[2], k} end end //if (longest[2] != 0) then table.insert(new_healths, {longest[1], longest[2]}) //end table.remove(healths, longest[3]) end local health_count = table.getn(new_healths) if health_count > 10 then health_count = 10 end local damages = {} for k, v in pairs(player.GetAll()) do if (v:GetVar("gb_time", 0) > 0) then table.insert(damages, {v, v:GetVar("DamageDelt", 0)}) end end local new_damages = {} for i=1, table.getn(damages) do local longest = {0,0,0} for k, v in pairs(damages) do if (v[2] > longest[2] || longest[1] == 0) then longest = {v[1], v[2], k} end end //if (longest[2] != 0) then table.insert(new_damages, {longest[1], longest[2]}) //end table.remove(damages, longest[3]) end local damage_count = table.getn(new_damages) if damage_count > 20 then damage_count = 20 end local wincolor = team.GetColor(winteam) if (winteam == 0) then wincolor = Color(128, 128, 128, 255) end local rf = RecipientFilter() rf:AddAllPlayers() umsg.Start("PostGame", rf) umsg.Short(time_count) for i=1, time_count do umsg.Entity(new_times[i][1]) umsg.Short(new_times[i][2]) end umsg.Short(health_count) for i=1, health_count do umsg.Entity(new_healths[i][1]) umsg.Short(new_healths[i][2]) end umsg.Short(damage_count) for i=1, damage_count do umsg.Entity(new_damages[i][1]) umsg.Short(new_damages[i][2]) end umsg.Short(wincolor.r) umsg.Short(wincolor.g) umsg.Short(wincolor.b) umsg.String(winmsg) umsg.End() timer.Simple(gb_PostGameTime, Changethemap) timer.Remove("RoundTimer") StopClientTime() timer.Remove("survival time") timer.Remove("checkcores") end function TimerCountdown() gb_RoundTimer = gb_RoundTimer - 1 //announcements and sudden death if gb_CurrentRound == 1 then if gb_RoundTimer == 10*60 then Announcement({"Ten minutes remaining."}, 5) elseif gb_RoundTimer == 5*60 then Announcement({"Five minutes remaining."}, 5) elseif gb_RoundTimer == 1*60 then Announcement({"One minute remaining!"}, 5) elseif gb_RoundTimer == 30 then Announcement({"30 seconds remaining!"}, 5) elseif gb_RoundTimer == 10 then Announcement({"10 seconds remaining!"}, 5) elseif gb_RoundTimer == 5 then Announcement({"5..."}, 2) elseif gb_RoundTimer == 4 then Announcement({"4..."}, 2) elseif gb_RoundTimer == 3 then Announcement({"3..."}, 2) elseif gb_RoundTimer == 2 then Announcement({"2..."}, 2) elseif gb_RoundTimer == 1 then Announcement({"1..."}, 2) end elseif gb_CurrentRound == 2 then if gb_RoundTimer == 10*60 then Announcement({"Ten minutes remaining."}, 5) elseif gb_RoundTimer == 5*60 then Announcement({"Five minutes remaining."}, 5) elseif gb_RoundTimer == 1*60 then if gb_SuddenDeath then Announcement({ "One minute remaining!", "Sudden Death is now ON" }, 5) for k, ent in pairs(ents.FindByClass("prop_physics")) do if ent:IsValid() then ent:Fire("physdamagescale", tostring(gb_SuddenDeathPropDamageScale)) end end else Announcement({"One minute remaining!"}, 5) end elseif gb_RoundTimer == 30 then Announcement({"30 seconds remaining!"}, 5) elseif gb_RoundTimer == 10 then Announcement({"10 seconds remaining!"}, 5) elseif gb_RoundTimer == 5 then Announcement({"5..."}, 2) elseif gb_RoundTimer == 4 then Announcement({"4..."}, 2) elseif gb_RoundTimer == 3 then Announcement({"3..."}, 2) elseif gb_RoundTimer == 2 then Announcement({"2..."}, 2) elseif gb_RoundTimer == 1 then Announcement({"1..."}, 2) end end if gb_RoundTimer <= 0 then if gb_CurrentRound == 1 then Announcement({"FIGHT!"}, 5) StartFight() elseif gb_CurrentRound == 2 then GameOver() end end end