Tool = script.Parent Handle = Tool:WaitForChild("Handle") Player = game.Players.LocalPlayer Players = game:GetService("Players") Debris = game:GetService("Debris") RunService = game:GetService("RunService") Create = Instance.new DamageValues = { BaseDamage = 0, SlashDamage = 20, -- Damage } Damage = DamageValues.BaseDamage BaseUrl = "http://www.roblox.com/asset/?id=" BasePart = Instance.new("Part") BasePart.Shape = Enum.PartType.Block BasePart.Material = Enum.Material.Plastic BasePart.TopSurface = Enum.SurfaceType.Smooth BasePart.BottomSurface = Enum.SurfaceType.Smooth BasePart.FormFactor = Enum.FormFactor.Custom BasePart.Size = Vector3.new(0.2, 0.2, 0.2) BasePart.CanCollide = true BasePart.Locked = true BasePart.Anchored = false Rate = (1 / 60) AnimationsBin = Tool:WaitForChild("Animations") R6Anims = AnimationsBin:WaitForChild("R6") R15Anims = AnimationsBin:WaitForChild("R15") Animations = { R6LeftSlash = {Animation = R6Anims:WaitForChild("LeftSlash"), FadeTime = nil, Weight = nil, Speed = 1.5, Duration = 0.5}, R6RightSlash = {Animation = R6Anims:WaitForChild("RightSlash"), FadeTime = nil, Weight = nil, Speed = 1.5, Duration = 0.5}, R6SideSwipe = {Animation = R6Anims:WaitForChild("SideSwipe"), FadeTime = nil, Weight = nil, Speed = 0.8, Duration = 0.5}, R15LeftSlash = {Animation = R15Anims:WaitForChild("LeftSlash"), FadeTime = nil, Weight = nil, Speed = 1.5, Duration = 0.5}, R15RightSlash = {Animation = R15Anims:WaitForChild("RightSlash"), FadeTime = nil, Weight = nil, Speed = 1.5, Duration = 0.5}, R15SideSwipe = {Animation = R15Anims:WaitForChild("SideSwipe"), FadeTime = nil, Weight = nil, Speed = 0.8, Duration = 0.5}, } Sounds = { Unsheath = Handle:WaitForChild("Unsheath"), Slash = Handle:WaitForChild("Slash"), Lunge = Handle:WaitForChild("Lunge"), } ToolEquipped = false Remotes = (Tool:FindFirstChild("Remotes") or Create("Folder"){ Name = "Remotes", Parent = Tool, }) ServerControl = (Remotes:FindFirstChild("ServerControl") or Create("RemoteFunction"){ Name = "ServerControl", Parent = Remotes, }) ClientControl = (Remotes:FindFirstChild("ClientControl") or Create("RemoteFunction"){ Name = "ClientControl", Parent = Remotes, }) Handle.Transparency = 0 Tool.Enabled = true function IsTeamMate(Player1, Player2) return (Player1 and Player2 and not Player1.Neutral and not Player2.Neutral and Player1.TeamColor == Player2.TeamColor) end function TagHumanoid(humanoid, player) local creator_tag = Instance.new("ObjectValue") creator_tag.Value = player creator_tag.Name = "creator" creator_tag.Parent = humanoid end function UntagHumanoid(humanoid) if humanoid ~= nil then local tag = humanoid:findFirstChild("creator") if tag ~= nil then tag.Parent = nil end end end function CheckTableForInstance(Table, Instance) for i, v in pairs(Table) do if v == Instance then return true end end return false end function DealDamage(character, damage) if not CheckIfAlive() or not character then return end local damage = (damage or 0) local humanoid = character:FindFirstChild("Humanoid") or character:FindFirstChild("Enemy") local rootpart = character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("Torso") if not humanoid or humanoid.Health == 0 or not rootpart then return end UntagHumanoid(humanoid) TagHumanoid(humanoid, Player) humanoid:TakeDamage(damage) end function CheckIfAlive() return (((Character and Character.Parent and Humanoid and Humanoid.Parent and Humanoid.Health > 0) and true) or false) end function Blow(Part) local PartTouched local HitDelay = false PartTouched = Part.Touched:connect(function(Hit) if not Hit or not Hit.Parent or not CheckIfAlive() or not ToolEquipped or HitDelay then return end local RightArm = (Character:FindFirstChild("Right Arm") or Character:FindFirstChild("RightHand")) if not RightArm then return end local RightGrip = RightArm:FindFirstChild("RightGrip") if not RightGrip or (RightGrip.Part0 ~= Handle and RightGrip.Part1 ~= Handle) then return end local character = Hit.Parent if character == Character then return end local humanoid = character:FindFirstChild("Humanoid") or character:FindFirstChild("Enemy") if not humanoid or humanoid.Health == 0 then return end local player = Players:GetPlayerFromCharacter(character) if player and (player == Player or IsTeamMate(Player, player)) then return end HitDelay = true local TotalDamage = Damage DealDamage(character, TotalDamage) local Now = tick() wait(1) HitDelay = false end) end function Attack() Damage = DamageValues.SlashDamage + Player.Data.Sword.Value Sounds.Slash:Play() local SwingAnimations = ((Humanoid.RigType == Enum.HumanoidRigType.R6 and {Animations.R6LeftSlash, Animations.R6RightSlash, Animations.R6SideSwipe}) or (Humanoid.RigType == Enum.HumanoidRigType.R15 and {Animations.R15LeftSlash, --[[Animations.R15RightSlash,]] Animations.R15SideSwipe})) local Animation = SwingAnimations[math.random(1, #SwingAnimations)] Spawn(function() InvokeClient("PlayAnimation", Animation) end) wait(1) end function Activated() if not Tool.Enabled or not ToolEquipped or not CheckIfAlive() then return end Tool.Enabled = false Attack() Damage = DamageValues.BaseDamage Tool.Enabled = true end function CheckIfAlive() return (((Player and Player.Parent and Character and Character.Parent and Humanoid and Humanoid.Parent and Humanoid.Health > 0 and RootPart and RootPart.Parent) and true) or false) end function Equipped() Character = Tool.Parent Player = Players:GetPlayerFromCharacter(Character) Humanoid = Character:FindFirstChild("Humanoid") RootPart = Character:FindFirstChild("HumanoidRootPart") if not CheckIfAlive() then return end Humanoid.WalkSpeed = (14) Sounds.Unsheath:Play() ToolEquipped = true end function Unequipped() if CheckIfAlive() then Humanoid.WalkSpeed = 16 end ToolEquipped = false end function OnServerInvoke(player, mode, value) if player ~= Player or not ToolEquipped or not value or not CheckIfAlive() then return end end function InvokeClient(Mode, Value) local ClientReturn = nil pcall(function() ClientReturn = ClientControl:InvokeClient(Player, Mode, Value) end) return ClientReturn end ServerControl.OnServerInvoke = OnServerInvoke Tool.Activated:connect(Activated) Tool.Equipped:connect(Equipped) Tool.Unequipped:connect(Unequipped) Blow(Handle)