I'm making a shop where a player can click on a mannequin's clothes and get information on the clothes, buy the product, or add it to a cart to try on. I set up a RemoteFunction called OpenItemCard in the ReplicatedStorage and whenever the player clicks on clothes, I want the script to invoke OpenitemCard to send information from the mannequin to the client. Whenever I click on the mannequin all that shows up on output is "Unable to cast value to Object" and "Script 'Workspace.Mannequin.ShirtPurchase.ClickDetector.WhenClicked', Line 5" What do?
server side script (line 5 mentioned above is line 5 below)
Adornee = script.Parent.Parent.Parent.AdorneeAnchor ShirtID = string.sub(script.Parent.Parent.Parent.Body.Shirt.ShirtTemplate, 14) script.Parent.MouseClick:connect(function() print("Click Detected") game.ReplicatedStorage.OpenItemCard:InvokeClient(ShirtID, nil, Adornee) print("Client Invoked") end)
here's the remote function being called on the client side
OpenItemCard = game.ReplicatedStorage:WaitForChild("OpenItemCard") function OpenItemCard.OnClientInvoke(player,ShirtID,PantsID,Body)
Line 3 of your remote function. Client side. Remove the player parameter. Make line 3 look like this:
function OpenItemCard.OnClientInvoke(ShirtID, PantsID, Body)
On line 3 of your server script, make :connect to :Connect.
script.Parent.MouseClick:Connect(function(player)
Add the player parameter to the event. Make line 5 look like this:
OpenItemCard:InvokeClient(player, ShirtID, nil, Adornee)
Invoke the specified client. It’s always the first argument to InvokeClient, but not a parameter in OnClientInvoke.
Edit: If you added a player parameter for OnClientInvoke, your InvokeClient would look like this:
OpenItemCard:InvokeClient(player, player, ShirtID, nil, Adornee) -- two player arguments. not cool.