Still have questions? Join our Discord server and get real time help.
0

Help me with tree chopping script?

Yeevivor4 155
5 years ago
hits = script.Parent.hit --This keeps track of how much "hp" the tree has left
local newtree = script.Parent:clone() --for inserting a new tree later

while true do --infinite loop
if hits.Value < 1 then --if the tree has less than 1 "hp" then
script.Parent:BreakJoints() --make tree able to fall over.
wait(3) --wait a while
script.Parent:remove() --remove the tree
wait(10) --wait a while
newtree.Parent = game.Workspace --insert a new tree
newtree:MakeJoints() --make tree unable to fall over
end
wait(1) --wait a while before checking trees hp again
end


So in this model, I have a model that has a tree, and this script inside of the model. When I first use an axe to hit the tree, it breaks and give me money. After that, it regenerates, but when it regenerates it gives me this line. Workspace.Tree.FellCheck:6: attempt to index field 'Parent' (a nil value)

How do I make it so that there is a parent?

0
Have you tried to play it solo and look at the hierarchy in explorer as this regenerates? I believe you may just be cloning a part, not the whole model? alphawolvess 1784 — 5y

0
Discern 1007
5 years ago

When your tree regenerates, Line 6 is trying to break the script's parent's joints. What's happening is that your loop is running so fast that it runs the loop before the tree is even there. You should wait before the parent is there, and you can clone it after the script recognizes its parent.

hits = script.Parent.hit --This keeps track of how much "hp" the tree has left
local newtree = script.Parent:clone() --for inserting a new tree later

while true do --infinite loop
if hits.Value < 1 then --if the tree has less than 1 "hp" then
repeat wait() until script.Parent --Waits until the script has a parent.
script.Parent:BreakJoints() --make tree able to fall over.
wait(3) --wait a while
script.Parent:remove() --remove the tree
wait(10) --wait a while
newtree.Parent = game.Workspace --insert a new tree
newtree:MakeJoints() --make tree unable to fall over
end
wait(1) --wait a while before checking trees hp again
end


If I helped you out, make sure to hit the Accept Answer button below my character! :D

0
BlueTaslem 17922
5 years ago

The error is telling you that script.Parent is nil.

Look at the script what might cause this:

script.Parent:remove()


:remove() will recursively break all objects off from their parents, thus script.Parent is nil after that line.

Really, this script, as it is currently structured, shouldn't use a while true do loop.

What you are doing is waiting until the tree dies; then you get rid of the tree, and put in a fresh on (which has its own new script, anyway).

Thus this might be more straightforward

local model = script.Parent -- You say this a lot, so make it a variable!
local hits = model.hit
local newTree = model:Clone()

repeat
-- Do this (wait)
wait(1)
-- until this tree is dead
until hits.Value < 1

model:BreakJoints()
wait(3)
model:Remove()
wait(10)
newTree.Parent = workspace
newTree:MakeJoints()


In general, it would be better to not have the script be part of the model, though this would require a bit of re-architecturing.