Infinite stage bug

When i press infinite stage gui with pepole in my game its do skip stage to random person. please help.

script(serverscriptserver):

local Skip = ReplicatedStorage:WaitForChild("Skip")
local players = game.Players:GetPlayers()
local finish = 0
Skip.OnServerInvoke = function(player)
	local finish = 0
	local players = game.Players:GetPlayers()
	for i=1, #players do
		if finish == 0 then 
			finish = 1
			players[i].leaderstats.Stage.Value = players[i].leaderstats.Stage.Value + 1
			players[i].Character:MoveTo(Checkpoints:FindFirstChild(players[i].leaderstats.Stage.Value).Position)
		end
	end
end

Should you just use the player provided in the serverinvoke function