Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Bullets are creating explosions twice when hitting multiple parts?

Asked by 7 years ago
Edited 7 years ago

I'm pretty confused on the workaround for this. My gun's bullets, when hitting multiple parts, runs the touched event twice before the bullet is destroyed.

    missile.Touched:connect(function(hit)
        if hit.CanCollide ~= false or hit.Name == "Right Leg" or hit.Name == "Left Leg" or hit.Name == "Left Arm" or hit.Name == "Right Arm" then
            if hit.Transparency ~= 1 then -- The above could lag?
                missile.Parent = nil -- Still creates the explosion
                local E = Instance.new("Explosion")
                E.BlastPressure = S.ExplosionPressure
                E.BlastRadius = S.ExplosionRadius
                E.DestroyJointRadiusPercent = (S.RangeBasedDamage and 0 or 1)
                E.ExplosionType = S.ExplosionType
                E.Position = missile.Position -- It creates two explosions!!!!
                E.Parent = game.Workspace
                E.Hit:connect(function(hitPart, partDistance)
                    if (not hitPart:IsDescendantOf(Character)) and hitPart.Name == "Torso" then
                        print("Hit "..hitPart.Name.."!")
                        local humanoid =  hitPart.Parent:FindFirstChild("Humanoid")
                        if humanoid then
                            local distance_factor = partDistance / E.BlastRadius  
                            local distinvert = 1 - distance_factor
                            local newdamage = damage*distinvert 
                            humanoid:TakeDamage(newdamage) 
                        end
                    end
                end)

                --HitSound:Play()

            end
        end
    end)

So, due to this, it creates two explosions, thus harming any humanoids nearby twice. How would I prevent this from happening?

1
Try missile:Destroy() instead of missile.Parent = nil and after you test it report it here please. superalp1111 662 — 7y
0
It works! Thanks! coolyoshipower 42 — 7y

1 answer

Log in to vote
0
Answered by
Jexpler 63
7 years ago

What you could do is say that if the script is in the bullet. If not then change script.parent to where the bullet is.

script.Parent.Touched:connect(function(hit)

Then tell the script that after the bullet hits something to stop giving explosions.

Ad

Answer this question