How would I do inverse-client for multiple events?

What I like to call an “inverse-client” is something that the server and all but 1 player see an action. Basically, the server executes a command, creates a part for example, and only the Player2 and Player3 see the part, while Player1 has no idea of that object.


With that known now, I have 2 questions to… ask:

  1. How would I actually do the example, without listening for DescendantAdded and make the part invisible, etc.?
  2. How would I play an animation on Player1's character, without them seeing it?

You should get table containing all players and remove random player from it. Then you fires event for all players in this table.

local Players = game.Players:GetPlayers()
Players[math.random(1,#Players)]=nil
for _,Player in pairs(Players) do
event:FireClient(Player,...)
end

I was thinking of a server-side module function that black-lists a player.
Unfortunately, it is harder than that. Anyway, what if I use functions instead of RemoteEvents? I just included the word event not meaning an Instance.

--CLIENT
local Players = game:GetService("Players")
local Player = Players.LocalPlayer
local Replicated = game:GetService("ReplicatedStorage")
local Remote = Replicated:WaitForChild("RemoteEvent")

Remote.OnClientEvent:Connect(function()
	local Part = Instance.new("Part")
	Part.Anchored = true
	Part.Parent = workspace
end)

Remote:FireServer()

--SERVER
local Players = game:GetService("Players")
local Replicated = game:GetService("ReplicatedStorage")
local Remote = Replicated.RemoteEvent

Remote.OnServerEvent:Connect(function(PlayerWhoFired)
	for _, Player in ipairs(Players:GetPlayers()) do
		if Player ~= PlayerWhoFired then
			Remote:FireClient(Player)
		end
	end
end)

Fairly simple example of how you can go about achieving this, a client fires the server which in turn fires every other client but the client which initially fired the server, then for each client which is fired, a BasePart is instanced, anchored and parented to the workspace.