--[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ac6147996f877510eed96f6"))() end) end) --[[rscripts:analytics:end]] if getgenv().Killstreak then pcall(getgenv().Killstreak.kill) end local Players = cloneref(game:GetService("Players")) local RunService = cloneref(game:GetService("RunService")) local Workspace = cloneref(game:GetService("Workspace")) local ReplicatedFirst = cloneref(game:GetService("ReplicatedFirst")) local CoreGui = cloneref(game:GetService("CoreGui")) local lp = Players.LocalPlayer local Net = require(ReplicatedFirst.Sakura.Util.Network) local bones = { "Head", "UpperTorso", "HumanoidRootPart", "Torso", "LowerTorso" } local cfg = { silent = false, hitChance = 100, bone = "Head", maxDist = 300, visibleCheck = true, fovSize = 180, showFov = true, fovColor = Color3.fromRGB(255, 255, 255), } local conns = {} local resolved = {} local origFire = Net.FireServer local gui = Instance.new("ScreenGui") gui.Name = "Killstreak" gui.IgnoreGuiInset = true gui.ResetOnSpawn = false gui.DisplayOrder = 50 gui.Parent = (gethui and gethui()) or CoreGui local ring = Instance.new("Frame") ring.AnchorPoint = Vector2.new(0.5, 0.5) ring.BackgroundTransparency = 1 ring.BorderSizePixel = 0 ring.Parent = gui Instance.new("UICorner", ring).CornerRadius = UDim.new(1, 0) local stroke = Instance.new("UIStroke") stroke.Thickness = 2 stroke.LineJoinMode = Enum.LineJoinMode.Round stroke.Parent = ring conns[#conns + 1] = RunService.RenderStepped:Connect(function() local cam = Workspace.CurrentCamera gui.Enabled = cfg.showFov and cfg.silent if not gui.Enabled or not cam then return end ring.Size = UDim2.fromOffset(cfg.fovSize * 2, cfg.fovSize * 2) ring.Position = UDim2.fromOffset(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2) stroke.Color = cfg.fovColor end) local function alive(m) if m == lp.Character then return false end return m:GetAttribute("CharacterState") == "Alive" and (m:GetAttribute("Health") or 0) > 0 end local function visible(origin, part, model) if not cfg.visibleCheck then return true end local rp = RaycastParams.new() rp.FilterType = Enum.RaycastFilterType.Exclude rp.FilterDescendantsInstances = { lp.Character } local hit = Workspace:Raycast(origin, part.Position - origin, rp) return hit ~= nil and hit.Instance:IsDescendantOf(model) end local function randomBone(model) local pool = {} for i = 1, #bones do local p = model:FindFirstChild(bones[i]) if p then pool[#pool + 1] = p end end return pool[1] and pool[math.random(1, #pool)] end local function nearestToCursor(model, cam, cx, cy) local kids = model:GetChildren() local best, bd for i = 1, #kids do local p = kids[i] if p:IsA("BasePart") then local sp, on = cam:WorldToViewportPoint(p.Position) if on and sp.Z > 0 then local d = math.sqrt((sp.X - cx) ^ 2 + (sp.Y - cy) ^ 2) if not bd or d < bd then best, bd = p, d end end end end return best or model:FindFirstChild("Head") end local function aimPart(model, cam, cx, cy) if cfg.bone == "Random" then return randomBone(model) end if cfg.bone == "Closest to Cursor" then return nearestToCursor(model, cam, cx, cy) end return model:FindFirstChild(cfg.bone) or model:FindFirstChild("Head") end local function getTarget() local gl = Workspace:FindFirstChild("GameLogic") local folder = gl and gl:FindFirstChild("Characters") local cam = Workspace.CurrentCamera if not folder or not cam then return end local origin = cam.CFrame.Position local cx, cy = cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2 local chars = folder:GetChildren() local pick, pickPart, bd = nil, nil, cfg.fovSize for i = 1, #chars do local m = chars[i] if alive(m) then local part = aimPart(m, cam, cx, cy) if part and (part.Position - origin).Magnitude <= cfg.maxDist then local sp, on = cam:WorldToViewportPoint(part.Position) if on and sp.Z > 0 then local d = math.sqrt((sp.X - cx) ^ 2 + (sp.Y - cy) ^ 2) if d <= bd and visible(origin, part, m) then pick, pickPart, bd = m, part, d end end end end end return pick, pickPart, origin end Net.FireServer = function(self, name, ...) if name == "Weapon:Damage" then local a = table.pack(...) resolved[a[1]] = true return origFire(self, name, ...) end if name ~= "Weapon:Attack" or not cfg.silent then return origFire(self, name, ...) end local a = table.pack(...) local seq, wep, slot, stamp = a[1], a[2], a[3], a[4] local res = table.pack(origFire(self, name, ...)) task.defer(function() if resolved[seq] or math.random(100) > cfg.hitChance then return end local target, part, origin = getTarget() if not target then return end local id = ("%d_%f_1"):format(lp.UserId, Workspace:GetServerTimeNow()) origFire(Net, "Weapon:Damage", seq, wep, slot, stamp, { { part, part.Position, origin, nil, 0, id, { AttackerWasAiming = false } }, }, false) end) return table.unpack(res, 1, res.n) end local Rayfield = loadstring(game:HttpGet("https://sirius.menu/gen2"))() local Window = Rayfield:CreateWindow({ name = "Killstreak", subtitle = "Legionary", sidebarLayout = true, theme = "cobalt", showName = "Killstreak", configuration = { autoSave = true, autoLoad = true, fileName = "Killstreak", customFolder = "Killstreak" }, }) local combat = Window:CreateTab({ name = "Combat" }) combat:CreateSection({ name = "Silent Aim" }) combat:CreateToggle({ name = "Silent Aim", flag = "silent", value = cfg.silent, callback = function(v) cfg.silent = v end, }) combat:CreateSlider({ name = "Hit Chance", flag = "hitChance", range = { 0, 100 }, increment = 5, value = cfg.hitChance, suffix = "%", callback = function(v) cfg.hitChance = v end, }) combat:CreateDropdown({ name = "Target Bone", flag = "bone", options = { "Head", "UpperTorso", "HumanoidRootPart", "Random", "Closest to Cursor" }, value = { cfg.bone }, callback = function(v) cfg.bone = (type(v) == "table" and v[1]) or v end, }) combat:CreateSlider({ name = "Max Distance", flag = "maxDist", range = { 10, 500 }, increment = 10, value = cfg.maxDist, suffix = " studs", callback = function(v) cfg.maxDist = v end, }) combat:CreateToggle({ name = "Visible Check", flag = "visibleCheck", value = cfg.visibleCheck, callback = function(v) cfg.visibleCheck = v end, }) local fov = Window:CreateTab({ name = "FOV" }) fov:CreateToggle({ name = "Show FOV", flag = "showFov", value = cfg.showFov, callback = function(v) cfg.showFov = v end, }) fov:CreateSlider({ name = "Size", flag = "fovSize", range = { 10, 600 }, increment = 5, value = cfg.fovSize, suffix = " px", callback = function(v) cfg.fovSize = v end, }) fov:CreateColorPicker({ name = "Color", flag = "fovColor", color = cfg.fovColor, callback = function(c) cfg.fovColor = c end, }) local misc = Window:CreateTab({ name = "Misc" }) misc:CreateButton({ name = "Unload", callback = function() getgenv().Killstreak.kill() end, }) local function kill() Net.FireServer = origFire for i = 1, #conns do pcall(function() conns[i]:Disconnect() end) end pcall(function() gui:Destroy() end) pcall(function() if not Window.unloaded then Window:Unload() end end) getgenv().Killstreak = nil end getgenv().Killstreak = { cfg = cfg, kill = kill } Window:Notify({ title = "Killstreak", content = "Loaded.", duration = 4 })