
KeylessUniversal

local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local Player = Players.LocalPlayer
local Mouse = Player:GetMouse()
local T = {
BG = Color3.fromRGB(18, 18, 22),
BG2 = Color3.fromRGB(24, 24, 30),
Card = Color3.fromRGB(28, 28, 35),
CardHover = Color3.fromRGB(35, 35, 44),
Surface = Color3.fromRGB(32, 32, 40),
Accent = Color3.fromRGB(100, 160, 255),
AccentSoft = Color3.fromRGB(40, 55, 85),
Text1 = Color3.fromRGB(240, 240, 245),
Text2 = Color3.fromRGB(155, 155, 170),
Text3 = Color3.fromRGB(95, 95, 110),
Border = Color3.fromRGB(45, 45, 55),
Divider = Color3.fromRGB(38, 38, 48),
ToggleOn = Color3.fromRGB(100, 160, 255),
ToggleOff = Color3.fromRGB(55, 55, 65),
White = Color3.fromRGB(255, 255, 255),
Red = Color3.fromRGB(220, 60, 60),
Green = Color3.fromRGB(60, 190, 90),
Yellow = Color3.fromRGB(240, 190, 40),
}
local function Tw(o,t,p) if o then pcall(function() TweenService:Create(o,TweenInfo.new(t,Enum.EasingStyle.Quint),p):Play() end) end end
local function TwB(o,t,p) if o then pcall(function() TweenService:Create(o,TweenInfo.new(t,Enum.EasingStyle.Back,Enum.EasingDirection.Out),p):Play() end) end end
local function Corner(p,r) local c=Instance.new("UICorner");c.CornerRadius=UDim.new(0,r or 8);c.Parent=p end
local function Stroke(p,col,th,tr) local s=Instance.new("UIStroke");s.Color=col or T.Border;s.Thickness=th or 1;s.Transparency=tr or 0.3;s.Parent=p end
local function UpdCanvas(s,l) local function u() s.CanvasSize=UDim2.new(0,0,0,l.AbsoluteContentSize.Y+20) end l:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(u) u() end
local Gui=Instance.new("ScreenGui");Gui.Name="SnowHub";Gui.ResetOnSpawn=false
pcall(function() Gui.Parent=game:GetService("CoreGui") end)
if not Gui.Parent then Gui.Parent=Player:WaitForChild("PlayerGui") end
for _,v in pairs(Lighting:GetChildren()) do if v.Name=="SnowBlur" then v:Destroy() end end
local Blur=Instance.new("BlurEffect");Blur.Name="SnowBlur";Blur.Size=0;Blur.Parent=Lighting
local Overlay=Instance.new("Frame")
Overlay.BackgroundColor3=Color3.fromRGB(0,0,0);Overlay.BackgroundTransparency=1
Overlay.Size=UDim2.new(1,0,1,0);Overlay.ZIndex=0;Overlay.Parent=Gui
local Shadow=Instance.new("Frame")
Shadow.BackgroundColor3=Color3.fromRGB(0,0,0);Shadow.BackgroundTransparency=0.82
Shadow.Size=UDim2.new(0,0,0,0);Shadow.Position=UDim2.new(0.5,0,0.5,8)
Shadow.AnchorPoint=Vector2.new(0.5,0.5);Shadow.ZIndex=1;Shadow.Parent=Gui;Corner(Shadow,20)
local winW,winH=520,420
local winSize=UDim2.new(0,winW,0,winH)
local Main=Instance.new("Frame");Main.BackgroundColor3=T.BG;Main.BackgroundTransparency=0.04
Main.Size=UDim2.new(0,0,0,0);Main.Position=UDim2.new(0.5,0,0.5,0);Main.AnchorPoint=Vector2.new(0.5,0.5)
Main.ClipsDescendants=true;Main.ZIndex=2;Main.Parent=Gui;Corner(Main,14);Stroke(Main,T.Border,1,0.2)
local uiOpen,minimized,destroyed=true,false,false
local function ShowUI()
if destroyed then return end
uiOpen=true;Main.Visible=true;Shadow.Visible=true;Overlay.Visible=true
TwB(Main,0.5,{Size=minimized and UDim2.new(0,winW,0,56) or winSize})
TwB(Shadow,0.5,{Size=UDim2.new(0,winW+24,0,(minimized and 56 or winH)+24)})
Tw(Overlay,0.5,{BackgroundTransparency=0.4})
TweenService:Create(Blur,TweenInfo.new(0.6,Enum.EasingStyle.Quint),{Size=20}):Play()
end
local function HideUI()
if destroyed then return end;uiOpen=false
Tw(Main,0.3,{Size=UDim2.new(0,0,0,0)});Tw(Shadow,0.3,{Size=UDim2.new(0,0,0,0)})
Tw(Overlay,0.3,{BackgroundTransparency=1})
TweenService:Create(Blur,TweenInfo.new(0.3,Enum.EasingStyle.Quint),{Size=0}):Play()
task.delay(0.35,function()
if not uiOpen then Main.Visible=false;Shadow.Visible=false;Overlay.Visible=false end
end)
end
task.wait(0.05);ShowUI()
do
local dragging,dragStart,startPos
local DZ=Instance.new("Frame");DZ.BackgroundTransparency=1;DZ.Size=UDim2.new(1,0,0,56)
DZ.ZIndex=10;DZ.Parent=Main
DZ.InputBegan:Connect(function(input)
if input.UserInputType==Enum.UserInputType.MouseButton1 then
dragging=true;dragStart=input.Position;startPos=Main.Position
input.Changed:Connect(function()
if input.UserInputState==Enum.UserInputState.End then dragging=false end
end)
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and input.UserInputType==Enum.UserInputType.MouseMovement then
local d=input.Position-dragStart
Main.Position=UDim2.new(startPos.X.Scale,startPos.X.Offset+d.X,startPos.Y.Scale,startPos.Y.Offset+d.Y)
Shadow.Position=UDim2.new(Main.Position.X.Scale,Main.Position.X.Offset,Main.Position.Y.Scale,Main.Position.Y.Offset+8)
end
end)
end
local TopLine=Instance.new("Frame");TopLine.BackgroundColor3=T.Accent
TopLine.Size=UDim2.new(1,0,0,2);TopLine.BorderSizePixel=0;TopLine.ZIndex=5;TopLine.Parent=Main
local TopBar=Instance.new("Frame");TopBar.BackgroundColor3=T.BG2;TopBar.BackgroundTransparency=0.2
TopBar.Size=UDim2.new(1,0,0,56);TopBar.BorderSizePixel=0;TopBar.ZIndex=3;TopBar.Parent=Main
local SnowBG=Instance.new("Frame");SnowBG.BackgroundColor3=T.AccentSoft
SnowBG.Size=UDim2.new(0,36,0,36);SnowBG.Position=UDim2.new(0,14,0,10)
SnowBG.ZIndex=4;SnowBG.Parent=TopBar;Corner(SnowBG,10)
local SnowI=Instance.new("TextLabel");SnowI.Text="❄";SnowI.Font=Enum.Font.SourceSansBold
SnowI.TextSize=22;SnowI.TextColor3=T.Accent;SnowI.BackgroundTransparency=1
SnowI.Size=UDim2.new(1,0,1,0);SnowI.ZIndex=5;SnowI.Parent=SnowBG
local TitleL=Instance.new("TextLabel");TitleL.Text="Snow Hub";TitleL.Font=Enum.Font.GothamBold
TitleL.TextSize=17;TitleL.TextColor3=T.Text1;TitleL.TextXAlignment=Enum.TextXAlignment.Left
TitleL.BackgroundTransparency=1;TitleL.Position=UDim2.new(0,60,0,9)
TitleL.Size=UDim2.new(0.5,0,0,20);TitleL.ZIndex=4;TitleL.Parent=TopBar
local SubL=Instance.new("TextLabel");SubL.Text="goalkeeper tools";SubL.Font=Enum.Font.Gotham
SubL.TextSize=11;SubL.TextColor3=T.Text3;SubL.TextXAlignment=Enum.TextXAlignment.Left
SubL.BackgroundTransparency=1;SubL.Position=UDim2.new(0,60,0,30)
SubL.Size=UDim2.new(0.5,0,0,15);SubL.ZIndex=4;SubL.Parent=TopBar
local XBtn=Instance.new("TextButton");XBtn.Text="X";XBtn.Font=Enum.Font.GothamBold
XBtn.TextSize=15;XBtn.TextColor3=T.Text2;XBtn.BackgroundColor3=T.Red;XBtn.BackgroundTransparency=1
XBtn.Size=UDim2.new(0,34,0,34);XBtn.Position=UDim2.new(1,-44,0,11);XBtn.ZIndex=5;XBtn.Parent=TopBar;Corner(XBtn,8)
XBtn.MouseEnter:Connect(function() Tw(XBtn,0.15,{BackgroundTransparency=0.15,TextColor3=T.White}) end)
XBtn.MouseLeave:Connect(function() Tw(XBtn,0.15,{BackgroundTransparency=1,TextColor3=T.Text2}) end)
XBtn.MouseButton1Click:Connect(HideUI)
local MnBtn=Instance.new("TextButton");MnBtn.Text="-";MnBtn.Font=Enum.Font.GothamBold
MnBtn.TextSize=22;MnBtn.TextColor3=T.Text2;MnBtn.BackgroundColor3=T.Surface;MnBtn.BackgroundTransparency=1
MnBtn.Size=UDim2.new(0,34,0,34);MnBtn.Position=UDim2.new(1,-82,0,11);MnBtn.ZIndex=5;MnBtn.Parent=TopBar;Corner(MnBtn,8)
MnBtn.MouseEnter:Connect(function() Tw(MnBtn,0.15,{BackgroundTransparency=0.3,TextColor3=T.Text1}) end)
MnBtn.MouseLeave:Connect(function() Tw(MnBtn,0.15,{BackgroundTransparency=1,TextColor3=T.Text2}) end)
MnBtn.MouseButton1Click:Connect(function()
minimized=not minimized
Tw(Main,0.35,{Size=minimized and UDim2.new(0,winW,0,56) or winSize})
Tw(Shadow,0.35,{Size=UDim2.new(0,winW+24,0,minimized and 80 or winH+24)})
end)
local Dv=Instance.new("Frame");Dv.BackgroundColor3=T.Divider;Dv.Size=UDim2.new(1,0,0,1)
Dv.Position=UDim2.new(0,0,0,56);Dv.BorderSizePixel=0;Dv.ZIndex=3;Dv.Parent=Main
local Sidebar=Instance.new("Frame");Sidebar.BackgroundColor3=T.BG2;Sidebar.BackgroundTransparency=0.05
Sidebar.Size=UDim2.new(0,130,1,-57);Sidebar.Position=UDim2.new(0,0,0,57)
Sidebar.BorderSizePixel=0;Sidebar.ZIndex=3;Sidebar.Parent=Main
local TabScroll=Instance.new("ScrollingFrame");TabScroll.BackgroundTransparency=1
TabScroll.Size=UDim2.new(1,-8,1,-8);TabScroll.Position=UDim2.new(0,4,0,4)
TabScroll.ScrollBarThickness=0;TabScroll.CanvasSize=UDim2.new(0,0,0,0)
TabScroll.BorderSizePixel=0;TabScroll.ZIndex=4;TabScroll.Parent=Sidebar
local TabLy=Instance.new("UIListLayout");TabLy.Padding=UDim.new(0,3);TabLy.Parent=TabScroll
UpdCanvas(TabScroll,TabLy)
local Content=Instance.new("Frame");Content.BackgroundTransparency=1
Content.Size=UDim2.new(1,-131,1,-57);Content.Position=UDim2.new(0,131,0,57)
Content.ClipsDescendants=true;Content.ZIndex=3;Content.Parent=Main
local NotifH=Instance.new("Frame");NotifH.BackgroundTransparency=1
NotifH.Size=UDim2.new(0,300,1,-20);NotifH.Position=UDim2.new(1,-310,0,10)
NotifH.ZIndex=30;NotifH.Parent=Gui
local NLy=Instance.new("UIListLayout");NLy.Padding=UDim.new(0,8)
NLy.VerticalAlignment=Enum.VerticalAlignment.Bottom;NLy.Parent=NotifH
-- Tab System
local AllTabs,ActiveTab={},nil
local function SwitchTab(tab)
for _,t2 in pairs(AllTabs) do
t2.Page.Visible=false
Tw(t2.Btn,0.2,{BackgroundTransparency=1})
Tw(t2.Lbl,0.2,{TextColor3=T.Text2})
Tw(t2.Ind,0.2,{Size=UDim2.new(0,3,0,0),BackgroundTransparency=1})
end
tab.Page.Visible=true;ActiveTab=tab
Tw(tab.Btn,0.25,{BackgroundTransparency=0.4})
Tw(tab.Lbl,0.25,{TextColor3=T.Text1})
TwB(tab.Ind,0.3,{Size=UDim2.new(0,3,0,18),BackgroundTransparency=0})
end
local function MakeTab(name,icon)
local Tab={}
local Btn=Instance.new("TextButton");Btn.Text="";Btn.BackgroundColor3=T.Card
Btn.BackgroundTransparency=1;Btn.Size=UDim2.new(1,0,0,40);Btn.ZIndex=5
Btn.Parent=TabScroll;Corner(Btn,8)
local Ind=Instance.new("Frame");Ind.BackgroundColor3=T.Accent;Ind.BackgroundTransparency=1
Ind.Size=UDim2.new(0,3,0,0);Ind.Position=UDim2.new(0,2,0.5,0);Ind.AnchorPoint=Vector2.new(0,0.5)
Ind.BorderSizePixel=0;Ind.ZIndex=6;Ind.Parent=Btn;Corner(Ind,2)
local Ico=Instance.new("TextLabel");Ico.Text=icon;Ico.Font=Enum.Font.GothamBold
Ico.TextSize=16;Ico.TextColor3=T.Text3;Ico.BackgroundTransparency=1
Ico.Size=UDim2.new(0,26,1,0);Ico.Position=UDim2.new(0,14,0,0);Ico.ZIndex=6;Ico.Parent=Btn
local Lbl=Instance.new("TextLabel");Lbl.Text=name;Lbl.Font=Enum.Font.GothamSemibold
Lbl.TextSize=13;Lbl.TextColor3=T.Text2;Lbl.TextXAlignment=Enum.TextXAlignment.Left
Lbl.BackgroundTransparency=1;Lbl.Size=UDim2.new(1,-48,1,0);Lbl.Position=UDim2.new(0,42,0,0)
Lbl.ZIndex=6;Lbl.Parent=Btn
local Page=Instance.new("ScrollingFrame");Page.BackgroundTransparency=1
Page.Size=UDim2.new(1,-14,1,-14);Page.Position=UDim2.new(0,7,0,7)
Page.ScrollBarThickness=3;Page.ScrollBarImageColor3=T.Accent
Page.CanvasSize=UDim2.new(0,0,0,0);Page.BorderSizePixel=0;Page.Visible=false
Page.ZIndex=4;Page.Parent=Content
local PLy=Instance.new("UIListLayout");PLy.Padding=UDim.new(0,8);PLy.Parent=Page
UpdCanvas(Page,PLy)
Tab.Btn=Btn;Tab.Lbl=Lbl;Tab.Ico=Ico;Tab.Ind=Ind;Tab.Page=Page
Btn.MouseEnter:Connect(function() if ActiveTab~=Tab then Tw(Btn,0.12,{BackgroundTransparency=0.6}) end end)
Btn.MouseLeave:Connect(function() if ActiveTab~=Tab then Tw(Btn,0.12,{BackgroundTransparency=1}) end end)
Btn.MouseButton1Click:Connect(function() SwitchTab(Tab) end)
table.insert(AllTabs,Tab);if #AllTabs==1 then SwitchTab(Tab) end
return Page
end
-- Section
local function MakeSection(page,name)
local Sec={}
local SF=Instance.new("Frame");SF.BackgroundColor3=T.Card;SF.BackgroundTransparency=0.08
SF.Size=UDim2.new(1,0,0,0);SF.BorderSizePixel=0;SF.ZIndex=5;SF.Parent=page
Corner(SF,12);Stroke(SF,T.Border,1,0.4)
local Pd=Instance.new("UIPadding");Pd.PaddingTop=UDim.new(0,12);Pd.PaddingBottom=UDim.new(0,12)
Pd.PaddingLeft=UDim.new(0,14);Pd.PaddingRight=UDim.new(0,14);Pd.Parent=SF
local Ly=Instance.new("UIListLayout");Ly.Padding=UDim.new(0,7);Ly.Parent=SF
local function upd() SF.Size=UDim2.new(1,0,0,Ly.AbsoluteContentSize.Y+26) end
Ly:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(upd);task.defer(upd)
if name and name~="" then
local ST=Instance.new("TextLabel");ST.Text=name;ST.Font=Enum.Font.GothamBold
ST.TextSize=14;ST.TextColor3=T.Text1;ST.TextXAlignment=Enum.TextXAlignment.Left
ST.BackgroundTransparency=1;ST.Size=UDim2.new(1,0,0,22);ST.ZIndex=6;ST.Parent=SF
local SD=Instance.new("Frame");SD.BackgroundColor3=T.Divider
SD.Size=UDim2.new(1,0,0,1);SD.BorderSizePixel=0;SD.ZIndex=6;SD.Parent=SF
end
function Sec:AddToggle(c)
c=c or{}
local nm,desc,def,cb=c.Name or"Toggle",c.Description,c.Default or false,c.Callback or function()end
local state=def;local h=desc and 54 or 40
local TF=Instance.new("TextButton");TF.Text="";TF.BackgroundColor3=T.Surface
TF.BackgroundTransparency=0.2;TF.Size=UDim2.new(1,0,0,h);TF.ZIndex=6;TF.Parent=SF;Corner(TF,10)
local TL=Instance.new("TextLabel");TL.Text=nm;TL.Font=Enum.Font.GothamSemibold;TL.TextSize=13
TL.TextColor3=T.Text1;TL.TextXAlignment=Enum.TextXAlignment.Left;TL.BackgroundTransparency=1
TL.Size=UDim2.new(1,-68,0,18);TL.Position=UDim2.new(0,14,0,desc and 9 or 11);TL.ZIndex=7;TL.Parent=TF
if desc then
local TD=Instance.new("TextLabel");TD.Text=desc;TD.Font=Enum.Font.Gotham;TD.TextSize=11
TD.TextColor3=T.Text3;TD.TextXAlignment=Enum.TextXAlignment.Left;TD.BackgroundTransparency=1
TD.Size=UDim2.new(1,-68,0,14);TD.Position=UDim2.new(0,14,0,31);TD.ZIndex=7;TD.Parent=TF
end
local SBG=Instance.new("Frame");SBG.BackgroundColor3=state and T.ToggleOn or T.ToggleOff
SBG.Size=UDim2.new(0,44,0,24);SBG.Position=UDim2.new(1,-56,0.5,0)
SBG.AnchorPoint=Vector2.new(0,0.5);SBG.ZIndex=7;SBG.Parent=TF;Corner(SBG,12)
local Knob=Instance.new("Frame");Knob.BackgroundColor3=T.White;Knob.Size=UDim2.new(0,18,0,18)
Knob.Position=state and UDim2.new(1,-21,0.5,0) or UDim2.new(0,3,0.5,0)
Knob.AnchorPoint=Vector2.new(0,0.5);Knob.ZIndex=8;Knob.Parent=SBG;Corner(Knob,9)
local function updT()
Tw(SBG,0.25,{BackgroundColor3=state and T.ToggleOn or T.ToggleOff})
TwB(Knob,0.3,{Position=state and UDim2.new(1,-21,0.5,0) or UDim2.new(0,3,0.5,0)})
end
TF.MouseEnter:Connect(function() Tw(TF,0.1,{BackgroundTransparency=0.05,BackgroundColor3=T.CardHover}) end)
TF.MouseLeave:Connect(function() Tw(TF,0.1,{BackgroundTransparency=0.2,BackgroundColor3=T.Surface}) end)
TF.MouseButton1Click:Connect(function() state=not state;updT();pcall(cb,state) end)
task.defer(upd)
return{Set=function(_,v) state=v;updT();pcall(cb,v) end,Get=function() return state end}
end
function Sec:AddSlider(c)
c=c or{}
local nm,desc=c.Name or"Slider",c.Description
local min,max,def=c.Min or 0,c.Max or 100,c.Default or c.Min or 0
local sfx,inc,cb=c.Suffix or"",c.Increment or 1,c.Callback or function()end
local val=def;local dH=desc and 16 or 0
local SF2=Instance.new("Frame");SF2.BackgroundColor3=T.Surface;SF2.BackgroundTransparency=0.2
SF2.Size=UDim2.new(1,0,0,62+dH);SF2.ZIndex=6;SF2.Parent=SF;Corner(SF2,10)
local SL=Instance.new("TextLabel");SL.Text=nm;SL.Font=Enum.Font.GothamSemibold;SL.TextSize=13
SL.TextColor3=T.Text1;SL.TextXAlignment=Enum.TextXAlignment.Left;SL.BackgroundTransparency=1
SL.Size=UDim2.new(0.6,0,0,18);SL.Position=UDim2.new(0,14,0,8);SL.ZIndex=7;SL.Parent=SF2
if desc then
local SD2=Instance.new("TextLabel");SD2.Text=desc;SD2.Font=Enum.Font.Gotham;SD2.TextSize=11
SD2.TextColor3=T.Text3;SD2.TextXAlignment=Enum.TextXAlignment.Left;SD2.BackgroundTransparency=1
SD2.Size=UDim2.new(0.55,0,0,14);SD2.Position=UDim2.new(0,14,0,27);SD2.ZIndex=7;SD2.Parent=SF2
end
local VL=Instance.new("TextLabel");VL.Text=tostring(val)..sfx;VL.Font=Enum.Font.GothamBold
VL.TextSize=14;VL.TextColor3=T.Accent;VL.TextXAlignment=Enum.TextXAlignment.Right
VL.BackgroundTransparency=1;VL.Size=UDim2.new(0.35,-14,0,18);VL.Position=UDim2.new(0.65,0,0,8)
VL.ZIndex=7;VL.Parent=SF2
local barY=32+dH+8
local BarBG=Instance.new("Frame");BarBG.BackgroundColor3=T.ToggleOff
BarBG.Size=UDim2.new(1,-28,0,6);BarBG.Position=UDim2.new(0,14,0,barY)
BarBG.ZIndex=7;BarBG.Parent=SF2;Corner(BarBG,3)
local Fill=Instance.new("Frame");Fill.BackgroundColor3=T.Accent
Fill.Size=UDim2.new((def-min)/(max-min),0,1,0);Fill.BorderSizePixel=0
Fill.ZIndex=8;Fill.Parent=BarBG;Corner(Fill,3)
local KS=Instance.new("Frame");KS.BackgroundColor3=T.White;KS.Size=UDim2.new(0,18,0,18)
KS.Position=UDim2.new((def-min)/(max-min),0,0.5,0);KS.AnchorPoint=Vector2.new(0.5,0.5)
KS.ZIndex=9;KS.Parent=BarBG;Corner(KS,9)
local sliding=false
local function updS(x)
local pct=math.clamp((x-BarBG.AbsolutePosition.X)/BarBG.AbsoluteSize.X,0,1)
val=math.floor((min+(max-min)*pct)/inc+0.5)*inc;val=math.clamp(val,min,max)
local p=(val-min)/(max-min)
Fill.Size=UDim2.new(p,0,1,0);KS.Position=UDim2.new(p,0,0.5,0)
VL.Text=tostring(val)..sfx;pcall(cb,val)
end
SF2.InputBegan:Connect(function(i)
if i.UserInputType==Enum.UserInputType.MouseButton1 then sliding=true;updS(i.Position.X) end
end)
SF2.InputEnded:Connect(function(i)
if i.UserInputType==Enum.UserInputType.MouseButton1 then sliding=false end
end)
UserInputService.InputChanged:Connect(function(i)
if sliding and i.UserInputType==Enum.UserInputType.MouseMovement then updS(i.Position.X) end
end)
task.defer(upd)
return{Set=function(_,v) val=math.clamp(v,min,max);local p=(val-min)/(max-min)
Fill.Size=UDim2.new(p,0,1,0);KS.Position=UDim2.new(p,0,0.5,0)
VL.Text=tostring(val)..sfx;pcall(cb,val) end,Get=function() return val end}
end
task.defer(upd);return Sec
end
-- Notify
local function Notify(c)
c=c or{};local nT,nC,nD,nTy=c.Title or"",c.Content or"",c.Duration or 3,c.Type or"Info"
local cls={Info=T.Accent,Success=T.Green,Warning=T.Yellow,Error=T.Red}
local ics={Info="❄",Success="✓",Warning="⚠",Error="✕"};local col=cls[nTy]
local NF=Instance.new("Frame");NF.BackgroundColor3=T.Card;NF.Size=UDim2.new(1,0,0,0)
NF.ClipsDescendants=true;NF.ZIndex=31;NF.Parent=NotifH;Corner(NF,12)
local NA=Instance.new("Frame");NA.BackgroundColor3=col;NA.Size=UDim2.new(1,0,0,2)
NA.BorderSizePixel=0;NA.ZIndex=32;NA.Parent=NF
local NI=Instance.new("TextLabel");NI.Text=ics[nTy];NI.Font=Enum.Font.GothamBold;NI.TextSize=18
NI.TextColor3=col;NI.BackgroundTransparency=1;NI.Size=UDim2.new(0,28,0,28)
NI.Position=UDim2.new(0,12,0,14);NI.ZIndex=32;NI.Parent=NF
local NT2=Instance.new("TextLabel");NT2.Text=nT;NT2.Font=Enum.Font.GothamBold;NT2.TextSize=13
NT2.TextColor3=T.Text1;NT2.TextXAlignment=Enum.TextXAlignment.Left;NT2.BackgroundTransparency=1
NT2.Size=UDim2.new(1,-50,0,16);NT2.Position=UDim2.new(0,44,0,12);NT2.ZIndex=32;NT2.Parent=NF
local NC2=Instance.new("TextLabel");NC2.Text=nC;NC2.Font=Enum.Font.Gotham;NC2.TextSize=11
NC2.TextColor3=T.Text2;NC2.TextXAlignment=Enum.TextXAlignment.Left;NC2.BackgroundTransparency=1
NC2.Size=UDim2.new(1,-50,0,26);NC2.Position=UDim2.new(0,44,0,30);NC2.ZIndex=32;NC2.Parent=NF
TwB(NF,0.4,{Size=UDim2.new(1,0,0,64)})
task.delay(nD,function()
Tw(NF,0.3,{Size=UDim2.new(1,0,0,0)})
task.delay(0.35,function() pcall(function() NF:Destroy() end) end)
end)
end
-- ================================================================
-- BALL SYSTEM
-- ================================================================
local Balls = {}
local ESPHighlights = {}
local BallESP = {Enabled = false}
local BallLock = {Enabled = false, Distance = 50, Smoothness = 0.15}
local Magnet = {Enabled = false, Distance = 60}
local ballLockPaused = false
local function IsBall(obj)
if not obj:IsA("BasePart") then return false end
if obj.Anchored then return false end
if obj.Transparency >= 0.9 then return false end
local p = obj.Parent
while p and p ~= workspace do
if p:IsA("Model") and p:FindFirstChildOfClass("Humanoid") then return false end
if p:IsA("Accessory") or p:IsA("Tool") then return false end
p = p.Parent
end
local s = obj.Size
if s.X > 6 or s.Y > 6 or s.Z > 6 or s.X < 0.3 then return false end
if obj:IsA("Part") and obj.Shape == Enum.PartType.Ball then return true end
if obj:IsA("MeshPart") then
local avg = (s.X + s.Y + s.Z) / 3
local diff = math.max(math.abs(s.X - avg), math.abs(s.Y - avg), math.abs(s.Z - avg))
if diff < avg * 0.3 and avg >= 0.5 and avg <= 5 then return true end
end
return false
end
local function ScanBalls()
Balls = {}
for _, obj in pairs(workspace:GetDescendants()) do
if IsBall(obj) then table.insert(Balls, obj) end
end
end
local function GetClosestBall(root, maxDist)
local closest, closestDist = nil, maxDist or math.huge
for _, ball in pairs(Balls) do
if ball and ball.Parent then
local dist = (ball.Position - root.Position).Magnitude
if dist < closestDist then closest = ball; closestDist = dist end
end
end
return closest, closestDist
end
local function ClearAllESP()
for _, hl in pairs(ESPHighlights) do pcall(function() hl:Destroy() end) end
ESPHighlights = {}
end
ScanBalls()
workspace.DescendantAdded:Connect(function(obj)
task.delay(0.2, function()
if obj and obj.Parent and IsBall(obj) then
for _, b in pairs(Balls) do if b == obj then return end end
table.insert(Balls, obj)
end
end)
end)
workspace.DescendantRemoving:Connect(function(obj)
if ESPHighlights[obj] then
pcall(function() ESPHighlights[obj]:Destroy() end)
ESPHighlights[obj] = nil
end
for i = #Balls, 1, -1 do
if Balls[i] == obj then table.remove(Balls, i); break end
end
end)
-- ESP loop
task.spawn(function()
while true do
task.wait(0.3)
for i = #Balls, 1, -1 do
if not Balls[i] or not Balls[i].Parent then table.remove(Balls, i) end
end
local char = Player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if BallESP.Enabled then
for _, ball in pairs(Balls) do
if ball and ball.Parent then
if not ESPHighlights[ball] then
local hl = Instance.new("Highlight")
hl.Name = "SnowESP"
hl.FillTransparency = 0.4
hl.OutlineTransparency = 0
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.Adornee = ball
hl.Parent = Gui
ESPHighlights[ball] = hl
end
if root and ESPHighlights[ball] then
local dist = (ball.Position - root.Position).Magnitude
local col = dist < 20 and Color3.fromRGB(80, 255, 100)
or dist < 50 and Color3.fromRGB(255, 200, 60)
or Color3.fromRGB(255, 70, 70)
pcall(function()
ESPHighlights[ball].FillColor = col
ESPHighlights[ball].OutlineColor = col
end)
end
end
end
for ball, hl in pairs(ESPHighlights) do
if not ball or not ball.Parent then
pcall(function() hl:Destroy() end)
ESPHighlights[ball] = nil
end
end
else
if next(ESPHighlights) then ClearAllESP() end
end
end
end)
-- BallLock
RunService.RenderStepped:Connect(function()
if not BallLock.Enabled then return end
local char = Player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not root then return end
local ball, dist = GetClosestBall(root, BallLock.Distance)
if not ball then ballLockPaused = false; return end
if dist < 2 then ballLockPaused = true; return end
if dist > 6 then ballLockPaused = false end
if ballLockPaused then return end
local cam = workspace.CurrentCamera
cam.CFrame = cam.CFrame:Lerp(CFrame.new(cam.CFrame.Position, ball.Position), BallLock.Smoothness)
end)
-- Magnet + RShift
UserInputService.InputBegan:Connect(function(input, gpe)
if gpe then return end
if input.KeyCode == Enum.KeyCode.RightShift then
if uiOpen then HideUI() else ShowUI() end
return
end
if input.KeyCode == Enum.KeyCode.F and Magnet.Enabled then
local char = Player.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not root then return end
local ball, dist = GetClosestBall(root, Magnet.Distance)
if not ball then return end
local originalCFrame = root.CFrame
local dir = (ball.Position - root.Position).Unit
root.CFrame = CFrame.new(ball.Position - dir * 1, ball.Position)
task.wait()
root.CFrame = originalCFrame
root.Velocity = Vector3.new(0, 0, 0)
pcall(function() root.AssemblyLinearVelocity = Vector3.new(0, 0, 0) end)
end
end)
-- Рескан
task.spawn(function()
while true do
task.wait(3)
ScanBalls()
end
end)
-- ================================================================
-- UI
-- ================================================================
local GKPage = MakeTab("GK", "🧤")
local ESPSec = MakeSection(GKPage, "⚽ Ball ESP")
ESPSec:AddToggle({
Name = "Ball ESP",
Description = "Подсветка мячей через стены",
Default = false,
Callback = function(v)
BallESP.Enabled = v
if not v then ClearAllESP() end
Notify({Title = "Ball ESP", Content = v and "Включено" or "Выключено", Duration = 2, Type = v and "Success" or "Info"})
end
})
local BLSec = MakeSection(GKPage, "🎯 BallLock")
BLSec:AddToggle({
Name = "BallLock",
Description = "Камера наводится на мяч",
Default = false,
Callback = function(v)
BallLock.Enabled = v
ballLockPaused = false
Notify({Title = "BallLock", Content = v and "Включено" or "Выключено", Duration = 2, Type = v and "Success" or "Info"})
end
})
BLSec:AddSlider({
Name = "Distance",
Description = "Макс. дистанция",
Min = 5,
Max = 150,
Default = 50,
Suffix = " studs",
Callback = function(v) BallLock.Distance = v end
})
BLSec:AddSlider({
Name = "Smoothness",
Description = "Плавность камеры",
Min = 5,
Max = 50,
Default = 15,
Suffix = "%",
Callback = function(v) BallLock.Smoothness = v / 100 end
})
local MagSec = MakeSection(GKPage, "🧲 Magnet")
MagSec:AddToggle({
Name = "Magnet",
Description = "F — телепорт к мячу и обратно",
Default = false,
Callback = function(v)
Magnet.Enabled = v
Notify({Title = "Magnet", Content = v and "Нажми F" or "Выключено", Duration = 2, Type = v and "Success" or "Info"})
end
})
MagSec:AddSlider({
Name = "Distance",
Description = "Макс. дистанция",
Min = 5,
Max = 150,
Default = 60,
Suffix = " studs",
Callback = function(v) Magnet.Distance = v end
})
task.delay(1, function()
Notify({Title = "❄ Snow Hub", Content = "RShift — меню | F — магнит", Duration = 4, Type = "Info"})
end)



Nice script, i hope it had options for normal players but the gk script is still very good and you can set it wether you want it to be super noticable or not. Thumbs up 👍
W script