local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local CoreGui = game:GetService("CoreGui") local LocalPlayer = Players.LocalPlayer local HitRemote = ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("Hit") local CONFIG = { StareRadius = 15.0, EnterAttackRadius = 6.5, LeaveAttackRadius = 6.8, AttackDelay = 0.035, SwitchCooldown = 0.75, ZoneSwitchDelay = 0.1, ColorOn = Color3.fromRGB(0, 210, 120), ColorOff = Color3.fromRGB(235, 55, 55), ColorPanel = Color3.fromRGB(20, 20, 20) } local ActivePlayers = {} local CharacterCache = {} local LastZoneChangeTime = {} local AuraEnabled = false local RenderConnection = nil local singlePayload = {} local innerPayloadData = { ["Victim"] = nil, ["Vector"] = Vector3.new(0, 0, 0) } local lockedTarget = nil local lockedTargetRoot = nil local cooldownUntil = 0 local function isInSafeZone(player) if not player then return false end local sz = player:FindFirstChild("SafeZone") or (player:FindFirstChild("GameStats") and player.GameStats:FindFirstChild("SafeZone")) if sz and sz:IsA("BoolValue") then if LastZoneChangeTime[player] == nil then LastZoneChangeTime[player] = {State = sz.Value, Time = 0} elseif LastZoneChangeTime[player].State ~= sz.Value then LastZoneChangeTime[player].State = sz.Value LastZoneChangeTime[player].Time = os.clock() end return sz.Value end return false end local function uncachePlayer(player) CharacterCache[player] = nil LastZoneChangeTime[player] = nil if lockedTarget == player then lockedTarget, lockedTargetRoot = nil, nil cooldownUntil = os.clock() + CONFIG.SwitchCooldown end local idx = table.find(ActivePlayers, player) if idx then table.remove(ActivePlayers, idx) end end local function cachePlayer(player) if player == LocalPlayer then return end if not table.find(ActivePlayers, player) then table.insert(ActivePlayers, player) end local function onCharacterAdded(char) local root = char:WaitForChild("HumanoidRootPart", 10) local hum = char:WaitForChild("Humanoid", 10) if root and hum then CharacterCache[player] = {Character = char, Root = root, Humanoid = hum} hum.Died:Connect(function() CharacterCache[player] = nil if lockedTarget == player then lockedTarget, lockedTargetRoot = nil, nil cooldownUntil = os.clock() + CONFIG.SwitchCooldown end end) end end player.CharacterAdded:Connect(onCharacterAdded) if player.Character then onCharacterAdded(player.Character) end end Players.PlayerAdded:Connect(cachePlayer) Players.PlayerRemoving:Connect(uncachePlayer) for _, p in ipairs(Players:GetPlayers()) do cachePlayer(p) end local LocalCharacterData = nil local function setupLocalPlayer(char) if not char then return end local root = char:WaitForChild("HumanoidRootPart", 10) local hum = char:WaitForChild("Humanoid", 10) if root and hum then LocalCharacterData = {Root = root, Humanoid = hum} end end LocalPlayer.CharacterAdded:Connect(setupLocalPlayer) if LocalPlayer.Character then setupLocalPlayer(LocalPlayer.Character) end local function validateTarget(player, root, maxRadius) if not player or not root or not root.Parent or isInSafeZone(player) then return false end local zoneTrack = LastZoneChangeTime[player] if zoneTrack and (os.clock() - zoneTrack.Time) < CONFIG.ZoneSwitchDelay then return false end return (root.Position - LocalCharacterData.Root.Position).Magnitude <= maxRadius end local function updateLockedTarget() local currentTime = os.clock() if currentTime < cooldownUntil then return nil, nil end if lockedTarget and lockedTargetRoot then if validateTarget(lockedTarget, lockedTargetRoot, CONFIG.LeaveAttackRadius) then return lockedTarget, lockedTargetRoot else lockedTarget, lockedTargetRoot = nil, nil cooldownUntil = currentTime + CONFIG.SwitchCooldown return nil, nil end end if not LocalCharacterData or isInSafeZone(LocalPlayer) then return nil, nil end local myPos = LocalCharacterData.Root.Position local closestPlayer, closestRoot, shortestDist = nil, nil, CONFIG.EnterAttackRadius for i = 1, #ActivePlayers do local p = ActivePlayers[i] local data = CharacterCache[p] if data and data.Character.Parent and validateTarget(p, data.Root, CONFIG.EnterAttackRadius) then local dist = (data.Root.Position - myPos).Magnitude if dist <= shortestDist then shortestDist = dist closestPlayer, closestRoot = p, data.Root end end end lockedTarget, lockedTargetRoot = closestPlayer, closestRoot return closestPlayer, closestRoot end local function onRenderStep() if not AuraEnabled or not LocalCharacterData then return end local target, targetRoot = updateLockedTarget() local myHum = LocalCharacterData.Humanoid if target and targetRoot then if myHum.AutoRotate then myHum.AutoRotate = false end local targetPos = targetRoot.Position LocalCharacterData.Root.CFrame = CFrame.lookAt(LocalCharacterData.Root.Position, Vector3.new(targetPos.X, LocalCharacterData.Root.Position.Y, targetPos.Z)) else if not myHum.AutoRotate then myHum.AutoRotate = true end end end task.spawn(function() while true do task.wait(CONFIG.AttackDelay) if AuraEnabled and not isInSafeZone(LocalPlayer) and LocalCharacterData then local target, targetRoot = updateLockedTarget() local isBlocking = LocalPlayer:FindFirstChild("Blocking") and LocalPlayer.Blocking.Value == true if target and targetRoot and not isBlocking then innerPayloadData.Victim = target innerPayloadData.Vector = (targetRoot.Position - LocalCharacterData.Root.Position).Unit table.clear(singlePayload) singlePayload[target.Name] = innerPayloadData HitRemote:FireServer(singlePayload) end end end end) local UI_Parent = type(gethui) == "function" and gethui() or CoreGui local OldGui = UI_Parent:FindFirstChild("SranyHubPanel") if OldGui then OldGui:Destroy() end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "SranyHubPanel" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = UI_Parent local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 180, 0, 95) MainFrame.Position = UDim2.new(0.75, 0, 0.35, 0) MainFrame.BackgroundColor3 = CONFIG.ColorPanel MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.Parent = ScreenGui local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 10) MainCorner.Parent = MainFrame local TitleLabel = Instance.new("TextLabel") TitleLabel.Size = UDim2.new(0, 120, 0, 30) TitleLabel.Position = UDim2.new(0, 12, 0, 0) TitleLabel.BackgroundTransparency = 1 TitleLabel.Text = "Srany hub" TitleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) TitleLabel.Font = Enum.Font.GothamBold TitleLabel.TextSize = 11 TitleLabel.TextXAlignment = Enum.TextXAlignment.Left TitleLabel.Parent = MainFrame local CollapseButton = Instance.new("TextButton") CollapseButton.Size = UDim2.new(0, 30, 0, 30) CollapseButton.Position = UDim2.new(1, -35, 0, 0) CollapseButton.BackgroundTransparency = 1 CollapseButton.Text = "▲" CollapseButton.TextColor3 = Color3.fromRGB(200, 200, 200) CollapseButton.Font = Enum.Font.GothamBold CollapseButton.TextSize = 14 CollapseButton.Parent = MainFrame local Container = Instance.new("Frame") Container.Name = "Container" Container.Size = UDim2.new(1, 0, 1, -35) Container.Position = UDim2.new(0, 0, 0, 35) Container.BackgroundTransparency = 1 Container.Parent = MainFrame local ListLayout = Instance.new("UIListLayout") ListLayout.Parent = Container ListLayout.SortOrder = Enum.SortOrder.LayoutOrder ListLayout.Padding = UDim.new(0, 8) ListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center local btn = Instance.new("TextButton") btn.Name = "AuraToggle" btn.Size = UDim2.new(0, 160, 0, 42) btn.BackgroundColor3 = CONFIG.ColorOff btn.Text = "AURA: OFF" btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.Font = Enum.Font.GothamBold btn.TextSize = 10 btn.Parent = Container local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 8) corner.Parent = btn btn.MouseButton1Click:Connect(function() AuraEnabled = not AuraEnabled btn.Text = "AURA: " .. (AuraEnabled and "ON" or "OFF") btn.BackgroundColor3 = AuraEnabled and CONFIG.ColorOn or CONFIG.ColorOff if AuraEnabled then if not RenderConnection then RenderConnection = RunService.RenderStepped:Connect(onRenderStep) end else if RenderConnection then RenderConnection:Disconnect() RenderConnection = nil end if LocalCharacterData and LocalCharacterData.Humanoid then LocalCharacterData.Humanoid.AutoRotate = true end lockedTarget, lockedTargetRoot, cooldownUntil = nil, nil, 0 end end) local isCollapsed = false CollapseButton.MouseButton1Click:Connect(function() isCollapsed = not isCollapsed Container.Visible = not isCollapsed MainFrame.Size = isCollapsed and UDim2.new(0, 180, 0, 30) or UDim2.new(0, 180, 0, 95) CollapseButton.Text = isCollapsed and "▼" or "▲" end) local dragging, dragInput, dragStart, startPos = false, nil, nil, nil MainFrame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) MainFrame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end)