Touched event not firing

Lmao I’m still confused. (30chars)

When you weld an Unanchored Part to an Anchored Part it reacts like an Anchored Part.
He’s suggesting having an Unanchored Part that surrounds your engine (or if it only needs to react to a touch at the front of the engine just locate it at the front) but don’t attach it. Use a BodyPosition or something else to move it with the engine itself and fire the Touched event off that Part.

1 Like

Is it possible the object the train hits can be unanchored?

An transparent part that has the role of working back-end. It is used for many things including your problem and others. :slight_smile:

(I hope this explanation helped)

@Fondatix It’s not hit:FindFirstChild() but hit.Parent:FindFirstChild(). Your Script should look like this:

script.Parent.Touched:Connect(function(hit)
print("e")
if hit.Parent.Name == "Train" and hit.Parent:FindFirstChild("Moving") then
	print("a")
	local explos = Instance.new("Explosion")
	explos.Position = script.Parent.Position
	explos.Parent = script.Parent
	explos.BlastPressure = .4
	hit.Parent.Parent.TrainHandler.Disabled = true
	hit.Parent.Chug:Stop()
	for i = 20,1,-1 do
		local End = hit.Parent.Parent:GetPrimaryPartCFrame()*CFrame.Angles(math.rad(90),0,0)
		local start = hit.Parent.Parent:GetPrimaryPartCFrame()
		hit.Parent.Parent:SetPrimaryPartCFrame(start:lerp(End,i))
	end
	script.Parent.Explosion:Play()
end
end)
1 Like

The Hit is nothing else than the Party that touches it, so if it would be a Player to twist it, then to get his Humanoid he doesn’t have to do Hit.Humanoid, but Hit.Parent.Humanoid, because the Part that will touch your Part (and that will cause the Touched event) will normally be a Player Model’s Child, not the Model itself. To help you you can do this:

script.parent.Touched:Connect(function(hit) 
    print(hit.Parent.Name)
end)

it should give you the Name of the Party that touches it, I hope this helped you.

He is not trying to have the player touch it, he wants the train’s part to touch the engine

1 Like

@Hello42bacon, The Player was just a example.

1 Like

Models don’t have touch events, I think you mean this:

for i, v in pairs(script.Parent:GetChildren()) do
v.Touched:Connect(function(hit)
	print("e")
	if hit.Name == "Train" and hit:FindFirstChild("Moving") then
		print("a")
		local explos = Instance.new("Explosion")
		explos.Position = script.Parent.Position
		explos.Parent = script.Parent
		explos.BlastPressure = .4
		hit.Parent.TrainHandler.Disabled = true
		hit.Chug:Stop()
		for i = 20,1,-1 do
			local End = hit.Parent:GetPrimaryPartCFrame()*CFrame.Angles(math.rad(90),0,0)
			local start = hit.Parent:GetPrimaryPartCFrame()
			hit.Parent:SetPrimaryPartCFrame(start:lerp(End,i))
		end
		script.Parent.Explosion:Play()
	end
end)
end
1 Like

He is using the touch event in a part not his train model. Well it is a descendant in the train model.

1 Like

@VegetationBush You cant use Events in a loop, it dont have sense. and if a Player touch a Part that has a Model Parent, then the PART will activate the touched event, not the Model. Models dont have a touched event, you have right, but the Parts yes and if you touch a Model, you Touch the Part into the Model, not the Model self. You script cant work.

Actually, you can. If you use Collection Service, you would most likely put events in a loop, because what a loop does is to do something to whatever the loop iterated through

2 Likes

I know the Collection Service, but you cant make a event inside a loop. Outside the loop will work.

Try and you would find out that it works. I don’t want to sound rude, sorry.
Here’s an example. If you tag a button ui and you need it to have render stepped when the mouse button is down, not only are you putting a function inside a loop, but also another function

1 Like

Uh, not really. The hit part is called Train and has Moving in it. Also, I just unanchored the other part and that seems to work.

1 Like