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)