local r={Damage=50,AttackTime=.5;CoolDown=0,LastSwing=0;LastHit=0;Part=nil,Owner=nil,OnHit=nil;OnHitHumanoid=nil,OnAttackReady=nil,OnAttack=nil,SwingSound=nil;HitSound=nil;SwingAnimation=nil,ActiveConnections={}}do UTIL.MakeClass(r)function r.New(f,a)local m=UTIL.DeepCopy(r)m.Part=f m.Owner=a table.insert(m.ActiveConnections,m.Part.Touched:connect(function(r)m:SwordTouch(r)end))m.OnHit=InternalEvent.New()m.OnHitHumanoid=InternalEvent.New()m.OnAttackReady=InternalEvent.New()m.OnAttack=InternalEvent.New()return m end function r.SwordTouch(f,r)if tick()-f.LastSwing>f.AttackTime or tick()-f.LastHit<f.AttackTime then return end f.OnHit:Fire(r)local a,m=UTIL.FindCharacterAncestor(r)if a and a~=f.Owner.Character then m:TakeDamage(f.Damage)f.OnHitHumanoid:Fire(m,r)f.LastHit=tick()if f.HitSound then f.HitSound:Play()end end end function r.DoSwing(r)if tick()-r.LastSwing<r.AttackTime+r.CoolDown then return end if r.SwingAnimation then r.SwingAnimation:Play()end if r.SwingSound then r.SwingSound:Play()end r.LastSwing=tick()r.OnAttack:Fire()end function r.Destroy(r)for r,f in pairs(r.ActiveConnections)do f:disconnect()end end end do local f=script.Parent local a=f.Parent local m=game.Players.LocalPlayer local g=UTIL.WaitForValidCharacter(m)local j=(UTIL.Instantiate("\065\110\105\109\097\116\105\111\110"))({AnimationId="\104\116\116\112\058\047\047\119\119\119\046\114\111\098\108\111\120\046\099\111\109\047\065\115\115\101\116\063\073\068\061\056\057\050\056\057\056\055\057"})local n=f:WaitForChild("\072\105\116")local Y=f:WaitForChild("\083\119\105\110\103")local d local P a.Equipped:connect(function(a)P=r.New(f,m)P.Damage=40 P.HitSound=n P.SwingSound=Y g=UTIL.WaitForValidCharacter(m)local z=g:FindFirstChild("\072\117\109\097\110\111\105\100")d=z:LoadAnimation(j)P.SwingAnimation=d P.OnHitHumanoid:Connect(function(r,a)local m=g:FindFirstChild("\084\111\114\115\111")local j=r.Parent:FindFirstChild("\084\111\114\115\111")if not j or not m then return end if a.Name=="\082\105\103\104\116 \065\114\109"or a.Name=="\076\101\102\116 \065\114\109"or a.Name=="\082\105\103\104\116 \076\101\103"or a.Name=="\076\101\102\116 \076\101\103"then a:BreakJoints()WeldUtil.WeldBetween(a,f)Delay(1,function()a:BreakJoints()end)end end)a.Button1Down:connect(function()P:DoSwing()end)end)a.Unequipped:connect(function()P:Destroy()end)end
--
	
local SwordPart =
{
	Damage = 50,
	AttackTime = 0.5,
	CoolDown = 0,
	
	LastSwing = 0,
	LastHit = 0,

	Part= nil,
	Owner = nil,--player object that owns this sword
	
	OnHit = nil,
	OnHitHumanoid = nil,
	OnAttackReady = nil,
	OnAttack = nil,
	
	
	SwingSound = nil,
	HitSound = nil,
	SwingAnimation = nil, --animation track!
	
	ActiveConnections = {},
	
}
do
	UTIL.MakeClass(SwordPart)
	function SwordPart.New(npart,nowner)
		local init= UTIL.DeepCopy(SwordPart)
		init.Part= npart
		init.Owner = nowner
		table.insert(init.ActiveConnections,init.Part.Touched:connect(function(hit) init:SwordTouch(hit) end))
		
		init.OnHit = InternalEvent.New()
		init.OnHitHumanoid = InternalEvent.New()
		init.OnAttackReady = InternalEvent.New()
		init.OnAttack = InternalEvent.New()
		
		return init
	end
	
	function SwordPart:SwordTouch(hit)
		if tick()-self.LastSwing >self.AttackTime or tick()-self.LastHit<self.AttackTime then return end
		self.OnHit:Fire(hit)
		local character,humanoid = UTIL.FindCharacterAncestor(hit)
		if character and character ~= self.Owner.Character then
			humanoid:TakeDamage(self.Damage)
			self.OnHitHumanoid:Fire(humanoid,hit)
			self.LastHit = tick()
			if self.HitSound then
				self.HitSound:Play()
			end
		end
		
	end
	
	function SwordPart:DoSwing()
		if tick()-self.LastSwing<self.AttackTime+self.CoolDown then
			return
		end
		
		if self.SwingAnimation then
			self.SwingAnimation:Play()
		end
		if self.SwingSound then
			self.SwingSound:Play()
		end
		self.LastSwing = tick()
		self.OnAttack:Fire()
	end
	
	function SwordPart:Destroy()
		for _,i in pairs(self.ActiveConnections) do
			i:disconnect()
		end
	end
end
do
	local Handle = script.Parent
	local Tool = Handle.Parent
	
	local Player = game.Players.LocalPlayer
	local Character = UTIL.WaitForValidCharacter(Player)
	local SwingAni = UTIL.Instantiate"Animation"
	{AnimationId = "http://www.roblox.com/Asset?ID=89289879"}
	
	local HitSound = Handle:WaitForChild('Hit')
	local SwingSound = Handle:WaitForChild('Swing')
	
	local SwingAniTrack
	
	local Sword
	
	
	Tool.Equipped:connect(function(mouse)
		Sword = SwordPart.New(Handle,Player)
		Sword.Damage = 40
		Sword.HitSound = HitSound
		Sword.SwingSound = SwingSound
		Character = UTIL.WaitForValidCharacter(Player)
		local Humanoid = Character:FindFirstChild('Humanoid')

		SwingAniTrack = Humanoid:LoadAnimation(SwingAni)
		Sword.SwingAnimation = SwingAniTrack
		
		Sword.OnHitHumanoid:Connect(function(humanoid,hit)
			local myTorso = Character:FindFirstChild('Torso')
			local torso = humanoid.Parent:FindFirstChild('Torso')
			if not torso or not myTorso then return end
			
			if hit.Name=='Right Arm' or hit.Name=='Left Arm' or hit.Name=='Right Leg' or hit.Name=='Left Leg' then
				hit:BreakJoints()
				WeldUtil.WeldBetween(hit, Handle)
				Delay(1,function() hit:BreakJoints() end )
			end
		end)
		
		mouse.Button1Down:connect(function()
			Sword:DoSwing()
		end)
	end)
	Tool.Unequipped:connect(function()
		Sword:Destroy()
	end)

end
