Run it
Copy the script and paste it into your executor.
UserInputService = :()
TweenService = :()
RunService = :()
CoreGui = :()
Players = :()
TextService = :()
HttpService = :()
LocalPlayer = Players.LocalPlayer
uiParent = ((() CoreGui.Name ) CoreGui) LocalPlayer:()
Themes = {
[] = {
MainBG = .(, , ),
SidebarBG = .(, , ),
TopbarBG = .(, , ),
ElementBG = .(, , ),
Accent = .(, , ),
TextMain = .(, , ),
TextSub = .(, , ),
Border = .(, , ),
DropdownListBG = .(, , ),
DropdownListStroke = .(, , )
},
[] = {
MainBG = .(, , ),
SidebarBG = .(, , ),
TopbarBG = .(, , ),
ElementBG = .(, , ),
Accent = .(, , ),
TextMain = .(, , ),
TextSub = .(, , ),
Border = .(, , ),
DropdownListBG = .(, , ),
DropdownListStroke = .(, , )
},
[] = {
MainBG = .(, , ),
SidebarBG = .(, , ),
TopbarBG = .(, , ),
ElementBG = .(, , ),
Accent = .(, , ),
TextMain = .(, , ),
TextSub = .(, , ),
Border = .(, , ),
DropdownListBG = .(, , ),
DropdownListStroke = .(, , )
},
[] = {
MainBG = .(, , ),
SidebarBG = .(, , ),
TopbarBG = .(, , ),
ElementBG = .(, , ),
Accent = .(, , ),
TextMain = .(, , ),
TextSub = .(, , ),
Border = .(, , ),
DropdownListBG = .(, , ),
DropdownListStroke = .(, , )
},
[] = {
MainBG = .(, , ),
SidebarBG = .(, , ),
TopbarBG = .(, , ),
ElementBG = .(, , ),
Accent = .(, , ),
TextMain = .(, , ),
TextSub = .(, , ),
Border = .(, , ),
DropdownListBG = .(, , ),
DropdownListStroke = .(, , )
},
[] = {
MainBG = .(, , ),
SidebarBG = .(, , ),
TopbarBG = .(, , ),
ElementBG = .(, , ),
Accent = .(, , ),
TextMain = .(, , ),
TextSub = .(, , ),
Border = .(, , ),
DropdownListBG = .(, , ),
DropdownListStroke = .(, , )
}
}
Theme = {}
k, v (Themes[]) Theme[k] = v
AkenaLib = {}
AkenaLib.Flags = {}
AkenaLib.ThemeConnections = {}
AkenaLib.RainbowAccent =
AkenaLib.RainbowSpeed =
AkenaLib.ShowNotifications =
AkenaLib.ShowTooltips =
SetupDirectories = ()
delfolder makefolder isfolder
()
(delfolder, )
()
isfile ()
(delfolder, )
(makefolder, )
writefile
(writefile, , )
(makefolder, )
writefile
(writefile, , )
()
createInstance = (className, properties)
inst = .(className)
k, v (properties {})
inst[k] = v
inst
getStringValue = (val)
(val) ==
val.Type ==
.(, .(val.R * ), .(val.G * ), .(val.B * ))
val.Type ==
(val.Name)
_, v (val)
(v) == (v) ==
(v)
val ~= (val)
regTheme = (instance, callback)
.(AkenaLib.ThemeConnections, ()
success, hasParent = (() instance instance.Parent )
success hasParent
()
)
()
UpdateThemeAccent = (newColor)
Theme.Accent = newColor
alive = {}
i = , #AkenaLib.ThemeConnections
func = AkenaLib.ThemeConnections[i]
(func) ==
s, res = (func)
s res ~=
.(alive, func)
AkenaLib.ThemeConnections = alive
ApplySelectedTheme = (themeName)
targetTheme = Themes[themeName]
targetTheme
k, v (targetTheme)
Theme[k] = v
alive = {}
i = , #AkenaLib.ThemeConnections
func = AkenaLib.ThemeConnections[i]
(func) ==
s, res = (func)
s res ~=
.(alive, func)
AkenaLib.ThemeConnections = alive
RunService.RenderStepped:(()
AkenaLib.RainbowAccent
hue = () * (AkenaLib.RainbowSpeed / ) %
(.(hue, , ))
)
GetDarkerColor = (color, factor)
h, s, v = .(color)
.(h, s, .(v * factor, , ))
SerializeValue = (val)
(val) ==
{Type = , R = val.R, G = val.G, B = val.B}
(val) ==
{Type = , EnumType = (val.EnumType), Name = val.Name}
(val) ==
tbl = {}
k, v (val)
tbl[k] = (v)
tbl
val
DeserializeValue = (val)
(val) ==
val.Type ==
.(val.R, val.G, val.B)
val.Type ==
success, enum = (() [val.EnumType][val.Name] )
success enum
tbl = {}
k, v (val)
tbl[k] = (v)
tbl
val
AkenaLib.Notify = (self, options)
AkenaLib.ShowNotifications
Title = options.Title
Content = options.Content
Duration = options.Duration
ScreenGui = uiParent:()
ScreenGui
NotifContainer = ScreenGui:()
NotifContainer
Wrapper = (, {
Parent = NotifContainer,
BackgroundTransparency = ,
Size = .(, , , ),
ClipsDescendants = ,
ZIndex =
})
NotifCard = (, {
Parent = Wrapper,
BackgroundColor3 = Theme.MainBG,
BackgroundTransparency = ,
Size = .(, , , ),
Position = .(, , , ),
GroupTransparency = ,
ZIndex =
})
(, {Parent = NotifCard, CornerRadius = .(, )})
(NotifCard, () NotifCard.BackgroundColor3 = Theme.MainBG )
TitleLbl = (, {
Parent = NotifCard,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, , , ),
Font = .Font.GothamBold,
Text = Title,
TextColor3 = Theme.Accent,
TextSize = ,
TextXAlignment = .TextXAlignment.Center,
ZIndex =
})
(TitleLbl, () TitleLbl.TextColor3 = Theme.Accent )
InfoLbl = (, {
Parent = NotifCard,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, -, , ),
Font = .Font.Gotham,
Text = Content,
TextColor3 = Theme.TextSub,
TextSize = ,
TextXAlignment = .TextXAlignment.Center,
TextWrapped = ,
ZIndex =
})
(InfoLbl, () InfoLbl.TextColor3 = Theme.TextSub )
LineFrame = (, {
Parent = NotifCard,
BackgroundColor3 = Theme.Accent,
BorderSizePixel = ,
AnchorPoint = .(, ),
Position = .(, , , ),
Size = .(, , , ),
ZIndex =
})
(, {Parent = LineFrame, CornerRadius = .(, )})
(LineFrame, () LineFrame.BackgroundColor3 = Theme.Accent )
TweenService:(Wrapper, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Size = .(, , , )}):()
TweenService:(NotifCard, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {
Position = .(, , , ),
GroupTransparency =
}):()
TweenService:(LineFrame, TweenInfo.(Duration, .EasingStyle.Linear), {Size = .(, , , )}):()
.(Duration, ()
outTween = TweenService:(NotifCard, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.In), {
Position = .(, , , ),
GroupTransparency =
})
outTween:()
outTween.Completed:()
TweenService:(Wrapper, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.In), {Size = .(, , , )}):()
.(, () Wrapper:() )
)
AkenaLib.CreateWindow = (self, options)
WindowTitle = options.Title
TitlePrefix = options.Prefix
defaultTheme = options.Theme
ScreenGui = (, {
Name = ,
ResetOnSpawn = ,
ZIndexBehavior = .ZIndexBehavior.Sibling,
Parent = uiParent
})
uiParent:() uiParent:() ~= ScreenGui
uiParent:():()
isMobile = UserInputService.TouchEnabled UserInputService.KeyboardEnabled
MainGroup = (, {
Name = ,
Parent = ScreenGui,
BackgroundColor3 = Theme.MainBG,
AnchorPoint = .(, ),
Position = .(, , , ),
Size = .(, , , ),
BorderSizePixel =
})
(MainGroup, () MainGroup.BackgroundColor3 = Theme.MainBG )
CurrentScale =
MainScale = (, {Parent = MainGroup, Scale = CurrentScale})
ScalesToUpdate = {MainScale}
WindowObj = { Tabs = {}, CurrentTab = , ElementsList = {} }
MenuVisible =
UpdateScale = (newScale)
CurrentScale = newScale
MenuVisible
i = , #ScalesToUpdate
scaleObj = ScalesToUpdate[i]
TweenService:(scaleObj, TweenInfo.(, .EasingStyle.Quad), {Scale = CurrentScale}):()
WindowObj.UpdateScale = (self, newScale)
scale = (self) == self newScale
(scale)
(, {Parent = MainGroup, CornerRadius = .(, )})
MainStrokeFrame = (, {
Name = ,
Parent = MainGroup,
BackgroundTransparency = ,
Size = .(, , , )
})
(, {Parent = MainStrokeFrame, CornerRadius = .(, )})
MainStroke = (, {Parent = MainStrokeFrame, Color = Theme.Border})
(MainStroke, () MainStroke.Color = Theme.Border )
NotifyContainer = (, {
Name = ,
Parent = ScreenGui,
BackgroundTransparency = ,
AnchorPoint = .(, ),
Position = .(, -, , -),
Size = .(, , , ),
ZIndex =
})
(, {
Parent = NotifyContainer,
SortOrder = .SortOrder.LayoutOrder,
VerticalAlignment = .VerticalAlignment.Bottom,
HorizontalAlignment = .HorizontalAlignment.Right,
Padding = .(, )
})
TooltipCard = (, {
Name = ,
Parent = ScreenGui,
BackgroundColor3 = Theme.MainBG,
BackgroundTransparency = ,
Size = .(, , , ),
Position = .(, , , ),
BorderSizePixel = ,
Visible = ,
GroupTransparency = ,
ZIndex =
})
(TooltipCard, () TooltipCard.BackgroundColor3 = Theme.MainBG )
(, {Parent = TooltipCard, CornerRadius = .(, )})
(, {Parent = TooltipCard, PaddingLeft = .(, ), PaddingRight = .(, )})
TooltipLine = (, {
Parent = TooltipCard,
BackgroundColor3 = Theme.Accent,
BorderSizePixel = ,
Position = .(, -, , ),
Size = .(, , , ),
ZIndex =
})
(TooltipLine, () TooltipLine.BackgroundColor3 = Theme.Accent )
TooltipText = (, {
Parent = TooltipCard,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, , , ),
Font = .Font.GothamMedium,
Text = ,
TextColor3 = Theme.TextMain,
TextSize = ,
TextXAlignment = .TextXAlignment.Left,
AutomaticSize = .AutomaticSize.X,
ZIndex =
})
(TooltipText, () TooltipText.TextColor3 = Theme.TextMain )
tooltipActive =
activeHoveredElement =
tooltipCurrentOffset =
targetTooltipOffset =
ShowTooltip = (text, targetY)
AkenaLib.ShowTooltips
text text ==
TooltipText.Text = text
TooltipCard.AutomaticSize = .AutomaticSize.X
TooltipCard.Visible =
tooltipActive =
targetTooltipOffset =
TweenService:(TooltipCard, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {
GroupTransparency =
}):()
HideTooltip = ()
tooltipActive =
targetTooltipOffset =
TweenService:(TooltipCard, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.In), {
GroupTransparency =
}):()
.(, ()
tooltipActive
TooltipCard.Visible =
)
RunService.RenderStepped:((dt)
TooltipCard.Visible activeHoveredElement
tooltipCurrentOffset = tooltipCurrentOffset + (targetTooltipOffset - tooltipCurrentOffset) * .(dt * , , )
targetY = activeHoveredElement.AbsolutePosition.Y + (activeHoveredElement.AbsoluteSize.Y / ) - (TooltipCard.AbsoluteSize.Y / )
mainX = MainGroup.AbsolutePosition.X + MainGroup.AbsoluteSize.X + + tooltipCurrentOffset
TooltipCard.Position = .(, mainX, , targetY)
)
SetupTooltip = (elementFrame, tipText)
tipText tipText ==
elementFrame.MouseEnter:(()
activeHoveredElement = elementFrame
(tipText, elementFrame.AbsolutePosition.Y)
)
elementFrame.MouseLeave:(()
activeHoveredElement == elementFrame
activeHoveredElement =
()
)
MenuKeybind = .KeyCode.RightControl
ToggleMenuVisible = (state)
state ~= MenuVisible = state MenuVisible = MenuVisible
MainGroup.Interactable = MenuVisible
MenuVisible
MainGroup.Visible =
TweenService:(MainGroup, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {GroupTransparency = }):()
TweenService:(MainStroke, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Transparency = }):()
i = , #ScalesToUpdate
scaleObj = ScalesToUpdate[i]
TweenService:(scaleObj, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Scale = CurrentScale}):()
TweenService:(MainGroup, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {GroupTransparency = }):()
TweenService:(MainStroke, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Transparency = }):()
i = , #ScalesToUpdate
scaleObj = ScalesToUpdate[i]
TweenService:(scaleObj, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Scale = CurrentScale * }):()
.(, () MenuVisible MainGroup.Visible = )
UserInputService.InputBegan:((input, gpe)
gpe input.KeyCode == MenuKeybind ()
)
isMobile
ToggleBtn = (, {
Parent = ScreenGui,
BackgroundColor3 = Theme.MainBG,
AnchorPoint = .(, ),
Position = .(, , , ),
Size = .(, , , ),
AutoButtonColor = ,
Image =
})
(, {Parent = ToggleBtn, CornerRadius = .(, )})
btnStroke = (, {Parent = ToggleBtn, Color = Theme.Border, ApplyStrokeMode = .ApplyStrokeMode.Border})
(ToggleBtn, ()
ToggleBtn.BackgroundColor3 = Theme.MainBG
btnStroke.Color = Theme.Border
)
TogTextFrame = (, {
Parent = ToggleBtn,
BackgroundTransparency = ,
Size = .(, , , )
})
TogText = (, {
Parent = TogTextFrame,
BackgroundTransparency = ,
Size = .(, , , ),
RichText = ,
Font = .Font.GothamBold,
TextColor3 = .(, , ),
TextSize = ,
Text =
})
(TogText, () TogText.TextColor3 = Theme.TextMain )
draggingTog, dragInputTog, dragStartTog, startPosTog
ToggleBtn.InputBegan:((input)
input.UserInputType == .UserInputType.Touch input.UserInputType == .UserInputType.MouseButton1
draggingTog =
dragStartTog = input.Position
startPosTog = ToggleBtn.Position
)
ToggleBtn.InputChanged:((input)
input.UserInputType == .UserInputType.Touch input.UserInputType == .UserInputType.MouseMovement
dragInputTog = input
)
UserInputService.InputChanged:((input)
input == dragInputTog draggingTog
delta = input.Position - dragStartTog
ToggleBtn.Position = .(startPosTog.X.Scale, startPosTog.X.Offset + delta.X, startPosTog.Y.Scale, startPosTog.Y.Offset + delta.Y)
)
UserInputService.InputEnded:((input)
input.UserInputType == .UserInputType.Touch input.UserInputType == .UserInputType.MouseButton1
draggingTog =
)
ToggleBtn.MouseButton1Click:(() () )
Topbar = (, {
Name = ,
Parent = MainGroup,
BackgroundColor3 = Theme.TopbarBG,
Size = .(, , , ),
BorderSizePixel = ,
ZIndex =
})
(Topbar, () Topbar.BackgroundColor3 = Theme.TopbarBG )
TopbarBorder = (, {
Parent = Topbar,
BackgroundColor3 = Theme.Border,
BorderSizePixel = ,
Position = .(, , , -),
Size = .(, , , )
})
(TopbarBorder, () TopbarBorder.BackgroundColor3 = Theme.Border )
dragging, dragInput, dragStart, startPos
Topbar.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
dragStart = input.Position
startPos = MainGroup.Position
input.Changed:(()
input.UserInputState == .UserInputState.End dragging =
)
)
Topbar.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
dragInput = input
)
UserInputService.InputChanged:((input)
input == dragInput dragging
delta = input.Position - dragStart
TweenService:(MainGroup, TweenInfo.(, .EasingStyle.Linear), {
Position = .(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
}):()
)
cleanTitle = TitlePrefix .. WindowTitle
titleBounds = TextService:(cleanTitle, , .Font.GothamBold, .(, ))
TitleLabel = (, {
Parent = Topbar,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, titleBounds.X + , , ),
Font = .Font.GothamBold,
Text = .(, TitlePrefix, WindowTitle),
RichText = ,
TextColor3 = Theme.TextMain,
TextSize = ,
TextXAlignment = .TextXAlignment.Left
})
(TitleLabel, () TitleLabel.TextColor3 = Theme.TextMain )
profileText = .. LocalPlayer.Name
profileBounds = TextService:(profileText, , .Font.Gotham, .(, ))
ProfileBox = (, {
Parent = Topbar,
BackgroundColor3 = Theme.MainBG,
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, profileBounds.X + , , )
})
(, {Parent = ProfileBox, CornerRadius = .(, )})
ProfileStroke = (, {Parent = ProfileBox, Color = Theme.Border})
(ProfileBox, ()
ProfileBox.BackgroundColor3 = Theme.MainBG
ProfileStroke.Color = Theme.Border
)
AvatarImg = (, {
Parent = ProfileBox,
BackgroundTransparency = ,
Position = .(, , , -),
Size = .(, , , )
})
(, {Parent = AvatarImg, CornerRadius = .(, )})
.(()
content, isReady = Players:(LocalPlayer.UserId, .ThumbnailType.HeadShot, .ThumbnailSize.Size48x48)
isReady AvatarImg.Image = content
)
ProfileName = (, {
Parent = ProfileBox,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, -, , ),
Font = .Font.Gotham,
Text = profileText,
TextColor3 = Theme.TextMain,
TextSize = ,
TextXAlignment = .TextXAlignment.Left
})
(ProfileName, () ProfileName.TextColor3 = Theme.TextMain )
SearchOverlay = (, {
Parent = ScreenGui,
BackgroundColor3 = .(, , ),
BackgroundTransparency = ,
Size = .(, , , ),
ZIndex = ,
GroupTransparency = ,
Visible =
})
SearchPanel = (, {
Parent = SearchOverlay,
BackgroundColor3 = Theme.MainBG,
AnchorPoint = .(, ),
Position = .(, , , -),
Size = .(, , , ),
ClipsDescendants =
})
(, {Parent = SearchPanel, CornerRadius = .(, )})
SearchPanelStroke = (, {Parent = SearchPanel, Color = Theme.Border})
(SearchPanel, ()
SearchPanel.BackgroundColor3 = Theme.MainBG
SearchPanelStroke.Color = Theme.Border
)
SearchInputBox = (, {
Parent = SearchPanel,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, -, , ),
Font = .Font.GothamMedium,
PlaceholderText = ,
PlaceholderColor3 = Theme.TextSub,
TextColor3 = Theme.TextMain,
TextSize = ,
TextXAlignment = .TextXAlignment.Left,
ClearTextOnFocus = ,
Text =
})
(SearchInputBox, ()
SearchInputBox.TextColor3 = Theme.TextMain
SearchInputBox.PlaceholderColor3 = Theme.TextSub
)
SearchLine = (, {
Parent = SearchPanel,
BackgroundColor3 = Theme.Border,
BorderSizePixel = ,
Position = .(, , , ),
Size = .(, , , )
})
(SearchLine, () SearchLine.BackgroundColor3 = Theme.Border )
SearchScroll = (, {
Parent = SearchPanel,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, -, , -),
ScrollBarThickness = ,
ScrollBarImageColor3 = Theme.Border,
BorderSizePixel = ,
AutomaticCanvasSize = .AutomaticSize.Y,
CanvasSize = .(, , , )
})
(SearchScroll, () SearchScroll.ScrollBarImageColor3 = Theme.Border )
(, {
Parent = SearchScroll,
SortOrder = .SortOrder.LayoutOrder,
Padding = .(, )
})
SearchBtn = (, {
Parent = Topbar,
BackgroundTransparency = ,
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, , , ),
Image = ,
ImageColor3 = Theme.TextSub
})
(SearchBtn, () SearchBtn.ImageColor3 = Theme.TextSub )
SearchBtn.MouseButton1Click:(()
SearchOverlay.Visible =
SearchInputBox.Text =
TweenService:(SearchOverlay, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {GroupTransparency = }):()
SearchInputBox:()
)
SearchOverlay.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1
pos = input.Position
cx1, cy1 = SearchPanel.AbsolutePosition.X, SearchPanel.AbsolutePosition.Y
cx2, cy2 = cx1 + SearchPanel.AbsoluteSize.X, cy1 + SearchPanel.AbsoluteSize.Y
(pos.X >= cx1 pos.X <= cx2 pos.Y >= cy1 pos.Y <= cy2)
TweenService:(SearchOverlay, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {GroupTransparency = }):()
.(, () SearchOverlay.Visible = )
)
PopulateSearch = (query)
cList = SearchScroll:()
i = , #cList
v = cList[i]
v:() v:()
query ==
query = query:()
i = , #WindowObj.ElementsList
elementData = WindowObj.ElementsList[i]
.(elementData.Name:(), query)
sBtn = (, {
Parent = SearchScroll,
BackgroundColor3 = Theme.ElementBG,
Size = .(, , , ),
Text = ,
AutoButtonColor =
})
(, {Parent = sBtn, CornerRadius = .(, )})
sText = (, {
Parent = sBtn,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, -, , ),
Font = .Font.GothamMedium,
Text = elementData.Name .. .. elementData.Tab.Name .. ,
RichText = ,
TextColor3 = Theme.TextMain,
TextSize = ,
TextXAlignment = .TextXAlignment.Left
})
(sBtn, () sBtn.BackgroundColor3 = Theme.ElementBG )
(sText, () sText.TextColor3 = Theme.TextMain )
sBtn.MouseEnter:(()
TweenService:(sBtn, TweenInfo.(), {BackgroundColor3 = (Theme.ElementBG, )}):()
)
sBtn.MouseLeave:(()
TweenService:(sBtn, TweenInfo.(), {BackgroundColor3 = Theme.ElementBG}):()
)
sBtn.MouseButton1Click:(()
TweenService:(SearchOverlay, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {GroupTransparency = }):()
.(, () SearchOverlay.Visible = )
elementData.Tab.()
.()
targetY = elementData.Frame.AbsolutePosition.Y - elementData.Tab.Page.AbsolutePosition.Y + elementData.Tab.Page.CanvasPosition.Y - (elementData.Tab.Page.AbsoluteWindowSize.Y / ) + (elementData.Frame.AbsoluteSize.Y / )
TweenService:(elementData.Tab.Page, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {
CanvasPosition = .(, .(, targetY))
}):()
origColor = elementData.Frame.BackgroundColor3
TweenService:(elementData.Frame, TweenInfo.(), {BackgroundColor3 = Theme.Accent}):()
.(, ()
elementData.Frame
TweenService:(elementData.Frame, TweenInfo.(), {BackgroundColor3 = origColor}):()
)
)
SearchInputBox:():(()
(SearchInputBox.Text)
)
startX = TitleLabel.Position.X.Offset + titleBounds.X +
endX = - - (profileBounds.X + ) - -
subTabsWidth = endX - startX
SubTabs = (, {
Parent = Topbar,
BackgroundTransparency = ,
Position = .(, startX, , ),
Size = .(, subTabsWidth, , )
})
(, {
Parent = SubTabs,
FillDirection = .FillDirection.Horizontal,
SortOrder = .SortOrder.LayoutOrder,
Padding = .(, ),
VerticalAlignment = .VerticalAlignment.Center
})
subTabItems = {, , }
activeSubTab =
MasterContainers = {}
BodyContainer = (, {
Name = ,
Parent = MainGroup,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, , , -),
ClipsDescendants =
})
CreateTopSubTab = (text)
SubContainer = (, {
Name = text .. ,
Parent = BodyContainer,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, , , ),
Visible = (text == activeSubTab),
GroupTransparency = (text == activeSubTab)
})
MasterContainers[text] = SubContainer
tabBtn = (, {
Name = text .. ,
Parent = SubTabs,
BackgroundTransparency = ,
AutoButtonColor = ,
Image =
})
labelBounds = TextService:(text, , .Font.GothamMedium, .(, ))
tabBtn.Size = .(, labelBounds.X + , , )
tabLabel = (, {
Parent = tabBtn,
BackgroundTransparency = ,
Size = .(, , , ),
Font = .Font.GothamMedium,
Text = text,
TextSize = ,
TextColor3 = (text == activeSubTab) Theme.TextMain Theme.TextSub
})
(tabLabel, ()
activeSubTab == text tabLabel.TextColor3 = Theme.TextMain
)
underline = (, {
Parent = tabBtn,
BackgroundColor3 = Theme.Accent,
BorderSizePixel = ,
AnchorPoint = .(, ),
Position = .(, , , -),
Size = (text == activeSubTab) .(, , , ) .(, , , ),
BackgroundTransparency = (text == activeSubTab)
})
(underline, () underline.BackgroundColor3 = Theme.Accent )
tabBtn.MouseEnter:(()
activeSubTab ~= text
TweenService:(tabLabel, TweenInfo.(), {TextColor3 = Theme.TextMain}):()
TweenService:(underline, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Size = .(, , , ), BackgroundTransparency = }):()
)
tabBtn.MouseLeave:(()
activeSubTab ~= text
TweenService:(tabLabel, TweenInfo.(), {TextColor3 = Theme.TextSub}):()
TweenService:(underline, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Size = .(, , , ), BackgroundTransparency = }):()
)
tabBtn.MouseButton1Click:(()
activeSubTab ~= text
prevActive = activeSubTab
activeSubTab = text
prevBtn = SubTabs:(prevActive .. )
prevBtn
TweenService:(prevBtn.TextLabel, TweenInfo.(), {TextColor3 = Theme.TextSub}):()
TweenService:(prevBtn.Frame, TweenInfo.(), {Size = .(, , , ), BackgroundTransparency = }):()
TweenService:(tabLabel, TweenInfo.(), {TextColor3 = Theme.TextMain}):()
TweenService:(underline, TweenInfo.(), {Size = .(, , , ), BackgroundTransparency = }):()
prevContainer = MasterContainers[prevActive]
prevContainer
TweenService:(prevContainer, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.In), {Position = .(, , , -), GroupTransparency = }):()
.(, () activeSubTab ~= prevActive prevContainer.Visible = )
newContainer = MasterContainers[text]
newContainer
newContainer.Visible =
newContainer.Position = .(, , , )
newContainer.GroupTransparency =
TweenService:(newContainer, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Position = .(, , , ), GroupTransparency = }):()
)
i = , #subTabItems (subTabItems[i])
CreateElementBuilder = (PageTarget, ParentTab)
Builder = {}
Builder.CreateDivider = (self)
DivContainer = (, {
Parent = PageTarget,
BackgroundTransparency = ,
Size = .(, , , )
})
Line = (, {
Parent = DivContainer,
BackgroundColor3 = Theme.Border,
BorderSizePixel = ,
AnchorPoint = .(, ),
Position = .(, , , ),
Size = .(, -, , )
})
(, {Parent = Line, CornerRadius = .(, )})
(Line, ()
Line Line.BackgroundColor3 = Theme.Border
)
Builder.CreateButton = (self, options)
BtnName = options.Name
Callback = options.Callback ()
BtnFrame = (, {
Parent = PageTarget,
BackgroundColor3 = Theme.ElementBG,
Size = .(, , , ),
AutoButtonColor = ,
Image =
})
(, {Parent = BtnFrame, CornerRadius = .(, )})
(BtnFrame, () BtnFrame.BackgroundColor3 = Theme.ElementBG )
TextLabel = (, {
Parent = BtnFrame,
BackgroundTransparency = ,
Size = .(, , , ),
Font = .Font.GothamMedium,
Text = BtnName,
TextColor3 = Theme.TextSub,
TextSize =
})
(TextLabel, () TextLabel.TextColor3 = Theme.TextSub )
(BtnFrame, options.Tip)
.(WindowObj.ElementsList, {Name = BtnName, Frame = BtnFrame, Tab = ParentTab})
BtnFrame.MouseEnter:(()
TweenService:(BtnFrame, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {BackgroundColor3 = (Theme.ElementBG, )}):()
TweenService:(TextLabel, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {TextColor3 = Theme.TextMain}):()
)
BtnFrame.MouseLeave:(()
TweenService:(BtnFrame, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {BackgroundColor3 = Theme.ElementBG}):()
TweenService:(TextLabel, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {TextColor3 = Theme.TextSub}):()
)
BtnFrame.MouseButton1Down:(()
TweenService:(BtnFrame, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {BackgroundColor3 = Theme.Accent}):()
TweenService:(TextLabel, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {TextColor3 = .(, , )}):()
)
BtnFrame.MouseButton1Click:(()
TweenService:(BtnFrame, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {BackgroundColor3 = (Theme.ElementBG, )}):()
()
)
Builder.CreateTextbox = (self, options)
ElementName = options.Name
Default = options.Default
UseLetter = options.UseLetter
UseNumber = options.UseNumber
Callback = options.Callback ()
Element = { Value = Default }
AkenaLib.Flags[ElementName] = Element
Container = (, {
Parent = PageTarget,
BackgroundColor3 = Theme.ElementBG,
Size = .(, , , )
})
(, {Parent = Container, CornerRadius = .(, )})
(Container, () Container.BackgroundColor3 = Theme.ElementBG )
.(WindowObj.ElementsList, {Name = ElementName, Frame = Container, Tab = ParentTab})
labelBounds = TextService:(ElementName, , .Font.GothamMedium, .(, ))
LabelText = (, {
Parent = Container,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, labelBounds.X + , , ),
Font = .Font.GothamMedium,
Text = ElementName,
TextColor3 = Theme.TextSub,
TextSize = ,
TextXAlignment = .TextXAlignment.Left
})
(LabelText, () LabelText.TextColor3 = Theme.TextSub )
ValBox = (, {
Parent = Container,
BackgroundColor3 = .(, , ),
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, , , )
})
(, {Parent = ValBox, CornerRadius = .(, )})
(ValBox, () ValBox.BackgroundColor3 = Theme.MainBG )
ValBoxStroke = (, {Parent = ValBox, Color = Theme.Border})
(ValBoxStroke, () ValBoxStroke.Color = Theme.Border )
TextBox = (, {
Parent = ValBox,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, -, , ),
Font = .Font.Gotham,
Text = Default,
PlaceholderText = ,
PlaceholderColor3 = .(, , ),
TextColor3 = Theme.TextMain,
TextSize = ,
TextXAlignment = .TextXAlignment.Right,
ClearTextOnFocus =
})
(TextBox, () TextBox.TextColor3 = Theme.TextMain )
(Container, options.Tip)
TextBox:():(()
original = TextBox.Text
cleaned = original
UseLetter UseNumber
cleaned = original:(, )
UseNumber UseLetter
cleaned = original:(, )
UseLetter UseNumber
cleaned = original:(, )
original ~= cleaned TextBox.Text = cleaned
)
TextBox.FocusLost:(()
Element.Value = TextBox.Text
AkenaLib.Flags[ElementName].Value = Element.Value
(Element.Value)
)
Element:(val)
TextBox.Text = val
Element.Value = val
AkenaLib.Flags[ElementName].Value = val
(val)
Element
Builder.CreateSlider = (self, options)
ElementName = options.Name
Min = options.Min
Max = options.Max
Default = options.Default
Increment = options.Increment
Suffix = options.Suffix
Callback = options.Callback ()
Element = { Value = Default }
AkenaLib.Flags[ElementName] = Element
Container = (, {
Parent = PageTarget,
BackgroundColor3 = Theme.ElementBG,
Size = .(, , , )
})
(, {Parent = Container, CornerRadius = .(, )})
(Container, () Container.BackgroundColor3 = Theme.ElementBG )
.(WindowObj.ElementsList, {Name = ElementName, Frame = Container, Tab = ParentTab})
labelBounds = TextService:(ElementName, , .Font.GothamMedium, .(, ))
LabelText = (, {
Parent = Container,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, labelBounds.X + , , ),
Font = .Font.GothamMedium,
Text = ElementName,
TextColor3 = Theme.TextSub,
TextSize = ,
TextXAlignment = .TextXAlignment.Left
})
(LabelText, () LabelText.TextColor3 = Theme.TextSub )
ValBox = (, {
Parent = Container,
BackgroundColor3 = .(, , ),
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, , , )
})
(, {Parent = ValBox, CornerRadius = .(, )})
(ValBox, () ValBox.BackgroundColor3 = Theme.MainBG )
ValBoxStroke = (, {Parent = ValBox, Color = Theme.Border})
(ValBoxStroke, () ValBoxStroke.Color = Theme.Border )
ValTextBox = (, {
Parent = ValBox,
BackgroundTransparency = ,
Size = .(, , , ),
Font = .Font.Gotham,
Text = (Default) .. Suffix,
TextColor3 = Theme.TextSub,
TextSize = ,
ClearTextOnFocus =
})
(ValTextBox, () ValTextBox.TextColor3 = Theme.TextSub )
sliderStartOffset = + labelBounds.X +
sliderEndPadding = + +
TrackBox = (, {
Parent = Container,
BackgroundColor3 = .(, , ),
AnchorPoint = .(, ),
Position = .(, sliderStartOffset, , ),
Size = .(, -(sliderStartOffset + sliderEndPadding), , ),
AutoButtonColor = ,
Image =
})
(, {Parent = TrackBox, CornerRadius = .(, )})
(TrackBox, () TrackBox.BackgroundColor3 = Theme.DropdownListStroke )
FillBox = (, {
Parent = TrackBox,
BackgroundColor3 = Theme.Accent,
Size = .((Default - Min) / (Max - Min), , , )
})
(, {Parent = FillBox, CornerRadius = .(, )})
(FillBox, () FillBox.BackgroundColor3 = Theme.Accent )
(Container, options.Tip)
SetValue = (val)
val = .(val, Min, Max)
val = .((val / Increment) + ) * Increment
percent = (val - Min) / (Max - Min)
TweenService:(FillBox, TweenInfo.(, .EasingStyle.Quad), {Size = .(percent, , , )}):()
ValTextBox.Text = (val) .. Suffix
Element.Value = val
AkenaLib.Flags[ElementName].Value = val
(val)
UpdateSlider = (input)
percent = .((input.Position.X - TrackBox.AbsolutePosition.X) / TrackBox.AbsoluteSize.X, , )
value = Min + ((Max - Min) * percent)
(value)
dragging =
TrackBox.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
(input)
)
UserInputService.InputEnded:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch dragging =
)
UserInputService.InputChanged:((input)
dragging (input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch) (input)
)
ValTextBox.FocusLost:(()
numStr = .(ValTextBox.Text, )
num = (numStr) Default
(num)
)
Element:(val) (val)
Element
Builder.CreateToggle = (self, options)
ElementName = options.Name
Default = options.Default
Keybind = options.Keybind
Callback = options.Callback ()
state = Default
currentBind = Keybind
Element = { Value = Default }
AkenaLib.Flags[ElementName] = Element
TogFrame = (, {
Parent = PageTarget,
BackgroundColor3 = Theme.ElementBG,
Size = .(, , , ),
AutoButtonColor = ,
Image =
})
(, {Parent = TogFrame, CornerRadius = .(, )})
(TogFrame, () TogFrame.BackgroundColor3 = Theme.ElementBG )
.(WindowObj.ElementsList, {Name = ElementName, Frame = TogFrame, Tab = ParentTab})
TitleLabel = (, {
Parent = TogFrame,
BackgroundTransparency = ,
Position = .(, , , ),
Size = .(, -, , ),
Font = .Font.GothamMedium,
Text = ElementName,
TextColor3 = Theme.TextSub,
TextSize = ,
TextXAlignment = .TextXAlignment.Left
})
(TitleLabel, ()
TitleLabel.TextColor3 = state Theme.TextMain Theme.TextSub
)
Switch = (, {
Parent = TogFrame,
BackgroundColor3 = .(, , ),
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, , , )
})
(, {Parent = Switch, CornerRadius = .(, )})
Knob = (, {
Parent = Switch,
BackgroundColor3 = state (Theme.Accent, ) .(, , ),
AnchorPoint = .(, ),
Position = state .(, -, , ) .(, -, , ),
Size = .(, , , )
})
(, {Parent = Knob, CornerRadius = .(, )})
(Switch, ()
state
Switch.BackgroundColor3 = (Theme.Accent, )
Knob.BackgroundColor3 = Theme.Accent
Switch.BackgroundColor3 = Theme.MainBG
Knob.BackgroundColor3 = .(, , )
)
(TogFrame, options.Tip)
FireToggle = (skipAnim)
speed = skipAnim
TweenService:(Switch, TweenInfo.(speed), {BackgroundColor3 = state (Theme.Accent, ) Theme.MainBG}):()
TweenService:(Knob, TweenInfo.(speed), {Position = state .(, -, , ) .(, -, , ), BackgroundColor3 = state Theme.Accent .(, , )}):()
TweenService:(TitleLabel, TweenInfo.(speed), {TextColor3 = state Theme.TextMain Theme.TextSub}):()
Element.Value = state
AkenaLib.Flags[ElementName].Value = state
()
TogFrame.MouseButton1Click:(()
state = state
(state)
()
)
Keybind
BindContainer = (, {
Parent = TogFrame,
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, , , ),
BackgroundColor3 = .(, , )
})
(, {Parent = BindContainer, CornerRadius = .(, )})
(BindContainer, () BindContainer.BackgroundColor3 = Theme.MainBG )
BindContainerStroke = (, {Parent = BindContainer, Color = Theme.Border})
(BindContainerStroke, () BindContainerStroke.Color = Theme.Border )
BindBtn = (, {
Parent = BindContainer,
BackgroundTransparency = ,
Size = .(, , , ),
Text = currentBind currentBind.Name ,
Font = .Font.Gotham,
TextColor3 = Theme.TextSub,
TextSize =
})
UpdateBindSize = ()
bindName = currentBind currentBind.Name
BindBtn.Text = bindName
textBounds = TextService:(bindName, , .Font.Gotham, .(, ))
BindContainer.Size = .(, .(textBounds.X + , ), , )
()
isBinding =
BindBtn.MouseButton1Click:(()
isBinding = true
BindBtn.Text = '...'
BindContainer.Size = UDim2.new(0, 40, 0, 22)
end)
UserInputService.InputBegan:Connect(function(input, gpe)
if isBinding and (input.UserInputType == Enum.UserInputType.Keyboard or input.UserInputType == Enum.UserInputType.Gamepad1) then
currentBind = input.KeyCode
isBinding = false
UpdateBindSize()
Callback(state)
elseif not gpe and currentBind and input.KeyCode == currentBind then
state = not state
Callback(state)
FireToggle(false)
end
end)
end
function Element:Set(val)
state = val
Callback(state)
FireToggle(true)
end
return Element
end
Builder.CreateDropdown = function(self, options)
local ElementName = options.Name or 'Dropdown'
local DropOptions = options.Options or {}
local Default = options.Default
local MultiSelect = options.MultiSelect or false
local Callback = options.Callback or function() end
local currentSelection
if MultiSelect then
currentSelection = {}
if type(Default) == 'table' then
for i = 1, #Default do
table.insert(currentSelection, getStringValue(Default[i]))
end
elseif type(Default) == 'string' and Default ~= '' then
table.insert(currentSelection, Default)
end
else
if Default ~= nil then
currentSelection = type(Default) == 'table' and tostring(Default or '') or tostring(Default)
else
currentSelection = type(DropOptions) == 'table' and tostring(DropOptions or '') or ''
end
if type(currentSelection) == 'table' then currentSelection = 'None' end
end
local Element = { Value = currentSelection }
AkenaLib.Flags[ElementName] = Element
local Container = createInstance('ImageButton', {
Parent = PageTarget,
BackgroundColor3 = Theme.ElementBG,
Size = UDim2.new(1, 0, 0, 36),
AutoButtonColor = false,
Image = ''
})
createInstance('UICorner', {Parent = Container, CornerRadius = UDim.new(0, 4)})
regTheme(Container, function() Container.BackgroundColor3 = Theme.ElementBG end)
table.insert(WindowObj.ElementsList, {Name = ElementName, Frame = Container, Tab = ParentTab})
local TitleLabel = createInstance('TextLabel', {
Parent = Container,
BackgroundTransparency = 1,
Position = UDim2.new(0, 12, 0, 0),
Size = UDim2.new(1, -120, 1, 0),
Font = Enum.Font.GothamMedium,
Text = ElementName,
TextColor3 = Theme.TextSub,
TextSize = 13,
TextXAlignment = Enum.TextXAlignment.Left
})
regTheme(TitleLabel, function() TitleLabel.TextColor3 = Theme.TextSub end)
local SelectedBox = createInstance('Frame', {
Parent = Container,
BackgroundColor3 = Color3.fromRGB(22, 22, 22),
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -6, 0.5, 0),
Size = UDim2.new(0, 100, 0, 24)
})
createInstance('UICorner', {Parent = SelectedBox, CornerRadius = UDim.new(0, 4)})
regTheme(SelectedBox, function() SelectedBox.BackgroundColor3 = Theme.MainBG end)
local SelectedBoxStroke = createInstance('UIStroke', {Parent = SelectedBox, Color = Theme.Border})
regTheme(SelectedBoxStroke, function() SelectedBoxStroke.Color = Theme.Border end)
local SelectedLabel = createInstance('TextLabel', {
Parent = SelectedBox,
BackgroundTransparency = 1,
Size = UDim2.new(1, -20, 1, 0),
Position = UDim2.new(0, 8, 0, 0),
Font = Enum.Font.Gotham,
TextColor3 = Theme.TextMain,
TextSize = 11,
TextXAlignment = Enum.TextXAlignment.Left,
TextTruncate = Enum.TextTruncate.AtEnd
})
regTheme(SelectedLabel, function() SelectedLabel.TextColor3 = Theme.TextMain end)
local UpdateLabel = function()
if MultiSelect then
SelectedLabel.Text = #currentSelection > 0 and table.concat(currentSelection, ', ') or 'None'
else
SelectedLabel.Text = (currentSelection == '' or currentSelection == nil) and 'None' or tostring(currentSelection)
end
end
UpdateLabel()
local Icon = createInstance('TextLabel', {
Parent = SelectedBox,
BackgroundTransparency = 1,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -5, 0.5, 0),
Size = UDim2.new(0, 16, 0, 16),
Font = Enum.Font.Gotham,
Text = '+',
TextColor3 = Theme.TextSub,
TextSize = 16
})
regTheme(Icon, function() Icon.TextColor3 = Theme.TextSub end)
local ListCanvas = createInstance('CanvasGroup', {
Parent = ScreenGui,
BackgroundTransparency = 1,
ZIndex = 100,
Size = UDim2.new(0, 0, 0, 0),
GroupTransparency = 1,
Visible = false
})
local LCScale = createInstance('UIScale', {Parent = ListCanvas, Scale = CurrentScale})
table.insert(ScalesToUpdate, LCScale)
createInstance('UICorner', {Parent = ListCanvas, CornerRadius = UDim.new(0, 4)})
local ListFrame = createInstance('ScrollingFrame', {
Parent = ListCanvas,
BackgroundColor3 = Theme.DropdownListBG,
Size = UDim2.new(1, 0, 1, 0),
ZIndex = 100,
ScrollBarThickness = 2,
BorderSizePixel = 0,
AutomaticCanvasSize = Enum.AutomaticSize.Y
})
local ListFrameStroke = createInstance('UIStroke', {Parent = ListFrame, Color = Theme.DropdownListStroke})
regTheme(ListFrame, function()
ListFrame.BackgroundColor3 = Theme.DropdownListBG
ListFrameStroke.Color = Theme.DropdownListStroke
end)
local CanvasLayout = createInstance('Frame', {
Parent = ListFrame,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 0),
AutomaticSize = Enum.AutomaticSize.Y
})
createInstance('UIListLayout', {Parent = CanvasLayout, SortOrder = Enum.SortOrder.LayoutOrder})
SetupTooltip(Container, options.Tip)
local expanded = false
local OptionsRendered = {}
local RefreshOptions = function()
local cList = CanvasLayout:GetChildren()
for i = 1, #cList do
local v = cList[i]
if v:IsA('TextButton') then v:Destroy() end
end
table.clear(OptionsRendered)
for i = 1, #DropOptions do
local strOpt = tostring(DropOptions[i])
local Option = createInstance('TextButton', {
Parent = CanvasLayout,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 26),
Text = '',
ZIndex = 101
})
local isSel = false
if MultiSelect then
isSel = table.find(currentSelection, strOpt) ~= nil
else
isSel = currentSelection == strOpt
end
local OptCheck = createInstance('ImageLabel', {
Parent = Option,
BackgroundTransparency = 1,
Position = isSel and UDim2.new(0, 8, 0.5, -7) or UDim2.new(0, 0, 0.5, -7),
Size = UDim2.new(0, 14, 0, 14),
Image = 'rbxassetid://6031094667',
ImageColor3 = Theme.TextMain,
ImageTransparency = isSel and 0 or 1,
ZIndex = 101
})
regTheme(OptCheck, function() OptCheck.ImageColor3 = Theme.TextMain end)
local OptText = createInstance('TextLabel', {
Parent = Option,
BackgroundTransparency = 1,
Size = UDim2.new(1, -30, 1, 0),
Position = UDim2.new(0, 28, 0, 0),
Font = Enum.Font.GothamMedium,
Text = strOpt,
TextColor3 = isSel and Theme.TextMain or Theme.TextSub,
TextSize = 13,
TextXAlignment = Enum.TextXAlignment.Left,
ZIndex = 101
})
table.insert(OptionsRendered, {
Value = strOpt,
Text = OptText,
Check = OptCheck,
Button = Option
})
Option.MouseEnter:Connect(function()
TweenService:Create(OptText, TweenInfo.new(0.2), {TextColor3 = Theme.TextMain}):Play()
end)
Option.MouseLeave:Connect(function()
local active = false
if MultiSelect then active = table.find(currentSelection, strOpt) ~= nil else active = currentSelection == strOpt end
TweenService:Create(OptText, TweenInfo.new(0.2), {TextColor3 = active and Theme.TextMain or Theme.TextSub}):Play()
end)
Option.MouseButton1Click:Connect(function()
if MultiSelect then
local idx = table.find(currentSelection, strOpt)
if idx then
table.remove(currentSelection, idx)
OptText.TextColor3 = Theme.TextSub
TweenService:Create(OptCheck, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(0, 0, 0.5, -7), ImageTransparency = 1}):Play()
else
table.insert(currentSelection, strOpt)
OptText.TextColor3 = Theme.TextMain
TweenService:Create(OptCheck, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(0, 8, 0.5, -7), ImageTransparency = 0}):Play()
end
else
currentSelection = strOpt
expanded = false
TweenService:Create(Icon, TweenInfo.new(0.3), {Rotation = 0}):Play()
TweenService:Create(ListCanvas, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0, SelectedBox.AbsoluteSize.X, 0, 0), GroupTransparency = 1}):Play()
task.delay(0.3, function() if not expanded then ListCanvas.Visible = false end end)
for k = 1, #OptionsRendered do
local renderData = OptionsRendered[k]
if renderData.Value == strOpt then
renderData.Text.TextColor3 = Theme.TextMain
TweenService:Create(renderData.Check, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(0, 8, 0.5, -7), ImageTransparency = 0}):Play()
else
renderData.Text.TextColor3 = Theme.TextSub
TweenService:Create(renderData.Check, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(0, 0, 0.5, -7), ImageTransparency = 1}):Play()
end
end
end
UpdateLabel()
Element.Value = currentSelection
AkenaLib.Flags[ElementName].Value = currentSelection
Callback(currentSelection)
end)
end
ListFrame.CanvasSize = UDim2.new(0, 0, 0, #DropOptions * 26)
end
RefreshOptions()
Container.MouseButton1Click:Connect(function()
expanded = not expanded
if expanded then
RefreshOptions()
ListCanvas.Position = UDim2.new(0, SelectedBox.AbsolutePosition.X, 0, SelectedBox.AbsolutePosition.Y + (28 * CurrentScale))
local dropHeight = math.min(#DropOptions * 26, 150)
ListCanvas.Size = UDim2.new(0, SelectedBox.AbsoluteSize.X, 0, 0)
ListCanvas.GroupTransparency = 1
ListCanvas.Visible = true
TweenService:Create(ListCanvas, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0, SelectedBox.AbsoluteSize.X, 0, dropHeight), GroupTransparency = 0}):Play()
else
TweenService:Create(ListCanvas, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0, SelectedBox.AbsoluteSize.X, 0, 0), GroupTransparency = 1}):Play()
task.delay(0.3, function() if not expanded then ListCanvas.Visible = false end end)
end
TweenService:Create(Icon, TweenInfo.new(0.3), {Rotation = expanded and 45 or 0}):Play()
end)
UserInputService.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
local pos = input.Position
if expanded and ListCanvas.Visible then
local x1 = ListCanvas.AbsolutePosition.X
local y1 = ListCanvas.AbsolutePosition.Y
local x2 = x1 + ListCanvas.AbsoluteSize.X
local y2 = y1 + ListCanvas.AbsoluteSize.Y
local cx1 = Container.AbsolutePosition.X
local cy1 = Container.AbsolutePosition.Y
local cx2 = cx1 + Container.AbsoluteSize.X
local cy2 = cy1 + Container.AbsoluteSize.Y
if not (pos.X >= x1 and pos.X <= x2 and pos.Y >= y1 and pos.Y <= y2) and not (pos.X >= cx1 and pos.X <= cx2 and pos.Y >= cy1 and pos.Y <= cy2) then
expanded = false
TweenService:Create(ListCanvas, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0, SelectedBox.AbsoluteSize.X, 0, 0), GroupTransparency = 1}):Play()
TweenService:Create(Icon, TweenInfo.new(0.3), {Rotation = 0}):Play()
task.delay(0.3, function() if not expanded then ListCanvas.Visible = false end end)
end
end
end
end)
function Element:Set(val)
if MultiSelect then
currentSelection = type(val) == 'table' and val or {}
else
currentSelection = getStringValue(val)
end
if type(currentSelection) == 'table' then currentSelection = 'None' end
UpdateLabel()
Element.Value = currentSelection
AkenaLib.Flags[ElementName].Value = currentSelection
RefreshOptions()
Callback(currentSelection)
end
function Element:Refresh(newOptions)
DropOptions = type(newOptions) == 'table' and newOptions or {}
if MultiSelect then
local newSel = {}
for i = 1, #currentSelection do
local v = currentSelection[i]
if table.find(DropOptions, v) then table.insert(newSel, v) end
end
currentSelection = newSel
else
if not table.find(DropOptions, currentSelection) then
currentSelection = getStringValue(DropOptions)
end
end
if type(currentSelection) == 'table' then currentSelection = 'None' end
UpdateLabel()
Element.Value = currentSelection
AkenaLib.Flags[ElementName].Value = currentSelection
RefreshOptions()
end
return Element
end
Builder.CreateColorpicker = function(self, options)
local ElementName = options.Name or 'Colorpicker'
local Default = options.Default or Color3.fromRGB(255, 255, 255)
local Callback = options.Callback or function() end
local Element = { Value = Default }
AkenaLib.Flags[ElementName] = Element
local currentColor = Default
local h, s, v = Color3.toHSV(currentColor)
local Container = createInstance('ImageButton', {
Parent = PageTarget,
BackgroundColor3 = Theme.ElementBG,
Size = UDim2.new(1, 0, 0, 36),
AutoButtonColor = false,
Image = ''
})
createInstance('UICorner', {Parent = Container, CornerRadius = UDim.new(0, 4)})
regTheme(Container, function() Container.BackgroundColor3 = Theme.ElementBG end)
table.insert(WindowObj.ElementsList, {Name = ElementName, Frame = Container, Tab = ParentTab})
local TitleLabel = createInstance('TextLabel', {
Parent = Container,
BackgroundTransparency = 1,
Position = UDim2.new(0, 12, 0, 0),
Size = UDim2.new(1, -120, 1, 0),
Font = Enum.Font.GothamMedium,
Text = ElementName,
TextColor3 = Theme.TextSub,
TextSize = 13,
TextXAlignment = Enum.TextXAlignment.Left
})
regTheme(TitleLabel, function() TitleLabel.TextColor3 = Theme.TextSub end)
local ColorView = createInstance('Frame', {
Parent = Container,
BackgroundColor3 = currentColor,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -6, 0.5, 0),
Size = UDim2.new(0, 40, 0, 20)
})
createInstance('UICorner', {Parent = ColorView, CornerRadius = UDim.new(0, 4)})
local ColorViewStroke = createInstance('UIStroke', {Parent = ColorView, Color = Theme.Border})
regTheme(ColorViewStroke, function() ColorViewStroke.Color = Theme.Border end)
local FloatPicker = createInstance('Frame', {
Parent = ScreenGui,
BackgroundColor3 = Color3.fromRGB(25, 25, 25),
Size = UDim2.new(0, 180, 0, 190),
ZIndex = 100,
Visible = false
})
local FloatPickerScale = createInstance('UIScale', {Parent = FloatPicker, Scale = CurrentScale})
table.insert(ScalesToUpdate, FloatPickerScale)
createInstance('UICorner', {Parent = FloatPicker, CornerRadius = UDim.new(0, 6)})
local FloatPickerStroke = createInstance('UIStroke', {Parent = FloatPicker, Color = Theme.Border})
regTheme(FloatPickerStroke, function() FloatPickerStroke.Color = Theme.Border end)
regTheme(FloatPicker, function() FloatPicker.BackgroundColor3 = Theme.ElementBG end)
local SatValMap = createInstance('ImageButton', {
Parent = FloatPicker,
BackgroundColor3 = Color3.fromHSV(h, 1, 1),
Position = UDim2.new(0, 10, 0, 10),
Size = UDim2.new(0, 130, 0, 130),
Image = 'rbxassetid://4155801252',
AutoButtonColor = false
})
createInstance('UICorner', {Parent = SatValMap, CornerRadius = UDim.new(0, 4)})
local SVKnob = createInstance('Frame', {
Parent = SatValMap,
BackgroundColor3 = Color3.fromRGB(255, 255, 255),
Size = UDim2.new(0, 4, 0, 4),
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(s, 0, 1 - v, 0)
})
createInstance('UICorner', {Parent = SVKnob, CornerRadius = UDim.new(1, 0)})
createInstance('UIStroke', {Parent = SVKnob, Color = Color3.fromRGB(0, 0, 0)})
local HueMap = createInstance('ImageButton', {
Parent = FloatPicker,
Position = UDim2.new(0, 150, 0, 10),
Size = UDim2.new(0, 20, 0, 130),
BackgroundColor3 = Color3.fromRGB(255, 255, 255),
AutoButtonColor = false,
Image = ''
})
createInstance('UICorner', {Parent = HueMap, CornerRadius = UDim.new(0, 4)})
createInstance('UIGradient', {
Parent = HueMap,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(0.167, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(0.333, Color3.fromRGB(0, 255, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(0, 255, 255)),
ColorSequenceKeypoint.new(0.667, Color3.fromRGB(0, 0, 255)),
ColorSequenceKeypoint.new(0.833, Color3.fromRGB(255, 0, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 0))
}),
Rotation = 90
})
local HueKnob = createInstance('Frame', {
Parent = HueMap,
BackgroundColor3 = Color3.fromRGB(255, 255, 255),
Size = UDim2.new(1, 4, 0, 4),
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 1 - h, 0)
})
createInstance('UIStroke', {Parent = HueKnob, Color = Color3.fromRGB(0, 0, 0)})
local HexBox = createInstance('TextBox', {
Parent = FloatPicker,
Position = UDim2.new(0, 10, 0, 150),
Size = UDim2.new(0, 75, 0, 24),
BackgroundColor3 = Color3.fromRGB(35, 35, 35),
TextColor3 = Color3.fromRGB(255, 255, 255),
Font = Enum.Font.Gotham,
TextSize = 11,
Text = currentColor:ToHex(),
ClearTextOnFocus = false
})
createInstance('UICorner', {Parent = HexBox, CornerRadius = UDim.new(0, 4)})
regTheme(HexBox, function() HexBox.BackgroundColor3 = Theme.MainBG end)
local RGBBox = createInstance('TextBox', {
Parent = FloatPicker,
Position = UDim2.new(0, 95, 0, 150),
Size = UDim2.new(0, 75, 0, 24),
BackgroundColor3 = Color3.fromRGB(35, 35, 35),
TextColor3 = Color3.fromRGB(255, 255, 255),
Font = Enum.Font.Gotham,
TextSize = 11,
Text = math.floor(currentColor.R*255)..', '..math.floor(currentColor.G*255)..', '..math.floor(currentColor.B*255),
ClearTextOnFocus = false
})
createInstance('UICorner', {Parent = RGBBox, CornerRadius = UDim.new(0, 4)})
regTheme(RGBBox, function() RGBBox.BackgroundColor3 = Theme.MainBG end)
SetupTooltip(Container, options.Tip)
local UpdateColor = function()
currentColor = Color3.fromHSV(h, s, v)
ColorView.BackgroundColor3 = currentColor
SatValMap.BackgroundColor3 = Color3.fromHSV(h, 1, 1)
HexBox.Text = currentColor:ToHex()
RGBBox.Text = math.floor(currentColor.R*255)..', '..math.floor(currentColor.G*255)..', '..math.floor(currentColor.B*255)
Element.Value = currentColor
AkenaLib.Flags[ElementName].Value = currentColor
Callback(currentColor)
end
HexBox.FocusLost:Connect(function()
local success, color = pcall(function() return Color3.fromHex(HexBox.Text) end)
if success then
currentColor = color
h, s, v = Color3.toHSV(currentColor)
SVKnob.Position = UDim2.new(s, 0, 1 - v, 0)
HueKnob.Position = UDim2.new(0.5, 0, 1 - h, 0)
UpdateColor()
else
HexBox.Text = currentColor:ToHex()
end
end)
RGBBox.FocusLost:Connect(function()
local r, g, b = RGBBox.Text:match('(%d+)[%s,]+(%d+)[%s,]+(%d+)')
if r and g and b then
currentColor = Color3.fromRGB(tonumber(r), tonumber(g), tonumber(b))
h, s, v = Color3.toHSV(currentColor)
SVKnob.Position = UDim2.new(s, 0, 1 - v, 0)
HueKnob.Position = UDim2.new(0.5, 0, 1 - h, 0)
UpdateColor()
else
RGBBox.Text = math.floor(currentColor.R*255)..', '..math.floor(currentColor.G*255)..', '..math.floor(currentColor.B*255)
end
end)
local draggingSV = false
SatValMap.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then draggingSV = true end
end)
local draggingHue = false
HueMap.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then draggingHue = true end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
draggingSV = false
draggingHue = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
if draggingSV then
local pctX = math.clamp((input.Position.X - SatValMap.AbsolutePosition.X) / SatValMap.AbsoluteSize.X, 0, 1)
local pctY = math.clamp((input.Position.Y - SatValMap.AbsolutePosition.Y) / SatValMap.AbsoluteSize.Y, 0, 1)
s = pctX
v = 1 - pctY
SVKnob.Position = UDim2.new(s, 0, 1 - v, 0)
UpdateColor()
elseif draggingHue then
local pctY = math.clamp((input.Position.Y - HueMap.AbsolutePosition.Y) / HueMap.AbsoluteSize.Y, 0, 1)
h = 1 - pctY
HueKnob.Position = UDim2.new(0.5, 0, 1 - h, 0)
UpdateColor()
end
end
end)
Container.MouseButton1Click:Connect(function()
FloatPicker.Position = UDim2.new(0, ColorView.AbsolutePosition.X - (140 * CurrentScale), 0, ColorView.AbsolutePosition.Y + (28 * CurrentScale))
FloatPicker.Visible = not FloatPicker.Visible
end)
UserInputService.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
local pos = input.Position
if FloatPicker.Visible then
local x1, y1 = FloatPicker.AbsolutePosition.X, FloatPicker.AbsolutePosition.Y
local x2, y2 = x1 + FloatPicker.AbsoluteSize.X, y1 + FloatPicker.AbsoluteSize.Y
local cx1, cy1 = Container.AbsolutePosition.X, Container.AbsolutePosition.Y
local cx2, cy2 = cx1 + Container.AbsoluteSize.X, cy1 + Container.AbsoluteSize.Y
if not (pos.X >= x1 and pos.X <= x2 and pos.Y >= y1 and pos.Y <= y2) and not (pos.X >= cx1 and pos.X <= cx2 and pos.Y >= cy1 and pos.Y <= cy2) then
FloatPicker.Visible = false
end
end
end
end)
function Element:Set(val)
currentColor = val
h, s, v = Color3.toHSV(currentColor)
SVKnob.Position = UDim2.new(s, 0, 1 - v, 0)
HueKnob.Position = UDim2.new(0.5, 0, 1 - h, 0)
UpdateColor()
end
return Element
end
Builder.CreateKeybind = function(self, options)
local ElementName = options.Name or 'Keybind'
local Default = options.Default or Enum.KeyCode.E
local Callback = options.Callback or function() end
local currentBind = Default
local Element = { Value = currentBind }
AkenaLib.Flags[ElementName] = Element
local BindFrame = createInstance('Frame', {
Parent = PageTarget,
BackgroundColor3 = Theme.ElementBG,
Size = UDim2.new(1, 0, 0, 36)
})
createInstance('UICorner', {Parent = BindFrame, CornerRadius = UDim.new(0, 4)})
regTheme(BindFrame, function() BindFrame.BackgroundColor3 = Theme.ElementBG end)
table.insert(WindowObj.ElementsList, {Name = ElementName, Frame = BindFrame, Tab = ParentTab})
local TitleLabel = createInstance('TextLabel', {
Parent = BindFrame,
BackgroundTransparency = 1,
Position = UDim2.new(0, 12, 0, 0),
Size = UDim2.new(1, -120, 1, 0),
Font = Enum.Font.GothamMedium,
Text = ElementName,
TextColor3 = Theme.TextSub,
TextSize = 13,
TextXAlignment = Enum.TextXAlignment.Left
})
regTheme(TitleLabel, function() TitleLabel.TextColor3 = Theme.TextSub end)
local BindContainer = createInstance('Frame', {
Parent = BindFrame,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -6, 0.5, 0),
Size = UDim2.new(0, 60, 0, 22),
BackgroundColor3 = Color3.fromRGB(35, 35, 35)
})
createInstance('UICorner', {Parent = BindContainer, CornerRadius = UDim.new(0, 4)})
regTheme(BindContainer, function() BindContainer.BackgroundColor3 = Theme.MainBG end)
local BindContainerStroke = createInstance('UIStroke', {Parent = BindContainer, Color = Theme.Border})
regTheme(BindContainerStroke, function() BindContainerStroke.Color = Theme.Border end)
local BindBtn = createInstance('TextButton', {
Parent = BindContainer,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 1, 0),
Text = currentBind.Name,
Font = Enum.Font.Gotham,
TextColor3 = Theme.TextSub,
TextSize = 11
})
SetupTooltip(BindFrame, options.Tip)
local UpdateBindSize = function()
local bindName = currentBind and currentBind.Name or 'None'
BindBtn.Text = bindName
local textBounds = TextService:GetTextSize(bindName, 11, Enum.Font.Gotham, Vector2.new(1000, 22))
BindContainer.Size = UDim2.new(0, math.max(textBounds.X + 16, 40), 0, 22)
end
UpdateBindSize()
local isBinding = false
BindBtn.MouseButton1Click:Connect(function()
isBinding = true
BindBtn.Text = '...'
BindContainer.Size = UDim2.new(0, 40, 0, 22)
end)
UserInputService.InputBegan:Connect(function(input, gpe)
if isBinding and (input.UserInputType == Enum.UserInputType.Keyboard or input.UserInputType == Enum.UserInputType.Gamepad1) then
currentBind = input.KeyCode
isBinding = false
UpdateBindSize()
Element.Value = currentBind
AkenaLib.Flags[ElementName].Value = currentBind
Callback(currentBind)
end
end)
function Element:Set(val)
currentBind = val
UpdateBindSize()
Element.Value = currentBind
AkenaLib.Flags[ElementName].Value = currentBind
Callback(currentBind)
end
return Element
end
return setmetatable(Builder, {__index = Builder})
end
local HomeBody = MasterContainers['Home']
local Sidebar = createInstance('ScrollingFrame', {
Parent = HomeBody,
BackgroundTransparency = 1,
Size = UDim2.new(0, 160, 1, 0),
BorderSizePixel = 0,
ScrollBarThickness = 0,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.new(0, 0, 0, 0)
})
createInstance('UIListLayout', {
Parent = Sidebar,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0, 4)
})
createInstance('UIPadding', {
Parent = Sidebar,
PaddingTop = UDim.new(0, 10),
PaddingLeft = UDim.new(0, 8),
PaddingRight = UDim.new(0, 8)
})
local ContentContainer = createInstance('Frame', {
Parent = HomeBody,
BackgroundTransparency = 1,
Position = UDim2.new(0, 160, 0, 0),
Size = UDim2.new(1, -160, 1, 0)
})
WindowObj.CreateTab = function(self, options)
local TabName = options.Name or 'Tab'
local TabIconId = options.Icon or 'rbxassetid://6034502844'
local TabBtn = createInstance('ImageButton', {
Parent = Sidebar,
BackgroundColor3 = Color3.fromRGB(255, 255, 255),
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 38),
AutoButtonColor = false,
Image = ''
})
createInstance('UICorner', {Parent = TabBtn, CornerRadius = UDim.new(0, 4)})
local TabGradient = createInstance('UIGradient', {
Parent = TabBtn,
Color = ColorSequence.new(Theme.Accent),
Offset = Vector2.new(-1, 0),
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.86),
NumberSequenceKeypoint.new(0.6, 1),
NumberSequenceKeypoint.new(1, 1)
})
})
regTheme(TabGradient, function()
TabGradient.Color = ColorSequence.new(Theme.Accent)
end)
local IconImg = createInstance('ImageLabel', {
Parent = TabBtn,
BackgroundTransparency = 1,
Position = UDim2.new(0, 12, 0.5, -9),
Size = UDim2.new(0, 18, 0, 18),
Image = TabIconId,
ImageColor3 = Theme.TextSub
})
local TextLabel = createInstance('TextLabel', {
Parent = TabBtn,
BackgroundTransparency = 1,
Position = UDim2.new(0, 40, 0, 0),
Size = UDim2.new(1, -40, 1, 0),
Font = Enum.Font.GothamMedium,
Text = TabName,
TextColor3 = Theme.TextSub,
TextSize = 13,
TextXAlignment = Enum.TextXAlignment.Left
})
TabBtn.MouseEnter:Connect(function()
if WindowObj.CurrentTab ~= TabName then
TweenService:Create(TextLabel, TweenInfo.new(0.2), {TextColor3 = Color3.fromRGB(210, 210, 210)}):Play()
TweenService:Create(IconImg, TweenInfo.new(0.2), {ImageColor3 = Color3.fromRGB(210, 210, 210)}):Play()
end
end)
TabBtn.MouseLeave:Connect(function()
if WindowObj.CurrentTab ~= TabName then
TweenService:Create(TextLabel, TweenInfo.new(0.2), {TextColor3 = Theme.TextSub}):Play()
TweenService:Create(IconImg, TweenInfo.new(0.2), {ImageColor3 = Theme.TextSub}):Play()
end
end)
local PageGroup = createInstance('CanvasGroup', {
Parent = ContentContainer,
Size = UDim2.new(1, 0, 1, 0),
Position = UDim2.new(0, 50, 0, 0),
BackgroundTransparency = 1,
GroupTransparency = 1,
BorderSizePixel = 0,
Visible = false
})
local Page = createInstance('ScrollingFrame', {
Parent = PageGroup,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 1, 0),
ScrollBarThickness = 2,
ScrollBarImageColor3 = Theme.Border,
BorderSizePixel = 0,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.new(0, 0, 0, 0)
})
regTheme(Page, function() Page.ScrollBarImageColor3 = Theme.Border end)
createInstance('UIPadding', {
Parent = Page,
PaddingTop = UDim.new(0, 15),
PaddingLeft = UDim.new(0, 20),
PaddingRight = UDim.new(0, 20)
})
createInstance('UIListLayout', {
Parent = Page,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0, 8)
})
local TabObj = { Name = TabName, Page = Page, Select = nil }
local Builder = CreateElementBuilder(Page, TabObj)
TabObj.Select = function()
if WindowObj.CurrentTab == TabObj.Name then return end
if WindowObj.CurrentTab then
WindowObj.CurrentTab.Unselect()
end
WindowObj.CurrentTab = TabObj
PageGroup.Visible = true
PageGroup.Position = UDim2.new(0, 50, 0, 0)
PageGroup.GroupTransparency = 1
TweenService:Create(PageGroup, TweenInfo.new(0.65, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(0, 0, 0, 0), GroupTransparency = 0}):Play()
TweenService:Create(TabBtn, TweenInfo.new(0.2), {BackgroundTransparency = 0}):Play()
TweenService:Create(TabGradient, TweenInfo.new(0.45, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Offset = Vector2.new(0, 0)}):Play()
TweenService:Create(TextLabel, TweenInfo.new(0.2), {TextColor3 = Theme.TextMain}):Play()
TweenService:Create(IconImg, TweenInfo.new(0.2), {ImageColor3 = Theme.TextMain}):Play()
end
TabObj.Unselect = function()
TweenService:Create(PageGroup, TweenInfo.new(0.65, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(0, -50, 0, 0), GroupTransparency = 1}):Play()
task.delay(0.65, function() if WindowObj.CurrentTab ~= TabObj then PageGroup.Visible = false end end)
TweenService:Create(TabGradient, TweenInfo.new(0.45, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Offset = Vector2.new(-1, 0)}):Play()
TweenService:Create(TabBtn, TweenInfo.new(0.2), {BackgroundTransparency = 1}):Play()
TweenService:Create(TextLabel, TweenInfo.new(0.2), {TextColor3 = Theme.TextSub}):Play()
TweenService:Create(IconImg, TweenInfo.new(0.2), {ImageColor3 = Theme.TextSub}):Play()
end
TabBtn.MouseButton1Click:Connect(TabObj.Select)
if #WindowObj.Tabs == 0 then TabObj.Select() end
table.insert(WindowObj.Tabs, TabObj)
return setmetatable(TabObj, {__index = Builder})
end
local MakeSubTabElements = function(TabName)
local parentGrp = MasterContainers[TabName]
local Page = createInstance('ScrollingFrame', {
Parent = parentGrp,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 1, 0),
ScrollBarThickness = 2,
ScrollBarImageColor3 = Theme.Border,
BorderSizePixel = 0,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.new(0, 0, 0, 0)
})
createInstance('UIPadding', {
Parent = Page,
PaddingTop = UDim.new(0, 15),
PaddingLeft = UDim.new(0, 20),
PaddingRight = UDim.new(0, 20)
})
createInstance('UIListLayout', {
Parent = Page,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0, 8)
})
regTheme(Page, function() Page.ScrollBarImageColor3 = Theme.Border end)
return CreateElementBuilder(Page, {Name = TabName, Page = Page, Select = function()
if activeSubTab ~= TabName then
local btn = SubTabs:FindFirstChild(TabName .. 'Tab')
if btn then
local subChildren = SubTabs:GetChildren()
for i = 1, #subChildren do
local child = subChildren[i]
if child:IsA('ImageButton') and child.Name ~= TabName .. 'Tab' then
TweenService:Create(child.TextLabel, TweenInfo.new(0.2), {TextColor3 = Theme.TextSub}):Play()
TweenService:Create(child.Frame, TweenInfo.new(0.2), {Size = UDim2.new(0, 0, 0, 2), BackgroundTransparency = 1}):Play()
local oc = MasterContainers[child.Name:gsub('Tab', '')]
if oc then
TweenService:Create(oc, TweenInfo.new(0.25, Enum.EasingStyle.Quart, Enum.EasingDirection.In), {Position = UDim2.new(0, 0, 0, -15), GroupTransparency = 1}):Play()
task.delay(0.25, function() oc.Visible = false end)
end
end
end
activeSubTab = TabName
TweenService:Create(btn.TextLabel, TweenInfo.new(0.2), {TextColor3 = Theme.TextMain}):Play()
TweenService:Create(btn.Frame, TweenInfo.new(0.2), {Size = UDim2.new(1, 0, 0, 2), BackgroundTransparency = 0}):Play()
local nc = MasterContainers[TabName]
if nc then
nc.Visible = true
nc.Position = UDim2.new(0, 0, 0, 15)
nc.GroupTransparency = 1
TweenService:Create(nc, TweenInfo.new(0.4, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(0, 0, 0, 0), GroupTransparency = 0}):Play()
end
end
end
end})
end
WindowObj.UISettings = MakeSubTabElements('UI Settings')
WindowObj.UISettings:CreateKeybind({
Name = 'Menu Visible Keybind',
Default = MenuKeybind,
Callback = function(key) MenuKeybind = key end
})
local themeNamesList = {}
for name, _ in pairs(Themes) do
table.insert(themeNamesList, name)
end
table.sort(themeNamesList)
WindowObj.UISettings:CreateDropdown({
Name = 'Select UI Theme',
Options = themeNamesList,
Default = defaultTheme,
Callback = function(selectedTheme)
ApplySelectedTheme(selectedTheme)
end
})
local AccentColorElement
AccentColorElement = WindowObj.UISettings:CreateColorpicker({
Name = 'Accent Color',
Default = Theme.Accent,
Callback = function(color)
if not AkenaLib.RainbowAccent then
UpdateThemeAccent(color)
end
end
})
WindowObj.UISettings:CreateToggle({
Name = 'Rainbow Accent',
Default = false,
Callback = function(val)
AkenaLib.RainbowAccent = val
if not val and AccentColorElement then
UpdateThemeAccent(AccentColorElement.Value)
end
end
})
WindowObj.UISettings:CreateSlider({
Name = 'Rainbow Speed',
Min = 1,
Max = 20,
Default = 5,
Increment = 1,
Suffix = '',
Callback = function(val)
AkenaLib.RainbowSpeed = val
end
})
WindowObj.UISettings:CreateButton({
Name = 'Randomize Theme',
Callback = function()
local baseHue = math.random()
local bgSaturation = math.random() * 0.2
local bgValue = math.random() * 0.15 + 0.05
Theme.MainBG = Color3.fromHSV(baseHue, bgSaturation, bgValue)
Theme.SidebarBG = Color3.fromHSV(baseHue, bgSaturation, math.clamp(bgValue + 0.02, 0, 1))
Theme.TopbarBG = Color3.fromHSV(baseHue, bgSaturation, math.clamp(bgValue - 0.02, 0, 1))
Theme.ElementBG = Color3.fromHSV(baseHue, bgSaturation, math.clamp(bgValue + 0.05, 0, 1))
Theme.Border = Color3.fromHSV(baseHue, bgSaturation, math.clamp(bgValue + 0.1, 0, 1))
Theme.DropdownListBG = Theme.ElementBG
Theme.DropdownListStroke = Theme.Border
local acH = (baseHue + math.random() * 0.5) % 1
Theme.Accent = Color3.fromHSV(acH, 0.8, 0.9)
Theme.TextMain = Color3.fromRGB(240, 240, 240)
Theme.TextSub = Color3.fromRGB(160, 160, 160)
local alive = {}
for i = 1, #AkenaLib.ThemeConnections do
local func = AkenaLib.ThemeConnections[i]
if type(func) == 'function' then
local s, res = pcall(func)
if s and res ~= false then
table.insert(alive, func)
end
end
end
AkenaLib.ThemeConnections = alive
end
})
WindowObj.UISettings:CreateToggle({
Name = 'Notifications & Tooltips',
Default = true,
Callback = function(val)
AkenaLib.ShowNotifications = val
AkenaLib.ShowTooltips = val
end
})
WindowObj.UISettings:CreateSlider({
Name = 'Window Scale',
Min = 50,
Max = 150,
Default = 100,
Increment = 5,
Suffix = '%',
Callback = function(val) WindowObj:UpdateScale(val / 100) end
})
WindowObj.Configs = MakeSubTabElements('Configs')
local ConfigName = 'default'
local ConfigFolder = 'akena/' .. tostring(game.GameId)
local SecureFolder = function()
if makefolder then
if not isfolder('akena') then makefolder('akena') end
if not isfolder(ConfigFolder) then makefolder(ConfigFolder) end
end
end
local RefreshConfigs = function(dropdownObj)
if not listfiles then return end
SecureFolder()
local list = {}
local success, files = pcall(function() return listfiles(ConfigFolder) end)
if success and type(files) == 'table' then
for i = 1, #files do
local file = files[i]
if type(file) == 'string' then
local match = file:match('([^/\\\\]+)%.json$')
if match then table.insert(list, match) end
elseif type(file) == 'table' then
local path = file.Path or file.path or file.Name or file.name or tostring(file)
if type(path) == 'string' then
local match = path:match('([^/\\\\]+)%.json$')
if match then table.insert(list, match) end
end
end
end
end
dropdownObj:Refresh(list)
end
local CfgTextBox = WindowObj.Configs:CreateTextbox({
Name = 'Config Name',
UseLetter = true,
UseNumber = true,
Callback = function(txt) ConfigName = txt end
})
local AutoloadTog
local isAutoload = (readfile and isfile('akena_autoload.txt') and readfile('akena_autoload.txt') == ConfigName) or false
AutoloadTog = WindowObj.Configs:CreateToggle({
Name = 'Autoload',
Default = isAutoload,
Callback = function(val)
if writefile then
SecureFolder()
if val then
writefile('akena_autoload.txt', ConfigName)
else
if isfile('akena_autoload.txt') then
delfile('akena_autoload.txt')
end
end
end
end
})
local ConfigDrop
WindowObj.Configs:CreateButton({
Name = 'Save Config',
Callback = function()
if writefile then
SecureFolder()
local data = {}
for k,v in pairs(AkenaLib.Flags) do
data[k] = SerializeValue(v.Value)
end
writefile(ConfigFolder .. '/' .. ConfigName .. '.json', HttpService:JSONEncode(data))
if ConfigDrop then RefreshConfigs(ConfigDrop) end
end
end
})
WindowObj.Configs:CreateButton({
Name = 'Load Config',
Callback = function()
if readfile and isfile(ConfigFolder .. '/' .. ConfigName .. '.json') then
local success, data = pcall(function()
return HttpService:JSONDecode(readfile(ConfigFolder .. '/' .. ConfigName .. '.json'))
end)
if success and type(data) == 'table' then
for k,v in pairs(data) do
local flagElement = AkenaLib.Flags[k]
if flagElement then
local decodedVal = DeserializeValue(v)
if decodedVal ~= nil then
flagElement:Set(decodedVal)
end
end
end
end
end
end
})
ConfigDrop = WindowObj.Configs:CreateDropdown({
Name = 'View Configs',
Options = {},
Callback = function(sel)
ConfigName = sel
if AutoloadTog then
local activeAuto = (readfile and isfile('akena_autoload.txt') and readfile('akena_autoload.txt') == ConfigName) or false
AutoloadTog:Set(activeAuto)
end
end
})
RefreshConfigs(ConfigDrop)
WindowObj.Configs:CreateButton({
Name = 'Delete Config',
Callback = function()
if delfile and isfile(ConfigFolder .. '/' .. ConfigName .. '.json') then
delfile(ConfigFolder .. '/' .. ConfigName .. '.json')
if ConfigDrop then RefreshConfigs(ConfigDrop) end
end
end
})
ApplySelectedTheme(defaultTheme)
task.spawn(function()
if readfile and isfile('akena_autoload.txt') then
local autoCfg = readfile('akena_autoload.txt')
local filePath = ConfigFolder .. '/' .. autoCfg .. '.json'
if isfile(filePath) then
local success, data = pcall(function()
return HttpService:JSONDecode(readfile(filePath))
end)
if success and type(data) == 'table' then
task.wait(0.5)
for k,v in pairs(data) do
local flagElement = AkenaLib.Flags[k]
if flagElement then
local decodedVal = DeserializeValue(v)
if decodedVal ~= nil then
flagElement:Set(decodedVal)
end
end
end
end
end
end
end)
local connection
connection = RunService.RenderStepped:Connect(function()
local success, hasParent = pcall(function() return ScreenGui and ScreenGui.Parent end)
if not success or not hasParent then
if connection then connection:Disconnect() end
return
end
end)
return WindowObj
end
local Window = AkenaLib:CreateWindow({
Title = 'Vqrtslol Hub',
Prefix = 'Vqrtslol',
Theme = 'Minimal White'
})
local ThrowingTab = Window:CreateTab({ Name = 'QB Aimbot', Icon = 'rbxassetid://6034684949' })
enableQbAimbot = ThrowingTab:CreateToggle({
Name = 'Enable QB Aimbot',
Default = false,
Tip = 'Automatically aims passes at the best target for more accurate throws.',
})
throwAimbot = ThrowingTab:CreateToggle({
Name = 'Throw To Mouse Aimbot',
Default = false,
Tip = 'Automatically aims passes toward your mouse position.',
})
autoChooseWr = ThrowingTab:CreateToggle({
Name = 'Auto Choose Open Reciever',
Default = false,
Tip = 'Automatically selects the most open receiver for each throw.',
})
autoSelectThrowMode = ThrowingTab:CreateToggle({
Name = 'Auto Select Throw Type',
Default = false,
Tip = 'Automatically chooses the best throw type for each pass.',
})
autoPower = ThrowingTab:CreateToggle({
Name = 'Auto Power',
Default = false,
Tip = 'Automatically sets the optimal throw power.',
})
autoAngle = ThrowingTab:CreateToggle({
Name = 'Auto Angle',
Default = false,
Tip = 'Automatically adjusts throw angle for better accuracy.',
})
highPowerOnly = ThrowingTab:CreateToggle({
Name = 'High Power Only',
Default = false,
Tip = 'Only uses high-power throws when passing.',
})
antiDB = ThrowingTab:CreateToggle({
Name = 'Anti DB',
Default = false,
Tip = 'Avoids throws that defenders can easily intercept.',
})
antiDBThreshold = ThrowingTab:CreateSlider({
Name = 'Anti DB Threshold',
Min = 0,
Max = 15,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Sets how aggressively defender coverage is avoided.',
})
antiOOB = ThrowingTab:CreateToggle({
Name = 'Anti OOB',
Default = false,
Tip = 'Prevents throws that may lead receivers out of bounds.',
})
antiOOBThreshold = ThrowingTab:CreateSlider({
Name = 'Anti OOB Threshold',
Min = 0,
Max = 15,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Sets how close targets can be to the sideline.',
})
throwLeadOffset = ThrowingTab:CreateSlider({
Name = 'Throw Lead Offset',
Min = -10,
Max = 10,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Adjusts how far ahead passes are led.',
})
throwHeightOffset = ThrowingTab:CreateSlider({
Name = 'Throw Height Offset',
Min = -10,
Max = 10,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Adjusts the height of targeted throws.',
})
autoJuke = ThrowingTab:CreateToggle({
Name = 'Auto Juke Rusher',
Default = false,
Tip = 'Automatically jukes nearby rushers before throwing.',
})
hideCards = ThrowingTab:CreateToggle({
Name = 'Hide QB Aimbot Cards',
Default = false,
Tip = 'Hides QB Aimbot visual cards from the screen.',
})
autoChangePowerUI = ThrowingTab:CreateToggle({
Name = 'Auto Change Power UI',
Default = false,
Tip = 'Automatically updates the power UI to match throws.',
})
autoJumpWhenThrow = ThrowingTab:CreateToggle({
Name = 'Auto Jump Before Throw',
Default = false,
Tip = 'Automatically jumps before releasing the ball.',
})
autoThrowAfterSack = ThrowingTab:CreateToggle({
Name = 'Auto Throw Before Getting Sacked',
Default = false,
Tip = 'Automatically throws the ball when a sack is imminent.',
})
dimeKeybind = ThrowingTab:CreateKeybind({
Name = 'Dime Mode Keybind',
Default = Enum.KeyCode.One,
Tip = 'Switches to Dime throw mode.',
})
magKeybind = ThrowingTab:CreateKeybind({
Name = 'Mag Mode Keybind',
Default = Enum.KeyCode.Two,
Tip = 'Switches to Mag throw mode.',
})
diveKeybind = ThrowingTab:CreateKeybind({
Name = 'Dive Mode Keybind',
Default = Enum.KeyCode.Three,
Tip = 'Switches to Dive throw mode.',
})
jumpKeybind = ThrowingTab:CreateKeybind({
Name = 'Jump Mode Keybind',
Default = Enum.KeyCode.Four,
Tip = 'Switches to Jump throw mode.',
})
bulletKeybind = ThrowingTab:CreateKeybind({
Name = 'Bullet Mode Keybind',
Default = Enum.KeyCode.Five,
Tip = 'Switches to Bullet throw mode.',
})
throwBallAwayKeybind = ThrowingTab:CreateKeybind({
Name = 'Throw Ball Away Keybind',
Default = Enum.KeyCode.T,
Tip = 'Instantly throws the ball away.',
})
increaseAngleKeybind = ThrowingTab:CreateKeybind({
Name = 'Increase Angle Keybind',
Default = Enum.KeyCode.R,
Tip = 'Increases the current throw angle.',
})
decreaseAngleKeybind = ThrowingTab:CreateKeybind({
Name = 'Decrease Angle Keybind',
Default = Enum.KeyCode.F,
Tip = 'Decreases the current throw angle.',
})
lockKeybind = ThrowingTab:CreateKeybind({
Name = 'Lock To Target Keybind',
Default = Enum.KeyCode.Z,
Tip = 'Locks passes onto the current target.',
})
local players = game:GetService('Players')
local replicatedStorage = game:GetService('ReplicatedStorage')
local tweenService = game:GetService('TweenService')
local userInputService = game:GetService('UserInputService')
local runService = game:GetService('RunService')
local stats = game:GetService('Stats')
local camera = workspace.CurrentCamera
local lp = players.LocalPlayer
if not lp then
players:GetPropertyChangedSignal('LocalPlayer'):Wait()
lp = players.LocalPlayer
end
local mouse = lp:GetMouse()
local isPractice = (game.PlaceId == 81310542478972)
if isPractice then
autoJuke.Value = false
end
local targetLocked = false
local lockedTarget = nil
local RouteData = {}
local HUDCards = {}
local rusherHighlights = {}
local numCards = 0
local leadDime = 8.5
local leadMag = 8.6
local leadDive = 8.5
local leadJump = 8.4
local leadBullet = 2.5
local yLeadDime = 1.2
local yLeadMag = 1.0
local yLeadDive = 1.5
local yLeadJump = 2.0
local yLeadBullet = -0.8
local ModeOrder = {'Bullet', 'Dime', 'Dive', 'Jump', 'Mag'}
local QBKeybinds = {
[dimeKeybind.Value] = 'Dime',
[magKeybind.Value] = 'Mag',
[diveKeybind.Value] = 'Dive',
[jumpKeybind.Value] = 'Jump',
[bulletKeybind.Value] = 'Bullet'
}
local customHeight = { Value = 0 }
local target = nil
local lastValidTarget = nil
local targetLeadPos = nil
local highlight = nil
local direction = Vector3.new(0, 1, 0)
local power = 60
local angle = 45
local airtime = 0
local isThrowing = false
local isThrowingAway = false
local firedRemote = false
local modeIndex = 1
local smoothedJukeDir = Vector3.zero
local lockedMousePos = nil
local LockToggleBtn = nil
local LockedLabel = nil
local attach0 = Instance.new('Attachment', workspace.Terrain)
local attach1 = Instance.new('Attachment', workspace.Terrain)
local beam = Instance.new('Beam')
beam.Attachment0 = attach0
beam.Attachment1 = attach1
beam.Segments = 7500
beam.Width0 = 1
beam.Width1 = 1
beam.FaceCamera = true
beam.Color = ColorSequence.new(Color3.fromRGB(255, 255, 255))
beam.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 1),
NumberSequenceKeypoint.new(0.01, 0),
NumberSequenceKeypoint.new(1, 0)
})
beam.Enabled = true
beam.Parent = workspace.Terrain
local posPart = Instance.new('Part', workspace.Terrain)
posPart.Anchored = true
posPart.CanCollide = false
posPart.CastShadow = false
posPart.Size = Vector3.new(3, 3, 3)
posPart.Shape = Enum.PartType.Ball
posPart.Color = Color3.fromRGB(0, 0, 0)
local hudFolder = nil
pcall(function()
hudFolder = (gethui and gethui()) or game:GetService('CoreGui')
end)
if not hudFolder or (hudFolder.Name == 'CoreGui' and not pcall(function() Instance.new('Folder', hudFolder):Destroy() end)) then
hudFolder = lp:WaitForChild('PlayerGui', 10)
end
local sg = Instance.new('ScreenGui')
sg.ResetOnSpawn = false
sg.Parent = hudFolder
sg.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
local container = Instance.new('CanvasGroup')
container.Size = UDim2.new(1, 0, 0, 100)
container.Position = UDim2.new(0.5, 0, 0.05, 0)
container.AnchorPoint = Vector2.new(0.5, 0)
container.BackgroundTransparency = 1
container.GroupTransparency = 1
container.Visible = true
container.Parent = sg
local hudVisible = false
local updateHUDVisibility = function(show)
if show and not hudVisible then
hudVisible = true
tweenService:Create(container, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {GroupTransparency = 0}):Play()
elseif not show and hudVisible then
hudVisible = false
tweenService:Create(container, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {GroupTransparency = 1}):Play()
end
end
local containerScale = Instance.new('UIScale', container)
local updateScale = function()
local vp = camera.ViewportSize
local scale = (vp.X / 1100)
containerScale.Scale = math.clamp(scale, 0.5, 1.2)
end
camera:GetPropertyChangedSignal('ViewportSize'):Connect(updateScale)
updateScale()
local layout = Instance.new('UIListLayout')
layout.FillDirection = Enum.FillDirection.Horizontal
layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
layout.VerticalAlignment = Enum.VerticalAlignment.Center
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Padding = UDim.new(0, 10)
layout.Parent = container
local assignFont = function(instance, font)
pcall(function()
instance.Font = font
end)
end
local createCard = function(titleTxt)
local card = Instance.new('Frame')
card.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
card.BackgroundTransparency = 0
card.BorderSizePixel = 0
local gradient = Instance.new('UIGradient')
gradient.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(45, 45, 50)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(15, 15, 18))
})
gradient.Rotation = 90
gradient.Parent = card
if titleTxt == 'Throw Type' then
card.Size = UDim2.new(0, 110, 0, 80)
else
card.Size = UDim2.new(0, 95, 0, 80)
end
card.LayoutOrder = numCards
card.Parent = container
local corner = Instance.new('UICorner', card)
corner.CornerRadius = UDim.new(0, 8)
local stroke = Instance.new('UIStroke', card)
stroke.Color = Color3.fromRGB(80, 80, 85)
stroke.Thickness = 1.000
local padding = Instance.new('UIPadding', card)
padding.PaddingTop = UDim.new(0, 5)
padding.PaddingBottom = UDim.new(0, 5)
local title = Instance.new('TextLabel')
title.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
title.BackgroundTransparency = 1.000
title.BorderSizePixel = 0
title.Position = UDim2.new(0, 0, 0.70, 0)
title.Size = UDim2.new(1, 0, 0, 15)
assignFont(title, Enum.Font.GothamBold)
title.Text = titleTxt
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.TextScaled = true
title.Parent = card
local valBtn = Instance.new('TextButton')
valBtn.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
valBtn.BackgroundTransparency = 1.000
valBtn.BorderSizePixel = 0
valBtn.Position = UDim2.new(0, 0, 0.15, 0)
valBtn.Size = UDim2.new(1, 0, 0.5, 0)
assignFont(valBtn, Enum.Font.GothamBold)
valBtn.Text = '-'
valBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
valBtn.TextScaled = true
valBtn.AutoButtonColor = false
valBtn.Parent = card
if titleTxt == 'Throw Type' then
local uiScale = Instance.new('UIScale', card)
valBtn.MouseButton1Down:Connect(function()
local c = lp.Character
if not c or not c:FindFirstChild('Football') then return end
tweenService:Create(uiScale, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Scale = 0.9}):Play()
end)
valBtn.MouseButton1Up:Connect(function()
local c = lp.Character
if not c or not c:FindFirstChild('Football') then return end
tweenService:Create(uiScale, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Scale = 1}):Play()
modeIndex = modeIndex + 1
if modeIndex > #ModeOrder then modeIndex = 1 end
end)
end
if titleTxt == 'Player' then
local lockedLbl = Instance.new('TextLabel')
lockedLbl.Size = UDim2.new(1, 0, 0.25, 0)
lockedLbl.Position = UDim2.new(0, 0, 0.05, 0)
lockedLbl.BackgroundTransparency = 1
lockedLbl.Text = 'LOCKED'
lockedLbl.TextColor3 = Color3.fromRGB(255, 50, 50)
assignFont(lockedLbl, Enum.Font.GothamBold)
lockedLbl.TextSize = 12
lockedLbl.Visible = false
lockedLbl.ZIndex = 2
lockedLbl.Parent = card
LockedLabel = lockedLbl
local lockOverlay = Instance.new('TextButton')
lockOverlay.Size = UDim2.new(1, 0, 1, 0)
lockOverlay.BackgroundTransparency = 1
lockOverlay.Text = ''
lockOverlay.ZIndex = 5
lockOverlay.Parent = card
lockOverlay.MouseButton1Click:Connect(function()
local c = lp.Character
if not c or not c:FindFirstChild('Football') then return end
if target or targetLocked then
targetLocked = not targetLocked
if targetLocked then
lockedTarget = target
if LockedLabel then LockedLabel.Visible = true end
else
lockedTarget = nil
if LockedLabel then LockedLabel.Visible = false end
end
end
end)
LockToggleBtn = valBtn
end
HUDCards[titleTxt] = valBtn
numCards = numCards + 1
end
createCard('Angle')
createCard('Throw Type')
createCard('Player')
createCard('Airtime')
createCard('Power')
local getActiveBots = function()
local bots = {}
local npcwr = workspace:FindFirstChild('npcwr')
if npcwr then
local a = npcwr:FindFirstChild('a')
if a then
local bot1 = a:FindFirstChild('bot 1')
if bot1 and bot1:IsA('Model') then table.insert(bots, bot1) end
end
local b = npcwr:FindFirstChild('b')
if b then
local bot3 = b:FindFirstChild('bot 3')
if bot3 and bot3:IsA('Model') then table.insert(bots, bot3) end
end
end
return bots
end
local performThrow = function()
if not enableQbAimbot.Value then return end
local character = lp.Character
if not character then return end
local football = character:FindFirstChildOfClass('Tool')
if not football then return end
local handle = football:FindFirstChild('Handle')
if not handle then return end
local remote = handle:FindFirstChild('RemoteEvent')
if not remote then return end
local head = character:FindFirstChild('Head')
if not head then return end
local root = character:FindFirstChild('HumanoidRootPart')
if not root then return end
local finalDirection = direction or Vector3.new(0, 1, 0)
if isPractice then
local arg = 'Clicked'
local arg1 = head.Position
local arg2 = head.Position + finalDirection * 10000
local arg3 = tonumber(power) or 0
remote:FireServer(arg, arg1, arg2, arg3)
else
local arg = 'Clicked'
local arg1 = (root.CFrame * CFrame.new(0, 1.5, 0)).Position + Vector3.new(70000000)
local arg2 = head.Position + finalDirection * 10000
local arg3 = tonumber(power) or 0
remote:FireServer(arg, arg1, arg2, arg3, 1)
end
end
local findRoute = function(character)
if not character then return 'stationary', Vector3.zero end
local isPlayer = players:GetPlayerFromCharacter(character)
local humanoid = character:FindFirstChild('Humanoid')
local targetHRP = character:FindFirstChild('HumanoidRootPart')
local qbChar = lp.Character
local qbHRP = qbChar and qbChar:FindFirstChild('HumanoidRootPart')
if not humanoid or not targetHRP or not qbHRP then
return 'stationary', Vector3.zero
end
local moveDirection = Vector3.zero
if isPlayer then
moveDirection = humanoid.MoveDirection
else
local wtpDiff = humanoid.WalkToPoint - targetHRP.Position
moveDirection = wtpDiff.Magnitude > 0.01 and wtpDiff.Unit or Vector3.zero
end
local toWR = targetHRP.Position - qbHRP.Position
local distance = tonumber(toWR.Magnitude) or 0
local toWRDir = Vector3.new(toWR.X, 0, toWR.Z)
if toWRDir.Magnitude > 0.01 then
toWRDir = toWRDir.Unit
else
toWRDir = Vector3.new(0, 0, 1)
end
local mdFlat = Vector3.new(moveDirection.X, 0, moveDirection.Z)
if mdFlat.Magnitude < 0.01 then
return 'stationary', moveDirection
end
mdFlat = mdFlat.Unit
local dot = tonumber(mdFlat:Dot(toWRDir)) or 0
if dot > 0.75 then
return 'go/fade', moveDirection
elseif dot >= 0.25 and dot <= 0.75 then
if distance <= 120 then return 'slant', moveDirection
elseif distance <= 160 then return 'seam', moveDirection
else return 'post/corner', moveDirection end
elseif dot > -0.25 and dot < 0.25 then
if distance <= 60 then return 'drag', moveDirection
elseif distance <= 130 then return 'in/out', moveDirection
else return 'flat', moveDirection end
else
if distance <= 50 then return 'hitch', moveDirection
else return 'curl/comeback', moveDirection end
end
end
local isWROpen = function(wrChar)
if not wrChar then return false end
local hrp = wrChar:FindFirstChild('HumanoidRootPart')
if not hrp then return false end
local isCovered = false
local _, moveDir = findRoute(wrChar)
local teamCount = 0
pcall(function() teamCount = tonumber(#game:GetService('Teams'):GetTeams()) or 0 end)
local checkDB = function(dbHRP)
local toDB = dbHRP.Position - hrp.Position
local dist = tonumber(toDB.Magnitude) or 0
if dist < 5 then
local routeDirXZ = Vector3.new(moveDir.X, 0, moveDir.Z)
if (tonumber(routeDirXZ.Magnitude) or 0) > 0.01 then
routeDirXZ = routeDirXZ.Unit
local dot = tonumber(toDB.Unit:Dot(routeDirXZ)) or 0
if dot > -0.7 then
return true
end
else
return true
end
end
return false
end
local checkPR = function(dbHRP)
local qbChar = lp.Character
if not qbChar then return false end
local qbHRP = qbChar:FindFirstChild('HumanoidRootPart')
if not qbHRP then return false end
local toPR = dbHRP.Position - qbHRP.Position
local toWR = hrp.Position - qbHRP.Position
local wrDist = tonumber(toWR.Magnitude) or 0
local wrDir = toWR.Unit
local proj = tonumber(toPR:Dot(wrDir)) or 0
if proj > 2 and proj < (wrDist * 0.6) then
local distToLine = tonumber((toPR - (wrDir * proj)).Magnitude) or 0
if distToLine < 5.5 then
return true
end
end
return false
end
local plrs = players:GetPlayers()
for i = 1, #plrs do
local plr = plrs[i]
if plr ~= lp and plr.Character then
local isEnemy = true
if teamCount > 1 and lp.Team ~= nil and plr.Team ~= nil and lp.Team == plr.Team then
isEnemy = false
end
if isEnemy then
local dbHRP = plr.Character:FindFirstChild('HumanoidRootPart')
if dbHRP and (checkDB(dbHRP) or checkPR(dbHRP)) then
isCovered = true
break
end
end
end
end
if not isCovered then
local bots = getActiveBots()
for i = 1, #bots do
local bot = bots[i]
if bot ~= wrChar then
local dbHRP = bot:FindFirstChild('HumanoidRootPart')
if dbHRP and (checkDB(dbHRP) or checkPR(dbHRP)) then
isCovered = true
break
end
end
end
end
return not isCovered
end
local getTarget = function()
if isThrowing and target then return target end
if targetLocked and lockedTarget and lockedTarget:FindFirstChild('HumanoidRootPart') then
return lockedTarget
elseif targetLocked then
targetLocked = false
lockedTarget = nil
end
local potentialTargets = {}
local teamCount = 0
pcall(function() teamCount = tonumber(#game:GetService('Teams'):GetTeams()) or 0 end)
local plrs = players:GetPlayers()
for i = 1, #plrs do
local plr = plrs[i]
if plr ~= lp and plr.Character and plr.Character:FindFirstChild('HumanoidRootPart') then
local isTeammate = true
if teamCount > 1 and lp.Team ~= nil and plr.Team ~= nil and lp.Team ~= plr.Team then
isTeammate = false
end
if isTeammate then
local eHum = plr.Character:FindFirstChildOfClass('Humanoid')
if not eHum or not eHum.Sit then
table.insert(potentialTargets, plr.Character)
end
end
end
end
local bots = getActiveBots()
for i = 1, #bots do
local bot = bots[i]
if bot:FindFirstChild('HumanoidRootPart') then
local eHum = bot:FindFirstChildOfClass('Humanoid')
if not eHum or not eHum.Sit then
table.insert(potentialTargets, bot)
end
end
end
if #potentialTargets == 0 then return nil end
if autoChooseWr.Value then
local bestAutoTarget = nil
local bestAutoDist = math.huge
local qbHRP = lp.Character and lp.Character:FindFirstChild('HumanoidRootPart')
local qbPos = qbHRP and qbHRP.Position or Vector3.zero
for i = 1, #potentialTargets do
local char = potentialTargets[i]
local hrp = char:FindFirstChild('HumanoidRootPart')
if hrp then
local _, onScreen = camera:WorldToViewportPoint(hrp.Position)
if onScreen and isWROpen(char) then
local dist = tonumber((hrp.Position - qbPos).Magnitude) or 0
if dist < bestAutoDist then
bestAutoDist = dist
bestAutoTarget = char
end
end
end
end
if bestAutoTarget then
return bestAutoTarget
end
end
local mousePos2D = userInputService:GetMouseLocation()
local bestManualTarget = nil
local bestMouseDist = math.huge
for i = 1, #potentialTargets do
local char = potentialTargets[i]
local hrp = char:FindFirstChild('HumanoidRootPart')
if hrp then
local screenPos, onScreen = camera:WorldToViewportPoint(hrp.Position)
if onScreen then
local dist = tonumber((Vector2.new(screenPos.X, screenPos.Y) - mousePos2D).Magnitude) or 0
if dist < bestMouseDist then
bestMouseDist = dist
bestManualTarget = char
end
end
end
end
return bestManualTarget
end
local calculateRouteDirection = function(targetChar)
if not targetChar then return 'Mag' end
local targetHRP = targetChar:FindFirstChild('HumanoidRootPart')
if not targetHRP then return 'Mag' end
local lpChar = lp.Character
local lpHRP = lpChar and lpChar:FindFirstChild('HumanoidRootPart')
if not lpHRP then return 'Mag' end
local route, moveDir = findRoute(targetChar)
local dist = tonumber((targetHRP.Position - lpHRP.Position).Magnitude) or 0
if dist < 40 then return 'Bullet' end
local dbDistance = math.huge
local teamCount = 0
pcall(function() teamCount = tonumber(#game:GetService('Teams'):GetTeams()) or 0 end)
local plrs = players:GetPlayers()
for i = 1, #plrs do
local plr = plrs[i]
if plr ~= lp and plr.Character then
local eHRP = plr.Character:FindFirstChild('HumanoidRootPart')
if eHRP and eHRP ~= targetHRP then
local isEnemy = true
if teamCount > 1 and lp.Team ~= nil and plr.Team ~= nil and lp.Team == plr.Team then
isEnemy = false
end
if isEnemy then
local d = tonumber((eHRP.Position - targetHRP.Position).Magnitude) or 0
if d < dbDistance then dbDistance = d end
end
end
end
end
local bots = getActiveBots()
for i = 1, #bots do
local bot = bots[i]
local bHRP = bot:FindFirstChild('HumanoidRootPart')
if bHRP and bHRP ~= targetHRP then
local d = tonumber((bHRP.Position - targetHRP.Position).Magnitude) or 0
if d < dbDistance then dbDistance = d end
end
end
local within = function(tbl, val)
for i = 1, #tbl do
if tbl[i] == val then return true end
end
return false
end
local forwardRoutes = {'go/fade', 'post/corner', 'seam', 'curl/comeback', 'stationary'}
local sidewayRoutes = {'in/out', 'flat', 'wheel'}
if route == 'slant' or route == 'hitch' or route == 'drag' or route == 'in/out' or route == 'flat' then
return 'Bullet'
elseif within(forwardRoutes, route) then
if dbDistance > 5 then return ((tonumber(angle) or 45) < 40) and 'Jump' or 'Dime'
elseif dbDistance > 2 then return 'Dive' end
return 'Mag'
elseif within(sidewayRoutes, route) then
if dbDistance > 4 then return 'Dime' end
return 'Jump'
end
return 'Dime'
end
local getModeLead = function(modeName)
if modeName == 'Dime' then return leadDime
elseif modeName == 'Mag' then return leadMag
elseif modeName == 'Dive' then return leadDive
elseif modeName == 'Jump' then return leadJump
elseif modeName == 'Bullet' then return leadBullet
end
return 8.6
end
local getModeYLead = function(modeName)
if modeName == 'Dime' then return yLeadDime
elseif modeName == 'Mag' then return yLeadMag
elseif modeName == 'Dive' then return yLeadDive
elseif modeName == 'Jump' then return yLeadJump
elseif modeName == 'Bullet' then return yLeadBullet
end
return 0
end
local getPing = function()
local networkPing = 0
pcall(function() networkPing = tonumber(lp:GetNetworkPing()) or 0 end)
local dataPing = 0
pcall(function() dataPing = (tonumber(stats.Network.ServerStatsItem['Data Ping']:GetValue()) or 0) / 1000 end)
if dataPing == 0 then dataPing = networkPing end
return networkPing + dataPing
end
local solveKinematics = function(origin, targetPos, gravityMag)
local g = tonumber(gravityMag) or 28
local displacement = targetPos - origin
local x = tonumber(Vector3.new(displacement.X, 0, displacement.Z).Magnitude) or 0
local y = tonumber(displacement.Y) or 0
local inner = (x^2) + (y^2)
local root = tonumber(math.sqrt(math.max(inner, 0))) or 0
local baseAngleRad = math.rad(45)
if x > 0.01 then
local atanRes = tonumber(math.atan((y + root) / x)) or baseAngleRad
if atanRes and atanRes == atanRes then
baseAngleRad = atanRes
end
end
local angleRad = tonumber(math.clamp(baseAngleRad * 0.85, math.rad(-15), math.rad(65))) or 0
local cosA = tonumber(math.cos(angleRad)) or 1
local tanA = tonumber(math.tan(angleRad)) or 0
local v0 = 95
local denom = 2 * (cosA^2) * (x * tanA - y)
if denom > 0.001 then
local num = g * (x^2)
local res = tonumber(math.sqrt(num / denom)) or v0
if res and res == res and res ~= math.huge then
v0 = res
end
end
local angleDeg = tonumber(math.deg(angleRad)) or 45
return v0, angleDeg
end
local autoAim = function(targetHRP)
local head = lp.Character:FindFirstChild('Head')
local origin = head and head.Position or lp.Character.HumanoidRootPart.Position
local targetChar = targetHRP.Parent
local targetHeadObj = targetChar and targetChar:FindFirstChild('Head')
local targetHead = targetHeadObj and targetHeadObj.Position or targetHRP.Position + Vector3.new(0, 1.5, 0)
local moveDir = Vector3.zero
local targetHum = targetChar and targetChar:FindFirstChildOfClass('Humanoid')
if targetHum then
local isBot = targetChar:FindFirstAncestor('npcwr') ~= nil
if isBot then
local wtpDiff = targetHum.WalkToPoint - targetHRP.Position
local dir = Vector3.new(wtpDiff.X, 0, wtpDiff.Z)
moveDir = dir.Magnitude > 0.1 and dir.Unit or Vector3.zero
else
local md = targetHum.MoveDirection
local flatMd = Vector3.new(md.X, 0, md.Z)
moveDir = flatMd.Magnitude > 0.01 and flatMd.Unit or Vector3.zero
end
end
local ping = tonumber(getPing()) or 0
local speed = 20
local modeName = ModeOrder[modeIndex]
local isChestPass = (modeName == 'Bullet' or target and (findRoute(target) == 'slant' or findRoute(target) == 'drag' or findRoute(target) == 'in/out' or findRoute(target) == 'flat' or findRoute(target) == 'hitch' or findRoute(target) == 'curl/comeback'))
local routeStr = target and findRoute(target) or 'go/fade'
local activePower = tonumber(power) or 60
if modeName == 'Bullet' or (autoPower.Value and isChestPass) or highPowerOnly.Value then
activePower = 95
end
local lDivisor = 60
if activePower > 75 then
lDivisor = 60 + ((activePower - 75) * 1.5)
end
local distToTarget = tonumber((targetHRP.Position - origin).Magnitude) or 0
local estFlightTime = distToTarget / (tonumber(lDivisor) or 60)
local currentHVel = activePower * (tonumber(math.cos(math.rad(tonumber(angle) or 45))) or 1)
if currentHVel < 30 then currentHVel = 55 end
local estHVel = (modeName == 'Bullet' or isChestPass) and 90 or currentHVel
local modeLeadScale = (tonumber(getModeLead(modeName)) or 8.6) * 3.05
local selectedModeYLead = tonumber(getModeYLead(modeName)) or 0
local routeMultipliers = {
['slant'] = 0.45,
['drag'] = 0.6,
['in/out'] = 0.65,
['flat'] = 0.65,
['wheel'] = 0.9,
['go/fade'] = 1.0,
['post/corner'] = 0.85,
['seam'] = 0.85,
['hitch'] = 0.1,
['curl/comeback'] = 0.1,
['stationary'] = 0.0
}
local rMult = tonumber(routeMultipliers[routeStr]) or 1.0
local dirUnit = moveDir.Magnitude > 0.01 and moveDir.Unit or Vector3.zero
local targetBase = (isChestPass or modeName == 'Bullet') and targetHRP.Position or targetHead
local standingStill = (routeStr == 'stationary')
if standingStill then
leadPos = targetHead
else
leadPos = targetBase + (moveDir * speed * estFlightTime * rMult) + (moveDir * speed * ping * rMult) + (dirUnit * modeLeadScale * rMult)
leadPos = leadPos + (dirUnit * (tonumber(throwLeadOffset.Value) or 0))
if isChestPass or modeName == 'Bullet' then
leadPos = Vector3.new(leadPos.X, targetHead.Y, leadPos.Z)
selectedModeYLead = 0
end
leadPos = leadPos + Vector3.new(0, selectedModeYLead, 0)
leadPos = leadPos + Vector3.new(0, tonumber(throwHeightOffset.Value) or 0, 0)
if routeStr == 'curl/comeback' or routeStr == 'hitch' then
leadPos = leadPos + Vector3.new(0, -5, 0)
end
end
local forceAutoAngle = (modeName == 'Bullet' or isChestPass or (tonumber(power) or 60) == 95 or highPowerOnly.Value)
if not autoAngle.Value and not forceAutoAngle then
leadPos = leadPos + Vector3.new(0, tonumber(customHeight.Value) or 0, 0)
end
if antiDB.Value then
local pushVec = Vector3.zero
local plrs = players:GetPlayers()
local teamCount = 0
pcall(function() teamCount = tonumber(#game:GetService('Teams'):GetTeams()) or 0 end)
for i = 1, #plrs do
local plr = plrs[i]
if plr ~= lp and plr.Character then
local isEnemy = true
if teamCount > 1 and lp.Team ~= nil and plr.Team ~= nil and lp.Team == plr.Team then
isEnemy = false
end
if isEnemy then
local eHRP = plr.Character:FindFirstChild('HumanoidRootPart')
if eHRP then
local dist = tonumber(Vector3.new(eHRP.Position.X - leadPos.X, 0, eHRP.Position.Z - leadPos.Z).Magnitude) or 0
if dist < (tonumber(antiDBThreshold.Value) or 15) then
local away = (leadPos - eHRP.Position)
away = Vector3.new(away.X, 0, away.Z)
if away.Magnitude > 0 then
pushVec = pushVec + (away.Unit * ((tonumber(antiDBThreshold.Value) or 15) - dist))
end
end
end
end
end
end
leadPos = pushVec + leadPos
end
local fPos = Vector3.zero
local field = workspace:FindFirstChild('Models')
if field then field = field:FindFirstChild('Field') end
if field then field = field:FindFirstChild('Ground') end
if field then fPos = field.Position end
if antiOOB.Value and fPos ~= Vector3.zero then
local halfWidth = 75 - (tonumber(antiOOBThreshold.Value) or 5)
local halfLength = 175 - (tonumber(antiOOBThreshold.Value) or 5)
leadPos = Vector3.new(
math.clamp(leadPos.X, fPos.X - halfWidth, fPos.X + halfWidth),
leadPos.Y,
math.clamp(leadPos.Z, fPos.Z - halfLength, fPos.Z + halfLength)
)
end
targetLeadPos = leadPos
local gMag = 28
local calcPower, calcAngle = solveKinematics(origin, leadPos, gMag)
calcPower = tonumber(calcPower) or 95
calcAngle = tonumber(calcAngle) or 45
if standingStill and modeName ~= 'Bullet' and not highPowerOnly.Value then
local dynamicThreshold = tonumber(math.clamp(4 + (distToTarget * 0.08), 5, 14)) or 10
if calcAngle > dynamicThreshold then
local displacement = leadPos - origin
local x = tonumber(Vector3.new(displacement.X, 0, displacement.Z).Magnitude) or 0
local y = tonumber(displacement.Y) or 0
local aRad = tonumber(math.rad(dynamicThreshold)) or 0.1
local denom = 2 * (math.cos(aRad)^2) * (x * math.tan(aRad) - y)
if denom > 0.001 then
local newPwr = tonumber(math.sqrt((gMag * x^2) / denom)) or calcPower
if newPwr == newPwr and newPwr ~= math.huge then
calcAngle = dynamicThreshold
calcPower = newPwr
end
end
end
end
if highPowerOnly.Value then
power = 95
local displacement = leadPos - origin
local x = tonumber(Vector3.new(displacement.X, 0, displacement.Z).Magnitude) or 0
local y = tonumber(displacement.Y) or 0
local v2 = 95^2
local v4 = 95^4
local gx = gMag * x
local discriminant = v4 - gMag * (gMag * x^2 + 2 * y * v2)
if discriminant >= 0 then
angle = tonumber(math.clamp(math.deg(math.atan((v2 - math.sqrt(discriminant)) / gx)) * 0.94, -15, 85)) or 45
else
angle = 45
end
elseif modeName == 'Bullet' or (autoPower.Value and isChestPass) then
power = 95
local displacement = leadPos - origin
local h = tonumber(Vector3.new(displacement.X, 0, displacement.Z).Magnitude) or 0
local v = tonumber(displacement.Y) or 0
local t_est = h / 95
local drop = 0.5 * 28 * t_est * t_est
angle = tonumber(math.clamp(math.deg(math.atan2(v + drop, h)), -15, 45)) or 15
else
if autoPower.Value then
power = tonumber(math.clamp(calcPower, 0, 95)) or 60
end
if autoAngle.Value then
angle = tonumber(math.clamp(calcAngle, -15, 90)) or 45
end
end
if not autoAngle.Value and not forceAutoAngle then
angle = tonumber(math.clamp(calcAngle, -15, 90)) or 45
end
local safePower = tonumber(power) or 60
local safeAngle = tonumber(angle) or 45
local angleRad = tonumber(math.rad(safeAngle)) or 0
local hDirRaw = Vector3.new(leadPos.X - origin.X, 0, leadPos.Z - origin.Z)
local hDir = hDirRaw.Magnitude > 0.01 and hDirRaw.Unit or head.CFrame.LookVector
local dirVelocity = (hDir * (tonumber(math.cos(angleRad)) or 1) + Vector3.new(0, tonumber(math.sin(angleRad)) or 0, 0)) * safePower
direction = dirVelocity.Unit * safePower
local hVel = safePower * (tonumber(math.cos(angleRad)) or 1)
if hVel > 0.1 then
local xDist = tonumber(Vector3.new(leadPos.X - origin.X, 0, leadPos.Z - origin.Z).Magnitude) or 0
airtime = xDist / hVel
else
airtime = 0
end
return safeAngle
end
local beamProjectile = function(g, v0, x0, t1)
local c = 0.5 * 0.5 * 0.5
local safeT1 = tonumber(t1) or 0.1
local p3 = 0.5 * g * safeT1 * safeT1 + v0 * safeT1 + x0
local p2 = p3 - (g * safeT1 * safeT1 + v0 * safeT1) / 3
local p1 = (c * g * safeT1 * safeT1 + 0.5 * v0 * safeT1 + x0 - c * (x0 + p3)) / (3 * c) - p2
local curve0 = tonumber((p1 - x0).Magnitude) or 0
local curve1 = tonumber((p2 - p3).Magnitude) or 0
local b = (x0 - p3).Unit
local r1 = (p1 - x0).Unit
local u1 = r1:Cross(b).Unit
local r2 = (p2 - p3).Unit
local u2 = r2:Cross(b).Unit
b = u1:Cross(r1).Unit
local cf1 = CFrame.new(
x0.X, x0.Y, x0.Z,
r1.X, u1.X, b.X,
r1.Y, u1.Y, b.Y,
r1.Z, u1.Z, b.Z
)
local cf2 = CFrame.new(
p3.X, p3.Y, p3.Z,
r2.X, u2.X, b.X,
r2.Y, u2.Y, b.Y,
r2.Z, u2.Z, b.Z
)
return curve0, -curve1, cf1, cf2
end
userInputService.InputBegan:Connect(function(input, gpe)
if gpe then return end
local char = lp.Character
if not char or not char:FindFirstChild('Football') then return end
if input.KeyCode == throwBallAwayKeybind.Value then
local fPos = Vector3.zero
local field = workspace:FindFirstChild('Models')
if field then field = field:FindFirstChild('Field') end
if field then field = field:FindFirstChild('Ground') end
if field then fPos = field.Position end
local side = math.random(1, 2) == 1 and -1 or 1
local throwTarget = fPos + Vector3.new(side * 120, 0, math.random(-100, 100))
local head = char:FindFirstChild('Head')
local origin = head and head.Position or char.HumanoidRootPart.Position
isThrowingAway = true
power = 95
angle = 25
local angleRad = tonumber(math.rad(angle)) or 0
local hDir = Vector3.new(throwTarget.X - origin.X, 0, throwTarget.Z - origin.Z).Unit
local dirVelocity = (hDir * (tonumber(math.cos(angleRad)) or 1) + Vector3.new(0, tonumber(math.sin(angleRad)) or 0, 0)) * 95
direction = dirVelocity.Unit * 95
local hVel = 95 * (tonumber(math.cos(angleRad)) or 1)
airtime = hVel > 0.1 and ((tonumber(Vector3.new(throwTarget.X - origin.X, 0, throwTarget.Z - origin.Z).Magnitude) or 0) / hVel) or 1
local hum = char:FindFirstChildOfClass('Humanoid')
local throwAnim = replicatedStorage:FindFirstChild('Animations') and replicatedStorage.Animations:FindFirstChild('Throw')
if hum and throwAnim then
local animator = hum:FindFirstChild('Animator')
if animator then
local track = animator:LoadAnimation(throwAnim)
track:Play()
end
end
return
end
if input.KeyCode == increaseAngleKeybind.Value then
customHeight.Value = (tonumber(customHeight.Value) or 0) + 5
elseif input.KeyCode == decreaseAngleKeybind.Value then
customHeight.Value = (tonumber(customHeight.Value) or 0) - 5
end
if not autoSelectThrowMode.Value and QBKeybinds[input.KeyCode] then
local desiredMode = QBKeybinds[input.KeyCode]
for i = 1, #ModeOrder do
if ModeOrder[i] == desiredMode then
modeIndex = i
break
end
end
end
if input.KeyCode == lockKeybind.Value then
if target or targetLocked then
targetLocked = not targetLocked
if targetLocked then
lockedTarget = target
if LockToggleBtn then LockToggleBtn.TextColor3 = Color3.fromRGB(255, 50, 50) end
if LockedLabel then LockedLabel.Visible = true end
else
lockedTarget = nil
if LockToggleBtn then LockToggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255) end
if LockedLabel then LockedLabel.Visible = false end
end
end
end
end)
local triggerThrowJump = function()
if autoJumpWhenThrow.Value then
task.delay(0.05, function()
local char = lp.Character
if char then
local hum = char:FindFirstChildOfClass('Humanoid')
if hum and hum:GetState() ~= Enum.HumanoidStateType.Jumping then
hum:ChangeState(Enum.HumanoidStateType.Jumping)
end
end
end)
end
end
task.spawn(function()
local bindAnimation = function(char)
local humanoid = char:WaitForChild('Humanoid', 5)
if not humanoid then return end
local animator = humanoid:WaitForChild('Animator', 5)
if not animator then return end
animator.AnimationPlayed:Connect(function(track)
local throwAnim = replicatedStorage:FindFirstChild('Animations') and replicatedStorage.Animations:FindFirstChild('Throw')
if throwAnim and track.Animation and (track.Animation == throwAnim or track.Animation.AnimationId == throwAnim.AnimationId) then
track:GetPropertyChangedSignal('IsPlaying'):Connect(function()
if track.IsPlaying then
if not isThrowing then
isThrowing = true
triggerThrowJump()
task.delay(0.12, function()
firedRemote = true
performThrow()
end)
end
else
isThrowing = false
firedRemote = false
isThrowingAway = false
end
end)
if track.IsPlaying and not isThrowing then
isThrowing = true
triggerThrowJump()
task.delay(0.12, function()
firedRemote = true
performThrow()
end)
end
end
end)
end
if lp.Character then
bindAnimation(lp.Character)
end
lp.CharacterAdded:Connect(function(char)
bindAnimation(char)
end)
end)
local setupSackHandler = function(character)
character.ChildAdded:Connect(function(v)
if not autoThrowAfterSack.Value then return end
if not v:IsA('LocalScript') then return end
if not v.Name:lower():find('tackle') then return end
task.wait()
local humanoid = character:FindFirstChildOfClass('Humanoid')
if not humanoid then return end
if autoChooseWr.Value then
local openWR = nil
local bestDist = math.huge
local mousePos2D = userInputService:GetMouseLocation()
local teamCount = 0
pcall(function() teamCount = tonumber(#game:GetService('Teams'):GetTeams()) or 0 end)
local plrs = players:GetPlayers()
for i = 1, #plrs do
local plr = plrs[i]
if plr ~= lp and plr.Character then
local isTeammate = true
if teamCount > 1 and lp.Team ~= nil and plr.Team ~= nil and lp.Team ~= plr.Team then
isTeammate = false
end
if isTeammate then
local eHrp = plr.Character:FindFirstChild('HumanoidRootPart')
local eHum = plr.Character:FindFirstChildOfClass('Humanoid')
if eHrp and (not eHum or not eHum.Sit) and isWROpen(plr.Character) then
local screenPos, onScreen = camera:WorldToViewportPoint(eHrp.Position)
if onScreen then
local dist = tonumber((Vector2.new(screenPos.X, screenPos.Y) - mousePos2D).Magnitude) or 0
if dist < bestDist then
bestDist = dist
openWR = plr.Character
end
end
end
end
end
end
if openWR then
target = openWR
targetLocked = true
lockedTarget = openWR
end
end
if target then
local throwAnim = replicatedStorage:FindFirstChild('Animations') and replicatedStorage.Animations:FindFirstChild('Throw')
if throwAnim then
local animator = humanoid:FindFirstChild('Animator')
if animator then
local track = animator:LoadAnimation(throwAnim)
track:Play()
end
end
end
end)
end
if lp.Character then
setupSackHandler(lp.Character)
end
lp.CharacterAdded:Connect(setupSackHandler)
local updateHighlights = function(isActive)
if not isActive then
if highlight then highlight:Destroy(); highlight = nil end
return
end
if target then
if not highlight then
highlight = Instance.new('Highlight')
end
highlight.Adornee = target
highlight.Parent = target
highlight.FillTransparency = 1
highlight.OutlineColor = targetLocked and Color3.new(0, 0, 0) or Color3.fromRGB(255, 255, 255)
highlight.OutlineTransparency = 0
elseif highlight then
highlight:Destroy()
highlight = nil
end
end
workspace.ChildAdded:Connect(function(v)
if not enableQbAimbot.Value then return end
if v:IsA('BasePart') and v.Name == 'Football' then
task.wait()
local lpChar = lp.Character
local lpHead = lpChar and lpChar:FindFirstChild('Head')
if not lpHead then return end
if v:GetAttribute('LocalAimbotBall') or (v.Position - lpHead.Position).Magnitude < 15 then
local tAttach0 = Instance.new('Attachment', workspace.Terrain)
local tAttach1 = Instance.new('Attachment', workspace.Terrain)
local tBeam = Instance.new('Beam')
tBeam.Attachment0 = tAttach0
tBeam.Attachment1 = tAttach1
tBeam.Segments = 7500
tBeam.Width0 = 1
tBeam.Width1 = 1
tBeam.FaceCamera = true
tBeam.Color = ColorSequence.new(Color3.fromRGB(255, 255, 255))
tBeam.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 1),
NumberSequenceKeypoint.new(0.01, 0),
NumberSequenceKeypoint.new(1, 0)
})
tBeam.Parent = workspace.Terrain
local tPosPart = Instance.new('Part', workspace.Terrain)
tPosPart.Anchored = true
tPosPart.CanCollide = false
tPosPart.CastShadow = false
tPosPart.Size = Vector3.new(3, 3, 3)
tPosPart.Shape = Enum.PartType.Ball
tPosPart.Color = Color3.fromRGB(0, 0, 0)
local safeDirection = direction or Vector3.new(0, 1, 0)
local safeAirtime = math.max(tonumber(airtime) or 0.1, 0.1)
local curve0, curve1, cf1, cf2 = beamProjectile(Vector3.new(0, -28, 0), safeDirection, lpHead.Position + (safeDirection.Unit * 5), safeAirtime)
tBeam.CurveSize0 = curve0
tBeam.CurveSize1 = curve1
tAttach0.WorldCFrame = cf1
tAttach1.WorldCFrame = cf2
tPosPart.Position = Vector3.new(cf2.X, cf2.Y, cf2.Z)
task.delay(safeAirtime, function()
tBeam:Destroy()
tAttach0:Destroy()
tAttach1:Destroy()
tPosPart:Destroy()
end)
end
end
end)
runService.RenderStepped:Connect(function()
if not enableQbAimbot.Value then
updateHUDVisibility(false)
updateHighlights(false)
if beam then beam.Enabled = false end
if posPart then posPart.Position = Vector3.new(0, -9999, 0) end
if attach0 then attach0.WorldPosition = Vector3.new(0, -9999, 0) end
if attach1 then attach1.WorldPosition = Vector3.new(0, -9999, 0) end
target = nil
return
end
if not sg or not sg.Parent then return end
local char = lp.Character
if not char then return end
local head = char:FindFirstChild('Head')
local hrp = char:FindFirstChild('HumanoidRootPart')
if not head or not hrp then return end
local football = char:FindFirstChild('Football')
local hasFootball = (football ~= nil)
if hasFootball then
football:SetAttribute('LocalAimbotBall', true)
local fHandle = football:FindFirstChild('Handle')
if fHandle then fHandle:SetAttribute('LocalAimbotBall', true) end
end
local playerGui = lp:WaitForChild('PlayerGui', 10)
local ballGui = playerGui and playerGui:FindFirstChild('BallGui')
if autoJuke.Value and hasFootball and ballGui then
local fPos = Vector3.zero
local field = workspace:FindFirstChild('Models')
if field then field = field:FindFirstChild('Field') end
if field then field = field:FindFirstChild('Ground') end
if field then fPos = field.Position end
local minX = fPos.X - (155 / 2)
local maxX = fPos.X + (155 / 2)
local minZ = fPos.Z - (355 / 2)
local maxZ = fPos.Z + (355 / 2)
local dodgeVec = Vector3.zero
local threatCount = 0
local plrs = players:GetPlayers()
local teamCount = 0
pcall(function() teamCount = tonumber(#game:GetService('Teams'):GetTeams()) or 0 end)
for i = 1, #plrs do
local plr = plrs[i]
if plr ~= lp and plr.Character then
local isEnemy = true
if teamCount > 1 and lp.Team ~= nil and plr.Team ~= nil and lp.Team == plr.Team then
isEnemy = false
end
if isEnemy then
local eHrp = plr.Character:FindFirstChild('HumanoidRootPart')
if eHrp then
local distToMe = tonumber((eHrp.Position - hrp.Position).Magnitude) or 0
if distToMe < 45 then
local eVel = eHrp.AssemblyLinearVelocity or eHrp.Velocity or Vector3.zero
local eSpeed = tonumber(Vector3.new(eVel.X, 0, eVel.Z).Magnitude) or 0
local tta = distToMe / math.max(eSpeed, 1)
local futureTime = math.min(tta, 1)
local eFuture = eHrp.Position + (eVel * futureTime)
local myVel = hrp.AssemblyLinearVelocity or hrp.Velocity or Vector3.zero
local myFuture = hrp.Position + (myVel * futureTime)
local toThreat = eFuture - myFuture
local futureDist = tonumber(Vector3.new(toThreat.X, 0, toThreat.Z).Magnitude) or 0
if futureDist < 20 or distToMe < 25 then
threatCount = threatCount + 1
local awayDir = myFuture - eFuture
awayDir = Vector3.new(awayDir.X, 0, awayDir.Z)
if awayDir.Magnitude < 0.1 then
awayDir = hrp.CFrame.RightVector
end
awayDir = awayDir.Unit
local weight = math.clamp(45 - distToMe, 0, 45)
dodgeVec = dodgeVec + (awayDir * weight)
end
end
end
end
end
end
local hum = char:FindFirstChildOfClass('Humanoid')
if hum then
local checkPos = hrp.Position
local outOfBoundsPush = Vector3.zero
if checkPos.X < minX + 5 then outOfBoundsPush = outOfBoundsPush + Vector3.new(1, 0, 0) end
if checkPos.X > maxX - 5 then outOfBoundsPush = outOfBoundsPush + Vector3.new(-1, 0, 0) end
if checkPos.Z < minZ + 5 then outOfBoundsPush = outOfBoundsPush + Vector3.new(0, 0, 1) end
if checkPos.Z > maxZ - 5 then outOfBoundsPush = outOfBoundsPush + Vector3.new(0, 0, -1) end
local targetJukeDir = Vector3.zero
if threatCount > 0 then
targetJukeDir = dodgeVec.Unit
if outOfBoundsPush.Magnitude > 0 then
targetJukeDir = (targetJukeDir + outOfBoundsPush * 2).Unit
end
elseif outOfBoundsPush.Magnitude > 0 then
targetJukeDir = outOfBoundsPush.Unit
end
if targetJukeDir.Magnitude > 0 then
smoothedJukeDir = smoothedJukeDir:Lerp(targetJukeDir, 0.25)
hum:Move(smoothedJukeDir, false)
else
smoothedJukeDir = Vector3.zero
end
end
end
local isTracking = hasFootball and (ballGui ~= nil)
if isTracking then
if not hideCards.Value then
updateHUDVisibility(true)
else
updateHUDVisibility(false)
end
if not isThrowingAway then
local newTarget = getTarget()
if newTarget then
lastValidTarget = newTarget
elseif lastValidTarget and not lastValidTarget:FindFirstChild('HumanoidRootPart') then
lastValidTarget = nil
end
if throwAimbot.Value then
target = lastValidTarget
updateHighlights(false)
local targetPos
if isThrowing and lockedMousePos then
targetPos = lockedMousePos
else
targetPos = mouse.Hit.Position
lockedMousePos = targetPos
end
local headPos = head.Position
local gMag = 28
local calcPower, calcAngle = solveKinematics(headPos, targetPos, gMag)
calcPower = tonumber(calcPower) or 95
calcAngle = tonumber(calcAngle) or 45
if autoPower.Value then
power = math.clamp(calcPower, 0, 95)
end
if autoAngle.Value then
angle = math.clamp(calcAngle, -15, 90)
else
angle = math.clamp(tonumber(customHeight.Value) or 0, -15, 90)
end
local safePower = tonumber(power) or 60
local safeAngle = tonumber(angle) or 45
local angleRad = tonumber(math.rad(safeAngle)) or 0
local hDirRaw = Vector3.new(targetPos.X - headPos.X, 0, targetPos.Z - headPos.Z)
local hDir = hDirRaw.Magnitude > 0.01 and hDirRaw.Unit or hrp.CFrame.LookVector
local dirVelocity = (hDir * (tonumber(math.cos(angleRad)) or 1) + Vector3.new(0, tonumber(math.sin(angleRad)) or 0, 0)) * safePower
direction = dirVelocity.Unit * safePower
local hVel = safePower * (tonumber(math.cos(angleRad)) or 1)
if hVel > 0.1 then
local xDist = tonumber(Vector3.new(targetPos.X - headPos.X, 0, targetPos.Z - headPos.Z).Magnitude) or 0
airtime = xDist / hVel
else
airtime = 0
end
targetLeadPos = targetPos
else
target = newTarget or lastValidTarget
updateHighlights(true)
if target and hrp then
local tHRP = target:FindFirstChild('HumanoidRootPart')
if tHRP then
if autoSelectThrowMode.Value then
local m = calculateRouteDirection(target)
for i = 1, #ModeOrder do
if ModeOrder[i] == m then
modeIndex = i
break
end
end
local targetCurrentRoute = select(1, findRoute(target))
if ModeOrder[modeIndex] == 'Bullet' and (targetCurrentRoute == 'go/fade' or targetCurrentRoute == 'post/corner') then
for i = 1, #ModeOrder do
if ModeOrder[i] == 'Mag' then
modeIndex = i
break
end
end
end
end
autoAim(tHRP)
end
end
end
else
target = nil
updateHighlights(false)
end
if autoChangePowerUI.Value then
if ballGui and ballGui:FindFirstChild('Frame0') then
local frame0 = ballGui.Frame0
local safePower = tonumber(power) or 60
if safePower ~= safePower then safePower = 60 end
local displayPower = math.round(safePower / 5) * 5
local txt = frame0:FindFirstChildOfClass('TextLabel')
if txt then txt.Text = tostring(math.floor(displayPower)) end
local frames = frame0:GetChildren()
for i = 1, #frames do
local frame = frames[i]
if frame.Name ~= 'Disp' then
local frameNum = tonumber(frame.Name) or 0
frame.BackgroundTransparency = ((tonumber(frameNum) or 0) <= (tonumber(displayPower) or 0)) and 0 or 0.9
end
end
end
end
local safePowForCard = tonumber(power) or 60
if safePowForCard ~= safePowForCard then safePowForCard = 60 end
if HUDCards['Angle'] then
local forceAutoAngle = (ModeOrder[modeIndex] == 'Bullet' or (target and findRoute(target) == 'slant' or findRoute(target) == 'drag' or findRoute(target) == 'in/out' or findRoute(target) == 'flat' or findRoute(target) == 'hitch' or findRoute(target) == 'curl/comeback') or (tonumber(power) or 60) == 95 or highPowerOnly.Value)
if not autoAngle.Value and not forceAutoAngle then
HUDCards['Angle'].Text = tostring(math.floor(tonumber(customHeight.Value) or 0))
else
HUDCards['Angle'].Text = tostring(math.floor(tonumber(angle) or 45))
end
end
if HUDCards['Power'] then HUDCards['Power'].Text = string.format('%.0f', safePowForCard) end
if HUDCards['Airtime'] then HUDCards['Airtime'].Text = string.format('%.1fs', tonumber(airtime) or 0) end
if HUDCards['Throw Type'] then HUDCards['Throw Type'].Text = tostring(ModeOrder[modeIndex] or 'N/A') end
if HUDCards['Player'] then
if throwAimbot.Value then
HUDCards['Player'].Text = 'MOUSE'
else
HUDCards['Player'].Text = tostring((target and target.Name) or 'NONE')
end
end
else
updateHUDVisibility(false)
updateHighlights(false)
target = nil
lastValidTarget = nil
end
if beam and isTracking then
beam.Enabled = true
local startOrigin = head.Position
local safePowerForBeam = tonumber(power) or 60
local drawDir = direction or Vector3.new(0, 1, 0)
if throwAimbot.Value then
if (tonumber(drawDir.Magnitude) or 0) < 0.1 then
drawDir = Vector3.new(0, 1, 0) * safePowerForBeam
end
elseif not target or not targetLeadPos then
local mouseRay = camera:ScreenPointToRay(mouse.X, mouse.Y)
drawDir = mouseRay.Direction.Unit * safePowerForBeam
direction = drawDir
else
if (tonumber(drawDir.Magnitude) or 0) < 0.1 then
drawDir = Vector3.new(0, 1, 0) * safePowerForBeam
end
end
local safeAirtime = math.max(tonumber(airtime) or 0.1, 0.1)
local curve0, curve1, cf1, cf2 = beamProjectile(Vector3.new(0,-28,0), drawDir, startOrigin + (drawDir.Unit * 5), safeAirtime)
beam.CurveSize0 = curve0
beam.CurveSize1 = curve1
if attach0 and attach1 then
attach0.WorldCFrame = cf1
attach1.WorldCFrame = cf2
attach0.WorldPosition = Vector3.new(cf1.X, cf1.Y, cf1.Z)
attach1.WorldPosition = Vector3.new(cf2.X, cf2.Y, cf2.Z)
if posPart then posPart.Position = Vector3.new(attach1.WorldPosition.X, attach1.WorldPosition.Y, attach1.WorldPosition.Z) end
end
else
if beam then beam.Enabled = false end
if posPart then posPart.Position = Vector3.new(0, -9999, 0) end
if attach0 then attach0.WorldPosition = Vector3.new(0, -9999, 0) end
if attach1 then attach1.WorldPosition = Vector3.new(0, -9999, 0) end
end
end)
local CatchingTab = Window:CreateTab({ Name = 'Catching', Icon = 'rbxassetid://6034227067' })
footballMagnets = CatchingTab:CreateToggle({
Name = 'Enable Football Magnets',
Default = false,
Tip = 'Automatically pulls nearby footballs into catch range.',
})
freeFallCheck = CatchingTab:CreateToggle({
Name = 'Magnets Freefall Check',
Default = false,
Tip = 'Only activates football magnets while the ball is airborne.',
})
showCatchHitbox = CatchingTab:CreateToggle({
Name = 'Show Magnets Radius',
Default = false,
Tip = 'Displays the football magnets catch radius.',
})
magnetsRadius = CatchingTab:CreateSlider({
Name = 'Magnets Catch Distance',
Min = 0,
Max = 25,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the maximum distance footballs can be caught from.',
})
magnetsDelay = CatchingTab:CreateSlider({
Name = 'Magnets Catch Delay',
Min = 0,
Max = 1,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the delay before football magnets activate.',
})
magsType = CatchingTab:CreateDropdown({
Name = 'Magnets Type',
Options = {'Custom', 'Blatant', 'League', 'Legit'},
Default = 'Custom',
Tip = 'Selects the football magnets behavior preset.',
})
local player = game:GetService('Players').LocalPlayer
local part = Instance.new('Part')
part.Color = Color3.fromRGB(255, 255, 255)
part.Shape = Enum.PartType.Ball
part.Material = Enum.Material.ForceField
part.CastShadow = false
part.Anchored = true
part.CanCollide = false
local findClosestBall = function()
local character = player.Character
if not character then return end
local humanoidRootPart = character:FindFirstChild('HumanoidRootPart')
if not humanoidRootPart then return end
local dist = math.huge
local ball = nil
for _, v in next, workspace:GetChildren() do
if not v:IsA('BasePart') then continue end
if v.Name ~= 'Football' then continue end
local distance = (v.Position - humanoidRootPart.Position).Magnitude
if distance < dist then
dist = distance
ball = v
end
end
return ball
end
local selectedRange = function()
local range = tonumber(magnetsRadius.Value) or 0
local mode = tostring(magsType.Value or 'Custom'):lower()
if mode == 'legit' then
return range / 2
elseif mode == 'league' then
return range / 1.4
elseif mode == 'blatant' then
return range * 1.5
end
return range
end
task.spawn(function()
while true do
task.wait()
local character = player.Character
if not character then continue end
local humanoid = character:FindFirstChildOfClass('Humanoid')
if not humanoid then continue end
local ball = findClosestBall()
if not ball then continue end
local range = selectedRange()
part.Size = Vector3.new(range, range, range)
part.CFrame = CFrame.new(ball.Position)
part.Parent = (footballMagnets.Value and showCatchHitbox.Value) and workspace.Terrain or nil
for _, v in next, character:GetChildren() do
if not v:IsA('BasePart') then continue end
if not v.Name:lower():find('catch') then continue end
local distance = (ball.Position - v.Position).Magnitude
if freeFallCheck.Value and humanoid:GetState() ~= Enum.HumanoidStateType.Freefall then continue end
if footballMagnets.Value and distance < range then
tweenService:Create(v, TweenInfo.new(magnetsDelay.Value), {Position = ball.Position}):Play()
pcall(function()
firetouchinterest(v, ball, 0)
firetouchinterest(v, ball, 1)
end)
end
end
end
end)
CatchingTab:CreateDivider()
magEnhancer = CatchingTab:CreateToggle({
Name = 'Enable Mag Enhancer',
Default = false,
Tip = 'Enhances catches on footballs already within range.',
})
magEnhancerRadius = CatchingTab:CreateSlider({
Name = 'Mag Catch Distance',
Min = 0,
Max = 25,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the maximum distance the enhancer can assist catches.',
})
magEnhancerMaxAngle = CatchingTab:CreateSlider({
Name = 'Mag Max Angle',
Min = 50,
Max = 70,
Default = 50,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the maximum catch angle the enhancer can assist.',
})
task.spawn(function()
while true do
task.wait(0.1)
if not magEnhancer.Value then continue end
local character = player.Character
if not character then continue end
local humanoidRootPart = character:FindFirstChild('HumanoidRootPart')
if not humanoidRootPart then continue end
local ball = findClosestBall()
if not ball then continue end
local verticalDistance = ball.Position.Y - humanoidRootPart.Position.Y
if verticalDistance > magEnhancerMaxAngle.Value then
continue
end
local lookVector = humanoidRootPart.CFrame.LookVector
local direction = (ball.Position - humanoidRootPart.Position).Unit
local dot = lookVector:Dot(direction)
for _, v in next, character:GetChildren() do
if not v:IsA('BasePart') then continue end
if not v.Name:lower():find('catch') then continue end
local distance = (ball.Position - v.Position).Magnitude
if dot > 0 and distance <= magEnhancerRadius.Value then
tweenService:Create(v, TweenInfo.new(0), {Position = ball.Position}):Play()
pcall(function()
firetouchinterest(v, ball, 0)
firetouchinterest(v, ball, 1)
end)
end
end
end
end)
CatchingTab:CreateDivider()
pullVector = CatchingTab:CreateToggle({
Name = 'Enable Pull Vector',
Default = false,
Tip = 'Pulls nearby footballs toward your catch position.',
})
pullVectorRadius = CatchingTab:CreateSlider({
Name = 'Pull Vector Radius',
Min = 0,
Max = 45,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the maximum distance footballs can be pulled from.',
})
pullVectorPower = CatchingTab:CreateSlider({
Name = 'Pull Vector Power',
Min = 0,
Max = 5,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Controls how strongly footballs are pulled toward you.',
})
task.spawn(function()
while true do
task.wait()
if not pullVector.Value then continue end
local character = player.Character
if not character then continue end
local humanoidRootPart = character:FindFirstChild('HumanoidRootPart')
if not humanoidRootPart then continue end
local ball = findClosestBall()
if not ball then continue end
local distance = (ball.Position - humanoidRootPart.Position).Magnitude
if distance > pullVectorRadius.Value then continue end
local direction = (ball.Position - humanoidRootPart.Position).Unit
humanoidRootPart.AssemblyLinearVelocity = direction * (pullVectorPower.Value * 25)
end
end)
CatchingTab:CreateDivider()
increaseArmSize = CatchingTab:CreateToggle({
Name = 'Increase Arm Size',
Default = false,
Tip = 'Increases arm size to improve catch reach.',
})
armSizeValue = CatchingTab:CreateSlider({
Name = 'Arm Size Value',
Min = 2,
Max = 25,
Default = 2,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the size applied to both arms.',
})
task.spawn(function()
while true do
task.wait()
local character = player.Character
if not character then continue end
for _, v in next, character:GetChildren() do
if not v:IsA('BasePart') then continue end
if not v.Name:lower():find('t arm') then continue end
v.Size = Vector3.new(v.Size.X, increaseArmSize.Value and armSizeValue.Value or 2, v.Size.Z)
end
end
end)
local PlayerTab = Window:CreateTab({ Name = 'Player', Icon = 'rbxassetid://103807548355126' })
customWalkSpeed = PlayerTab:CreateToggle({
Name = 'Custom WalkSpeed',
Default = false,
Tip = 'Overrides your character movement speed.',
})
walkSpeedValue = PlayerTab:CreateSlider({
Name = 'WalkSpeed Value',
Min = 20,
Max = 23,
Default = 20,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the movement speed value.',
})
walkspeedType = PlayerTab:CreateDropdown({
Name = 'WalkSpeed Type',
Options = {'Normal', 'CFrame'},
Default = 'Normal',
Tip = 'Selects how movement speed is applied.',
})
task.spawn(function()
while true do
task.wait()
if not customWalkSpeed.Value then continue end
local character = player.Character
if not character then continue end
local humanoid = character:FindFirstChildOfClass('Humanoid')
if not humanoid then continue end
if humanoid.PlatformStand then continue end
if humanoid.WalkSpeed == 0 then continue end
local root = character:FindFirstChild('HumanoidRootPart')
if not root then continue end
local direction = Vector3.new(humanoid.MoveDirection.X, 0, humanoid.MoveDirection.Z)
if direction.Magnitude <= 0 then continue end
local velocity = direction.Unit * (walkspeedType.Value == 'CFrame' and (walkSpeedValue.Value / 75) or walkSpeedValue.Value)
if humanoid:GetState() == Enum.HumanoidStateType.Running then
local scale = walkSpeedValue.Value / math.max(humanoid.WalkSpeed, 1)
local animator = humanoid:FindFirstChildOfClass('Animator')
if animator then
for _, track in next, animator:GetPlayingAnimationTracks() do
track:AdjustSpeed(scale)
end
end
end
if walkspeedType.Value ~= 'CFrame' then
root.AssemblyLinearVelocity = Vector3.new(velocity.X, root.AssemblyLinearVelocity.Y, velocity.Z)
else
root.CFrame = root.CFrame + velocity
end
end
end)
PlayerTab:CreateDivider()
customJumpPower = PlayerTab:CreateToggle({
Name = 'Custom JumpPower',
Default = false,
Tip = 'Overrides your character jump power.',
})
jumpPowerValue = PlayerTab:CreateSlider({
Name = 'JumpPower Value',
Min = 50,
Max = 70,
Default = 50,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the custom jump power.',
})
task.spawn(function()
while true do
task.wait()
if not customJumpPower.Value then continue end
local character = player.Character
if not character then continue end
local humanoid = character:FindFirstChildOfClass('Humanoid')
if not humanoid then continue end
local root = character:FindFirstChild('HumanoidRootPart')
if not root then continue end
if humanoid:GetState() ~= Enum.HumanoidStateType.Jumping then continue end
task.wait()
root.AssemblyLinearVelocity = Vector3.new(root.AssemblyLinearVelocity.X, jumpPowerValue.Value, root.AssemblyLinearVelocity.Z)
end
end)
PlayerTab:CreateDivider()
angleEnhancer = PlayerTab:CreateToggle({
Name = 'Angle Enhancer',
Default = false,
Tip = 'Boosts jump height when directional look changes while jumping.',
})
angleEnhancerIndicator = PlayerTab:CreateToggle({
Name = 'Angle Enhancer Indicator',
Default = false,
Tip = 'Showsa notification when an angle boost is triggered.',
})
autoFlip = PlayerTab:CreateToggle({
Name = 'Auto Flip Before Landing',
Default = false,
Tip = 'Automatically adjusts player orientation before landing.',
})
angleEnhanceBoost = PlayerTab:CreateSlider({
Name = 'Angle Boost Value',
Min = 50,
Max = 70,
Default = 50,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the vertical velocity applied during angle boost.',
})
local lastTick = 0
local oldLookVector = nil
task.spawn(function()
while true do
task.wait()
if not angleEnhancer.Value then continue end
local character = player.Character
if not character then oldLookVector = nil continue end
local humanoid = character:FindFirstChildOfClass('Humanoid')
local hrp = character:FindFirstChild('HumanoidRootPart')
if not humanoid or not hrp then oldLookVector = nil continue end
if humanoid:GetState() ~= Enum.HumanoidStateType.Jumping then
continue
end
local currentTime = tick()
local newLookVector = hrp.CFrame.LookVector
if not oldLookVector then
oldLookVector = newLookVector
lastTick = currentTime
continue
end
local angleChange = math.acos(math.clamp(oldLookVector:Dot(newLookVector), -1, 1))
local shiftLockEnabled = userInputService.MouseBehavior == Enum.MouseBehavior.LockCenter
if currentTime - lastTick >= 0.2 and angleChange > math.rad(5) then
lastTick = currentTime
oldLookVector = newLookVector
end
if angleChange > math.rad(25) and currentTime - lastTick <= 2.5 then
lastTick = currentTime
oldLookVector = newLookVector
task.wait()
local vel = hrp.AssemblyLinearVelocity
hrp.AssemblyLinearVelocity = Vector3.new(vel.X, angleEnhanceBoost.Value, vel.Z)
if angleEnhancerIndicator.Value and (shiftLockEnabled or true) then
local hint = Instance.new('Hint')
hint.Text = 'Angled!'
hint.Parent = workspace.Terrain
task.delay(2.5, function()
if hint then
hint:Destroy()
end
end)
end
end
end
end)
local runtime, jumptime, hittime = 0, 0, 0
local arm, vLine, used, prevPs = false, nil, false, false
local seq = 0
local pack = nil
local xz = function(v: Vector3)
local f = Vector3.new(v.X, 0, v.Z)
return f.Magnitude > 0.001 and f.Unit or nil
end
local reset = function()
if not pack then return end
for _, o in next, { pack.spin, pack.ra, pack.pivot, pack.ha } do
if o then o:Destroy() end
end
pack = nil
end
local flip = function(root: BasePart, head: BasePart)
reset()
local m = math.max(root.AssemblyMass, 1)
local ha = Instance.new("Attachment")
ha.Parent = head
local pivot = Instance.new("AlignPosition")
pivot.Mode = Enum.PositionAlignmentMode.OneAttachment
pivot.Attachment0 = ha
pivot.Position = head.Position + Vector3.new(0, 0.15, 0)
pivot.MaxForce = 180000
pivot.Responsiveness = 120
pivot.RigidityEnabled = false
pivot.ApplyAtCenterOfMass = false
pivot.Parent = head
local ra = Instance.new("Attachment")
ra.Parent = root
local spin = Instance.new("AngularVelocity")
spin.Attachment0 = ra
spin.RelativeTo = Enum.ActuatorRelativeTo.Attachment0
spin.AngularVelocity = Vector3.new(-9, 0, 0)
spin.MaxTorque = 50000
spin.Parent = root
root:ApplyAngularImpulse(root.CFrame.RightVector * (-16 * m))
pack = { ha = ha, pivot = pivot, ra = ra, spin = spin }
end
task.spawn(function()
while true do
task.wait()
if not autoFlip.Value then continue end
local char = player.Character
if not char then
reset()
arm, vLine, used, prevPs = false, nil, false, false
continue
end
local hum = char:FindFirstChildOfClass("Humanoid")
local hrp = char:FindFirstChild("HumanoidRootPart")
local head = char:FindFirstChild("Head")
if not hum or not hrp or not head then continue end
local now = tick()
if hum:GetState() == Enum.HumanoidStateType.Running then runtime = now end
if hum:GetState() == Enum.HumanoidStateType.Jumping then jumptime = now end
local ps = hum.PlatformStand
if ps ~= prevPs then
if ps then
arm = (now - runtime <= 0.5) and (now - jumptime <= 0.7)
vLine = xz(hrp.AssemblyLinearVelocity) or xz(hrp.CFrame.LookVector)
used = false
else
arm, vLine, used = false, nil, false
seq += 1
reset()
end
prevPs = ps
end
if not ps or not arm or pack then continue end
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances = { char }
local result = workspace:Raycast(head.Position, Vector3.new(0, -3, 0), params)
local ground = result and result.Instance ~= nil
if used or not ground or now - hittime < 0.12 then continue end
local dist = result and (head.Position - result.Position).Magnitude or math.huge
if dist > 1.6 then continue end
local move = xz(hrp.AssemblyLinearVelocity) or vLine
local face = xz(hrp.CFrame.LookVector)
if not move or not face or face:Dot(move) < 0.78 then continue end
hittime = now
used = true
seq += 1
local k = seq
flip(hrp, head)
task.delay(0.24, function()
if k == seq then
reset()
end
end)
end
end)
PlayerTab:CreateDivider()
PlayerTab:CreateButton({
Name = 'Unlock All Gamepass',
Tip = 'Enables all gamepass-related checks locally.',
Callback = function()
local replicatedFirst = game:GetService('ReplicatedFirst')
local module
local success = pcall(function()
module = require(replicatedFirst:FindFirstChild('LocalSave'))
end)
if not success or not module then
return
end
module.PlayerOwnsPass = function(a, b)
return true
end
end
})
local PhysicsTab = Window:CreateTab({ Name = 'Physics', Icon = 'rbxassetid://11537490966' })
local boundaries = {}
if not isPractice then
for i, v in next, workspace.Models.Boundaries:GetChildren() do
boundaries[#boundaries + 1] = v
end
end
antiBoundaries = PhysicsTab:CreateToggle({
Name = 'Anti OOB',
Default = false,
Tip = 'Prevents players from triggering out-of-bounds zones.',
Callback = function(v)
for i, b in next, boundaries do
if b then
b.Parent = not v and workspace.Models.Boundaries or nil
end
end
end
})
antiBench = PhysicsTab:CreateToggle({
Name = 'Anti Bench',
Default = false,
Tip = 'Prevents automatic benching.',
})
task.spawn(function()
while true do
task.wait()
if not antiBench.Value then continue end
local playerGui = player:FindFirstChild('PlayerGui')
if not playerGui then continue end
local benchButton = playerGui:FindFirstChild('Benched', true)
if not benchButton then continue end
if benchButton.BackgroundColor3 == Color3.fromRGB(120, 120, 120) then
replicatedStorage.Remotes.CharacterSoundEvent:FireServer('Game', 'ToggleBench')
end
end
end)
--[[
local scrambleWall = workspace:FindFirstChild('ScrambleWall')
antiQbBoundaries = PhysicsTab:CreateToggle({
Name = 'Anti QB Boundaries',
Default = false,
Tip = 'Disables invisible QB boundary walls.',
Callback = function(v)
if not scrambleWall then return end
scrambleWall.Parent = v and nil or workspace
end
})
]]
PhysicsTab:CreateDivider()
antiJam = PhysicsTab:CreateToggle({
Name = 'Anti Jam',
Default = false,
Tip = 'Reduces player collision while moving.',
})
antiJumpCooldown = PhysicsTab:CreateToggle({
Name = 'Anti Jump Cooldown',
Default = false,
Tip = 'Removes the delay between jumps.',
})
antiFreeze = PhysicsTab:CreateToggle({
Name = 'Anti Freeze',
Default = false,
Tip = 'Prevents movement speed from being reduced.',
})
task.spawn(function()
while true do
task.wait()
if antiJumpCooldown.Value then
player.Character.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true)
end
if antiFreeze.Value then
if player.Character.Humanoid.WalkSpeed ~= 20 then
player.Character.Humanoid.WalkSpeed = 20
end
end
for _, v in next, players:GetPlayers() do
if v == player then continue end
local character = v.Character
if not character then continue end
local hum = character:FindFirstChildOfClass('Humanoid')
if not hum then continue end
for _, part in next, character:GetChildren() do
if not part:IsA('BasePart') then continue end
if part.Name == 'Head' or part.Name == 'Torso' then
if hum:GetState() == Enum.HumanoidStateType.Running then
part.CanCollide = not antiJam.Value
else
part.CanCollide = true
end
end
end
end
end
end)
antiBlock = PhysicsTab:CreateToggle({
Name = 'Anti Block',
Default = false,
Tip = 'Reduces player collision while moving.',
})
task.spawn(function()
while true do
task.wait()
if not antiBlock.Value then continue end
local character = player.Character
if not character then continue end
local humanoid = character:FindFirstChildOfClass('Humanoid')
if not humanoid then continue end
for _, v in next, character:GetDescendants() do
if not v:IsA('BodyVelocity') then continue end
-- if not v.Name:lower():find('ffmover') then continue end
v.Velocity = Vector3.zero
v.MaxForce = Vector3.zero
humanoid.WalkSpeed = 20
pcall(function()
v:Destroy()
end)
end
end
end)
PhysicsTab:CreateDivider()
quickTP = PhysicsTab:CreateToggle({
Name = 'Quick TP',
Default = false,
Tip = 'Teleports forward in the direction you are facing.',
})
quickTPPower = PhysicsTab:CreateSlider({
Name = 'Quick TP Power',
Min = 0,
Max = 5,
Default = 0,
Increment = 0.1,
Suffix = '',
Tip = 'Sets the teleport distance.',
})
HideKeybind = PhysicsTab:CreateKeybind({
Name = 'Quick TP Keybind',
Default = Enum.KeyCode.Q,
Tip = 'Key used to activate Quick TP.',
})
userInputService.InputBegan:Connect(function(input, gpe)
if gpe then return end
if not quickTP.Value then return end
if input.KeyCode ~= HideKeybind.Value and input.UserInputType ~= Enum.UserInputType.Touch then return end
local character = player.Character
if not character then return end
local hrp = character:FindFirstChild('HumanoidRootPart')
if not hrp then return end
hrp.CFraVQRTSLOL HUB Take your gameplay to the next level with Vqrtslol Hub — a clean, easy-to-use script hub packed with features designed to make your experience smoother and more customizable. ⚡ Clean UI 🎮 Multiple gameplay features 🛠️ Easy configuration 💻 Simple controls 🔥 Built for a smooth experience Vqrtslol Hub — play smarter, play your way.

Universal