Run it
Copy the script and paste it into your executor.
UpdateDelay =
MaxDataPoints =
GraphModule
TextService = :()
Graph = {}
Theme = {
Name = ;
Background = .(,,);
LightBackground = .(,,);
Text = .(,,)
}
isDark =
(name)
seed =
i=, #name
seed = seed + (name:(i))
rng = Random.(seed)
hue = rng:(,)/
.(hue, isDark , isDark )
Graph.(Frame)
Frame ()
GraphHandler = {Frame = Frame; Resolution = ;}
Busy =
BaseZIndex = GraphHandler.Frame.ZIndex
Background = .()
Background.Name =
Background.BackgroundColor3 = Theme.Background
Background.Size = .(,,,)
Background.ZIndex = BaseZIndex+
Background.Parent = GraphHandler.Frame
MarkerBG = .()
MarkerBG.Name =
MarkerBG.Size = .(,,,)
MarkerBG.BackgroundColor3 = Theme.LightBackground
MarkerBG.BorderSizePixel =
MarkerBG.ZIndex = BaseZIndex+
MarkerBG.Parent = GraphHandler.Frame
YMarkers = .()
YMarkers.Name =
YMarkers.Size = .(,,,)
YMarkers.Position = .(,,,)
YMarkers.BackgroundTransparency =
YMarkers.BorderSizePixel =
YMarkers.ZIndex = BaseZIndex+
YMarkers.Parent = GraphHandler.Frame
GraphingFrame = .()
GraphingFrame.Name =
GraphingFrame.Size = .(,,,)
GraphingFrame.Position = .(,,,)
GraphingFrame.BackgroundTransparency =
GraphingFrame.ZIndex = BaseZIndex+
GraphingFrame.Parent = GraphHandler.Frame
KeyNames = .()
KeyNames.Name =
KeyNames.Size = .(,,,)
KeyNames.Position = .(,,,)
KeyNames.BackgroundColor3 = Theme.LightBackground
KeyNames.BorderSizePixel =
KeyNames.ZIndex = BaseZIndex+
KeyNames.Parent = GraphHandler.Frame
GraphHandler.Frame:():(()
Size = GraphHandler.Frame.AbsoluteSize
()
Size == GraphHandler.Frame.AbsoluteSize
GraphHandler.()
)
GraphHandler.(newTheme)
()
Theme = {
Name = newTheme.Name ;
Background = newTheme.Background .(,,);
LightBackground = newTheme.LightBackground .(,,);
Text = newTheme.Text .(,,);
}
Background.BackgroundColor3 = Theme.Background
MarkerBG.BackgroundColor3 = Theme.LightBackground
KeyNames.BackgroundColor3 = Theme.LightBackground
GraphHandler.()
GraphHandler.()
GraphHandler.Frame GraphHandler.Data GraphHandler.Resolution
Busy ()
Busy =
YMarkers:()
GraphingFrame:()
KeyNames:()
BaseZIndex = GraphHandler.Frame.ZIndex
Background.ZIndex = BaseZIndex+
MarkerBG.ZIndex = BaseZIndex+
YMarkers.ZIndex = BaseZIndex+
GraphingFrame.ZIndex = BaseZIndex+
KeyNames.ZIndex = BaseZIndex+
KeyLayout = .()
KeyLayout.FillDirection = .FillDirection.Horizontal
KeyLayout.HorizontalAlignment = .HorizontalAlignment.Left
KeyLayout.VerticalAlignment = .VerticalAlignment.Center
KeyLayout.Padding = .(,)
KeyLayout.Parent = KeyNames
Max, Min = -.huge,.huge
Range
Key, Set (GraphHandler.Data)
SetAmount = #Set
i=,SetAmount, .(SetAmount/GraphHandler.Resolution)
SortedChunk = {}
x=i,i+.(SetAmount/GraphHandler.Resolution)
SortedChunk[#SortedChunk+] = Set[x]
.(SortedChunk)
Value = SortedChunk[.(#SortedChunk*)]
Value
Min = .(Min, Value)
Max = .(Max, Value)
GraphHandler.BaselineZero
Min =
Max = Max *
Range = Max-Min
y=,,
Marker = .()
Marker.Name = y
Marker.Size = .(,,,)
Marker.AnchorPoint = .(,)
Marker.Position = .(,, - (y*),)
Marker.Text = .(,(Min + (Range*y)))
Marker.TextXAlignment = .TextXAlignment.Right
Marker.TextColor3 = Theme.Text
Marker.Font = .Font.SourceSans
Marker.BackgroundTransparency =
Marker.TextSize = (GraphHandler.Frame.AbsoluteSize.X*)
Marker.ZIndex = BaseZIndex+
Marker.Parent = YMarkers
KeyColors = {}
Key, Set (GraphHandler.Data)
KeyColors[Key] = (Key)
TextSize = GraphHandler.Frame.AbsoluteSize.Y*
Size = TextService:(Key, TextSize, .Font.SourceSansSemibold, KeyNames.AbsoluteSize)
KeyMarker = .()
KeyMarker.Text = Key
KeyMarker.TextColor3 = KeyColors[Key]
KeyMarker.Font = .Font.SourceSansSemibold
KeyMarker.BackgroundTransparency =
KeyMarker.TextSize = TextSize
KeyMarker.Size = .(,Size.X+TextSize,,)
KeyMarker.ZIndex = BaseZIndex+
KeyMarker.Parent = KeyNames
SetAmount = #Set
LastPoint
i=,SetAmount, .(SetAmount/GraphHandler.Resolution)
SortedChunk = {}
x=i,i+.(SetAmount/GraphHandler.Resolution)
SortedChunk[#SortedChunk+] = Set[x]
.(SortedChunk)
Value = SortedChunk[.(#SortedChunk*)]
Value
Point = .()
Point.Name = Key..i
Point.Position = .(+((i/SetAmount)*),, Range == - (((Value-Min)/Range)*),)
Point.AnchorPoint = .(,)
Point.SizeConstraint = .SizeConstraint.RelativeXX
Point.Size = .(.(/GraphHandler.Resolution, ,),,.(/GraphHandler.Resolution, ,),)
Point.ImageColor3 = KeyColors[Key]
Point.BorderSizePixel =
Point.BackgroundTransparency =
Point.Image =
Point.ZIndex = BaseZIndex+
Label = .()
Label.Visible =
Label.Text = .(,Value)
Label.BackgroundColor3 = Theme.LightBackground
Label.TextColor3 = Theme.Text
Label.Position = .(,,,)
Label.Font = .Font.Code
Label.TextSize = (GraphHandler.Frame.AbsoluteSize.X*)
Label.Size = .(,Label.TextSize * * #Label.Text,,Label.TextSize * )
Label.Parent = Point
Label.ZIndex = BaseZIndex+
Point.MouseEnter:(()
Label.Visible =
)
Point.MouseLeave:(()
Label.Visible =
)
LastPoint
Connector = .()
Connector.Name = Key..i....i-
Connector.BackgroundColor3 = KeyColors[Key]
Connector.BorderSizePixel =
Connector.SizeConstraint = .SizeConstraint.RelativeXX
Connector.AnchorPoint = .(, )
Connector.ZIndex = BaseZIndex+
Size = GraphingFrame.AbsoluteSize
startX, startY = Point.Position.X.Scale*Size.X, Point.Position.Y.Scale*Size.Y
endX, endY = LastPoint.Position.X.Scale*Size.X, LastPoint.Position.Y.Scale*Size.Y
Distance = (.(startX, startY) - .(endX, endY)).Magnitude
Connector.Size = .(, Distance, .(/GraphHandler.Resolution, ,), )
Connector.Position = .(, (startX + endX) / , , (startY + endY) / )
Connector.Rotation = .(endY - startY, endX - startX) * ( / .pi)
Connector.Parent = GraphingFrame
LastPoint = Point
Point.Parent = GraphingFrame
Busy =
({}, {
__index = (t,Key)
GraphHandler[Key]
;
__newindex = (t, Key, Value)
Key == (Value) ==
GraphHandler.Data = Value
GraphHandler.()
Key == (Value) ==
GraphHandler.Resolution = .(Value, , )
GraphHandler.()
Key == (Value) ==
GraphHandler.BaselineZero = Value
GraphHandler.()
;
})
GraphModule = Graph
Players = :()
RunService = :()
Stats = :()
UserInputService = :()
LocalPlayer = Players.LocalPlayer
DataPing = Stats.Network.ServerStatsItem[]
CurrentFPS =
FPSData = {}
PingData = {}
Data = {
FPS = FPSData,
Ping = PingData
}
ScreenGui = .()
ScreenGui.ResetOnSpawn =
UsingExploit =
( .protect_gui)
.(ScreenGui)
ScreenGui.Parent = :()
UsingExploit =
(gethui)
ScreenGui.Parent = ()
UsingExploit =
ScreenGui.Parent = LocalPlayer:()
Container = .()
Container.Parent = ScreenGui
Container.Size = .(, , , )
Container.Position = .(, , , )
Container.BackgroundTransparency =
Container.Active =
(guiObject)
dragging =
dragStart =
startPos =
viewportSize = .CurrentCamera.ViewportSize
.CurrentCamera:():(()
viewportSize = .CurrentCamera.ViewportSize
)
guiObject.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
dragStart = input.Position
startPos = guiObject.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
dragging =
)
)
guiObject.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
dragging
delta = input.Position - dragStart
newPosInOffset = .(startPos.X.Offset + delta.X, startPos.Y.Offset + delta.Y)
clampedX = .(newPosInOffset.X, , viewportSize.X - guiObject.AbsoluteSize.X)
clampedY = .(newPosInOffset.Y, , viewportSize.Y - guiObject.AbsoluteSize.Y)
guiObject.Position = .(clampedX, clampedY)
)
()
UserInputService.InputBegan:((input, gameProcessedEvent)
gameProcessedEvent
input.KeyCode == .KeyCode.X
ScreenGui:()
)
(Container)
()
RunService.RenderStepped:((dT)
CurrentFPS = .( / dT)
)
()
Ping
(UsingExploit)
Ping = DataPing:()
Ping = LocalPlayer:()
Ping = (Ping)
.(Ping)
(Array, Item)
(#Array >= MaxDataPoints)
.(Array, )
.(Array, Item)
GraphHandler
.(UpdateDelay)
ScreenGui.Parent
(FPSData, CurrentFPS)
(PingData, ())
(GraphHandler)
GraphHandler.()
GraphHandler = GraphModule.(Container)
GraphHandler.Resolution = MaxDataPoints
GraphHandler.Data = Data