local player = game.Players:GetPlayerFromCharacter(hit.Parent)
Your problem was that you weren't getting the Player properly. Using :GetPlayerFromCharacter will get the player who touched it. So if we put that in, it should look like this:
function onClicked(hit)
if hit.Parent.Humanoid~= nil then
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
cash = player:WaitForChild("leaderstats").Cash
if cash.Value >= 100 then
cash.Value = cash.Value - 100
end
end
end
script.Parent.Touched:connect(onClicked)
Another problem it might be having is that it works, but it's not working how you want it to. After it gets the Cash, it checks to see if it is >= 100, but if the players cash.Value isn't >= 100, then the code will still regenerate the object, and not take away the Cash. To fix this, we want to check to make sure the player has cash.Value >= 100 before any other part of the script. To do this, we just put this above the regenerate.
This should be the look of the final, working script:
location = script.Parent.Parent.Parent
regen = script.Parent.Parent
save = regen:clone()
wait(15)
function onClicked(hit)
if hit.Parent.Humanoid~= nil then
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
cash = player:WaitForChild("leaderstats").Cash
if cash.Value >= 100 then
cash.Value = cash.Value - 100
back = save:clone()
wait(1)
back.Parent = location
back:MakeJoints()
else
print("Not enough Cash")
end
end
end
script.Parent.Touched:connect(onClicked)
One last thing I didn't quite understand, is why you had 3 different onClicked functions. You could just chuck them all into the one function, and it would work. You also had 2 of the same function, so I just removed one of them, and put the other inside the function.
It should now work. If it doesn't, please reply back with any errors in the output, and I'll go back and see what is wrong.
If it does work, then be sure to +1 and accept answer.
1 comment
Any errors in output? Add prints in each line to see if the code stops somewhere.