Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
1

Why does it say player is nil in my remoteevent?

Asked by 5 years ago
Edited 5 years ago

Basically, this event fires from a server script when a player purchases a product. In my client script, I check if it's the right player by doing if game.Players.LocalPlayer.Name = plr.Name then... It says that the plr value is nil even tho I'm getting it from the OnClientEvent function.

01-- Server Script
02local MarketplaceService = game:GetService("MarketplaceService")
03 local event = game.ReplicatedStorage["Music System"].PurchaseMusic
04local function processReceipt(receiptInfo)
05        local player = game:GetService("Players"):GetPlayerByUserId(receiptInfo.PlayerId)
06        if not player then
07        return Enum.ProductPurchaseDecision.NotProcessedYet
08        end
09        if receiptInfo.ProductId == 655383631 then
10            event:FireClient(player)
11        end
12        return Enum.ProductPurchaseDecision.PurchaseGranted
13end
14 
15MarketplaceService.ProcessReceipt = processReceipt

And my client script:

01-- Client Script/Local Script
02local event = game.ReplicatedStorage["Music System"].RequestMusic
03local event2 = game.ReplicatedStorage["Music System"].PurchaseMusic
04 
05event2.OnClientEvent:Connect(function(plr)
06    if game.Players.LocalPlayer.Name == plr.Name then
07    local id = script.Parent.Parent.ChosenID.Value
08    event:FireServer(id)
09    script.Parent.Text = "Added To Queue"
10    end
11end)
0
Try event2.OnClientEvent:Connect(function(Rand, plr) for the client script. I really don't know why roblox does this, but I encounter this all the time beeswithstingerss 41 — 5y
0
what is rand? TypicallyPacific 61 — 5y
0
A nil value. For some reason, when receiving parameters passed via a remote event, the values are offset by one beeswithstingerss 41 — 5y
0
also that doesn't work TypicallyPacific 61 — 5y
View all comments (2 more)
0
Players.TypicallyPacific.PlayerGui.ScreenGui.Frame.TextButton.LocalScript:5: attempt to index local 'plr' (a nil value) TypicallyPacific 61 — 5y
0
Can you test to see if you are getting the player object? beeswithstingerss 41 — 5y

1 answer

Log in to vote
1
Answered by
SmartNode 383 Moderation Voter
5 years ago
Edited 5 years ago

You have to fire from the server with an additional argument that includes the player. The first argument (the player) tells the game where to send the fire event to (the specified player) so technically it's not an argument when its received from the client's side.

Also, you can't send instances via remotes so you're gonna have to send the name instead.

(btw i removed the player because you don't need to check it, if its sent to the client it was on purpose by the server, it should work nevertheless)

Server

01-- Server Script
02local MarketplaceService = game:GetService("MarketplaceService")
03local event = game.ReplicatedStorage["Music System"].PurchaseMusic
04local function processReceipt(receiptInfo)
05    local player = game:GetService("Players"):GetPlayerByUserId(receiptInfo.PlayerId)
06    if not player then
07        return Enum.ProductPurchaseDecision.NotProcessedYet
08    end
09    if receiptInfo.ProductId == 655383631 then
10        event:FireClient(player)
11    end
12    return Enum.ProductPurchaseDecision.PurchaseGranted
13end
14 
15MarketplaceService.ProcessReceipt = processReceipt

Client

1-- Client Script/Local Script
2local event = game.ReplicatedStorage["Music System"].RequestMusic
3local event2 = game.ReplicatedStorage["Music System"].PurchaseMusic
4 
5event2.OnClientEvent:Connect(function(plr)
6    local id = script.Parent.Parent.ChosenID.Value
7    event:FireServer(id)
8    script.Parent.Text = "Added To Queue"
9end)
1
Alright, so it'll only go to the player who purchased it right? TypicallyPacific 61 — 5y
0
Absolutely, the server automatically does this! SmartNode 383 — 5y
Ad

Answer this question