You should put your maps in ReplicateStorare, as it can be downloaded by the client in runtime.
They can steal your maps anyways, once they are parented to workspace.
Stealing maps is a common thing, you shouldn’t worry.
Simply report the user that stole your maps to Roblox, and they will deal with it.
Trueactually, doesn’t it just send a reference to the object? nvm. but if you sent instances from any Server container to the client as keys inside of a dictionary, they don’t become nil, If I recall correctly, the key becomes something like <Instance> [name of the instance here].
Yeah as everyone else said, you need to do that. Another advantage is inserting the map to the viewport happens faster, because if you were do it from the server (I’m talking theoretically here, replicating instances from server to client isn’t possible unless you do some serialization), you would need to replicate the map, and put it in the viewport, and replicating takes sometime of course. But in the client, it’s already loaded there, you just copy it and insert it.
Not really sure, but it’s a string, it’s not an instance, you can’t do anything with it. It is worth testing, try to send an instance from the client to the server and see the result.
nil means that there is nothing there. It will return nil because the client cannot access it.
It has to exist on both server and client.
Example:
Server
local Event = game:GetService('ReplicatedStorage').Event
local instance = game:GetService('ServerStorage').instance
Event:FireAllClients(instance, instance.Name)
Client
local Event = game:GetService('ReplicatedStorage'):WaitForChild('Event')
Event.OnClientEvent:Connect(function(Object, ObjectName)
print(type(Object)) --> nil
print(ObjectName) --> instance, because it is a string
end)
There can be a purpose if you want it to be, but you cannot send instances, as I showed you above.
You’ll need to find another solution that both the client and server has access to.