Bolt=script.Parent Players=game:GetService("\080\108\097\121\101\114\115")Debris=game:GetService("\068\101\098\114\105\115")Creator=Bolt:FindFirstChild("\099\114\101\097\116\111\114")BodyForce=Bolt:FindFirstChild("\066\111\100\121\070\111\114\099\101")BodyGyro=Bolt:FindFirstChild("\066\111\100\121\071\121\114\111")HitSound=Bolt:FindFirstChild("\072\105\116")Stuck=false Damage=33 function TagHumanoid(s,Z)local e=Instance.new("\079\098\106\101\099\116\086\097\108\117\101")e.Name="\099\114\101\097\116\111\114"e.Value=Z Debris:AddItem(e,2)e.Parent=s end function UntagHumanoid(s)for s,Z in pairs(s:GetChildren())do if Z:IsA("\079\098\106\101\099\116\086\097\108\117\101")and Z.Name=="\099\114\101\097\116\111\114"then Z:Destroy()end end end function Stick(s,Z)local e=Instance.new("\087\101\108\100")e.Part0=Bolt e.Part1=Z local W=Bolt.Position+Bolt.Velocity.unit*3 local X=CFrame.new(W)e.C0=Bolt.CFrame:inverse()*X e.C1=Z.CFrame:inverse()*X e.Parent=s end function IsTeamMate(s,Z)return s and(Z and(not s.Neutral and(not Z.Neutral and s.TeamColor==Z.TeamColor)))end function Touched(s)if not s or not s.Parent or Stuck then return end local Z=s.Parent if Z:IsA("\072\097\116")or Z:IsA("\084\111\111\108")then Z=Z.Parent end local e if Creator and(Creator.Value and Creator.Value:IsA("\080\108\097\121\101\114"))then e=Creator.Value end if e and e.Character==Z then return end local W=Players:GetPlayerFromCharacter(Z)if e and(W and IsTeamMate(e,W))then return end Stuck=true Stick(Bolt,s)if HitSound then HitSound:Play()end for s,Z in pairs({BodyForce,BodyGyro})do if Z and Z.Parent then Z:Destroy()end end local X=Z:FindFirstChild("\072\117\109\097\110\111\105\100")if X and X.Health>0 then UntagHumanoid(X)if e then TagHumanoid(X,e)end X:TakeDamage(Damage)end end Bolt.Touched:connect(Touched)for s=1,100,1 do wait(.1*s)if BodyGyro and BodyGyro.Parent then BodyGyro.cframe=CFrame.new(Vector3.new(0,0,0),-Bolt.Velocity.unit)end end
--Rescripted by Luckymaxer

Bolt = script.Parent

Players = game:GetService("Players")
Debris = game:GetService("Debris")

Creator = Bolt:FindFirstChild("creator")

BodyForce = Bolt:FindFirstChild("BodyForce")
BodyGyro = Bolt:FindFirstChild("BodyGyro")

HitSound = Bolt:FindFirstChild("Hit")

Stuck = false

Damage = 33

function TagHumanoid(humanoid, player)
	local Creator_Tag = Instance.new("ObjectValue")
	Creator_Tag.Name = "creator"
	Creator_Tag.Value = player
	Debris:AddItem(Creator_Tag, 2)
	Creator_Tag.Parent = humanoid
end

function UntagHumanoid(humanoid)
	for i, v in pairs(humanoid:GetChildren()) do
		if v:IsA("ObjectValue") and v.Name == "creator" then
			v:Destroy()
		end
	end
end

function Stick(Object, Hit)
	local Weld = Instance.new("Weld")
	Weld.Part0 = Bolt
	Weld.Part1 = Hit
	local HitPos = Bolt.Position + (Bolt.Velocity.unit * 3)
	local CJ = CFrame.new(HitPos)
	Weld.C0 = Bolt.CFrame:inverse() * CJ
	Weld.C1 = Hit.CFrame:inverse() * CJ
	Weld.Parent = Object
end

function IsTeamMate(Player1, Player2)
	return (
		Player1
		and Player2
		and not Player1.Neutral
		and not Player2.Neutral
		and Player1.TeamColor == Player2.TeamColor
	)
end

function Touched(Hit)
	if not Hit or not Hit.Parent or Stuck then
		return
	end
	local character = Hit.Parent
	if character:IsA("Hat") or character:IsA("Tool") then
		character = character.Parent
	end
	local CreatorPlayer
	if Creator and Creator.Value and Creator.Value:IsA("Player") then
		CreatorPlayer = Creator.Value
	end
	if CreatorPlayer and CreatorPlayer.Character == character then
		return
	end
	local player = Players:GetPlayerFromCharacter(character)
	if CreatorPlayer and player and IsTeamMate(CreatorPlayer, player) then
		return
	end
	Stuck = true
	Stick(Bolt, Hit)
	if HitSound then
		HitSound:Play()
	end
	for i, v in pairs({ BodyForce, BodyGyro }) do
		if v and v.Parent then
			v:Destroy()
		end
	end
	local humanoid = character:FindFirstChild("Humanoid")
	if humanoid and humanoid.Health > 0 then
		UntagHumanoid(humanoid)
		if CreatorPlayer then
			TagHumanoid(humanoid, CreatorPlayer)
		end
		humanoid:TakeDamage(Damage)
	end
end

Bolt.Touched:connect(Touched)

for i = 1, 100 do
	wait(0.1 * i)
	if BodyGyro and BodyGyro.Parent then
		BodyGyro.cframe = CFrame.new(Vector3.new(0, 0, 0), -Bolt.Velocity.unit)
	end
end
