Kind of a stupid question, but with the new experimental update, it affects almost 100% of the aviation community. I never got around to enabling filtering enabled because I didn’t know how to.
If you guys could help me out and post
What filtering enabled will change compared to experimental mode
To make games fe compatible, you need to use remote events and remote functions to execute code on the server with calls from the client.
Anything you want other players to be able to see that’s currently being done in a local script, should have its code moved to a server script and executed by the server, connected to a remote event that the client calls.
Filtering Enabled disables Client-To-Server Replication.
What that means if that if a part is created on the client, it won’t replicate to the server which in turn, won’t appear for other players.
With Filtering Disabled (Experimental Mode), that part will appear on all the Clients in the game. And it’ll Replicate to the Server. This is how a user can kill and modify other player’s characters with exploits with Filtering Disabled. If Filtering is enabled. It’ll only happen on their screen.
To enable it click on the Workspace in Studio and in Properties under Behavior they’ll be a checkbox called “Filtering Enabled” this is turned on by default whenever you create a new studio file. But if your place is older, you’ll need to manually check it.
In order to cross the Client-To-Server Bountry you’re gonna need to hook things up Via RemoteEvents/Functions. The pages of which I’ll Link down below.
Also the video @railworks2 linked explains it well.
Example These Scripts would create a Part that’ll show to All Clients With Filtering Enabled
--Server Script
local RemoteEvent = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent")
RemoteEvent.OnServerEvent:Connect(function(player, Shape)
local s = Instance.new("Part", game:GetService("Workspace"))
if Shape == nil then
--Nothing
elseif Shape == Enum.PartType.Ball then
s.Shape = Enum.PartType.Ball
elseif Shape == Enum.PartType.Cylinder then
s.Shape = Enum.PartType.Cylinder
end
end)
--Local Script
local RemoteEvent = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent")
local function CreatePart(shape)
RemoteEvent:FireServer(shape)
end
CreatePart()
CreatePart(Enum.PartType.Ball)
More Information including Convering.
RemoteEvent/Function Pages
I made a Similiar Post a few months ago. And that’s all I have to say.
Hello! Recently, Developer Relations released a tweet on this issue, I’ll link it in the end. However, in essence experimental mode is used for starting games to ensure safety while development is done. I still believe that FE in aviation is important so following the advice here for that is of utmost importance.
You would need to hook that up via a Remote Event. As I said in my post. With the example Scripts.
It even works for models. I’ll put Example Scripts here. This would clone a model to All clients instead of one with Filtering Enabled.
--Server Script
local RemoteEvent = game:GetService("ReplicatedStorage"):FindFirstChild("RemoteEvent")
RemoteEvent.OnServerEvent:Connect(function(player, Model)
if Model then
Model:Clone().Parent = game:GetService("Workspace")
print(player.Name .. " Cloned a Model to the Server")
end
end)
--Local Script
local RemoteEvent = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent")
local model = script:WaitForChild("Model")
RemoteEvent:FireServer(model)
I’ll also provide a Screenshot showing how Studio is set-up.
To provide a more advanced Example. These scripts will clone a Basic Car from the ServerStorage via the firing of a Tool.
--Brick Creator
local Tool = script.Parent
local Mouse = game:GetService("Players").LocalPlayer:GetMouse()
local RemoteEvent = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent")
Tool.Activated:Connect(function()
RemoteEvent:FireServer("Car", Mouse.Hit.p)
end)
local Car = game:GetService("ServerStorage"):FindFirstChild("Car")
local RemoteEvent = game:GetService("ReplicatedStorage"):FindFirstChildOfClass("RemoteEvent")
RemoteEvent.OnServerEvent:Connect(function(player, Clone, MousePos)
if Clone == "Car" then
local x = Car:Clone()
x.Parent = game:GetService("Workspace")
x:SetPrimaryPartCFrame(CFrame.new(MousePos + Vector3.new(0, 8, 0)))
end
end)
Studio is set-up Like this. If you want to check the place file for yourself feel free to DM me.