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

Why is the Hit event of an explosion returning distances greater than its blast radius?

Asked by 8 years ago

So I have a tank that fires grenades, and I have the grenade damage based on the distance the explosion center is from a humanoid, but for some odd reason, the distance parameter of the Hit event returns distances that are greater than the blast radius of the explosion itself. I even got values that were twice as large as the blast radius of the explosion itself. Is there any reason for this? Please help.

Here's the main grenade code:

Grenade.Touched:connect(function(Obj)
    if (not Obj:IsDescendantOf(Char)) and (not grenadeHit) then
        grenadeHit = true

        expSound:Play()

        local Explosion = Instance.new("Explosion")
        Explosion.BlastPressure = grenadeExplosionPressure --This is 50000
        Explosion.BlastRadius = grenadeExplosionRadius --This is 15
        Explosion.DestroyJointRadiusPercent = (grenadeRangeBasedDamage and 0 or 1) --This is currently set to 0
        Explosion.ExplosionType = Enum.ExplosionType.NoCraters
        Explosion.Position = Grenade.Position
        Explosion.Hit:connect(function(Obj, Dist)
            local hitHumanoid = (
                Obj.Parent:IsA("Accoutrement") and findFirstClass(Obj.Parent.Parent, "Humanoid")
                or findFirstClass(Obj.Parent, "Humanoid")
            )
            if hitHumanoid then
                createCreatorTag(hitHumanoid)
                if grenadeRangeBasedDamage then
                    local distFactor = 1 - (Dist / grenadeExplosionRadius)
                    local baseDamage = distFactor * grenadeDamage
                    if Obj:FindFirstChild("damageMultiplier") then
                        print(distFactor) --This prints negative numbers for some reason
                        hitHumanoid:TakeDamage(baseDamage * Obj.damageMultiplier.Value)
                    else
                        if Obj.Name == "Torso" then
                            hitHumanoid:TakeDamage(baseDamage)
                        end
                    end
                end
            end
        end)
        Explosion.Parent = workspace
        wait()
        Grenade:Destroy()
    end
end)

Thanks!

1 answer

Log in to vote
0
Answered by 8 years ago
Explosion.BlastRadius = grenadeExplosionRadius  --This is 15
1 - (Dist / grenadeExplosionRadius)

Math if Dist was > 15 then negative number

0
I know that but what I'm asking is why is the event returning distance values that are greater than the radius of the explosion itself? That's what doesn't make sense TurboFusion 1821 — 8y
0
I'm thinking of 2 things. If the grenade touches more than 1 object would one explosion affect the other and the fact that the grenade can be pushed by blast pressure with it's full force since the grenade isn't anchored(I think) PureConcept 0 — 8y
0
Which would cause another explosion most likely? PureConcept 0 — 8y
Ad

Answer this question