I'm making a system where when a map loads only for a specific player, it puts the map where it can be replicated to a client.

The map goes in a folder in ReplicatedStorage called "MapQueue." When a map needs to load for a certain player, it makes a folder in "MapQueue" with the player's name.

Then, it invokes a RemoteFunction to the player, where the player gets the map from the MapQueue folder and put it in the workspace. Finally, the server deletes the map from the queue.

server script

local replicatedStorage = game.ReplicatedStorage
local queueFolder = replicatedStorage.MapQueue

local playerFolder
if queueFolder:FindFirstChild(player.Name) then
	playerFolder = queueFolder[player.Name]
else
	playerFolder = Instance.new("Folder")
	playerFolder.Name = player.Name
	playerFolder.Parent = queueFolder
end
map:Clone().Parent = playerFolder
replicatedStorage.LoadMap:InvokeClient(player, map.Name)
queueFolder[player.Name][map.Name]:Destroy()

client script

local storage = game:GetService("ReplicatedStorage")
local queue = storage:WaitForChild("MapQueue")
local data = game:GetService("ReplicatedFirst")
local player = game.Players.LocalPlayer

storage:WaitForChild("LoadMap").OnClientInvoke = function(map, teleportId)
	if map ~= nil then
		local m = queue:WaitForChild(player.Name):WaitForChild(map):Clone()
		m.Name = "Map"
		m.Parent = workspace
	end
end

I knew I was going to reuse this code in many different scripts, so I put it in a module script.

local module = {}
local replicatedStorage = game.ReplicatedStorage
local queueFolder = replicatedStorage.MapQueue

module.LoadMapToClient = function(player, map)
	local playerFolder
	if queueFolder:FindFirstChild(player.Name) then
		playerFolder = queueFolder[player.Name]
	else
		playerFolder = Instance.new("Folder")
		playerFolder.Name = player.Name
		playerFolder.Parent = queueFolder
	end
	map:Clone().Parent = playerFolder
	replicatedStorage.LoadMap:InvokeClient(player, map.Name)
	queueFolder[player.Name][map.Name]:Destroy()
end

return module

However, when one of my scripts used the load map function from the module script, the argument "player" turned into a table and "map" turned into the player.

I checked the arguments and the parameters of the function invoke. The parameters are fine, but the arguments are unusual.

Please help me!

4 comments

0

Maybe index the module like "module["LoadMapToClient] = function(player,map)"..?

0

like, when you define the function in the module script

0

it does not work

0

i wish i could bump