Sorry here is my full script for getting the player:
local Rep = game:GetService("ReplicatedStorage")
local AddGems = Rep:WaitForChild("AddGems")
local Levels = game.Workspace.Levels:GetChildren()
function GetPlayer(hit)
if game.Players:FindFirstChild(hit.Parent.Name) then
return game.Players:FindFirstChild(hit.Parent.Name)
elseif game.Players:FindFirstChild(hit.Parent.Parent.Name) then
return game.Players:FindFirstChild(hit.Parent.Parent.Name)
else
return false
end
end
for _, Level in pairs(Levels) do
local Gems = Level.Gems:GetChildren()
for _, Gem in pairs(Gems) do
Gem.Touched:Connect(function(hit)
local Player = GetPlayer(hit)
if Player == false then return end
Gem.CanTouch = false
Gem.Transparency = 1
AddGems:FireClient(Player)
end)
end
end
Wait I got it. Basically :FireClient already sends player through as a variable so I just had to make it AddGems:FireClient(Player, Player) and then on the local script AddGems.OnClientEvent:Connect(function(Player)
I would recommend making use of Players:GetPlayerFromCharacter() to more efficiently retrieve the player Instance without needing to look through the Players Service directly.
Example:
-- Define the Players Service at the top of the script
local Players = game:GetService("Players")
...
Gem.Touched:Connect(function(hit)
local Player = Players:GetPlayerFromCharacter(hit.Parent)
The :FireClient() method does not send the player Instance to the client because the LocalPlayer can already be referenced in LocalScripts through the Players Service. This means that values that abide by the parameter limitations which are input to the :FireClient() method after the player Instance will be sent to the client.
Example:
-- Server Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RemoteEvent = ReplicatedStorage.RemoteEvent
workspace.examplePart.Touched:Connect(function(hit)
local Player = Players:GetPlayerFromCharacter(hit.Parent)
if Player then
RemoteEvent:FireClient(Player, "Cool!")
end
end)
-- LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local RemoteEvent = ReplicatedStorage.RemoteEvent
RemoteEvent.OnClientEvent:Connect(function(parameter1, parameter2)
print(parameter1) -- "Cool!"
print(parameter2) -- nil (a second value was not sent to the client)
end)