I have made a simple round script and the last player thats alive in the round should get a win added to their leaderstats. For some reason the last player who died (the person the last player alive killed) is getting the win. Here is my code (btw its not all my code, i have compiled some code from other sources nd stuff)


local ServerStorage = game:GetService("ServerStorage")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")

local Maps = ServerStorage:WaitForChild('Maps'):GetChildren()
local Status = ReplicatedStorage:WaitForChild('Status')

while true do

	--Intermission

	local Countdown = 30 -- intermission, make this as long as you want

	repeat wait(1)
		Countdown = Countdown - 1

		Status.Value = 'Intermission : '..Countdown
	until Countdown <= 0

	--Choose the map.

	Status.Value = 'Choosing Map...'

	local ChosenMap = Maps[math.random(1, #Maps)]:Clone()
	local Spawns = ChosenMap:FindFirstChild('Spawns'):GetChildren()


	wait(5) -- little pause, make this as long as you want

	ChosenMap.Parent = workspace
	Status.Value = 'Map chosen, teleporting players.'

	wait(2) -- little pause, make this as long as you want
	local Knife = ServerStorage.Knife
	local luger = ServerStorage.Luger
	--teleport the players

	local playersInRound = {} -- track alive players
	local connections = {} -- store connections to disconnect later
	for _, Player in pairs(Players:GetChildren()) do
		if Player.Character and Player.Character:FindFirstChild('Humanoid') then
			local RandomSpawn = Spawns[math.random(1, #Spawns)]
			Player.Character.HumanoidRootPart.CFrame = RandomSpawn.CFrame
			local newKnife = Knife:Clone()
			local newLuger = luger:Clone()
			newKnife.Parent = Player.Backpack
			newLuger.Parent = Player.Backpack

			table.insert(playersInRound, Player) -- add all players to table
			connections[Player.Name] = Player.Character.Humanoid.Died:Connect(function()
				table.remove(playersInRound, table.find(playersInRound, Player))
				if playersInRound[2] ~= nil then
					-- Nothing
				else
					-- What to happen when last player is alive
					print("The Winner is: " ..playersInRound[1].Name) -- or playersInRound[1].Name
					Player.leaderstats.Wins.Value = Player.leaderstats.Wins.Value + 1 -- I don't know if its called "Wins" but change it as you please
				end
			end)
		end
	end

	connections["Removing"] = game.Players.PlayerRemoving:Connect(function(player) -- remove player from list if they leave
		local ind = table.find(playersInRound, player)
		if ind then
			table.remove(playersInRound, ind)
		end
	end)

	Countdown = 5 -- Starting Round In, make this as long as you want

	repeat wait(1)
		Countdown = Countdown - 1

		Status.Value = 'Starting Round in : '..Countdown
	until Countdown <= 0

	Countdown = 60 -- Game Time

	repeat wait(1)
		Countdown = Countdown - 1

		Status.Value = 'Ingame : '..Countdown
	until Countdown <= 0 or #playersInRound == 1
	--Dax could you make a gui pop up here that makes the last player left, the winner, get 1 win added to win leaderstats and also have a gui pop up on everyones screens 
	--that says the winner, and also awards the winner 100 coins

	--Kill the players
	for _, connection in pairs(connections) do -- disconnect connections to prevent memory leaks
		connection:Disconnect()
	end

	for _, Player in pairs(playersInRound)do
		Player:LoadCharacter()
	end

	ChosenMap:Destroy()

	Status.Value = 'Round Ended, waiting for new game.'

	wait(4) -- little pause, make this as long as you want.

end

1 comment

0

try changing the Player.leaderstats.Wins.Value = Player.leaderstats.Wins.Value + 1 to playersInRound[1].leaderstats.Wins.Value += 1