
KeylessUniversal

-- Richie Hub | Full Script
local P=game:GetService("Players")
local U=game:GetService("UserInputService")
local R=game:GetService("RunService")
local T=game:GetService("TweenService")
local W=game:GetService("Workspace")
local L=game:GetService("Lighting")
local C=W.CurrentCamera
local LP=P.LocalPlayer
local pg
local ok,h=pcall(function() return gethui() end)
pg=ok and h or LP:WaitForChild("PlayerGui")
if pg:FindFirstChild("RichieHubUI") then pg.RichieHubUI:Destroy() end
local SG=Instance.new("ScreenGui")
SG.Name="RichieHubUI"
SG.ResetOnSpawn=false
SG.IgnoreGuiInset=true
SG.ZIndexBehavior=Enum.ZIndexBehavior.Sibling
SG.Parent=pg
-- ============ NOTIFICATION SYSTEM ============
local notifHolder = Instance.new("Frame")
notifHolder.Size = UDim2.new(0, 250, 0, 300)
notifHolder.Position = UDim2.new(0, 20, 0, 100)
notifHolder.BackgroundTransparency = 1
notifHolder.Parent = SG
local notifList = Instance.new("UIListLayout", notifHolder)
notifList.Padding = UDim.new(0, 6)
notifList.SortOrder = Enum.SortOrder.LayoutOrder
notifList.VerticalAlignment = Enum.VerticalAlignment.Top
local function notifyColor(text, color)
task.spawn(function()
local box = Instance.new("Frame")
box.Size = UDim2.new(1, 0, 0, 36)
box.BackgroundColor3 = Color3.fromRGB(20, 20, 24)
box.BackgroundTransparency = 0.1
box.BorderSizePixel = 0
box.Parent = notifHolder
Instance.new("UICorner", box).CornerRadius = UDim.new(0, 8)
local stroke = Instance.new("UIStroke", box)
stroke.Thickness = 2
stroke.Color = color
stroke.Transparency = 0.2
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -16, 1, 0)
lbl.Position = UDim2.new(0, 8, 0, 0)
lbl.BackgroundTransparency = 1
lbl.Text = text
lbl.TextColor3 = color
lbl.Font = Enum.Font.GothamSemibold
lbl.TextSize = 13
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = box
box.BackgroundTransparency = 1
stroke.Transparency = 1
lbl.TextTransparency = 1
T:Create(box, TweenInfo.new(0.2), {BackgroundTransparency = 0.1}):Play()
T:Create(stroke, TweenInfo.new(0.2), {Transparency = 0.2}):Play()
T:Create(lbl, TweenInfo.new(0.2), {TextTransparency = 0}):Play()
task.wait(2)
T:Create(box, TweenInfo.new(0.4), {BackgroundTransparency = 1}):Play()
T:Create(stroke, TweenInfo.new(0.4), {Transparency = 1}):Play()
T:Create(lbl, TweenInfo.new(0.4), {TextTransparency = 1}):Play()
task.wait(0.4)
box:Destroy()
end)
end
local function notifyGreen(text) notifyColor(text, Color3.fromRGB(80, 255, 80)) end
local function notifyRed(text) notifyColor(text, Color3.fromRGB(255, 80, 80)) end
local function notify(text)
task.spawn(function()
local box = Instance.new("Frame")
box.Size = UDim2.new(1, 0, 0, 36)
box.BackgroundColor3 = Color3.fromRGB(20, 20, 24)
box.BackgroundTransparency = 0.1
box.BorderSizePixel = 0
box.Parent = notifHolder
Instance.new("UICorner", box).CornerRadius = UDim.new(0, 8)
local stroke = Instance.new("UIStroke", box)
stroke.Thickness = 2
stroke.Color = Color3.fromRGB(80, 200, 120)
stroke.Transparency = 0.2
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -16, 1, 0)
lbl.Position = UDim2.new(0, 8, 0, 0)
lbl.BackgroundTransparency = 1
lbl.Text = text
lbl.TextColor3 = Color3.fromRGB(220, 220, 220)
lbl.Font = Enum.Font.GothamSemibold
lbl.TextSize = 13
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = box
box.BackgroundTransparency = 1
stroke.Transparency = 1
lbl.TextTransparency = 1
T:Create(box, TweenInfo.new(0.2), {BackgroundTransparency = 0.1}):Play()
T:Create(stroke, TweenInfo.new(0.2), {Transparency = 0.2}):Play()
T:Create(lbl, TweenInfo.new(0.2), {TextTransparency = 0}):Play()
task.wait(2)
T:Create(box, TweenInfo.new(0.4), {BackgroundTransparency = 1}):Play()
T:Create(stroke, TweenInfo.new(0.4), {Transparency = 1}):Play()
T:Create(lbl, TweenInfo.new(0.4), {TextTransparency = 1}):Play()
task.wait(0.4)
box:Destroy()
end)
end
local M=Instance.new("Frame")
M.Size=UDim2.new(0,420,0,320)
M.Position=UDim2.new(0.5,-210,0.5,-160)
M.BackgroundColor3=Color3.fromRGB(15,15,18)
M.BackgroundTransparency=0.25
M.BorderSizePixel=0
M.Active=true
M.Draggable=true
M.Parent=SG
Instance.new("UICorner",M).CornerRadius=UDim.new(0,12)
local Edge=Instance.new("UIStroke",M)
Edge.Thickness=2
Edge.Transparency=0
task.spawn(function()
local t=0
while Edge.Parent do
t=t+0.03
local r=math.floor(math.sin(t)*127+128)
local g=math.floor(math.sin(t+2)*127+128)
local b=math.floor(math.sin(t+4)*127+128)
Edge.Color=Color3.fromRGB(r,g,b)
task.wait(0.02)
end
end)
local TitleBar=Instance.new("Frame")
TitleBar.Size=UDim2.new(1,0,0,38)
TitleBar.BackgroundColor3=Color3.fromRGB(20,20,24)
TitleBar.BackgroundTransparency=0.3
TitleBar.BorderSizePixel=0
TitleBar.Parent=M
Instance.new("UICorner",TitleBar).CornerRadius=UDim.new(0,12)
local TitleBarFix=Instance.new("Frame")
TitleBarFix.Size=UDim2.new(1,0,0,12)
TitleBarFix.Position=UDim2.new(0,0,1,-12)
TitleBarFix.BackgroundColor3=Color3.fromRGB(20,20,24)
TitleBarFix.BackgroundTransparency=0.3
TitleBarFix.BorderSizePixel=0
TitleBarFix.Parent=TitleBar
local TitleText=Instance.new("TextLabel")
TitleText.Size=UDim2.new(1,-100,1,0)
TitleText.Position=UDim2.new(0,45,0,0)
TitleText.BackgroundTransparency=1
TitleText.Text="Richice Hub"
TitleText.TextColor3=Color3.fromRGB(255,255,255)
TitleText.Font=Enum.Font.GothamBlack
TitleText.TextSize=18
TitleText.TextXAlignment=Enum.TextXAlignment.Left
TitleText.Parent=TitleBar
-- ============ WATERMARK (next to title) ============
local watermarkText = Instance.new("TextLabel")
watermarkText.Size = UDim2.new(0, 150, 0, 12)
watermarkText.Position = UDim2.new(0, 195, 0.5, -6)
watermarkText.BackgroundTransparency = 1
watermarkText.Text = "Made By Richice"
watermarkText.TextColor3 = Color3.fromRGB(0, 160, 255)
watermarkText.Font = Enum.Font.GothamBold
watermarkText.TextSize = 12
watermarkText.TextXAlignment = Enum.TextXAlignment.Left
watermarkText.Parent = TitleBar
watermarkText.ZIndex = 0
local watermarkStroke = Instance.new("UIStroke", watermarkText)
watermarkStroke.Thickness = 1
watermarkStroke.Color = Color3.fromRGB(80, 200, 120)
watermarkStroke.Transparency = 0.3
task.spawn(function()
local t=0
while TitleText.Parent do
t=t+0.03
local r=math.floor(math.sin(t)*127+128)
local g=math.floor(math.sin(t+2)*127+128)
local b=math.floor(math.sin(t+4)*127+128)
TitleText.TextColor3=Color3.fromRGB(r,g,b)
task.wait(0.02)
end
end)
local Mn=Instance.new("TextButton")
Mn.Size=UDim2.new(0,26,0,26)
Mn.Position=UDim2.new(0,8,0,6)
Mn.BackgroundColor3=Color3.fromRGB(35,35,40)
Mn.BackgroundTransparency=0.3
Mn.Text="≡"
Mn.TextColor3=Color3.fromRGB(200,200,200)
Mn.Font=Enum.Font.GothamBold
Mn.TextSize=16
Mn.BorderSizePixel=0
Mn.AutoButtonColor=false
Mn.Parent=TitleBar
Instance.new("UICorner",Mn).CornerRadius=UDim.new(0,6)
local Cl=Instance.new("TextButton")
Cl.Size=UDim2.new(0,30,0,30)
Cl.Position=UDim2.new(1,-34,0,6)
Cl.BackgroundColor3=Color3.fromRGB(180,45,45)
Cl.BackgroundTransparency=0.2
Cl.Text="X"
Cl.TextColor3=Color3.fromRGB(255,255,255)
Cl.Font=Enum.Font.GothamBold
Cl.TextSize=13
Cl.BorderSizePixel=0
Cl.AutoButtonColor=false
Cl.Parent=TitleBar
Instance.new("UICorner",Cl).CornerRadius=UDim.new(0,6)
local RestoreBtn=Instance.new("TextButton")
RestoreBtn.Size=UDim2.new(0,40,0,40)
RestoreBtn.Position=UDim2.new(0,10,0,60)
RestoreBtn.BackgroundColor3=Color3.fromRGB(15,15,18)
RestoreBtn.BackgroundTransparency=0.25
RestoreBtn.Text="R"
RestoreBtn.TextColor3=Color3.fromRGB(255,255,255)
RestoreBtn.Font=Enum.Font.GothamBold
RestoreBtn.TextSize=16
RestoreBtn.BorderSizePixel=0
RestoreBtn.AutoButtonColor=false
RestoreBtn.Visible=false
RestoreBtn.Parent=SG
Instance.new("UICorner",RestoreBtn).CornerRadius=UDim.new(1,0)
Mn.MouseButton1Click:Connect(function() M.Visible=false RestoreBtn.Visible=true end)
RestoreBtn.MouseButton1Click:Connect(function() M.Visible=true RestoreBtn.Visible=false end)
local Sidebar=Instance.new("ScrollingFrame")
Sidebar.Size=UDim2.new(0,130,1,-50)
Sidebar.Position=UDim2.new(0,8,0,44)
Sidebar.BackgroundTransparency=1
Sidebar.BorderSizePixel=0
Sidebar.ScrollBarThickness=3
Sidebar.ScrollBarImageColor3=Color3.fromRGB(80,80,90)
Sidebar.CanvasSize=UDim2.new(0,0,0,0)
Sidebar.Parent=M
local sidebarList=Instance.new("UIListLayout",Sidebar)
sidebarList.Padding=UDim.new(0,6)
sidebarList.SortOrder=Enum.SortOrder.LayoutOrder
sidebarList:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
Sidebar.CanvasSize=UDim2.new(0,0,0,sidebarList.AbsoluteContentSize.Y+20)
end)
local function mkTab(name, emoji, order)
local b=Instance.new("TextButton")
b.Size=UDim2.new(1,0,0,32)
b.BackgroundColor3=Color3.fromRGB(20,20,24)
b.BackgroundTransparency=0.35
b.Text=" "..emoji.." "..name
b.TextColor3=Color3.fromRGB(200,200,200)
b.Font=Enum.Font.GothamSemibold
b.TextSize=12
b.TextXAlignment=Enum.TextXAlignment.Left
b.BorderSizePixel=0
b.AutoButtonColor=false
b.LayoutOrder=order
b.Parent=Sidebar
Instance.new("UICorner",b).CornerRadius=UDim.new(0,8)
local acc=Instance.new("Frame")
acc.Size=UDim2.new(0,3,1,0)
acc.BackgroundColor3=Color3.fromRGB(80,200,120)
acc.BorderSizePixel=0
acc.Visible=false
acc.Parent=b
Instance.new("UICorner",acc).CornerRadius=UDim.new(1,0)
return b
end
local TargetTab=mkTab("Target","🎯",1)
local MainTab=mkTab("Main","🧠",2)
local CombatTab=mkTab("Combat","⚔️",3)
local VisualsTab=mkTab("Visuals","👁️",4)
local WorldTab=mkTab("World","🌍",5)
local ConfigTab=mkTab("Config","💾",6)
local KeybindTab=mkTab("Keybinds","⌨️",7)
local function setActiveTab(active)
for _,tab in pairs({TargetTab,MainTab,CombatTab,VisualsTab,WorldTab,ConfigTab,KeybindTab}) do
T:Create(tab,TweenInfo.new(0.2),{
BackgroundColor3=(tab==active) and Color3.fromRGB(40,40,48) or Color3.fromRGB(20,20,24),
TextColor3=(tab==active) and Color3.fromRGB(255,255,255) or Color3.fromRGB(200,200,200)
}):Play()
local acc=tab:FindFirstChildOfClass("Frame")
if acc then acc.Visible=(tab==active) end
end
end
local Content=Instance.new("Frame")
Content.Size=UDim2.new(1,-146,1,-50)
Content.Position=UDim2.new(0,138,0,44)
Content.BackgroundTransparency=1
Content.Parent=M
local function mkPage(name)
local s=Instance.new("ScrollingFrame")
s.Name=name
s.Size=UDim2.new(1,0,1,0)
s.BackgroundTransparency=1
s.BorderSizePixel=0
s.ScrollBarThickness=3
s.ScrollBarImageColor3=Color3.fromRGB(80,80,90)
s.CanvasSize=UDim2.new(0,0,0,0)
s.Visible=false
s.Parent=Content
local l=Instance.new("UIListLayout",s)
l.Padding=UDim.new(0,6)
l.SortOrder=Enum.SortOrder.LayoutOrder
l:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
s.CanvasSize=UDim2.new(0,0,0,l.AbsoluteContentSize.Y+20)
end)
return s
end
local TargetPage=mkPage("TargetPage")
local MainPage=mkPage("MainPage")
local CombatPage=mkPage("CombatPage")
local VisualsPage=mkPage("VisualsPage")
local WorldPage=mkPage("WorldPage")
local ConfigPage=mkPage("ConfigPage")
local KeybindPage=mkPage("KeybindPage")
local function showPage(p)
for _,page in pairs({TargetPage,MainPage,CombatPage,VisualsPage,WorldPage,ConfigPage,KeybindPage}) do
page.Visible=(page==p)
end
end
TargetTab.MouseButton1Click:Connect(function() setActiveTab(TargetTab) showPage(TargetPage) end)
MainTab.MouseButton1Click:Connect(function() setActiveTab(MainTab) showPage(MainPage) end)
CombatTab.MouseButton1Click:Connect(function() setActiveTab(CombatTab) showPage(CombatPage) end)
VisualsTab.MouseButton1Click:Connect(function() setActiveTab(VisualsTab) showPage(VisualsPage) end)
WorldTab.MouseButton1Click:Connect(function() setActiveTab(WorldTab) showPage(WorldPage) end)
ConfigTab.MouseButton1Click:Connect(function() setActiveTab(ConfigTab) showPage(ConfigPage) end)
KeybindTab.MouseButton1Click:Connect(function() setActiveTab(KeybindTab) showPage(KeybindPage) end)
setActiveTab(MainTab)
showPage(MainPage)
local function mkLabel(p,t)
local l=Instance.new("TextLabel")
l.Size=UDim2.new(1,-6,0,22)
l.BackgroundTransparency=1
l.Text=" "..t
l.TextColor3=Color3.fromRGB(140,140,150)
l.Font=Enum.Font.GothamBold
l.TextSize=11
l.TextXAlignment=Enum.TextXAlignment.Left
l.Parent=p
return l
end
local keybindTargets = {}
local keybindButtons = {}
_G.richieToggleState = {}
local function mkTog(p,t,cb)
local h=Instance.new("Frame")
h.Size=UDim2.new(1,-6,0,40)
h.BackgroundColor3=Color3.fromRGB(30,30,36)
h.BackgroundTransparency=0.3
h.BorderSizePixel=0
h.Parent=p
Instance.new("UICorner",h).CornerRadius=UDim.new(0,8)
local l=Instance.new("TextLabel")
l.Size=UDim2.new(1,-56,1,0)
l.Position=UDim2.new(0,14,0,0)
l.BackgroundTransparency=1
l.Text=t
l.TextColor3=Color3.fromRGB(220,220,220)
l.Font=Enum.Font.GothamMedium
l.TextSize=13
l.TextXAlignment=Enum.TextXAlignment.Left
l.Parent=h
local kb=Instance.new("Frame")
kb.Size=UDim2.new(0,36,0,18)
kb.Position=UDim2.new(1,-48,0.5,-9)
kb.BackgroundColor3=Color3.fromRGB(60,60,66)
kb.BorderSizePixel=0
kb.Parent=h
Instance.new("UICorner",kb).CornerRadius=UDim.new(1,0)
local k=Instance.new("Frame")
k.Size=UDim2.new(0,14,0,14)
k.Position=UDim2.new(0,2,0.5,-7)
k.BackgroundColor3=Color3.fromRGB(200,200,200)
k.BorderSizePixel=0
k.Parent=kb
Instance.new("UICorner",k).CornerRadius=UDim.new(1,0)
local on=false
local b=Instance.new("TextButton")
b.Size=UDim2.new(1,0,1,0)
b.BackgroundTransparency=1
b.Text=""
b.Parent=h
local function setState(newState)
on=newState
T:Create(kb,TweenInfo.new(0.25,Enum.EasingStyle.Quart),{BackgroundColor3=on and Color3.fromRGB(80,200,120) or Color3.fromRGB(60,60,66)}):Play()
T:Create(k,TweenInfo.new(0.25,Enum.EasingStyle.Quart),{Position=on and UDim2.new(1,-16,0.5,-7) or UDim2.new(0,2,0.5,-7)}):Play()
end
b.MouseButton1Click:Connect(function()
setState(not on)
if _G.richieToggleState then
_G.richieToggleState[t] = on
end
if cb then cb(on) end
end)
local handle = {setState=setState, onChange=cb}
keybindTargets[t] = handle
return handle
end
local function mkBtn(p,t,cb)
local b=Instance.new("TextButton")
b.Size=UDim2.new(1,-6,0,36)
b.BackgroundColor3=Color3.fromRGB(30,30,36)
b.BackgroundTransparency=0.2
b.Text=t
b.TextColor3=Color3.fromRGB(220,220,220)
b.Font=Enum.Font.GothamSemibold
b.TextSize=13
b.BorderSizePixel=0
b.AutoButtonColor=false
b.Parent=p
Instance.new("UICorner",b).CornerRadius=UDim.new(0,8)
b.MouseButton1Click:Connect(function()
T:Create(b,TweenInfo.new(0.1),{BackgroundColor3=Color3.fromRGB(80,200,120)}):Play()
task.wait(0.15)
T:Create(b,TweenInfo.new(0.15),{BackgroundColor3=Color3.fromRGB(30,30,36)}):Play()
if cb then cb() end
end)
keybindButtons[t] = {fire=cb}
return b
end
local function mkInp(p,ph)
local b=Instance.new("TextBox")
b.Size=UDim2.new(1,-6,0,34)
b.BackgroundColor3=Color3.fromRGB(25,25,30)
b.BackgroundTransparency=0.2
b.PlaceholderText=ph
b.Text=""
b.TextColor3=Color3.fromRGB(220,220,220)
b.PlaceholderColor3=Color3.fromRGB(120,120,130)
b.Font=Enum.Font.Gotham
b.TextSize=13
b.BorderSizePixel=0
b.ClearTextOnFocus=false
b.Parent=p
Instance.new("UICorner",b).CornerRadius=UDim.new(0,8)
b.Focused:Connect(function()
if b.Text=="Not found!" or b.Text=="Name required!" or b.Text:sub(1,7)=="Saved: " then
b.Text=""
end
end)
return b
end
local savedValues={}
local function mkNum(p,t,key,default,cb)
savedValues[key]=default
local h=Instance.new("Frame")
h.Size=UDim2.new(1,-6,0,58)
h.BackgroundColor3=Color3.fromRGB(30,30,36)
h.BackgroundTransparency=0.3
h.BorderSizePixel=0
h.Parent=p
Instance.new("UICorner",h).CornerRadius=UDim.new(0,8)
local l=Instance.new("TextLabel")
l.Size=UDim2.new(1,-16,0,20)
l.Position=UDim2.new(0,14,0,6)
l.BackgroundTransparency=1
l.Text=t
l.TextColor3=Color3.fromRGB(200,200,200)
l.Font=Enum.Font.GothamSemibold
l.TextSize=12
l.TextXAlignment=Enum.TextXAlignment.Left
l.Parent=h
local box=Instance.new("TextBox")
box.Size=UDim2.new(1,-28,0,26)
box.Position=UDim2.new(0,14,0,28)
box.BackgroundColor3=Color3.fromRGB(20,20,24)
box.BackgroundTransparency=0.2
box.Text=tostring(default)
box.TextColor3=Color3.fromRGB(220,220,220)
box.Font=Enum.Font.GothamBold
box.TextSize=13
box.BorderSizePixel=0
box.ClearTextOnFocus=false
box.Parent=h
Instance.new("UICorner",box).CornerRadius=UDim.new(0,6)
box.FocusLost:Connect(function()
local num=tonumber(box.Text)
if num then
savedValues[key]=num
cb(num)
else
box.Text=tostring(savedValues[key])
cb(savedValues[key])
end
end)
return h, box
end
local function getCh() return LP.Character or LP.CharacterAdded:Wait() end
local origAmb=L.Ambient
local origOutdoor=L.OutdoorAmbient
local origFogStart=L.FogStart
local origFogEnd=L.FogEnd
local origBright=L.Brightness
local origGrav=W.Gravity
local fly=false
local flySpd=50
local flyC,flyBV,flyBG
local flyAnimTrack
local function stopFly()
fly=false
if flyAnimTrack then pcall(function() flyAnimTrack:Stop() end) flyAnimTrack=nil end
if flyC then flyC:Disconnect() flyC=nil end
local ch=LP.Character
if ch then
local hrp=ch:FindFirstChild("HumanoidRootPart")
if hrp then hrp.Anchored=false end
local hm=ch:FindFirstChild("Humanoid")
if hm then hm.PlatformStand=false end
end
end
local function startFly()
local ch = getCh()
local hrp = ch:WaitForChild("HumanoidRootPart")
local hm = ch:WaitForChild("Humanoid")
hm.PlatformStand = true
hrp.Anchored = true
local animator = hm:FindFirstChildOfClass("Animator")
if animator then
local anim = Instance.new("Animation")
anim.AnimationId = "rbxassetid://507766666"
local track = animator:LoadAnimation(anim)
track.Priority = Enum.AnimationPriority.Action
track.Looped = true
track:Play()
flyAnimTrack = track
end
local plr = game:GetService("Players").LocalPlayer
local plrControls
local ok2, res = pcall(function() return require(plr.PlayerScripts.PlayerModule.ControlModule) end)
if ok2 then plrControls = res end
flyC = R.RenderStepped:Connect(function()
if not fly then return end
if not plrControls then return end
local h2 = ch:FindFirstChild("HumanoidRootPart")
if not h2 then return end
local moveDir = plrControls:GetMoveVector()
local camCF = C.CFrame
local newPos = h2.Position
if moveDir.Magnitude > 0 then
local camRotation = camCF - camCF.Position
local direction = camRotation * moveDir
newPos = newPos + direction.Unit * (flySpd * 0.05)
end
h2.CFrame = CFrame.new(newPos, newPos + camCF.LookVector)
end)
end
-- ============ MAIN ============
do
mkLabel(MainPage,"MOVEMENT")
mkTog(MainPage,"Fly",function(on) fly=on if on then startFly() else stopFly() end end)
mkNum(MainPage,"Fly Speed","flySpd",50,function(v) flySpd=v end)
mkNum(MainPage,"Speed","speed",16,function(v)
local ch=LP.Character
if ch and ch:FindFirstChild("Humanoid") then ch.Humanoid.WalkSpeed=v end
end)
local speedPresets = Instance.new("Frame")
speedPresets.Size = UDim2.new(1,-6,0,34)
speedPresets.BackgroundTransparency = 1
speedPresets.Parent = MainPage
local spLayout = Instance.new("UIListLayout", speedPresets)
spLayout.FillDirection = Enum.FillDirection.Horizontal
spLayout.Padding = UDim.new(0,4)
spLayout.SortOrder = Enum.SortOrder.LayoutOrder
local function setWalk(v)
local ch=LP.Character
if ch and ch:FindFirstChild("Humanoid") then
ch.Humanoid.WalkSpeed=v
savedValues["speed"]=v
notify("Speed: "..v)
end
end
for _,preset in ipairs({{"Slow",8},{"Normal",16},{"Fast",32},{"Blaze",100}}) do
local b=Instance.new("TextButton")
b.Size=UDim2.new(0.25,-3,1,0)
b.BackgroundColor3=Color3.fromRGB(30,30,36)
b.BackgroundTransparency=0.2
b.Text=preset[1]
b.TextColor3=Color3.fromRGB(220,220,220)
b.Font=Enum.Font.GothamBold
b.TextSize=12
b.BorderSizePixel=0
b.AutoButtonColor=false
b.Parent=speedPresets
Instance.new("UICorner",b).CornerRadius=UDim.new(0,6)
b.MouseButton1Click:Connect(function()
T:Create(b,TweenInfo.new(0.1),{BackgroundColor3=Color3.fromRGB(80,200,120)}):Play()
task.wait(0.15)
T:Create(b,TweenInfo.new(0.15),{BackgroundColor3=Color3.fromRGB(30,30,36)}):Play()
setWalk(preset[2])
end)
end
mkNum(MainPage,"Jump Power","jump",50,function(v)
local ch=LP.Character
if ch and ch:FindFirstChild("Humanoid") then
ch.Humanoid.UseJumpPower=true
ch.Humanoid.JumpPower=v
end
end)
local sprintC
mkTog(MainPage,"Auto-Sprint",function(on)
if sprintC then sprintC:Disconnect() sprintC=nil end
if on then
local vu=game:GetService("VirtualUser")
local lastTouch={}
sprintC=R.Heartbeat:Connect(function()
local ch=LP.Character
if not ch then return end
local hm=ch:FindFirstChildOfClass("Humanoid")
if not hm or hm.MoveDirection.Magnitude < 0.1 then return end
pcall(function() vu:KeyPress(Enum.KeyCode.LeftShift) end)
pcall(function() vu:KeyPress(Enum.KeyCode.LeftControl) end)
pcall(function()
local pg = LP:FindFirstChild("PlayerGui")
if not pg then return end
for _, gui in pairs(pg:GetDescendants()) do
if gui:IsA("ImageButton") or gui:IsA("TextButton") then
local n = gui.Name:lower()
if n:find("sprint") or n:find("run") or n:find("shift") or n:find("dash") then
if gui.Visible then
local now=tick()
if not lastTouch[gui] or now-lastTouch[gui] > 0.15 then
lastTouch[gui]=now
local pos = gui.AbsolutePosition + gui.AbsoluteSize/2
vu:Button1Down(Vector2.new(pos.X,pos.Y), C.CFrame)
task.defer(function()
task.wait(0.05)
vu:Button1Up(Vector2.new(pos.X,pos.Y), C.CFrame)
end)
end
end
end
end
end
end)
end)
end
end)
local ajC
local ajDebounce=false
mkTog(MainPage,"Auto-Jump",function(on)
if on then
ajC=R.Heartbeat:Connect(function()
if ajDebounce then return end
local ch=LP.Character
if not ch then return end
local hm=ch:FindFirstChild("Humanoid")
local hrp=ch:FindFirstChild("HumanoidRootPart")
if not hm or not hrp then return end
local state=hm:GetState()
if state==Enum.HumanoidStateType.Running or state==Enum.HumanoidStateType.RunningNoPhysics then
local params=RaycastParams.new()
params.FilterType=Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances={ch}
local moveDir=hm.MoveDirection
if moveDir.Magnitude>0 then
local ray=W:Raycast(hrp.Position, moveDir*3, params)
if ray then
ajDebounce=true
hm:ChangeState(Enum.HumanoidStateType.Jumping)
task.wait(0.4)
ajDebounce=false
end
end
end
end)
else
if ajC then ajC:Disconnect() ajC=nil end
ajDebounce=false
end
end)
mkLabel(MainPage,"CAMERA")
mkNum(MainPage,"FOV","fov",70,function(v) C.FieldOfView=v end)
local shiftLockOn=false
local shiftLockC
local ShiftCircle=Instance.new("Frame")
ShiftCircle.Size=UDim2.new(0,40,0,40)
ShiftCircle.Position=UDim2.new(1,-60,1,-180)
ShiftCircle.BackgroundColor3=Color3.fromRGB(0,0,0)
ShiftCircle.BackgroundTransparency=0.35
ShiftCircle.BorderSizePixel=0
ShiftCircle.Visible=false
ShiftCircle.ZIndex=300
ShiftCircle.Parent=SG
Instance.new("UICorner",ShiftCircle).CornerRadius=UDim.new(1,0)
local ShiftIcon=Instance.new("TextLabel", ShiftCircle)
ShiftIcon.Size=UDim2.new(1,0,1,0)
ShiftIcon.BackgroundTransparency=1
ShiftIcon.Text="🔒"
ShiftIcon.TextColor3=Color3.fromRGB(255,255,255)
ShiftIcon.TextSize=20
ShiftIcon.Font=Enum.Font.GothamBold
ShiftIcon.ZIndex=302
local ShiftClick=Instance.new("TextButton", ShiftCircle)
ShiftClick.Size=UDim2.new(1,0,1,0)
ShiftClick.BackgroundTransparency=1
ShiftClick.Text=""
ShiftClick.ZIndex=303
ShiftClick.MouseButton1Click:Connect(function()
if keybindTargets["Shift Lock (Mobile)"] then
local cur=_G.richieToggleState and _G.richieToggleState["Shift Lock (Mobile)"]
if cur==nil then cur=false end
local newState=not cur
_G.richieToggleState["Shift Lock (Mobile)"]=newState
keybindTargets["Shift Lock (Mobile)"].setState(newState)
if keybindTargets["Shift Lock (Mobile)"].onChange then
keybindTargets["Shift Lock (Mobile)"].onChange(newState)
end
end
end)
local PCLock = Instance.new("Frame")
PCLock.Size = UDim2.new(0, 16, 0, 16)
PCLock.Position = UDim2.new(0.5, -8, 0.5, -8)
PCLock.BackgroundColor3 = Color3.fromRGB(0,0,0)
PCLock.BackgroundTransparency = 0.3
PCLock.BorderSizePixel = 0
PCLock.ZIndex = 200
PCLock.Visible = false
PCLock.Parent = SG
Instance.new("UICorner", PCLock).CornerRadius = UDim.new(1, 0)
local PCLockDot = Instance.new("Frame", PCLock)
PCLockDot.Size = UDim2.new(0, 5, 0, 5)
PCLockDot.Position = UDim2.new(0.5, -2.5, 0.5, -2.5)
PCLockDot.BackgroundColor3 = Color3.fromRGB(255,255,255)
PCLockDot.BorderSizePixel = 0
PCLockDot.ZIndex = 201
Instance.new("UICorner", PCLockDot).CornerRadius = UDim.new(1, 0)
mkTog(MainPage,"Shift Lock (Mobile)",function(on)
shiftLockOn=on
ShiftCircle.Visible=on
PCLock.Visible=on
if on then
shiftLockC=R.RenderStepped:Connect(function()
if not shiftLockOn then return end
local ch=LP.Character
if ch and ch:FindFirstChild("Humanoid") and ch:FindFirstChild("HumanoidRootPart") then
local camLook = C.CFrame.LookVector
local flatLook = Vector3.new(camLook.X, 0, camLook.Z)
if flatLook.Magnitude > 0 then
ch.HumanoidRootPart.CFrame = CFrame.new(ch.HumanoidRootPart.Position, ch.HumanoidRootPart.Position + flatLook.Unit)
end
end
end)
else
if shiftLockC then shiftLockC:Disconnect() shiftLockC=nil end
end
end)
mkTog(MainPage,"Infinite Zoom",function(on)
if on then
LP.CameraMaxZoomDistance = math.huge
LP.CameraMinZoomDistance = 0.5
else
LP.CameraMaxZoomDistance = 128
LP.CameraMinZoomDistance = 0.5
end
end)
mkLabel(MainPage,"PLAYER")
mkTog(MainPage,"Infinite Jump",function(on)
if on then
_G.richieIJ=U.JumpRequest:Connect(function()
local ch=LP.Character
if ch and ch:FindFirstChild("Humanoid") then
ch.Humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
end)
else
if _G.richieIJ then _G.richieIJ:Disconnect() _G.richieIJ=nil end
end
end)
mkTog(MainPage,"Noclip",function(on)
if on then
_G.richieNoclip=R.Stepped:Connect(function()
local ch=LP.Character
if ch then
for _,p in pairs(ch:GetDescendants()) do
if p:IsA("BasePart") and p.CanCollide then p.CanCollide=false end
end
end
end)
else
if _G.richieNoclip then _G.richieNoclip:Disconnect() _G.richieNoclip=nil end
local ch=LP.Character
if ch then
for _,p in pairs(ch:GetDescendants()) do
if p:IsA("BasePart") then p.CanCollide=true end
end
end
end
end)
mkTog(MainPage,"Anti-Sit",function(on)
if on then
_G.richieAntiSit=LP.CharacterAdded:Connect(function(ch)
task.wait(0.5)
local hm=ch:WaitForChild("Humanoid",5)
if hm then hm.Sit=false end
end)
if LP.Character then
local hm=LP.Character:FindFirstChild("Humanoid")
if hm then
_G.richieAntiSitBlock=R.Heartbeat:Connect(function()
if hm.Sit then hm.Sit=false end
end)
end
end
else
if _G.richieAntiSit then _G.richieAntiSit:Disconnect() _G.richieAntiSit=nil end
if _G.richieAntiSitBlock then _G.richieAntiSitBlock:Disconnect() _G.richieAntiSitBlock=nil end
end
end)
mkLabel(MainPage,"POSITIONS")
local posNameInput=mkInp(MainPage,"Enter position name...")
local savedPositions = {}
local posListFrame = Instance.new("Frame")
posListFrame.Size=UDim2.new(1,-6,0,0)
posListFrame.BackgroundColor3=Color3.fromRGB(30,30,36)
posListFrame.BackgroundTransparency=0.3
posListFrame.BorderSizePixel=0
posListFrame.Visible=false
posListFrame.Parent=MainPage
Instance.new("UICorner",posListFrame).CornerRadius=UDim.new(0,8)
local posList = Instance.new("UIListLayout",posListFrame)
posList.Padding=UDim.new(0,4)
posList.SortOrder=Enum.SortOrder.LayoutOrder
local function refreshPosList()
for _,c in pairs(posListFrame:GetChildren()) do
if c:IsA("TextButton") or c:IsA("Frame") then c:Destroy() end
end
if #savedPositions == 0 then
posListFrame.Visible=false
posListFrame.Size=UDim2.new(1,-6,0,0)
return
end
posListFrame.Visible=true
for i,entry in pairs(savedPositions) do
local row=Instance.new("Frame")
row.Size=UDim2.new(1,0,0,34)
row.BackgroundTransparency=1
row.LayoutOrder=i
row.Parent=posListFrame
local nameLbl=Instance.new("TextLabel")
nameLbl.Size=UDim2.new(0.4,0,1,0)
nameLbl.Position=UDim2.new(0,4,0,0)
nameLbl.BackgroundTransparency=1
nameLbl.Text=entry.name
nameLbl.TextColor3=Color3.fromRGB(200,200,200)
nameLbl.Font=Enum.Font.GothamBold
nameLbl.TextSize=12
nameLbl.TextXAlignment=Enum.TextXAlignment.Left
nameLbl.TextTruncate=Enum.TextTruncate.AtEnd
nameLbl.Parent=row
local tpBtn=Instance.new("TextButton")
tpBtn.Size=UDim2.new(0.28,0,1,0)
tpBtn.Position=UDim2.new(0.42,0,0,0)
tpBtn.BackgroundColor3=Color3.fromRGB(80,200,120)
tpBtn.Text="TP"
tpBtn.TextColor3=Color3.fromRGB(255,255,255)
tpBtn.Font=Enum.Font.GothamBold
tpBtn.TextSize=11
tpBtn.BorderSizePixel=0
tpBtn.Parent=row
Instance.new("UICorner",tpBtn).CornerRadius=UDim.new(0,6)
tpBtn.MouseButton1Click:Connect(function()
local ch=LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
ch.HumanoidRootPart.CFrame=entry.pos
end
end)
local delBtn=Instance.new("TextButton")
delBtn.Size=UDim2.new(0.28,0,1,0)
delBtn.Position=UDim2.new(0.72,0,0,0)
delBtn.BackgroundColor3=Color3.fromRGB(180,45,45)
delBtn.Text="Delete"
delBtn.TextColor3=Color3.fromRGB(255,255,255)
delBtn.Font=Enum.Font.GothamBold
delBtn.TextSize=11
delBtn.BorderSizePixel=0
delBtn.Parent=row
Instance.new("UICorner",delBtn).CornerRadius=UDim.new(0,6)
delBtn.MouseButton1Click:Connect(function()
table.remove(savedPositions, i)
refreshPosList()
end)
end
posListFrame.Size=UDim2.new(1,-6,0, 8 + #savedPositions * 38)
end
mkBtn(MainPage,"Save Position",function()
local name=posNameInput.Text
if not name or name=="" then
posNameInput.Text="Name required!"
return
end
local ch=LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
table.insert(savedPositions, {name=name, pos=ch.HumanoidRootPart.CFrame})
posNameInput.Text=""
refreshPosList()
end
end)
mkBtn(MainPage,"Show Positions",function()
posListFrame.Visible = not posListFrame.Visible
if posListFrame.Visible then refreshPosList() end
end)
mkLabel(MainPage,"FE INVISIBILITY")
local feInvisOn=false
local feInvisData=nil
local feInvisHeight=300
mkTog(MainPage,"FE Invisible (300 up)",function(on)
feInvisOn=on
if on then
local ch=getCh()
local hrp=ch:WaitForChild("HumanoidRootPart",5)
local torso=ch:FindFirstChild("Torso") or ch:FindFirstChild("UpperTorso")
local hm=ch:FindFirstChildOfClass("Humanoid")
if not hrp or not torso or not hm then
notify("Character not ready")
return
end
local savedCF=hrp.CFrame
local hiddenPos=savedCF.Position + Vector3.new(0, feInvisHeight, 0)
local seat=Instance.new("Seat")
seat.Name="RichieFEChair"
seat.Anchored=false
seat.CanCollide=false
seat.Transparency=1
seat.Size=Vector3.new(2,0.4,2)
seat.Position=hiddenPos
seat.Parent=W
local weld=Instance.new("Weld")
weld.Part0=seat
weld.Part1=torso
weld.Parent=seat
task.wait(0.05)
seat.CFrame=savedCF
task.wait(0.1)
feInvisData={seat=seat, savedCF=savedCF, hm=hm}
for _,p in pairs(ch:GetDescendants()) do
if p:IsA("BasePart") and p.Name~="HumanoidRootPart" then
p.Transparency=1
end
end
if hm then
hm.DisplayDistanceType=Enum.HumanoidDisplayDistanceType.None
end
notify("FE Invisible: ON")
else
if feInvisData and feInvisData.seat then
feInvisData.seat:Destroy()
end
local ch=LP.Character
if ch then
for _,p in pairs(ch:GetDescendants()) do
if p:IsA("BasePart") then
p.Transparency=0
end
end
local hm=ch:FindFirstChildOfClass("Humanoid")
if hm then
hm.DisplayDistanceType=Enum.HumanoidDisplayDistanceType.Viewer
end
end
feInvisData=nil
notify("FE Invisible: OFF")
end
end)
mkNum(MainPage,"FE Invis Height","feInvisHeight",300,function(v) feInvisHeight=v end)
mkLabel(MainPage,"CHARACTER CUSTOMIZER")
local origSizeCache = {}
local function cacheCharacter(ch)
if not ch then return end
origSizeCache[ch] = {}
for _,p in pairs(ch:GetDescendants()) do
if p:IsA("BasePart") then
origSizeCache[ch][p] = p.Size
end
end
end
if LP.Character then cacheCharacter(LP.Character) end
LP.CharacterAdded:Connect(function(ch)
task.wait(1)
cacheCharacter(ch)
end)
local function applySize(scale)
local ch = LP.Character
if not ch then return end
local hm = ch:FindFirstChildOfClass("Humanoid")
if not hm then return end
local isR15 = ch:FindFirstChild("UpperTorso") ~= nil
if isR15 then
hm.BodyDepthScale.Value = scale
hm.BodyHeightScale.Value = scale
hm.BodyWidthScale.Value = scale
hm.HeadScale.Value = scale
else
local cache = origSizeCache[ch]
if not cache then
cacheCharacter(ch)
cache = origSizeCache[ch]
end
for part, origSize in pairs(cache) do
if part and part.Parent then
part.Size = origSize * scale
end
end
end
end
local sizeRow = Instance.new("Frame")
sizeRow.Size = UDim2.new(1,-6,0,34)
sizeRow.BackgroundTransparency = 1
sizeRow.Parent = MainPage
local sizeLayout = Instance.new("UIListLayout", sizeRow)
sizeLayout.FillDirection = Enum.FillDirection.Horizontal
sizeLayout.Padding = UDim.new(0,4)
for _, preset in ipairs({{"Tiny",0.5},{"Normal",1},{"Big",1.5},{"Giant",2.5}}) do
local b = Instance.new("TextButton")
b.Size = UDim2.new(0.25,-3,1,0)
b.BackgroundColor3 = Color3.fromRGB(30,30,36)
b.BackgroundTransparency = 0.2
b.Text = preset[1]
b.TextColor3 = Color3.fromRGB(220,220,220)
b.Font = Enum.Font.GothamBold
b.TextSize = 12
b.BorderSizePixel = 0
b.AutoButtonColor = false
b.Parent = sizeRow
Instance.new("UICorner",b).CornerRadius = UDim.new(0,6)
b.MouseButton1Click:Connect(function()
T:Create(b,TweenInfo.new(0.1),{BackgroundColor3=Color3.fromRGB(80,200,120)}):Play()
task.wait(0.15)
T:Create(b,TweenInfo.new(0.15),{BackgroundColor3=Color3.fromRGB(30,30,36)}):Play()
applySize(preset[2])
notify("Size: "..preset[1])
end)
end
mkLabel(MainPage,"PROTECTION")
local antVoidOn=false
local antVoidC
mkTog(MainPage,"Anti-Void",function(on)
antVoidOn=on
if on then
antVoidC=R.Heartbeat:Connect(function()
if not antVoidOn then return end
local ch=LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
if ch.HumanoidRootPart.Position.Y < -50 then
ch.HumanoidRootPart.CFrame=CFrame.new(0,50,0)
end
end
end)
else
if antVoidC then antVoidC:Disconnect() antVoidC=nil end
end
end)
local selfAntiFlingOn=false
local selfAntiFlingC
mkTog(MainPage,"Anti-Fling (Self)",function(on)
selfAntiFlingOn=on
if on then
selfAntiFlingC=R.Heartbeat:Connect(function()
if not selfAntiFlingOn then return end
local ch=LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
local v=ch.HumanoidRootPart.Velocity
if v.Magnitude > 200 then
ch.HumanoidRootPart.Velocity=Vector3.new(0,0,0)
end
end
end)
else
if selfAntiFlingC then selfAntiFlingC:Disconnect() selfAntiFlingC=nil end
end
end)
local function teleportToMouse()
local ch=LP.Character
if not ch then return end
local hrp=ch:FindFirstChild("HumanoidRootPart")
if not hrp then return end
local mouse = LP:GetMouse()
if mouse and mouse.Hit then
hrp.CFrame = mouse.Hit + Vector3.new(0,3,0)
notify("Teleported")
else
notify("No mouse (PC only)")
end
end
local uiHidden=false
U.InputBegan:Connect(function(input, gp)
if gp then return end
if input.KeyCode == Enum.KeyCode.RightShift then
uiHidden = not uiHidden
M.Visible = not uiHidden
RestoreBtn.Visible = false
if uiHidden then
RestoreBtn.Position = UDim2.new(0,10,0,10)
RestoreBtn.Visible = true
end
end
end)
mkLabel(MainPage,"ACTIONS")
mkBtn(MainPage,"Reset Character",function()
local ch=LP.Character
if ch and ch:FindFirstChild("Humanoid") then ch.Humanoid.Health=0 end
end)
mkBtn(MainPage,"Rejoin Server",function()
game:GetService("TeleportService"):Teleport(game.PlaceId, LP)
end)
end
-- ============ COMBAT TAB ============
do
mkLabel(CombatPage,"AIM ASSIST")
local aimAssistOn = false
local aimFovCircleOn = false
local aimStrength = 50
local aimSmoothing = 30
local aimFov = 90
local aimBone = "Head"
local aimPriority = "Nearest"
local teamCheckOn = false
local wallCheckOn = false
local triggerBotOn = false
local triggerDelay = 0.1
local targetLockOn = false
local lockBone = "Head"
local holdKeyOn = false
local aimKeybind = Enum.KeyCode.RightAlt
local function getPlayerTeam(p)
return p.Team
end
local function isTeammate(p)
if not teamCheckOn then return false end
if not LP.Team then return false end
if not p.Team then return false end
return LP.Team == p.Team
end
local function getBodyPart(char, boneName)
if not char then return nil end
if boneName == "Head" then
return char:FindFirstChild("Head") or char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso")
else
return char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso") or char:FindFirstChild("Head")
end
end
local function isVisibleFromCamera(part)
if not wallCheckOn then return true end
if not part then return false end
local cam = C
local origin = cam.CFrame.Position
local targetPos = part.Position
local dir = (targetPos - origin)
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances = {LP.Character}
local result = W:Raycast(origin, dir, params)
if not result then return true end
return result.Instance:IsDescendantOf(part.Parent)
end
local function getPriorityPlayer(players)
if #players == 0 then return nil end
if aimPriority == "Nearest" then
local myHrp = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart")
if not myHrp then return players[1] end
local best, bestDist = nil, math.huge
for _, p in pairs(players) do
local hrp = p.Character and p.Character:FindFirstChild("HumanoidRootPart")
if hrp then
local d = (hrp.Position - myHrp.Position).Magnitude
if d < bestDist then best, bestDist = p, d end
end
end
return best
elseif aimPriority == "Lowest HP" then
local best, bestHP = nil, math.huge
for _, p in pairs(players) do
local hm = p.Character and p.Character:FindFirstChildOfClass("Humanoid")
if hm and hm.Health < bestHP then best, bestHP = p, hm.Health end
end
return best
elseif aimPriority == "Closest to Crosshair" then
local best, bestDist = nil, math.huge
local center = C.ViewportSize / 2
for _, p in pairs(players) do
local part = getBodyPart(p.Character, aimBone)
if part then
local sp, onScreen = C:WorldToViewportPoint(part.Position)
if onScreen then
local d = (Vector2.new(sp.X, sp.Y) - center).Magnitude
if d < bestDist then best, bestDist = p, d end
end
end
end
return best
end
return players[1]
end
local function getPlayersInFov()
local list = {}
local center = C.ViewportSize / 2
for _, p in pairs(P:GetPlayers()) do
if p ~= LP and p.Character then
if not isTeammate(p) then
local part = getBodyPart(p.Character, aimBone)
if part and isVisibleFromCamera(part) then
local sp, onScreen = C:WorldToViewportPoint(part.Position)
if onScreen then
local d = (Vector2.new(sp.X, sp.Y) - center).Magnitude
if d <= aimFov then
table.insert(list, p)
end
end
end
end
end
end
return list
end
local aimPredictionOn = false
local predictionAmount = 0.15
local aimAssistConn = nil
local function startAimAssist()
if aimAssistConn then aimAssistConn:Disconnect() end
aimAssistConn = R.RenderStepped:Connect(function()
if not aimAssistOn then return end
if holdKeyOn and not U:IsKeyDown(aimKeybind) then return end
local list = getPlayersInFov()
local target = getPriorityPlayer(list)
if target and target.Character then
local part = getBodyPart(target.Character, aimBone)
if part then
local camPos = C.CFrame.Position
local aimPos = part.Position
if aimPredictionOn then
local targetHrp = target.Character:FindFirstChild("HumanoidRootPart")
if targetHrp then
aimPos = aimPos + (targetHrp.Velocity * predictionAmount)
end
end
local desiredCF = CFrame.new(camPos, aimPos)
local strength = aimStrength / 100
local smooth = (100 - aimSmoothing) / 100
local tween = strength * smooth
C.CFrame = C.CFrame:Lerp(desiredCF, tween)
end
end
end)
end
mkTog(CombatPage,"Aim Assist",function(on)
aimAssistOn = on
if on then startAimAssist() notify("Aim Assist: ON") else notify("Aim Assist: OFF") end
end)
mkTog(CombatPage,"Hold Key to Aim",function(on)
holdKeyOn = on
notify("Hold to Aim: "..(on and "ON" or "OFF"))
end)
mkNum(CombatPage,"Aim Strength","aimStrength",50,function(v) aimStrength = math.clamp(v,0,100) end)
mkNum(CombatPage,"Aim Smoothing","aimSmoothing",30,function(v) aimSmoothing = math.clamp(v,0,100) end)
mkNum(CombatPage,"Aim FOV Radius","aimFov",90,function(v) aimFov = math.clamp(v,10,500) end)
mkTog(CombatPage,"Aim Prediction",function(on)
aimPredictionOn = on
notify("Aim Prediction: "..(on and "ON" or "OFF"))
end)
mkNum(CombatPage,"Prediction Amount","predictionAmount",0.15,function(v) predictionAmount = math.clamp(v,0,0.5) end)
-- Bone selector buttons
local boneRow = Instance.new("Frame")
boneRow.Size = UDim2.new(1,-6,0,34)
boneRow.BackgroundTransparency = 1
boneRow.Parent = CombatPage
local boneLayout = Instance.new("UIListLayout",boneRow)
boneLayout.FillDirection = Enum.FillDirection.Horizontal
boneLayout.Padding = UDim.new(0,4)
for _,opt in ipairs({"Head","Torso"}) do
local b = Instance.new("TextButton")
b.Size = UDim2.new(0.5,-2,1,0)
b.BackgroundColor3 = (aimBone==opt) and Color3.fromRGB(80,200,120) or Color3.fromRGB(30,30,36)
b.Text = "Aim: "..opt
b.TextColor3 = Color3.fromRGB(220,220,220)
b.Font = Enum.Font.GothamBold
b.TextSize = 12
b.BorderSizePixel = 0
b.AutoButtonColor = false
b.Parent = boneRow
Instance.new("UICorner",b).CornerRadius = UDim.new(0,6)
b.MouseButton1Click:Connect(function()
aimBone = opt
for _,c in pairs(boneRow:GetChildren()) do
if c:IsA("TextButton") then
c.BackgroundColor3 = (c.Text=="Aim: "..opt) and Color3.fromRGB(80,200,120) or Color3.fromRGB(30,30,36)
end
end
notify("Aim Bone: "..opt)
end)
end
-- Priority selector
local prioRow = Instance.new("Frame")
prioRow.Size = UDim2.new(1,-6,0,34)
prioRow.BackgroundTransparency = 1
prioRow.Parent = CombatPage
local prioLayout = Instance.new("UIListLayout",prioRow)
prioLayout.FillDirection = Enum.FillDirection.Horizontal
prioLayout.Padding = UDim.new(0,4)
for _,opt in ipairs({"Nearest","Lowest HP","Closest to Crosshair"}) do
local b = Instance.new("TextButton")
b.Size = UDim2.new(0.333,-3,1,0)
b.BackgroundColor3 = (aimPriority==opt) and Color3.fromRGB(80,200,120) or Color3.fromRGB(30,30,36)
b.Text = opt
b.TextColor3 = Color3.fromRGB(220,220,220)
b.Font = Enum.Font.GothamBold
b.TextSize = 10
b.BorderSizePixel = 0
b.AutoButtonColor = false
b.Parent = prioRow
Instance.new("UICorner",b).CornerRadius = UDim.new(0,6)
b.MouseButton1Click:Connect(function()
aimPriority = opt
for _,c in pairs(prioRow:GetChildren()) do
if c:IsA("TextButton") then
c.BackgroundColor3 = (c.Text==opt) and Color3.fromRGB(80,200,120) or Color3.fromRGB(30,30,36)
end
end
notify("Priority: "..opt)
end)
end
mkTog(CombatPage,"Team Check",function(on)
teamCheckOn = on
notify("Team Check: "..(on and "ON" or "OFF"))
end)
mkTog(CombatPage,"Wall Check",function(on)
wallCheckOn = on
notify("Wall Check: "..(on and "ON" or "OFF"))
end)
-- FOV Circle
local aimFovGui = Instance.new("ScreenGui")
aimFovGui.Name = "RichieAimFov"
aimFovGui.ResetOnSpawn = false
aimFovGui.IgnoreGuiInset = true
aimFovGui.Parent = pg
local aimFovCircle = Instance.new("Frame")
aimFovCircle.Size = UDim2.new(0,180,0,180)
aimFovCircle.Position = UDim2.new(0.5,-90,0.5,-90)
aimFovCircle.BackgroundTransparency = 1
aimFovCircle.Visible = false
aimFovCircle.Parent = aimFovGui
Instance.new("UICorner",aimFovCircle).CornerRadius = UDim.new(1,0)
local aimFovStroke = Instance.new("UIStroke",aimFovCircle)
aimFovStroke.Thickness = 2
aimFovStroke.Color = Color3.fromRGB(80,200,255)
aimFovStroke.Transparency = 0.3
mkTog(CombatPage,"Aim FOV Circle",function(on)
aimFovCircleOn = on
aimFovCircle.Visible = on
notify("Aim FOV Circle: "..(on and "ON" or "OFF"))
end)
task.spawn(function()
while true do
task.wait(0.1)
if aimFovCircleOn then
local sz = aimFov * 2
aimFovCircle.Size = UDim2.new(0,sz,0,sz)
aimFovCircle.Position = UDim2.new(0.5,-sz/2,0.5,-sz/2)
end
end
end)
-- Target Lock
local lockConn = nil
local function startLock()
if lockConn then lockConn:Disconnect() end
lockConn = R.RenderStepped:Connect(function()
if not targetLockOn then return end
local list = getPlayersInFov()
local target = getPriorityPlayer(list)
if target and target.Character then
local part = getBodyPart(target.Character, lockBone)
if part then
C.CFrame = CFrame.new(C.CFrame.Position, part.Position)
end
end
end)
end
mkTog(CombatPage,"Target Lock",function(on)
targetLockOn = on
if on then startLock() notify("Target Lock: ON") else notify("Target Lock: OFF") end
end)
-- Trigger Bot
local antiAimOn = false
local antiAimConn = nil
local antiAimSpeed = 0.05
local function startAntiAim()
if antiAimConn then antiAimConn:Disconnect() end
antiAimConn = R.RenderStepped:Connect(function()
if not antiAimOn then return end
local ch = LP.Character
if not ch then return end
local hrp = ch:FindFirstChild("HumanoidRootPart")
local neck = ch:FindFirstChild("Neck")
if not neck or not hrp then return end
if neck:IsA("Motor6D") then
local t = tick() * (1 / antiAimSpeed)
local jitter = math.sin(t) * 90
neck.C0 = CFrame.new(neck.C0.Position) * CFrame.Angles(0, math.rad(jitter), 0)
end
end)
end
local triggerConn = nil
local wasFiring = false
local lastShot = 0
local function startTriggerBot()
if triggerConn then triggerConn:Disconnect() end
triggerConn = R.RenderStepped:Connect(function()
if not triggerBotOn then return end
if tick() - lastShot < triggerDelay then return end
local viewportSize = C.ViewportSize
local screenCenter = viewportSize / 2
local list = getPlayersInFov()
local targetFound = false
for _, p in pairs(list) do
if p.Character then
local part = getBodyPart(p.Character, aimBone)
if part then
local sp, onScreen = C:WorldToViewportPoint(part.Position)
if onScreen then
local d = (Vector2.new(sp.X, sp.Y) - screenCenter).Magnitude
if d < 20 then
targetFound = true
local tool = LP.Character and LP.Character:FindFirstChildOfClass("Tool")
if tool then
pcall(function() tool:Activate() end)
lastShot = tick()
end
break
end
end
end
end
end
-- If no target under crosshair → release mouse to stop firing
if targetFound then
wasFiring = true
elseif wasFiring then
wasFiring = false
pcall(function()
local vu = game:GetService("VirtualUser")
vu:Button1Up(Vector2.new(0,0), C.CFrame)
end)
end
end)
end
mkTog(CombatPage,"Trigger Bot",function(on)
triggerBotOn = on
if not on then
if triggerConn then
triggerConn:Disconnect()
triggerConn = nil
end
end
end)
mkTog(CombatPage,"Anti-Aim",function(on)
antiAimOn = on
if on then startAntiAim() notify("Anti-Aim: ON") else notify("Anti-Aim: OFF") end
end)
mkNum(CombatPage,"Anti-Aim Speed","antiAimSpeed",0.05,function(v) antiAimSpeed = math.clamp(v,0.01,1) end)
-- Hitbox Expander (moved from Visuals)
mkLabel(CombatPage,"HITBOX")
local hitboxOn = false
local hitboxSize = 5
local hitboxConns = {}
local function restoreHitbox(p)
local char = p.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp and hrp:GetAttribute("RichieHitboxOrig") then
hrp.Size = hrp:GetAttribute("RichieHitboxOrig")
end
for _, part in pairs(char:GetDescendants()) do
if part:IsA("BasePart") and part:GetAttribute("RichieHitboxOrig") then
part.Size = part:GetAttribute("RichieHitboxOrig")
local masslessAttr = part:GetAttribute("RichieHitboxOrigMassless")
local canCollideAttr = part:GetAttribute("RichieHitboxOrigCanCollide")
if masslessAttr ~= nil then part.Massless = masslessAttr end
if canCollideAttr ~= nil then part.CanCollide = canCollideAttr end
end
end
end
local function applyHitbox(p)
if p == LP then return end
local char = p.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
if not hrp:GetAttribute("RichieHitboxOrig") then
hrp:SetAttribute("RichieHitboxOrig", hrp.Size)
end
hrp.Size = hrp:GetAttribute("RichieHitboxOrig") + Vector3.new(hitboxSize, hitboxSize, hitboxSize)
end
for _, part in pairs(char:GetDescendants()) do
if part:IsA("BasePart") and part ~= hrp and part.Name ~= "HumanoidRootPart" then
if not part:GetAttribute("RichieHitboxOrig") then
part:SetAttribute("RichieHitboxOrig", part.Size)
part:SetAttribute("RichieHitboxOrigMassless", part.Massless)
part:SetAttribute("RichieHitboxOrigCanCollide", part.CanCollide)
end
local orig = part:GetAttribute("RichieHitboxOrig")
part.Size = orig + Vector3.new(hitboxSize, hitboxSize, hitboxSize)
part.CanCollide = false
part.Massless = true
end
end
end
mkTog(CombatPage,"Hitbox Expander",function(on)
hitboxOn = on
for _, c in pairs(hitboxConns) do c:Disconnect() end
hitboxConns = {}
if on then
for _, p in pairs(P:GetPlayers()) do
if p ~= LP then
applyHitbox(p)
local c = p.CharacterAdded:Connect(function()
task.wait(0.5)
if hitboxOn then applyHitbox(p) end
end)
table.insert(hitboxConns, c)
end
end
local newConn = P.PlayerAdded:Connect(function(p)
local c = p.CharacterAdded:Connect(function()
task.wait(0.5)
if hitboxOn then applyHitbox(p) end
end)
table.insert(hitboxConns, c)
end)
table.insert(hitboxConns, newConn)
notify("Hitbox Expander: ON")
else
for _, p in pairs(P:GetPlayers()) do
if p ~= LP then restoreHitbox(p) end
end
notify("Hitbox Expander: OFF")
end
end)
mkNum(CombatPage,"Hitbox Size","hitboxSize",5,function(v)
hitboxSize = math.clamp(tonumber(v) or 5, 0, 50)
if hitboxOn then
for _, p in pairs(P:GetPlayers()) do
if p ~= LP then
restoreHitbox(p)
applyHitbox(p)
end
end
end
end)
local hitboxEspOn = false
local hitboxEspFolders = {}
local function updateHitboxEsp()
for p, folder in pairs(hitboxEspFolders) do
if not p.Character or not hitboxEspOn then
if folder then folder:Destroy() end
hitboxEspFolders[p] = nil
end
end
if not hitboxEspOn then return end
for _, p in pairs(P:GetPlayers()) do
if p ~= LP and p.Character then
local hrp = p.Character:FindFirstChild("HumanoidRootPart")
if hrp then
local folder = hitboxEspFolders[p]
if not folder or not folder.Parent then
folder = Instance.new("Folder")
folder.Name = "RichieHitboxEsp"
folder.Parent = W
local box = Instance.new("SelectionBox")
box.Name = "HitboxBox"
box.Color3 = Color3.fromRGB(255, 80, 80)
box.LineThickness = 0.05
box.Transparency = 0.3
box.Adornee = hrp
box.Parent = folder
hitboxEspFolders[p] = folder
end
local box = folder:FindFirstChild("HitboxBox")
if box then
box.Adornee = hrp
box.Visible = true
end
end
end
end
end
mkTog(CombatPage,"Hitbox ESP Preview",function(on)
hitboxEspOn = on
if not on then
for p, folder in pairs(hitboxEspFolders) do
if folder then folder:Destroy() end
end
hitboxEspFolders = {}
else
updateHitboxEsp()
end
notify("Hitbox ESP: "..(on and "ON" or "OFF"))
end)
task.spawn(function()
while true do
task.wait(0.5)
if hitboxEspOn then updateHitboxEsp() end
end
end)
_G.richieCombatCleanup = function()
if aimAssistConn then aimAssistConn:Disconnect() end
if lockConn then lockConn:Disconnect() end
if triggerConn then triggerConn:Disconnect() end
if antiAimConn then antiAimConn:Disconnect() end
for _, c in pairs(hitboxConns) do c:Disconnect() end
for _, folder in pairs(hitboxEspFolders) do if folder then folder:Destroy() end end
end
end
-- ============ VISUALS ============
do
local espColors = {
esp = {r=150, g=150, b=150},
box = {r=255, g=80, b=80},
name = {r=255, g=80, b=80},
dist = {r=80, g=255, b=80},
fov = {r=255, g=80, b=80},
skel = {r=255, g=255, b=255}
}
_G.richieEspColors = espColors
local function rgbC(t) return Color3.fromRGB(t.r, t.g, t.b) end
mkLabel(VisualsPage,"ESP")
local espOn=false
local espH={}
local espConns={}
local function addEspToPlayer(p)
if not espOn or p==LP or not p.Character then return end
if espH[p] and espH[p].Parent then return end
local char = p.Character
if not char:FindFirstChildWhichIsA("BasePart") then return end
local hl=Instance.new("Highlight")
local ec=_G.richieEspColors and _G.richieEspColors.esp; hl.FillColor=ec and Color3.fromRGB(ec.r,ec.g,ec.b) or Color3.fromRGB(150,150,150)
hl.OutlineColor=Color3.fromRGB(255,255,255)
hl.FillTransparency=0.5
hl.Adornee=char
hl.Parent=char
espH[p]=hl
end
mkTog(VisualsPage,"ESP (Grey)",function(on)
espOn=on
if on then
for _,p in pairs(P:GetPlayers()) do addEspToPlayer(p) end
for _,p in pairs(P:GetPlayers()) do
if p~=LP then
local c=p.CharacterAdded:Connect(function()
task.wait(0.5)
if espH[p] then espH[p]:Destroy() espH[p]=nil end
addEspToPlayer(p)
end)
table.insert(espConns,c)
end
end
local newConn=P.PlayerAdded:Connect(function(p)
local c=p.CharacterAdded:Connect(function()
task.wait(0.5) addEspToPlayer(p)
end)
table.insert(espConns,c)
end)
table.insert(espConns,newConn)
else
for _,c in pairs(espConns) do c:Disconnect() end
espConns={}
for _,hl in pairs(espH) do if hl then hl:Destroy() end end
espH={}
end
end)
local boxOn=false
local boxGuis={}
local boxConns={}
local function addBox(p)
if not boxOn or p==LP or not p.Character then return end
if boxGuis[p] and boxGuis[p].Parent then return end
local char = p.Character
local hrp = char:FindFirstChild("HumanoidRootPart")
or char:FindFirstChild("UpperTorso")
or char:FindFirstChild("Torso")
or char:FindFirstChildWhichIsA("BasePart")
if not hrp then return end
local bg=Instance.new("BillboardGui")
bg.Size=UDim2.new(0,40,0,60)
bg.AlwaysOnTop=true
bg.Adornee=hrp
bg.Parent=hrp
local fr=Instance.new("Frame")
fr.Size=UDim2.new(1,0,1,0)
fr.BackgroundTransparency=1
fr.Parent=bg
local stroke=Instance.new("UIStroke",fr)
stroke.Thickness=2
stroke.Color=Color3.fromRGB(255,80,80)
Instance.new("UICorner",fr).CornerRadius=UDim.new(0,6)
boxGuis[p]=bg
end
mkTog(VisualsPage,"Box ESP",function(on)
boxOn=on
if on then
for _,p in pairs(P:GetPlayers()) do addBox(p) end
for _,p in pairs(P:GetPlayers()) do
if p~=LP then
local c=p.CharacterAdded:Connect(function()
task.wait(0.5)
if boxGuis[p] then boxGuis[p]:Destroy() boxGuis[p]=nil end
addBox(p)
end)
table.insert(boxConns,c)
end
end
local newConn=P.PlayerAdded:Connect(function(p)
local c=p.CharacterAdded:Connect(function()
task.wait(0.5) addBox(p)
end)
table.insert(boxConns,c)
end)
table.insert(boxConns,newConn)
else
for _,c in pairs(boxConns) do c:Disconnect() end
boxConns={}
for _,bg in pairs(boxGuis) do if bg then bg:Destroy() end end
boxGuis={}
end
end)
local healthOn=false
local healthTags={}
local healthConns={}
local function addHealthTag(p)
if not healthOn or p==LP or not p.Character then return end
if healthTags[p] and healthTags[p].gui and healthTags[p].gui.Parent then return end
local char = p.Character
local hrp = char:FindFirstChild("HumanoidRootPart")
or char:FindFirstChild("UpperTorso")
or char:FindFirstChild("Torso")
or char:FindFirstChildWhichIsA("BasePart")
local hm=char:FindFirstChild("Humanoid") or char:FindFirstChildOfClass("Humanoid")
if not hrp or not hm then return end
local bg=Instance.new("BillboardGui")
bg.Size=UDim2.new(0,50,0,6)
bg.StudsOffset=Vector3.new(0,-3,0)
bg.AlwaysOnTop=true
bg.Adornee=hrp
bg.Parent=hrp
local fill=Instance.new("Frame")
fill.Size=UDim2.new(hm.Health/hm.MaxHealth,0,1,0)
fill.BackgroundColor3=Color3.fromRGB(80,255,80)
fill.BorderSizePixel=0
fill.Parent=bg
Instance.new("UICorner",fill).CornerRadius=UDim.new(1,0)
local hpChange=hm.HealthChanged:Connect(function(h)
fill.Size=UDim2.new(math.clamp(h/hm.MaxHealth,0,1),0,1,0)
if h/hm.MaxHealth<0.3 then
fill.BackgroundColor3=Color3.fromRGB(255,80,80)
elseif h/hm.MaxHealth<0.6 then
fill.BackgroundColor3=Color3.fromRGB(255,220,80)
else
fill.BackgroundColor3=Color3.fromRGB(80,255,80)
end
end)
healthTags[p]={gui=bg,conn=hpChange}
end
mkTog(VisualsPage,"Health Bar ESP",function(on)
healthOn=on
if on then
for _,p in pairs(P:GetPlayers()) do addHealthTag(p) end
for _,p in pairs(P:GetPlayers()) do
if p~=LP then
local c=p.CharacterAdded:Connect(function()
task.wait(0.5)
if healthTags[p] then
if healthTags[p].gui then healthTags[p].gui:Destroy() end
if healthTags[p].conn then healthTags[p].conn:Disconnect() end
healthTags[p]=nil
end
addHealthTag(p)
end)
table.insert(healthConns,c)
end
end
local newConn=P.PlayerAdded:Connect(function(p)
local c=p.CharacterAdded:Connect(function()
task.wait(0.5) addHealthTag(p)
end)
table.insert(healthConns,c)
end)
table.insert(healthConns,newConn)
else
for _,c in pairs(healthConns) do c:Disconnect() end
healthConns={}
for p,data in pairs(healthTags) do
if data.gui then data.gui:Destroy() end
if data.conn then data.conn:Disconnect() end
end
healthTags={}
end
end)
local fovCircleGui=Instance.new("ScreenGui")
fovCircleGui.Name="RichieFovCircle"
fovCircleGui.ResetOnSpawn=false
fovCircleGui.IgnoreGuiInset=true
fovCircleGui.Parent=pg
local fovCircle=Instance.new("Frame")
fovCircle.Size=UDim2.new(0,200,0,200)
fovCircle.Position=UDim2.new(0.5,-100,0.5,-100)
fovCircle.BackgroundTransparency=1
fovCircle.BorderSizePixel=0
fovCircle.Visible=false
fovCircle.Parent=fovCircleGui
Instance.new("UICorner",fovCircle).CornerRadius=UDim.new(1,0)
local fovStroke=Instance.new("UIStroke",fovCircle)
fovStroke.Thickness=2
fovStroke.Color=Color3.fromRGB(255,80,80)
fovStroke.Transparency=0.2
mkTog(VisualsPage,"FOV Circle",function(on)
fovStroke.Color = rgbC(espColors.fov)
fovCircle.Visible=on
end)
local skeletonOn=false
local skeletonData={}
local skeletonConns={}
local bones={
{"Head","UpperTorso"},
{"UpperTorso","LowerTorso"},
{"UpperTorso","LeftUpperArm"},
{"LeftUpperArm","LeftLowerArm"},
{"LeftLowerArm","LeftHand"},
{"UpperTorso","RightUpperArm"},
{"RightUpperArm","RightLowerArm"},
{"RightLowerArm","RightHand"},
{"LowerTorso","LeftUpperLeg"},
{"LeftUpperLeg","LeftLowerLeg"},
{"LeftLowerLeg","LeftFoot"},
{"LowerTorso","RightUpperLeg"},
{"RightUpperLeg","RightLowerLeg"},
{"RightLowerLeg","RightFoot"},
}
local bonesR6={
{"Head","Torso"},
{"Torso","Left Arm"},
{"Torso","Right Arm"},
{"Torso","Left Leg"},
{"Torso","Right Leg"},
}
local function addSkeleton(p)
if not skeletonOn or p==LP or not p.Character then return end
if skeletonData[p] then return end
local char=p.Character
local isR15 = char:FindFirstChild("UpperTorso") ~= nil
local boneList = isR15 and bones or bonesR6
local lines={}
for _=1,#boneList do
local line = Drawing.new("Line")
line.Visible=false
line.Color=rgbC(espColors.skel)
line.Thickness=1
line.Transparency=1
table.insert(lines, line)
end
skeletonData[p]={lines=lines, boneList=boneList}
end
task.spawn(function()
while true do
if skeletonOn then
local cam=C
for p,data in pairs(skeletonData) do
local char = p.Character
if char then
for i,bone in pairs(data.boneList) do
local part1=char:FindFirstChild(bone[1])
local part2=char:FindFirstChild(bone[2])
local line=data.lines[i]
if part1 and part2 and line then
local pos1,on1=cam:WorldToViewportPoint(part1.Position)
local pos2,on2=cam:WorldToViewportPoint(part2.Position)
if on1 and on2 and pos1.Z>0 and pos2.Z>0 then
line.From=Vector2.new(pos1.X, pos1.Y)
line.To=Vector2.new(pos2.X, pos2.Y)
line.Visible=true
else
line.Visible=false
end
elseif line then
line.Visible=false
end
end
end
end
end
task.wait()
end
end)
mkTog(VisualsPage,"Skeleton ESP",function(on)
skeletonOn=on
if on then
for _,p in pairs(P:GetPlayers()) do addSkeleton(p) end
for _,p in pairs(P:GetPlayers()) do
if p~=LP then
local c=p.CharacterAdded:Connect(function()
task.wait(0.5)
if skeletonData[p] then
for _,line in pairs(skeletonData[p].lines) do line:Remove() end
skeletonData[p]=nil
end
addSkeleton(p)
end)
table.insert(skeletonConns,c)
end
end
local newConn=P.PlayerAdded:Connect(function(p)
local c=p.CharacterAdded:Connect(function()
task.wait(0.5) addSkeleton(p)
end)
table.insert(skeletonConns,c)
end)
table.insert(skeletonConns,newConn)
else
for _,c in pairs(skeletonConns) do c:Disconnect() end
skeletonConns={}
for p,data in pairs(skeletonData) do
for _,line in pairs(data.lines) do line:Remove() end
end
skeletonData={}
end
end)
local colorPalette = {
{name="Red", r=255, g=0, b=0},
{name="Orange", r=255, g=140, b=0},
{name="Yellow", r=255, g=255, b=0},
{name="Lime", r=0, g=255, b=0},
{name="Green", r=0, g=180, b=0},
{name="Cyan", r=0, g=255, b=255},
{name="Sky Blue", r=80, g=180, b=255},
{name="Blue", r=0, g=80, b=255},
{name="Purple", r=140, g=0, b=255},
{name="Magenta", r=255, g=0, b=255},
{name="Pink", r=255, g=105, b=180},
{name="White", r=255, g=255, b=255},
{name="Grey", r=150, g=150, b=150},
{name="Dark Grey", r=60, g=60, b=60},
{name="Black", r=0, g=0, b=0},
}
local nameTags = {}
local distTags = {}
local waypointMarkers = {}
local function refreshEspColors()
for _, hl in pairs(espH) do
if hl and hl.Parent then hl.FillColor = rgbC(espColors.esp) end
end
for _, bg in pairs(boxGuis) do
if bg and bg.Parent then
local fr = bg:FindFirstChildOfClass("Frame")
local stroke = fr and fr:FindFirstChildOfClass("UIStroke")
if stroke then stroke.Color = rgbC(espColors.box) end
end
end
for _, bg in pairs(nameTags) do
if bg and bg.Parent then
local lbl = bg:FindFirstChildOfClass("TextLabel")
if lbl then lbl.TextColor3 = rgbC(espColors.name) end
end
end
if fovStroke then fovStroke.Color = rgbC(espColors.fov) end
for _, data in pairs(skeletonData) do
if data and data.lines then
for _, line in pairs(data.lines) do
pcall(function() line.Color = rgbC(espColors.skel) end)
end
end
end
end
local function mkColorPicker(parent, label, key)
local h = Instance.new("Frame")
h.Size = UDim2.new(1,-6,0,34)
h.BackgroundColor3 = Color3.fromRGB(30,30,36)
h.BackgroundTransparency = 0.3
h.BorderSizePixel = 0
h.Parent = parent
Instance.new("UICorner", h).CornerRadius = UDim.new(0,8)
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1,-80,1,0)
lbl.Position = UDim2.new(0,12,0,0)
lbl.BackgroundTransparency = 1
lbl.Text = label
lbl.TextColor3 = Color3.fromRGB(220,220,220)
lbl.Font = Enum.Font.GothamSemibold
lbl.TextSize = 12
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = h
local preview = Instance.new("Frame")
preview.Size = UDim2.new(0,24,0,24)
preview.Position = UDim2.new(1,-62,0.5,-12)
preview.BackgroundColor3 = rgbC(espColors[key])
preview.BorderSizePixel = 0
preview.Parent = h
Instance.new("UICorner", preview).CornerRadius = UDim.new(0,5)
local previewStroke = Instance.new("UIStroke", preview)
previewStroke.Thickness = 1
previewStroke.Color = Color3.fromRGB(80,80,80)
local arrow = Instance.new("TextLabel")
arrow.Size = UDim2.new(0,20,1,0)
arrow.Position = UDim2.new(1,-28,0,0)
arrow.BackgroundTransparency = 1
arrow.Text = "▶"
arrow.TextColor3 = Color3.fromRGB(80,200,120)
arrow.Font = Enum.Font.GothamBold
arrow.TextSize = 14
arrow.Parent = h
local clickBtn = Instance.new("TextButton")
clickBtn.Size = UDim2.new(1,0,1,0)
clickBtn.BackgroundTransparency = 1
clickBtn.Text = ""
clickBtn.Parent = h
local dropdown = Instance.new("Frame")
dropdown.Size = UDim2.new(1,-6,0, 12 + #colorPalette * 31)
dropdown.BackgroundColor3 = Color3.fromRGB(25,25,30)
dropdown.BackgroundTransparency = 0.2
dropdown.BorderSizePixel = 0
dropdown.Visible = false
dropdown.Parent = parent
Instance.new("UICorner", dropdown).CornerRadius = UDim.new(0,8)
local dList = Instance.new("UIListLayout", dropdown)
dList.Padding = UDim.new(0,3)
dList.SortOrder = Enum.SortOrder.LayoutOrder
local dPad = Instance.new("UIPadding", dropdown)
dPad.PaddingTop = UDim.new(0,6)
dPad.PaddingBottom = UDim.new(0,6)
dPad.PaddingLeft = UDim.new(0,6)
dPad.PaddingRight = UDim.new(0,6)
for i, c in ipairs(colorPalette) do
local row = Instance.new("TextButton")
row.Size = UDim2.new(1,0,0,28)
row.BackgroundColor3 = Color3.fromRGB(35,35,42)
row.BackgroundTransparency = 0.3
row.Text = ""
row.BorderSizePixel = 0
row.AutoButtonColor = false
row.LayoutOrder = i
row.Parent = dropdown
Instance.new("UICorner", row).CornerRadius = UDim.new(0,5)
local swatch = Instance.new("Frame")
swatch.Size = UDim2.new(0,18,0,18)
swatch.Position = UDim2.new(0,8,0.5,-9)
swatch.BackgroundColor3 = Color3.fromRGB(c.r, c.g, c.b)
swatch.BorderSizePixel = 0
swatch.Parent = row
Instance.new("UICorner", swatch).CornerRadius = UDim.new(0,4)
local swStroke = Instance.new("UIStroke", swatch)
swStroke.Thickness = 1
swStroke.Color = Color3.fromRGB(80,80,80)
local nameLbl = Instance.new("TextLabel")
nameLbl.Size = UDim2.new(1,-40,1,0)
nameLbl.Position = UDim2.new(0,34,0,0)
nameLbl.BackgroundTransparency = 1
nameLbl.Text = c.name
nameLbl.TextColor3 = Color3.fromRGB(220,220,220)
nameLbl.Font = Enum.Font.GothamSemibold
nameLbl.TextSize = 12
nameLbl.TextXAlignment = Enum.TextXAlignment.Left
nameLbl.Parent = row
row.MouseButton1Click:Connect(function()
espColors[key].r = c.r
espColors[key].g = c.g
espColors[key].b = c.b
savedValues["espColor_"..key.."_r"] = c.r
savedValues["espColor_"..key.."_g"] = c.g
savedValues["espColor_"..key.."_b"] = c.b
preview.BackgroundColor3 = Color3.fromRGB(c.r, c.g, c.b)
refreshEspColors()
end)
end
clickBtn.MouseButton1Click:Connect(function()
dropdown.Visible = not dropdown.Visible
arrow.Text = dropdown.Visible and "▼" or "▶"
end)
end
mkLabel(VisualsPage,"ESP COLORS")
mkColorPicker(VisualsPage, "ESP Color", "esp")
mkColorPicker(VisualsPage, "Box Color", "box")
mkColorPicker(VisualsPage, "Name Color", "name")
mkColorPicker(VisualsPage, "Distance Color", "dist")
mkColorPicker(VisualsPage, "Skeleton Color", "skel")
mkLabel(VisualsPage,"FOV CIRCLE")
mkNum(VisualsPage,"FOV Circle Size","fovSize",200,function(v)
local sz = math.clamp(v, 50, 800)
fovCircle.Size = UDim2.new(0, sz, 0, sz)
fovCircle.Position = UDim2.new(0.5, -sz/2, 0.5, -sz/2)
end)
mkColorPicker(VisualsPage, "FOV Circle Color", "fov")
mkLabel(VisualsPage,"NAMES")
local nameEspOn=false
nameTags={}
local nameConns={}
local function addNameTag(p)
if not nameEspOn or p==LP or not p.Character then return end
if nameTags[p] and nameTags[p].Parent then return end
local char = p.Character
local head = char:FindFirstChild("Head")
or char:FindFirstChild("UpperTorso")
or char:FindFirstChild("Torso")
or char:FindFirstChild("HumanoidRootPart")
or char:FindFirstChildWhichIsA("BasePart")
if not head then return end
local bg=Instance.new("BillboardGui")
bg.Size=UDim2.new(0,200,0,30)
bg.StudsOffset=Vector3.new(0,3,0)
bg.AlwaysOnTop=true
bg.Adornee=head
bg.Parent=head
local lbl=Instance.new("TextLabel")
lbl.Size=UDim2.new(1,0,1,0)
lbl.BackgroundTransparency=1
lbl.Text=p.Name
lbl.TextColor3=rgbC(espColors.name)
lbl.TextStrokeTransparency=0
lbl.Font=Enum.Font.GothamBold
lbl.TextSize=14
lbl.Parent=bg
nameTags[p]=bg
end
mkTog(VisualsPage,"Name ESP",function(on)
nameEspOn=on
if on then
for _,p in pairs(P:GetPlayers()) do addNameTag(p) end
for _,p in pairs(P:GetPlayers()) do
if p~=LP then
local c=p.CharacterAdded:Connect(function()
task.wait(0.5)
if nameTags[p] then nameTags[p]:Destroy() nameTags[p]=nil end
addNameTag(p)
end)
table.insert(nameConns,c)
end
end
local newConn=P.PlayerAdded:Connect(function(p)
local c=p.CharacterAdded:Connect(function()
task.wait(0.5) addNameTag(p)
end)
table.insert(nameConns,c)
end)
table.insert(nameConns,newConn)
else
for _,c in pairs(nameConns) do c:Disconnect() end
nameConns={}
for _,bg in pairs(nameTags) do if bg then bg:Destroy() end end
nameTags={}
end
end)
local distOn=false
distTags={}
local distConns={}
local function addDistTag(p)
if not distOn or p==LP or not p.Character then return end
if distTags[p] and distTags[p].gui and distTags[p].gui.Parent then return end
local char = p.Character
local head = char:FindFirstChild("Head")
or char:FindFirstChild("UpperTorso")
or char:FindFirstChild("Torso")
or char:FindFirstChild("HumanoidRootPart")
or char:FindFirstChildWhichIsA("BasePart")
if not head then return end
local bg=Instance.new("BillboardGui")
bg.Size=UDim2.new(0,150,0,20)
bg.StudsOffset=Vector3.new(0,4,0)
bg.AlwaysOnTop=true
bg.Adornee=head
bg.Parent=head
local lbl=Instance.new("TextLabel")
lbl.Size=UDim2.new(1,0,1,0)
lbl.BackgroundTransparency=1
lbl.Text="0 studs"
lbl.TextColor3=rgbC(espColors.dist)
lbl.TextStrokeTransparency=0
lbl.Font=Enum.Font.GothamBold
lbl.TextSize=12
lbl.Parent=bg
distTags[p]={gui=bg,label=lbl}
end
task.spawn(function()
while true do
if distOn then
local myHrp=LP.Character and LP.Character:FindFirstChild("HumanoidRootPart")
if myHrp then
for p,data in pairs(distTags) do
if data.gui and data.gui.Parent and p.Character then
local tHrp = p.Character:FindFirstChild("HumanoidRootPart") or p.Character:FindFirstChild("UpperTorso") or p.Character:FindFirstChild("Torso") or p.Character:FindFirstChildWhichIsA("BasePart")
if tHrp then
local d=math.floor((myHrp.Position-tHrp.Position).Magnitude)
data.label.Text=d.." studs"
end
end
end
end
end
task.wait(0.2)
end
end)
mkTog(VisualsPage,"Distance ESP",function(on)
distOn=on
if on then
for _,p in pairs(P:GetPlayers()) do addDistTag(p) end
for _,p in pairs(P:GetPlayers()) do
if p~=LP then
local c=p.CharacterAdded:Connect(function()
task.wait(0.5)
if distTags[p] and distTags[p].gui then distTags[p].gui:Destroy() end
distTags[p]=nil
addDistTag(p)
end)
table.insert(distConns,c)
end
end
local newConn=P.PlayerAdded:Connect(function(p)
local c=p.CharacterAdded:Connect(function()
task.wait(0.5) addDistTag(p)
end)
table.insert(distConns,c)
end)
table.insert(distConns,newConn)
else
for _,c in pairs(distConns) do c:Disconnect() end
distConns={}
for _,data in pairs(distTags) do if data.gui then data.gui:Destroy() end end
distTags={}
end
end)
mkLabel(VisualsPage,"WAYPOINT")
local waypointPos = nil
local waypoints = {}
local wpInput = mkInp(VisualsPage,"Enter waypoint name...")
local wpListFrame = Instance.new("Frame")
wpListFrame.Size = UDim2.new(1,-6,0,0)
wpListFrame.BackgroundColor3 = Color3.fromRGB(30,30,36)
wpListFrame.BackgroundTransparency = 0.3
wpListFrame.BorderSizePixel = 0
wpListFrame.Visible = false
wpListFrame.Parent = VisualsPage
Instance.new("UICorner",wpListFrame).CornerRadius = UDim.new(0,8)
local wpList = Instance.new("UIListLayout",wpListFrame)
wpList.Padding = UDim.new(0,4)
wpList.SortOrder = Enum.SortOrder.LayoutOrder
local function refreshWpList()
for _,c in pairs(wpListFrame:GetChildren()) do
if c:IsA("TextButton") or c:IsA("Frame") then c:Destroy() end
end
if #waypoints == 0 then
wpListFrame.Visible = false
wpListFrame.Size = UDim2.new(1,-6,0,0)
return
end
wpListFrame.Visible = true
for i,entry in pairs(waypoints) do
local row = Instance.new("Frame")
row.Size = UDim2.new(1,0,0,34)
row.BackgroundTransparency = 1
row.LayoutOrder = i
row.Parent = wpListFrame
local nameLbl = Instance.new("TextLabel")
nameLbl.Size = UDim2.new(0.4,0,1,0)
nameLbl.Position = UDim2.new(0,4,0,0)
nameLbl.BackgroundTransparency = 1
nameLbl.Text = entry.name
nameLbl.TextColor3 = Color3.fromRGB(200,200,200)
nameLbl.Font = Enum.Font.GothamBold
nameLbl.TextSize = 12
nameLbl.TextXAlignment = Enum.TextXAlignment.Left
nameLbl.TextTruncate = Enum.TextTruncate.AtEnd
nameLbl.Parent = row
local tpBtn = Instance.new("TextButton")
tpBtn.Size = UDim2.new(0.42,0,1,0)
tpBtn.Position = UDim2.new(0.42,0,0,0)
tpBtn.BackgroundColor3 = Color3.fromRGB(80,200,120)
tpBtn.Text = "TP"
tpBtn.TextColor3 = Color3.fromRGB(255,255,255)
tpBtn.Font = Enum.Font.GothamBold
tpBtn.TextSize = 11
tpBtn.BorderSizePixel = 0
tpBtn.Parent = row
Instance.new("UICorner",tpBtn).CornerRadius = UDim.new(0,6)
tpBtn.MouseButton1Click:Connect(function()
local ch=LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
ch.HumanoidRootPart.CFrame = entry.pos
end
end)
local delBtn = Instance.new("TextButton")
delBtn.Size = UDim2.new(0.14,0,1,0)
delBtn.Position = UDim2.new(0.86,0,0,0)
delBtn.BackgroundColor3 = Color3.fromRGB(180,45,45)
delBtn.Text = "×"
delBtn.TextColor3 = Color3.fromRGB(255,255,255)
delBtn.Font = Enum.Font.GothamBold
delBtn.TextSize = 14
delBtn.BorderSizePixel = 0
delBtn.Parent = row
Instance.new("UICorner",delBtn).CornerRadius = UDim.new(0,6)
delBtn.MouseButton1Click:Connect(function()
local removed = waypoints[i]
table.remove(waypoints, i)
if removed and removeMarker then removeMarker(removed) end
refreshWpList()
end)
end
wpListFrame.Size = UDim2.new(1,-6,0, 8 + #waypoints * 38)
end
mkBtn(VisualsPage,"Save Waypoint",function()
local name = wpInput.Text
if not name or name=="" then
wpInput.Text = "Name required!"
return
end
local ch = LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
local entry = {name=name, pos=ch.HumanoidRootPart.CFrame}
table.insert(waypoints, entry)
if createMarker then createMarker(entry) end
wpInput.Text = ""
refreshWpList()
notify("Waypoint saved: "..name)
end
end)
mkBtn(VisualsPage,"Show/Hide Waypoints",function()
wpListFrame.Visible = not wpListFrame.Visible
if wpListFrame.Visible then refreshWpList() end
end)
-- Forward declare markers
function createMarker(entry) end
_G.richieVisualsCleanup = function()
for _, c in pairs(espConns) do pcall(function() c:Disconnect() end) end
for _, hl in pairs(espH) do if hl then pcall(function() hl:Destroy() end) end end
for _, c in pairs(boxConns) do pcall(function() c:Disconnect() end) end
for _, bg in pairs(boxGuis) do if bg then pcall(function() bg:Destroy() end) end end
for _, c in pairs(healthConns) do pcall(function() c:Disconnect() end) end
for _, d in pairs(healthTags) do
if d.gui then pcall(function() d.gui:Destroy() end) end
if d.conn then pcall(function() d.conn:Disconnect() end) end
end
for _, c in pairs(nameConns) do pcall(function() c:Disconnect() end) end
for _, bg in pairs(nameTags) do if bg then pcall(function() bg:Destroy() end) end end
for _, c in pairs(distConns) do pcall(function() c:Disconnect() end) end
for _, d in pairs(distTags) do if d.gui then pcall(function() d.gui:Destroy() end) end end
for _, c in pairs(skeletonConns) do pcall(function() c:Disconnect() end) end
for _, data in pairs(skeletonData) do
if data and data.lines then
for _, line in pairs(data.lines) do pcall(function() line:Remove() end) end
end
end
for entry, m in pairs(waypointMarkers) do
if m.billboard then pcall(function() m.billboard:Destroy() end) end
if m.sphere then pcall(function() m.sphere:Destroy() end) end
end
pcall(function() aimFovGui:Destroy() end)
pcall(function() fovCircleGui:Destroy() end)
end
function removeMarker(entry) end
-- Floating Waypoint Markers
waypointMarkers = {}
function createMarker(entry)
local billboard = Instance.new("BillboardGui")
billboard.Size = UDim2.new(0, 100, 0, 60)
billboard.AlwaysOnTop = true
billboard.Adornee = nil
billboard.Parent = SG
local container = Instance.new("Frame", billboard)
container.Size = UDim2.new(1,0,1,0)
container.BackgroundTransparency = 1
local dot = Instance.new("Frame", container)
dot.Size = UDim2.new(0, 10, 0, 10)
dot.Position = UDim2.new(0.5, -5, 0, 0)
dot.BackgroundColor3 = Color3.fromRGB(80, 200, 255)
dot.BorderSizePixel = 0
dot.ZIndex = 5
Instance.new("UICorner", dot).CornerRadius = UDim.new(1,0)
local dotStroke = Instance.new("UIStroke", dot)
dotStroke.Color = Color3.fromRGB(255,255,255)
dotStroke.Thickness = 2
local arrow = Instance.new("TextLabel", container)
arrow.Size = UDim2.new(0, 40, 0, 30)
arrow.Position = UDim2.new(0.5, -20, 0, 15)
arrow.BackgroundTransparency = 1
arrow.Text = "▼"
arrow.TextColor3 = Color3.fromRGB(80, 200, 255)
arrow.TextSize = 30
arrow.Font = Enum.Font.GothamBold
arrow.ZIndex = 4
local arrowStroke = Instance.new("UIStroke", arrow)
arrowStroke.Color = Color3.fromRGB(255,255,255)
arrowStroke.Thickness = 1.5
arrowStroke.Transparency = 0.3
local distLabel = Instance.new("TextLabel", container)
distLabel.Size = UDim2.new(1, 0, 0, 20)
distLabel.Position = UDim2.new(0, 0, 0, 45)
distLabel.BackgroundTransparency = 1
distLabel.Text = "0m"
distLabel.TextColor3 = Color3.fromRGB(255,255,255)
distLabel.TextStrokeTransparency = 0
distLabel.Font = Enum.Font.GothamBold
distLabel.TextSize = 14
local nameLabel = Instance.new("TextLabel", container)
nameLabel.Size = UDim2.new(1, 0, 0, 16)
nameLabel.Position = UDim2.new(0, 0, 0, -18)
nameLabel.BackgroundTransparency = 1
nameLabel.Text = entry.name
nameLabel.TextColor3 = Color3.fromRGB(200, 230, 255)
nameLabel.TextStrokeTransparency = 0
nameLabel.Font = Enum.Font.GothamSemibold
nameLabel.TextSize = 12
local sphere = Instance.new("Part")
sphere.Shape = Enum.PartType.Ball
sphere.Size = Vector3.new(1, 1, 1)
sphere.Anchored = true
sphere.CanCollide = false
sphere.Material = Enum.Material.Neon
sphere.Color = Color3.fromRGB(80, 200, 255)
sphere.Transparency = 0.3
sphere.Position = entry.pos.Position
sphere.Parent = W
waypointMarkers[entry] = {
billboard = billboard,
arrow = arrow,
dot = dot,
distLabel = distLabel,
nameLabel = nameLabel,
sphere = sphere
}
end
function removeMarker(entry)
local m = waypointMarkers[entry]
if m then
if m.billboard then m.billboard:Destroy() end
if m.sphere then m.sphere:Destroy() end
waypointMarkers[entry] = nil
end
end
task.spawn(function()
while true do
local myHrp = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart")
if myHrp then
for entry, m in pairs(waypointMarkers) do
if m.billboard and m.billboard.Parent then
local pos = entry.pos.Position
local dist = (myHrp.Position - pos).Magnitude
local meters = math.floor(dist / 3.28)
m.billboard.Adornee = m.sphere
m.distLabel.Text = meters.."m"
local scale = math.clamp(meters / 100, 0.7, 2.5)
m.billboard.Size = UDim2.new(0, 100 * scale, 0, 60 * scale)
m.arrow.TextSize = math.clamp(30 * scale, 20, 60)
m.distLabel.TextSize = math.clamp(14 * scale, 10, 24)
if meters < 3 then
m.billboard.Enabled = false
else
m.billboard.Enabled = true
end
end
end
end
task.wait(0.05)
end
end)
end
-- ============ WORLD ============
do
mkLabel(WorldPage,"LIGHTING")
mkTog(WorldPage,"Fullbright",function(on)
if on then
L.Ambient=Color3.fromRGB(180,180,180)
L.OutdoorAmbient=Color3.fromRGB(180,180,180)
L.Brightness=2
L.FogEnd=1e6
else
L.Ambient=origAmb
L.OutdoorAmbient=origOutdoor
L.Brightness=origBright
L.FogEnd=origFogEnd
end
end)
mkTog(WorldPage,"No Fog",function(on)
if on then
L.FogStart=0
L.FogEnd=1e9
local atm=L:FindFirstChildOfClass("Atmosphere")
if atm then
atm.Density=0
atm.Haze=0
atm.Glare=0
end
else
L.FogStart=origFogStart
L.FogEnd=origFogEnd
end
end)
mkNum(WorldPage,"Time of Day","time",14,function(v) L.ClockTime=v end)
mkLabel(WorldPage,"SERVER")
mkBtn(WorldPage,"Server Hop",function()
local TS=game:GetService("TeleportService")
local HS=game:GetService("HttpService")
local placeId=game.PlaceId
local url="https://games.roblox.com/v1/games/"..placeId.."/servers/Public?sortOrder=Asc&limit=100"
local ok,response=pcall(function() return HS:JSONDecode(game:HttpGet(url)) end)
if not ok or not response or not response.data then
notify("Server hop failed")
return
end
local servers={}
for _,s in pairs(response.data) do
if s.playing < s.maxPlayers and s.id ~= game.JobId then
table.insert(servers, s.id)
end
end
if #servers == 0 then
notify("No servers found")
return
end
local picked=servers[math.random(1,#servers)]
notify("Hopping server...")
task.wait(0.5)
pcall(function() TS:TeleportToPlaceInstance(placeId, picked, LP) end)
end)
mkLabel(WorldPage,"PLAYER NOTIFIER")
local notifierAllOn = false
local trackedIds = {}
mkTog(WorldPage,"Notifier (All Players)",function(on)
notifierAllOn = on
notify("Player Notifier: "..(on and "ON" or "OFF"))
end)
P.PlayerAdded:Connect(function(p)
if p == LP then return end
task.wait(0.3)
if notifierAllOn then
notifyGreen(p.Name.." has joined the server")
end
if trackedIds[p.UserId] then
trackedIds[p.UserId] = nil
notifyGreen(p.Name.." has joined back")
end
end)
P.PlayerRemoving:Connect(function(p)
if p == LP then return end
local isTracked = false
if _G.richieTarget == p then isTracked = true end
local ms = _G.richieMultiSelected
if ms and ms[p] then isTracked = true end
if isTracked then
trackedIds[p.UserId] = true
notifyRed(p.Name.." has left the server")
elseif notifierAllOn then
notifyRed(p.Name.." has left the server")
end
end)
mkLabel(WorldPage,"AUTO-REJOIN")
local arSavedJob = nil
local arSavedPlace = nil
local arOn = false
mkTog(WorldPage,"Auto-Rejoin on Disconnect",function(on)
arOn = on
if on then
arSavedJob = game.JobId
arSavedPlace = game.PlaceId
pcall(function()
if queue_on_teleport then
queue_on_teleport([[
task.wait(3)
local TS = game:GetService("TeleportService")
local job = "]]..arSavedJob..[["
if job and job ~= "" then
TS:TeleportToPlaceInstance(]]..arSavedPlace..[[, job, game:GetService("Players").LocalPlayer)
end
]])
end
end)
notify("Auto-Rejoin: ON")
else
notify("Auto-Rejoin: OFF")
end
end)
mkBtn(WorldPage,"Rejoin Same Server",function()
local job = arSavedJob or game.JobId
local place = arSavedPlace or game.PlaceId
notify("Rejoining same server...")
task.wait(0.5)
pcall(function()
game:GetService("TeleportService"):TeleportToPlaceInstance(place, job, LP)
end)
end)
mkLabel(WorldPage,"PHYSICS")
mkNum(WorldPage,"Gravity","grav",196,function(v) W.Gravity=v end)
mkTog(WorldPage,"Low Gravity",function(on)
if on then
W.Gravity=50
else
W.Gravity=origGrav
end
end)
mkTog(WorldPage,"Anti-Kick",function(on)
if on then
_G.richieAntiKick=LP.OnTeleport:Connect(function() end)
local oldKick
pcall(function()
oldKick=hookfunction(LP.Kick, function(self, reason)
notify("Kick blocked: "..tostring(reason))
end)
end)
if not oldKick then
for _,v in pairs(game:GetService("ReplicatedStorage"):GetDescendants()) do
if v:IsA("RemoteEvent") and v.Name:lower():find("kick") then
pcall(function() v.OnClientEvent:Connect(function() end) end)
end
end
end
else
if _G.richieAntiKick then _G.richieAntiKick:Disconnect() _G.richieAntiKick=nil end
end
end)
mkLabel(WorldPage,"EFFECTS")
mkTog(WorldPage,"Anti-Fling",function(on)
if on then
_G.richieAntiFling=R.Heartbeat:Connect(function()
local ch=LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
local v=ch.HumanoidRootPart.Velocity
if v.Magnitude > 500 then
ch.HumanoidRootPart.Velocity=Vector3.new(0,0,0)
end
end
end)
else
if _G.richieAntiFling then _G.richieAntiFling:Disconnect() _G.richieAntiFling=nil end
end
end)
mkTog(WorldPage,"Freeze Self",function(on)
if on then
_G.richieFreeze=R.Heartbeat:Connect(function()
local ch=LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
ch.HumanoidRootPart.Anchored=true
end
end)
else
if _G.richieFreeze then _G.richieFreeze:Disconnect() _G.richieFreeze=nil end
local ch=LP.Character
if ch and ch:FindFirstChild("HumanoidRootPart") then
ch.HumanoidRootPart.Anchored=false
end
end
end)
end
do
mkLabel(WorldPage,"WEATHER (Can Cause lag and fps drops)")
local weatherInstances = {}
local weatherConn = nil
local weatherParts = {}
local weatherPartSpeed = 0
local weatherPartSway = false
local thunderActive = false
local rainSound = nil
local function track(inst)
table.insert(weatherInstances, inst)
return inst
end
local function spawnLightningBolt(basePos)
local boltFolder = Instance.new("Folder")
boltFolder.Name = "RichieBolt"
boltFolder.Parent = W
track(boltFolder)
local startPos = basePos + Vector3.new(math.random(-120,120), 260, math.random(-120,120))
local endPos = basePos + Vector3.new(math.random(-40,40), 25, math.random(-40,40))
local segments = 14
local points = {}
for i = 0, segments do
local t = i / segments
local pos = startPos:Lerp(endPos, t)
if i > 0 and i < segments then
pos = pos + Vector3.new(math.random(-8,8), 0, math.random(-8,8))
end
table.insert(points, pos)
end
for i = 1, #points - 1 do
local p1 = points[i]
local p2 = points[i+1]
local mid = (p1 + p2) / 2
local dist = (p2 - p1).Magnitude
local seg = Instance.new("Part")
seg.Anchored = true
seg.CanCollide = false
seg.CanQuery = false
seg.Material = Enum.Material.Neon
seg.Color = Color3.fromRGB(230,230,255)
seg.Size = Vector3.new(0.6, 0.6, dist)
seg.CFrame = CFrame.lookAt(mid, p2)
seg.Parent = boltFolder
end
task.delay(0.25, function()
if boltFolder and boltFolder.Parent then boltFolder:Destroy() end
end)
end
local function stopWeather()
thunderActive = false
if weatherConn then weatherConn:Disconnect() weatherConn=nil end
for _, inst in pairs(weatherInstances) do
if inst and inst.Parent then
pcall(function()
if inst:IsA("ParticleEmitter") then inst:Clear() end
inst:Destroy()
end)
end
end
weatherInstances = {}
weatherParts = {}
weatherPartSpeed = 0
weatherPartSway = false
if rainSound then rainSound:Stop() rainSound:Destroy() rainSound=nil end
L.FogStart = origFogStart
L.FogEnd = origFogEnd
L.FogColor = Color3.fromRGB(192,192,192)
L.Brightness = origBright
local atm = L:FindFirstChildOfClass("Atmosphere")
if atm then atm.Density = 0.3 atm.Haze = 0 end
end
local function buildRain(hrp, count, isSnow)
local folder = Instance.new("Folder")
folder.Name = isSnow and "RichieSnow" or "RichieRain"
folder.Parent = W
track(folder)
local base = hrp.Position
for i = 1, count do
local p = Instance.new("Part")
if isSnow then
p.Shape = Enum.PartType.Ball
p.Size = Vector3.new(0.5, 0.5, 0.5)
p.Color = Color3.fromRGB(255,255,255)
p.Material = Enum.Material.SmoothPlastic
p.Transparency = 0.15
else
p.Size = Vector3.new(0.15, 0.15, 3)
p.Orientation = Vector3.new(90, 0, 0)
p.Color = Color3.fromRGB(180,200,255)
p.Material = Enum.Material.Neon
p.Transparency = 0.35
end
p.Anchored = true
p.CanCollide = false
p.CanQuery = false
p.CanTouch = false
p.Parent = folder
p.Position = Vector3.new(
base.X + math.random(-200,200),
base.Y + math.random(20,200),
base.Z + math.random(-200,200)
)
table.insert(weatherParts, p)
end
weatherPartSpeed = isSnow and 0.6 or 8
weatherPartSway = isSnow
end
local function startWeather(kind)
stopWeather()
if kind == "Clear" then notify("Weather: Clear") return end
local ch = LP.Character or LP.CharacterAdded:Wait()
local hrp = ch:WaitForChild("HumanoidRootPart", 5)
if not hrp then notify("Character not ready") return end
if kind == "Fog" then
L.FogColor = Color3.fromRGB(200,200,205)
L.FogStart = 0
L.FogEnd = 60
local atm = L:FindFirstChildOfClass("Atmosphere")
if atm then atm.Density = 1 atm.Haze = 5 atm.Glare = 0 atm.Color = Color3.fromRGB(200,200,205) end
notify("Weather: Fog")
return
end
if kind == "Rain" or kind == "Thunder" then
buildRain(hrp, 250, false)
rainSound = Instance.new("Sound")
rainSound.SoundId = "rbxassetid://9064263922"
rainSound.Volume = 0.6
rainSound.Looped = true
rainSound.Parent = SG
rainSound:Play()
track(rainSound)
L.FogColor = Color3.fromRGB(120,130,140)
L.FogStart = 0
L.FogEnd = 250
if kind == "Thunder" then
L.FogColor = Color3.fromRGB(30,30,40)
L.FogEnd = 180
L.Brightness = 0.4
thunderActive = true
task.spawn(function()
while thunderActive do
task.wait(math.random(3,7))
if not thunderActive then break end
local c = LP.Character
local h = c and c:FindFirstChild("HumanoidRootPart")
if h then spawnLightningBolt(h.Position) end
local flash = Instance.new("Frame")
flash.Size = UDim2.new(1,0,1,0)
flash.BackgroundColor3 = Color3.fromRGB(255,255,255)
flash.BackgroundTransparency = 0.15
flash.BorderSizePixel = 0
flash.ZIndex = 999
flash.Parent = SG
L.Brightness = 7
task.wait(0.06)
flash.BackgroundTransparency = 0.5
L.Brightness = 2.5
task.wait(0.06)
flash.BackgroundTransparency = 0.2
L.Brightness = 5
task.wait(0.05)
flash:Destroy()
L.Brightness = 0.4
local thunder = Instance.new("Sound")
thunder.SoundId = "rbxassetid://139968319088532"
thunder.Volume = 1
thunder.Parent = SG
thunder:Play()
task.spawn(function()
task.wait(6)
if thunder then thunder:Destroy() end
end)
end
end)
end
notify("Weather: "..kind)
elseif kind == "Snow" then
buildRain(hrp, 320, true)
L.FogColor = Color3.fromRGB(220,225,235)
L.FogStart = 0
L.FogEnd = 300
notify("Weather: Snow")
end
weatherConn = R.Heartbeat:Connect(function()
local c = LP.Character
if not c then return end
local h = c:FindFirstChild("HumanoidRootPart")
if not h then return end
local base = h.Position
local sway = tick()
for _, p in pairs(weatherParts) do
if p and p.Parent then
local np = p.Position - Vector3.new(0, weatherPartSpeed, 0)
if weatherPartSway then
np = np + Vector3.new(math.sin(sway + p.Position.X) * 0.05, 0, math.cos(sway + p.Position.Z) * 0.05)
end
if np.Y < base.Y - 20 then
np = Vector3.new(
base.X + math.random(-200,200),
base.Y + 150,
base.Z + math.random(-200,200)
)
elseif (np - base).Magnitude > 350 then
np = Vector3.new(
base.X + math.random(-200,200),
base.Y + 150,
base.Z + math.random(-200,200)
)
end
p.Position = np
end
end
end)
end
mkBtn(WorldPage,"Rain",function() startWeather("Rain") end)
mkBtn(WorldPage,"Snow",function() startWeather("Snow") end)
mkBtn(WorldPage,"Fog",function() startWeather("Fog") end)
mkBtn(WorldPage,"Thunder",function() startWeather("Thunder") end)
mkBtn(WorldPage,"Clear Weather",function() startWeather("Clear") end)
_G.richieWeatherCleanup = stopWeather
end
do
mkLabel(WorldPage,"SKYBOX (Atmosphere)")
local origAtmData = nil
local curSkyBtn = nil
local skyOptions = {
{name="Day Blue", r=100, g=170, b=255, density=0.3, time=14},
{name="Sunset Orange", r=255, g=140, b=80, density=0.5, time=17.5},
{name="Sunrise Pink", r=255, g=180, b=200, density=0.5, time=6.5},
{name="Night Dark", r=15, g=20, b=45, density=0.6, time=0},
{name="Stormy Grey", r=80, g=80, b=90, density=0.8, time=14},
{name="Deep Purple", r=60, g=30, b=100, density=0.6, time=20},
{name="Alien Green", r=100, g=200, b=150, density=0.5, time=14},
{name="Golden", r=255, g=210, b=100, density=0.4, time=17},
}
local function saveOrigAtm()
if origAtmData then return end
local atm = L:FindFirstChildOfClass("Atmosphere")
if atm then
origAtmData = {
existed = true,
Color = atm.Color,
Decay = atm.Decay,
Density = atm.Density,
Haze = atm.Haze,
Glare = atm.Glare,
Offset = atm.Offset
}
else
origAtmData = { existed = false }
end
end
local function applySky(opt)
saveOrigAtm()
local atm = L:FindFirstChildOfClass("Atmosphere")
if not atm then atm = Instance.new("Atmosphere", L) end
atm.Color = Color3.fromRGB(opt.r, opt.g, opt.b)
atm.Decay = Color3.fromRGB(math.floor(opt.r*0.5), math.floor(opt.g*0.5), math.floor(opt.b*0.5))
atm.Density = opt.density
atm.Haze = 2
atm.Glare = 1
L.ColorShift_Top = Color3.fromRGB(opt.r, opt.g, opt.b)
L.ColorShift_Bottom = Color3.fromRGB(math.floor(opt.r*0.4), math.floor(opt.g*0.4), math.floor(opt.b*0.4))
L.ClockTime = opt.time
L.Brightness = 2
notify("Sky: "..opt.name)
end
local function restoreDefaultSky()
if origAtmData then
local atm = L:FindFirstChildOfClass("Atmosphere")
if origAtmData.existed then
if atm then
atm.Color = origAtmData.Color
atm.Decay = origAtmData.Decay
atm.Density = origAtmData.Density
atm.Haze = origAtmData.Haze
atm.Glare = origAtmData.Glare
atm.Offset = origAtmData.Offset
end
else
if atm then atm:Destroy() end
end
end
L.ColorShift_Top = Color3.fromRGB(0,0,0)
L.ColorShift_Bottom = Color3.fromRGB(0,0,0)
L.Brightness = origBright
L.ClockTime = 14
notify("Skybox: Default")
end
for _, opt in ipairs(skyOptions) do
mkBtn(WorldPage, opt.name, function() applySky(opt) end)
end
mkBtn(WorldPage, "Default Sky", restoreDefaultSky)
local customSkyInput = mkInp(WorldPage, "Enter custom skybox asset ID...")
customSkyInput.TextEditable = true
customSkyInput:GetPropertyChangedSignal("Text"):Connect(function()
local raw = customSkyInput.Text
local digits = raw:match("(%d+)")
if digits and digits ~= raw then
local pos = customSkyInput.CursorPosition
customSkyInput.Text = digits
customSkyInput.CursorPosition = math.min(pos, #digits + 1)
elseif digits == nil and raw ~= "" then
customSkyInput.Text = ""
end
end)
local origSkyTexture = nil
local function saveSkyTexture()
if origSkyTexture then return end
local s = L:FindFirstChildOfClass("Sky")
if s then
origSkyTexture = {
existed = true,
Bk = s.SkyboxBk, Dn = s.SkyboxDn, Ft = s.SkyboxFt,
Lf = s.SkyboxLf, Rt = s.SkyboxRt, Up = s.SkyboxUp
}
else
origSkyTexture = { existed = false }
end
end
mkBtn(WorldPage, "Apply Custom Skybox ID", function()
local id = customSkyInput.Text
if not id or id == "" then
notifyRed("Code Is Invalid!")
return
end
local fullId = "rbxassetid://"..id
saveSkyTexture()
local sky = L:FindFirstChildOfClass("Sky")
if not sky then sky = Instance.new("Sky", L) end
sky.SkyboxBk = fullId
sky.SkyboxDn = fullId
sky.SkyboxFt = fullId
sky.SkyboxLf = fullId
sky.SkyboxRt = fullId
sky.SkyboxUp = fullId
notifyGreen("Changed To "..id)
end)
-- END OF OLD BLOCK, DELETE EVERYTHING BELOW UNTIL THE NEXT LINE
_G.richieSkyCleanup = restoreDefaultSky
end
-- ============ WORLD — MISC ============
do
mkLabel(WorldPage,"MISC")
local antiAfkConn = nil
local antiAfkOn = false
local function startAntiAfk()
if antiAfkConn then antiAfkConn:Disconnect() antiAfkConn=nil end
local vu=game:GetService("VirtualUser")
antiAfkConn = LP.Idled:Connect(function()
if not antiAfkOn then return end
vu:Button2Down(Vector2.new(0,0), W.CurrentCamera.CFrame)
task.wait(1)
vu:Button2Up(Vector2.new(0,0), W.CurrentCamera.CFrame)
end)
end
mkTog(WorldPage,"Anti-AFK",function(on)
antiAfkOn = on
if on then
startAntiAfk()
notify("Anti-AFK: ON")
else
if antiAfkConn then antiAfkConn:Disconnect() antiAfkConn=nil end
notify("Anti-AFK: OFF")
end
end)
local fpsUnlockOn = false
local maxFpsValue = 240
local function applyFps()
if fpsUnlockOn then
pcall(function() setfpscap(maxFpsValue) end)
else
pcall(function() setfpscap(60) end)
end
end
mkTog(WorldPage,"FPS Unlocker",function(on)
fpsUnlockOn = on
applyFps()
notify("FPS Unlocker: "..(on and "ON" or "OFF"))
end)
mkNum(WorldPage,"Max FPS","maxFps",240,function(v)
maxFpsValue = math.clamp(math.floor(tonumber(v) or 240), 30, 999)
if fpsUnlockOn then applyFps() end
end)
end
-- ============ CONFIG ============
do
mkLabel(ConfigPage,"SAVE / LOAD")
local CONFIG_FOLDER="richiehub_configs"
local CONFIG_INDEX=CONFIG_FOLDER.."/index.txt"
pcall(function()
if not isfolder(CONFIG_FOLDER) then makefolder(CONFIG_FOLDER) end
end)
local function getConfigList()
local list={}
pcall(function()
if isfile(CONFIG_INDEX) then
local content=readfile(CONFIG_INDEX)
for name in content:gmatch("[^\n]+") do
table.insert(list, name)
end
end
end)
return list
end
local function saveConfigList(list)
pcall(function()
writefile(CONFIG_INDEX, table.concat(list, "\n"))
end)
end
local saveInp=mkInp(ConfigPage,"Enter config name...")
mkBtn(ConfigPage,"Save Config",function()
local name=saveInp.Text
if not name or name=="" then
saveInp.Text="Name required!"
return
end
local data={}
for k,v in pairs(savedValues) do data[k]=v end
local jsonStr="{"
local first=true
for k,v in pairs(data) do
if not first then jsonStr=jsonStr.."," end
jsonStr=jsonStr..'"'..k..'":'..tostring(v)
first=false
end
jsonStr=jsonStr.."}"
pcall(function()
writefile(CONFIG_FOLDER.."/"..name..".cfg", jsonStr)
local list=getConfigList()
local found=false
for _,n in pairs(list) do if n==name then found=true break end end
if not found then
table.insert(list, name)
saveConfigList(list)
end
end)
saveInp.Text="Saved: "..name
end)
local savedListFrame=Instance.new("Frame")
savedListFrame.Size=UDim2.new(1,-6,0,0)
savedListFrame.BackgroundColor3=Color3.fromRGB(30,30,36)
savedListFrame.BackgroundTransparency=0.3
savedListFrame.BorderSizePixel=0
savedListFrame.Visible=false
savedListFrame.Parent=ConfigPage
Instance.new("UICorner",savedListFrame).CornerRadius=UDim.new(0,8)
local savedListLayout=Instance.new("UIListLayout",savedListFrame)
savedListLayout.Padding=UDim.new(0,4)
savedListLayout.SortOrder=Enum.SortOrder.LayoutOrder
local function refreshSavedList()
for _,c in pairs(savedListFrame:GetChildren()) do
if c:IsA("TextButton") or c:IsA("Frame") then c:Destroy() end
end
local list=getConfigList()
if #list==0 then
savedListFrame.Visible=false
savedListFrame.Size=UDim2.new(1,-6,0,0)
return
end
savedListFrame.Visible=true
for i,name in pairs(list) do
local row=Instance.new("Frame")
row.Size=UDim2.new(1,0,0,34)
row.BackgroundTransparency=1
row.LayoutOrder=i
row.Parent=savedListFrame
local nameLbl=Instance.new("TextLabel")
nameLbl.Size=UDim2.new(0.4,0,1,0)
nameLbl.Position=UDim2.new(0,4,0,0)
nameLbl.BackgroundTransparency=1
nameLbl.Text=name
nameLbl.TextColor3=Color3.fromRGB(200,200,200)
nameLbl.Font=Enum.Font.GothamBold
nameLbl.TextSize=12
nameLbl.TextXAlignment=Enum.TextXAlignment.Left
nameLbl.Parent=row
local loadBtn=Instance.new("TextButton")
loadBtn.Size=UDim2.new(0.28,0,1,0)
loadBtn.Position=UDim2.new(0.42,0,0,0)
loadBtn.BackgroundColor3=Color3.fromRGB(80,200,120)
loadBtn.Text="Load"
loadBtn.TextColor3=Color3.fromRGB(255,255,255)
loadBtn.Font=Enum.Font.GothamBold
loadBtn.TextSize=11
loadBtn.BorderSizePixel=0
loadBtn.Parent=row
Instance.new("UICorner",loadBtn).CornerRadius=UDim.new(0,6)
loadBtn.MouseButton1Click:Connect(function()
local path=CONFIG_FOLDER.."/"..name..".cfg"
pcall(function()
if isfile(path) then
local content=readfile(path)
for k,v in content:gmatch('"([^"]+)":([%-%d%.]+)') do
local num=tonumber(v)
if num then savedValues[k]=num end
end
local ch=LP.Character
if ch and ch:FindFirstChild("Humanoid") then
local hm=ch.Humanoid
if savedValues["speed"] then hm.WalkSpeed=savedValues["speed"] end
if savedValues["jump"] then
hm.UseJumpPower=true
hm.JumpPower=savedValues["jump"]
end
end
if savedValues["fov"] then C.FieldOfView=savedValues["fov"] end
if savedValues["grav"] then W.Gravity=savedValues["grav"] end
end
end)
end)
local delBtn=Instance.new("TextButton")
delBtn.Size=UDim2.new(0.28,0,1,0)
delBtn.Position=UDim2.new(0.72,0,0,0)
delBtn.BackgroundColor3=Color3.fromRGB(180,45,45)
delBtn.Text="Delete"
delBtn.TextColor3=Color3.fromRGB(255,255,255)
delBtn.Font=Enum.Font.GothamBold
delBtn.TextSize=11
delBtn.BorderSizePixel=0
delBtn.Parent=row
Instance.new("UICorner",delBtn).CornerRadius=UDim.new(0,6)
delBtn.MouseButton1Click:Connect(function()
pcall(function() delfile(CONFIG_FOLDER.."/"..name..".cfg") end)
local newList={}
for _,n in pairs(getConfigList()) do
if n~=name then table.insert(newList, n) end
end
saveConfigList(newList)
refreshSavedList()
end)
end
savedListFrame.Size=UDim2.new(1,-6,0, 8 + #list * 38)
end
mkBtn(ConfigPage,"Show Configs",function()
savedListFrame.Visible = not savedListFrame.Visible
if savedListFrame.Visible then refreshSavedList() end
end)
end
-- ============ TARGET TAB ============
do
mkLabel(TargetPage,"TARGET PLAYER")
local targetInput=mkInp(TargetPage,"Enter target username...")
local targetResolved=Instance.new("TextLabel")
targetResolved.Size=UDim2.new(1,-6,0,20)
targetResolved.BackgroundTransparency=1
targetResolved.Text=""
targetResolved.TextColor3=Color3.fromRGB(80,200,120)
targetResolved.Font=Enum.Font.GothamBold
targetResolved.TextSize=12
targetResolved.TextXAlignment=Enum.TextXAlignment.Left
targetResolved.Parent=TargetPage
-- ============ PLAYERS LIST ============
local playersListOpen = false
local playersListFrame = Instance.new("Frame")
playersListFrame.Size = UDim2.new(1,-6,0,36)
playersListFrame.BackgroundColor3 = Color3.fromRGB(30,30,36)
playersListFrame.BackgroundTransparency = 0.2
playersListFrame.BorderSizePixel = 0
playersListFrame.Parent = TargetPage
Instance.new("UICorner",playersListFrame).CornerRadius = UDim.new(0,8)
local plToggleBtn = Instance.new("TextButton")
plToggleBtn.Size = UDim2.new(1,0,1,0)
plToggleBtn.BackgroundTransparency = 1
plToggleBtn.Text = ""
plToggleBtn.Parent = playersListFrame
local plHeader = Instance.new("TextLabel")
plHeader.Size = UDim2.new(1,-40,1,0)
plHeader.Position = UDim2.new(0,14,0,0)
plHeader.BackgroundTransparency = 1
plHeader.Text = "Show Players / عرض قائمة اللاعبين"
plHeader.TextColor3 = Color3.fromRGB(220,220,220)
plHeader.Font = Enum.Font.GothamBold
plHeader.TextSize = 13
plHeader.TextXAlignment = Enum.TextXAlignment.Left
plHeader.Parent = playersListFrame
local plArrow = Instance.new("TextLabel")
plArrow.Size = UDim2.new(0,20,1,0)
plArrow.Position = UDim2.new(1,-26,0,0)
plArrow.BackgroundTransparency = 1
plArrow.Text = "▼"
plArrow.TextColor3 = Color3.fromRGB(80,200,120)
plArrow.Font = Enum.Font.GothamBold
plArrow.TextSize = 14
plArrow.Parent = playersListFrame
local playersContainer = Instance.new("Frame")
playersContainer.Size = UDim2.new(1,-6,0,0)
playersContainer.BackgroundColor3 = Color3.fromRGB(25,25,30)
playersContainer.BackgroundTransparency = 0.3
playersContainer.BorderSizePixel = 0
playersContainer.Visible = false
playersContainer.Parent = TargetPage
Instance.new("UICorner",playersContainer).CornerRadius = UDim.new(0,8)
local pcList = Instance.new("UIListLayout",playersContainer)
pcList.Padding = UDim.new(0,4)
pcList.SortOrder = Enum.SortOrder.LayoutOrder
local function refreshPlayersList()
for _,c in pairs(playersContainer:GetChildren()) do
if c:IsA("Frame") then c:Destroy() end
end
local players = {}
for _,p in pairs(P:GetPlayers()) do
if p ~= LP then table.insert(players, p) end
end
if #players == 0 then
local empty = Instance.new("Frame")
empty.Size = UDim2.new(1,0,0,40)
empty.BackgroundTransparency = 1
empty.LayoutOrder = 1
empty.Parent = playersContainer
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1,0,1,0)
lbl.BackgroundTransparency = 1
lbl.Text = "No players"
lbl.TextColor3 = Color3.fromRGB(150,150,150)
lbl.Font = Enum.Font.Gotham
lbl.TextSize = 13
lbl.Parent = empty
playersContainer.Size = UDim2.new(1,-6,0, 8 + 40)
return
end
for i, p in ipairs(players) do
local row = Instance.new("Frame")
row.Size = UDim2.new(1,0,0,50)
row.BackgroundColor3 = Color3.fromRGB(35,35,42)
row.BackgroundTransparency = 0.4
row.BorderSizePixel = 0
row.LayoutOrder = i
row.Parent = playersContainer
Instance.new("UICorner",row).CornerRadius = UDim.new(0,6)
local avatar = Instance.new("ImageLabel")
avatar.Size = UDim2.new(0, 38, 0, 38)
avatar.Position = UDim2.new(0, 6, 0.5, -19)
avatar.BackgroundColor3 = Color3.fromRGB(60,60,70)
avatar.BorderSizePixel = 0
avatar.Image = ""
avatar.Parent = row
Instance.new("UICorner",avatar).CornerRadius = UDim.new(1,0)
pcall(function()
local thumb = P:GetUserThumbnailAsync(p.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size100x100)
avatar.Image = thumb
end)
local nameLbl = Instance.new("TextLabel")
nameLbl.Size = UDim2.new(1,-60,0,22)
nameLbl.Position = UDim2.new(0, 52, 0, 4)
nameLbl.BackgroundTransparency = 1
nameLbl.Text = p.DisplayName
nameLbl.TextColor3 = Color3.fromRGB(240,240,240)
nameLbl.Font = Enum.Font.GothamBold
nameLbl.TextSize = 13
nameLbl.TextXAlignment = Enum.TextXAlignment.Left
nameLbl.TextTruncate = Enum.TextTruncate.AtEnd
nameLbl.Parent = row
local userLbl = Instance.new("TextLabel")
userLbl.Size = UDim2.new(1,-60,0,16)
userLbl.Position = UDim2.new(0, 52, 0, 26)
userLbl.BackgroundTransparency = 1
userLbl.Text = "@"..p.Name
userLbl.TextColor3 = Color3.fromRGB(140,140,150)
userLbl.Font = Enum.Font.Gotham
userLbl.TextSize = 11
userLbl.TextXAlignment = Enum.TextXAlignment.Left
userLbl.TextTruncate = Enum.TextTruncate.AtEnd
userLbl.Parent = row
local clickBtn = Instance.new("TextButton")
clickBtn.Size = UDim2.new(1,0,1,0)
clickBtn.BackgroundTransparency = 1
clickBtn.Text = ""
clickBtn.Parent = row
clickBtn.MouseButton1Click:Connect(function()
targetInput.Text = p.Name
targetResolved.Text = "✓ "..p.Name
targetResolved.TextColor3 = Color3.fromRGB(80,200,120)
_G.richieTarget = p
_G.richieTargetName = p.Name
notify("Target: "..p.Name)
end)
end
playersContainer.Size = UDim2.new(1,-6,0, 8 + #players * 54)
end
plToggleBtn.MouseButton1Click:Connect(function()
playersListOpen = not playersListOpen
playersContainer.Visible = playersListOpen
plArrow.Text = playersListOpen and "▲" or "▼"
if playersListOpen then refreshPlayersList() end
end)
task.spawn(function()
while true do
task.wait(2)
if playersListOpen then refreshPlayersList() end
end
end)
local function resolveTarget(q)
if not q or q=="" then return nil,"" end
q=q:lower()
for _,p in pairs(P:GetPlayers()) do
if p~=LP and p.Name:lower()==q then return p,p.Name end
end
local m={}
for _,p in pairs(P:GetPlayers()) do
if p~=LP and p.Name:lower():sub(1,#q)==q then table.insert(m,p) end
end
if #m==1 then return m[1],m[1].Name end
if #m==0 then return nil,"" end
return nil,"user not found."
end
local lastUserEdit=0
local lastResolved=""
targetInput:GetPropertyChangedSignal("Text"):Connect(function()
local text=targetInput.Text
if text=="" then
_G.richieTarget=nil
_G.richieTargetName=""
targetResolved.Text=""
lastResolved=""
return
end
if text==lastResolved then return end
lastUserEdit=tick()
task.delay(0.6,function()
if tick()-lastUserEdit<0.5 then return end
local p,result=resolveTarget(targetInput.Text)
if p then
_G.richieTarget=p
_G.richieTargetName=p.Name
targetResolved.Text="✓ "..p.Name
targetResolved.TextColor3=Color3.fromRGB(80,200,120)
if targetInput.Text~=p.Name then
lastResolved=p.Name
targetInput.Text=p.Name
targetInput.CursorPosition=#p.Name+1
end
elseif result=="user not found." then
_G.richieTarget=nil
_G.richieTargetName=""
targetResolved.Text="user not found."
targetResolved.TextColor3=Color3.fromRGB(255,80,80)
else
_G.richieTarget=nil
_G.richieTargetName=""
targetResolved.Text=""
end
end)
end)
local arrowOpen=true
local arrowBtn=Instance.new("TextButton")
arrowBtn.Size=UDim2.new(1,-6,0,34)
arrowBtn.BackgroundColor3=Color3.fromRGB(30,30,36)
arrowBtn.BackgroundTransparency=0.3
arrowBtn.Text=""
arrowBtn.BorderSizePixel=0
arrowBtn.AutoButtonColor=false
arrowBtn.Parent=TargetPage
Instance.new("UICorner",arrowBtn).CornerRadius=UDim.new(0,8)
local arrowLabel=Instance.new("TextLabel")
arrowLabel.Size=UDim2.new(1,-40,1,0)
arrowLabel.Position=UDim2.new(0,14,0,0)
arrowLabel.BackgroundTransparency=1
arrowLabel.Text="Target Actions"
arrowLabel.TextColor3=Color3.fromRGB(220,220,220)
arrowLabel.Font=Enum.Font.GothamSemibold
arrowLabel.TextSize=13
arrowLabel.TextXAlignment=Enum.TextXAlignment.Left
arrowLabel.Parent=arrowBtn
local arrowIcon=Instance.new("TextLabel")
arrowIcon.Size=UDim2.new(0,20,1,0)
arrowIcon.Position=UDim2.new(1,-26,0,0)
arrowIcon.BackgroundTransparency=1
arrowIcon.Text="▼"
arrowIcon.TextColor3=Color3.fromRGB(80,200,120)
arrowIcon.Font=Enum.Font.GothamBold
arrowIcon.TextSize=12
arrowIcon.Parent=arrowBtn
local targetContainer=Instance.new("Frame")
targetContainer.Size=UDim2.new(1,-6,0,0)
targetContainer.AutomaticSize=Enum.AutomaticSize.Y
targetContainer.BackgroundTransparency=1
targetContainer.Parent=TargetPage
local targetLayout=Instance.new("UIListLayout",targetContainer)
targetLayout.Padding=UDim.new(0,6)
targetLayout.SortOrder=Enum.SortOrder.LayoutOrder
arrowBtn.MouseButton1Click:Connect(function()
arrowOpen=not arrowOpen
targetContainer.Visible=arrowOpen
arrowIcon.Text=arrowOpen and "▼" or "▶"
end)
_G.spectateC=nil
mkTog(targetContainer,"Spectate",function(on)
if on then
_G.spectateC=R.RenderStepped:Connect(function()
local tg=_G.richieTarget
if tg and tg.Character and tg.Character:FindFirstChild("Humanoid") then
C.CameraSubject=tg.Character.Humanoid
end
end)
else
if _G.spectateC then _G.spectateC:Disconnect() _G.spectateC=nil end
if LP.Character and LP.Character:FindFirstChild("Humanoid") then
C.CameraSubject=LP.Character.Humanoid
end
end
end)
mkBtn(targetContainer,"Teleport to Target",function()
local tg=_G.richieTarget
if not tg then return end
local ch=getCh()
local hrp=ch:FindFirstChild("HumanoidRootPart")
if hrp and tg.Character and tg.Character:FindFirstChild("HumanoidRootPart") then
hrp.CFrame=tg.Character.HumanoidRootPart.CFrame*CFrame.new(0,3,0)
end
end)
_G.targetEspC=nil
mkTog(targetContainer,"ESP Target",function(on)
if on then
_G.targetEspC=R.Heartbeat:Connect(function()
local tg=_G.richieTarget
if tg and tg.Character then
if not tg.Character:FindFirstChild("RichieHighlight") then
local hl=Instance.new("Highlight")
hl.Name="RichieHighlight"
hl.FillColor=rgbC(espColors.esp)
hl.OutlineColor=Color3.fromRGB(255,255,255)
hl.FillTransparency=0.5
hl.Adornee=tg.Character
hl.Parent=tg.Character
end
end
end)
else
if _G.targetEspC then _G.targetEspC:Disconnect() _G.targetEspC=nil end
for _,p in pairs(P:GetPlayers()) do
if p.Character then
local h=p.Character:FindFirstChild("RichieHighlight")
if h then h:Destroy() end
end
end
end
end)
_G.targetDistGui=nil
_G.targetDistC=nil
mkTog(targetContainer,"Distance ESP",function(on)
if on then
_G.targetDistC=R.Heartbeat:Connect(function()
local tg=_G.richieTarget
if not tg or not tg.Character then
if _G.targetDistGui then _G.targetDistGui:Destroy() _G.targetDistGui=nil end
return
end
local head=tg.Character:FindFirstChild("Head")
local myHrp=LP.Character and LP.Character:FindFirstChild("HumanoidRootPart")
local tHrp=tg.Character:FindFirstChild("HumanoidRootPart") or tg.Character:FindFirstChild("UpperTorso") or tg.Character:FindFirstChild("Torso") or tg.Character:FindFirstChildWhichIsA("BasePart")
if not head or not myHrp or not tHrp then return end
if not _G.targetDistGui or not _G.targetDistGui.Parent then
_G.targetDistGui=Instance.new("BillboardGui")
_G.targetDistGui.Size=UDim2.new(0,150,0,20)
_G.targetDistGui.StudsOffset=Vector3.new(0,4,0)
_G.targetDistGui.AlwaysOnTop=true
_G.targetDistGui.Adornee=head
_G.targetDistGui.Parent=head
local lbl=Instance.new("TextLabel")
lbl.Name="DistLabel"
lbl.Size=UDim2.new(1,0,1,0)
lbl.BackgroundTransparency=1
lbl.TextColor3=Color3.fromRGB(80,255,80)
lbl.TextStrokeTransparency=0
lbl.Font=Enum.Font.GothamBold
lbl.TextSize=14
lbl.Parent=_G.targetDistGui
end
local d=math.floor((myHrp.Position-tHrp.Position).Magnitude)
local lbl=_G.targetDistGui:FindFirstChild("DistLabel")
if lbl then lbl.Text=d.." studs" end
end)
else
if _G.targetDistC then _G.targetDistC:Disconnect() _G.targetDistC=nil end
if _G.targetDistGui then _G.targetDistGui:Destroy() _G.targetDistGui=nil end
end
end)
_G.targetNameGui=nil
_G.targetNameC=nil
mkTog(targetContainer,"Name ESP",function(on)
if on then
_G.targetNameC=R.Heartbeat:Connect(function()
local tg=_G.richieTarget
if not tg or not tg.Character then
if _G.targetNameGui then _G.targetNameGui:Destroy() _G.targetNameGui=nil end
return
end
local head=tg.Character:FindFirstChild("Head") or tg.Character:FindFirstChild("UpperTorso") or tg.Character:FindFirstChild("Torso") or tg.Character:FindFirstChildWhichIsA("BasePart")
if not head then return end
if not _G.targetNameGui or not _G.targetNameGui.Parent then
_G.targetNameGui=Instance.new("BillboardGui")
_G.targetNameGui.Size=UDim2.new(0,200,0,30)
_G.targetNameGui.StudsOffset=Vector3.new(0,3,0)
_G.targetNameGui.AlwaysOnTop=true
_G.targetNameGui.Adornee=head
_G.targetNameGui.Parent=head
local lbl=Instance.new("TextLabel")
lbl.Size=UDim2.new(1,0,1,0)
lbl.BackgroundTransparency=1
lbl.Text=tg.Name
lbl.TextColor3=Color3.fromRGB(255,80,80)
lbl.TextStrokeTransparency=0
lbl.Font=Enum.Font.GothamBold
lbl.TextSize=14
lbl.Parent=_G.targetNameGui
end
end)
else
if _G.targetNameC then _G.targetNameC:Disconnect() _G.targetNameC=nil end
if _G.targetNameGui then _G.targetNameGui:Destroy() _G.targetNameGui=nil end
end
end)
_G.targetBoxGui=nil
_G.targetBoxC=nil
mkTog(targetContainer,"Box ESP",function(on)
if on then
_G.targetBoxC=R.Heartbeat:Connect(function()
local tg=_G.richieTarget
if not tg or not tg.Character then
if _G.targetBoxGui then _G.targetBoxGui:Destroy() _G.targetBoxGui=nil end
return
end
local hrp=tg.Character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
if not _G.targetBoxGui or not _G.targetBoxGui.Parent then
_G.targetBoxGui=Instance.new("BillboardGui")
_G.targetBoxGui.Size=UDim2.new(0,40,0,60)
_G.targetBoxGui.AlwaysOnTop=true
_G.targetBoxGui.Adornee=hrp
_G.targetBoxGui.Parent=hrp
local fr=Instance.new("Frame")
fr.Size=UDim2.new(1,0,1,0)
fr.BackgroundTransparency=1
fr.Parent=_G.targetBoxGui
local stroke=Instance.new("UIStroke",fr)
stroke.Thickness=2
local ec=_G.richieEspColors and _G.richieEspColors.box; stroke.Color=ec and Color3.fromRGB(ec.r,ec.g,ec.b) or Color3.fromRGB(255,80,80)
Instance.new("UICorner",fr).CornerRadius=UDim.new(0,6)
end
end)
else
if _G.targetBoxC then _G.targetBoxC:Disconnect() _G.targetBoxC=nil end
if _G.targetBoxGui then _G.targetBoxGui:Destroy() _G.targetBoxGui=nil end
end
end)
_G.targetHpGui=nil
_G.targetHpC=nil
mkTog(targetContainer,"Health Bar ESP",function(on)
if on then
_G.targetHpC=R.Heartbeat:Connect(function()
local tg=_G.richieTarget
if not tg or not tg.Character then
if _G.targetHpGui then _G.targetHpGui:Destroy() _G.targetHpGui=nil end
return
end
local hrp=tg.Character:FindFirstChild("HumanoidRootPart")
local hm=tg.Character:FindFirstChild("Humanoid")
if not hrp or not hm then return end
if not _G.targetHpGui or not _G.targetHpGui.Parent then
_G.targetHpGui=Instance.new("BillboardGui")
_G.targetHpGui.Size=UDim2.new(0,50,0,6)
_G.targetHpGui.StudsOffset=Vector3.new(0,-3,0)
_G.targetHpGui.AlwaysOnTop=true
_G.targetHpGui.Adornee=hrp
_G.targetHpGui.Parent=hrp
local fill=Instance.new("Frame")
fill.Name="HpFill"
fill.Size=UDim2.new(1,0,1,0)
fill.BackgroundColor3=Color3.fromRGB(80,255,80)
fill.BorderSizePixel=0
fill.Parent=_G.targetHpGui
Instance.new("UICorner",fill).CornerRadius=UDim.new(1,0)
end
local ratio=math.clamp(hm.Health/hm.MaxHealth,0,1)
local fill=_G.targetHpGui:FindFirstChild("HpFill")
if fill then
fill.Size=UDim2.new(ratio,0,1,0)
if ratio<0.3 then
fill.BackgroundColor3=Color3.fromRGB(255,80,80)
elseif ratio<0.6 then
fill.BackgroundColor3=Color3.fromRGB(255,220,80)
else
fill.BackgroundColor3=Color3.fromRGB(80,255,80)
end
end
end)
else
if _G.targetHpC then _G.targetHpC:Disconnect() _G.targetHpC=nil end
if _G.targetHpGui then _G.targetHpGui:Destroy() _G.targetHpGui=nil end
end
end)
_G.camlockC=nil
mkTog(targetContainer,"Camlock",function(on)
if on then
_G.camlockC=R.RenderStepped:Connect(function()
local tg=_G.richieTarget
local th=tg and tg.Character and (tg.Character:FindFirstChild("Head") or tg.Character:FindFirstChild("UpperTorso") or tg.Character:FindFirstChild("Torso"))
if tg and tg.Character and th then
C.CFrame=CFrame.new(C.CFrame.Position, th.Position)
end
end)
else
if _G.camlockC then _G.camlockC:Disconnect() _G.camlockC=nil end
end
end)
-- ============ MULTI TARGET ============
do
mkLabel(TargetPage,"MULTI TARGET")
local multiSelected = {}
_G.richieMultiSelected = multiSelected
local multiOn = {esp=false, box=false, name=false, health=false, dist=false}
local multiGuis = {}
local function destroyMultiData(p)
local data = multiGuis[p]
if not data then return end
if data.hl then data.hl:Destroy() end
if data.nameBg then data.nameBg:Destroy() end
if data.box then data.box:Destroy() end
if data.hpBg then data.hpBg:Destroy() end
if data.distBg then data.distBg:Destroy() end
if data.hpConn then data.hpConn:Disconnect() end
multiGuis[p] = nil
end
local function clearAllMultiData()
for p, _ in pairs(multiGuis) do
destroyMultiData(p)
end
multiGuis = {}
end
local function applyMultiFeatures(p)
if not p.Character then return end
local char = p.Character
local hrp = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso") or char:FindFirstChildWhichIsA("BasePart")
local head = char:FindFirstChild("Head") or hrp
local hm = char:FindFirstChild("Humanoid") or char:FindFirstChildOfClass("Humanoid")
if not hrp or not head or not hm then return end
local data = multiGuis[p] or {p = p}
multiGuis[p] = data
if multiOn.esp then
if not data.hl or not data.hl.Parent then
local hl = Instance.new("Highlight")
hl.Name = "RichieMultiHL"
hl.FillColor = Color3.fromRGB(80, 200, 255)
hl.OutlineColor = Color3.fromRGB(255, 255, 255)
hl.FillTransparency = 0.5
hl.Adornee = char
hl.Parent = char
data.hl = hl
end
else
if data.hl then data.hl:Destroy() data.hl = nil end
end
if multiOn.name then
if not data.nameBg or not data.nameBg.Parent then
local nameBg = Instance.new("BillboardGui")
nameBg.Size = UDim2.new(0, 200, 0, 30)
nameBg.StudsOffset = Vector3.new(0, 3, 0)
nameBg.AlwaysOnTop = true
nameBg.Adornee = head
nameBg.Parent = head
local nameLbl = Instance.new("TextLabel")
nameLbl.Size = UDim2.new(1,0,1,0)
nameLbl.BackgroundTransparency = 1
nameLbl.Text = p.Name
nameLbl.TextColor3 = Color3.fromRGB(80, 200, 255)
nameLbl.TextStrokeTransparency = 0
nameLbl.Font = Enum.Font.GothamBold
nameLbl.TextSize = 14
nameLbl.Parent = nameBg
data.nameBg = nameBg
end
else
if data.nameBg then data.nameBg:Destroy() data.nameBg = nil end
end
if multiOn.box then
if not data.box or not data.box.Parent then
local box = Instance.new("BillboardGui")
box.Size = UDim2.new(0, 40, 0, 60)
box.AlwaysOnTop = true
box.Adornee = hrp
box.Parent = hrp
local boxFr = Instance.new("Frame")
boxFr.Size = UDim2.new(1,0,1,0)
boxFr.BackgroundTransparency = 1
boxFr.Parent = box
local boxStroke = Instance.new("UIStroke", boxFr)
boxStroke.Thickness = 2
boxStroke.Color = Color3.fromRGB(80, 200, 255)
Instance.new("UICorner", boxFr).CornerRadius = UDim.new(0, 6)
data.box = box
end
else
if data.box then data.box:Destroy() data.box = nil end
end
if multiOn.health then
if not data.hpBg or not data.hpBg.Parent then
local hpBg = Instance.new("BillboardGui")
hpBg.Size = UDim2.new(0, 50, 0, 6)
hpBg.StudsOffset = Vector3.new(0, -3, 0)
hpBg.AlwaysOnTop = true
hpBg.Adornee = hrp
hpBg.Parent = hrp
local hpFill = Instance.new("Frame")
hpFill.Size = UDim2.new(1,0,1,0)
hpFill.BackgroundColor3 = Color3.fromRGB(80, 255, 80)
hpFill.BorderSizePixel = 0
hpFill.Parent = hpBg
Instance.new("UICorner", hpFill).CornerRadius = UDim.new(1, 0)
local hpConn = hm.HealthChanged:Connect(function(h)
local ratio = math.clamp(h/hm.MaxHealth, 0, 1)
hpFill.Size = UDim2.new(ratio, 0, 1, 0)
if ratio < 0.3 then
hpFill.BackgroundColor3 = Color3.fromRGB(255,80,80)
elseif ratio < 0.6 then
hpFill.BackgroundColor3 = Color3.fromRGB(255,220,80)
else
hpFill.BackgroundColor3 = Color3.fromRGB(80,255,80)
end
end)
data.hpBg = hpBg
data.hpConn = hpConn
end
else
if data.hpBg then data.hpBg:Destroy() data.hpBg = nil end
if data.hpConn then data.hpConn:Disconnect() data.hpConn = nil end
end
if multiOn.dist then
if not data.distBg or not data.distBg.Parent then
local distBg = Instance.new("BillboardGui")
distBg.Size = UDim2.new(0, 150, 0, 20)
distBg.StudsOffset = Vector3.new(0, 4.5, 0)
distBg.AlwaysOnTop = true
distBg.Adornee = head
distBg.Parent = head
local distLbl = Instance.new("TextLabel")
distLbl.Size = UDim2.new(1,0,1,0)
distLbl.BackgroundTransparency = 1
distLbl.Text = "0 studs"
distLbl.TextColor3 = Color3.fromRGB(80, 200, 255)
distLbl.TextStrokeTransparency = 0
distLbl.Font = Enum.Font.GothamBold
distLbl.TextSize = 12
distLbl.Parent = distBg
data.distBg = distBg
data.distLbl = distLbl
end
else
if data.distBg then data.distBg:Destroy() data.distBg = nil end
end
end
task.spawn(function()
while true do
task.wait(0.2)
local myHrp = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart")
for p, data in pairs(multiGuis) do
if data.distLbl and data.distBg and data.distBg.Parent and myHrp and p.Character then
local tHrp = p.Character:FindFirstChild("HumanoidRootPart") or p.Character:FindFirstChild("UpperTorso") or p.Character:FindFirstChild("Torso")
if tHrp then
local d = math.floor((myHrp.Position - tHrp.Position).Magnitude)
data.distLbl.Text = d.." studs"
end
end
end
end
end)
local multiContainer = Instance.new("Frame")
multiContainer.Size = UDim2.new(1,-6,0,0)
multiContainer.BackgroundColor3 = Color3.fromRGB(25,25,30)
multiContainer.BackgroundTransparency = 0.3
multiContainer.BorderSizePixel = 0
multiContainer.Visible = false
multiContainer.Parent = TargetPage
Instance.new("UICorner",multiContainer).CornerRadius = UDim.new(0,8)
local multiList = Instance.new("UIListLayout",multiContainer)
multiList.Padding = UDim.new(0,4)
multiList.SortOrder = Enum.SortOrder.LayoutOrder
local multiToggleBtn = Instance.new("TextButton")
multiToggleBtn.Size = UDim2.new(1,-6,0,36)
multiToggleBtn.BackgroundColor3 = Color3.fromRGB(30,30,36)
multiToggleBtn.BackgroundTransparency = 0.2
multiToggleBtn.Text = "Show Multi-Target List ▼"
multiToggleBtn.TextColor3 = Color3.fromRGB(220,220,220)
multiToggleBtn.Font = Enum.Font.GothamBold
multiToggleBtn.TextSize = 13
multiToggleBtn.BorderSizePixel = 0
multiToggleBtn.AutoButtonColor = false
multiToggleBtn.Parent = TargetPage
Instance.new("UICorner",multiToggleBtn).CornerRadius = UDim.new(0,8)
local multiToggleOpen = false
local function refreshMultiList()
for _, c in pairs(multiContainer:GetChildren()) do
if c:IsA("Frame") then c:Destroy() end
end
local players = {}
for _, p in pairs(P:GetPlayers()) do
if p ~= LP then table.insert(players, p) end
end
if #players == 0 then
local empty = Instance.new("Frame")
empty.Size = UDim2.new(1,0,0,40)
empty.BackgroundTransparency = 1
empty.LayoutOrder = 1
empty.Parent = multiContainer
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1,0,1,0)
lbl.BackgroundTransparency = 1
lbl.Text = "No players"
lbl.TextColor3 = Color3.fromRGB(150,150,150)
lbl.Font = Enum.Font.Gotham
lbl.TextSize = 13
lbl.Parent = empty
multiContainer.Size = UDim2.new(1,-6,0, 8 + 40)
return
end
for i, p in ipairs(players) do
local row = Instance.new("Frame")
row.Size = UDim2.new(1,-8,0,44)
row.Position = UDim2.new(0,4,0,0)
row.BackgroundColor3 = Color3.fromRGB(35,35,42)
row.BackgroundTransparency = 0.4
row.BorderSizePixel = 0
row.LayoutOrder = i
row.Parent = multiContainer
Instance.new("UICorner",row).CornerRadius = UDim.new(0,6)
local avatar = Instance.new("ImageLabel")
avatar.Size = UDim2.new(0, 32, 0, 32)
avatar.Position = UDim2.new(0, 6, 0.5, -16)
avatar.BackgroundColor3 = Color3.fromRGB(60,60,70)
avatar.BorderSizePixel = 0
avatar.Parent = row
Instance.new("UICorner",avatar).CornerRadius = UDim.new(1,0)
pcall(function()
local thumb = P:GetUserThumbnailAsync(p.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size100x100)
avatar.Image = thumb
end)
local nameLbl = Instance.new("TextLabel")
nameLbl.Size = UDim2.new(1,-90,0,20)
nameLbl.Position = UDim2.new(0, 44, 0, 4)
nameLbl.BackgroundTransparency = 1
nameLbl.Text = p.DisplayName
nameLbl.TextColor3 = Color3.fromRGB(240,240,240)
nameLbl.Font = Enum.Font.GothamBold
nameLbl.TextSize = 12
nameLbl.TextXAlignment = Enum.TextXAlignment.Left
nameLbl.TextTruncate = Enum.TextTruncate.AtEnd
nameLbl.Parent = row
local userLbl = Instance.new("TextLabel")
userLbl.Size = UDim2.new(1,-90,0,14)
userLbl.Position = UDim2.new(0, 44, 0, 24)
userLbl.BackgroundTransparency = 1
userLbl.Text = "@"..p.Name
userLbl.TextColor3 = Color3.fromRGB(140,140,150)
userLbl.Font = Enum.Font.Gotham
userLbl.TextSize = 10
userLbl.TextXAlignment = Enum.TextXAlignment.Left
userLbl.TextTruncate = Enum.TextTruncate.AtEnd
userLbl.Parent = row
local checkbox = Instance.new("Frame")
checkbox.Size = UDim2.new(0, 22, 0, 22)
checkbox.Position = UDim2.new(1, -30, 0.5, -11)
checkbox.BackgroundColor3 = multiSelected[p] and Color3.fromRGB(80,200,120) or Color3.fromRGB(50,50,60)
checkbox.BorderSizePixel = 0
checkbox.Parent = row
Instance.new("UICorner",checkbox).CornerRadius = UDim.new(0,5)
local checkMark = Instance.new("TextLabel")
checkMark.Size = UDim2.new(1,0,1,0)
checkMark.BackgroundTransparency = 1
checkMark.Text = multiSelected[p] and "✓" or ""
checkMark.TextColor3 = Color3.fromRGB(255,255,255)
checkMark.Font = Enum.Font.GothamBold
checkMark.TextSize = 14
checkMark.Parent = checkbox
local click = Instance.new("TextButton")
click.Size = UDim2.new(1,0,1,0)
click.BackgroundTransparency = 1
click.Text = ""
click.Parent = row
click.MouseButton1Click:Connect(function()
multiSelected[p] = not multiSelected[p]
checkbox.BackgroundColor3 = multiSelected[p] and Color3.fromRGB(80,200,120) or Color3.fromRGB(50,50,60)
checkMark.Text = multiSelected[p] and "✓" or ""
if multiSelected[p] then
applyMultiFeatures(p)
else
destroyMultiData(p)
end
end)
end
multiContainer.Size = UDim2.new(1,-6,0, 8 + #players * 48)
end
multiToggleBtn.MouseButton1Click:Connect(function()
multiToggleOpen = not multiToggleOpen
multiContainer.Visible = multiToggleOpen
multiToggleBtn.Text = multiToggleOpen and "Hide Multi-Target List ▲" or "Show Multi-Target List ▼"
if multiToggleOpen then refreshMultiList() end
end)
task.spawn(function()
while true do
task.wait(1.5)
if multiToggleOpen then
refreshMultiList()
end
end
end)
mkTog(TargetPage,"Multi ESP",function(on)
multiOn.esp = on
for p, sel in pairs(multiSelected) do
if sel and p.Character then applyMultiFeatures(p) end
end
end)
mkTog(TargetPage,"Multi Box ESP",function(on)
multiOn.box = on
for p, sel in pairs(multiSelected) do
if sel and p.Character then applyMultiFeatures(p) end
end
end)
mkTog(TargetPage,"Multi Name ESP",function(on)
multiOn.name = on
for p, sel in pairs(multiSelected) do
if sel and p.Character then applyMultiFeatures(p) end
end
end)
mkTog(TargetPage,"Multi Health Bar ESP",function(on)
multiOn.health = on
for p, sel in pairs(multiSelected) do
if sel and p.Character then applyMultiFeatures(p) end
end
end)
mkTog(TargetPage,"Multi Distance ESP",function(on)
multiOn.dist = on
for p, sel in pairs(multiSelected) do
if sel and p.Character then applyMultiFeatures(p) end
end
end)
mkBtn(TargetPage,"Clear Multi Selection",function()
multiSelected = {}
clearAllMultiData()
refreshMultiList()
notify("Multi selection cleared")
end)
end
end
-- ============ RESPAWN ============
local function applySaved(ch)
if not ch then return end
local hm=ch:WaitForChild("Humanoid",10)
if not hm then return end
task.wait(1.5)
hm.WalkSpeed=savedValues["speed"] or 16
hm.UseJumpPower=true
hm.JumpPower=savedValues["jump"] or 50
C.FieldOfView=savedValues["fov"] or 70
W.Gravity=savedValues["grav"] or origGrav
end
LP.CharacterAdded:Connect(function()
if feInvisData and feInvisData.seat then
feInvisData.seat:Destroy()
end
feInvisData=nil
feInvisOn=false
end)
LP.CharacterAdded:Connect(function(ch)
task.wait(0.5)
applySaved(ch)
end)
if LP.Character then
task.spawn(function() applySaved(LP.Character) end)
end
-- ============ CLOSE ============
Cl.MouseButton1Click:Connect(function() pcall(function()
pcall(stopFly)
pcall(_G.richieCombatCleanup)
pcall(_G.richieWeatherCleanup)
pcall(_G.richieSkyCleanup)
pcall(_G.richieVisualsCleanup)
for _, p in pairs(P:GetPlayers()) do
if p.Character then
for _, v in pairs(p.Character:GetDescendants()) do
if v:IsA("Highlight") and (v.Name=="RichieHighlight" or v.Name=="RichieMultiHL") then v:Destroy() end
if v:IsA("BillboardGui") and v.Name~="" and v.Parent then end
end
end
end
for _, v in pairs(W:GetDescendants()) do
if v.Name=="RichieHitboxEsp" or v.Name=="RichieRain" or v.Name=="RichieSnow" or v.Name=="RichieBolt" or v.Name=="RichieColorSky" or v.Name=="RichieFEChair" or v.Name=="RichieWeather" then
pcall(function() v:Destroy() end)
end
end
for _, v in pairs(L:GetChildren()) do
if v.Name=="RichieColorSky" then v:Destroy() end
end
if _G.richieIJ then _G.richieIJ:Disconnect() end
if _G.richieNoclip then _G.richieNoclip:Disconnect() end
if _G.richieAntiSit then _G.richieAntiSit:Disconnect() end
if _G.richieAntiSitBlock then _G.richieAntiSitBlock:Disconnect() end
if _G.richieAntiFling then _G.richieAntiFling:Disconnect() end
if _G.richieFreeze then _G.richieFreeze:Disconnect() end
if _G.richieAntiKick then _G.richieAntiKick:Disconnect() end
if _G.spectateC then _G.spectateC:Disconnect() end
if _G.targetEspC then _G.targetEspC:Disconnect() end
if _G.targetDistC then _G.targetDistC:Disconnect() end
if _G.targetDistGui then _G.targetDistGui:Destroy() end
if _G.targetNameC then _G.targetNameC:Disconnect() end
if _G.targetNameGui then _G.targetNameGui:Destroy() end
if _G.targetBoxC then _G.targetBoxC:Disconnect() end
if _G.targetBoxGui then _G.targetBoxGui:Destroy() end
if _G.targetHpC then _G.targetHpC:Disconnect() end
if _G.targetHpGui then _G.targetHpGui:Destroy() end
if _G.camlockC then _G.camlockC:Disconnect() end
local ch=LP.Character
if ch then
local hm=ch:FindFirstChild("Humanoid")
if hm then
hm.WalkSpeed=16
hm.UseJumpPower=true
hm.JumpPower=50
hm.PlatformStand=false
hm.DisplayDistanceType=Enum.HumanoidDisplayDistanceType.Viewer
end
for _,p in pairs(ch:GetDescendants()) do
if p:IsA("BasePart") then
p.CanCollide=true
p.Transparency=0
p.Anchored=false
end
end
end
L.Ambient=origAmb
L.OutdoorAmbient=origOutdoor
L.FogStart=origFogStart
L.FogEnd=origFogEnd
L.Brightness=origBright
L.FogColor=Color3.fromRGB(192,192,192)
L.ClockTime=14
L.ColorShift_Top=Color3.fromRGB(0,0,0)
L.ColorShift_Bottom=Color3.fromRGB(0,0,0)
W.Gravity=origGrav
LP.CameraMaxZoomDistance=128
LP.CameraMinZoomDistance=0.5
C.FieldOfView=70
if C.CameraSubject ~= (LP.Character and LP.Character:FindFirstChild("Humanoid")) then
if LP.Character and LP.Character:FindFirstChild("Humanoid") then
C.CameraSubject=LP.Character.Humanoid
end
end
_G.richieTarget=nil
_G.richieTargetName=nil
_G.richieMultiSelected=nil
_G.richieEspColors=nil
_G.richieToggleState=nil
_G.richieCombatCleanup=nil
_G.richieWeatherCleanup=nil
_G.richieSkyCleanup=nil
_G.richieVisualsCleanup=nil
_G.richieARRestore=nil
_G.richieIJ=nil
_G.richieNoclip=nil
_G.richieAntiSit=nil
_G.richieAntiSitBlock=nil
_G.richieAntiFling=nil
_G.richieFreeze=nil
_G.richieAntiKick=nil
_G.spectateC=nil
_G.targetEspC=nil
_G.targetDistC=nil
_G.targetDistGui=nil
_G.targetNameC=nil
_G.targetNameGui=nil
_G.targetBoxC=nil
_G.targetBoxGui=nil
_G.targetHpC=nil
_G.targetHpGui=nil
_G.camlockC=nil
end)
for _, gui in pairs(pg:GetDescendants()) do
if gui:IsA("ScreenGui") and (gui.Name=="RichieHubUI" or gui.Name=="RichieCrosshair" or gui.Name=="RichieAimFov" or gui.Name=="RichieFovCircle") then
gui:Destroy()
end
end
for _, v in pairs(getgc and getgc(true) or {}) do
if type(v)=="table" and rawget(v,"__name")=="Richie" then end
end
end)
-- ============ KEYBINDS ============
local keybindData = {}
local listeningForKey = nil
local listeningBtn = nil
local unsupportedKeys = {
[Enum.KeyCode.W]=true,[Enum.KeyCode.A]=true,[Enum.KeyCode.S]=true,[Enum.KeyCode.D]=true,
[Enum.KeyCode.Space]=true,[Enum.KeyCode.Delete]=true,
[Enum.KeyCode.One]=true,[Enum.KeyCode.Two]=true,[Enum.KeyCode.Three]=true,
[Enum.KeyCode.Four]=true,[Enum.KeyCode.Five]=true,[Enum.KeyCode.Six]=true,
[Enum.KeyCode.Seven]=true,[Enum.KeyCode.Eight]=true,[Enum.KeyCode.Nine]=true,
[Enum.KeyCode.Zero]=true,
[Enum.KeyCode.F1]=true,[Enum.KeyCode.F2]=true,[Enum.KeyCode.F3]=true,
[Enum.KeyCode.F4]=true,[Enum.KeyCode.F5]=true,[Enum.KeyCode.F6]=true,
[Enum.KeyCode.F7]=true,[Enum.KeyCode.F8]=true,[Enum.KeyCode.F9]=true,
[Enum.KeyCode.F10]=true,[Enum.KeyCode.F11]=true,[Enum.KeyCode.F12]=true,
}
local function mkKeyHeader(parent, text)
local l=Instance.new("TextLabel")
l.Size=UDim2.new(1,-6,0,20)
l.BackgroundTransparency=1
l.Text=" ("..text..")"
l.TextColor3=Color3.fromRGB(120,120,130)
l.Font=Enum.Font.GothamBlack
l.TextSize=10
l.TextXAlignment=Enum.TextXAlignment.Left
l.Parent=parent
end
local function mkKeybindRow(parent, featureName)
local row=Instance.new("Frame")
row.Size=UDim2.new(1,-6,0,36)
row.BackgroundColor3=Color3.fromRGB(30,30,36)
row.BackgroundTransparency=0.3
row.BorderSizePixel=0
row.Parent=parent
Instance.new("UICorner",row).CornerRadius=UDim.new(0,8)
local lbl=Instance.new("TextLabel")
lbl.Size=UDim2.new(0.45,0,1,0)
lbl.Position=UDim2.new(0,14,0,0)
lbl.BackgroundTransparency=1
lbl.Text=featureName
lbl.TextColor3=Color3.fromRGB(220,220,220)
lbl.Font=Enum.Font.GothamSemibold
lbl.TextSize=13
lbl.TextXAlignment=Enum.TextXAlignment.Left
lbl.TextTruncate=Enum.TextTruncate.AtEnd
lbl.Parent=row
local btn=Instance.new("TextButton")
btn.Size=UDim2.new(0.32,0,1,-8)
btn.Position=UDim2.new(0.48,0,0,4)
btn.BackgroundColor3=Color3.fromRGB(45,45,52)
btn.BackgroundTransparency=0.2
btn.Text="+"
btn.TextColor3=Color3.fromRGB(220,220,220)
btn.Font=Enum.Font.GothamBlack
btn.TextSize=14
btn.BorderSizePixel=0
btn.AutoButtonColor=false
btn.Parent=row
Instance.new("UICorner",btn).CornerRadius=UDim.new(0,6)
local resetBtn=Instance.new("TextButton")
resetBtn.Size=UDim2.new(0.15,0,1,-8)
resetBtn.Position=UDim2.new(0.83,0,0,4)
resetBtn.BackgroundColor3=Color3.fromRGB(180,45,45)
resetBtn.BackgroundTransparency=0.2
resetBtn.Text="↺"
resetBtn.TextColor3=Color3.fromRGB(255,255,255)
resetBtn.Font=Enum.Font.GothamBlack
resetBtn.TextSize=16
resetBtn.BorderSizePixel=0
resetBtn.AutoButtonColor=false
resetBtn.Parent=row
Instance.new("UICorner",resetBtn).CornerRadius=UDim.new(0,6)
btn.MouseButton1Click:Connect(function()
if listeningForKey then return end
listeningForKey=featureName
listeningBtn=btn
btn.Text="..."
btn.TextColor3=Color3.fromRGB(80,200,120)
end)
resetBtn.MouseButton1Click:Connect(function()
keybindData[featureName] = nil
btn.Text="+"
btn.TextColor3=Color3.fromRGB(220,220,220)
end)
end
local function onKeyPress(input)
if not listeningForKey then return end
if input.UserInputType ~= Enum.UserInputType.Keyboard then return end
local key=input.KeyCode
local btn=listeningBtn
if unsupportedKeys[key] then
btn.Text="Not Allowed"
btn.TextColor3=Color3.fromRGB(255,80,80)
task.wait(1)
btn.Text="+"
btn.TextColor3=Color3.fromRGB(220,220,220)
listeningForKey=nil
listeningBtn=nil
return
end
if key==Enum.KeyCode.Unknown then return end
for otherFeature, boundKey in pairs(keybindData) do
if otherFeature ~= listeningForKey and boundKey == key then
btn.Text="In Use"
btn.TextColor3=Color3.fromRGB(255,80,80)
task.wait(1)
btn.Text="+"
btn.TextColor3=Color3.fromRGB(220,220,220)
listeningForKey=nil
listeningBtn=nil
return
end
end
keybindData[listeningForKey] = key
btn.Text=key.Name
btn.TextColor3=Color3.fromRGB(80,200,120)
listeningForKey=nil
listeningBtn=nil
end
U.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.UserInputType ~= Enum.UserInputType.Keyboard then return end
if listeningForKey then
onKeyPress(input)
return
end
for featureName, key in pairs(keybindData) do
if input.KeyCode==key then
if keybindTargets[featureName] then
local tgt=keybindTargets[featureName]
local current = _G.richieToggleState[featureName]
if current == nil then current = false end
local newState = not current
_G.richieToggleState[featureName]=newState
tgt.setState(newState)
if tgt.onChange then tgt.onChange(newState) end
notify(featureName .. ": " .. (newState and "ON" or "OFF"))
elseif keybindButtons[featureName] then
local info=keybindButtons[featureName]
if info.fire then info.fire() end
notify(featureName .. ": fired")
end
end
end
end)
mkKeyHeader(KeybindPage,"MAIN")
mkKeybindRow(KeybindPage,"Fly")
mkKeybindRow(KeybindPage,"Auto-Sprint")
mkKeybindRow(KeybindPage,"Auto-Jump")
mkKeybindRow(KeybindPage,"Infinite Zoom")
mkKeybindRow(KeybindPage,"Infinite Jump")
mkKeybindRow(KeybindPage,"Noclip")
mkKeybindRow(KeybindPage,"FE Invisible (300 up)")
mkKeybindRow(KeybindPage,"Anti-Sit")
mkKeyHeader(KeybindPage,"COMBAT")
mkKeybindRow(KeybindPage,"Aim Assist")
mkKeybindRow(KeybindPage,"Target Lock")
mkKeybindRow(KeybindPage,"Trigger Bot")
mkKeybindRow(KeybindPage,"Anti-Aim")
mkKeybindRow(KeybindPage,"Hitbox Expander")
mkKeybindRow(KeybindPage,"Hitbox ESP Preview")
mkKeyHeader(KeybindPage,"VISUALS")
mkKeybindRow(KeybindPage,"ESP (Grey)")
mkKeybindRow(KeybindPage,"Box ESP")
mkKeybindRow(KeybindPage,"Health Bar ESP")
mkKeybindRow(KeybindPage,"Name ESP")
mkKeybindRow(KeybindPage,"Distance ESP")
mkKeybindRow(KeybindPage,"Skeleton ESP")
mkKeyHeader(KeybindPage,"WORLD")
mkKeybindRow(KeybindPage,"Server Hop")
mkKeybindRow(KeybindPage,"Anti-Kick")
mkKeybindRow(KeybindPage,"Anti-AFK")
mkKeybindRow(KeybindPage,"FPS Unlocker")
mkKeybindRow(KeybindPage,"Fullbright")
mkKeybindRow(KeybindPage,"No Fog")
mkKeybindRow(KeybindPage,"Low Gravity")
mkKeybindRow(KeybindPage,"Anti-Fling")
mkKeybindRow(KeybindPage,"Freeze Self")
mkKeyHeader(KeybindPage,"ACTIONS")
mkKeybindRow(KeybindPage,"Teleport to Mouse (PC Only, In Keybinds)")
mkKeybindRow(KeybindPage,"Reset Character")
mkKeybindRow(KeybindPage,"Rejoin Server")
print("[Richie Hub] loaded")



AI?