Now, this might be a bit too advanced for a beginner, but here's what I could do:
local tool = script.Parent
local handle = tool:WaitForChild("Handle")
script.Parent.Handle.Touched:Connect(function(hit)
local players = game:GetService("Players")
if hit.Parent:FindFirstChild("Humanoid") then
local humanoid = hit.Parent.Humanoid
local plr = players:GetPlayerFromCharacter(hit.Parent)
print("humanoid")
hit.Parent:BreakJoints()
plr.CharacterAdded:Wait()
print("added")
local bodyColors = plr.Character["Body Colors"]
local color = BrickColor.new("Electric blue")
local changeColor = {
HeadColor = color,
LeftArmColor = color,
RightArmColor = color,
LeftLegColor = color,
RightLegColor = color,
TorsoColor = color
}
local colorful=plr.Character:GetChildren()
for i = 1, #colorful, 1 do
if (colorful[i]:IsA("Part") or colorful[i]:IsA("MeshPart")) and (not colorful[i]:FindFirstChild("ParticleEmitter")) then
print(colorful[i].Name)
local particle = Instance.new("ParticleEmitter")
particle.Parent= colorful[i]
end
end
print("yay")
for k, v in pairs(changeColor) do
bodyColors[k] = v
end
end
end)
This is very confusing I recommend not reading below
Let me explain it in detail.
You already know how to set up a listener, so we'll skip that part and how to check for humanoid, we'll skip those parts.
CharacterAdded is also a listener. It listens for when a players character loads. This time, you may have noticed, we don't use :Connect() to connect it to a function, we use :Wait()
to make it wait for when the event happens.
Now, I'm not sure if you know what this is, so I'm gonna explain it anyways.
In order to explain what a dictionary is, you're gonna need to know what an array is first.
An array (or table) is like a set of values which you can index from numbers 1 to the length of the array (I did my best ;-;).
A dictionary is kinda like that but instead of numbers, you have a key and a value (kinda like variables).
Just so you know, to get the length of a table or a dictionary we use # thingy.
Next, we get the children of the player's character using GetChildren(). GetChildren() will return an array of the children.
Then a for loop from 1 to the length of the colorful array.
It will check if the part is a part or meshpart and if a particleemitter doesnt exist already in it, and if all that's true it will put a particleemitter in it.
After that is another for loop which will get the key and value from the dictionary changeColor and it will change the color.
Yeah, I'm bad at explaining.
Why your script didn't work
local tool = script.Parent
local handle = tool:WaitForChild("Handle")
script.Parent.Handle.Touched:Connect(function(hit)
if hit.Parent.Humanoid then
hit.Parent:BreakJoints()
local colorful=hit.Parent:GetChildren()
if colorful.ClassName=="Part" then
colorful.BrickColor=BrickColor.new("Electric blue")
local particle = Instance.new("ParticleEmitter")
particle.Parent=colorful
end
end
end)
at line 6, colorful is defined. As mentioned earlier, GetChildren() returns an array.
at line 7, arrays don't have ClassNames.
line 8, arrays don't have BrickColors either.
line 10, I don't think you can parent anything to them.