After this NPC is killed, it is supposed to turn into rust and then explode. It won't work for some reason and it isn't giving me anything on output. Any help?
script.Parent:WaitForChild("Humanoid").Health.Changed:Connect(Check) function Check() if script.Parent.Humanoid.Health <= 0 then local Children = script.Parent:GetChildren() if Children:IsA("BasePart") or ("UnionOperation") then Children.Material = Enum.Material.CorrodedMetal Children.BrickColor = BrickColor.new("Cork") end elseif script.Parent:WaitForChild("Humanoid").Health >= 0 then print("boss is chilling") end end
Hey!
Your problem here is that you're trying to connect the Changed event to a property rather than an instance. Changed
is actually connected to the instance itself and the connected function will be called with the property's key as its parameter. A code example is shown below...
function Check(param) if param == "Health" then -- your code here end end humanoid.Changed:Connect(Check)
Alternatively, you can use the GetPropertyChangedSignal
method where you can connect changed signals to certain properties. It works exactly like the Changed
event, although it will only be fired when the specified property changes, eliminating the need for an if statement to make sure the changed property is the one you want. A code example for that is also shown below...
-- I'll break this down so it's easier to understand. local event = humanoid:GetPropertyChangedSignal("Health") -- An event is returned, we just need to connect it. event:Connect (function() -- Connecting the event defined above. -- your code here end)
Apart from that, I also see that you're trying to invoke IsA
on Children, which is a table value. :GetChildren()
returns a table with all children of said instance. You'll have to iterate through Children with a for loop or find a singular instance by its index. (e.g. Children[1])
If you have any other questions, feel free to ask.
If this helped, please remember to accept the answer. :)