plr = game.Players.LocalPlayer char = plr.Character hum = char.Humanoid hrp = char.HumanoidRootPart rs = game.RunService ToolEnabled = true ToolUsing = false Grab = false GrabConnections = {} GrabCharacters = {} bullshitvariable = false Grabbed = false function checknotr15() return hum.RigType ~= Enum.HumanoidRigType.R15 end if not checknotr15() then msg = Instance.new("Hint", workspace) msg.Text = "you're not r6" game.Debris:AddItem(msg, 2) return end Mesh = "http://www.roblox.com/asset/?id=11442510" Texture = "http://www.roblox.com/asset/?id=11442524" NpcKill = "https://github.com/InnocentViru/Black-Knife/raw/refs/heads/main/Thorn%20Ring%20(ominous_stab_harsh.ogg)%20-%20DELTARUNE%20Chapters%203+4%20OST%20-%20Aventuras%20Demais%20(youtube).mp3" Slash = "rbxassetid://4958430453" Impale = "rbxassetid://5754301788" Bleed = "rbxassetid://71884701777530" if not isfile("ThornRing.mp3") then writefile("ThornRing.mp3", game:HttpGet(NpcKill)) end anims = { [1] = "rbxassetid://74897796", [2] = "rbxassetid://54432537", [3] = "rbxassetid://203876950", [4] = "rbxassetid://186934910", [5] = "rbxassetid://203875401" } pcall(function() plr.Backpack["Black Knife"]:Destroy() end) pcall(function() getgenv().roaringknight:Disconnect() end) plr.ReplicationFocus = workspace getgenv().roaringknight = rs.Heartbeat:Connect(function() sethiddenproperty(plr, "MaximumSimulationRadius", math.huge) sethiddenproperty(plr, "SimulationRadius", math.huge) end) Tool = Instance.new("Tool", plr.Backpack) Tool.ToolTip = "niche reference" Tool.Name = "Black Knife" Tool.Grip = CFrame.new(0, 0, -2) * CFrame.Angles(math.rad(90), math.rad(90), 0) Handle = Instance.new("Part", Tool) Handle.Name = "Handle" Handle.Size = Vector3.new(1, 0.6, 6) Handle.CanTouch = false Highlight = Instance.new("Highlight", Handle) Highlight.FillTransparency = 0 Highlight.FillColor = Color3.new(0,0,0) Highlight.DepthMode = "Occluded" ImpaleAtt = Instance.new("Attachment", Handle) ImpaleAtt.Position = Vector3.new(0, 0, Handle.Size.Z / 3) ImpaleAtt.CFrame = ImpaleAtt.CFrame * CFrame.Angles(math.rad(90), 0, 0) SpecialMesh = Instance.new("SpecialMesh", Handle) SpecialMesh.MeshId = Mesh SpecialMesh.VertexColor = Vector3.new(0,0,0) SpecialMesh.TextureId = Texture SpecialMesh.Scale = Vector3.new(2.2,2.2,2.2) vfx = Instance.new("ParticleEmitter", Handle) vfx.Rate = 500 vfx.Speed = NumberRange.new(0,0) vfx.Brightness = 10 vfx.Lifetime = NumberRange.new(.5, .5) vfx.Color = ColorSequence.new(Color3.new(0,0,0)) vfx.Size = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0), NumberSequenceKeypoint.new(0.5, 1.2), NumberSequenceKeypoint.new(1, 0), }) vfx.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(0.5, 0), NumberSequenceKeypoint.new(1, 1), }) vfx.Rotation = NumberRange.new(-360, 360) att1 = Instance.new("Attachment", Handle) att2 = Instance.new("Attachment", Handle) att1.Position = Vector3.new(0, 0, Handle.Size.Z / 1.75) att2.Position = Vector3.new(0, 0, -(Handle.Size.Z / 4)) trail = Instance.new("Trail", Handle) trail.Attachment0 = att1 trail.Attachment1 = att2 trail.Lifetime = .35 trail.Enabled = false trail.Color = ColorSequence.new(Color3.new(0,0,0)) trail.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0), NumberSequenceKeypoint.new(1, 1), }) pcall(function() gethui()["Grab_Ability"]:Destroy() end) ScreenGui = Instance.new("ScreenGui", gethui()) ScreenGui.Name = "Grab_Ability" TextButton = Instance.new("TextButton", ScreenGui) UIAspectRatioConstraint = Instance.new("UIAspectRatioConstraint", TextButton) UIStroke = Instance.new("UIStroke", TextButton) TextButton.Text = "Impale (Grab)" TextButton.Size = UDim2.fromScale(.12, .12) TextButton.AnchorPoint = Vector2.new(.5,.5) TextButton.Position = UDim2.fromScale(.8, .5) TextButton.Font = "Arcade" TextButton.TextScaled = true TextButton.TextColor3 = Color3.new(1,1,1) TextButton.BackgroundColor3 = Color3.new(0,0,0) UIStroke.Thickness = 3 UIStroke.ApplyStrokeMode = "Border" UIStroke.Color = Color3.new(1,1,1) function playanim(booleangrab) local random = anims[math.random(1, #anims)] local anim = Instance.new("Animation") anim.AnimationId = random local tr = hum:LoadAnimation(anim) tr:Play(0, 5, booleangrab and 1.5 or 1) tr.Ended:Wait() end function blood(phrp) for i = 1, 12 do local p = Instance.new("Part", workspace) p.Name = "blood" .. i p.Material = "Neon" p.Color = Color3.new(1,0,0) p.CFrame = phrp.CFrame p.Size = Vector3.one p.RotVelocity = Vector3.new(20,20,20) p.Velocity = Vector3.new(math.random(-100, 100), math.random(-200, 200), math.random(-100, 100)) local at = Instance.new("Attachment", p) local at2 = Instance.new("Attachment", p) at.Position = Vector3.new(0, p.Size.Y / 2, 0) at2.Position = Vector3.new(0, -(p.Size.Y / 2), 0) local tra = Instance.new("Trail", p) tra.Attachment0 = at tra.Attachment1 = at2 tra.Brightness = 10 tra.WidthScale = NumberSequence.new({ NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(1, 0), }) tra.Color = ColorSequence.new(Color3.new(1,0,0)) tra.Lifetime = 1.5 tra.FaceCamera = true game.Debris:AddItem(p,6) end end function bleedsfx(p) local sound = Instance.new("Sound", p) sound.SoundId = Bleed sound.Volume = 5 sound.PlayOnRemove = true sound:Destroy() sound = nil end function bleed(phrp, phum) for i = 1, 30 do if not phum or not phum.Parent or phum.Health <= 0 then break end local p = Instance.new("Part", workspace) p.Name = "blood" .. i p.Material = "Neon" p.Color = Color3.new(1,0,0) p.CFrame = phrp.CFrame * CFrame.new(0,0,-.5) p.Size = Vector3.new(.5,.5,.5) p.RotVelocity = Vector3.new(20,20,20) p.Velocity = Vector3.new(0, 10, 0) bleedsfx(p) local at = Instance.new("Attachment", p) local at2 = Instance.new("Attachment", p) at.Position = Vector3.new(0, p.Size.Y / 2, 0) at2.Position = Vector3.new(0, -(p.Size.Y / 2), 0) local tra = Instance.new("Trail", p) tra.Attachment0 = at tra.Attachment1 = at2 tra.Brightness = 10 tra.WidthScale = NumberSequence.new({ NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(1, 0), }) tra.Color = ColorSequence.new(Color3.new(1,0,0)) tra.Lifetime = 1.5 tra.FaceCamera = true game.Debris:AddItem(p,6) task.wait(.1) end end function killsfx(p) local sound = Instance.new("Sound", p) sound.SoundId = getcustomasset("ThornRing.mp3") sound.Volume = 5 sound.PlayOnRemove = true sound:Destroy() sound = nil end function killnpc(character) local h = character:FindFirstChild("Humanoid") local p = character:FindFirstChild("HumanoidRootPart") if h and p and not game.Players:GetPlayerFromCharacter(character) and p.ReceiveAge == 0 and h.Health > 0 then if not Grab then h:TakeDamage(9e9) h:ChangeState("Died") h.Health = -1 blood(p) killsfx(p) end end end function impalesfx() local sound = Instance.new("Sound", Handle) sound.SoundId = Impale sound.Volume = 5 sound.PlayOnRemove = true sound:Destroy() sound = nil end function grabnpc(character) local h = character:FindFirstChild("Humanoid") local p = character:FindFirstChild("HumanoidRootPart") local success = false if h and p and not game.Players:GetPlayerFromCharacter(character) and p.ReceiveAge == 0 and h.Health > 0 and not GrabCharacters[1] and not GrabConnections[1] then GrabCharacters[1] = character success = true Grabbed = true task.spawn(bleed, p, h) impalesfx() GrabConnections[1] = rs.Heartbeat:Connect(function() if Tool.Parent == char and p.ReceiveAge == 0 then p.CFrame = CFrame.new(ImpaleAtt.WorldPosition) * CFrame.Angles(math.rad(90), 0, 0) p.Velocity = Vector3.zero end end) end return success end function grab(character) local success = grabnpc(character) if success and Grab then local start = tick() repeat task.wait() until tick() - start > 10 or not Grab or bullshitvariable GrabConnections[1]:Disconnect() GrabCharacters[1] = nil table.clear(GrabCharacters) table.clear(GrabConnections) Grabbed = false end end function slash(booleangrab) local sound = Instance.new("Sound", Handle) sound.SoundId = Slash sound.Volume = 5 sound.PlayOnRemove = true sound.Pitch = booleangrab and 1 or .8 Instance.new("ReverbSoundEffect", sound).DecayTime = 2.5 sound:Destroy() sound = nil end Handle.Touched:Connect(function(p) local character = p:FindFirstAncestorOfClass("Model") if character and character ~= char then if not Grab then killnpc(character) else grab(character) end end end) db = false db2 = false Tool.Activated:Connect(function() if db or db2 or not ToolEnabled or Grab then return end db = true trail.Enabled = true Handle.CanTouch = true slash(true) ToolUsing = true playanim(true) delay(.2, function() db = false ToolUsing = false end) Handle.CanTouch = false trail.Enabled = false end) TextButton.MouseButton1Click:Connect(function() if GrabConnections[1] then bullshitvariable = true return end if not db2 and not ToolUsing and not GrabConnections[1] and Tool.Parent == char then db2 = true ToolEnabled = false Grab = true Handle.CanTouch = true bullshitvariable = false trail.Enabled = true slash(false) playanim(false) Handle.CanTouch = false trail.Enabled = false local r = tick() spawn(function() repeat task.wait() until tick() - r > (Grabbed and 10 or 1) or bullshitvariable if bullshitvariable then task.wait(.8) db2 = false Grab = false ToolEnabled = true else db2 = false Grab = false ToolEnabled = true end end) end end) connection = hum.Died:Connect(function() connection:Disconnect() connection = nil getgenv().roaringknight:Disconnect() getgenv().roaringknight = nil pcall(function() Tool:Destroy() end) plr.ReplicationFocus = nil ScreenGui:Destroy() ScreenGui = nil end) msg = Instance.new("Message", workspace) msg.Text = "executed, made by VirusSX" game.Debris:AddItem(msg, 4) setclipboard("https://discord.gg/5xEktGhuDF")