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 = "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)Smart Aura System
Automatic Target Detection
Closest Target Priority
Target Lock Mechanism
Auto Face Enemy
Fast Auto Attack
Safe Zone Detection
Blocking Status Check
Character Cache Optimization
Anti-Switch Cooldown
Smooth Target Tracking
Draggable GUI
One-Click Toggle
Optimized Hardcoded Settings
No comments yet. Be the first to comment!
1local Players = game:GetService("Players")
2local ReplicatedStorage = game:GetService("ReplicatedStorage")
3local RunService = game:GetService("RunService")
4local UserInputService = game:GetService("UserInputService")
5local CoreGui = game:GetService("CoreGui")
6
7local LocalPlayer = Players.LocalPlayer
8local HitRemote = ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("Hit")
9
10local CONFIG = {
11 StareRadius = 15.0,
12 EnterAttackRadius = 6.5,
13 LeaveAttackRadius = 6.8,
14 AttackDelay = 0.035,
15 SwitchCooldown = 0.75,
16 ZoneSwitchDelay = 0.1,
17
18 ColorOn = Color3.fromRGB(0, 210, 120),
19 ColorOff = Color3.fromRGB(235, 55, 55),
20 ColorPanel = Color3.fromRGB(20, 20, 20)
21}
22
23local ActivePlayers = {}
24local CharacterCache = {}
25local LastZoneChangeTime = {}
26
27local AuraEnabled = false
28local RenderConnection = nil
29
30local singlePayload = {}
31local innerPayloadData = {
32 ["Victim"] = nil,
33 ["Vector"] = Vector3.new(0, 0, 0)
34}
35
36local lockedTarget = nil
37local lockedTargetRoot = nil
38local cooldownUntil = 0
39
40local function isInSafeZone(player)
41 if not player then return false end
42 local sz = player:FindFirstChild("SafeZone") or (player:FindFirstChild("GameStats") and player.GameStats:FindFirstChild("SafeZone"))
43
44 if sz and sz:IsA("BoolValue") then
45 if LastZoneChangeTime[player] == nil then
46 LastZoneChangeTime[player] = {State = sz.Value, Time = 0}
47 elseif LastZoneChangeTime[player].State ~= sz.Value then
48 LastZoneChangeTime[player].State = sz.Value
49 LastZoneChangeTime[player].Time = os.clock()
50 end
51 return sz.Value
52 end
53 return false
54end
55
56local function uncachePlayer(player)
57 CharacterCache[player] = nil
58 LastZoneChangeTime[player] = nil
59 if lockedTarget == player then
60 lockedTarget, lockedTargetRoot = nil, nil
61 cooldownUntil = os.clock() + CONFIG.SwitchCooldown
62 end
63 local idx = table.find(ActivePlayers, player)
64 if idx then table.remove(ActivePlayers, idx) end
65end
66
67local function cachePlayer(player)
68 if player == LocalPlayer then return end
69 if not table.find(ActivePlayers, player) then table.insert(ActivePlayers, player) end
70
71 local function onCharacterAdded(char)
72 local root = char:WaitForChild("HumanoidRootPart", 10)
73 local hum = char:WaitForChild("Humanoid", 10)
74 if root and hum then
75 CharacterCache[player] = {Character = char, Root = root, Humanoid = hum}
76 hum.Died:Connect(function()
77 CharacterCache[player] = nil
78 if lockedTarget == player then
79 lockedTarget, lockedTargetRoot = nil, nil
80 cooldownUntil = os.clock() + CONFIG.SwitchCooldown
81 end
82 end)
83 end
84 end
85 player.CharacterAdded:Connect(onCharacterAdded)
86 if player.Character then onCharacterAdded(player.Character) end
87end
88
89Players.PlayerAdded:Connect(cachePlayer)
90Players.PlayerRemoving:Connect(uncachePlayer)
91for _, p in ipairs(Players:GetPlayers()) do cachePlayer(p) end
92
93local LocalCharacterData = nil
94local function setupLocalPlayer(char)
95 if not char then return end
96 local root = char:WaitForChild("HumanoidRootPart", 10)
97 local hum = char:WaitForChild("Humanoid", 10)
98 if root and hum then LocalCharacterData = {Root = root, Humanoid = hum} end
99end
100LocalPlayer.CharacterAdded:Connect(setupLocalPlayer)
101if LocalPlayer.Character then setupLocalPlayer(LocalPlayer.Character) end
102
103local function validateTarget(player, root, maxRadius)
104 if not player or not root or not root.Parent or isInSafeZone(player) then return false end
105 local zoneTrack = LastZoneChangeTime[player]
106 if zoneTrack and (os.clock() - zoneTrack.Time) < CONFIG.ZoneSwitchDelay then return false end
107 return (root.Position - LocalCharacterData.Root.Position).Magnitude <= maxRadius
108end
109
110local function updateLockedTarget()
111 local currentTime = os.clock()
112 if currentTime < cooldownUntil then return nil, nil end
113
114 if lockedTarget and lockedTargetRoot then
115 if validateTarget(lockedTarget, lockedTargetRoot, CONFIG.LeaveAttackRadius) then
116 return lockedTarget, lockedTargetRoot
117 else
118 lockedTarget, lockedTargetRoot = nil, nil
119 cooldownUntil = currentTime + CONFIG.SwitchCooldown
120 return nil, nil
121 end
122 end
123
124 if not LocalCharacterData or isInSafeZone(LocalPlayer) then return nil, nil end
125
126 local myPos = LocalCharacterData.Root.Position
127 local closestPlayer, closestRoot, shortestDist = nil, nil, CONFIG.EnterAttackRadius
128
129 for i = 1, #ActivePlayers do
130 local p = ActivePlayers[i]
131 local data = CharacterCache[p]
132 if data and data.Character.Parent and validateTarget(p, data.Root, CONFIG.EnterAttackRadius) then
133 local dist = (data.Root.Position - myPos).Magnitude
134 if dist <= shortestDist then
135 shortestDist = dist
136 closestPlayer, closestRoot = p, data.Root
137 end
138 end
139 end
140
141 lockedTarget, lockedTargetRoot = closestPlayer, closestRoot
142 return closestPlayer, closestRoot
143end
144
145local function onRenderStep()
146 if not AuraEnabled or not LocalCharacterData then return end
147 local target, targetRoot = updateLockedTarget()
148 local myHum = LocalCharacterData.Humanoid
149
150 if target and targetRoot then
151 if myHum.AutoRotate then myHum.AutoRotate = false end
152 local targetPos = targetRoot.Position
153 LocalCharacterData.Root.CFrame = CFrame.lookAt(LocalCharacterData.Root.Position, Vector3.new(targetPos.X, LocalCharacterData.Root.Position.Y, targetPos.Z))
154 else
155 if not myHum.AutoRotate then myHum.AutoRotate = true end
156 end
157end
158
159task.spawn(function()
160 while true do
161 task.wait(CONFIG.AttackDelay)
162 if AuraEnabled and not isInSafeZone(LocalPlayer) and LocalCharacterData then
163 local target, targetRoot = updateLockedTarget()
164 local isBlocking = LocalPlayer:FindFirstChild("Blocking") and LocalPlayer.Blocking.Value == true
165
166 if target and targetRoot and not isBlocking then
167 innerPayloadData.Victim = target
168 innerPayloadData.Vector = (targetRoot.Position - LocalCharacterData.Root.Position).Unit
169 table.clear(singlePayload)
170 singlePayload[target.Name] = innerPayloadData
171 HitRemote:FireServer(singlePayload)
172 end
173 end
174 end
175end)
176
177local UI_Parent = type(gethui) == "function" and gethui() or CoreGui
178local OldGui = UI_Parent:FindFirstChild("SranyHubPanel")
179if OldGui then OldGui:Destroy() end
180
181local ScreenGui = Instance.new("ScreenGui")
182ScreenGui.Name = "SranyHubPanel"
183ScreenGui.ResetOnSpawn = false
184ScreenGui.Parent = UI_Parent
185
186local MainFrame = Instance.new("Frame")
187MainFrame.Name = "MainFrame"
188MainFrame.Size = UDim2.new(0, 180, 0, 95)
189MainFrame.Position = UDim2.new(0.75, 0, 0.35, 0)
190MainFrame.BackgroundColor3 = CONFIG.ColorPanel
191MainFrame.BorderSizePixel = 0
192MainFrame.Active = true
193MainFrame.Parent = ScreenGui
194
195local MainCorner = Instance.new("UICorner")
196MainCorner.CornerRadius = UDim.new(0, 10)
197MainCorner.Parent = MainFrame
198
199local TitleLabel = Instance.new("TextLabel")
200TitleLabel.Size = UDim2.new(0, 120, 0, 30)
201TitleLabel.Position = UDim2.new(0, 12, 0, 0)
202TitleLabel.BackgroundTransparency = 1
203TitleLabel.Text = "hub"
204TitleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
205TitleLabel.Font = Enum.Font.GothamBold
206TitleLabel.TextSize = 11
207TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
208TitleLabel.Parent = MainFrame
209
210local CollapseButton = Instance.new("TextButton")
211CollapseButton.Size = UDim2.new(0, 30, 0, 30)
212CollapseButton.Position = UDim2.new(1, -35, 0, 0)
213CollapseButton.BackgroundTransparency = 1
214CollapseButton.Text = "â–²"
215CollapseButton.TextColor3 = Color3.fromRGB(200, 200, 200)
216CollapseButton.Font = Enum.Font.GothamBold
217CollapseButton.TextSize = 14
218CollapseButton.Parent = MainFrame
219
220local Container = Instance.new("Frame")
221Container.Name = "Container"
222Container.Size = UDim2.new(1, 0, 1, -35)
223Container.Position = UDim2.new(0, 0, 0, 35)
224Container.BackgroundTransparency = 1
225Container.Parent = MainFrame
226
227local ListLayout = Instance.new("UIListLayout")
228ListLayout.Parent = Container
229ListLayout.SortOrder = Enum.SortOrder.LayoutOrder
230ListLayout.Padding = UDim.new(0, 8)
231ListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
232
233local btn = Instance.new("TextButton")
234btn.Name = "AuraToggle"
235btn.Size = UDim2.new(0, 160, 0, 42)
236btn.BackgroundColor3 = CONFIG.ColorOff
237btn.Text = "AURA: OFF"
238btn.TextColor3 = Color3.fromRGB(255, 255, 255)
239btn.Font = Enum.Font.GothamBold
240btn.TextSize = 10
241btn.Parent = Container
242
243local corner = Instance.new("UICorner")
244corner.CornerRadius = UDim.new(0, 8)
245corner.Parent = btn
246
247btn.MouseButton1Click:Connect(function()
248 AuraEnabled = not AuraEnabled
249 btn.Text = "AURA: " .. (AuraEnabled and "ON" or "OFF")
250 btn.BackgroundColor3 = AuraEnabled and CONFIG.ColorOn or CONFIG.ColorOff
251
252 if AuraEnabled then
253 if not RenderConnection then RenderConnection = RunService.RenderStepped:Connect(onRenderStep) end
254 else
255 if RenderConnection then RenderConnection:Disconnect() RenderConnection = nil end
256 if LocalCharacterData and LocalCharacterData.Humanoid then LocalCharacterData.Humanoid.AutoRotate = true end
257 lockedTarget, lockedTargetRoot, cooldownUntil = nil, nil, 0
258 end
259end)
260
261local isCollapsed = false
262CollapseButton.MouseButton1Click:Connect(function()
263 isCollapsed = not isCollapsed
264 Container.Visible = not isCollapsed
265 MainFrame.Size = isCollapsed and UDim2.new(0, 180, 0, 30) or UDim2.new(0, 180, 0, 95)
266 CollapseButton.Text = isCollapsed and "â–¼" or "â–²"
267end)
268
269local dragging, dragInput, dragStart, startPos = false, nil, nil, nil
270MainFrame.InputBegan:Connect(function(input)
271 if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
272 dragging = true
273 dragStart = input.Position
274 startPos = MainFrame.Position
275 input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end)
276 end
277end)
278MainFrame.InputChanged:Connect(function(input)
279 if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end
280end)
281UserInputService.InputChanged:Connect(function(input)
282 if input == dragInput and dragging then
283 local delta = input.Position - dragStart
284 MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
285 end
286end)