function Sword.Connect(Y)Handle.Touched:Connect(function(Y)local F=GLib.GetPlayerFromPart(Tool)local W,m,A=GLib.GetCharacterFromPart(Y)if F~=nil and(W~=nil and(A~=nil and F~=m))then local Y=GLib.IsTeammate(F,m)local W=F.Character local l=W and W:FindFirstChild("\072\117\109\097\110\111\105\100")if(Config.CanTeamkill.Value==true or Y~=true)and((l and(l:IsA("\072\117\109\097\110\111\105\100")and l.Health>0))and(Config.CanKillWithForceField.Value or W:FindFirstChild("\070\111\114\099\101\070\105\101\108\100")==nil))then local Y=Config.IdleDamage.Value if Sword.State=="\083\108\097\115\104\105\110\103"then Y=Config.SlashDamage.Value elseif Sword.State=="\076\117\110\103\105\110\103"then Y=Config.LungeDamage.Value end GLib.TagHumanoid(A,F,1)A:TakeDamage(Y)end end end)end function Sword.Attack(Y)local F,W,m=GLib.GetCharacterFromPart(Tool)if m~=nil and m.Health>0 then if Config.CanKillWithForceField.Value or F:FindFirstChild("\070\111\114\099\101\070\105\101\108\100")==nil then local Y=tick()if Sword.State=="\083\108\097\115\104\105\110\103"and Y-Sword.SlashingStartedAt<Sword.DoubleClickMaxTime then Sword.AttackTicket=Sword.AttackTicket+1 Sword:Lunge(Sword.AttackTicket)elseif Sword.State=="\073\100\108\101"then Sword.AttackTicket=Sword.AttackTicket+1 Sword.SlashingStartedAt=Y Sword:Slash(Sword.AttackTicket)end end end end function Sword.LocalAttack(Y)local F,W,m=GLib.GetCharacterFromPart(Tool)if m~=nil and m.Health>0 then if Config.CanKillWithForceField.Value or F:FindFirstChild("\070\111\114\099\101\070\105\101\108\100")==nil then local Y=tick()if Sword.LocalState=="\083\108\097\115\104\105\110\103"and Y-Sword.LocalSlashingStartedAt<Sword.LocalDoubleClickMaxTime then Sword.LocalAttackTicket=Sword.LocalAttackTicket+1 Sword:LocalLunge(Sword.LocalAttackTicket)elseif Sword.LocalState=="\073\100\108\101"then Sword.LocalAttackTicket=Sword.LocalAttackTicket+1 Sword.LocalSlashingStartedAt=Y Sword:LocalSlash(Sword.LocalAttackTicket)end end end end function Sword.Slash(F,Y)Sword.State="\083\108\097\115\104\105\110\103"Handle.SlashSound:Play()Sword:Animate("\083\108\097\115\104")wait(.5)if Sword.AttackTicket==Y then Sword.State="\073\100\108\101"end end function Sword.LocalSlash(F,Y)Sword.LocalState="\083\108\097\115\104\105\110\103"wait(.5)if Sword.LocalAttackTicket==Y then Sword.LocalState="\073\100\108\101"end end function Sword.Lunge(F,Y)Sword.State="\076\117\110\103\105\110\103"Handle.LungeSound:Play()Sword:Animate("\076\117\110\103\101")local W=Instance.new("\066\111\100\121\086\101\108\111\099\105\116\121")W.velocity=Vector3.new(0,10,0)W.maxForce=Vector3.new(0,0,0)W.Parent=Tool.Parent.Torso Sword.DestroyOnUnequip[W]=true wait(.25)Tool.Grip=CFrame.new(0,0,-1.5,0,-1,0,-1,0,0,0,0,-1)wait(.25)W:Destroy()Sword.DestroyOnUnequip[W]=nil wait(.5)Tool.Grip=CFrame.new(0,0,-1.5,0,0,1,1,0,0,0,1,0)Sword.State="\073\100\108\101"end function Sword.LocalLunge(F,Y)Sword.LocalState="\076\117\110\103\105\110\103"wait(.25)wait(.25)wait(.5)Sword.LocalState="\073\100\108\101"end function Sword.Animate(F,Y)local W=Instance.new("\083\116\114\105\110\103\086\097\108\117\101")W.Name="\116\111\111\108\097\110\105\109"W.Value=Y W.Parent=Tool end function Sword.Unequip(Y)for Y in next,Sword.DestroyOnUnequip do Y:Destroy()end Sword.DestroyOnUnequip={}Tool.Grip=CFrame.new(0,0,-1.5,0,0,1,1,0,0,0,1,0)Sword.State="\073\100\108\101"Sword.LocalState="\073\100\108\101"end
--
--
function Sword:Connect()
	Handle.Touched:Connect(function(hit)
		local myPlayer = GLib.GetPlayerFromPart(Tool)
		local character, player, humanoid = GLib.GetCharacterFromPart(hit)

		if myPlayer ~= nil and character ~= nil and humanoid ~= nil and myPlayer ~= player then
			local isTeammate = GLib.IsTeammate(myPlayer, player)
			local myCharacter = myPlayer.Character
			local myHumanoid = myCharacter and myCharacter:FindFirstChild("Humanoid")

			if
				(Config.CanTeamkill.Value == true or isTeammate ~= true)
				and (myHumanoid and myHumanoid:IsA("Humanoid") and myHumanoid.Health > 0)
				and (Config.CanKillWithForceField.Value or myCharacter:FindFirstChild("ForceField") == nil)
			then
				local doDamage = Config.IdleDamage.Value
				if Sword.State == "Slashing" then
					doDamage = Config.SlashDamage.Value
				elseif Sword.State == "Lunging" then
					doDamage = Config.LungeDamage.Value
				end

				GLib.TagHumanoid(humanoid, myPlayer, 1)
				humanoid:TakeDamage(doDamage)
			end
		end
	end)
end

function Sword:Attack()
	local myCharacter, myPlayer, myHumanoid = GLib.GetCharacterFromPart(Tool)

	if myHumanoid ~= nil and myHumanoid.Health > 0 then
		if Config.CanKillWithForceField.Value or myCharacter:FindFirstChild("ForceField") == nil then
			local now = tick()

			if Sword.State == "Slashing" and now - Sword.SlashingStartedAt < Sword.DoubleClickMaxTime then
				Sword.AttackTicket = Sword.AttackTicket + 1

				Sword:Lunge(Sword.AttackTicket)
			elseif Sword.State == "Idle" then
				Sword.AttackTicket = Sword.AttackTicket + 1
				Sword.SlashingStartedAt = now

				Sword:Slash(Sword.AttackTicket)
			end
		end
	end
end

function Sword:LocalAttack()
	local myCharacter, myPlayer, myHumanoid = GLib.GetCharacterFromPart(Tool)

	if myHumanoid ~= nil and myHumanoid.Health > 0 then
		if Config.CanKillWithForceField.Value or myCharacter:FindFirstChild("ForceField") == nil then
			local now = tick()

			if
				Sword.LocalState == "Slashing"
				and now - Sword.LocalSlashingStartedAt < Sword.LocalDoubleClickMaxTime
			then
				Sword.LocalAttackTicket = Sword.LocalAttackTicket + 1

				Sword:LocalLunge(Sword.LocalAttackTicket)
			elseif Sword.LocalState == "Idle" then
				Sword.LocalAttackTicket = Sword.LocalAttackTicket + 1
				Sword.LocalSlashingStartedAt = now

				Sword:LocalSlash(Sword.LocalAttackTicket)
			end
		end
	end
end

function Sword:Slash(ticket)
	Sword.State = "Slashing"

	Handle.SlashSound:Play()
	Sword:Animate("Slash")

	wait(0.5)

	if Sword.AttackTicket == ticket then
		Sword.State = "Idle"
	end
end

function Sword:LocalSlash(ticket)
	Sword.LocalState = "Slashing"

	wait(0.5)

	if Sword.LocalAttackTicket == ticket then
		Sword.LocalState = "Idle"
	end
end

function Sword:Lunge(ticket)
	Sword.State = "Lunging"

	Handle.LungeSound:Play()
	Sword:Animate("Lunge")

	local force = Instance.new("BodyVelocity")
	force.velocity = Vector3.new(0, 10, 0)
	force.maxForce = Vector3.new(0, 0, 0)
	force.Parent = Tool.Parent.Torso
	Sword.DestroyOnUnequip[force] = true

	wait(0.25)
	Tool.Grip = CFrame.new(0, 0, -1.5, 0, -1, -0, -1, 0, -0, 0, 0, -1)
	wait(0.25)
	force:Destroy()
	Sword.DestroyOnUnequip[force] = nil
	wait(0.5)
	Tool.Grip = CFrame.new(0, 0, -1.5, 0, 0, 1, 1, 0, 0, 0, 1, 0)

	Sword.State = "Idle"
end

function Sword:LocalLunge(ticket)
	Sword.LocalState = "Lunging"

	wait(0.25)
	wait(0.25)
	wait(0.5)

	Sword.LocalState = "Idle"
end

function Sword:Animate(name)
	local tag = Instance.new("StringValue")
	tag.Name = "toolanim"
	tag.Value = name
	tag.Parent = Tool -- Tag gets removed by the animation script
end

function Sword:Unequip()
	for obj in next, Sword.DestroyOnUnequip do
		obj:Destroy()
	end

	Sword.DestroyOnUnequip = {}

	Tool.Grip = CFrame.new(0, 0, -1.5, 0, 0, 1, 1, 0, 0, 0, 1, 0)
	Sword.State = "Idle"
	Sword.LocalState = "Idle"
end
