Ad
Still have questions? Join our Discord server and get real time help.
Log in to vote
0

How do you fix where a value is a child of something but the system does not see it?

Asked by 8 months ago
Edited 8 months ago

My script is supposed to give XP to a person that kills an NPC, however i've run into problems along the way.

(script i am having trouble with)

local humanoid = script.Parent.Humanoid
humanoid.Died:Connect(function()
    game.ServerStorage:WaitForChild("Events").GiveXp:Fire(100, humanoid.creator.Value)
end)

(damage script)

script.Parent.Touched:Connect(function(hit)
    local DmgValues = {script.Dmg.Value, script.DmgCritical.Value, script.Dmg2.Value, script.Dmg3.Value, script.DmgCritical2.Value}
    local char = hit.Parent
    local hum = char:FindFirstChild("Humanoid")
    local chance = math.random(1, #DmgValues)
        if hum and char.Name ~= script.Parent.Parent.Name then
        hum.Health = hum.Health - DmgValues[chance]
        script.Disabled = true
        wait(0.5)
        script.Disabled = false

-- THIS PART ONLY BELOW     

        local player = game.Players.LocalPlayer

        if hit.Parent.Humanoid.Health <= 0 then
            local creator = Instance.new("ObjectValue")
            creator.Name = "creator"
            creator.Parent = hit.Parent.Humanoid
            creator.Value = player
            end
        end
    end)

I always run into an issue here, where in the output it says, "creator is not a valid member of Humanoid"

although the explorer shows that the value is indeed inside the humanoid.

How do i make it so that the system will know that the "creator" value is there?

1 answer

Log in to vote
1
Answered by 8 months ago
Edited 8 months ago

It's because you are making the value in a localscript. Now, I am presuming you are using a localscript because it can get the player easily, but this means that no-one else will see anything the player does except for the player. The way to fix this is to turn it into a regular script and get the player by using game.Players:GetPlayerFromCharacter().

script.Parent.Touched:Connect(function(hit)
    local DmgValues = {script.Dmg.Value, script.DmgCritical.Value, script.Dmg2.Value, script.Dmg3.Value, script.DmgCritical2.Value}
    local char = hit.Parent
    local hum = char:FindFirstChild("Humanoid")
    local chance = math.random(1, #DmgValues)
        if hum and char.Name ~= script.Parent.Parent.Name then
        hum.Health = hum.Health - DmgValues[chance]
        script.Disabled = true
        wait(0.5)
        script.Disabled = false

        local player = game.Players:GetPlayerFromCharacter(script.Parent.Parent)

        if hit.Parent.Humanoid.Health <= 0 then
            local creator = Instance.new("ObjectValue")
            creator.Name = "creator"
            creator.Parent = hit.Parent.Humanoid
            creator.Value = player
            end
        end
    end)
Ad

Answer this question