What do you want to achieve?
I’m using a DataStore for the player’s backpack so that it saves after leaving the game & dying; however, one of the tools I have I’d like to save if it’s not been destroyed but if it has been destroyed, then removed from the Player’s StarterGear.
What is the issue?
Video won’t upload on here…
here’s the link to the Vimeo: InventoryIssue on Vimeo
Tool Script:
local tool = script.Parent
local drink_sound = script.Parent.DrinkSound
local clicked = false
tool.Activated:Connect(function()
if clicked == false then
clicked = true
drink_sound:Play()
local humanoid = tool.Parent:FindFirstChild("Humanoid")
humanoid.Health = humanoid.Health + 10
wait (2)
tool:Destroy()
end
end)
You can make your code access Player.StarterGear. Assuming the code you’ve shared is client-sided (a LocalScript), you can do:
-- Services
local Players = game:GetService('Players')
-- Accessing the local player
local Player = Players.LocalPlayer
local tool = script.Parent
local drink_sound = script.Parent.DrinkSound
local clicked = false
tool.Activated:Connect(function()
if clicked == false then
clicked = true
drink_sound:Play()
local humanoid = tool.Parent:FindFirstChild("Humanoid")
humanoid.Health = humanoid.Health + 10
task.wait (2)
-- Find tool in StarterGear
local StarterTool = Player.StarterGear:FindFirstChild(tool.Name)
if StarterTool then
StarterTool:Destroy()
end
-- Destroy tool in hands
tool:Destroy()
end
end)
I’ve changed the code to the code you’ve provided but now the tool is not being destroyed in the player’s hands. It plays the audio and heals the player but doesn’t get removed from the backpack, hands, and StarterGear of the player.
I copied the code exactly and also tried replacing
local StarterTool = Player.StarterGear:FindFirstChild(tool.Name)
with
local StarterTool = Player.StarterGear:FindFirstChild("+10 Health")
EDIT:
Also, the script within the tool is not a LocalScript—should I make it a local script instead?
I’ve edited the code to be compatible with Server-ran code. Try this
-- Services
local Players = game:GetService('Players')
local tool = script.Parent
local drink_sound = script.Parent.DrinkSound
local clicked = false
tool.Activated:Connect(function()
if clicked == false then
clicked = true
drink_sound:Play()
-- Accessing the Player
local Player = Players:GetPlayerFromCharacter(tool.Parent)
local humanoid = tool.Parent:FindFirstChild("Humanoid")
humanoid.Health = humanoid.Health + 10
task.wait (2)
-- Find tool in StarterGear
local StarterTool = Player.StarterGear:FindFirstChild(tool.Name)
if StarterTool then
StarterTool:Destroy()
end
-- Destroy tool in hands
tool:Destroy()
end
end)
A little explanation on what I changed:
LocalScripts can access Players.LocalPlayer because they are ran on the client. Since your script is a Server script, it cannot access this reference. I’m now using the GetPlayerFromCharacter method to get to the Player object instead. Hopefully this now works