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

Tycoon Problem Name is not a vaild members of players?

Asked by 8 years ago
function onTouch(hit)
    local name = hit.Parent.Name
    if name then
    local check1 = game.Players.name:WaitForChild("leaderstats")
    if check1 then
    local check2 = game.Players.name:WaitForChild("Owner")
    if check2 then
    local check3 = check2.Value
    if check3 then
        check3 = true
                end
            end
        end
    end
end
script.Parent.Touched:connect(onTouch)

Please Help Don't give thumbs down

0
the script looks confusing, and there is no errors shown unless there is none yoshi8080 445 — 8y

1 answer

Log in to vote
1
Answered by 8 years ago

game.Players is a service, not the LocalPlayer.

You're obviously trying to get the leaderstats of the player that Touched the part. In order to do this, I would suggest using the GetPlayerFromCharacter() function from the players service. First, let's get the character. To do this, simply use part.Parent. To know for sure if the part's parent is the character, check if it has a Humanoid, like so,

function onTouch(hit)
    if hit.Parent:FindFirstChild("Humanoid") then-- Checks for Humanoid

    end
end
script.Parent.Touched:connect(onTouch)

Now we can Define the character,

function onTouch(hit)
    if hit.Parent:FindFirstChild("Humanoid") then
        local char = part.Parent--Define character
    end
end
script.Parent.Touched:connect(onTouch)

Now we get the player by using GetPlayerFromCharacter. Like so,

function onTouch(hit)
    if hit.Parent:FindFirstChild("Humanoid") then
        local char = part.Parent
        local plr = game.Players:GetPlayerFromCharacter(char)--Get player using character
    end
end
script.Parent.Touched:connect(onTouch)

Now we can throw your code in there!

EDIT, fixed error.

function onTouch(hit)
    if hit.Parent:FindFirstChild("Humanoid") then
        local char = part.Parent
        local plr = game.Players:GetPlayerFromCharacter(char)
        local check1 = plr:WaitForChild("leaderstats")
        if check1 then
            local check2 = plr:WaitForChild("Owner")
            if check2 then
                local check3 = check2.Value
                if check3 then
                    check3 = true
                end
            end
        end
    end
end
script.Parent.Touched:connect(onTouch)

That should work.

However, it seems what you were going for was this,

function onTouch(hit)
    local name = hit.Parent.Name
    if name then
    local check1 = game.Players[name]:WaitForChild("leaderstats")
    if check1 then
    local check2 = game.Players[name]:WaitForChild("Owner")
    if check2 then
    local check3 = check2.Value
    if check3 then
        check3 = true
                end
            end
        end
    end
end
script.Parent.Touched:connect(onTouch)

or

function onTouch(hit)
    local name = hit.Parent.Name
    if name then
    local check1 = game.Players:FindFirstChild(name):WaitForChild("leaderstats")
    if check1 then
    local check2 = game.PlayersFindFirstChild(name):WaitForChild("Owner")
    if check2 then
    local check3 = check2.Value
    if check3 then
        check3 = true
                end
            end
        end
    end
end
script.Parent.Touched:connect(onTouch)

Which would work, but I just provided a slightly better way.

Good Luck!

Ad

Answer this question