How to make something happen after all players click on a gui?

Hey there! I’m trying to make a cutscene skipper when everyone clicks on the “Skip” gui, but I’m not sure where to start. If y’all could help, that would be great!

1 Like

You could do something like that

local script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SkipEvent = ReplicatedStorage:WaitForChild("SkipEvent") --Remote Event

GuiButton.MouseButton1Click:Connect(function()
    SkipEvent:FireServer()
end

Server script

local PlayerService = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SkipEvent = ReplicatedStorage:WaitForChild("SkipEvent") --Remote Event
local PlayersReadyToSkip = {}

SkipEvent.OnServerEvent:Connect(function(Player)
    if table.find(PlayersReadyToSkip, Player) then
        table.remove(PlayersReadyToSkip, Player) --Unready to skip
    else --Ready > Unready // Unready > ready // switch depending on if you click the button multiple times
        table.insert(PlayersReadyToSkip, Player) --Ready to skip
    end

    if #PlayersReadyToSkip == #PlayerService:GetPlayers() then
         --Skip Cutscene
    end
end

PlayerService.PlayerRemoving:Connect(function(Player)
     if table.find(PlayersReadyToSkip, Player) then
        table.remove(PlayersReadyToSkip, Player)
    end
end
1 Like

unnecessary resources

    for _, CurrentPlayer in pairs(PlayerService:GetChildren()) do
        if not (table.find(PlayersReadyToSkip, Player)) then
            AllPlayersReady = false
        end
    end

if #PlayersReadyToSkip ~= #PlayerService:GetPlayers() then return end

-- skip cutscene
3 Likes

Yep, thanks for the shortcut! ^^

2 Likes

Does this all go in the Sever script?

Just copy & paste what @Crygen54 wrote, the top one in a localscript and the bottom one in a serverscript

Didn’t work for me, I had to add a couple parethesis at some of the ends so I wouldn’t get any errors, but whenever I click nothing happens in the output

local PlayerService = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SkipEvent = ReplicatedStorage:WaitForChild("SkipEvent") --Remote Event
local PlayersReadyToSkip = {}

SkipEvent.OnServerEvent:Connect(function(Player)
   if table.find(PlayersReadyToSkip, Player) then
   	table.remove(PlayersReadyToSkip, Player) --Unready to skip
   else --Ready > Unready // Unready > ready // switch depending on if you click the button multiple times
   	table.insert(PlayersReadyToSkip, Player) --Ready to skip
   end

   if #PlayersReadyToSkip == #PlayerService:GetPlayers() then
   	print("Skipped")
   end
end)

PlayerService.PlayerRemoving:Connect(function(Player)
   if table.find(PlayersReadyToSkip, Player) then
   	table.remove(PlayersReadyToSkip, Player)
   end
end)

Also here’s the button script (I added a keyboard function):

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SkipEvent = ReplicatedStorage:WaitForChild("SkipEvent") --Remote Event
local Plr = game.Players.LocalPlayer

script.Parent.MouseButton1Click:Connect(function()
	SkipEvent:FireServer()
end)

Plr:GetMouse().KeyDown:Connect(function(F)
	if F == "f" then
		SkipEvent:FireServer()
		
	end
end)