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

Why does this rocket still kill humanoids I want to ignore?

Asked by 8 years ago

It's a little complicated, when I hit the soldiers directly, with the missile, the soldier doesn't die. If I hit around the radius of the soldier(ground, nearby enemies) the soldier dies. I figured that the actual explosion is killing the soldier, not the missile. How can I make it so the explosion(not the missile, that is already correct) ignores soldiers and hits only the target and the other targets in the vicinity?

function blow(hit)
        Hit = hit
        plr = game.Players:GetPlayerFromCharacter(hit.Parent)
        local explosion = Instance.new("Explosion")
        explosion.DestroyJointRadiusPercent = 0 -- neck welds won't be destroyed
        explosion.BlastRadius = 20
        explosion.BlastPressure = 1000

            local maxDamage = 100      

            local explosion = Instance.new("Explosion")
            explosion.DestroyJointRadiusPercent = 0 -- neck welds won't be destroyed
            explosion.BlastRadius = 20
            explosion.BlastPressure = 1000

            explosion.Hit:connect(function(hitPart, partDistance)
            local humanoid = hitPart.Parent and hitPart.Parent:FindFirstChild("Humanoid")
            local plr = game.Players:GetPlayerFromCharacter(hitPart.Parent)
        if hit.Parent.ClassName ~= ("Tool") and hit.Parent.Name ~= ("Workspace") and humanoid and  hit.Parent.Name ~= ("Soldier")  not plr then
                swoosh:stop()
                local distance_factor = partDistance / explosion.BlastRadius    -- get the distance as a value between 0 and 1
                distance_factor = 1 - distance_factor
        if hit.Parent.ClassName ~= ("Tool") and hit.Parent.Name ~= ("Workspace") and hit.Parent.Name ~= ("Soldier")                -- flip the amount, so that lower == closer == more damage 
                humanoid:TakeDamage(maxDamage*distance_factor)  
        else
                explosion = Instance.new("Explosion") 
                explosion.DestroyJointRadiusPercent = 0
        end   -- 0: no damage; 1: max damage
        elseif hit.Parent.ClassName ~= ("Tool") and hit.Parent.Name ~= ("Workspace") and plr and plr.TeamColor ~= game.Teams.Enemies.TeamColor then
                swoosh:stop()
                explosion = Instance.new("Explosion")
                explosion.DestroyJointRadiusPercent = 0
        end
    end)

I think the problem is by where is says "ELSEIF", there are no santax errors either.

function blowUp(obj)
    local sound = Instance.new("Sound")
        sound.SoundId = "rbxasset://sounds\\Rocket shot.wav"
        sound.Parent = obj
        sound.Volume = 1
        sound:play()
    local explosion = Instance.new("Explosion")
    explosion.BlastRadius = explosionRadius
    explosion.BlastPressure = explosionPressure -- these are really wussy units

        local maxDamage = 75   -- maximum possible damage. could also be based off of the Humanoid's MaxHealth

    local explosion = Instance.new("Explosion")
    explosion.DestroyJointRadiusPercent = 0 -- neck welds won't be destroyed
    explosion.BlastRadius = 20
    explosion.Hit:connect(function(hitPart, partDistance)
        local humanoid = hitPart.Parent and hitPart.Parent:FindFirstChild("Humanoid")
        local plr = game.Players:GetPlayerFromCharacter(hitPart.Parent)
    if humanoid and humanoid.Parent.Name ~= ("Soldier") and humanoid.Parent.Name ~= ("Guest") and humanoid.Parent.Name ~= ("") and humanoid.Parent.Name ~= ("") and humanoid.Parent.Name ~= (" ") and humanoid.Parent.Name ~= ("Emperor") and humanoid.Parent.Name ~= ("Governor") and not plr then
            local distance_factor = partDistance / explosion.BlastRadius    -- get the distance as a value between 0 and 1
            distance_factor = 1 - distance_factor                    -- flip the amount, so that lower == closer == more damage
            humanoid:TakeDamage(maxDamage*distance_factor)                -- 0: no damage; 1: max damage
        elseif plr and plr.TeamColor ~= game.Players.LocalPlayer.TeamColor then
         local distance_factor = partDistance / explosion.BlastRadius    -- get the distance as a value between 0 and 1
            distance_factor = 1 - distance_factor                    -- flip the amount, so that lower == closer == more damage
            humanoid:TakeDamage(maxDamage*distance_factor)                -- 0: no damage; 1: max damage        
        end
    end)

Answer this question