So me and my friend are making a sword fighting game, but there's one problem. Whenever someone is in the game / match and they just flat-out leave it does not count them as dead, therefore keeping the match for however long is left. If the clock runs out its just ends the game, but seeing how the matches are 90 seconds long its not fair to wait because someone wanted to leave. Anyway heres the script I'm using, its pretty basic. (friend made it so I'm not sure if anything is messed up)

-- Define Variables

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local ServerStorage = game:GetService("ServerStorage")

local MapsFolder = ServerStorage:WaitForChild("Maps")

local Status = ReplicatedStorage:WaitForChild("Status")

local GameLength = 90

local reward = 50

-- Game Loop

while true do

Status.Value = "Waiting for 2 (or more) Players to Join!"

repeat wait(1) until game.Players.NumPlayers >= 2

Status.Value = "Intermission (15 seconds)"

wait(15)

local plrs = {}

for i, player in pairs (game.Players:GetPlayers())do
	if player then
		table.insert(plrs,player)-- Add each player into plrs table
	end
end

wait(2)

local AvailableMaps = MapsFolder:GetChildren()

local ChosenMap = AvailableMaps[math.random(1,#AvailableMaps)]

Status.Value = ChosenMap.Name.." Chosen"

local ClonedMap = ChosenMap:Clone()
ClonedMap.Parent = workspace

--Teleport Players to the Map

local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")

if not SpawnPoints then
	print("SpawnPoints not found!")
end

local AvailableSpawnPoints = SpawnPoints:GetChildren()

for i, player in pairs(plrs) do
	if player then
		character = player.Character
		
		if character then
			-- Teleport them
			
			character:FindFirstChild("HumanoidRootPart").CFrame = AvailableSpawnPoints[1].CFrame
			table.remove(AvailableSpawnPoints,1)
			
			
			-- Give them a sword
			
			local Sword = ServerStorage.Sword:Clone()
			Sword.Parent = player.Backpack
			
			local GameTag = Instance.new("BoolValue")
			GameTag.Name = "GameTag"
			GameTag.Parent = player.Character
			
		else
			-- There is no character
			if not player then
				table.remove(plrs,i)
			end
		end
	end
end


Status.Value = "Get Ready to Play!"

wait(4)

for i = GameLength,0,-1 do
	
	for x, player in pairs(plrs) do
		if player then
			
			character = player.Character
			
			if not character then
				--Left The Game
			else
				if character:FindFirstChild("GameTag") then
					-- They are still alive
					print(player.Name.." is still in the game!")
				else
					-- They are dead
					table.remove(plrs,x)
					print(player.Name.." has been removed!")
				end
			end
		else
			table.remove(plrs,x)
			print(player.Name.." has been removed!")
		end
	end
	
	Status.Value = "There are "..i.." seconds remaining, and "..#plrs.." players left."
	
	if #plrs == 1 then
		-- Last Person Standing
		Status.Value = "The winner is "..plrs[1].Name.."!"
		plrs[1].leaderstats.Cash.Value = plrs[1].leaderstats.Cash.Value + reward
		wait(3)
		break
	elseif #plrs == 0 then
		Status.Value = "Nobody won!"
		wait(3)
		break
	elseif i == 0 then
		Status.Value = "Times up!"
		wait(3)
		break  
	end
	
	wait(1)
end

print("End of game.")

for i, player in pairs(game.Players:GetPlayers()) do
	character = player.Character
	
	if not character then
		-- Ignore them
	else
		if character:FindFirstChild("GameTag") then
			character.GameTag:Destroy()
		end
		
		if player.Backpack:FindFirstChild("Sword") then
			player.Backpack.Sword:Destroy()
		end
		
		if character:FindFirstChild("Sword") then
			character.Sword:Destroy()
		end
		
	end
	
	player:LoadCharacter()
end

ClonedMap:Destroy()

Status.Value = "Game ended!"

wait(2)

end

2 comments

0

The script kinda messed up in the question