local q={}local function U(U,j,Z)if U and j then local j,K=FindCharacterAncestor(U.Parent)if j then local q=CreatorTag.Value if q and not q.Neutral then local U=PlayersService:GetPlayerFromCharacter(j)if U and(U~=q and U.TeamColor==Rocket.BrickColor)then return end end end if K and K.Health>0 then if not IsInTable(q,K)then print("\084\097\103\103\101\100")table.insert(q,K)ApplyTags(K)K:TakeDamage(BLAST_DAMAGE)end else if U.Name~="\072\097\110\100\108\101"then U:BreakJoints()local q=Instance.new("\066\111\100\121\070\111\114\099\101",U)q.Force=((U.Position-Z).unit*BLAST_FORCE)*U:GetMass()DebrisService:AddItem(q,.1)end end end end local j=false local function Z(q)for q,Z in ipairs(q)do if Rocket then if IGNORE_LIST[string.lower(Z.Name)]then return end local q=CreatorTag.Value if q then if q.Character and q.Character:IsAncestorOf(Z)then return end if not q.Neutral then local U=FindCharacterAncestor(Z.Parent)local j=PlayersService:GetPlayerFromCharacter(U)if j and(j~=q and j.TeamColor==Rocket.BrickColor)then return end end end if Z==workspace.Terrain then local q=Rocket.Position+Rocket.CFrame.lookVector*(Rocket.Size.Z/2)local U=workspace.Terrain:WorldToCellPreferSolid(q)local j=workspace.Terrain:GetCell(U.X,U.Y,U.Z)if j==Enum.CellMaterial.Water or j==Enum.CellMaterial.Empty then return end end j=true local K=Instance.new("\069\120\112\108\111\115\105\111\110")K.BlastPressure=0 K.BlastRadius=BLAST_RADIUS K.ExplosionType=Enum.ExplosionType.NoCraters K.Position=Rocket.Position K.Parent=workspace K.Hit:Connect(function(q,j)U(q,j,K.Position)end)script.Parent=K CreatorTag.Parent=script Rocket:Destroy()end end end
-- Customized explosive effect that doesn't affect teammates and only breaks joints on dead parts
local TaggedHumanoids = {}
local function OnExplosionHit(hitPart, hitDistance, blastCenter)
	if hitPart and hitDistance then
		local character, humanoid = FindCharacterAncestor(hitPart.Parent)

		if character then
			local myPlayer = CreatorTag.Value
			if myPlayer and not myPlayer.Neutral then -- Ignore friendlies caught in the blast
				local player = PlayersService:GetPlayerFromCharacter(character)
				if player and player ~= myPlayer and player.TeamColor == Rocket.BrickColor then
					return
				end
			end
		end

		if humanoid and humanoid.Health > 0 then -- Humanoids are tagged and damaged
			if not IsInTable(TaggedHumanoids, humanoid) then
				print("Tagged")
				table.insert(TaggedHumanoids, humanoid)
				ApplyTags(humanoid)
				humanoid:TakeDamage(BLAST_DAMAGE)
			end
		else -- Loose parts and dead parts are blasted
			if hitPart.Name ~= "Handle" then
				hitPart:BreakJoints()
				local blastForce = Instance.new("BodyForce", hitPart) --NOTE: We will multiply by mass so bigger parts get blasted more
				blastForce.Force = (hitPart.Position - blastCenter).unit * BLAST_FORCE * hitPart:GetMass()
				DebrisService:AddItem(blastForce, 0.1)
			end
		end
	end
end
local Isexplosion = false
local function OnTouched(otherParts)
	for i, otherPart in ipairs(otherParts) do
		if Rocket then
			-- Fly through anything in the ignore list
			if IGNORE_LIST[string.lower(otherPart.Name)] then
				return
			end

			local myPlayer = CreatorTag.Value
			if myPlayer then
				-- Fly through the creator
				if myPlayer.Character and myPlayer.Character:IsAncestorOf(otherPart) then
					return
				end

				-- Fly through friendlies
				if not myPlayer.Neutral then
					local character = FindCharacterAncestor(otherPart.Parent)
					local player = PlayersService:GetPlayerFromCharacter(character)
					if player and player ~= myPlayer and player.TeamColor == Rocket.BrickColor then
						return
					end
				end
			end

			-- Fly through terrain water
			if otherPart == workspace.Terrain then
				--NOTE: If the rocket is large, then the simplifications made here will cause it to fly through terrain in some cases
				local frontOfRocket = Rocket.Position + (Rocket.CFrame.lookVector * (Rocket.Size.Z / 2))
				local cellLocation = workspace.Terrain:WorldToCellPreferSolid(frontOfRocket)
				local cellMaterial = workspace.Terrain:GetCell(cellLocation.X, cellLocation.Y, cellLocation.Z)
				if cellMaterial == Enum.CellMaterial.Water or cellMaterial == Enum.CellMaterial.Empty then
					return
				end
			end
			Isexplosion = true
			-- Create the explosion
			local explosion = Instance.new("Explosion")
			explosion.BlastPressure = 0 -- Completely safe explosion
			explosion.BlastRadius = BLAST_RADIUS
			explosion.ExplosionType = Enum.ExplosionType.NoCraters
			explosion.Position = Rocket.Position
			explosion.Parent = workspace

			-- Connect custom logic for the explosion
			explosion.Hit:Connect(function(hitPart, hitDistance)
				OnExplosionHit(hitPart, hitDistance, explosion.Position)
			end)
			-- Move this script and the creator tag (so our custom logic can execute), then destroy the rocket
			script.Parent = explosion
			CreatorTag.Parent = script
			Rocket:Destroy()
		end
	end
end
